firmware: Bring back FW_TEXT_START as an optional parameter

Bring back FW_TEXT_START as an optional parameter to allow users
explicitly specify compile time address for loading debug symbols.
When not specified, the FW_TEXT_START is assumed to be 0.

Fixes: d4d2582eef ("firmware: remove FW_TEXT_START")
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Tested-by: Clément Léger <cleger@rivosinc.com>
This commit is contained in:
Anup Patel 2024-05-15 09:55:50 +05:30 committed by Anup Patel
parent e3a30a2c91
commit 96f0a2e3ea
6 changed files with 16 additions and 4 deletions

View File

@ -61,6 +61,9 @@ Firmware Configuration and Compilation
All firmware types support the following common compile time configuration All firmware types support the following common compile time configuration
parameters: parameters:
* **FW_TEXT_START** - Defines the compile time address of the OpenSBI
firmware. This configuration parameter is optional and assumed to be
`0` if not specified.
* **FW_FDT_PATH** - Path to an external flattened device tree binary file to * **FW_FDT_PATH** - Path to an external flattened device tree binary file to
be embedded in the *.rodata* section of the final firmware. If this option be embedded in the *.rodata* section of the final firmware. If this option
is not provided then the firmware will expect the FDT to be passed as an is not provided then the firmware will expect the FDT to be passed as an

View File

@ -53,7 +53,9 @@ _try_lottery:
bnez a6, _wait_for_boot_hart bnez a6, _wait_for_boot_hart
/* relocate the global table content */ /* relocate the global table content */
lla t2, _fw_start li t0, FW_TEXT_START /* link start */
lla t1, _fw_start /* load start */
sub t2, t1, t0 /* load offset */
lla t0, __rel_dyn_start lla t0, __rel_dyn_start
lla t1, __rel_dyn_end lla t1, __rel_dyn_end
beq t0, t1, _relocate_done beq t0, t1, _relocate_done

View File

@ -7,7 +7,8 @@
* Anup Patel <anup.patel@wdc.com> * Anup Patel <anup.patel@wdc.com>
*/ */
/* Don't add any section before _fw_start */ . = FW_TEXT_START;
/* Don't add any section between FW_TEXT_START and _fw_start */
PROVIDE(_fw_start = .); PROVIDE(_fw_start = .);
. = ALIGN(0x1000); /* Need this to create proper sections */ . = ALIGN(0x1000); /* Need this to create proper sections */

View File

@ -15,7 +15,7 @@ SECTIONS
#include "fw_base.ldS" #include "fw_base.ldS"
#ifdef FW_PAYLOAD_OFFSET #ifdef FW_PAYLOAD_OFFSET
. = FW_PAYLOAD_OFFSET; . = FW_TEXT_START + FW_PAYLOAD_OFFSET;
#else #else
. = ALIGN(FW_PAYLOAD_ALIGN); . = ALIGN(FW_PAYLOAD_ALIGN);
#endif #endif

View File

@ -13,6 +13,12 @@ firmware-cflags-y +=
firmware-asflags-y += firmware-asflags-y +=
firmware-ldflags-y += firmware-ldflags-y +=
ifdef FW_TEXT_START
firmware-genflags-y += -DFW_TEXT_START=$(FW_TEXT_START)
else
firmware-genflags-y += -DFW_TEXT_START=0x0
endif
ifdef FW_FDT_PATH ifdef FW_FDT_PATH
firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\" firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\"
ifdef FW_FDT_PADDING ifdef FW_FDT_PADDING

View File

@ -13,7 +13,7 @@ ENTRY(_start)
SECTIONS SECTIONS
{ {
#ifdef FW_PAYLOAD_OFFSET #ifdef FW_PAYLOAD_OFFSET
. = FW_PAYLOAD_OFFSET; . = FW_TEXT_START + FW_PAYLOAD_OFFSET;
#else #else
. = ALIGN(FW_PAYLOAD_ALIGN); . = ALIGN(FW_PAYLOAD_ALIGN);
#endif #endif