]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
rockchip: factor out spl_perform_fixups into common spl-boot-order
authorQuentin Schulz <quentin.schulz@theobroma-systems.com>
Thu, 18 Jan 2024 13:55:57 +0000 (14:55 +0100)
committerKever Yang <kever.yang@rock-chips.com>
Fri, 19 Jan 2024 02:57:36 +0000 (10:57 +0800)
All SoCs are susceptible to wanting to know which storage medium was
used to load U-Boot SPL. So instead of reimplementing the same functions
in SoCs over and over again (here just rk3399 and px30 but rk3588 is
coming), let's just put all this in common into spl-boot-order.c
allowing to support a new SoC just by defining the spl_boot_devices
array in the appropriate SoC file.

Note that spl_perform_fixups() now calls spl_image_fdt_addr() to get the
address of the fdt instead of directly reading the
spl_image_info->fdt_addr member, because that member is not guaranteed
to be present (guarded with compile flags). This is essential because we
move the logic away from px30 and rk3399 which had those compile flags
enabled to code run for all Rockchip SoCs.

Cc: Quentin Schulz <foss+uboot@0leil.net>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
arch/arm/mach-rockchip/px30/px30.c
arch/arm/mach-rockchip/rk3399/rk3399.c
arch/arm/mach-rockchip/spl-boot-order.c

index 8937677d79eb6b23423dae27ff8296d3165ae232..7676adcb044740a2461430f941a8f3f4ea4390ea 100644 (file)
@@ -449,50 +449,4 @@ const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = {
        [BOOT_DEVICE_MMC2] = "/mmc@ff370000",
        [BOOT_DEVICE_MMC1] = "/mmc@ff390000",
 };
-
-const char *spl_decode_boot_device(u32 boot_device)
-{
-       const char *spl_bootdevice_ofpath = NULL;
-
-       if (boot_device < ARRAY_SIZE(spl_boot_devices))
-               spl_bootdevice_ofpath = spl_boot_devices[boot_device];
-
-       if (spl_bootdevice_ofpath)
-               debug("%s: spl_bootdevice_id %x maps to '%s'\n",
-                     __func__, boot_device, spl_bootdevice_ofpath);
-       else
-               debug("%s: failed to resolve spl_bootdevice_id %x\n",
-                     __func__, boot_device);
-
-       return spl_bootdevice_ofpath;
-}
-
-void spl_perform_fixups(struct spl_image_info *spl_image)
-{
-       void *blob = spl_image->fdt_addr;
-       const char *boot_ofpath;
-       int chosen;
-
-       /*
-        * Inject the ofpath of the device the full U-Boot (or Linux in
-        * Falcon-mode) was booted from into the FDT, if a FDT has been
-        * loaded at the same time.
-        */
-       if (!blob)
-               return;
-
-       boot_ofpath = spl_decode_boot_device(spl_image->boot_device);
-       if (!boot_ofpath) {
-               pr_err("%s: could not map boot_device to ofpath\n", __func__);
-               return;
-       }
-
-       chosen = fdt_find_or_add_subnode(blob, 0, "chosen");
-       if (chosen < 0) {
-               pr_err("%s: could not find/create '/chosen'\n", __func__);
-               return;
-       }
-       fdt_setprop_string(blob, chosen,
-                          "u-boot,spl-boot-device", boot_ofpath);
-}
 #endif
index 60d95c81cd2d304eb2a3aeca4146f3f1990cf341..6929de5603c6f0350a885caf909f83bfc0a9603b 100644 (file)
@@ -181,52 +181,6 @@ const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = {
        [BOOT_DEVICE_SPI] = "/spi@ff1d0000/flash@0",
 };
 
-const char *spl_decode_boot_device(u32 boot_device)
-{
-       const char *spl_bootdevice_ofpath = NULL;
-
-       if (boot_device < ARRAY_SIZE(spl_boot_devices))
-               spl_bootdevice_ofpath = spl_boot_devices[boot_device];
-
-       if (spl_bootdevice_ofpath)
-               debug("%s: spl_bootdevice_id %x maps to '%s'\n",
-                     __func__, boot_device, spl_bootdevice_ofpath);
-       else
-               debug("%s: failed to resolve spl_bootdevice_id %x\n",
-                     __func__, boot_device);
-
-       return spl_bootdevice_ofpath;
-}
-
-void spl_perform_fixups(struct spl_image_info *spl_image)
-{
-       void *blob = spl_image->fdt_addr;
-       const char *boot_ofpath;
-       int chosen;
-
-       /*
-        * Inject the ofpath of the device the full U-Boot (or Linux in
-        * Falcon-mode) was booted from into the FDT, if a FDT has been
-        * loaded at the same time.
-        */
-       if (!blob)
-               return;
-
-       boot_ofpath = spl_decode_boot_device(spl_image->boot_device);
-       if (!boot_ofpath) {
-               pr_err("%s: could not map boot_device to ofpath\n", __func__);
-               return;
-       }
-
-       chosen = fdt_find_or_add_subnode(blob, 0, "chosen");
-       if (chosen < 0) {
-               pr_err("%s: could not find/create '/chosen'\n", __func__);
-               return;
-       }
-       fdt_setprop_string(blob, chosen,
-                          "u-boot,spl-boot-device", boot_ofpath);
-}
-
 static void rk3399_force_power_on_reset(void)
 {
        ofnode node;
index 93b8e7de4d0dcbf08fed39b3416757716a83d0f7..0cd3da20c9574dd5ffb6d3802162c2208083213a 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <fdt_support.h>
 #include <log.h>
 #include <mmc.h>
 #include <spl.h>
@@ -161,4 +162,52 @@ void board_boot_order(u32 *spl_boot_list)
        if (idx == 0)
                spl_boot_list[0] = spl_boot_device();
 }
+
+__weak const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = {};
+
+const char *spl_decode_boot_device(u32 boot_device)
+{
+       const char *spl_bootdevice_ofpath = NULL;
+
+       if (boot_device < ARRAY_SIZE(spl_boot_devices))
+               spl_bootdevice_ofpath = spl_boot_devices[boot_device];
+
+       if (spl_bootdevice_ofpath)
+               debug("%s: spl_bootdevice_id %x maps to '%s'\n",
+                     __func__, boot_device, spl_bootdevice_ofpath);
+       else
+               debug("%s: failed to resolve spl_bootdevice_id %x\n",
+                     __func__, boot_device);
+
+       return spl_bootdevice_ofpath;
+}
+
+void spl_perform_fixups(struct spl_image_info *spl_image)
+{
+       void *blob = spl_image_fdt_addr(spl_image);
+       const char *boot_ofpath;
+       int chosen;
+
+       /*
+        * Inject the ofpath of the device the full U-Boot (or Linux in
+        * Falcon-mode) was booted from into the FDT, if a FDT has been
+        * loaded at the same time.
+        */
+       if (!blob)
+               return;
+
+       boot_ofpath = spl_decode_boot_device(spl_image->boot_device);
+       if (!boot_ofpath) {
+               pr_err("%s: could not map boot_device to ofpath\n", __func__);
+               return;
+       }
+
+       chosen = fdt_find_or_add_subnode(blob, 0, "chosen");
+       if (chosen < 0) {
+               pr_err("%s: could not find/create '/chosen'\n", __func__);
+               return;
+       }
+       fdt_setprop_string(blob, chosen,
+                          "u-boot,spl-boot-device", boot_ofpath);
+}
 #endif