[PATCH 3/3] arm: rmobile: rzg2_beacon: Auto select Linux device tree by SoC
Adam Ford
aford173 at gmail.com
Thu Oct 26 01:13:11 CEST 2023
There is a function inside the board file to autodetect which device
tree is needed by U-Boot to properly load its own device tree, but
it currently defaults to always loading RZ/G2M for Linux. This is
not correct for other SoC variants. Add board_late_init function
to query the SoC name and use that to determine which device tree
is loaded for booting Linux.
Signed-off-by: Adam Ford <aford173 at gmail.com>
diff --git a/board/beacon/beacon-rzg2m/beacon-rzg2m.c b/board/beacon/beacon-rzg2m/beacon-rzg2m.c
index 99fe1edfb3..6d37ff6ac9 100644
--- a/board/beacon/beacon-rzg2m/beacon-rzg2m.c
+++ b/board/beacon/beacon-rzg2m/beacon-rzg2m.c
@@ -6,6 +6,7 @@
#include <common.h>
#include <asm/global_data.h>
#include <asm/io.h>
+#include <env.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -17,6 +18,38 @@ int board_init(void)
return 0;
}
+#if IS_ENABLED(CONFIG_BOARD_LATE_INIT)
+static u8 get_SoC_letter(void)
+{
+ const u8 *name = rzg_get_cpu_name();
+
+ if (*name)
+ return name[6];
+
+ return 0;
+}
+
+int board_late_init(void)
+{
+ /* If already defined, exit */
+ if (!env_get("fdt_file")) {
+ switch (get_SoC_letter()) {
+ case 'A':
+ env_set("fdt_file", "r8a774a1-beacon-rzg2m-kit.dtb");
+ break;
+ case 'B':
+ env_set("fdt_file", "r8a774b1-beacon-rzg2n-kit.dtb");
+ break;
+ case 'E':
+ env_set("fdt_file", "r8a774e1-beacon-rzg2h-kit.dtb");
+ break;
+ }
+ }
+
+ return 0;
+}
+#endif /* CONFIG_BOARD_LATE_INIT */
+
#if IS_ENABLED(CONFIG_MULTI_DTB_FIT)
int board_fit_config_name_match(const char *name)
{
diff --git a/configs/rzg2_beacon_defconfig b/configs/rzg2_beacon_defconfig
index 534f641e84..6894448b22 100644
--- a/configs/rzg2_beacon_defconfig
+++ b/configs/rzg2_beacon_defconfig
@@ -21,6 +21,7 @@ CONFIG_USE_BOOTCOMMAND=y
CONFIG_BOOTCOMMAND="mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else booti ${loadaddr} - ${fdt_addr}; fi"
CONFIG_DEFAULT_FDT_FILE="r8a774a1-beacon-rzg2m-kit.dtb"
# CONFIG_BOARD_EARLY_INIT_F is not set
+CONFIG_BOARD_LATE_INIT=y
CONFIG_SYS_MALLOC_BOOTPARAMS=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_MAXARGS=64
diff --git a/include/configs/beacon-rzg2m.h b/include/configs/beacon-rzg2m.h
index 65c01835cc..493b98fbdf 100644
--- a/include/configs/beacon-rzg2m.h
+++ b/include/configs/beacon-rzg2m.h
@@ -18,7 +18,6 @@
"fdt_addr=0x48000000\0" \
"loadaddr=0x48080000\0" \
"boot_fdt=try\0" \
- "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
"initrd_addr=0x43800000\0" \
"mmcdev=1\0" \
"mmcpart=1\0" \
--
2.40.1
More information about the U-Boot
mailing list