xWRL684x MMWAVE-L-SDK  06.00.05
CLOCKS

Features Supported

The SOC driver offers an API called SOC_clocksEnable that sets up and activates both PLL_DIG and ADPLL and configures r5, DSP clocks along with their multiplexers (MUXes).

Note
DSP frequency configured in SysConfig only configures the MUX for DSP. However, powering on the DSP is handled by RBL. Setting DSP frequency doesnot mean DSP is powered on.

This API configures:

  • PLLDIG is configured to run at 400MHz and post divider is configured as 2 to get 200MHz.
  • ADPLL is configured as below:
    • 1600MHz - When DSP frequency is 400MHz or XTAL(40MHz).
    • 1800MHZ - When DSP frequency is 450MHz or 360MHz.
  • HS Divider Clock Out 0 is configured as source to fast clock 1 and is configured to 200MHz.
  • HS Divider Clock Out 1 is configured as source to fast clock 2 and is configured as below:
    • 400MHz - When DSP frequency is 400MHz.
    • 450MHZ - When DSP frequency is 450MHz.
    • 360MHZ - When DSP frequency is 360MHz.
  • If DSP frequency is XTAL(40MHz), HS Divider Clock Out 1 and fast clock 1 are not configured.
  • HS Divider Clock Out 2 to 50MHz.
    • NOTE: This clock cannot be configured more than 600MHz hence ADPLL is used as the source clock for LVDS. However, though ADPLL is the source of LVDS, this clock has to be enabled for LVDS by design.
  • HS Divider Clock Out 3 is configured as source to DSS domain and is configured to 200MHz.
  • Fast clock 1 with post div 1 is selected as a source clock for R5 core. Hence, R5 core runs at 200MHz.
  • DSP core clock source is set to:
    • Fast Clock 2 with Div 1: When DSP frequency is 400MHz or 450MHz or 360MHz.
    • XTAL(40MHz) with Div 1: When DSP frequency is XTAL(40MHz)

SysConfig Features

The SysCfg offers the ability to modify the clock speed of the DSP, as depicted in the below figure.

Example Usage

Include the below file to access the APIs

#include <drivers/soc.h>

Configure Clocks

int32_t SOC_clocksEnable(uint32_t dspFreqHz)
{
int32_t status = SystemP_SUCCESS;
SOC_RcmDspClockSource dspClkSource;
uint32_t hsdiv0FreqHz;
uint32_t hsdiv1FreqHz;
uint32_t hsdiv2FreqHz;
uint32_t hsdiv3FreqHz;
hsdiv2FreqHz = SOC_HsDivClkOut_50MHzFreq;
if(dspFreqHz == SOC_C66CoreFreq400MHz)
{
}
else if(dspFreqHz == SOC_C66CoreFreq450MHz)
{
}
else if(dspFreqHz == SOC_C66CoreFreq360MHz)
{
}
else /* When DSP frequency is set to OSC(40MHz) */
{
}
/* Configure PLLDIG out with 400MHz and post divider as 2 to get 200MHz */
/* Configure the ADPLL out to:
* 1600MHz - When DSP frequency is 400MHz or OSC(40MHz)
* 1800MHZ - When DSP frequency is 450MHz or 360MHz
*/
SOC_rcmCoreADPLLConfig(adpllFreqId);
/* Configuring HS Divider Clock Out 0 to 200MHz */
SOC_rcmConfigureHsDividerClocks(SOC_RcmADPllHsDivClkOut0,SOC_RCM_FREQ_HZ2MHZ(hsdiv0FreqHz), gSocRcmADPLLFreqId2FOutMap[adpllFreqId]);
/* Configuring HS Divider Clock Out 2 to 50MHz */
SOC_rcmConfigureHsDividerClocks(SOC_RcmADPllHsDivClkOut2,SOC_RCM_FREQ_HZ2MHZ(hsdiv2FreqHz), gSocRcmADPLLFreqId2FOutMap[adpllFreqId]);
/* Configuring HS Divider Clock Out 3 to 200MHz*/
SOC_rcmConfigureHsDividerClocks(SOC_RcmADPllHsDivClkOut3,SOC_RCM_FREQ_HZ2MHZ(hsdiv3FreqHz), gSocRcmADPLLFreqId2FOutMap[adpllFreqId]);
/* Select HS Divider Clock Out 0 as source for Fast Clock 1 which is 200MHz */
/* When the DSP frequency is not 40MHz (OSC), configure Fast Clock 2 and HS Divider Clock Out 1. However, if the DSP frequency is 40MHz (OSC), do not configure these clocks, as the OSC clock will be used directly as the source for the DSP instead of Fast Clock 2. */
if(dspFreqHz != SOC_RCM_XTAL_CLK_40MHZ)
{
/* Configuring HS Divider Clock Out 1 to:
* 400MHz - When DSP frequency is 400MHz
* 450MHZ - When DSP frequency is 450MHz
* 360MHZ - When DSP frequency is 360MHz
*/
SOC_rcmConfigureHsDividerClocks(SOC_RcmADPllHsDivClkOut1,SOC_RCM_FREQ_HZ2MHZ(hsdiv1FreqHz), gSocRcmADPLLFreqId2FOutMap[adpllFreqId]);
/* Select ADPLL HDIV CLK 1 as Source for Fast Clock 2 */
}
/* Configure R5 Clock source to Fast Clock 1 with Div 1. This configures core at 200MHz */
/* Configure DSP Clock source to:
* Fast Clock 2 with Div 1: When DSP frequency is 400MHz or 450MHz or 360MHz
* OSC with Div 1: When DSP frequency is OSC(40MHz) */
SOC_rcmSetDSPClock(dspFreqHz, dspFreqHz, dspClkSource);
/* Configure DSS Clock source to HS DIV CLOCK3 with Div 1. This configures core at 200Mhz */
return status;
}
SOC_FastClk1Freq200MHz
#define SOC_FastClk1Freq200MHz
Definition: soc.h:86
SOC_RcmADPllFoutFreqId_CLK_1600MHZ
@ SOC_RcmADPllFoutFreqId_CLK_1600MHZ
Definition: soc_rcm.h:212
SOC_RcmPllFoutFreqId_CLK_400MHZ
@ SOC_RcmPllFoutFreqId_CLK_400MHZ
Definition: soc_rcm.h:203
SOC_TopssSelFclk2
void SOC_TopssSelFclk2(SOC_TopssFclk2Source clkSrc)
SOC_C66CoreFreq360MHz
#define SOC_C66CoreFreq360MHz
Definition: soc.h:84
SOC_RCM_FREQ_HZ2MHZ
#define SOC_RCM_FREQ_HZ2MHZ(hz)
Definition: soc.h:121
SOC_rcmCoreDigPllConfig
void SOC_rcmCoreDigPllConfig(SOC_RcmPllFoutFreqId, uint8_t)
SOC_rcmCoreADPLLConfig
void SOC_rcmCoreADPLLConfig(SOC_RcmADPllFoutFreqId outFreqId)
SOC_HsDivClkOut_360MHzFreq
#define SOC_HsDivClkOut_360MHzFreq
Definition: soc.h:94
SOC_TopssFclk2Source_ADPLL_HSDIV_CLK1
@ SOC_TopssFclk2Source_ADPLL_HSDIV_CLK1
Definition: soc_rcm.h:88
SOC_RcmADPllFoutFreqId
SOC_RcmADPllFoutFreqId
Definition: soc_rcm.h:211
SOC_HsDivClkOut_50MHzFreq
#define SOC_HsDivClkOut_50MHzFreq
Definition: soc.h:90
SOC_HsDivClkOut_200MHzFreq
#define SOC_HsDivClkOut_200MHzFreq
Definition: soc.h:91
SOC_RCM_XTAL_CLK_40MHZ
#define SOC_RCM_XTAL_CLK_40MHZ
Definition: soc.h:95
SOC_R5FCoreFreq200MHz
#define SOC_R5FCoreFreq200MHz
Definition: soc.h:81
SOC_RcmDspClockSource_OSC_CLK
@ SOC_RcmDspClockSource_OSC_CLK
Definition: soc_rcm.h:110
SOC_C66CoreFreq400MHz
#define SOC_C66CoreFreq400MHz
Definition: soc.h:82
SOC_RcmADPllHsDivClkOut0
@ SOC_RcmADPllHsDivClkOut0
Definition: soc_rcm.h:222
SOC_RcmDssClockSource_HSDIVCLKOUT3_CLK
@ SOC_RcmDssClockSource_HSDIVCLKOUT3_CLK
Definition: soc_rcm.h:123
SOC_rcmConfigureHsDividerClocks
void SOC_rcmConfigureHsDividerClocks(SOC_RcmADPllHsDivClkOut HsDividerClkOutSel, uint32_t foutMHz, uint32_t finMHz)
SOC_RcmADPllHsDivClkOut2
@ SOC_RcmADPllHsDivClkOut2
Definition: soc_rcm.h:224
SOC_DSSFreq200MHz
#define SOC_DSSFreq200MHz
Definition: soc.h:85
SOC_rcmSetDSSClock
int32_t SOC_rcmSetDSSClock(uint32_t dssFreqHz, uint32_t inpFreqHz, SOC_RcmDssClockSource clkSrc)
SOC_C66CoreFreq450MHz
#define SOC_C66CoreFreq450MHz
Definition: soc.h:83
SOC_RcmDspClockSource_FAST_CLK2
@ SOC_RcmDspClockSource_FAST_CLK2
Definition: soc_rcm.h:111
SOC_HsDivClkOut_450MHzFreq
#define SOC_HsDivClkOut_450MHzFreq
Definition: soc.h:93
SystemP_SUCCESS
#define SystemP_SUCCESS
Return status when the API execution was successful.
Definition: SystemP.h:56
SOC_rcmSetR5Clock
int32_t SOC_rcmSetR5Clock(uint32_t r5FreqHz, uint32_t inpFreqHz, SOC_RcmR5ClockSource clkSrc)
SOC_TopssFclk1Source_ADPLL_HSDIV_CLK0
@ SOC_TopssFclk1Source_ADPLL_HSDIV_CLK0
Definition: soc_rcm.h:75
SOC_RcmDspClockSource
SOC_RcmDspClockSource
DSP Clock Sources.
Definition: soc_rcm.h:109
SOC_TopssSelFclk1
void SOC_TopssSelFclk1(SOC_TopssFclk1Source clkSrc)
SOC_clocksEnable
int32_t SOC_clocksEnable(uint32_t dspFreqHz)
Enable PLL Dig, ADPLL and set clocks for R5, C66, DSS, Fast Clock's and HSDIV's.
SOC_RcmADPllHsDivClkOut3
@ SOC_RcmADPllHsDivClkOut3
Definition: soc_rcm.h:225
SOC_HsDivClkOut_400MHzFreq
#define SOC_HsDivClkOut_400MHzFreq
Definition: soc.h:92
SOC_RcmR5ClockSource_FAST_CLK1
@ SOC_RcmR5ClockSource_FAST_CLK1
Definition: soc_rcm.h:101
SOC_RcmADPllFoutFreqId_CLK_1800MHZ
@ SOC_RcmADPllFoutFreqId_CLK_1800MHZ
Definition: soc_rcm.h:213
SOC_rcmSetDSPClock
int32_t SOC_rcmSetDSPClock(uint32_t dspFreqHz, uint32_t inpFreqHz, SOC_RcmDspClockSource clkSrc)
SOC_RcmADPllHsDivClkOut1
@ SOC_RcmADPllHsDivClkOut1
Definition: soc_rcm.h:223