[PATCH 8/9] ddr: imx9: Implement Synopsys LPDDR PHY QuickBoot flow
Neha Malcom Francis
n-francis at ti.com
Thu Jul 31 07:59:44 CEST 2025
On 30/07/25 18:03, Peng Fan wrote:
>> Subject: Re: [PATCH 8/9] ddr: imx9: Implement Synopsys LPDDR PHY
>> QuickBoot flow
>>
>> On Sun, Jul 27, 2025 at 11:14 PM Peng Fan (OSS)
>> <peng.fan at oss.nxp.com> wrote:
>>>
>>> From: Viorel Suman <viorel.suman at nxp.com>
>>>
>>> Implement Synopsys LPDDR PHY QuickBoot flow.
>>
>> What does "QuickBoot flow" mean? What are the
>> motivations/advantages of adding support for it?
>
> Save the training data, then next time, the boot
> will be quick and no need ddr phy training step
> which would consume 4~5 seconds.
>
>>
>> Please expand the commit message to explain why you are doing this.
>>
>>> +config IMX_SNPS_DDR_PHY_QB
>>> + bool "i.MX Synopsys DDR PHY QuickBoot mode"
>>> + depends on IMX_SNPS_DDR_PHY
>> && !IMX_SNPS_DDR_PHY_QB_GEN
>>> + help
>>> + Select the DDR PHY QuickBoot mode on i.MX9 SOC.
>>
>> Nothing selects IMX_SNPS_DDR_PHY_QB in this series, so this patch is
>> only adding dead code.
>
> I could add user in V2.
>
>>
>>> +static int ddrphy_qb_restore(struct dram_timing_info *info, int
>>> +fsp_id) {
>>> + int i;
>>> + u32 to_addr;
>>> + struct dram_fsp_msg *fsp_msg;
>>> + struct dram_cfg_param *dram_cfg;
>>> +
>>> + fsp_msg = &info->fsp_msg[fsp_id];
>>> + for (i = 0; i < fsp_msg->fsp_cfg_num; i++) {
>>> + dram_cfg = &fsp_msg->fsp_cfg[i];
>>> + dwc_ddrphy_apb_wr(dram_cfg->reg, dram_cfg->val);
>>> + }
>>> +
>>> + /* enable the ddrphy apb */
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x00);
>>> + dwc_ddrphy_apb_wr(0x54008, 0x01); /* SequenceCtrl = 0x1
>> (DevInit Only)*/
>>> + ddrphy_w(0x5400c, 0x19, 0x1); /* Lp4Quickboot = 0x1 */
>>> +
>>> + /* Adjust MR14_xy if pstate=0 and 2D training data collected
>> during training phase */
>>> + if (fsp_id == 0 && (qb_state.flags & DDRPHY_QB_FLAG_2D)) {
>>> + ddrphy_w(0x5401c, 0x39, qb_state.fsp[0] >> 8); /*
>> TrainedVREFDQ_A0 -> MR14_A0 */
>>> + ddrphy_w(0x54022, 0x45, qb_state.fsp[1] & 0xFF); /*
>> TrainedVREFDQ_A1 -> MR14_A1 */
>>> + ddrphy_w(0x54036, 0x6c, qb_state.fsp[2] & 0xFF); /*
>> TrainedVREFDQ_B0 -> MR14_B0 */
>>> + ddrphy_w(0x5403c, 0x78, qb_state.fsp[2] >> 8); /*
>> TrainedVREFDQ_B1 -> MR14_B1 */
>>> + }
>>> +
>>> + /* save CSRs to address starting with 0x54800 */
>>> + for (i = 0, to_addr = 0x54800; i < DDRPHY_QB_CSR_SIZE; i++,
>> to_addr++)
>>> + dwc_ddrphy_apb_wr(to_addr, qb_state.csr[i]);
>>> +
>>> + /* disable the ddrphy apb */
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x01);
>>
>> Lots of magic numbers in this function.
>
> We could not do much on this. Synopsys release
> reference code to NXP. Using macros to replace
> the numbers will make upgrading much harder.
>
>>
>>> +
>>> + return 0;
>>
>> No need to return 0. Make the function 'void'.
>
> ok.
>
>>
>>> +int ddr_cfg_phy_qb(struct dram_timing_info *dram_timing, int
>> fsp_id)
>>> +{
>>> + int ret;
>>> +
>>> + /* MemReset Toggle */
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x0);
>>> + dwc_ddrphy_apb_wr(0x20060, 0x3);
>>> + dwc_ddrphy_apb_wr(0x2008F, 0x1);
>>> +
>>> + /* load the dram quick boot firmware image */
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x0);
>>> + ddr_load_train_firmware(FW_1D_IMAGE);
>>> + ddrphy_qb_restore(dram_timing, fsp_id);
>>> +
>>> + /* excute the firmware */
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x0);
>>> + dwc_ddrphy_apb_wr(0xc0080, 0x3);
>>> + dwc_ddrphy_apb_wr(0xd0031, 0x1);
>>> + dwc_ddrphy_apb_wr(0xd0000, 0x1);
>>> + dwc_ddrphy_apb_wr(0xd0099, 0x9);
>>> + dwc_ddrphy_apb_wr(0xd0099, 0x1);
>>> + dwc_ddrphy_apb_wr(0xd0099, 0x0);
>>> +
>>> + /* Wait for the quick boot firmware to complete */
>>
>> Is there a special firmware for this quick boot firmware?
>
> Yes.
>
>>
>> Please explain the details. It is not clear why or how someone should
>> enable this QuickBoot feature.
>
> I think needs to use B0 chip to use this feature. I could
> add more information in V2.
Also please add more information on the flow, I see you use the binman
symbol from the image to grab the offset of this Quick Boot f/w. Please
add the flow as to what is the expectation of your boot image as well.
>
> Regards
> Peng.
--
Thanking You
Neha Malcom Francis
More information about the U-Boot
mailing list