diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-04-03 06:42:27 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-04-25 11:03:45 -0400 |
commit | eb92044eb3d59d29c9812e85e3a4bf41f6f38e3a (patch) | |
tree | 155d37bb27ce0c312c2825732b3d0361b8209a49 | |
parent | 821dc4dfd955da0679872088025542a0795c6b3e (diff) |
ARM i.MX3: Make ccm base address a variable
Instead of having a cpu_is_* in each ccm register access it
is more efficient to make it a variable.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | arch/arm/mach-imx/crmregs-imx3.h | 79 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx3.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-imx/pm-imx3.c | 4 |
3 files changed, 47 insertions, 42 deletions
diff --git a/arch/arm/mach-imx/crmregs-imx3.h b/arch/arm/mach-imx/crmregs-imx3.h index 53141273df45..a1dfde53e335 100644 --- a/arch/arm/mach-imx/crmregs-imx3.h +++ b/arch/arm/mach-imx/crmregs-imx3.h | |||
@@ -24,48 +24,47 @@ | |||
24 | #define CKIH_CLK_FREQ_27MHZ 27000000 | 24 | #define CKIH_CLK_FREQ_27MHZ 27000000 |
25 | #define CKIL_CLK_FREQ 32768 | 25 | #define CKIL_CLK_FREQ 32768 |
26 | 26 | ||
27 | #define MXC_CCM_BASE (cpu_is_mx31() ? \ | 27 | extern void __iomem *mx3_ccm_base; |
28 | MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR) : MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR)) | ||
29 | 28 | ||
30 | /* Register addresses */ | 29 | /* Register addresses */ |
31 | #define MXC_CCM_CCMR (MXC_CCM_BASE + 0x00) | 30 | #define MXC_CCM_CCMR 0x00 |
32 | #define MXC_CCM_PDR0 (MXC_CCM_BASE + 0x04) | 31 | #define MXC_CCM_PDR0 0x04 |
33 | #define MXC_CCM_PDR1 (MXC_CCM_BASE + 0x08) | 32 | #define MXC_CCM_PDR1 0x08 |
34 | #define MX35_CCM_PDR2 (MXC_CCM_BASE + 0x0C) | 33 | #define MX35_CCM_PDR2 0x0C |
35 | #define MXC_CCM_RCSR (MXC_CCM_BASE + 0x0C) | 34 | #define MXC_CCM_RCSR 0x0C |
36 | #define MX35_CCM_PDR3 (MXC_CCM_BASE + 0x10) | 35 | #define MX35_CCM_PDR3 0x10 |
37 | #define MXC_CCM_MPCTL (MXC_CCM_BASE + 0x10) | 36 | #define MXC_CCM_MPCTL 0x10 |
38 | #define MX35_CCM_PDR4 (MXC_CCM_BASE + 0x14) | 37 | #define MX35_CCM_PDR4 0x14 |
39 | #define MXC_CCM_UPCTL (MXC_CCM_BASE + 0x14) | 38 | #define MXC_CCM_UPCTL 0x14 |
40 | #define MX35_CCM_RCSR (MXC_CCM_BASE + 0x18) | 39 | #define MX35_CCM_RCSR 0x18 |
41 | #define MXC_CCM_SRPCTL (MXC_CCM_BASE + 0x18) | 40 | #define MXC_CCM_SRPCTL 0x18 |
42 | #define MX35_CCM_MPCTL (MXC_CCM_BASE + 0x1C) | 41 | #define MX35_CCM_MPCTL 0x1C |
43 | #define MXC_CCM_COSR (MXC_CCM_BASE + 0x1C) | 42 | #define MXC_CCM_COSR 0x1C |
44 | #define MX35_CCM_PPCTL (MXC_CCM_BASE + 0x20) | 43 | #define MX35_CCM_PPCTL 0x20 |
45 | #define MXC_CCM_CGR0 (MXC_CCM_BASE + 0x20) | 44 | #define MXC_CCM_CGR0 0x20 |
46 | #define MX35_CCM_ACMR (MXC_CCM_BASE + 0x24) | 45 | #define MX35_CCM_ACMR 0x24 |
47 | #define MXC_CCM_CGR1 (MXC_CCM_BASE + 0x24) | 46 | #define MXC_CCM_CGR1 0x24 |
48 | #define MX35_CCM_COSR (MXC_CCM_BASE + 0x28) | 47 | #define MX35_CCM_COSR 0x28 |
49 | #define MXC_CCM_CGR2 (MXC_CCM_BASE + 0x28) | 48 | #define MXC_CCM_CGR2 0x28 |
50 | #define MX35_CCM_CGR0 (MXC_CCM_BASE + 0x2C) | 49 | #define MX35_CCM_CGR0 0x2C |
51 | #define MXC_CCM_WIMR (MXC_CCM_BASE + 0x2C) | 50 | #define MXC_CCM_WIMR 0x2C |
52 | #define MX35_CCM_CGR1 (MXC_CCM_BASE + 0x30) | 51 | #define MX35_CCM_CGR1 0x30 |
53 | #define MXC_CCM_LDC (MXC_CCM_BASE + 0x30) | 52 | #define MXC_CCM_LDC 0x30 |
54 | #define MX35_CCM_CGR2 (MXC_CCM_BASE + 0x34) | 53 | #define MX35_CCM_CGR2 0x34 |
55 | #define MXC_CCM_DCVR0 (MXC_CCM_BASE + 0x34) | 54 | #define MXC_CCM_DCVR0 0x34 |
56 | #define MX35_CCM_CGR3 (MXC_CCM_BASE + 0x38) | 55 | #define MX35_CCM_CGR3 0x38 |
57 | #define MXC_CCM_DCVR1 (MXC_CCM_BASE + 0x38) | 56 | #define MXC_CCM_DCVR1 0x38 |
58 | #define MXC_CCM_DCVR2 (MXC_CCM_BASE + 0x3C) | 57 | #define MXC_CCM_DCVR2 0x3C |
59 | #define MXC_CCM_DCVR3 (MXC_CCM_BASE + 0x40) | 58 | #define MXC_CCM_DCVR3 0x40 |
60 | #define MXC_CCM_LTR0 (MXC_CCM_BASE + 0x44) | 59 | #define MXC_CCM_LTR0 0x44 |
61 | #define MXC_CCM_LTR1 (MXC_CCM_BASE + 0x48) | 60 | #define MXC_CCM_LTR1 0x48 |
62 | #define MXC_CCM_LTR2 (MXC_CCM_BASE + 0x4C) | 61 | #define MXC_CCM_LTR2 0x4C |
63 | #define MXC_CCM_LTR3 (MXC_CCM_BASE + 0x50) | 62 | #define MXC_CCM_LTR3 0x50 |
64 | #define MXC_CCM_LTBR0 (MXC_CCM_BASE + 0x54) | 63 | #define MXC_CCM_LTBR0 0x54 |
65 | #define MXC_CCM_LTBR1 (MXC_CCM_BASE + 0x58) | 64 | #define MXC_CCM_LTBR1 0x58 |
66 | #define MXC_CCM_PMCR0 (MXC_CCM_BASE + 0x5C) | 65 | #define MXC_CCM_PMCR0 0x5C |
67 | #define MXC_CCM_PMCR1 (MXC_CCM_BASE + 0x60) | 66 | #define MXC_CCM_PMCR1 0x60 |
68 | #define MXC_CCM_PDR2 (MXC_CCM_BASE + 0x64) | 67 | #define MXC_CCM_PDR2 0x64 |
69 | 68 | ||
70 | /* Register bit definitions */ | 69 | /* Register bit definitions */ |
71 | #define MXC_CCM_CCMR_WBEN (1 << 27) | 70 | #define MXC_CCM_CCMR_WBEN (1 << 27) |
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index 74127389e7ab..57b39f839f9e 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c | |||
@@ -31,6 +31,10 @@ | |||
31 | #include <mach/iomux-v3.h> | 31 | #include <mach/iomux-v3.h> |
32 | #include <mach/irqs.h> | 32 | #include <mach/irqs.h> |
33 | 33 | ||
34 | #include "crmregs-imx3.h" | ||
35 | |||
36 | void __iomem *mx3_ccm_base; | ||
37 | |||
34 | static void imx3_idle(void) | 38 | static void imx3_idle(void) |
35 | { | 39 | { |
36 | unsigned long reg = 0; | 40 | unsigned long reg = 0; |
@@ -137,6 +141,7 @@ void __init imx31_init_early(void) | |||
137 | mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); | 141 | mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); |
138 | arch_ioremap_caller = imx3_ioremap_caller; | 142 | arch_ioremap_caller = imx3_ioremap_caller; |
139 | arm_pm_idle = imx3_idle; | 143 | arm_pm_idle = imx3_idle; |
144 | mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR); | ||
140 | } | 145 | } |
141 | 146 | ||
142 | void __init mx31_init_irq(void) | 147 | void __init mx31_init_irq(void) |
@@ -210,6 +215,7 @@ void __init imx35_init_early(void) | |||
210 | mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR)); | 215 | mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR)); |
211 | arm_pm_idle = imx3_idle; | 216 | arm_pm_idle = imx3_idle; |
212 | arch_ioremap_caller = imx3_ioremap_caller; | 217 | arch_ioremap_caller = imx3_ioremap_caller; |
218 | mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR); | ||
213 | } | 219 | } |
214 | 220 | ||
215 | void __init mx35_init_irq(void) | 221 | void __init mx35_init_irq(void) |
diff --git a/arch/arm/mach-imx/pm-imx3.c b/arch/arm/mach-imx/pm-imx3.c index b3752439632e..822103bdb709 100644 --- a/arch/arm/mach-imx/pm-imx3.c +++ b/arch/arm/mach-imx/pm-imx3.c | |||
@@ -21,14 +21,14 @@ | |||
21 | */ | 21 | */ |
22 | void mx3_cpu_lp_set(enum mx3_cpu_pwr_mode mode) | 22 | void mx3_cpu_lp_set(enum mx3_cpu_pwr_mode mode) |
23 | { | 23 | { |
24 | int reg = __raw_readl(MXC_CCM_CCMR); | 24 | int reg = __raw_readl(mx3_ccm_base + MXC_CCM_CCMR); |
25 | reg &= ~MXC_CCM_CCMR_LPM_MASK; | 25 | reg &= ~MXC_CCM_CCMR_LPM_MASK; |
26 | 26 | ||
27 | switch (mode) { | 27 | switch (mode) { |
28 | case MX3_WAIT: | 28 | case MX3_WAIT: |
29 | if (cpu_is_mx35()) | 29 | if (cpu_is_mx35()) |
30 | reg |= MXC_CCM_CCMR_LPM_WAIT_MX35; | 30 | reg |= MXC_CCM_CCMR_LPM_WAIT_MX35; |
31 | __raw_writel(reg, MXC_CCM_CCMR); | 31 | __raw_writel(reg, mx3_ccm_base + MXC_CCM_CCMR); |
32 | break; | 32 | break; |
33 | default: | 33 | default: |
34 | pr_err("Unknown cpu power mode: %d\n", mode); | 34 | pr_err("Unknown cpu power mode: %d\n", mode); |