AnsweredAssumed Answered

Cannot boot u-boot from QSPI on IMX7S

Question asked by Mark Vismer on Jun 18, 2018
Latest reply on Jun 19, 2018 by Mark Vismer

Hello,

 

We are struggling to get u-boot to load from QSPI on our custom IMX7S board (based on MCIMX7S5EVK08SC). We have been desperately trying to work on this for several days. Would it be possible to have some advice on what we could be doing wrong?

 

This is what we have so far: We have booted u-boot via USB SDP and programmed the NOR flash with the QuadSPI configuration parameters at 0x400 0x0 (see update), and the u-boot image at 0x1000 0x400 (see update). We followed this post: How do we get the mx6ull evk to boot from QSPI NOR flash? and also used the same qspi-header.bin configuration parameters because they looked like they should at least be compatible (but perhaps not optimal).

 

The QuadSPI configuration parameters have been loaded and we can verify them as follows: (note 0x60000000 is the memory mapped address for the QSPI NOR flash - using sf read ... shows the same).

=> sf probe
SF: Detected s25fl064l with page size 256 Bytes, erase size 64 KiB, total 8 MiB

=> md 0x60000400 0x80
60000400: 00000000 00000000 00000000 00000000    ................
60000410: 00000000 00000000 00000000 02000000    ................
60000420: 00000003 00000003 08000000 00000000    ................
60000430: 08000000 00000000 00000000 00000000    ................
60000440: 00000002 00000000 00000001 00000000    ................
60000450: 00000000 00000000 00000000 00000000    ................
60000460: 00000000 00000000 2818043d 39040d06    ........=..(...9
60000470: 00002400 00000000 00000000 00000000    .$..............
60000480: 00000000 00000000 00000000 00000000    ................
60000490: 00000000 00000000 00000000 00000000    ................
600004a0: 00000000 00000000 00000000 00000000    ................
600004b0: 00000000 00000000 00000000 00000000    ................
600004c0: 00000000 00000000 00000000 00000000    ................
600004d0: 00000000 00000000 00000000 00000000    ................
600004e0: 00000000 00000000 00000000 00000000    ................
600004f0: 00000000 00000000 00000000 00000000    ................
60000500: 00000000 00000000 00000000 00000000    ................
60000510: 00000000 00000000 00000000 00000000    ................
60000520: 00000000 00000000 00000000 00000000    ................
60000530: 00000000 00000000 00000000 00000000    ................
60000540: 00000000 00000000 00000000 00000000    ................
60000550: 00000000 00000000 00000000 00000000    ................
60000560: 00000000 00000000 01000001 00000000    ................
60000570: 00000000 00000000 00000000 00000000    ................
60000580: 00000000 00000000 00000000 00000000    ................
60000590: 00000000 00000000 00000000 00000000    ................
600005a0: 00000000 00000000 00000000 00000000    ................
600005b0: 00000000 00000000 00000000 00000000    ................
600005c0: 00000000 00000000 00000000 00000000    ................
600005d0: 00000000 00000000 00000000 00000000    ................
600005e0: 00000000 00000000 00000000 00000000    ................
600005f0: 00000000 00000000 00000000 c0ffee01    ................

 

U-boot and IVT header is also programmed:

=> md 0x60001000 0x40
60001000: 402000d1 87800000 00000000 877ff914    .. @............
60001010: 877ff908 877ff8e8 00000000 00000000    ................
60001020: 877ff8d9 0006e000 00000000 40bc01d2    ...............@
60001030: 047c01cc 04003430 0500404f 00103930    ..|.04..O@..09..
60001040: 02000000 00007a30 01100401 64007a30    ....0z......0z.d
60001050: 1e002000 90047a30 01000000 d4007a30    . ..0z......0z..
60001060: 00006900 d0007a30 83000200 dc007a30    .i..0z......0z..
60001070: 04003005 e0007a30 00000804 e4007a30    .0..0z......0z..
60001080: 04001000 f4007a30 3f030000 00017a30    ....0z.....?0z..
60001090: 0a080e09 04017a30 0e020700 08017a30    ....0z......0z..
600010a0: 07040403 0c017a30 06200000 10017a30    ....0z.... .0z..
600010b0: 04020204 14017a30 02020303 20017a30    ....0z......0z.  
600010c0: 03080000 80017a30 20008000 90017a30    ....0z..... 0z..
600010d0: 04820902 94017a30 03030300 a0017a30    ....0z......0z..
600010e0: 03004080 a4017a30 20001000 a8017a30    .@..0z..... 0z..
600010f0: 04001080 00027a30 1f000000 04027a30    ....0z......0z..

 

The fuses have been blown for the BOOT_CFG and BT_FUSE_SEL = 1:

=> fuse read 1 3
Reading bank 1:

Word 0x00000003: 10004000

 

Our BOOT_MODE[1:0] == 00 (both boot GPIO pins are tied to ground).

 

Schematic for the IMX7S

 

 

And QSPI flash:

 

100K pull ups on QSPI_A_DATA2/3

 

 

Quick update:

 

I found in this post MX7D QSPI Configuration for MX66L1G45G (453394), that the offset for the QuadSPI configuration parameters I am using (the value of 0x400 that I got from the datasheet) is actually incorrect and very disappointingly this has still not been updated in the datasheets even though the post was over a year ago

 

So changing the offset to 0x0 and putting u-boot at 0x400 seems to get as far as loading the the QSPI config and then falls back to SDP. We are trying to work out how to recover the flash interface, does anyone perhaps know what could be wrong with our u-boot image. It appears the IVT is not detected and the DCD image is not loaded either because when we connected over JTAG we are not able to read/write to the DDR memory region yet.

 

Thanks for any help! 

Outcomes