mirror of
https://github.com/apache/nuttx.git
synced 2026-06-07 01:05:54 +08:00
SAMA5 PCK: Add Main clock as an option for the PCK clock source
This commit is contained in:
@@ -107,39 +107,49 @@ uint32_t sam_pck_configure(enum pckid_e pckid, enum pckid_clksrc_e clksrc,
|
||||
uint32_t clkin;
|
||||
uint32_t actual;
|
||||
|
||||
/* Pick a clock source. Several are possible but only MCK, PLLA, of SCK is
|
||||
* chosen here.
|
||||
/* Pick a clock source. Several are possible but only MCK, PLLA, the
|
||||
* MAINCK,or SCK are supported here.
|
||||
*/
|
||||
|
||||
if (clksrc == PCKSRC_SCK)
|
||||
switch (clksrc)
|
||||
{
|
||||
/* Pick the slow clock */
|
||||
case PCKSRC_MCK: /* Source clock = MCK or PLLACK */
|
||||
{
|
||||
/* Pick either the MCK or the PLLACK, whichever will best realize
|
||||
* the target frequency.
|
||||
*/
|
||||
|
||||
DEBUGASSERT(BOARD_MCK_FREQUENCY < BOARD_PLLA_FREQUENCY);
|
||||
|
||||
/* Pick the PLLACK if it seems like a better choice */
|
||||
|
||||
if (frequency <= BOARD_MCK_FREQUENCY ||
|
||||
frequency < BOARD_PLLA_FREQUENCY / 64)
|
||||
{
|
||||
regval = PMC_PCK_CSS_MCK;
|
||||
clkin = BOARD_MCK_FREQUENCY;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval = PMC_PCK_CSS_PLLA;
|
||||
clkin = BOARD_PLLA_FREQUENCY;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case PCKSRC_MAINCK: /* Source clock = MAIN clock */
|
||||
regval = PMC_PCK_CSS_MAIN;
|
||||
clkin = BOARD_MAINCK_FREQUENCY;
|
||||
break;
|
||||
|
||||
case PCKSRC_SCK: /* Source clock = SCK */
|
||||
regval = PMC_PCK_CSS_SLOW;
|
||||
clkin = BOARD_SLOWCLK_FREQUENCY;
|
||||
}
|
||||
break;
|
||||
|
||||
/* If the source is not the slow clock, then pick either the MCK or the
|
||||
* PLLACK, whichever will best realize the target frequency.
|
||||
*/
|
||||
|
||||
else
|
||||
{
|
||||
DEBUGASSERT(BOARD_MCK_FREQUENCY < BOARD_PLLA_FREQUENCY);
|
||||
|
||||
/* Pick the PLLACK if it seems like a better choice */
|
||||
|
||||
if (frequency <= BOARD_MCK_FREQUENCY ||
|
||||
frequency < BOARD_PLLA_FREQUENCY / 64)
|
||||
{
|
||||
regval = PMC_PCK_CSS_MCK;
|
||||
clkin = BOARD_MCK_FREQUENCY;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval = PMC_PCK_CSS_PLLA;
|
||||
clkin = BOARD_PLLA_FREQUENCY;
|
||||
}
|
||||
default:
|
||||
dbg("ERROR: Unknown clock source\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The the larger smallest divisor that does not exceed the requested
|
||||
|
||||
@@ -64,6 +64,7 @@ enum pckid_e
|
||||
enum pckid_clksrc_e
|
||||
{
|
||||
PCKSRC_MCK = 0, /* Source clock is the master clock (MCK) or PLLA output (PLLACK) */
|
||||
PCKSRC_MAINCK, /* Source clock is the main clock (probably the XTAL) */
|
||||
PCKSRC_SCK /* Source clock is the slow clock (SCK) */
|
||||
};
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (768000000) /* PLLACK: 64 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (384000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (128000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (792000000) /* PLLACK: 66 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (396000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (528000000) /* PLLACK: 44 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (528000000) /* CPU: PLLACK / 1 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 1 / 1 / 4 */
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
* the Main clock source in the on-board 12MHz crystal.
|
||||
*/
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (sam_pllack_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PLLADIV2_FREQUENCY (sam_plladiv2_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PCK_FREQUENCY (sam_pck_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (768000000) /* PLLACK: 64 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (384000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (128000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (792000000) /* PLLACK: 66 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (396000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -118,6 +118,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (528000000) /* PLLACK: 44 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (528000000) /* CPU: PLLACK / 1 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 1 / 1 / 4 */
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
* the Main clock source in the on-board 12MHz crystal.
|
||||
*/
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (sam_pllack_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PLLADIV2_FREQUENCY (sam_plladiv2_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PCK_FREQUENCY (sam_pck_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
|
||||
@@ -159,6 +159,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (768000000) /* PLLACK: 64 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (384000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (128000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (792000000) /* PLLACK: 66 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (396000000) /* CPU: PLLACK / 2 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 2 / 1 / 3 */
|
||||
|
||||
@@ -116,6 +116,7 @@
|
||||
|
||||
/* Resulting frequencies */
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (528000000) /* PLLACK: 44 * 12Mhz / 1 */
|
||||
#define BOARD_PCK_FREQUENCY (528000000) /* CPU: PLLACK / 1 / 1 */
|
||||
#define BOARD_MCK_FREQUENCY (132000000) /* MCK: PLLACK / 1 / 1 / 4 */
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
* the Main clock source in the on-board 12MHz crystal.
|
||||
*/
|
||||
|
||||
#define BOARD_MAINCK_FREQUENCY BOARD_MAINOSC_FREQUENCY
|
||||
#define BOARD_PLLA_FREQUENCY (sam_pllack_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PLLADIV2_FREQUENCY (sam_plladiv2_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
#define BOARD_PCK_FREQUENCY (sam_pck_frequency(BOARD_MAINOSC_FREQUENCY))
|
||||
|
||||
Reference in New Issue
Block a user