enable the spread spectrum

Showing results for 
Show  only  | Search instead for 
Did you mean: 

enable the spread spectrum

enable the spread spectrum


         Here is the document about how to enable spread spectrum in imx6.


best regards



correct some word in the documents  change "before switch to OSC_CLK, it need power down the PLL2 " to "after switch to OSC_CLK, power down the PLL2 "

Dear Junping Mao,

Thank you for your post, however please consider moving it to the right community place for better visibility.

For details please see general advice https://community.freescale.com/docs/DOC-99909

Thank you for using Freescale Community.



Hello Jumping Mao,

thanks for your document. You say "To enable the spread spectrum, the PLL2 need reconfigure, it need be shut down and enable/setting the spread spectrum  and power on back again". Where did you get this information from? I cannot find anything like this in the i.MX6 reference manual (IMX6DQ-RefMan-RM-r2-2014-06.pdf). In my understanding, it should be possible to enable spread spectrum on-the-fly. Am I correct? Is there anyone from Freescale who can confirm this?

Best Regards,


Hi Tim,

     The info is from SOC owner, it's the required sequence, can't set on the fly

Thanks, Jumping Mao. Freescale, can you please confirm this? Is there an official document where this sequence is described? We enable the spread spectrum on-the-fly here on our i.MX6 based systems, and it seems to work (change is immediately visible in measured frequency spectrum). Do we have to expect any side effects?

Hi Jumping Mao,

many thanks for providing this artice and the boot loader changes to set up the PLL2 in spread spectrum mode.

I following this guidance but run into boot problems when running it on my i.MX6D system. Finally I figured out that the plugin was rejected and could fix it.

At this discussion Enable the PLL2 spread spectrum feature on a i.MX6D

I uploaded my flash_header.S in case other users might have the same trouble.

I also changed the sequence where PLL2 us powered down/up. Using the PLL2 register description of the MX6D the bit for BYPASS mode was set (0x00010000) instead of Power Down (0x00001000).



Hello Tim,

Can you please provide instruction to enable spread spectrum on-the-fly? I am writing below two registers from kernel board init file but I don't see any changes.

0x20c 8060 = 0x1770

0x20c 8040 = 0x05dc8006

Is there anything else needs to be done?



Hello Uwe,

I see all absolute address in IVT section (e.g. app_code_jump_v:        .long 0x00907458), but in my old code we have label based address assignment (app_code_jump_v:  .word _start).

Does it work for solo too? I am using uboot 2009 and with the given changes my board is not booting up.



See the following snippet from my code:

/* Disable spread spectrum mode */

__raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) & ~ANADIG_PLL_528_SYS_SS_ENABLE), anatop_base + PLL2_528_OFFSET +  PLL_528_SS_OFFSET);


/* Write new values */

__raw_writel(sys_ss, anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET);

__raw_writel(denom, anatop_base + PLL2_528_OFFSET + PLL_528_DENOM_DIV_OFFSET);


/* Enable spread spectrum mode */

if (enabled)

        __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) | ANADIG_PLL_528_SYS_SS_ENABLE), anatop_base + PLL2_528_OFFSET +  PLL_528_SS_OFFSET);

Tried with denom=0x190, sys_ss=0xFA0001 and enabled=1 (which gives a spread spectrum range of 15 MHz, modulation frequency of 48 kHz and frequency step of 60 kHz).

I use this code at runtime after the kernel has booted by writing to a procfs entry.

Thanks Tim, it works for us!


Hi Tim Jaacks,

It seems you modified other file than flash_header.S. Which BSP version was that and which file did you modify?

I am using Linux BSP L3.10.17_1.0.2 and I don't see flash_header.S.




Dear Junping Mao,

Do you have details on which files to be modified in Linux BSP L3.10.17_1.0.2?



Hi Jumping Mao,

I was using a 2015 version of the uboot for imx6 and the plugin support did not work. I would like to know which repo should I use in order to test the patches for the spread spectrum?.



The code loaded is missing a line, please add the line in your code.

    ldr r4, [r3]
    ldr r3, =ROM_VERSION_TO12
    cmp r4, r3
    ldr r4, [r3, #ROM_API_HWCNFG_SETUP_OFFSET]              //missing line
    blx r4 /* This address might change in future ROM versions */

Dear Jack Mao,

How do I implement this feature in UBOOT 2016 ?


Peter Tseng


I'm confused about attached "spread spectrum.docx"

  1. Why CCM_ANALOG_PLL_SYS_NUM is not used in your scripts & document? and how to used it?
  2. ssc_top should be ssc_stop in page 4?
  3. In page 3:

              the modulation frequency is controlled about 48k.

       In Page 4:

              the formula "Modulation frequency = Fref * (ssc_step) / (2 * ssc_top)" is not matched with demo code: 24000 ≠ 48000 



  1. Enable U-Boot Plugin by CONFIG_USE_PLUGIN (v16.03) or CONFIG_USE_IMXIMG_PLUGIN (v18.03)
  2. Translate your DCD data into assembly language script in macro imx6_XXX_ddr_setting in plugin.S
  3. Copy macro spreadspectrum definition, in following url, to plugin.S, Spread Spectrum in i.mx6 | Reference Designer 
  4. Modify #60 & #40 registers in macro spreadspectrum
  5. Call macro spreadspectrum at the first line in your imx6_XXX_ddr_setting in plugin.S
  6. Build & Flash & Test

please refer to the new doc  attached on the top

Please fix the typo "ssc_top" --> "ssc_stop" in spread spectrum.docx

No ratings
Version history
Last update:
‎03-06-2014 12:19 AM
Updated by: