I'm developing a product using an iMX8M mini running Linux, it's based on the NXP evaluation board.
I have built my Linux image using Yocto but I would like to enable spread spectrum on the CPU
Does anyone have and examples or documentation. I have tried Google but it hasn't turned up anything useful yet.
The i.MX8M Mini processor contains nine PLLs that allow to flexibly generate various clocks within the SoC. These PLLs are: ARM PLL, DRAM PLL, VPU PLL, GPU PLL, System PLL1, System PLL2, System PLL3, Audio PLL1, Audio PLL2, Video PLL1. Among these PLLs, DRAM PLL, Audio PLL1, Audio PLL2 and Video PLL1 have the spread spectrum function. For details about i.MX8M Mini SoC clock generation, please refer to the Section 5.1 "Clock Control Module (CCM)" of the i.MX8M Mini Reference Manual document, available on the processor's Documentation web page:
The spread spectrum mode parameters of all i.MX8M Mini PLLs that have this functionality can be calculated using the formulas below.
1. The modulation frequency can be calculated as:
MF = Fin / p / mfr / (2^5) [Hz]
Fin - the input reference frequency (typically, 24MHz = 24 * (10^6)Hz);
p = CCM_ANALOG_XXX_YYY_FDIV_CTL0[PLL_PRE_DIV] - reference frequency pre-divider value;
mfr = CCM_ANALOG_XXX_YYY_SSCG_CTRL[PLL_MFREQ_CTL] - modulation frequency factor.
2. The modulation range can be calculated as:
MR = mfr * mrr / m / (2^6) * 100 [% percentage of the PLL output frequency]
mfr = CCM_ANALOG_XXX_YYY_SSCG_CTRL[PLL_MFREQ_CTL] - modulation frequency factor;
mrr = CCM_ANALOG_XXX_YYY_SSCG_CTRL[PLL_MRAT_CTL] - modulation range factor;
m = CCM_ANALOG_XXX_YYY_FDIV_CTL0[PLL_MAIN_DIV] - PLL main divider value.
3. The CCM_ANALOG_XXX_YYY_SSCG_CTRL[SEL_PF] field controls the PLL output frequency sweep as follows.
00 - the main PLL output frequency is the upper sweep frequency;
01 - the main PLL output frequency is the lower sweep frequency;
1x - the main PLL output frequency is the center sweep frequency.
4. CCM_ANALOG_XXX_YYY_SSCG_CTRL[SSCG_EN] is the spread spectrum mode enable bit.
For PLL control register details, please refer to the Section 5.1.8 "CCM Analog Memory Map/Register Definition" of the document above.
The clock control driver of the Linux BSP does not support the spread spectrum mode, so, it should be modified appropriately according to the description above.