firmware: use _fw_start for load address
authorXiang W <wxjstz@126.com>
Wed, 14 Jul 2021 07:14:39 +0000 (15:14 +0800)
committerAnup Patel <anup@brainfault.org>
Tue, 27 Jul 2021 09:50:49 +0000 (15:20 +0530)
The previous code uses _start as the load address, this default .entry is
the first segment, using _fw_start does not need to make this assumption.

Signed-off-by: Xiang W <wxjstz@126.com>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
firmware/fw_base.S
firmware/fw_base.ldS

index 6baf6ab..1569e60 100644 (file)
@@ -65,14 +65,14 @@ _try_lottery:
 
        /* Save load address */
        lla     t0, _load_start
-       lla     t1, _start
+       lla     t1, _fw_start
        REG_S   t1, 0(t0)
 
 #ifdef FW_PIC
        /* relocate the global table content */
        lla     t0, _link_start
        REG_L   t0, 0(t0)
-       /* t1 shall has the address of _start */
+       /* t1 shall has the address of _fw_start */
        sub     t2, t1, t0
        lla     t3, _runtime_offset
        REG_S   t2, (t3)
@@ -172,7 +172,7 @@ _relocate_copy_to_upper_loop:
        blt     t0, t1, _relocate_copy_to_upper_loop
        jr      t4
 _wait_relocate_copy_done:
-       lla     t0, _start
+       lla     t0, _fw_start
        lla     t1, _link_start
        REG_L   t1, 0(t1)
        beq     t0, t1, _wait_for_boot_hart
index 0d222da..220c043 100644 (file)
@@ -8,7 +8,7 @@
  */
 
        . = FW_TEXT_START;
-
+       /* Don't add any section between FW_TEXT_START and _fw_start */
        PROVIDE(_fw_start = .);
 
        . = ALIGN(0x1000); /* Need this to create proper sections */