When booting a Zynq device with a large (> 16MB) QSPI, such as on the Zedboard, boot times are not improving when a fast QSPI clock ( over 40 MHz) is programmed.
When the user changes the FSBL default QSPI clock from 25MHz (divider by 8) to 100MHz (divider by 2) it is expected that the boot time (to load the bitstream and application) will drop.
Instead the boot time stays the same.
Why does this happen?
This behavior is due to the way the QSPI driver is structured.
When a QSPI part is greater than 16MB, the driver switches over to I/O access mode from linear.
I/O requires that the memory be copied in a different manner which is not as fast as the direct copy in linear mode.
This can be worked around by doing the following:
if all of the boot code fits into the lower 16MB, then in qspi.c (located in the FSBL application source directory), the following line can be added in the FlashReadID function in qspi.c, at the end of the "Deduce flash size" code block, before "return XST_SUCCESS" add the following line:
QspiFlashSize = FLASH_SIZE_128M;
Note: this will not work if the boot image is greater than 16MB or if it crosses the 16MB boundary.
After the boot process is complete, the system code will then control access to the QSPI and access to the full part can be restored.