diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/board-2430sdp.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-apollon.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-generic.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-h4.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-ldp.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap2/sdrc.c | 38 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/io.h | 4 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/sdrc.h | 24 |
10 files changed, 71 insertions, 11 deletions
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 83fa37211d77..7b29e1d00f23 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
@@ -185,7 +185,7 @@ out: | |||
185 | 185 | ||
186 | static void __init omap_2430sdp_init_irq(void) | 186 | static void __init omap_2430sdp_init_irq(void) |
187 | { | 187 | { |
188 | omap2_init_common_hw(); | 188 | omap2_init_common_hw(NULL); |
189 | omap_init_irq(); | 189 | omap_init_irq(); |
190 | omap_gpio_init(); | 190 | omap_gpio_init(); |
191 | sdp2430_init_smc91x(); | 191 | sdp2430_init_smc91x(); |
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 0a7b24ba1652..0c911f414d8d 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c | |||
@@ -249,7 +249,7 @@ out: | |||
249 | 249 | ||
250 | static void __init omap_apollon_init_irq(void) | 250 | static void __init omap_apollon_init_irq(void) |
251 | { | 251 | { |
252 | omap2_init_common_hw(); | 252 | omap2_init_common_hw(NULL); |
253 | omap_init_irq(); | 253 | omap_init_irq(); |
254 | omap_gpio_init(); | 254 | omap_gpio_init(); |
255 | apollon_init_smc91x(); | 255 | apollon_init_smc91x(); |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 3b34c20d1df4..3492162a65c3 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | static void __init omap_generic_init_irq(void) | 34 | static void __init omap_generic_init_irq(void) |
35 | { | 35 | { |
36 | omap2_init_common_hw(); | 36 | omap2_init_common_hw(NULL); |
37 | omap_init_irq(); | 37 | omap_init_irq(); |
38 | } | 38 | } |
39 | 39 | ||
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 5e9b14675b1e..ef55b45ab769 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c | |||
@@ -363,7 +363,7 @@ static void __init h4_init_flash(void) | |||
363 | 363 | ||
364 | static void __init omap_h4_init_irq(void) | 364 | static void __init omap_h4_init_irq(void) |
365 | { | 365 | { |
366 | omap2_init_common_hw(); | 366 | omap2_init_common_hw(NULL); |
367 | omap_init_irq(); | 367 | omap_init_irq(); |
368 | omap_gpio_init(); | 368 | omap_gpio_init(); |
369 | h4_init_flash(); | 369 | h4_init_flash(); |
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index f6a13451d1fd..61f7c365a28c 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c | |||
@@ -98,7 +98,7 @@ static inline void __init ldp_init_smc911x(void) | |||
98 | 98 | ||
99 | static void __init omap_ldp_init_irq(void) | 99 | static void __init omap_ldp_init_irq(void) |
100 | { | 100 | { |
101 | omap2_init_common_hw(); | 101 | omap2_init_common_hw(NULL); |
102 | omap_init_irq(); | 102 | omap_init_irq(); |
103 | omap_gpio_init(); | 103 | omap_gpio_init(); |
104 | ldp_init_smc911x(); | 104 | ldp_init_smc911x(); |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 38c88fbe658d..ad312ccf2ec5 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -184,7 +184,7 @@ static int __init omap3_beagle_i2c_init(void) | |||
184 | 184 | ||
185 | static void __init omap3_beagle_init_irq(void) | 185 | static void __init omap3_beagle_init_irq(void) |
186 | { | 186 | { |
187 | omap2_init_common_hw(); | 187 | omap2_init_common_hw(NULL); |
188 | omap_init_irq(); | 188 | omap_init_irq(); |
189 | omap_gpio_init(); | 189 | omap_gpio_init(); |
190 | } | 190 | } |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 3c1de3615eb8..916fcd3a2328 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -195,12 +195,12 @@ void __init omap2_map_common_io(void) | |||
195 | omapfb_reserve_sdram(); | 195 | omapfb_reserve_sdram(); |
196 | } | 196 | } |
197 | 197 | ||
198 | void __init omap2_init_common_hw(void) | 198 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) |
199 | { | 199 | { |
200 | omap2_mux_init(); | 200 | omap2_mux_init(); |
201 | pwrdm_init(powerdomains_omap); | 201 | pwrdm_init(powerdomains_omap); |
202 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); | 202 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); |
203 | omap2_clk_init(); | 203 | omap2_clk_init(); |
204 | omap2_sdrc_init(); | 204 | omap2_sdrc_init(sp); |
205 | gpmc_init(); | 205 | gpmc_init(); |
206 | } | 206 | } |
diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c index 24b54d50b893..2a30060cb4b7 100644 --- a/arch/arm/mach-omap2/sdrc.c +++ b/arch/arm/mach-omap2/sdrc.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * it under the terms of the GNU General Public License version 2 as | 12 | * it under the terms of the GNU General Public License version 2 as |
13 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
14 | */ | 14 | */ |
15 | #undef DEBUG | ||
15 | 16 | ||
16 | #include <linux/module.h> | 17 | #include <linux/module.h> |
17 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
@@ -31,9 +32,42 @@ | |||
31 | #include <mach/sdrc.h> | 32 | #include <mach/sdrc.h> |
32 | #include "sdrc.h" | 33 | #include "sdrc.h" |
33 | 34 | ||
35 | static struct omap_sdrc_params *sdrc_init_params; | ||
36 | |||
34 | void __iomem *omap2_sdrc_base; | 37 | void __iomem *omap2_sdrc_base; |
35 | void __iomem *omap2_sms_base; | 38 | void __iomem *omap2_sms_base; |
36 | 39 | ||
40 | |||
41 | /** | ||
42 | * omap2_sdrc_get_params - return SDRC register values for a given clock rate | ||
43 | * @r: SDRC clock rate (in Hz) | ||
44 | * | ||
45 | * Return pre-calculated values for the SDRC_ACTIM_CTRLA, | ||
46 | * SDRC_ACTIM_CTRLB, SDRC_RFR_CTRL, and SDRC_MR registers, for a given | ||
47 | * SDRC clock rate 'r'. These parameters control various timing | ||
48 | * delays in the SDRAM controller that are expressed in terms of the | ||
49 | * number of SDRC clock cycles to wait; hence the clock rate | ||
50 | * dependency. Note that sdrc_init_params must be sorted rate | ||
51 | * descending. Also assumes that both chip-selects use the same | ||
52 | * timing parameters. Returns a struct omap_sdrc_params * upon | ||
53 | * success, or NULL upon failure. | ||
54 | */ | ||
55 | struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r) | ||
56 | { | ||
57 | struct omap_sdrc_params *sp; | ||
58 | |||
59 | sp = sdrc_init_params; | ||
60 | |||
61 | while (sp->rate != r) | ||
62 | sp++; | ||
63 | |||
64 | if (!sp->rate) | ||
65 | return NULL; | ||
66 | |||
67 | return sp; | ||
68 | } | ||
69 | |||
70 | |||
37 | void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) | 71 | void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) |
38 | { | 72 | { |
39 | omap2_sdrc_base = omap2_globals->sdrc; | 73 | omap2_sdrc_base = omap2_globals->sdrc; |
@@ -41,7 +75,7 @@ void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) | |||
41 | } | 75 | } |
42 | 76 | ||
43 | /* turn on smart idle modes for SDRAM scheduler and controller */ | 77 | /* turn on smart idle modes for SDRAM scheduler and controller */ |
44 | void __init omap2_sdrc_init(void) | 78 | void __init omap2_sdrc_init(struct omap_sdrc_params *sp) |
45 | { | 79 | { |
46 | u32 l; | 80 | u32 l; |
47 | 81 | ||
@@ -54,4 +88,6 @@ void __init omap2_sdrc_init(void) | |||
54 | l &= ~(0x3 << 3); | 88 | l &= ~(0x3 << 3); |
55 | l |= (0x2 << 3); | 89 | l |= (0x2 << 3); |
56 | sdrc_write_reg(l, SDRC_SYSCONFIG); | 90 | sdrc_write_reg(l, SDRC_SYSCONFIG); |
91 | |||
92 | sdrc_init_params = sp; | ||
57 | } | 93 | } |
diff --git a/arch/arm/plat-omap/include/mach/io.h b/arch/arm/plat-omap/include/mach/io.h index d92bf7964481..0610d7e2b3d7 100644 --- a/arch/arm/plat-omap/include/mach/io.h +++ b/arch/arm/plat-omap/include/mach/io.h | |||
@@ -185,11 +185,13 @@ | |||
185 | #define omap_writew(v,a) __raw_writew(v, IO_ADDRESS(a)) | 185 | #define omap_writew(v,a) __raw_writew(v, IO_ADDRESS(a)) |
186 | #define omap_writel(v,a) __raw_writel(v, IO_ADDRESS(a)) | 186 | #define omap_writel(v,a) __raw_writel(v, IO_ADDRESS(a)) |
187 | 187 | ||
188 | struct omap_sdrc_params; | ||
189 | |||
188 | extern void omap1_map_common_io(void); | 190 | extern void omap1_map_common_io(void); |
189 | extern void omap1_init_common_hw(void); | 191 | extern void omap1_init_common_hw(void); |
190 | 192 | ||
191 | extern void omap2_map_common_io(void); | 193 | extern void omap2_map_common_io(void); |
192 | extern void omap2_init_common_hw(void); | 194 | extern void omap2_init_common_hw(struct omap_sdrc_params *sp); |
193 | 195 | ||
194 | #define __arch_ioremap(p,s,t) omap_ioremap(p,s,t) | 196 | #define __arch_ioremap(p,s,t) omap_ioremap(p,s,t) |
195 | #define __arch_iounmap(v) omap_iounmap(v) | 197 | #define __arch_iounmap(v) omap_iounmap(v) |
diff --git a/arch/arm/plat-omap/include/mach/sdrc.h b/arch/arm/plat-omap/include/mach/sdrc.h index 8e0740eb83fb..adc73522491f 100644 --- a/arch/arm/plat-omap/include/mach/sdrc.h +++ b/arch/arm/plat-omap/include/mach/sdrc.h | |||
@@ -81,7 +81,29 @@ | |||
81 | 81 | ||
82 | #ifndef __ASSEMBLER__ | 82 | #ifndef __ASSEMBLER__ |
83 | 83 | ||
84 | void __init omap2_sdrc_init(void); | 84 | /** |
85 | * struct omap_sdrc_params - SDRC parameters for a given SDRC clock rate | ||
86 | * @rate: SDRC clock rate (in Hz) | ||
87 | * @actim_ctrla: Value to program to SDRC_ACTIM_CTRLA for this rate | ||
88 | * @actim_ctrlb: Value to program to SDRC_ACTIM_CTRLB for this rate | ||
89 | * @rfr_ctrl: Value to program to SDRC_RFR_CTRL for this rate | ||
90 | * @mr: Value to program to SDRC_MR for this rate | ||
91 | * | ||
92 | * This structure holds a pre-computed set of register values for the | ||
93 | * SDRC for a given SDRC clock rate and SDRAM chip. These are | ||
94 | * intended to be pre-computed and specified in an array in the board-*.c | ||
95 | * files. The structure is keyed off the 'rate' field. | ||
96 | */ | ||
97 | struct omap_sdrc_params { | ||
98 | unsigned long rate; | ||
99 | u32 actim_ctrla; | ||
100 | u32 actim_ctrlb; | ||
101 | u32 rfr_ctrl; | ||
102 | u32 mr; | ||
103 | }; | ||
104 | |||
105 | void __init omap2_sdrc_init(struct omap_sdrc_params *sp); | ||
106 | struct omap_sdrc_params *omap2_sdrc_get_params(unsigned long r); | ||
85 | 107 | ||
86 | #ifdef CONFIG_ARCH_OMAP2 | 108 | #ifdef CONFIG_ARCH_OMAP2 |
87 | 109 | ||