AnsweredAssumed Answered

i.MX6ULL QSPI controller corrupted by Boot-ROM

Question asked by friederschrempf on Jul 8, 2019
Latest reply on Aug 5, 2019 by friederschrempf

I want to share some strange behaviour, that we discovered on i.MX6ULL in case anyone else faces this issue and in hope that someone can explain what is actually going on.

 

We used to use i.MX6UL in QSPI boot mode to get the bootloader from a QSPI-NOR flash chip. This worked fine until we replaced the i.MX6UL by an i.MX6ULL. After booting from QSPI-NOR (which works fine), the Linux Kernel (4.14+backports) wasn't able to detect and access the QSPI-NOR flash any more. Booting the same bootloader binary from a different device like SD card, the QSPI-NOR worked just fine in Linux.

 

We found out, that in case of QSPI Boot and only on i.MX6ULL, one bit in the QSPI registers differs from non-QSPI boots, or i.MX6UL. When the issue occurs, bit 16 in QuadSPI_FLSHCR register is set, in other cases it is not set.

 

=> md.l 0x021e000c 1
021e000c: 00010303
=> md.l 0x021e000c 1
021e000c: 00000303

According to the reference manual of UL and ULL, the bit is marked as "Reserved", so it is completely unknown, what it actually means. As a workaround we can manually reset the bit in the bootloader code and this will cause the Linux QSPI driver to work properly and being able to access the NOR flash in Linux.

Outcomes