How can I enable Spread Spectrum for Apalis iMX6?


I need to activate spread spectrum for the i.MX6 processor on my apalis modules.

I found the follow instructions:

How can I add these changes to my Toradex BSP? Is there another way to enable spread spectrum? Do you have experience doing this?

Thanks and kind regards

Hi Christian

We have no experience with enabling spread spectrum.

With the 2015.04-toradex U-Boot we use the IVT/DCD table approach. So you would have to convert that to a plugin approach as in the nxp community article.
The following with its includes setup the DCD table for Apalis iMX6:

We are currently transitioning to a 2016.11 based U-Boot and we transition to use a SPL which sets up the DDR RAM.
I guess that the spread spectrum feature could be initialized from the SPL before setting up DDR.
E.g. before the call to spl_dram_init(); (or ccgr_init() ?).

To build U-Boot with SPL

$ make apalis_imx6_defconfig
$ make u-boot-with-spl.imx

And deploy the resulting u-boot-with-spl.imx as you would have with u-boot.imx before.


Hi Max,

thanks for the overview and entry points you give. I’ll dig into this and post any useful results.

Kind regards


Before starting to implement the changes from NXP, I decided (at least) to try the kernel module given at GitHub - code-ing/pixiepro-spread-spectrum: Kernel module to enable spread spectrum on IMX6 PixiePro boards and it… works :smiley:

Loading/Unloading the module activates/deactivates the spread spectrum feature.

Thank you for sharing that information. That is good to know.
Strange that NXP claims that you cannot change it after DDR initizialisation.


Hi @CSchmiedl

I’m not working on the same board but try to do a similar thing. I used the kernel module you mentioned and modified it (register base address definition). It seems to work fine when I read the values back from the registers and I can load/unload the module as many times as I want. But the problem is the verification with the Oscilloscope. Did you measure it in some way to verify that the PLL changes on the fly (without power down and up like NXP mentions)?
I cannot measure any difference with the module loaded and unloaded, although the enable bit is different and step and stop value are set as expected.

Hi @Hastoll,

Did you make any progress on this? I tried the same as you loading and unloading the module but don’t see any changes on the scope.
Also I tried the NXP solution and change the bootloader code but my bootloader is not starting anymore. If you’ve made any progress what solution works for you?