[PATCH 1/1] firmware: provide space for firmware fixups
Anup Patel
Anup.Patel at wdc.com
Thu Oct 1 06:56:51 EDT 2020
> -----Original Message-----
> From: opensbi <opensbi-bounces at lists.infradead.org> On Behalf Of Heinrich
> Schuchardt
> Sent: 01 October 2020 15:59
> To: Atish Patra <Atish.Patra at wdc.com>
> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>; OpenSBI List
> <opensbi at lists.infradead.org>; Atish Patra <atishp at atishpatra.org>
> Subject: [PATCH 1/1] firmware: provide space for firmware fixups
>
> We expand the provided device tree by up to 1056 bytes in fixup operations.
> This space must be allocated in the firmware binary.
>
> An alternative approach would be to allocate RAM for a copy of the device
> tree but we do not have library functions for dynamic memory allocation yet.
>
> Without this patch devicetree fixups lead to memory corruption.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> firmware/fw_payload.S | 2 ++
> scripts/d2c.sh | 3 +++
> 2 files changed, 5 insertions(+)
>
> diff --git a/firmware/fw_payload.S b/firmware/fw_payload.S index
> 9805d8c..fdd082f 100644
> --- a/firmware/fw_payload.S
> +++ b/firmware/fw_payload.S
> @@ -108,6 +108,8 @@ fw_options:
> .globl fdt_bin
> fdt_bin:
> .incbin FW_PAYLOAD_FDT_PATH
> + /* space for device tree updates */
> + . = . + 0x420;
> #endif
We should not add arbitrary padding like this. Instead we should have
separate FW_PAYLOAD_FDT_PADDING options for config.mk.
>
> .section .payload, "ax", %progbits
> diff --git a/scripts/d2c.sh b/scripts/d2c.sh index 821a995..1c53a71 100755
> --- a/scripts/d2c.sh
> +++ b/scripts/d2c.sh
> @@ -62,6 +62,9 @@ printf "const char __attribute__((aligned(%s)))
> %s_start[] = {\n" "${OUTPUT_C_AL
>
> od -v -t x1 -An ${INPUT_PATH} | awk '{for (i=1; i<=NF; i++) printf " 0x%s,", $i;
> printf "\n"; }'
>
> +# Add 1056 bytes for device tree fixups echo dummy | awk '{for (j=1;
> +j<=0x42; j++) {for (i=1; i<=0x10; i++) printf " 0x00,"; printf "\n"}; }'
> +
Here again, we should not have arbitrary padding. Instead:
1) Add optional parameter to d2c.sh for amount of padding required
2) In platform/kendryte/k210/objects.mk, add line "platform-padding-k210.o = 1056"
3) Extend "compile_d2c" and make rule to convert .dtb to .c file in toplevel Makfile
> printf "};\n"
>
> printf "const unsigned long %s_size = sizeof(%s_start);\n"
> "${OUTPUT_C_PREFIX}" "${OUTPUT_C_PREFIX}"
> --
> 2.28.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Overall, this needs to be broken down into more patches:
1) Patch for adding FW_PAYLOAD_FDT_PADDING option
2) Patch for documenting FW_PAYLOAD_FDT_PADDING
3) Patch for optional padding parameter to d2c.sh
4) Patch to extend "compile_d2c" and make rule in top-level makefile
5) Patch to update platform/kendryte/k210/objects.mk
Regards,
Anup
More information about the opensbi
mailing list