[EXT] [PATCH] ARM: imx: romapi: Repair FlexSPI NOR boot offset

Ye Li ye.li at nxp.com
Wed Mar 23 03:42:00 CET 2022


Hi Marek,

On Mon, 2022-03-21 at 15:59 +0100, Marek Vasut wrote:
> Caution: EXT Email
> 
> On 3/21/22 04:35, Ye Li wrote:
> > 
> > Hi Marek,
> Hi,
> 
> > 
> > > 
> > > diff --git a/arch/arm/mach-imx/spl_imx_romapi.c b/arch/arm/mach-
> > > imx/spl_imx_romapi.c
> > > index d827de375a6..c47f5a6bdb4 100644
> > > --- a/arch/arm/mach-imx/spl_imx_romapi.c
> > > +++ b/arch/arm/mach-imx/spl_imx_romapi.c
> > > @@ -38,14 +38,8 @@ ulong spl_romapi_raw_seekable_read(u32 offset,
> > > u32
> > > size, void *buf)
> > > 
> > >   ulong __weak spl_romapi_get_uboot_base(u32 image_offset, u32
> > > rom_bt_dev)
> > >   {
> > > -       u32 offset;
> > > -
> > > -       if (((rom_bt_dev >> 16) & 0xff)
> > > ==  BT_DEV_TYPE_FLEXSPINOR)
> > > -               offset = CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
> > > *
> > > 512;
> > > -       else
> > > -               offset = image_offset +
> > > CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512 - 0x8000;
> > > -
> > > -       return offset;
> > > +       return image_offset +
> > > +               (CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512 -
> > > 0x8000);
> > >   }
> > The change is problematic to flexspi.
> Yes, I need this change to get boot from flexspi working on i.MX8MP,
> without this change writing flash.bin to flexspi results in
> unbootable
> system.
> 

To support boot from flexspi, please try another two changes.
1. Modify board/freescale/imx8mp_evk/imximage-8mp-lpddr4.cfg, set 
   "BOOT_FROM" to "fspi". (This change is unnecessary on 8MP after
switch to binman) 

2. Update the u-boot.itb offset in imx8mp-u-boot.dtsi, set the offset
to 0x5f000.  The previous offset 0x58000 is for SD, calculated by
0x60000 - 0x8000 (32KB image offset).

   		uboot: blob-ext at 2 {
			filename = "u-boot.itb";
			offset = <0x5f000>;
		};

Best regards,
Ye Li
> > 
> > Actually u-boot.itb is fixed at device offset 0x60000 (= 512 *
> > 0x300)
> > for flexspi/emmc/sd.The case is the image_offset for emmc/sd may
> > vary according to the
> > primary boot or secondary boot and the eMMC user partition or boot
> > partition.
> > 
> > If you changed to "image_offset +
> > (CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512 - 0x8000", the
> > address
> > for flexspi becomes 0x59000 (= 0x1000 + 0x60000 - 0x8000)
> This is how I populate the FlexSPI on MX8MP:
> 
> dhcp ${loadaddr} 192.168.1.1:flash.bin ; \
> \
> setexpr sfaddr ${loadaddr} - 0x1000 ; \
> \
> base ${sfaddr} ; \
> mw 0 0 0x400 ; \
> mw 0x400 0x42464346 ; \
> mw 0x404 0x56010000 ; \
> mw 0x40c 00030300 ; \
> mw 0x444 0x00020101 ; \
> mw 0x450 0x10000000 ; \
> mw 0x480 0x0818040b ; \
> mw 0x484 0x24043008 ; \
> mw 0x5c0 0x100 ; \
> mw 0x5c4 0x10000 ; \
> base 0 ; \
> \
> setexpr filesize ${filesize} + 0x1000 ; \
> \
> sf probe && sf update ${sfaddr} 0 ${filesize}


More information about the U-Boot mailing list