[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