[PATCH v5 0/6] rockchip: add vendor-wide support for detecting U-Boot proper boot medium

It is possible to boot U-Boot proper from a different storage medium than the one used by the BOOTROM to load the SPL. This information is stored in the u-boot,spl-boot-device Device Tree property and is accessible from U-Boot proper so that it has knowledge at runtime where it was loaded from.
This is already supported on rk3399 and px30 but with duplicated code, so this patch series also factor out all of this into spl-boot-order of Rockchip platforms. Finally, let's invert the logic used to define the BOOT_DEVICE_ value in a different function so that /chosen/u-boot,spl-boot-device can be transparently added without any further work for existing and future SoCs.
While at it, let's do some cleanups for Rockchip platforms.
Tested on RK3399 Puma, PX30 Ringneck and (upcoming) RK3588 Jaguar.
Signed-off-by: Quentin Schulz quentin.schulz@theobroma-systems.com --- Changes in v5: - guard blk_find_device use with ifdef check on BLK symbol to fix build issues on some Aarch32 Rockchip platforms, - Link to v4: https://lore.kernel.org/r/20240118-rk3588-spl-boot-dev-v4-0-23a97c82c77c@the...
Changes in v4: - use spl_image_fdt_addr() instead of accessing (possibly non-existing) fdt_addr member of spl_image_info to fix build issues on some Aarch32 Rockchip platforms, - add Rbs - Link to v3: https://lore.kernel.org/r/20240117-rk3588-spl-boot-dev-v3-0-72cb989e6da8@the...
Changes in v3: - revamp spl_decode_boot_device to not necessitate hardcoded arrays, instead, the info is gotten from the inverted logic from spl_node_to_boot_device where the BOOT_DEVICE_* is set - add Rbs - Link to v2: https://lore.kernel.org/r/20231108-rk3588-spl-boot-dev-v2-0-e67e26202c85@the...
Changes in v2: - add factoring into spl-boot-order - rework rk3588 support to use the factored out function - add global data ptr cleanup - remove rk3128 main SoC file (useless content) - Link to v1: https://lore.kernel.org/r/20230502-rk3588-spl-boot-dev-v1-1-071722a85d2d@the...
--- Quentin Schulz (6): rockchip: rk3399: simplify logic for getting SPL boot medium DT node rockchip: px30: simplify logic for getting SPL boot medium DT node rockchip: factor out spl_perform_fixups into common spl-boot-order rockchip: find U-boot proper boot device by inverting the logic that sets it rockchip: remove unused global data ptr rockchip: rk3128: remove noop file
arch/arm/mach-rockchip/board.c | 3 - arch/arm/mach-rockchip/px30/px30.c | 49 -------------- arch/arm/mach-rockchip/rk3128/Makefile | 1 - arch/arm/mach-rockchip/rk3128/rk3128.c | 16 ----- arch/arm/mach-rockchip/rk3308/rk3308.c | 3 - arch/arm/mach-rockchip/rk3328/rk3328.c | 3 - arch/arm/mach-rockchip/rk3368/rk3368.c | 3 - arch/arm/mach-rockchip/rk3399/rk3399.c | 51 --------------- arch/arm/mach-rockchip/rk3588/rk3588.c | 2 - arch/arm/mach-rockchip/spl-boot-order.c | 111 ++++++++++++++++++++++++++++++++ 10 files changed, 111 insertions(+), 131 deletions(-) --- base-commit: 106332d6cc583c4339e07020989d09b567900a59 change-id: 20230502-rk3588-spl-boot-dev-efa2777cc21b
Best regards,

From: Quentin Schulz quentin.schulz@theobroma-systems.com
In preparation of moving spl_perform_fixups to spl-boot-order.c, let's simplify the logic around mapping the BOOT_DEVICE_x enum index to a DT node by using an instantiated array of chars instead of creating a new data structure on the fly.
This will make it easier to factor out the code handling the SPL boot medium detection by having spl_decode_boot_device common to all 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/rk3399/rk3399.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index 14565d2ed9f..60d95c81cd2 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -175,23 +175,27 @@ void board_debug_uart_init(void) #endif
#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) +const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = { + [BOOT_DEVICE_MMC2] = "/mmc@fe320000", + [BOOT_DEVICE_MMC1] = "/mmc@fe330000", + [BOOT_DEVICE_SPI] = "/spi@ff1d0000/flash@0", +}; + const char *spl_decode_boot_device(u32 boot_device) { - int i; - static const struct { - u32 boot_device; - const char *ofpath; - } spl_boot_devices_tbl[] = { - { BOOT_DEVICE_MMC2, "/mmc@fe320000" }, - { BOOT_DEVICE_MMC1, "/mmc@fe330000" }, - { BOOT_DEVICE_SPI, "/spi@ff1d0000/flash@0" }, - }; - - for (i = 0; i < ARRAY_SIZE(spl_boot_devices_tbl); ++i) - if (spl_boot_devices_tbl[i].boot_device == boot_device) - return spl_boot_devices_tbl[i].ofpath; - - return NULL; + 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)

Hi Quentin,
Could you help to rebase and send this patch again?
I can't see the version v5 on patchwork.
Thanks,
- Kever
On 2024/1/18 21:55, Quentin Schulz wrote:
From: Quentin Schulz quentin.schulz@theobroma-systems.com
In preparation of moving spl_perform_fixups to spl-boot-order.c, let's simplify the logic around mapping the BOOT_DEVICE_x enum index to a DT node by using an instantiated array of chars instead of creating a new data structure on the fly.
This will make it easier to factor out the code handling the SPL boot medium detection by having spl_decode_boot_device common to all 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/rk3399/rk3399.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index 14565d2ed9f..60d95c81cd2 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -175,23 +175,27 @@ void board_debug_uart_init(void) #endif
#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) +const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = {
- [BOOT_DEVICE_MMC2] = "/mmc@fe320000",
- [BOOT_DEVICE_MMC1] = "/mmc@fe330000",
- [BOOT_DEVICE_SPI] = "/spi@ff1d0000/flash@0",
+};
- const char *spl_decode_boot_device(u32 boot_device) {
- int i;
- static const struct {
u32 boot_device;
const char *ofpath;
- } spl_boot_devices_tbl[] = {
{ BOOT_DEVICE_MMC2, "/mmc@fe320000" },
{ BOOT_DEVICE_MMC1, "/mmc@fe330000" },
{ BOOT_DEVICE_SPI, "/spi@ff1d0000/flash@0" },
- };
- for (i = 0; i < ARRAY_SIZE(spl_boot_devices_tbl); ++i)
if (spl_boot_devices_tbl[i].boot_device == boot_device)
return spl_boot_devices_tbl[i].ofpath;
- return NULL;
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)

Hi Kever,
On 2/4/24 11:45, Kever Yang wrote:
Hi Quentin,
Could you help to rebase and send this patch again?
I can't see the version v5 on patchwork.
This is already merged:
https://source.denx.de/u-boot/u-boot/-/commit/543f24dffcf1a85faf95228c0d0ba2...
So not sure to understand the request? What do you want me to do?
Cheers, Quentin

From: Quentin Schulz quentin.schulz@theobroma-systems.com
In preparation of moving spl_perform_fixups to spl-boot-order.c, let's simplify the logic around mapping the BOOT_DEVICE_x enum index to a DT node by using an instantiated array of chars instead of creating a new data structure on the fly. This will make it easier to factor out the code handling the SPL boot medium detection by having spl_decode_boot_device common to all 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 | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/arch/arm/mach-rockchip/px30/px30.c b/arch/arm/mach-rockchip/px30/px30.c index 3bca25c609f..8937677d79e 100644 --- a/arch/arm/mach-rockchip/px30/px30.c +++ b/arch/arm/mach-rockchip/px30/px30.c @@ -445,22 +445,26 @@ void board_debug_uart_init(void) #endif /* CONFIG_DEBUG_UART_BOARD_INIT */
#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) +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) { - int i; - static const struct { - u32 boot_device; - const char *ofpath; - } spl_boot_devices_tbl[] = { - { BOOT_DEVICE_MMC2, "/mmc@ff370000" }, - { BOOT_DEVICE_MMC1, "/mmc@ff390000" }, - }; + const char *spl_bootdevice_ofpath = NULL; + + if (boot_device < ARRAY_SIZE(spl_boot_devices)) + spl_bootdevice_ofpath = spl_boot_devices[boot_device];
- for (i = 0; i < ARRAY_SIZE(spl_boot_devices_tbl); ++i) - if (spl_boot_devices_tbl[i].boot_device == boot_device) - return spl_boot_devices_tbl[i].ofpath; + 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 NULL; + return spl_bootdevice_ofpath; }
void spl_perform_fixups(struct spl_image_info *spl_image)

From: Quentin Schulz quentin.schulz@theobroma-systems.com
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 | 46 ------------------------------- arch/arm/mach-rockchip/rk3399/rk3399.c | 46 ------------------------------- arch/arm/mach-rockchip/spl-boot-order.c | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 92 deletions(-)
diff --git a/arch/arm/mach-rockchip/px30/px30.c b/arch/arm/mach-rockchip/px30/px30.c index 8937677d79e..7676adcb044 100644 --- a/arch/arm/mach-rockchip/px30/px30.c +++ b/arch/arm/mach-rockchip/px30/px30.c @@ -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 diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index 60d95c81cd2..6929de5603c 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -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; diff --git a/arch/arm/mach-rockchip/spl-boot-order.c b/arch/arm/mach-rockchip/spl-boot-order.c index 93b8e7de4d0..0cd3da20c95 100644 --- a/arch/arm/mach-rockchip/spl-boot-order.c +++ b/arch/arm/mach-rockchip/spl-boot-order.c @@ -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

From: Quentin Schulz quentin.schulz@theobroma-systems.com
BOOT_DEVICE_* is set by spl_node_to_boot_device() depending on the block device number associated with the MMC device the SPL used to load U-Boot proper from. It is NOT related to the mmc alias in the Device Tree.
For SPI flashes, all SPI flashes will return BOOT_DEVICE_SPI so there's currently no way to know from which one the SPL loaded U-Boot proper from. Therefore, let's just find the first valid candidate in /chosen/u-boot,spl-boot-order that is a SPI flash and return that path. This is a best effort.
While the original implementation may have worked, using the exact same mechanism but in inverted fashion makes it less likely to have surprising corner-cases or side-effects.
A nice side-effect is that all existing and future Rockchip SoCs now automatically have their /chosen/u-boot,spl-boot-device set.
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 | 7 --- arch/arm/mach-rockchip/rk3399/rk3399.c | 6 -- arch/arm/mach-rockchip/spl-boot-order.c | 98 +++++++++++++++++++++++++++------ 3 files changed, 80 insertions(+), 31 deletions(-)
diff --git a/arch/arm/mach-rockchip/px30/px30.c b/arch/arm/mach-rockchip/px30/px30.c index 7676adcb044..fc7456e680c 100644 --- a/arch/arm/mach-rockchip/px30/px30.c +++ b/arch/arm/mach-rockchip/px30/px30.c @@ -443,10 +443,3 @@ void board_debug_uart_init(void) #endif /* CONFIG_DEBUG_UART_BASE && CONFIG_DEBUG_UART_BASE == ... */ } #endif /* CONFIG_DEBUG_UART_BOARD_INIT */ - -#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) -const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = { - [BOOT_DEVICE_MMC2] = "/mmc@ff370000", - [BOOT_DEVICE_MMC1] = "/mmc@ff390000", -}; -#endif diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index 6929de5603c..801a4a6662e 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -175,12 +175,6 @@ void board_debug_uart_init(void) #endif
#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) -const char * const spl_boot_devices[BOOT_DEVICE_NONE + 1] = { - [BOOT_DEVICE_MMC2] = "/mmc@fe320000", - [BOOT_DEVICE_MMC1] = "/mmc@fe330000", - [BOOT_DEVICE_SPI] = "/spi@ff1d0000/flash@0", -}; - static void rk3399_force_power_on_reset(void) { ofnode node; diff --git a/arch/arm/mach-rockchip/spl-boot-order.c b/arch/arm/mach-rockchip/spl-boot-order.c index 0cd3da20c95..2c39a215c10 100644 --- a/arch/arm/mach-rockchip/spl-boot-order.c +++ b/arch/arm/mach-rockchip/spl-boot-order.c @@ -10,6 +10,7 @@ #include <mmc.h> #include <spl.h> #include <asm/global_data.h> +#include <dm/uclass-internal.h>
#if CONFIG_IS_ENABLED(OF_LIBFDT) /** @@ -163,30 +164,91 @@ void board_boot_order(u32 *spl_boot_list) 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) +int spl_decode_boot_device(u32 boot_device, char *buf, size_t buflen) { - const char *spl_bootdevice_ofpath = NULL; + struct udevice *dev; +#if CONFIG_IS_ENABLED(BLK) + int dev_num; +#endif + int ret; + + if (boot_device == BOOT_DEVICE_SPI) { + /* Revert spl_node_to_boot_device() logic to find appropriate SPI flash device */ + + /* + * Devices with multiple SPI flash devices will take the first SPI flash found in + * /chosen/u-boot,spl-boot-order. + */ + const void *blob = gd->fdt_blob; + int chosen_node = fdt_path_offset(blob, "/chosen"); + int elem; + int node; + const char *conf; + + if (chosen_node < 0) { + debug("%s: /chosen not found\n", __func__); + return -ENODEV; + } + + for (elem = 0; + (conf = fdt_stringlist_get(blob, chosen_node, + "u-boot,spl-boot-order", elem, NULL)); + elem++) { + const char *alias; + + /* Handle the case of 'same device the SPL was loaded from' */ + if (strncmp(conf, "same-as-spl", 11) == 0) { + conf = board_spl_was_booted_from(); + if (!conf) + continue; + } + + /* First check if the list element is an alias */ + alias = fdt_get_alias(blob, conf); + if (alias) + conf = alias; + + /* Try to resolve the config item (or alias) as a path */ + node = fdt_path_offset(blob, conf); + if (node < 0) { + debug("%s: could not find %s in FDT\n", __func__, conf); + continue; + }
- if (boot_device < ARRAY_SIZE(spl_boot_devices)) - spl_bootdevice_ofpath = spl_boot_devices[boot_device]; + ret = uclass_find_device_by_of_offset(UCLASS_SPI_FLASH, node, &dev); + if (ret) { + debug("%s: could not find udevice for %s\n", __func__, conf); + continue; + }
- 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 ofnode_get_path(dev_ofnode(dev), buf, buflen); + }
- return spl_bootdevice_ofpath; + return -ENODEV; + } + +#if CONFIG_IS_ENABLED(BLK) + dev_num = (boot_device == BOOT_DEVICE_MMC1) ? 0 : 1; + + ret = blk_find_device(UCLASS_MMC, dev_num, &dev); + if (ret) { + debug("%s: could not find blk device for MMC device %d: %d\n", + __func__, dev_num, ret); + return ret; + } + + dev = dev_get_parent(dev); + return ofnode_get_path(dev_ofnode(dev), buf, buflen); +#else + return -ENODEV; +#endif }
void spl_perform_fixups(struct spl_image_info *spl_image) { void *blob = spl_image_fdt_addr(spl_image); - const char *boot_ofpath; - int chosen; + char boot_ofpath[512]; + int chosen, ret;
/* * Inject the ofpath of the device the full U-Boot (or Linux in @@ -196,9 +258,9 @@ void spl_perform_fixups(struct spl_image_info *spl_image) 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__); + ret = spl_decode_boot_device(spl_image->boot_device, boot_ofpath, sizeof(boot_ofpath)); + if (ret) { + pr_err("%s: could not map boot_device to ofpath: %d\n", __func__, ret); return; }

From: Quentin Schulz quentin.schulz@theobroma-systems.com
Remove leftover import and global data ptr from files since they aren't used anymore.
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/board.c | 3 --- arch/arm/mach-rockchip/rk3128/rk3128.c | 3 --- arch/arm/mach-rockchip/rk3308/rk3308.c | 3 --- arch/arm/mach-rockchip/rk3328/rk3328.c | 3 --- arch/arm/mach-rockchip/rk3368/rk3368.c | 3 --- arch/arm/mach-rockchip/rk3399/rk3399.c | 3 --- arch/arm/mach-rockchip/rk3588/rk3588.c | 2 -- 7 files changed, 20 deletions(-)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 57f08e0be0e..6a9d297e6ff 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -16,7 +16,6 @@ #include <syscon.h> #include <uuid.h> #include <asm/cache.h> -#include <asm/global_data.h> #include <asm/io.h> #include <asm/arch-rockchip/boot_mode.h> #include <asm/arch-rockchip/clock.h> @@ -24,8 +23,6 @@ #include <asm/arch-rockchip/misc.h> #include <power/regulator.h>
-DECLARE_GLOBAL_DATA_PTR; - #if defined(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) && defined(CONFIG_EFI_PARTITION)
#define DFU_ALT_BUF_LEN SZ_1K diff --git a/arch/arm/mach-rockchip/rk3128/rk3128.c b/arch/arm/mach-rockchip/rk3128/rk3128.c index 01dbfa75cb2..8f8f4951bae 100644 --- a/arch/arm/mach-rockchip/rk3128/rk3128.c +++ b/arch/arm/mach-rockchip/rk3128/rk3128.c @@ -4,9 +4,6 @@ */ #include <common.h> #include <init.h> -#include <asm/global_data.h> - -DECLARE_GLOBAL_DATA_PTR;
int arch_cpu_init(void) { diff --git a/arch/arm/mach-rockchip/rk3308/rk3308.c b/arch/arm/mach-rockchip/rk3308/rk3308.c index 5763604dc3e..6f121bf1304 100644 --- a/arch/arm/mach-rockchip/rk3308/rk3308.c +++ b/arch/arm/mach-rockchip/rk3308/rk3308.c @@ -5,7 +5,6 @@ #include <common.h> #include <init.h> #include <malloc.h> -#include <asm/global_data.h> #include <asm/io.h> #include <asm/arch/grf_rk3308.h> #include <asm/arch-rockchip/bootrom.h> @@ -14,8 +13,6 @@ #include <debug_uart.h> #include <linux/bitops.h>
-DECLARE_GLOBAL_DATA_PTR; - #include <asm/armv8/mmu.h> static struct mm_region rk3308_mem_map[] = { { diff --git a/arch/arm/mach-rockchip/rk3328/rk3328.c b/arch/arm/mach-rockchip/rk3328/rk3328.c index de17b886827..02821c9e51d 100644 --- a/arch/arm/mach-rockchip/rk3328/rk3328.c +++ b/arch/arm/mach-rockchip/rk3328/rk3328.c @@ -10,11 +10,8 @@ #include <asm/arch-rockchip/grf_rk3328.h> #include <asm/arch-rockchip/uart.h> #include <asm/armv8/mmu.h> -#include <asm/global_data.h> #include <asm/io.h>
-DECLARE_GLOBAL_DATA_PTR; - #define CRU_BASE 0xFF440000 #define GRF_BASE 0xFF100000 #define UART2_BASE 0xFF130000 diff --git a/arch/arm/mach-rockchip/rk3368/rk3368.c b/arch/arm/mach-rockchip/rk3368/rk3368.c index d0a6107e5e0..d009b8758e5 100644 --- a/arch/arm/mach-rockchip/rk3368/rk3368.c +++ b/arch/arm/mach-rockchip/rk3368/rk3368.c @@ -8,7 +8,6 @@ #include <init.h> #include <syscon.h> #include <asm/armv8/mmu.h> -#include <asm/global_data.h> #include <asm/io.h> #include <asm/arch-rockchip/bootrom.h> #include <asm/arch-rockchip/clock.h> @@ -18,8 +17,6 @@ #include <linux/bitops.h> #include <linux/delay.h>
-DECLARE_GLOBAL_DATA_PTR; - #define IMEM_BASE 0xFF8C0000
/* Max MCU's SRAM value is 8K, begin at (IMEM_BASE + 4K) */ diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index 801a4a6662e..a1aa0e3e8b5 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -11,7 +11,6 @@ #include <spl_gpio.h> #include <syscon.h> #include <asm/armv8/mmu.h> -#include <asm/global_data.h> #include <asm/io.h> #include <asm/arch-rockchip/bootrom.h> #include <asm/arch-rockchip/clock.h> @@ -23,8 +22,6 @@ #include <linux/printk.h> #include <power/regulator.h>
-DECLARE_GLOBAL_DATA_PTR; - #define GRF_EMMCCORE_CON11 0xff77f02c #define GRF_BASE 0xff770000
diff --git a/arch/arm/mach-rockchip/rk3588/rk3588.c b/arch/arm/mach-rockchip/rk3588/rk3588.c index b1f535fad50..00e3da40d9a 100644 --- a/arch/arm/mach-rockchip/rk3588/rk3588.c +++ b/arch/arm/mach-rockchip/rk3588/rk3588.c @@ -12,8 +12,6 @@ #include <asm/arch-rockchip/hardware.h> #include <asm/arch-rockchip/ioc_rk3588.h>
-DECLARE_GLOBAL_DATA_PTR; - #define FIREWALL_DDR_BASE 0xfe030000 #define FW_DDR_MST5_REG 0x54 #define FW_DDR_MST13_REG 0x74

From: Quentin Schulz quentin.schulz@theobroma-systems.com
arch_cpu_init is already returning 0 in its weak definition in common/board_f.c so let's just remove the file entirely since nothing else is done in it.
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/rk3128/Makefile | 1 - arch/arm/mach-rockchip/rk3128/rk3128.c | 13 ------------- 2 files changed, 14 deletions(-)
diff --git a/arch/arm/mach-rockchip/rk3128/Makefile b/arch/arm/mach-rockchip/rk3128/Makefile index 50e11175423..8df1a60a348 100644 --- a/arch/arm/mach-rockchip/rk3128/Makefile +++ b/arch/arm/mach-rockchip/rk3128/Makefile @@ -4,6 +4,5 @@ # SPDX-License-Identifier: GPL-2.0+ #
-obj-y += rk3128.o obj-y += syscon_rk3128.o obj-y += clk_rk3128.o diff --git a/arch/arm/mach-rockchip/rk3128/rk3128.c b/arch/arm/mach-rockchip/rk3128/rk3128.c deleted file mode 100644 index 8f8f4951bae..00000000000 --- a/arch/arm/mach-rockchip/rk3128/rk3128.c +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * Copyright (c) 2017 Rockchip Electronics Co., Ltd - */ -#include <common.h> -#include <init.h> - -int arch_cpu_init(void) -{ - /* We do some SoC one time setting here. */ - - return 0; -}
participants (3)
-
Kever Yang
-
Quentin Schulz
-
Quentin Schulz