Zynq MPSoC Dynamic DDR DIMM Configuration support
Jorge Ramirez-Ortiz, Foundries
jorge at foundries.io
Thu May 13 09:36:49 CEST 2021
On 13/05/21, Jorge Ramirez-Ortiz, Foundries wrote:
> On 13/05/21, Michal Simek wrote:
> > Hi Jorge,
> >
> > On 5/12/21 11:21 PM, Jorge Ramirez-Ortiz, Foundries wrote:
> > > Hi Michal
> > >
> > > We are doing some work on an MPSoC UZ3EG platform part of which
> > > requires us to replace FSBL with SPL.
> >
> > Just for curiosity what's the reason for this requirement that fsbl is
> > not enough?
>
> we prefer to have a common boot strategy on all the boards we support
> (whether it is from NXP, Xilinx, ST or TI); it just simplifies the OTA
> process (including their firmwares); and of course our meta layers.
>
> >
> > >
> > > It seems the actual boot process is becoming an issue on these SoCs;
> > > currently, 1) we embed the PMU firmware on SPL so the bootrom can
> > > extract it and program it;
> >
> > Actually it is not working like this. PMU FW is own part of boot.bin and
> > it is not embed in SPL.
>
> yes, absolutely (boot.bin is what we have been flashing), holding SPL and FW
>
> >
> >
> > > 2) then SPL configures the PMU using a
> > > platform specific binary that gets built also with SPL;
> >
> > PMU cfg object.
>
> yep, pm_cfg_obj.c
>
> >
> >
> > and finally,
> > > 3) SPL sets up the DDR using its psu_init_gpl.c settings (also board
> > > specific, part of the XSA).
> >
> > yes.
> >
> > >
> > > It is this final step in the boot sequence that is being broken by the
> > > Dynamic DDR DIMM configuration feature [1]
> > >
> > > [1] https://www.xilinx.com/support/answers/75768.html
> >
> > This was developed for zcu102 and maybe others boards which have DIMM
> > modules where origin part were EOL.
>
> right.
>
> but notice that there is also support on u-boot for
> altera/imx/marvell/microchip; so just wondering if we should add
> drivers/ddr/xilinx to this list.
>
> >
> >
> > > Are you aware of any work in progress to support this? Any thoughts on
> > > how to work around it and train the DDR? will the functionality
> > > required to implmenet Dynamic DDR DIMM configuration be added as a
> > > separate file to the XSA tarball or will we need to do some native
> > > implementation in SPL?
> >
> > I am not aware about any work on SPL side to support this. IIRC FSBL
> > didn't have generic DDR configuration. It was only by reading SPD and
> > aligned some parameters but it is quite a long time I have looked at it
> > last time.
>
> ok
>
> >
> >
> > > Becase without a change in the last link in the process chain
> > > described earlier (calls to psu_init()), DDR just wont be accessible
> > > to U-BOOT or OP-TEE.
> > >
> > > In our case, we were able to boot from QSPI, boot SPL (in OCM), have
> > > SPL unpack and validate the FIT image, execute TF-A(in OCM), but then
> > > any jumps to OP-TEE or U-BOOT would obviously not progress since the
> > > DDR wasnt properly trained/initialized.
> > >
> > > so, any thoughts or plans you can share?
> >
> > The question is why you need this feature to be there. It is not working
> > for every DIMM module. And normally if you have custom boards you need
> > just one DDR configuration (or limited number based on HW versions) and
> > for that there is really no need to waste your boot up time on it.
>
> not sure what you mean. we need this feature because it adds the
> expected flexibility to the bootloader. Sure, we can hardcode DDR
> configurations but why should we when it can be resolved by
> software. Am I missing your point?
>
> > You can add multiple configurations to psu_init_gpl() and based on any
> > information (board rev/pins/etc) decided which one should be used.
>
> so what you are suggesting is that we customize psu_init_gpl() to the
> target (ie, have an updated xsa file with whatever config we need for
> this system).
>
> what I fail to grasp is why we can't take a step forward and do what
> we do for other architectures in u-boot. and what fsbl already does by
> config.
>
> I mean, why not? do you foresee any integration issues with the
> current bootflow?
this is the current code on fsbl_init
so if we dont do this change, there will be more designs encountering
the same issue that we had. IMO it should be addressed in SPL.
#ifdef XFSBL_PS_DDR
#ifdef XPAR_DYNAMIC_DDR_ENABLED
/*
* This function is used for all the ZynqMP boards.
* This function initialize the DDR by fetching the SPD data from
* EEPROM. This function will determine the type of the DDR and decode
* the SPD structure accordingly. The SPD data is used to calculate the
* register values of DDR controller and DDR PHY.
*/
Status = XFsbl_DdrInit();
if (XFSBL_SUCCESS != Status) {
XFsbl_Printf(DEBUG_GENERAL,"XFSBL_DDR_INIT_FAILED\n\r");
goto END;
}
#endif
#endif
>
> >
> > Thanks,
> > Michal
> >
More information about the U-Boot
mailing list