Skip to content

Commit cae26fc

Browse files
committed
am261x: enet: Add CPSW Clock config
- Add CPSW Clock config -Fix CAN DMA Example Fixes: MCUSDK-14156 Signed-off-by: Ashwin Raj <[email protected]>
1 parent 99abc81 commit cae26fc

File tree

3 files changed

+81
-18
lines changed

3 files changed

+81
-18
lines changed

examples/drivers/mcan/canfd_loopback_dma/am261x-lp/r5fss0-0_nortos/example.syscfg

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ const dma_trig_xbar2 = dma_trig_xbar.addInstance();
4444
/**
4545
* Write custom configuration values to the imported modules.
4646
*/
47-
mcan1.$name = "CONFIG_MCAN0";
48-
mcan1.sdkInfra = "HLD";
49-
mcan1.MCAN.$assign = "MCAN1";
47+
mcan1.$name = "CONFIG_MCAN0";
48+
mcan1.sdkInfra = "HLD";
49+
mcan1.operMode = "DMA";
50+
mcan1.transferMode = "CALLBACK";
51+
mcan1.transferCallbackFxn = "App_CANFDTransferCallback";
52+
mcan1.errorCallbackFxn = "App_CANFDErrorCallback";
53+
mcan1.MCAN.$assign = "MCAN1";
5054

5155
const edma = scripting.addModule("/drivers/edma/edma", {}, false);
5256
const edma1 = edma.addInstance({}, false);

source/drivers/soc/am261x/soc_rcm.c

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,31 @@ static uint16_t gCptsClkSrcValMap[] =
448448
[SOC_RcmPeripheralClockSource_DPLL_PER_HSDIV0_CLKOUT2] = UNSUPPORTED_CLOCK_SOURCE,
449449
};
450450

451+
/**
452+
* @brief
453+
* Mapping Array for CPSW_5_50_250
454+
*
455+
* @details
456+
* Mapping Array between Clock mode and Clock Mode Value for CPSW_5_50_250
457+
*/
458+
static uint16_t gCpswClkSrcValMap[] =
459+
{
460+
[SOC_RcmPeripheralClockSource_XTALCLK] = 0x111U,
461+
[SOC_RcmPeripheralClockSource_SYS_CLK] = 0x222U,
462+
[SOC_RcmPeripheralClockSource_WUCPUCLK] = 0x000U,
463+
[SOC_RcmPeripheralClockSource_EXT_REFCLK] = 0x666U,
464+
[SOC_RcmPeripheralClockSource_RCCLK10M] = 0x555U,
465+
[SOC_RcmPeripheralClockSource_RCCLK32K] = UNSUPPORTED_CLOCK_SOURCE,
466+
[SOC_RcmPeripheralClockSource_CTPS_GENF0] = UNSUPPORTED_CLOCK_SOURCE,
467+
[SOC_RcmPeripheralClockSource_DPLL_CORE_HSDIV0_CLKOUT0] = UNSUPPORTED_CLOCK_SOURCE,
468+
[SOC_RcmPeripheralClockSource_DPLL_CORE_HSDIV0_CLKOUT1] = 0x333U,
469+
[SOC_RcmPeripheralClockSource_DPLL_CORE_HSDIV0_CLKOUT2] = UNSUPPORTED_CLOCK_SOURCE,
470+
[SOC_RcmPeripheralClockSource_DPLL_CORE_HSDIV0_CLKOUT3] = UNSUPPORTED_CLOCK_SOURCE,
471+
[SOC_RcmPeripheralClockSource_DPLL_ETH_HSDIV0_CLKOUT0] = 0x444U,
472+
[SOC_RcmPeripheralClockSource_DPLL_PER_HSDIV0_CLKOUT0] = UNSUPPORTED_CLOCK_SOURCE,
473+
[SOC_RcmPeripheralClockSource_DPLL_PER_HSDIV0_CLKOUT2] = UNSUPPORTED_CLOCK_SOURCE,
474+
};
475+
451476
/**
452477
* @brief
453478
* Mapping Array for GPMC
@@ -1087,6 +1112,13 @@ static void SOC_rcmGetClkSrcAndDivReg (SOC_RcmPeripheralId periphId,
10871112
*clkSrcVal = gIcssmUartClkSrcValMap[clkSource];
10881113
break;
10891114
}
1115+
case SOC_RcmPeripheralId_CPSW_5_50_250:
1116+
{
1117+
*clkSrcReg = &(ptrMSSRCMRegs->CPSW_5_50_250_CLK_MUX_CTRL);
1118+
*clkdDivReg = NULL; /* No Divisor register for CPSW */
1119+
*clkSrcVal = gCpswClkSrcValMap[clkSource];
1120+
break;
1121+
}
10901122
case SOC_RcmPeripheralId_CPTS:
10911123
{
10921124
*clkSrcReg = &(ptrMSSRCMRegs->CPTS_CLK_SRC_SEL);
@@ -2368,25 +2400,43 @@ int32_t SOC_rcmSetPeripheralClock (SOC_RcmPeripheralId periphId,
23682400
clkDivisor = SOC_rcmGetModuleClkDivVal(Finp, freqHz);
23692401
SOC_rcmGetClkSrcAndDivReg (periphId, clkSource, &clkSrcVal, &ptrClkSrcReg, &ptrClkDivReg);
23702402

2371-
if ((ptrClkSrcReg != NULL) && (ptrClkDivReg != NULL) && (clkSrcVal != 0x888U))
2403+
if(periphId == SOC_RcmPeripheralId_CPSW_5_50_250)
23722404
{
2373-
uint16_t clkDivVal;
2374-
2375-
/* Create the Divider Value to be programmed */
2376-
clkDivVal = ((uint16_t)clkDivisor & 0xFU);
2377-
clkDivVal = (clkDivVal | (clkDivVal << 4U) | (clkDivVal << 8U));
2378-
2379-
/* Write the Divider Value */
2380-
*ptrClkDivReg = SOC_rcmInsert16 (*ptrClkDivReg, 11U, 0U, clkDivVal);
2381-
2382-
/* Write the Clock Source Selection Value */
2383-
*ptrClkSrcReg = SOC_rcmInsert16 (*ptrClkSrcReg, 11U, 0U, clkSrcVal);
2384-
retVal = SystemP_SUCCESS;
2405+
/* CPSW Clock doesn't have Sel and Div registers. It has Mux register which is passed as Sel. */
2406+
if ((ptrClkSrcReg != NULL) && (clkSrcVal != 0x888U))
2407+
{
2408+
/* Write the Clock Mux Value */
2409+
*ptrClkSrcReg = SOC_rcmInsert16 (*ptrClkSrcReg, 11U, 0U, clkSrcVal);
2410+
retVal = SystemP_SUCCESS;
2411+
}
2412+
else
2413+
{
2414+
/* Error */
2415+
retVal = SystemP_FAILURE;
2416+
}
23852417
}
23862418
else
23872419
{
2388-
/* Error */
2389-
retVal = SystemP_FAILURE;
2420+
if ((ptrClkSrcReg != NULL) && (ptrClkDivReg != NULL) && (clkSrcVal != 0x888U))
2421+
{
2422+
uint16_t clkDivVal;
2423+
2424+
/* Create the Divider Value to be programmed */
2425+
clkDivVal = ((uint16_t)clkDivisor & 0xFU);
2426+
clkDivVal = (clkDivVal | (clkDivVal << 4U) | (clkDivVal << 8U));
2427+
2428+
/* Write the Divider Value */
2429+
*ptrClkDivReg = SOC_rcmInsert16 (*ptrClkDivReg, 11U, 0U, clkDivVal);
2430+
2431+
/* Write the Clock Source Selection Value */
2432+
*ptrClkSrcReg = SOC_rcmInsert16 (*ptrClkSrcReg, 11U, 0U, clkSrcVal);
2433+
retVal = SystemP_SUCCESS;
2434+
}
2435+
else
2436+
{
2437+
/* Error */
2438+
retVal = SystemP_FAILURE;
2439+
}
23902440
}
23912441

23922442
return (retVal);
@@ -2700,6 +2750,11 @@ int32_t SOC_rcmEnablePeripheralClock(SOC_RcmPeripheralId periphId, uint32_t enab
27002750
}
27012751
break;
27022752
}
2753+
case SOC_RcmPeripheralId_CPSW_5_50_250:
2754+
{
2755+
/* Do nothing since there is no GATE register */
2756+
break;
2757+
}
27032758
case SOC_RcmPeripheralId_GPMC:
27042759
{
27052760
if(enable==1)

source/drivers/soc/am261x/soc_rcm.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,10 @@ typedef enum SOC_RcmPeripheralId_e
387387
* \brief Value specifying CPTS
388388
*/
389389
SOC_RcmPeripheralId_CPTS,
390+
/**
391+
* \brief Value specifying CPSW_5_50_250
392+
*/
393+
SOC_RcmPeripheralId_CPSW_5_50_250,
390394
/**
391395
* \brief Value specifying GPMC
392396
*/

0 commit comments

Comments
 (0)