firmware: Add common FW_FDT_PATH compile-time option

Currently, only FW_PAYLOAD has mechanism to embed external
FDT using FW_PAYLOAD_FDT_PATH compile-time option.

This patch adds a common FW_FDT_PATH compile-time option to
embed external FDT for all OpenSBI firmwares (i.e FW_JUMP,
FW_PAYLOAD, and FW_DYNAMIC).

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
Anup Patel
2020-10-14 16:03:35 +05:30
committed by Anup Patel
parent af4b50f896
commit 6ca096977d
4 changed files with 37 additions and 4 deletions

View File

@@ -51,11 +51,17 @@ case, a *FW_PAYLOAD* firmware allows embedding a flattened device tree in the
Firmware Configuration and Compilation Firmware Configuration and Compilation
-------------------------------------- --------------------------------------
All firmware types mandate the definition of the following compile time All firmware types support the following common compile time configuration
configuration parameter. parameters:
* **FW_TEXT_ADDR** - Defines the address at which the previous booting stage * **FW_TEXT_ADDR** - Defines the execution address of the OpenSBI firmware.
loads OpenSBI firmware. This configuration parameter is mandatory.
* **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
is not provided then the firmware will expect the FDT to be passed as an
argument by the prior booting stage.
* **FW_FDT_PADDING** - Optional zero bytes padding to the embedded flattened
device tree binary file specified by **FW_FDT_PATH** option.
Additionally, each firmware type as a set of type specific configuration Additionally, each firmware type as a set of type specific configuration
parameters. Detailed information for each firmware type can be found in the parameters. Detailed information for each firmware type can be found in the

View File

@@ -7,5 +7,9 @@
# Anup Patel <anup.patel@wdc.com> # Anup Patel <anup.patel@wdc.com>
# #
$(platform_build_dir)/firmware/fw_dynamic.o: $(FW_FDT_PATH)
$(platform_build_dir)/firmware/fw_jump.o: $(FW_FDT_PATH)
$(platform_build_dir)/firmware/fw_payload.o: $(FW_FDT_PATH)
$(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_PATH_FINAL) $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_PATH_FINAL)
$(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_FDT_PATH) $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_FDT_PATH)

View File

@@ -182,6 +182,11 @@ _bss_zero:
call fw_save_info call fw_save_info
MOV_5R a0, s0, a1, s1, a2, s2, a3, s3, a4, s4 MOV_5R a0, s0, a1, s1, a2, s2, a3, s3, a4, s4
#ifdef FW_FDT_PATH
/* Override previous arg1 */
la a1, fw_fdt_bin
#endif
/* Override previous arg1 */ /* Override previous arg1 */
MOV_3R s0, a0, s1, a1, s2, a2 MOV_3R s0, a0, s1, a1, s2, a2
call fw_prev_arg1 call fw_prev_arg1
@@ -668,3 +673,14 @@ _reset_regs:
csrw CSR_MSCRATCH, 0 csrw CSR_MSCRATCH, 0
ret ret
#ifdef FW_FDT_PATH
.section .rodata
.align 4
.globl fw_fdt_bin
fw_fdt_bin:
.incbin FW_FDT_PATH
#ifdef FW_FDT_PADDING
.fill FW_FDT_PADDING, 1, 0
#endif
#endif

View File

@@ -17,6 +17,13 @@ ifdef FW_TEXT_START
firmware-genflags-y += -DFW_TEXT_START=$(FW_TEXT_START) firmware-genflags-y += -DFW_TEXT_START=$(FW_TEXT_START)
endif endif
ifdef FW_FDT_PATH
firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\"
ifdef FW_FDT_PADDING
firmware-genflags-y += -DFW_FDT_PADDING=$(FW_FDT_PADDING)
endif
endif
firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
firmware-bins-$(FW_JUMP) += fw_jump.bin firmware-bins-$(FW_JUMP) += fw_jump.bin