summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-08-03 10:17:50 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-08-03 10:17:50 -0600
commit936a0db0adc216fcdeb90d059b32d1e5120e6803 (patch)
tree758506728863f0a32b88ffb5346e3a742d024cac
parent0a1aac1723ce2ff8b22996bec9cb0f3296888473 (diff)
downloadnuttx-936a0db0adc216fcdeb90d059b32d1e5120e6803.tar.gz
nuttx-936a0db0adc216fcdeb90d059b32d1e5120e6803.tar.bz2
nuttx-936a0db0adc216fcdeb90d059b32d1e5120e6803.zip
SAMA5 PCK: Add Main clock as an option for the PCK clock source
-rw-r--r--nuttx/arch/arm/src/sama5/sam_pck.c62
-rw-r--r--nuttx/arch/arm/src/sama5/sam_pck.h1
-rw-r--r--nuttx/configs/sama5d3-xplained/include/board_384mhz.h1
-rw-r--r--nuttx/configs/sama5d3-xplained/include/board_396mhz.h1
-rw-r--r--nuttx/configs/sama5d3-xplained/include/board_528mhz.h1
-rw-r--r--nuttx/configs/sama5d3-xplained/include/board_sdram.h1
-rw-r--r--nuttx/configs/sama5d3x-ek/include/board_384mhz.h1
-rw-r--r--nuttx/configs/sama5d3x-ek/include/board_396mhz.h1
-rw-r--r--nuttx/configs/sama5d3x-ek/include/board_528mhz.h1
-rw-r--r--nuttx/configs/sama5d3x-ek/include/board_sdram.h1
-rw-r--r--nuttx/configs/sama5d4-ek/include/board_384mhz.h1
-rw-r--r--nuttx/configs/sama5d4-ek/include/board_396mhz.h1
-rw-r--r--nuttx/configs/sama5d4-ek/include/board_528mhz.h1
-rw-r--r--nuttx/configs/sama5d4-ek/include/board_sdram.h1
14 files changed, 49 insertions, 26 deletions
diff --git a/nuttx/arch/arm/src/sama5/sam_pck.c b/nuttx/arch/arm/src/sama5/sam_pck.c
index bdcf9d636..2f6ddb0b7 100644
--- a/nuttx/arch/arm/src/sama5/sam_pck.c
+++ b/nuttx/arch/arm/src/sama5/sam_pck.c
@@ -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;
- }
-
- /* If the source is not the slow clock, then pick either the MCK or the
- * PLLACK, whichever will best realize the target frequency.
- */
+ break;
- 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
diff --git a/nuttx/arch/arm/src/sama5/sam_pck.h b/nuttx/arch/arm/src/sama5/sam_pck.h
index fb5040696..4e3f2ad86 100644
--- a/nuttx/arch/arm/src/sama5/sam_pck.h
+++ b/nuttx/arch/arm/src/sama5/sam_pck.h
@@ -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) */
};
diff --git a/nuttx/configs/sama5d3-xplained/include/board_384mhz.h b/nuttx/configs/sama5d3-xplained/include/board_384mhz.h
index 08a26999b..eaa3b7db4 100644
--- a/nuttx/configs/sama5d3-xplained/include/board_384mhz.h
+++ b/nuttx/configs/sama5d3-xplained/include/board_384mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3-xplained/include/board_396mhz.h b/nuttx/configs/sama5d3-xplained/include/board_396mhz.h
index ba76c021a..638d3a5a2 100644
--- a/nuttx/configs/sama5d3-xplained/include/board_396mhz.h
+++ b/nuttx/configs/sama5d3-xplained/include/board_396mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3-xplained/include/board_528mhz.h b/nuttx/configs/sama5d3-xplained/include/board_528mhz.h
index bc726b1c6..a0942aeed 100644
--- a/nuttx/configs/sama5d3-xplained/include/board_528mhz.h
+++ b/nuttx/configs/sama5d3-xplained/include/board_528mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3-xplained/include/board_sdram.h b/nuttx/configs/sama5d3-xplained/include/board_sdram.h
index 4d7a63f26..5ea28fe0b 100644
--- a/nuttx/configs/sama5d3-xplained/include/board_sdram.h
+++ b/nuttx/configs/sama5d3-xplained/include/board_sdram.h
@@ -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))
diff --git a/nuttx/configs/sama5d3x-ek/include/board_384mhz.h b/nuttx/configs/sama5d3x-ek/include/board_384mhz.h
index 057746fc1..158cd44c8 100644
--- a/nuttx/configs/sama5d3x-ek/include/board_384mhz.h
+++ b/nuttx/configs/sama5d3x-ek/include/board_384mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3x-ek/include/board_396mhz.h b/nuttx/configs/sama5d3x-ek/include/board_396mhz.h
index f8e5309a5..dea0068b0 100644
--- a/nuttx/configs/sama5d3x-ek/include/board_396mhz.h
+++ b/nuttx/configs/sama5d3x-ek/include/board_396mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3x-ek/include/board_528mhz.h b/nuttx/configs/sama5d3x-ek/include/board_528mhz.h
index 27b69c0d2..e3975deeb 100644
--- a/nuttx/configs/sama5d3x-ek/include/board_528mhz.h
+++ b/nuttx/configs/sama5d3x-ek/include/board_528mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d3x-ek/include/board_sdram.h b/nuttx/configs/sama5d3x-ek/include/board_sdram.h
index 019005680..f6bdbb46d 100644
--- a/nuttx/configs/sama5d3x-ek/include/board_sdram.h
+++ b/nuttx/configs/sama5d3x-ek/include/board_sdram.h
@@ -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))
diff --git a/nuttx/configs/sama5d4-ek/include/board_384mhz.h b/nuttx/configs/sama5d4-ek/include/board_384mhz.h
index d1797e393..d38fa28a2 100644
--- a/nuttx/configs/sama5d4-ek/include/board_384mhz.h
+++ b/nuttx/configs/sama5d4-ek/include/board_384mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d4-ek/include/board_396mhz.h b/nuttx/configs/sama5d4-ek/include/board_396mhz.h
index 58895ae32..9e92ce07a 100644
--- a/nuttx/configs/sama5d4-ek/include/board_396mhz.h
+++ b/nuttx/configs/sama5d4-ek/include/board_396mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d4-ek/include/board_528mhz.h b/nuttx/configs/sama5d4-ek/include/board_528mhz.h
index 31b05e36e..d23cce539 100644
--- a/nuttx/configs/sama5d4-ek/include/board_528mhz.h
+++ b/nuttx/configs/sama5d4-ek/include/board_528mhz.h
@@ -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 */
diff --git a/nuttx/configs/sama5d4-ek/include/board_sdram.h b/nuttx/configs/sama5d4-ek/include/board_sdram.h
index 535bc9196..00c91c0de 100644
--- a/nuttx/configs/sama5d4-ek/include/board_sdram.h
+++ b/nuttx/configs/sama5d4-ek/include/board_sdram.h
@@ -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))