Hello, I need help optimizing the boot time for an i.MX95, specifically improving the DDR initialization time.
According to document AN14094, it's possible to reduce the time from 5053 ms to about 20 ms. I tried using the qb (quick boot) command in U-Boot:
qb - DDR Quick Boot sub system
do_qbops cp is null
qb - DDR Quick Boot sub system
Usage:
qb check - check if quick boot data is stored in mem by training flow
qb save [interface] [dev] - save quick boot data in NVM location => trigger quick boot flow
qb erase [interface] [dev] - erase quick boot data from NVM location => trigger training flow
After saving the data with qb save, the boot time decreased by 5 seconds:
Before:
DDR OEI: TRAINING complete in 4904236 us
After:
DDR OEI: Quickboot FW run complete in 1032 us
DDR OEI: ACSM SRAM restore in 203 us
I then tried to automate using this data in the Yocto image build. Noting that in the imx-boot recipe, the soc.mak file is set up to use quick boot data (it expects a file called qb_data.bin). I extracted my quick boot data using dd and included it in the recipe.
This seemed to work initially, but I encountered some issues:
The first time, I saved the data at room temperature (SoC temp: 45°C). When the device was subjected to much higher temperatures, the system became unstable and locked up.
The second time, I saved the data at a high temperature in a chamber (SoC temp: 80°C). This data seems to work correctly at both low and high temperatures.
This leads me to two important questions:
What are the ideal conditions for generating this quick boot data?
Is there a risk that this data needs to be generated for each individual device, or is it possible to have universal data that can be used in production for an entire batch?
Best regards.