diff options
author | Nicolas Ferre <nicolas.ferre@atmel.com> | 2009-03-31 12:13:15 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-04-28 17:44:55 -0400 |
commit | 6d0485a99366d4e0e7e725f14995c74cb7ca4499 (patch) | |
tree | 04c3551d9af2cf784e67fb06720d16a2fdc5b9cb /arch/arm/mach-at91/include | |
parent | b4175b89921fefb2f352472fa6dccb0fc4fb37d9 (diff) |
[ARM] 5438/1: AT91: manage clock by functionality instead of CPUs
In clock.c file the clock management is grouped by cpu with cpu_is_xxx()
function. This lead to some kind of difficulties to read this file and
maintainability issues as the number of AT91 cpus & PLLs/clocks is growing.
In this patch, I try to group clock functionality together and match cpus with
this functionality set.
An update to at91_pmc.h is needed to cover some new PMC possibilities (and
some update in comments).
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Andrew Victor <avictor.za@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-at91/include')
-rw-r--r-- | arch/arm/mach-at91/include/mach/at91_pmc.h | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/arch/arm/mach-at91/include/mach/at91_pmc.h b/arch/arm/mach-at91/include/mach/at91_pmc.h index 9561e33b8a9a..64589eaaaee8 100644 --- a/arch/arm/mach-at91/include/mach/at91_pmc.h +++ b/arch/arm/mach-at91/include/mach/at91_pmc.h | |||
@@ -23,7 +23,7 @@ | |||
23 | #define AT91_PMC_PCK (1 << 0) /* Processor Clock */ | 23 | #define AT91_PMC_PCK (1 << 0) /* Processor Clock */ |
24 | #define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */ | 24 | #define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */ |
25 | #define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */ | 25 | #define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */ |
26 | #define AT91CAP9_PMC_DDR (1 << 2) /* DDR Clock [AT91CAP9 revC only] */ | 26 | #define AT91CAP9_PMC_DDR (1 << 2) /* DDR Clock [CAP9 revC & some SAM9 only] */ |
27 | #define AT91RM9200_PMC_UHP (1 << 4) /* USB Host Port Clock [AT91RM9200 only] */ | 27 | #define AT91RM9200_PMC_UHP (1 << 4) /* USB Host Port Clock [AT91RM9200 only] */ |
28 | #define AT91SAM926x_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91SAM926x only] */ | 28 | #define AT91SAM926x_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91SAM926x only] */ |
29 | #define AT91CAP9_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91CAP9 only] */ | 29 | #define AT91CAP9_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91CAP9 only] */ |
@@ -39,11 +39,11 @@ | |||
39 | #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */ | 39 | #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */ |
40 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ | 40 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ |
41 | 41 | ||
42 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL, CAP9] */ | 42 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [some SAM9, CAP9] */ |
43 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ | 43 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ |
44 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ | 44 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ |
45 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ | 45 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ |
46 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI PLL Start-up Time */ | 46 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI BIAS Start-up Time */ |
47 | 47 | ||
48 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ | 48 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ |
49 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ | 49 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ |
@@ -72,6 +72,7 @@ | |||
72 | #define AT91_PMC_CSS_MAIN (1 << 0) | 72 | #define AT91_PMC_CSS_MAIN (1 << 0) |
73 | #define AT91_PMC_CSS_PLLA (2 << 0) | 73 | #define AT91_PMC_CSS_PLLA (2 << 0) |
74 | #define AT91_PMC_CSS_PLLB (3 << 0) | 74 | #define AT91_PMC_CSS_PLLB (3 << 0) |
75 | #define AT91_PMC_CSS_UPLL (3 << 0) /* [some SAM9 only] */ | ||
75 | #define AT91_PMC_PRES (7 << 2) /* Master Clock Prescaler */ | 76 | #define AT91_PMC_PRES (7 << 2) /* Master Clock Prescaler */ |
76 | #define AT91_PMC_PRES_1 (0 << 2) | 77 | #define AT91_PMC_PRES_1 (0 << 2) |
77 | #define AT91_PMC_PRES_2 (1 << 2) | 78 | #define AT91_PMC_PRES_2 (1 << 2) |
@@ -88,12 +89,25 @@ | |||
88 | #define AT91SAM9_PMC_MDIV_1 (0 << 8) /* [SAM9,CAP9 only] */ | 89 | #define AT91SAM9_PMC_MDIV_1 (0 << 8) /* [SAM9,CAP9 only] */ |
89 | #define AT91SAM9_PMC_MDIV_2 (1 << 8) | 90 | #define AT91SAM9_PMC_MDIV_2 (1 << 8) |
90 | #define AT91SAM9_PMC_MDIV_4 (2 << 8) | 91 | #define AT91SAM9_PMC_MDIV_4 (2 << 8) |
91 | #define AT91SAM9_PMC_MDIV_6 (3 << 8) | 92 | #define AT91SAM9_PMC_MDIV_6 (3 << 8) /* [some SAM9 only] */ |
93 | #define AT91SAM9_PMC_MDIV_3 (3 << 8) /* [some SAM9 only] */ | ||
92 | #define AT91_PMC_PDIV (1 << 12) /* Processor Clock Division [some SAM9 only] */ | 94 | #define AT91_PMC_PDIV (1 << 12) /* Processor Clock Division [some SAM9 only] */ |
93 | #define AT91_PMC_PDIV_1 (0 << 12) | 95 | #define AT91_PMC_PDIV_1 (0 << 12) |
94 | #define AT91_PMC_PDIV_2 (1 << 12) | 96 | #define AT91_PMC_PDIV_2 (1 << 12) |
97 | #define AT91_PMC_PLLADIV2 (1 << 12) /* PLLA divisor by 2 [some SAM9 only] */ | ||
98 | #define AT91_PMC_PLLADIV2_OFF (0 << 12) | ||
99 | #define AT91_PMC_PLLADIV2_ON (1 << 12) | ||
95 | 100 | ||
96 | #define AT91_PMC_PCKR(n) (AT91_PMC + 0x40 + ((n) * 4)) /* Programmable Clock 0-3 Registers */ | 101 | #define AT91_PMC_USB (AT91_PMC + 0x38) /* USB Clock Register [some SAM9 only] */ |
102 | #define AT91_PMC_USBS (0x1 << 0) /* USB OHCI Input clock selection */ | ||
103 | #define AT91_PMC_USBS_PLLA (0 << 0) | ||
104 | #define AT91_PMC_USBS_UPLL (1 << 0) | ||
105 | #define AT91_PMC_OHCIUSBDIV (0xF << 8) /* Divider for USB OHCI Clock */ | ||
106 | |||
107 | #define AT91_PMC_PCKR(n) (AT91_PMC + 0x40 + ((n) * 4)) /* Programmable Clock 0-N Registers */ | ||
108 | #define AT91_PMC_CSSMCK (0x1 << 8) /* CSS or Master Clock Selection */ | ||
109 | #define AT91_PMC_CSSMCK_CSS (0 << 8) | ||
110 | #define AT91_PMC_CSSMCK_MCK (1 << 8) | ||
97 | 111 | ||
98 | #define AT91_PMC_IER (AT91_PMC + 0x60) /* Interrupt Enable Register */ | 112 | #define AT91_PMC_IER (AT91_PMC + 0x60) /* Interrupt Enable Register */ |
99 | #define AT91_PMC_IDR (AT91_PMC + 0x64) /* Interrupt Disable Register */ | 113 | #define AT91_PMC_IDR (AT91_PMC + 0x64) /* Interrupt Disable Register */ |
@@ -102,7 +116,7 @@ | |||
102 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ | 116 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ |
103 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ | 117 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ |
104 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ | 118 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ |
105 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [AT91CAP9 only] */ | 119 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [some SAM9, AT91CAP9 only] */ |
106 | #define AT91_PMC_OSCSEL (1 << 7) /* Slow Clock Oscillator [AT91CAP9 revC only] */ | 120 | #define AT91_PMC_OSCSEL (1 << 7) /* Slow Clock Oscillator [AT91CAP9 revC only] */ |
107 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ | 121 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ |
108 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ | 122 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ |