[PATCH 1/2] spl: socfpga: Getting SPL boot device from DT

Quentin Schulz quentin.schulz at theobroma-systems.com
Fri Sep 16 16:31:49 CEST 2022


Hi Jit Loon Lim,

On 9/16/22 16:23, Jit Loon Lim wrote:
> From: Tien Fong Chee <tien.fong.chee at intel.com>
> 
> Current SPL boot device is harcoded with MMC1, this implementation
> would inhibit the support of other boot device. So, this patch is
> created to get the boot device from DT, user should define the boot
> device in property "u-boot,boot0". Default MMC1 would be boot device if

Isn't u-boot,spl-boot-order DT property what you're after? We use this 
property to specify the order in which the listed media will be tried 
for loading U-Boot proper from the SPL. Is this what you're trying to do 
with u-boot,boot0 ? (you'll still need to implement the same logic I'm 
just arguing about the name that was picked for the property).

Cheers,
Quentin

> no boot device is defined in DT.
> 
> Signed-off-by: Tien Fong Chee <tien.fong.chee at intel.com>
> Signed-off-by: Jit Loon Lim <jit.loon.lim at intel.com>
> ---
>   arch/arm/dts/socfpga_stratix10_socdk.dts |  1 +
>   arch/arm/mach-socfpga/spl_s10.c          | 65 ++++++++++++++++++++++++
>   2 files changed, 66 insertions(+)
> 
> diff --git a/arch/arm/dts/socfpga_stratix10_socdk.dts b/arch/arm/dts/socfpga_stratix10_socdk.dts
> index 8aa55a60ab..c8e9261f48 100755
> --- a/arch/arm/dts/socfpga_stratix10_socdk.dts
> +++ b/arch/arm/dts/socfpga_stratix10_socdk.dts
> @@ -16,6 +16,7 @@
>   
>   	chosen {
>   		stdout-path = "serial0:115200n8";
> +		u-boot,boot0 = <&mmc>;
>   	};
>   
>   	leds {
> diff --git a/arch/arm/mach-socfpga/spl_s10.c b/arch/arm/mach-socfpga/spl_s10.c
> index dad2ac5d0d..c4b82ebf14 100644
> --- a/arch/arm/mach-socfpga/spl_s10.c
> +++ b/arch/arm/mach-socfpga/spl_s10.c
> @@ -13,6 +13,8 @@
>   #include <asm/utils.h>
>   #include <common.h>
>   #include <debug_uart.h>
> +#include <dm.h>
> +#include <dm/ofnode.h>
>   #include <image.h>
>   #include <spl.h>
>   #include <asm/arch/clock_manager.h>
> @@ -27,6 +29,69 @@
>   
>   DECLARE_GLOBAL_DATA_PTR;
>   
> +u32 spl_boot_device(void)
> +{
> +	int ret, size;
> +	ofnode node;
> +	const fdt32_t *phandle_p;
> +	u32 phandle;
> +	struct udevice *dev;
> +
> +	node = ofnode_path("/chosen");
> +	if (!ofnode_valid(node)) {
> +		debug("%s: /chosen node was not found.\n", __func__);
> +		goto fallback;
> +	}
> +
> +	phandle_p = ofnode_get_property(node, "u-boot,boot0", &size);
> +	if (!phandle_p) {
> +		debug("%s: u-boot,boot0 property was not found.\n",
> +		     __func__);
> +		goto fallback;
> +	}
> +
> +	phandle = fdt32_to_cpu(*phandle_p);
> +
> +	node = ofnode_get_by_phandle(phandle);
> +
> +	ret = device_get_global_by_ofnode(node, &dev);
> +	if (ret) {
> +		debug("%s: Boot device at not found, error: %d\n", __func__,
> +		      ret);
> +		goto fallback;
> +	}
> +
> +	debug("%s: Found boot device %s\n", __func__, dev->name);
> +
> +	switch (device_get_uclass_id(dev)) {
> +	case UCLASS_SPI_FLASH:
> +		return BOOT_DEVICE_SPI;
> +	case UCLASS_MISC:
> +		return BOOT_DEVICE_NAND;
> +	case UCLASS_MMC:
> +		return BOOT_DEVICE_MMC1;
> +	default:
> +		debug("%s: Booting from device uclass '%s' is not "
> +		      "supported\n", __func__,
> +		      dev_get_uclass_name(dev));
> +	}
> +
> +fallback:
> +	/* Return default boot device */
> +	return BOOT_DEVICE_MMC1;
> +}
> +
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +u32 spl_mmc_boot_mode(const u32 boot_device)
> +{
> +#if defined(CONFIG_SPL_FS_FAT) || defined(CONFIG_SPL_FS_EXT4)
> +	return MMCSD_MODE_FS;
> +#else
> +	return MMCSD_MODE_RAW;
> +#endif
> +}
> +#endif
> +
>   void board_init_f(ulong dummy)
>   {
>   	const struct cm_config *cm_default_cfg = cm_get_default_config();


More information about the U-Boot mailing list