On 29.11.25 07:48, Brian Sune wrote: > Thanks to Jan Kiszka had provided info on > u-boot is not able to boot by u-boot-with-spl.sfp. > > All three TYPE, NUM, OFFSET mode methods > are nonfunctional on combined raw boot. > > The major cause is spl+u-boot structure is > defined as 4x[spl+zero_pad] + u-boot.img. > Deal to this configuration since GEN5 is used, > the spl would require to seek by an offset > on top of the spl offset. This means for > each spl=0x10000 the offset is 0x40000. > > However latest u-boot do not consider this > major structure on GEN5 socfpga. > Meanwhile, the default include file as Jan > pointed out is completely wrong syntax and > caused issue. > > Combining both concepts, the minimum fix > patch is provide as follows. > > 1) Offset is control and default set to a > proper offset under: > SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET > > 2) Only GEN5 socfpga will be affected and > minimized contamination on other devices. > > 3) Only one compuatation adjustment is made > on spl_mmc_load. And simply introduce the > offset adding by the kconfig offset control. > It should be 0 by default and gate as well. > So no possible harm should be done. > > Signed-off-by: Brian Sune <[email protected]> > --- > common/spl/Kconfig | 8 +++++++- > common/spl/spl_mmc.c | 19 ++++++++++++++----- > include/part.h | 4 +++- > 3 files changed, 24 insertions(+), 7 deletions(-) > > diff --git a/common/spl/Kconfig b/common/spl/Kconfig > index 8dade2b501e..554509146d8 100644 > --- a/common/spl/Kconfig > +++ b/common/spl/Kconfig > @@ -574,6 +574,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION > config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE > bool "MMC raw mode: by partition type" > depends on DOS_PARTITION > + select SPL_LOAD_BLOCK > help > Use partition type for specifying U-Boot partition on MMC/SD in > raw mode. U-Boot will be loaded from the first partition of this
Proposed as separate patch in [1] as requested my Marek. > @@ -600,8 +601,13 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR > > config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET > hex "U-Boot main hardware partition image offset" > - depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR > + depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR || \ > + (SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION && \ > + (TARGET_SOCFPGA_CYCLONE5 || TARGET_SOCFPGA_ARRIA5)) || \ > + (SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE && \ > + (TARGET_SOCFPGA_CYCLONE5 || TARGET_SOCFPGA_ARRIA5)) > default 0x10 if ARCH_SUNXI > + default 0x200 if TARGET_SOCFPGA_CYCLONE5 || TARGET_SOCFPGA_ARRIA5 > default 0x0 > help > On some platforms SPL location depends on hardware partition. The ROM > diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c > index d8ce3a84614..6904ea3edb7 100644 > --- a/common/spl/spl_mmc.c > +++ b/common/spl/spl_mmc.c > @@ -5,6 +5,7 @@ > * > * Aneesh V <[email protected]> > */ > + > #include <dm.h> > #include <log.h> > #include <part.h> > @@ -28,7 +29,9 @@ static ulong h_spl_load_read(struct spl_load_info *load, > ulong off, > > static __maybe_unused unsigned long spl_mmc_raw_uboot_offset(int part) > { > -#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR) > +#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR) || \ > + IS_ENABLED(CONFIG_TARGET_SOCFPGA_CYCLONE5) || \ > + IS_ENABLED(CONFIG_TARGET_SOCFPGA_ARRIA5) > if (part == 0) > return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET; > #endif > @@ -106,7 +109,9 @@ static int spl_mmc_find_device(struct mmc **mmcp, int > mmc_dev) > return 0; > } > > -#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION > +#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION) || \ > + (defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE) && \ > + (defined(CONFIG_TARGET_SOCFPGA_CYCLONE5) || > defined(CONFIG_TARGET_SOCFPGA_ARRIA5))) > static int mmc_load_image_raw_partition(struct spl_image_info *spl_image, > struct spl_boot_device *bootdev, > struct mmc *mmc, int partition, > @@ -136,7 +141,9 @@ static int mmc_load_image_raw_partition(struct > spl_image_info *spl_image, > return ret; > } > > -#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR > +#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR) || \ > + defined(CONFIG_TARGET_SOCFPGA_CYCLONE5) || \ > + defined(CONFIG_TARGET_SOCFPGA_ARRIA5) > return mmc_load_image_raw_sector(spl_image, bootdev, mmc, info.start + > sector); > #else > return mmc_load_image_raw_sector(spl_image, bootdev, mmc, info.start); > @@ -419,10 +426,12 @@ int spl_mmc_load(struct spl_image_info *spl_image, > > raw_sect = spl_mmc_get_uboot_raw_sector(mmc, raw_sect); > > -#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION > +#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION) || \ > + (defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE) && \ > + (defined(CONFIG_TARGET_SOCFPGA_CYCLONE5) || > defined(CONFIG_TARGET_SOCFPGA_ARRIA5))) > ret = mmc_load_image_raw_partition(spl_image, bootdev, > mmc, raw_part, > - raw_sect); > + raw_sect + > spl_mmc_raw_uboot_offset(part)); > if (!ret) > return 0; > #endif > diff --git a/include/part.h b/include/part.h > index 6caaa6526aa..91e49012e2f 100644 > --- a/include/part.h > +++ b/include/part.h > @@ -461,7 +461,9 @@ ulong disk_blk_erase(struct udevice *dev, lbaint_t start, > lbaint_t blkcnt); > #ifdef CONFIG_XPL_BUILD > # define part_print_ptr(x) NULL > # if defined(CONFIG_SPL_FS_EXT4) || defined(CONFIG_SPL_FS_FAT) || \ > - defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION) > + defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION) || \ > + (defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE) && \ > + (defined(CONFIG_TARGET_SOCFPGA_CYCLONE5) || > defined(CONFIG_TARGET_SOCFPGA_ARRIA5))) > # define part_get_info_ptr(x) x > # else > # define part_get_info_ptr(x) NULL Two issues: - fixes for CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE mangled with socfpga changes - a lot if ugly board-specific ifdefs - my approach in [2] does not need that Jan [1] https://patchwork.ozlabs.org/project/uboot/patch/db6aa161176dfcc4d2764e9411b4d195c9c3208c.1764574369.git.jan.kis...@siemens.com/ [2] https://patchwork.ozlabs.org/project/uboot/list/?series=483978 -- Siemens AG, Foundational Technologies Linux Expert Center

