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

Hugh Cole-Baker sigmaris at gmail.com
Sun May 24 23:25:42 CEST 2020



> 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.
> 
> Thanks
> Suniel
> 
> Hugh.



More information about the U-Boot mailing list