[PATCH v3 3/6] rockchip: factor out spl_perform_fixups into common spl-boot-order

Kever Yang kever.yang at rock-chips.com
Thu Jan 18 07:57:44 CET 2024


On 2024/1/18 01:22, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz at 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.
>
> Cc: Quentin Schulz <foss+uboot at 0leil.net>
> Signed-off-by: Quentin Schulz <quentin.schulz at theobroma-systems.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
>   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 at ff370000",
>   	[BOOT_DEVICE_MMC1] = "/mmc at 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 at ff1d0000/flash at 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..55d0976fb0a 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;
> +	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
>


More information about the U-Boot mailing list