Hi Stefan, On Mon, Aug 12, 2019 at 03:13:58PM +0200, Stefan Roese wrote: > On 06.08.19 08:15, Stefan Roese wrote: > > On 29.07.19 09:12, Baruch Siach wrote: > > > On Armada 38x platforms the ROM code loads SPL from offset 0 of eMMC > > > hardware boot partitions. When there are no boot partitions (i.e. SD > > > card) the ROM skips the first sector that usually contains the (logical) > > > partition table. Since the generated .kwb image contains the main U-Boot > > > image in a fixed location (0x140 sectors by default), we end up with the > > > main U-Boot image in offset of 1 sector. The current workaround is to > > > manually set CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR to 0x141 to > > > compensate for that. > > > > > > This patch uses the run-time detected boot partition to determine the > > > right offset of the main U-Boot partition. The generated .kwb image is > > > now compatible with both eMMC boot partition, and SD card main data > > > partition. > > > > > > Signed-off-by: Baruch Siach <bar...@tkos.co.il> > > > --- > > > v2: Rebase on top of current master > > > --- > > > common/spl/Kconfig | 12 ++++++++++++ > > > common/spl/spl_mmc.c | 15 +++++++++++++-- > > > 2 files changed, 25 insertions(+), 2 deletions(-) > > > > > > diff --git a/common/spl/Kconfig b/common/spl/Kconfig > > > index 5d6da5db89bc..e43eefe046bc 100644 > > > --- a/common/spl/Kconfig > > > +++ b/common/spl/Kconfig > > > @@ -293,6 +293,18 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR > > > Address on the MMC to load U-Boot from, when the MMC is being > > > used > > > in raw mode. Units: MMC sectors (1 sector = 512 bytes). > > > +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 > > > + default 0x0 > > > + help > > > + On some platforms SPL location depends on hardware partition. The ROM > > > + code skips the MBR sector when loading SPL from main hardware data > > > + partition. This adds offset to the main U-Boot image. Set this symbol > > > + to the number of skipped sectors. > > > + > > > + If unsure, leave the default. > > > + > > > config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION > > > bool "MMC Raw mode: by partition" > > > help > > > diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c > > > index b3619889f794..72439c029f4a 100644 > > > --- a/common/spl/spl_mmc.c > > > +++ b/common/spl/spl_mmc.c > > > @@ -49,6 +49,16 @@ static ulong h_spl_load_read(struct spl_load_info > > > *load, ulong sector, > > > return blk_dread(mmc_get_blk_desc(mmc), sector, count, buf); > > > } > > > +static __maybe_unused unsigned long spl_mmc_raw_uboot_offset(int part) > > > +{ > > > +#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR) > > > > Use if (IS_ENABLED()) instead ?
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET is not defined when CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR is disabled. Using 'if (IS_ENABLED())' would break the build. > > > > > + if (part == 0) > > > > Why is this restricted to part == 0 ? As explained in the commit log, the ROM skips the first sector of the main data partition (where part == 0). Otherwise (where part != 0), the ROM load SPL from sector 0. That is the whole point of this patch set. Detect the SPL offset at run-time, instead of hard coding it at build time. > Any updates on this? Thanks for the reminder. I somehow missed your previous email. baruch -- http://baruch.siach.name/blog/ ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - bar...@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il - _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot