rk3399: SPI boot: Return from ROM unsuccessful (with TPL)

Jagan Teki jagan at amarulasolutions.com
Mon May 25 09:58:39 CEST 2020


On Mon, May 25, 2020 at 2:55 AM Hugh Cole-Baker <sigmaris at gmail.com> wrote:
>
>
>
> > On 24 May 2020, at 20:00, Suniel Mahesh <sunil at amarulasolutions.com> wrote:
> >
> >
> >
> > On Sun, May 24, 2020 at 3:52 PM Hugh Cole-Baker <sigmaris at gmail.com> wrote:
> >
> > > On 20 May 2020, at 13:08, Jagan Teki <jagan at amarulasolutions.com> wrote:
> > >
> > > It seems like SPI boot on rk3399 with TPL based is unable to return
> > > from ROM or switching to from TPL to SPL is unsuccessful.
> > >
> > > I have verified board_init_f on spl.c and the control is not even
> > > reached here. On the other hand the SPL-alone boot flow works fine
> > > from SPI.
> > >
> > > SPI boot log:
> > >
> > > U-Boot TPL 2020.07-rc2-00047-gd2ebbbd0e6,`irty (May 20 2020 - 17:22:25)
> > > Channel 0: LPDDR4, 50MHz
> > > BW=30 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Shze=2048LB
> > > Channel 1: LPDR4,50MHz
> > > BW=32 CoL=10 Bk=8 CR0 Row=15 CS1 Row=15 CS=2 Die BW=16 Cize=2048LB
> > > 256B stride
> > > 256B spride
> > > lpddr4_set_rate: change freq to 400000000 mhz 0, 1
> > > lpddr4_set_rate8 changE freq to 800000000 mhz 0, 0
> > > Trying to bont from BOOTROM
> > > Returning to boot ROM...
> > >
> > > Any inputs?
> > >
> > > Jagan.
> >
> > In my experience when building the TPL and SPL image to be written to SPI
> > flash, they both have to be processed by mkimage to generate an rkspi
> > format image. The approach of using mkimage to produce the idbloader.img
> > from the TPL and then simply concatenating the SPL at the end, which
> > works for SD/eMMC boot images, doesn't work for SPI and it results in a
> > similar error to what you reported, so that might be the cause?
> >
> > I use the following command to generate the TPL+SPL image for SPI boot:
> >
> > mkimage -n rk3399 -T rkspi -d tpl/u-boot-tpl.bin:spl/u-boot-spl.bin spi_idbloader.img
> >
> > On a rockpro64 board, the resulting spi_idbloader.img can be written to
> > offset 0 in SPI flash, then when booting it the bootrom will start the
> > TPL, TPL returns to bootrom and then bootrom will start the SPL.
> >
> > There are some additional changes to the dts and config for rockpro64
> > needed to fully support SPL to load u-boot proper from SPI flash, I'll
> > send patches for these changes.
> >
> > Hi Hugh,
> >
> > I have used the above command as indicated by you for generating TPL+SPL.  Flashed SPI flash using below
> > commands from uboot prompt. Tested roc-rk3399-pc and rockpro64 targets.
> >
> > bootrom loads TPL, TPL returns back to bootrom and then it hangs.
> >
> > U-Boot TPL 2020.07-rc2-00204-ge74f823-dirty (May 25 2020 - 00:10:26)
> > Channel 0: LPDDR4, 50MHz
> > BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB
> > Channel 1: LPDDR4, 50MHz
> > BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB
> > 256B stride
> > 256B stride
> > lpddr4_set_rate: change freq to 400000000 mhz 0, 1
> > lpddr4_set_rate: change freq to 800000000 mhz 1, 0
> > spl_boot_device:
> > Trying to boot from BOOTROM
> > board_return_to_bootrom:
> > Returning to boot ROM...
> > �𪩪r?SA�
> >
> > SPI flash:
> >
> > load mmc 1:1 $kernel_addr_r idbloader.img
> > sf probe
> > sf erase 0 +$filesize
> > sf write $kernel_addr_r 0 ${filesize}
> > load mmc 1:1 ${kernel_addr_r} u-boot.itb
> > sf erase 0x40000 +$filesize
> > sf write $kernel_addr_r 0x40000 ${filesize}
> >
> This could potentially be overwriting part of the idbloader.img - check
> that idbloader.img's filesize isn't over 0x40000 bytes. I've found that
> typically it can be about 320kB and so use 0x60000 as a safer value for
> u-boot,spl-payload-offset.

Yes, but we are with in the limit, our idboader.img size is 124K (0x1F000)

# du -hs idbloader.img
124K    idbloader.img

Jagan.


More information about the U-Boot mailing list