Here is the document about how to enable spread spectrum in imx6.
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?
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).
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?
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 */
__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?
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.
before_calling_rom___pu_irom_hwcnfg_setup: ldr r3, =ROM_VERSION_OFFSET ldr r4, [r3] ldr r3, =ROM_VERSION_TO12 cmp r4, r3 ldrge r3, =ROM_API_TABLE_BASE_ADDR_MX6DL_TO12 ldrlt r3, =ROM_API_TABLE_BASE_ADDR_LEGACY ldr r4, [r3, #ROM_API_HWCNFG_SETUP_OFFSET] //missing line blx r4 /* This address might change in future ROM versions */after_calling_rom___pu_irom_hwcnfg_setup:
Dear Jack Mao,
How do I implement this feature in UBOOT 2016 ?
I'm confused about attached "spread spectrum.docx"
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
please refer to the new doc attached on the top
Please fix the typo "ssc_top" --> "ssc_stop" in spread spectrum.docx