Initial commit
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
From: Mauro Salvini <m.salvini@koansoftware.com>
|
||||
To: u-boot@lists.denx.de
|
||||
Subject: [PATCH] rpi: always set fdt_addr with firmware-provided FDT address
|
||||
Date: Wed, 12 May 2021 14:39:45 +0200 [thread overview]
|
||||
Message-ID: <20210512123945.25649-1-m.salvini@koansoftware.com> (raw)
|
||||
|
||||
Raspberry firmware prepares the FDT blob in memory at an address
|
||||
that depends on both the memory size and the blob size [1].
|
||||
After commit ade243a211d6 ("rpi: passthrough of the firmware provided FDT
|
||||
blob") this FDT is passed to kernel through fdt_addr environment variable,
|
||||
handled in set_fdt_addr() function in board file.
|
||||
|
||||
When u-boot environment is persistently saved, if a change happens
|
||||
in loaded FDT (e.g. for a new overlay applied), firmware produces a FDT
|
||||
address different from the saved one, but u-boot still use the saved
|
||||
one because set_fdt_addr() function does not overwrite the fdt_addr
|
||||
variable. So, for example, if there is a script that uses fdt commands for
|
||||
e.g. manipulate the bootargs, boot hangs with error
|
||||
|
||||
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
|
||||
|
||||
Removing the fdt_addr variable in saved environment allows to boot.
|
||||
|
||||
With this patch set_fdt_addr() function always overwrite fdt_addr value.
|
||||
|
||||
[1] https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018
|
||||
|
||||
Signed-off-by: Mauro Salvini <m.salvini@koansoftware.com>
|
||||
Cc: C?dric Schieli <cschieli@gmail.com>
|
||||
Cc: Matthias Brugger <mbrugger@suse.com>
|
||||
---
|
||||
Upstream-Status: Pending
|
||||
|
||||
board/raspberrypi/rpi/rpi.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
|
||||
index df52a4689f..611013471e 100644
|
||||
--- a/board/raspberrypi/rpi/rpi.c
|
||||
+++ b/board/raspberrypi/rpi/rpi.c
|
||||
@@ -318,9 +318,6 @@ static void set_fdtfile(void)
|
||||
*/
|
||||
static void set_fdt_addr(void)
|
||||
{
|
||||
- if (env_get("fdt_addr"))
|
||||
- return;
|
||||
-
|
||||
if (fdt_magic(fw_dtb_pointer) != FDT_MAGIC)
|
||||
return;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
@@ -0,0 +1 @@
|
||||
/boot/uboot.env 0x0000 0x4000
|
||||
@@ -0,0 +1,14 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
|
||||
|
||||
SRC_URI:append:rpi = " \
|
||||
file://fw_env.config \
|
||||
"
|
||||
|
||||
SRC_URI:append:rpi = " file://0001-rpi-always-set-fdt_addr-with-firmware-provided-FDT-address.patch"
|
||||
|
||||
DEPENDS:append:rpi = " u-boot-default-script"
|
||||
|
||||
do_install:append:rpi () {
|
||||
install -d ${D}${sysconfdir}
|
||||
install -m 0644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
|
||||
}
|
||||
Reference in New Issue
Block a user