[PATCH 3/4] arch: arm: mach-socfpga: Adjust a raw sectors for MMC loading of U-Boot from SPL
Jan Kiszka
jan.kiszka at siemens.com
Tue Nov 25 07:42:40 CET 2025
On 25.11.25 06:02, Chee, Tien Fong wrote:
> Hi Jan,
>
> On 15/11/2025 1:13 am, Jan Kiszka wrote:
>> [CAUTION: This email is from outside your organization. Unless you
>> trust the sender, do not click on links or open attachments as it may
>> be a fraudulent email attempting to steal your information and/or
>> compromise your computer.]
>>
>> From: Jan Kiszka <jan.kiszka at siemens.com>
>>
>> If U-Boot is located on MMC, SPL and U-Boot proper are glued together.
>> More precisely, SPL is stored 4 times. Take this and its padding into
>> account and adjust sector number via board_spl_mmc_get_uboot_raw_sector.
>> This allows loading from a partition, without the need to hard-code the
>> offset via SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
>>
>> Signed-off-by: Jan Kiszka <jan.kiszka at siemens.com>
>> ---
>> arch/arm/mach-socfpga/board.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/arch/arm/mach-socfpga/board.c b/arch/arm/mach-socfpga/
>> board.c
>> index 28554b7a109..d756f7381fb 100644
>> --- a/arch/arm/mach-socfpga/board.c
>> +++ b/arch/arm/mach-socfpga/board.c
>> @@ -14,6 +14,7 @@
>> #include <hang.h>
>> #include <handoff.h>
>> #include <image.h>
>> +#include <spl.h>
>> #include <usb.h>
>> #include <usb/dwc2_udc.h>
>> #include <asm/global_data.h>
>> @@ -209,3 +210,11 @@ void lmb_arch_add_memory(void)
>> }
>> }
>> #endif
>> +
>> +#ifdef CONFIG_SPL
>
>
> The guard should be CONFIG_XPL_BUILD instead of CONFIG_SPL to correctly
> control SPL-specific behavior
>
>
>> +unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
>> + unsigned long raw_sect)
>> +{
>> + return (CONFIG_SPL_PAD_TO * 4) / 512 + raw_sect;
>> +}
>> +#endif
>
>
> Global impact:
> Applying board_spl_mmc_get_uboot_raw_sector() to all SoCFPGA boards
> could be risky. Older platforms such as Arria 10 and SoC63 devices use
> different layouts, and soon U-Boot proper will be moved into FAT32
> partitions for cyclone V.
>
> Offset calculation:
> (CONFIG_SPL_PAD_TO * 4) / 512 + raw_sect assumes a specific SPL layout.
> It may conflict with the default 0x200 sector (https://github.com/u-
> boot/u-boot/blob/c5e6d2ab7eba68cbfb600cdc131c0c375ced2ec9/common/spl/
> Kconfig#L592 which eventually assigned to raw_sect above) used for
> SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR on some boards, so this calculation is
> not universal.
>
> Suggestion: Consider gating this behind a board-specific Kconfig option,
> or limit the change to boards that actually require this offset. This
> will avoid potential regressions while supporting existing platforms.
>
I dislike more magics here. This is surely not board specific, it's
rather partition specific (raw vs. fat part) as you pointed out above.
Probably the romloader version plays a role as well in supporting one or
both, thus the chip generation. Let's encode that into Kconfig, rather
than magics.
Are there more modes to tell apart?
Jan
--
Siemens AG, Foundational Technologies
Linux Expert Center
More information about the U-Boot
mailing list