diff options
Diffstat (limited to 'arch/arm/mach-spear3xx')
32 files changed, 3756 insertions, 0 deletions
diff --git a/arch/arm/mach-spear3xx/Kconfig b/arch/arm/mach-spear3xx/Kconfig new file mode 100644 index 000000000000..20d1317cc486 --- /dev/null +++ b/arch/arm/mach-spear3xx/Kconfig | |||
@@ -0,0 +1,33 @@ | |||
1 | # | ||
2 | # SPEAr3XX Machine configuration file | ||
3 | # | ||
4 | |||
5 | if ARCH_SPEAR3XX | ||
6 | |||
7 | choice | ||
8 | prompt "SPEAr3XX Family" | ||
9 | default MACH_SPEAR300 | ||
10 | |||
11 | config MACH_SPEAR300 | ||
12 | bool "SPEAr300" | ||
13 | help | ||
14 | Supports ST SPEAr300 Machine | ||
15 | |||
16 | config MACH_SPEAR310 | ||
17 | bool "SPEAr310" | ||
18 | help | ||
19 | Supports ST SPEAr310 Machine | ||
20 | |||
21 | config MACH_SPEAR320 | ||
22 | bool "SPEAr320" | ||
23 | help | ||
24 | Supports ST SPEAr320 Machine | ||
25 | |||
26 | endchoice | ||
27 | |||
28 | # Adding SPEAr3XX machine specific configuration files | ||
29 | source "arch/arm/mach-spear3xx/Kconfig300" | ||
30 | source "arch/arm/mach-spear3xx/Kconfig310" | ||
31 | source "arch/arm/mach-spear3xx/Kconfig320" | ||
32 | |||
33 | endif #ARCH_SPEAR3XX | ||
diff --git a/arch/arm/mach-spear3xx/Kconfig300 b/arch/arm/mach-spear3xx/Kconfig300 new file mode 100644 index 000000000000..c519a05b4ab4 --- /dev/null +++ b/arch/arm/mach-spear3xx/Kconfig300 | |||
@@ -0,0 +1,17 @@ | |||
1 | # | ||
2 | # SPEAr300 machine configuration file | ||
3 | # | ||
4 | |||
5 | if MACH_SPEAR300 | ||
6 | |||
7 | choice | ||
8 | prompt "SPEAr300 Boards" | ||
9 | default BOARD_SPEAR300_EVB | ||
10 | |||
11 | config BOARD_SPEAR300_EVB | ||
12 | bool "SPEAr300 Evaluation Board" | ||
13 | help | ||
14 | Supports ST SPEAr300 Evaluation Board | ||
15 | endchoice | ||
16 | |||
17 | endif #MACH_SPEAR300 | ||
diff --git a/arch/arm/mach-spear3xx/Kconfig310 b/arch/arm/mach-spear3xx/Kconfig310 new file mode 100644 index 000000000000..60e7442d75bd --- /dev/null +++ b/arch/arm/mach-spear3xx/Kconfig310 | |||
@@ -0,0 +1,17 @@ | |||
1 | # | ||
2 | # SPEAr310 machine configuration file | ||
3 | # | ||
4 | |||
5 | if MACH_SPEAR310 | ||
6 | |||
7 | choice | ||
8 | prompt "SPEAr310 Boards" | ||
9 | default BOARD_SPEAR310_EVB | ||
10 | |||
11 | config BOARD_SPEAR310_EVB | ||
12 | bool "SPEAr310 Evaluation Board" | ||
13 | help | ||
14 | Supports ST SPEAr310 Evaluation Board | ||
15 | endchoice | ||
16 | |||
17 | endif #MACH_SPEAR310 | ||
diff --git a/arch/arm/mach-spear3xx/Kconfig320 b/arch/arm/mach-spear3xx/Kconfig320 new file mode 100644 index 000000000000..1c1d438399b8 --- /dev/null +++ b/arch/arm/mach-spear3xx/Kconfig320 | |||
@@ -0,0 +1,17 @@ | |||
1 | # | ||
2 | # SPEAr320 machine configuration file | ||
3 | # | ||
4 | |||
5 | if MACH_SPEAR320 | ||
6 | |||
7 | choice | ||
8 | prompt "SPEAr320 Boards" | ||
9 | default BOARD_SPEAR320_EVB | ||
10 | |||
11 | config BOARD_SPEAR320_EVB | ||
12 | bool "SPEAr320 Evaluation Board" | ||
13 | help | ||
14 | Supports ST SPEAr320 Evaluation Board | ||
15 | endchoice | ||
16 | |||
17 | endif #MACH_SPEAR320 | ||
diff --git a/arch/arm/mach-spear3xx/Makefile b/arch/arm/mach-spear3xx/Makefile new file mode 100644 index 000000000000..b24862489704 --- /dev/null +++ b/arch/arm/mach-spear3xx/Makefile | |||
@@ -0,0 +1,26 @@ | |||
1 | # | ||
2 | # Makefile for SPEAr3XX machine series | ||
3 | # | ||
4 | |||
5 | # common files | ||
6 | obj-y += spear3xx.o clock.o | ||
7 | |||
8 | # spear300 specific files | ||
9 | obj-$(CONFIG_MACH_SPEAR300) += spear300.o | ||
10 | |||
11 | # spear300 boards files | ||
12 | obj-$(CONFIG_BOARD_SPEAR300_EVB) += spear300_evb.o | ||
13 | |||
14 | |||
15 | # spear310 specific files | ||
16 | obj-$(CONFIG_MACH_SPEAR310) += spear310.o | ||
17 | |||
18 | # spear310 boards files | ||
19 | obj-$(CONFIG_BOARD_SPEAR310_EVB) += spear310_evb.o | ||
20 | |||
21 | |||
22 | # spear320 specific files | ||
23 | obj-$(CONFIG_MACH_SPEAR320) += spear320.o | ||
24 | |||
25 | # spear320 boards files | ||
26 | obj-$(CONFIG_BOARD_SPEAR320_EVB) += spear320_evb.o | ||
diff --git a/arch/arm/mach-spear3xx/Makefile.boot b/arch/arm/mach-spear3xx/Makefile.boot new file mode 100644 index 000000000000..7a1f3c0eadb8 --- /dev/null +++ b/arch/arm/mach-spear3xx/Makefile.boot | |||
@@ -0,0 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | ||
2 | params_phys-y := 0x00000100 | ||
3 | initrd_phys-y := 0x00800000 | ||
diff --git a/arch/arm/mach-spear3xx/clock.c b/arch/arm/mach-spear3xx/clock.c new file mode 100644 index 000000000000..39f6ccf22294 --- /dev/null +++ b/arch/arm/mach-spear3xx/clock.c | |||
@@ -0,0 +1,389 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/clock.c | ||
3 | * | ||
4 | * SPEAr3xx machines clock framework source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/init.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <mach/misc_regs.h> | ||
17 | #include <plat/clock.h> | ||
18 | |||
19 | /* root clks */ | ||
20 | /* 32 KHz oscillator clock */ | ||
21 | static struct clk osc_32k_clk = { | ||
22 | .flags = ALWAYS_ENABLED, | ||
23 | .rate = 32000, | ||
24 | }; | ||
25 | |||
26 | /* 24 MHz oscillator clock */ | ||
27 | static struct clk osc_24m_clk = { | ||
28 | .flags = ALWAYS_ENABLED, | ||
29 | .rate = 24000000, | ||
30 | }; | ||
31 | |||
32 | /* clock derived from 32 KHz osc clk */ | ||
33 | /* rtc clock */ | ||
34 | static struct clk rtc_clk = { | ||
35 | .pclk = &osc_32k_clk, | ||
36 | .en_reg = PERIP1_CLK_ENB, | ||
37 | .en_reg_bit = RTC_CLK_ENB, | ||
38 | .recalc = &follow_parent, | ||
39 | }; | ||
40 | |||
41 | /* clock derived from 24 MHz osc clk */ | ||
42 | /* pll1 configuration structure */ | ||
43 | static struct pll_clk_config pll1_config = { | ||
44 | .mode_reg = PLL1_CTR, | ||
45 | .cfg_reg = PLL1_FRQ, | ||
46 | }; | ||
47 | |||
48 | /* PLL1 clock */ | ||
49 | static struct clk pll1_clk = { | ||
50 | .pclk = &osc_24m_clk, | ||
51 | .en_reg = PLL1_CTR, | ||
52 | .en_reg_bit = PLL_ENABLE, | ||
53 | .recalc = &pll1_clk_recalc, | ||
54 | .private_data = &pll1_config, | ||
55 | }; | ||
56 | |||
57 | /* PLL3 48 MHz clock */ | ||
58 | static struct clk pll3_48m_clk = { | ||
59 | .flags = ALWAYS_ENABLED, | ||
60 | .pclk = &osc_24m_clk, | ||
61 | .rate = 48000000, | ||
62 | }; | ||
63 | |||
64 | /* watch dog timer clock */ | ||
65 | static struct clk wdt_clk = { | ||
66 | .flags = ALWAYS_ENABLED, | ||
67 | .pclk = &osc_24m_clk, | ||
68 | .recalc = &follow_parent, | ||
69 | }; | ||
70 | |||
71 | /* clock derived from pll1 clk */ | ||
72 | /* cpu clock */ | ||
73 | static struct clk cpu_clk = { | ||
74 | .flags = ALWAYS_ENABLED, | ||
75 | .pclk = &pll1_clk, | ||
76 | .recalc = &follow_parent, | ||
77 | }; | ||
78 | |||
79 | /* ahb configuration structure */ | ||
80 | static struct bus_clk_config ahb_config = { | ||
81 | .reg = CORE_CLK_CFG, | ||
82 | .mask = PLL_HCLK_RATIO_MASK, | ||
83 | .shift = PLL_HCLK_RATIO_SHIFT, | ||
84 | }; | ||
85 | |||
86 | /* ahb clock */ | ||
87 | static struct clk ahb_clk = { | ||
88 | .flags = ALWAYS_ENABLED, | ||
89 | .pclk = &pll1_clk, | ||
90 | .recalc = &bus_clk_recalc, | ||
91 | .private_data = &ahb_config, | ||
92 | }; | ||
93 | |||
94 | /* uart configurations */ | ||
95 | static struct aux_clk_config uart_config = { | ||
96 | .synth_reg = UART_CLK_SYNT, | ||
97 | }; | ||
98 | |||
99 | /* uart parents */ | ||
100 | static struct pclk_info uart_pclk_info[] = { | ||
101 | { | ||
102 | .pclk = &pll1_clk, | ||
103 | .pclk_mask = AUX_CLK_PLL1_MASK, | ||
104 | .scalable = 1, | ||
105 | }, { | ||
106 | .pclk = &pll3_48m_clk, | ||
107 | .pclk_mask = AUX_CLK_PLL3_MASK, | ||
108 | .scalable = 0, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | /* uart parent select structure */ | ||
113 | static struct pclk_sel uart_pclk_sel = { | ||
114 | .pclk_info = uart_pclk_info, | ||
115 | .pclk_count = ARRAY_SIZE(uart_pclk_info), | ||
116 | .pclk_sel_reg = PERIP_CLK_CFG, | ||
117 | .pclk_sel_mask = UART_CLK_MASK, | ||
118 | }; | ||
119 | |||
120 | /* uart clock */ | ||
121 | static struct clk uart_clk = { | ||
122 | .en_reg = PERIP1_CLK_ENB, | ||
123 | .en_reg_bit = UART_CLK_ENB, | ||
124 | .pclk_sel = &uart_pclk_sel, | ||
125 | .pclk_sel_shift = UART_CLK_SHIFT, | ||
126 | .recalc = &aux_clk_recalc, | ||
127 | .private_data = &uart_config, | ||
128 | }; | ||
129 | |||
130 | /* firda configurations */ | ||
131 | static struct aux_clk_config firda_config = { | ||
132 | .synth_reg = FIRDA_CLK_SYNT, | ||
133 | }; | ||
134 | |||
135 | /* firda parents */ | ||
136 | static struct pclk_info firda_pclk_info[] = { | ||
137 | { | ||
138 | .pclk = &pll1_clk, | ||
139 | .pclk_mask = AUX_CLK_PLL1_MASK, | ||
140 | .scalable = 1, | ||
141 | }, { | ||
142 | .pclk = &pll3_48m_clk, | ||
143 | .pclk_mask = AUX_CLK_PLL3_MASK, | ||
144 | .scalable = 0, | ||
145 | }, | ||
146 | }; | ||
147 | |||
148 | /* firda parent select structure */ | ||
149 | static struct pclk_sel firda_pclk_sel = { | ||
150 | .pclk_info = firda_pclk_info, | ||
151 | .pclk_count = ARRAY_SIZE(firda_pclk_info), | ||
152 | .pclk_sel_reg = PERIP_CLK_CFG, | ||
153 | .pclk_sel_mask = FIRDA_CLK_MASK, | ||
154 | }; | ||
155 | |||
156 | /* firda clock */ | ||
157 | static struct clk firda_clk = { | ||
158 | .en_reg = PERIP1_CLK_ENB, | ||
159 | .en_reg_bit = FIRDA_CLK_ENB, | ||
160 | .pclk_sel = &firda_pclk_sel, | ||
161 | .pclk_sel_shift = FIRDA_CLK_SHIFT, | ||
162 | .recalc = &aux_clk_recalc, | ||
163 | .private_data = &firda_config, | ||
164 | }; | ||
165 | |||
166 | /* gpt parents */ | ||
167 | static struct pclk_info gpt_pclk_info[] = { | ||
168 | { | ||
169 | .pclk = &pll1_clk, | ||
170 | .pclk_mask = AUX_CLK_PLL1_MASK, | ||
171 | .scalable = 1, | ||
172 | }, { | ||
173 | .pclk = &pll3_48m_clk, | ||
174 | .pclk_mask = AUX_CLK_PLL3_MASK, | ||
175 | .scalable = 0, | ||
176 | }, | ||
177 | }; | ||
178 | |||
179 | /* gpt parent select structure */ | ||
180 | static struct pclk_sel gpt_pclk_sel = { | ||
181 | .pclk_info = gpt_pclk_info, | ||
182 | .pclk_count = ARRAY_SIZE(gpt_pclk_info), | ||
183 | .pclk_sel_reg = PERIP_CLK_CFG, | ||
184 | .pclk_sel_mask = GPT_CLK_MASK, | ||
185 | }; | ||
186 | |||
187 | /* gpt0 configurations */ | ||
188 | static struct aux_clk_config gpt0_config = { | ||
189 | .synth_reg = PRSC1_CLK_CFG, | ||
190 | }; | ||
191 | |||
192 | /* gpt0 timer clock */ | ||
193 | static struct clk gpt0_clk = { | ||
194 | .flags = ALWAYS_ENABLED, | ||
195 | .pclk_sel = &gpt_pclk_sel, | ||
196 | .pclk_sel_shift = GPT0_CLK_SHIFT, | ||
197 | .recalc = &gpt_clk_recalc, | ||
198 | .private_data = &gpt0_config, | ||
199 | }; | ||
200 | |||
201 | /* gpt1 configurations */ | ||
202 | static struct aux_clk_config gpt1_config = { | ||
203 | .synth_reg = PRSC2_CLK_CFG, | ||
204 | }; | ||
205 | |||
206 | /* gpt1 timer clock */ | ||
207 | static struct clk gpt1_clk = { | ||
208 | .en_reg = PERIP1_CLK_ENB, | ||
209 | .en_reg_bit = GPT1_CLK_ENB, | ||
210 | .pclk_sel = &gpt_pclk_sel, | ||
211 | .pclk_sel_shift = GPT1_CLK_SHIFT, | ||
212 | .recalc = &gpt_clk_recalc, | ||
213 | .private_data = &gpt1_config, | ||
214 | }; | ||
215 | |||
216 | /* gpt2 configurations */ | ||
217 | static struct aux_clk_config gpt2_config = { | ||
218 | .synth_reg = PRSC3_CLK_CFG, | ||
219 | }; | ||
220 | |||
221 | /* gpt2 timer clock */ | ||
222 | static struct clk gpt2_clk = { | ||
223 | .en_reg = PERIP1_CLK_ENB, | ||
224 | .en_reg_bit = GPT2_CLK_ENB, | ||
225 | .pclk_sel = &gpt_pclk_sel, | ||
226 | .pclk_sel_shift = GPT2_CLK_SHIFT, | ||
227 | .recalc = &gpt_clk_recalc, | ||
228 | .private_data = &gpt2_config, | ||
229 | }; | ||
230 | |||
231 | /* clock derived from pll3 clk */ | ||
232 | /* usbh clock */ | ||
233 | static struct clk usbh_clk = { | ||
234 | .pclk = &pll3_48m_clk, | ||
235 | .en_reg = PERIP1_CLK_ENB, | ||
236 | .en_reg_bit = USBH_CLK_ENB, | ||
237 | .recalc = &follow_parent, | ||
238 | }; | ||
239 | |||
240 | /* usbd clock */ | ||
241 | static struct clk usbd_clk = { | ||
242 | .pclk = &pll3_48m_clk, | ||
243 | .en_reg = PERIP1_CLK_ENB, | ||
244 | .en_reg_bit = USBD_CLK_ENB, | ||
245 | .recalc = &follow_parent, | ||
246 | }; | ||
247 | |||
248 | /* clcd clock */ | ||
249 | static struct clk clcd_clk = { | ||
250 | .flags = ALWAYS_ENABLED, | ||
251 | .pclk = &pll3_48m_clk, | ||
252 | .recalc = &follow_parent, | ||
253 | }; | ||
254 | |||
255 | /* clock derived from ahb clk */ | ||
256 | /* apb configuration structure */ | ||
257 | static struct bus_clk_config apb_config = { | ||
258 | .reg = CORE_CLK_CFG, | ||
259 | .mask = HCLK_PCLK_RATIO_MASK, | ||
260 | .shift = HCLK_PCLK_RATIO_SHIFT, | ||
261 | }; | ||
262 | |||
263 | /* apb clock */ | ||
264 | static struct clk apb_clk = { | ||
265 | .flags = ALWAYS_ENABLED, | ||
266 | .pclk = &ahb_clk, | ||
267 | .recalc = &bus_clk_recalc, | ||
268 | .private_data = &apb_config, | ||
269 | }; | ||
270 | |||
271 | /* i2c clock */ | ||
272 | static struct clk i2c_clk = { | ||
273 | .pclk = &ahb_clk, | ||
274 | .en_reg = PERIP1_CLK_ENB, | ||
275 | .en_reg_bit = I2C_CLK_ENB, | ||
276 | .recalc = &follow_parent, | ||
277 | }; | ||
278 | |||
279 | /* dma clock */ | ||
280 | static struct clk dma_clk = { | ||
281 | .pclk = &ahb_clk, | ||
282 | .en_reg = PERIP1_CLK_ENB, | ||
283 | .en_reg_bit = DMA_CLK_ENB, | ||
284 | .recalc = &follow_parent, | ||
285 | }; | ||
286 | |||
287 | /* jpeg clock */ | ||
288 | static struct clk jpeg_clk = { | ||
289 | .pclk = &ahb_clk, | ||
290 | .en_reg = PERIP1_CLK_ENB, | ||
291 | .en_reg_bit = JPEG_CLK_ENB, | ||
292 | .recalc = &follow_parent, | ||
293 | }; | ||
294 | |||
295 | /* gmac clock */ | ||
296 | static struct clk gmac_clk = { | ||
297 | .pclk = &ahb_clk, | ||
298 | .en_reg = PERIP1_CLK_ENB, | ||
299 | .en_reg_bit = GMAC_CLK_ENB, | ||
300 | .recalc = &follow_parent, | ||
301 | }; | ||
302 | |||
303 | /* smi clock */ | ||
304 | static struct clk smi_clk = { | ||
305 | .pclk = &ahb_clk, | ||
306 | .en_reg = PERIP1_CLK_ENB, | ||
307 | .en_reg_bit = SMI_CLK_ENB, | ||
308 | .recalc = &follow_parent, | ||
309 | }; | ||
310 | |||
311 | /* c3 clock */ | ||
312 | static struct clk c3_clk = { | ||
313 | .pclk = &ahb_clk, | ||
314 | .en_reg = PERIP1_CLK_ENB, | ||
315 | .en_reg_bit = C3_CLK_ENB, | ||
316 | .recalc = &follow_parent, | ||
317 | }; | ||
318 | |||
319 | /* clock derived from apb clk */ | ||
320 | /* adc clock */ | ||
321 | static struct clk adc_clk = { | ||
322 | .pclk = &apb_clk, | ||
323 | .en_reg = PERIP1_CLK_ENB, | ||
324 | .en_reg_bit = ADC_CLK_ENB, | ||
325 | .recalc = &follow_parent, | ||
326 | }; | ||
327 | |||
328 | /* ssp clock */ | ||
329 | static struct clk ssp_clk = { | ||
330 | .pclk = &apb_clk, | ||
331 | .en_reg = PERIP1_CLK_ENB, | ||
332 | .en_reg_bit = SSP_CLK_ENB, | ||
333 | .recalc = &follow_parent, | ||
334 | }; | ||
335 | |||
336 | /* gpio clock */ | ||
337 | static struct clk gpio_clk = { | ||
338 | .pclk = &apb_clk, | ||
339 | .en_reg = PERIP1_CLK_ENB, | ||
340 | .en_reg_bit = GPIO_CLK_ENB, | ||
341 | .recalc = &follow_parent, | ||
342 | }; | ||
343 | |||
344 | /* array of all spear 3xx clock lookups */ | ||
345 | static struct clk_lookup spear_clk_lookups[] = { | ||
346 | /* root clks */ | ||
347 | { .con_id = "osc_32k_clk", .clk = &osc_32k_clk}, | ||
348 | { .con_id = "osc_24m_clk", .clk = &osc_24m_clk}, | ||
349 | /* clock derived from 32 KHz osc clk */ | ||
350 | { .dev_id = "rtc", .clk = &rtc_clk}, | ||
351 | /* clock derived from 24 MHz osc clk */ | ||
352 | { .con_id = "pll1_clk", .clk = &pll1_clk}, | ||
353 | { .con_id = "pll3_48m_clk", .clk = &pll3_48m_clk}, | ||
354 | { .dev_id = "wdt", .clk = &wdt_clk}, | ||
355 | /* clock derived from pll1 clk */ | ||
356 | { .con_id = "cpu_clk", .clk = &cpu_clk}, | ||
357 | { .con_id = "ahb_clk", .clk = &ahb_clk}, | ||
358 | { .dev_id = "uart", .clk = &uart_clk}, | ||
359 | { .dev_id = "firda", .clk = &firda_clk}, | ||
360 | { .dev_id = "gpt0", .clk = &gpt0_clk}, | ||
361 | { .dev_id = "gpt1", .clk = &gpt1_clk}, | ||
362 | { .dev_id = "gpt2", .clk = &gpt2_clk}, | ||
363 | /* clock derived from pll3 clk */ | ||
364 | { .dev_id = "usbh", .clk = &usbh_clk}, | ||
365 | { .dev_id = "usbd", .clk = &usbd_clk}, | ||
366 | { .dev_id = "clcd", .clk = &clcd_clk}, | ||
367 | /* clock derived from ahb clk */ | ||
368 | { .con_id = "apb_clk", .clk = &apb_clk}, | ||
369 | { .dev_id = "i2c", .clk = &i2c_clk}, | ||
370 | { .dev_id = "dma", .clk = &dma_clk}, | ||
371 | { .dev_id = "jpeg", .clk = &jpeg_clk}, | ||
372 | { .dev_id = "gmac", .clk = &gmac_clk}, | ||
373 | { .dev_id = "smi", .clk = &smi_clk}, | ||
374 | { .dev_id = "c3", .clk = &c3_clk}, | ||
375 | /* clock derived from apb clk */ | ||
376 | { .dev_id = "adc", .clk = &adc_clk}, | ||
377 | { .dev_id = "ssp", .clk = &ssp_clk}, | ||
378 | { .dev_id = "gpio", .clk = &gpio_clk}, | ||
379 | }; | ||
380 | |||
381 | void __init clk_init(void) | ||
382 | { | ||
383 | int i; | ||
384 | |||
385 | for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++) | ||
386 | clk_register(&spear_clk_lookups[i]); | ||
387 | |||
388 | recalc_root_clocks(); | ||
389 | } | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/clkdev.h b/arch/arm/mach-spear3xx/include/mach/clkdev.h new file mode 100644 index 000000000000..a3d07339d9f1 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/clkdev.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/clkdev.h | ||
3 | * | ||
4 | * Clock Dev framework definitions for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_CLKDEV_H | ||
15 | #define __MACH_CLKDEV_H | ||
16 | |||
17 | #include <plat/clkdev.h> | ||
18 | |||
19 | #endif /* __MACH_CLKDEV_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/debug-macro.S b/arch/arm/mach-spear3xx/include/mach/debug-macro.S new file mode 100644 index 000000000000..590519f10d6e --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/debug-macro.S | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/debug-macro.S | ||
3 | * | ||
4 | * Debugging macro include header spear3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <plat/debug-macro.S> | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/entry-macro.S b/arch/arm/mach-spear3xx/include/mach/entry-macro.S new file mode 100644 index 000000000000..947625d6b48d --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/entry-macro.S | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <mach/hardware.h> | ||
15 | #include <mach/spear.h> | ||
16 | #include <asm/hardware/vic.h> | ||
17 | |||
18 | .macro disable_fiq | ||
19 | .endm | ||
20 | |||
21 | .macro get_irqnr_preamble, base, tmp | ||
22 | .endm | ||
23 | |||
24 | .macro arch_ret_to_user, tmp1, tmp2 | ||
25 | .endm | ||
26 | |||
27 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
28 | ldr \base, =VA_SPEAR3XX_ML1_VIC_BASE | ||
29 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get status | ||
30 | teq \irqstat, #0 | ||
31 | beq 1001f @ this will set/reset | ||
32 | @ zero register | ||
33 | /* | ||
34 | * Following code will find bit position of least significang | ||
35 | * bit set in irqstat, using following equation | ||
36 | * least significant bit set in n = (n & ~(n-1)) | ||
37 | */ | ||
38 | sub \tmp, \irqstat, #1 @ tmp = irqstat - 1 | ||
39 | mvn \tmp, \tmp @ tmp = ~tmp | ||
40 | and \irqstat, \irqstat, \tmp @ irqstat &= tmp | ||
41 | /* Now, irqstat is = bit no. of 1st bit set in vic irq status */ | ||
42 | clz \tmp, \irqstat @ tmp = leading zeros | ||
43 | rsb \irqnr, \tmp, #0x1F @ irqnr = 32 - tmp - 1 | ||
44 | |||
45 | 1001: /* EQ will be set if no irqs pending */ | ||
46 | .endm | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/generic.h b/arch/arm/mach-spear3xx/include/mach/generic.h new file mode 100644 index 000000000000..af7e02c909a3 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/generic.h | |||
@@ -0,0 +1,205 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/generic.h | ||
3 | * | ||
4 | * SPEAr3XX machine family generic header file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_GENERIC_H | ||
15 | #define __MACH_GENERIC_H | ||
16 | |||
17 | #include <asm/mach/time.h> | ||
18 | #include <asm/mach/map.h> | ||
19 | #include <linux/init.h> | ||
20 | #include <linux/platform_device.h> | ||
21 | #include <linux/amba/bus.h> | ||
22 | #include <plat/padmux.h> | ||
23 | |||
24 | /* spear3xx declarations */ | ||
25 | /* | ||
26 | * Each GPT has 2 timer channels | ||
27 | * Following GPT channels will be used as clock source and clockevent | ||
28 | */ | ||
29 | #define SPEAR_GPT0_BASE SPEAR3XX_ML1_TMR_BASE | ||
30 | #define SPEAR_GPT0_CHAN0_IRQ IRQ_CPU_GPT1_1 | ||
31 | #define SPEAR_GPT0_CHAN1_IRQ IRQ_CPU_GPT1_2 | ||
32 | |||
33 | /* Add spear3xx family device structure declarations here */ | ||
34 | extern struct amba_device gpio_device; | ||
35 | extern struct amba_device uart_device; | ||
36 | extern struct sys_timer spear_sys_timer; | ||
37 | |||
38 | /* Add spear3xx family function declarations here */ | ||
39 | void __init clk_init(void); | ||
40 | void __init spear3xx_map_io(void); | ||
41 | void __init spear3xx_init_irq(void); | ||
42 | void __init spear3xx_init(void); | ||
43 | void spear_pmx_init(struct pmx_driver *pmx_driver, uint base, uint size); | ||
44 | |||
45 | /* pad mux declarations */ | ||
46 | #define PMX_FIRDA_MASK (1 << 14) | ||
47 | #define PMX_I2C_MASK (1 << 13) | ||
48 | #define PMX_SSP_CS_MASK (1 << 12) | ||
49 | #define PMX_SSP_MASK (1 << 11) | ||
50 | #define PMX_MII_MASK (1 << 10) | ||
51 | #define PMX_GPIO_PIN0_MASK (1 << 9) | ||
52 | #define PMX_GPIO_PIN1_MASK (1 << 8) | ||
53 | #define PMX_GPIO_PIN2_MASK (1 << 7) | ||
54 | #define PMX_GPIO_PIN3_MASK (1 << 6) | ||
55 | #define PMX_GPIO_PIN4_MASK (1 << 5) | ||
56 | #define PMX_GPIO_PIN5_MASK (1 << 4) | ||
57 | #define PMX_UART0_MODEM_MASK (1 << 3) | ||
58 | #define PMX_UART0_MASK (1 << 2) | ||
59 | #define PMX_TIMER_3_4_MASK (1 << 1) | ||
60 | #define PMX_TIMER_1_2_MASK (1 << 0) | ||
61 | |||
62 | /* pad mux devices */ | ||
63 | extern struct pmx_dev pmx_firda; | ||
64 | extern struct pmx_dev pmx_i2c; | ||
65 | extern struct pmx_dev pmx_ssp_cs; | ||
66 | extern struct pmx_dev pmx_ssp; | ||
67 | extern struct pmx_dev pmx_mii; | ||
68 | extern struct pmx_dev pmx_gpio_pin0; | ||
69 | extern struct pmx_dev pmx_gpio_pin1; | ||
70 | extern struct pmx_dev pmx_gpio_pin2; | ||
71 | extern struct pmx_dev pmx_gpio_pin3; | ||
72 | extern struct pmx_dev pmx_gpio_pin4; | ||
73 | extern struct pmx_dev pmx_gpio_pin5; | ||
74 | extern struct pmx_dev pmx_uart0_modem; | ||
75 | extern struct pmx_dev pmx_uart0; | ||
76 | extern struct pmx_dev pmx_timer_3_4; | ||
77 | extern struct pmx_dev pmx_timer_1_2; | ||
78 | |||
79 | #if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320) | ||
80 | /* padmux plgpio devices */ | ||
81 | extern struct pmx_dev pmx_plgpio_0_1; | ||
82 | extern struct pmx_dev pmx_plgpio_2_3; | ||
83 | extern struct pmx_dev pmx_plgpio_4_5; | ||
84 | extern struct pmx_dev pmx_plgpio_6_9; | ||
85 | extern struct pmx_dev pmx_plgpio_10_27; | ||
86 | extern struct pmx_dev pmx_plgpio_28; | ||
87 | extern struct pmx_dev pmx_plgpio_29; | ||
88 | extern struct pmx_dev pmx_plgpio_30; | ||
89 | extern struct pmx_dev pmx_plgpio_31; | ||
90 | extern struct pmx_dev pmx_plgpio_32; | ||
91 | extern struct pmx_dev pmx_plgpio_33; | ||
92 | extern struct pmx_dev pmx_plgpio_34_36; | ||
93 | extern struct pmx_dev pmx_plgpio_37_42; | ||
94 | extern struct pmx_dev pmx_plgpio_43_44_47_48; | ||
95 | extern struct pmx_dev pmx_plgpio_45_46_49_50; | ||
96 | #endif | ||
97 | |||
98 | extern struct pmx_driver pmx_driver; | ||
99 | |||
100 | /* spear300 declarations */ | ||
101 | #ifdef CONFIG_MACH_SPEAR300 | ||
102 | /* Add spear300 machine device structure declarations here */ | ||
103 | extern struct amba_device gpio1_device; | ||
104 | |||
105 | /* pad mux modes */ | ||
106 | extern struct pmx_mode nand_mode; | ||
107 | extern struct pmx_mode nor_mode; | ||
108 | extern struct pmx_mode photo_frame_mode; | ||
109 | extern struct pmx_mode lend_ip_phone_mode; | ||
110 | extern struct pmx_mode hend_ip_phone_mode; | ||
111 | extern struct pmx_mode lend_wifi_phone_mode; | ||
112 | extern struct pmx_mode hend_wifi_phone_mode; | ||
113 | extern struct pmx_mode ata_pabx_wi2s_mode; | ||
114 | extern struct pmx_mode ata_pabx_i2s_mode; | ||
115 | extern struct pmx_mode caml_lcdw_mode; | ||
116 | extern struct pmx_mode camu_lcd_mode; | ||
117 | extern struct pmx_mode camu_wlcd_mode; | ||
118 | extern struct pmx_mode caml_lcd_mode; | ||
119 | |||
120 | /* pad mux devices */ | ||
121 | extern struct pmx_dev pmx_fsmc_2_chips; | ||
122 | extern struct pmx_dev pmx_fsmc_4_chips; | ||
123 | extern struct pmx_dev pmx_keyboard; | ||
124 | extern struct pmx_dev pmx_clcd; | ||
125 | extern struct pmx_dev pmx_telecom_gpio; | ||
126 | extern struct pmx_dev pmx_telecom_tdm; | ||
127 | extern struct pmx_dev pmx_telecom_spi_cs_i2c_clk; | ||
128 | extern struct pmx_dev pmx_telecom_camera; | ||
129 | extern struct pmx_dev pmx_telecom_dac; | ||
130 | extern struct pmx_dev pmx_telecom_i2s; | ||
131 | extern struct pmx_dev pmx_telecom_boot_pins; | ||
132 | extern struct pmx_dev pmx_telecom_sdio_4bit; | ||
133 | extern struct pmx_dev pmx_telecom_sdio_8bit; | ||
134 | extern struct pmx_dev pmx_gpio1; | ||
135 | |||
136 | void spear300_pmx_init(void); | ||
137 | |||
138 | /* Add spear300 machine function declarations here */ | ||
139 | void __init spear300_init(void); | ||
140 | |||
141 | #endif /* CONFIG_MACH_SPEAR300 */ | ||
142 | |||
143 | /* spear310 declarations */ | ||
144 | #ifdef CONFIG_MACH_SPEAR310 | ||
145 | /* Add spear310 machine device structure declarations here */ | ||
146 | |||
147 | /* pad mux devices */ | ||
148 | extern struct pmx_dev pmx_emi_cs_0_1_4_5; | ||
149 | extern struct pmx_dev pmx_emi_cs_2_3; | ||
150 | extern struct pmx_dev pmx_uart1; | ||
151 | extern struct pmx_dev pmx_uart2; | ||
152 | extern struct pmx_dev pmx_uart3_4_5; | ||
153 | extern struct pmx_dev pmx_fsmc; | ||
154 | extern struct pmx_dev pmx_rs485_0_1; | ||
155 | extern struct pmx_dev pmx_tdm0; | ||
156 | |||
157 | void spear310_pmx_init(void); | ||
158 | |||
159 | /* Add spear310 machine function declarations here */ | ||
160 | void __init spear310_init(void); | ||
161 | |||
162 | #endif /* CONFIG_MACH_SPEAR310 */ | ||
163 | |||
164 | /* spear320 declarations */ | ||
165 | #ifdef CONFIG_MACH_SPEAR320 | ||
166 | /* Add spear320 machine device structure declarations here */ | ||
167 | |||
168 | /* pad mux modes */ | ||
169 | extern struct pmx_mode auto_net_smii_mode; | ||
170 | extern struct pmx_mode auto_net_mii_mode; | ||
171 | extern struct pmx_mode auto_exp_mode; | ||
172 | extern struct pmx_mode small_printers_mode; | ||
173 | |||
174 | /* pad mux devices */ | ||
175 | extern struct pmx_dev pmx_clcd; | ||
176 | extern struct pmx_dev pmx_emi; | ||
177 | extern struct pmx_dev pmx_fsmc; | ||
178 | extern struct pmx_dev pmx_spp; | ||
179 | extern struct pmx_dev pmx_sdio; | ||
180 | extern struct pmx_dev pmx_i2s; | ||
181 | extern struct pmx_dev pmx_uart1; | ||
182 | extern struct pmx_dev pmx_uart1_modem; | ||
183 | extern struct pmx_dev pmx_uart2; | ||
184 | extern struct pmx_dev pmx_touchscreen; | ||
185 | extern struct pmx_dev pmx_can; | ||
186 | extern struct pmx_dev pmx_sdio_led; | ||
187 | extern struct pmx_dev pmx_pwm0; | ||
188 | extern struct pmx_dev pmx_pwm1; | ||
189 | extern struct pmx_dev pmx_pwm2; | ||
190 | extern struct pmx_dev pmx_pwm3; | ||
191 | extern struct pmx_dev pmx_ssp1; | ||
192 | extern struct pmx_dev pmx_ssp2; | ||
193 | extern struct pmx_dev pmx_mii1; | ||
194 | extern struct pmx_dev pmx_smii0; | ||
195 | extern struct pmx_dev pmx_smii1; | ||
196 | extern struct pmx_dev pmx_i2c1; | ||
197 | |||
198 | void spear320_pmx_init(void); | ||
199 | |||
200 | /* Add spear320 machine function declarations here */ | ||
201 | void __init spear320_init(void); | ||
202 | |||
203 | #endif /* CONFIG_MACH_SPEAR320 */ | ||
204 | |||
205 | #endif /* __MACH_GENERIC_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/gpio.h b/arch/arm/mach-spear3xx/include/mach/gpio.h new file mode 100644 index 000000000000..451b2081bfc9 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/gpio.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/gpio.h | ||
3 | * | ||
4 | * GPIO macros for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_GPIO_H | ||
15 | #define __MACH_GPIO_H | ||
16 | |||
17 | #include <plat/gpio.h> | ||
18 | |||
19 | #endif /* __MACH_GPIO_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/hardware.h b/arch/arm/mach-spear3xx/include/mach/hardware.h new file mode 100644 index 000000000000..4a86e6a3c444 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/hardware.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/hardware.h | ||
3 | * | ||
4 | * Hardware definitions for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_HARDWARE_H | ||
15 | #define __MACH_HARDWARE_H | ||
16 | |||
17 | /* Vitual to physical translation of statically mapped space */ | ||
18 | #define IO_ADDRESS(x) (x | 0xF0000000) | ||
19 | |||
20 | #endif /* __MACH_HARDWARE_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/io.h b/arch/arm/mach-spear3xx/include/mach/io.h new file mode 100644 index 000000000000..30cff8a1f6b5 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/io.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/io.h | ||
3 | * | ||
4 | * IO definitions for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_IO_H | ||
15 | #define __MACH_IO_H | ||
16 | |||
17 | #include <plat/io.h> | ||
18 | |||
19 | #endif /* __MACH_IO_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/irqs.h b/arch/arm/mach-spear3xx/include/mach/irqs.h new file mode 100644 index 000000000000..7f940b818473 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/irqs.h | |||
@@ -0,0 +1,152 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/irqs.h | ||
3 | * | ||
4 | * IRQ helper macros for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_IRQS_H | ||
15 | #define __MACH_IRQS_H | ||
16 | |||
17 | /* SPEAr3xx IRQ definitions */ | ||
18 | #define IRQ_HW_ACCEL_MOD_0 0 | ||
19 | #define IRQ_INTRCOMM_RAS_ARM 1 | ||
20 | #define IRQ_CPU_GPT1_1 2 | ||
21 | #define IRQ_CPU_GPT1_2 3 | ||
22 | #define IRQ_BASIC_GPT1_1 4 | ||
23 | #define IRQ_BASIC_GPT1_2 5 | ||
24 | #define IRQ_BASIC_GPT2_1 6 | ||
25 | #define IRQ_BASIC_GPT2_2 7 | ||
26 | #define IRQ_BASIC_DMA 8 | ||
27 | #define IRQ_BASIC_SMI 9 | ||
28 | #define IRQ_BASIC_RTC 10 | ||
29 | #define IRQ_BASIC_GPIO 11 | ||
30 | #define IRQ_BASIC_WDT 12 | ||
31 | #define IRQ_DDR_CONTROLLER 13 | ||
32 | #define IRQ_SYS_ERROR 14 | ||
33 | #define IRQ_WAKEUP_RCV 15 | ||
34 | #define IRQ_JPEG 16 | ||
35 | #define IRQ_IRDA 17 | ||
36 | #define IRQ_ADC 18 | ||
37 | #define IRQ_UART 19 | ||
38 | #define IRQ_SSP 20 | ||
39 | #define IRQ_I2C 21 | ||
40 | #define IRQ_MAC_1 22 | ||
41 | #define IRQ_MAC_2 23 | ||
42 | #define IRQ_USB_DEV 24 | ||
43 | #define IRQ_USB_H_OHCI_0 25 | ||
44 | #define IRQ_USB_H_EHCI_0 26 | ||
45 | #define IRQ_USB_H_EHCI_1 IRQ_USB_H_EHCI_0 | ||
46 | #define IRQ_USB_H_OHCI_1 27 | ||
47 | #define IRQ_GEN_RAS_1 28 | ||
48 | #define IRQ_GEN_RAS_2 29 | ||
49 | #define IRQ_GEN_RAS_3 30 | ||
50 | #define IRQ_HW_ACCEL_MOD_1 31 | ||
51 | #define IRQ_VIC_END 32 | ||
52 | |||
53 | #define VIRQ_START IRQ_VIC_END | ||
54 | |||
55 | /* SPEAr300 Virtual irq definitions */ | ||
56 | #ifdef CONFIG_MACH_SPEAR300 | ||
57 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
58 | #define VIRQ_IT_PERS_S (VIRQ_START + 0) | ||
59 | #define VIRQ_IT_CHANGE_S (VIRQ_START + 1) | ||
60 | #define VIRQ_I2S (VIRQ_START + 2) | ||
61 | #define VIRQ_TDM (VIRQ_START + 3) | ||
62 | #define VIRQ_CAMERA_L (VIRQ_START + 4) | ||
63 | #define VIRQ_CAMERA_F (VIRQ_START + 5) | ||
64 | #define VIRQ_CAMERA_V (VIRQ_START + 6) | ||
65 | #define VIRQ_KEYBOARD (VIRQ_START + 7) | ||
66 | #define VIRQ_GPIO1 (VIRQ_START + 8) | ||
67 | |||
68 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
69 | #define IRQ_CLCD IRQ_GEN_RAS_3 | ||
70 | |||
71 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
72 | #define IRQ_SDIO IRQ_INTRCOMM_RAS_ARM | ||
73 | |||
74 | /* GPIO pins virtual irqs */ | ||
75 | #define SPEAR_GPIO_INT_BASE (VIRQ_START + 9) | ||
76 | #define SPEAR_GPIO1_INT_BASE (SPEAR_GPIO_INT_BASE + 8) | ||
77 | #define SPEAR_GPIO_INT_END (SPEAR_GPIO1_INT_BASE + 8) | ||
78 | |||
79 | /* SPEAr310 Virtual irq definitions */ | ||
80 | #elif defined(CONFIG_MACH_SPEAR310) | ||
81 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
82 | #define VIRQ_SMII0 (VIRQ_START + 0) | ||
83 | #define VIRQ_SMII1 (VIRQ_START + 1) | ||
84 | #define VIRQ_SMII2 (VIRQ_START + 2) | ||
85 | #define VIRQ_SMII3 (VIRQ_START + 3) | ||
86 | #define VIRQ_WAKEUP_SMII0 (VIRQ_START + 4) | ||
87 | #define VIRQ_WAKEUP_SMII1 (VIRQ_START + 5) | ||
88 | #define VIRQ_WAKEUP_SMII2 (VIRQ_START + 6) | ||
89 | #define VIRQ_WAKEUP_SMII3 (VIRQ_START + 7) | ||
90 | |||
91 | /* IRQs sharing IRQ_GEN_RAS_2 */ | ||
92 | #define VIRQ_UART1 (VIRQ_START + 8) | ||
93 | #define VIRQ_UART2 (VIRQ_START + 9) | ||
94 | #define VIRQ_UART3 (VIRQ_START + 10) | ||
95 | #define VIRQ_UART4 (VIRQ_START + 11) | ||
96 | #define VIRQ_UART5 (VIRQ_START + 12) | ||
97 | |||
98 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
99 | #define VIRQ_EMI (VIRQ_START + 13) | ||
100 | #define VIRQ_PLGPIO (VIRQ_START + 14) | ||
101 | |||
102 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
103 | #define VIRQ_TDM_HDLC (VIRQ_START + 15) | ||
104 | #define VIRQ_RS485_0 (VIRQ_START + 16) | ||
105 | #define VIRQ_RS485_1 (VIRQ_START + 17) | ||
106 | |||
107 | /* GPIO pins virtual irqs */ | ||
108 | #define SPEAR_GPIO_INT_BASE (VIRQ_START + 18) | ||
109 | |||
110 | /* SPEAr320 Virtual irq definitions */ | ||
111 | #else | ||
112 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
113 | #define VIRQ_EMI (VIRQ_START + 0) | ||
114 | #define VIRQ_CLCD (VIRQ_START + 1) | ||
115 | #define VIRQ_SPP (VIRQ_START + 2) | ||
116 | |||
117 | /* IRQs sharing IRQ_GEN_RAS_2 */ | ||
118 | #define IRQ_SDIO IRQ_GEN_RAS_2 | ||
119 | |||
120 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
121 | #define VIRQ_PLGPIO (VIRQ_START + 3) | ||
122 | #define VIRQ_I2S_PLAY (VIRQ_START + 4) | ||
123 | #define VIRQ_I2S_REC (VIRQ_START + 5) | ||
124 | |||
125 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
126 | #define VIRQ_CANU (VIRQ_START + 6) | ||
127 | #define VIRQ_CANL (VIRQ_START + 7) | ||
128 | #define VIRQ_UART1 (VIRQ_START + 8) | ||
129 | #define VIRQ_UART2 (VIRQ_START + 9) | ||
130 | #define VIRQ_SSP1 (VIRQ_START + 10) | ||
131 | #define VIRQ_SSP2 (VIRQ_START + 11) | ||
132 | #define VIRQ_SMII0 (VIRQ_START + 12) | ||
133 | #define VIRQ_MII1_SMII1 (VIRQ_START + 13) | ||
134 | #define VIRQ_WAKEUP_SMII0 (VIRQ_START + 14) | ||
135 | #define VIRQ_WAKEUP_MII1_SMII1 (VIRQ_START + 15) | ||
136 | #define VIRQ_I2C (VIRQ_START + 16) | ||
137 | |||
138 | /* GPIO pins virtual irqs */ | ||
139 | #define SPEAR_GPIO_INT_BASE (VIRQ_START + 17) | ||
140 | |||
141 | #endif | ||
142 | |||
143 | /* PLGPIO Virtual IRQs */ | ||
144 | #if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320) | ||
145 | #define SPEAR_PLGPIO_INT_BASE (SPEAR_GPIO_INT_BASE + 8) | ||
146 | #define SPEAR_GPIO_INT_END (SPEAR_PLGPIO_INT_BASE + 102) | ||
147 | #endif | ||
148 | |||
149 | #define VIRQ_END SPEAR_GPIO_INT_END | ||
150 | #define NR_IRQS VIRQ_END | ||
151 | |||
152 | #endif /* __MACH_IRQS_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/memory.h b/arch/arm/mach-spear3xx/include/mach/memory.h new file mode 100644 index 000000000000..51735221ea19 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/memory.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/memory.h | ||
3 | * | ||
4 | * Memory map for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_MEMORY_H | ||
15 | #define __MACH_MEMORY_H | ||
16 | |||
17 | #include <plat/memory.h> | ||
18 | |||
19 | #endif /* __MACH_MEMORY_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/misc_regs.h b/arch/arm/mach-spear3xx/include/mach/misc_regs.h new file mode 100644 index 000000000000..38d767a1aba0 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/misc_regs.h | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/misc_regs.h | ||
3 | * | ||
4 | * Miscellaneous registers definitions for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_MISC_REGS_H | ||
15 | #define __MACH_MISC_REGS_H | ||
16 | |||
17 | #include <mach/spear.h> | ||
18 | |||
19 | #define MISC_BASE VA_SPEAR3XX_ICM3_MISC_REG_BASE | ||
20 | |||
21 | #define SOC_CFG_CTR ((unsigned int *)(MISC_BASE + 0x000)) | ||
22 | #define DIAG_CFG_CTR ((unsigned int *)(MISC_BASE + 0x004)) | ||
23 | #define PLL1_CTR ((unsigned int *)(MISC_BASE + 0x008)) | ||
24 | #define PLL1_FRQ ((unsigned int *)(MISC_BASE + 0x00C)) | ||
25 | #define PLL1_MOD ((unsigned int *)(MISC_BASE + 0x010)) | ||
26 | #define PLL2_CTR ((unsigned int *)(MISC_BASE + 0x014)) | ||
27 | /* PLL_CTR register masks */ | ||
28 | #define PLL_ENABLE 2 | ||
29 | #define PLL_MODE_SHIFT 4 | ||
30 | #define PLL_MODE_MASK 0x3 | ||
31 | #define PLL_MODE_NORMAL 0 | ||
32 | #define PLL_MODE_FRACTION 1 | ||
33 | #define PLL_MODE_DITH_DSB 2 | ||
34 | #define PLL_MODE_DITH_SSB 3 | ||
35 | |||
36 | #define PLL2_FRQ ((unsigned int *)(MISC_BASE + 0x018)) | ||
37 | /* PLL FRQ register masks */ | ||
38 | #define PLL_DIV_N_SHIFT 0 | ||
39 | #define PLL_DIV_N_MASK 0xFF | ||
40 | #define PLL_DIV_P_SHIFT 8 | ||
41 | #define PLL_DIV_P_MASK 0x7 | ||
42 | #define PLL_NORM_FDBK_M_SHIFT 24 | ||
43 | #define PLL_NORM_FDBK_M_MASK 0xFF | ||
44 | #define PLL_DITH_FDBK_M_SHIFT 16 | ||
45 | #define PLL_DITH_FDBK_M_MASK 0xFFFF | ||
46 | |||
47 | #define PLL2_MOD ((unsigned int *)(MISC_BASE + 0x01C)) | ||
48 | #define PLL_CLK_CFG ((unsigned int *)(MISC_BASE + 0x020)) | ||
49 | #define CORE_CLK_CFG ((unsigned int *)(MISC_BASE + 0x024)) | ||
50 | /* CORE CLK CFG register masks */ | ||
51 | #define PLL_HCLK_RATIO_SHIFT 10 | ||
52 | #define PLL_HCLK_RATIO_MASK 0x3 | ||
53 | #define HCLK_PCLK_RATIO_SHIFT 8 | ||
54 | #define HCLK_PCLK_RATIO_MASK 0x3 | ||
55 | |||
56 | #define PERIP_CLK_CFG ((unsigned int *)(MISC_BASE + 0x028)) | ||
57 | /* PERIP_CLK_CFG register masks */ | ||
58 | #define UART_CLK_SHIFT 4 | ||
59 | #define UART_CLK_MASK 0x1 | ||
60 | #define FIRDA_CLK_SHIFT 5 | ||
61 | #define FIRDA_CLK_MASK 0x3 | ||
62 | #define GPT0_CLK_SHIFT 8 | ||
63 | #define GPT1_CLK_SHIFT 11 | ||
64 | #define GPT2_CLK_SHIFT 12 | ||
65 | #define GPT_CLK_MASK 0x1 | ||
66 | #define AUX_CLK_PLL3_MASK 0 | ||
67 | #define AUX_CLK_PLL1_MASK 1 | ||
68 | |||
69 | #define PERIP1_CLK_ENB ((unsigned int *)(MISC_BASE + 0x02C)) | ||
70 | /* PERIP1_CLK_ENB register masks */ | ||
71 | #define UART_CLK_ENB 3 | ||
72 | #define SSP_CLK_ENB 5 | ||
73 | #define I2C_CLK_ENB 7 | ||
74 | #define JPEG_CLK_ENB 8 | ||
75 | #define FIRDA_CLK_ENB 10 | ||
76 | #define GPT1_CLK_ENB 11 | ||
77 | #define GPT2_CLK_ENB 12 | ||
78 | #define ADC_CLK_ENB 15 | ||
79 | #define RTC_CLK_ENB 17 | ||
80 | #define GPIO_CLK_ENB 18 | ||
81 | #define DMA_CLK_ENB 19 | ||
82 | #define SMI_CLK_ENB 21 | ||
83 | #define GMAC_CLK_ENB 23 | ||
84 | #define USBD_CLK_ENB 24 | ||
85 | #define USBH_CLK_ENB 25 | ||
86 | #define C3_CLK_ENB 31 | ||
87 | |||
88 | #define SOC_CORE_ID ((unsigned int *)(MISC_BASE + 0x030)) | ||
89 | #define RAS_CLK_ENB ((unsigned int *)(MISC_BASE + 0x034)) | ||
90 | #define PERIP1_SOF_RST ((unsigned int *)(MISC_BASE + 0x038)) | ||
91 | /* PERIP1_SOF_RST register masks */ | ||
92 | #define JPEG_SOF_RST 8 | ||
93 | |||
94 | #define SOC_USER_ID ((unsigned int *)(MISC_BASE + 0x03C)) | ||
95 | #define RAS_SOF_RST ((unsigned int *)(MISC_BASE + 0x040)) | ||
96 | #define PRSC1_CLK_CFG ((unsigned int *)(MISC_BASE + 0x044)) | ||
97 | #define PRSC2_CLK_CFG ((unsigned int *)(MISC_BASE + 0x048)) | ||
98 | #define PRSC3_CLK_CFG ((unsigned int *)(MISC_BASE + 0x04C)) | ||
99 | /* gpt synthesizer register masks */ | ||
100 | #define GPT_MSCALE_SHIFT 0 | ||
101 | #define GPT_MSCALE_MASK 0xFFF | ||
102 | #define GPT_NSCALE_SHIFT 12 | ||
103 | #define GPT_NSCALE_MASK 0xF | ||
104 | |||
105 | #define AMEM_CLK_CFG ((unsigned int *)(MISC_BASE + 0x050)) | ||
106 | #define EXPI_CLK_CFG ((unsigned int *)(MISC_BASE + 0x054)) | ||
107 | #define CLCD_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x05C)) | ||
108 | #define FIRDA_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x060)) | ||
109 | #define UART_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x064)) | ||
110 | #define GMAC_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x068)) | ||
111 | #define RAS1_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x06C)) | ||
112 | #define RAS2_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x070)) | ||
113 | #define RAS3_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x074)) | ||
114 | #define RAS4_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x078)) | ||
115 | /* aux clk synthesiser register masks for irda to ras4 */ | ||
116 | #define AUX_EQ_SEL_SHIFT 30 | ||
117 | #define AUX_EQ_SEL_MASK 1 | ||
118 | #define AUX_EQ1_SEL 0 | ||
119 | #define AUX_EQ2_SEL 1 | ||
120 | #define AUX_XSCALE_SHIFT 16 | ||
121 | #define AUX_XSCALE_MASK 0xFFF | ||
122 | #define AUX_YSCALE_SHIFT 0 | ||
123 | #define AUX_YSCALE_MASK 0xFFF | ||
124 | |||
125 | #define ICM1_ARB_CFG ((unsigned int *)(MISC_BASE + 0x07C)) | ||
126 | #define ICM2_ARB_CFG ((unsigned int *)(MISC_BASE + 0x080)) | ||
127 | #define ICM3_ARB_CFG ((unsigned int *)(MISC_BASE + 0x084)) | ||
128 | #define ICM4_ARB_CFG ((unsigned int *)(MISC_BASE + 0x088)) | ||
129 | #define ICM5_ARB_CFG ((unsigned int *)(MISC_BASE + 0x08C)) | ||
130 | #define ICM6_ARB_CFG ((unsigned int *)(MISC_BASE + 0x090)) | ||
131 | #define ICM7_ARB_CFG ((unsigned int *)(MISC_BASE + 0x094)) | ||
132 | #define ICM8_ARB_CFG ((unsigned int *)(MISC_BASE + 0x098)) | ||
133 | #define ICM9_ARB_CFG ((unsigned int *)(MISC_BASE + 0x09C)) | ||
134 | #define DMA_CHN_CFG ((unsigned int *)(MISC_BASE + 0x0A0)) | ||
135 | #define USB2_PHY_CFG ((unsigned int *)(MISC_BASE + 0x0A4)) | ||
136 | #define GMAC_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0A8)) | ||
137 | #define EXPI_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0AC)) | ||
138 | #define PRC1_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C0)) | ||
139 | #define PRC2_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C4)) | ||
140 | #define PRC3_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C8)) | ||
141 | #define PRC4_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0CC)) | ||
142 | #define PRC1_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D0)) | ||
143 | #define PRC2_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D4)) | ||
144 | #define PRC3_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D8)) | ||
145 | #define PRC4_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0DC)) | ||
146 | #define PWRDOWN_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0E0)) | ||
147 | #define COMPSSTL_1V8_CFG ((unsigned int *)(MISC_BASE + 0x0E4)) | ||
148 | #define COMPSSTL_2V5_CFG ((unsigned int *)(MISC_BASE + 0x0E8)) | ||
149 | #define COMPCOR_3V3_CFG ((unsigned int *)(MISC_BASE + 0x0EC)) | ||
150 | #define SSTLPAD_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F0)) | ||
151 | #define BIST1_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F4)) | ||
152 | #define BIST2_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F8)) | ||
153 | #define BIST3_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0FC)) | ||
154 | #define BIST4_CFG_CTR ((unsigned int *)(MISC_BASE + 0x100)) | ||
155 | #define BIST5_CFG_CTR ((unsigned int *)(MISC_BASE + 0x104)) | ||
156 | #define BIST1_STS_RES ((unsigned int *)(MISC_BASE + 0x108)) | ||
157 | #define BIST2_STS_RES ((unsigned int *)(MISC_BASE + 0x10C)) | ||
158 | #define BIST3_STS_RES ((unsigned int *)(MISC_BASE + 0x110)) | ||
159 | #define BIST4_STS_RES ((unsigned int *)(MISC_BASE + 0x114)) | ||
160 | #define BIST5_STS_RES ((unsigned int *)(MISC_BASE + 0x118)) | ||
161 | #define SYSERR_CFG_CTR ((unsigned int *)(MISC_BASE + 0x11C)) | ||
162 | |||
163 | #endif /* __MACH_MISC_REGS_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/spear.h b/arch/arm/mach-spear3xx/include/mach/spear.h new file mode 100644 index 000000000000..dcca8568a486 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/spear.h | |||
@@ -0,0 +1,144 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/spear.h | ||
3 | * | ||
4 | * SPEAr3xx Machine family specific definition | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_SPEAR3XX_H | ||
15 | #define __MACH_SPEAR3XX_H | ||
16 | |||
17 | #include <mach/hardware.h> | ||
18 | #include <mach/spear300.h> | ||
19 | #include <mach/spear310.h> | ||
20 | #include <mach/spear320.h> | ||
21 | |||
22 | #define SPEAR3XX_ML_SDRAM_BASE 0x00000000 | ||
23 | #define SPEAR3XX_ML_SDRAM_SIZE 0x40000000 | ||
24 | |||
25 | #define SPEAR3XX_ICM9_BASE 0xC0000000 | ||
26 | #define SPEAR3XX_ICM9_SIZE 0x10000000 | ||
27 | |||
28 | /* ICM1 - Low speed connection */ | ||
29 | #define SPEAR3XX_ICM1_2_BASE 0xD0000000 | ||
30 | #define SPEAR3XX_ICM1_2_SIZE 0x10000000 | ||
31 | |||
32 | #define SPEAR3XX_ICM1_UART_BASE 0xD0000000 | ||
33 | #define VA_SPEAR3XX_ICM1_UART_BASE IO_ADDRESS(SPEAR3XX_ICM1_UART_BASE) | ||
34 | #define SPEAR3XX_ICM1_UART_SIZE 0x00080000 | ||
35 | |||
36 | #define SPEAR3XX_ICM1_ADC_BASE 0xD0080000 | ||
37 | #define SPEAR3XX_ICM1_ADC_SIZE 0x00080000 | ||
38 | |||
39 | #define SPEAR3XX_ICM1_SSP_BASE 0xD0100000 | ||
40 | #define SPEAR3XX_ICM1_SSP_SIZE 0x00080000 | ||
41 | |||
42 | #define SPEAR3XX_ICM1_I2C_BASE 0xD0180000 | ||
43 | #define SPEAR3XX_ICM1_I2C_SIZE 0x00080000 | ||
44 | |||
45 | #define SPEAR3XX_ICM1_JPEG_BASE 0xD0800000 | ||
46 | #define SPEAR3XX_ICM1_JPEG_SIZE 0x00800000 | ||
47 | |||
48 | #define SPEAR3XX_ICM1_IRDA_BASE 0xD1000000 | ||
49 | #define SPEAR3XX_ICM1_IRDA_SIZE 0x00080000 | ||
50 | |||
51 | #define SPEAR3XX_ICM1_SRAM_BASE 0xD2800000 | ||
52 | #define SPEAR3XX_ICM1_SRAM_SIZE 0x05800000 | ||
53 | |||
54 | /* ICM2 - Application Subsystem */ | ||
55 | #define SPEAR3XX_ICM2_HWACCEL0_BASE 0xD8800000 | ||
56 | #define SPEAR3XX_ICM2_HWACCEL0_SIZE 0x00800000 | ||
57 | |||
58 | #define SPEAR3XX_ICM2_HWACCEL1_BASE 0xD9000000 | ||
59 | #define SPEAR3XX_ICM2_HWACCEL1_SIZE 0x00800000 | ||
60 | |||
61 | /* ICM4 - High Speed Connection */ | ||
62 | #define SPEAR3XX_ICM4_BASE 0xE0000000 | ||
63 | #define SPEAR3XX_ICM4_SIZE 0x08000000 | ||
64 | |||
65 | #define SPEAR3XX_ICM4_MII_BASE 0xE0800000 | ||
66 | #define SPEAR3XX_ICM4_MII_SIZE 0x00800000 | ||
67 | |||
68 | #define SPEAR3XX_ICM4_USBD_FIFO_BASE 0xE1000000 | ||
69 | #define SPEAR3XX_ICM4_USBD_FIFO_SIZE 0x00100000 | ||
70 | |||
71 | #define SPEAR3XX_ICM4_USBD_CSR_BASE 0xE1100000 | ||
72 | #define SPEAR3XX_ICM4_USBD_CSR_SIZE 0x00100000 | ||
73 | |||
74 | #define SPEAR3XX_ICM4_USBD_PLDT_BASE 0xE1200000 | ||
75 | #define SPEAR3XX_ICM4_USBD_PLDT_SIZE 0x00100000 | ||
76 | |||
77 | #define SPEAR3XX_ICM4_USB_EHCI0_1_BASE 0xE1800000 | ||
78 | #define SPEAR3XX_ICM4_USB_EHCI0_1_SIZE 0x00100000 | ||
79 | |||
80 | #define SPEAR3XX_ICM4_USB_OHCI0_BASE 0xE1900000 | ||
81 | #define SPEAR3XX_ICM4_USB_OHCI0_SIZE 0x00100000 | ||
82 | |||
83 | #define SPEAR3XX_ICM4_USB_OHCI1_BASE 0xE2100000 | ||
84 | #define SPEAR3XX_ICM4_USB_OHCI1_SIZE 0x00100000 | ||
85 | |||
86 | #define SPEAR3XX_ICM4_USB_ARB_BASE 0xE2800000 | ||
87 | #define SPEAR3XX_ICM4_USB_ARB_SIZE 0x00010000 | ||
88 | |||
89 | /* ML1 - Multi Layer CPU Subsystem */ | ||
90 | #define SPEAR3XX_ICM3_ML1_2_BASE 0xF0000000 | ||
91 | #define SPEAR3XX_ICM3_ML1_2_SIZE 0x0F000000 | ||
92 | |||
93 | #define SPEAR3XX_ML1_TMR_BASE 0xF0000000 | ||
94 | #define SPEAR3XX_ML1_TMR_SIZE 0x00100000 | ||
95 | |||
96 | #define SPEAR3XX_ML1_VIC_BASE 0xF1100000 | ||
97 | #define VA_SPEAR3XX_ML1_VIC_BASE IO_ADDRESS(SPEAR3XX_ML1_VIC_BASE) | ||
98 | #define SPEAR3XX_ML1_VIC_SIZE 0x00100000 | ||
99 | |||
100 | /* ICM3 - Basic Subsystem */ | ||
101 | #define SPEAR3XX_ICM3_SMEM_BASE 0xF8000000 | ||
102 | #define SPEAR3XX_ICM3_SMEM_SIZE 0x04000000 | ||
103 | |||
104 | #define SPEAR3XX_ICM3_SMI_CTRL_BASE 0xFC000000 | ||
105 | #define SPEAR3XX_ICM3_SMI_CTRL_SIZE 0x00200000 | ||
106 | |||
107 | #define SPEAR3XX_ICM3_DMA_BASE 0xFC400000 | ||
108 | #define SPEAR3XX_ICM3_DMA_SIZE 0x00200000 | ||
109 | |||
110 | #define SPEAR3XX_ICM3_SDRAM_CTRL_BASE 0xFC600000 | ||
111 | #define SPEAR3XX_ICM3_SDRAM_CTRL_SIZE 0x00200000 | ||
112 | |||
113 | #define SPEAR3XX_ICM3_TMR0_BASE 0xFC800000 | ||
114 | #define SPEAR3XX_ICM3_TMR0_SIZE 0x00080000 | ||
115 | |||
116 | #define SPEAR3XX_ICM3_WDT_BASE 0xFC880000 | ||
117 | #define SPEAR3XX_ICM3_WDT_SIZE 0x00080000 | ||
118 | |||
119 | #define SPEAR3XX_ICM3_RTC_BASE 0xFC900000 | ||
120 | #define SPEAR3XX_ICM3_RTC_SIZE 0x00080000 | ||
121 | |||
122 | #define SPEAR3XX_ICM3_GPIO_BASE 0xFC980000 | ||
123 | #define SPEAR3XX_ICM3_GPIO_SIZE 0x00080000 | ||
124 | |||
125 | #define SPEAR3XX_ICM3_SYS_CTRL_BASE 0xFCA00000 | ||
126 | #define VA_SPEAR3XX_ICM3_SYS_CTRL_BASE IO_ADDRESS(SPEAR3XX_ICM3_SYS_CTRL_BASE) | ||
127 | #define SPEAR3XX_ICM3_SYS_CTRL_SIZE 0x00080000 | ||
128 | |||
129 | #define SPEAR3XX_ICM3_MISC_REG_BASE 0xFCA80000 | ||
130 | #define VA_SPEAR3XX_ICM3_MISC_REG_BASE IO_ADDRESS(SPEAR3XX_ICM3_MISC_REG_BASE) | ||
131 | #define SPEAR3XX_ICM3_MISC_REG_SIZE 0x00080000 | ||
132 | |||
133 | #define SPEAR3XX_ICM3_TMR1_BASE 0xFCB00000 | ||
134 | #define SPEAR3XX_ICM3_TMR1_SIZE 0x00080000 | ||
135 | |||
136 | /* Debug uart for linux, will be used for debug and uncompress messages */ | ||
137 | #define SPEAR_DBG_UART_BASE SPEAR3XX_ICM1_UART_BASE | ||
138 | #define VA_SPEAR_DBG_UART_BASE VA_SPEAR3XX_ICM1_UART_BASE | ||
139 | |||
140 | /* Sysctl base for spear platform */ | ||
141 | #define SPEAR_SYS_CTRL_BASE SPEAR3XX_ICM3_SYS_CTRL_BASE | ||
142 | #define VA_SPEAR_SYS_CTRL_BASE VA_SPEAR3XX_ICM3_SYS_CTRL_BASE | ||
143 | |||
144 | #endif /* __MACH_SPEAR3XX_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/spear300.h b/arch/arm/mach-spear3xx/include/mach/spear300.h new file mode 100644 index 000000000000..ccaa76522ee2 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/spear300.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/spear300.h | ||
3 | * | ||
4 | * SPEAr300 Machine specific definition | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifdef CONFIG_MACH_SPEAR300 | ||
15 | |||
16 | #ifndef __MACH_SPEAR300_H | ||
17 | #define __MACH_SPEAR300_H | ||
18 | |||
19 | /* Base address of various IPs */ | ||
20 | #define SPEAR300_TELECOM_BASE 0x50000000 | ||
21 | #define SPEAR300_TELECOM_SIZE 0x10000000 | ||
22 | |||
23 | /* Interrupt registers offsets and masks */ | ||
24 | #define SPEAR300_TELECOM_REG_SIZE 0x00010000 | ||
25 | #define INT_ENB_MASK_REG 0x54 | ||
26 | #define INT_STS_MASK_REG 0x58 | ||
27 | #define IT_PERS_S_IRQ_MASK (1 << 0) | ||
28 | #define IT_CHANGE_S_IRQ_MASK (1 << 1) | ||
29 | #define I2S_IRQ_MASK (1 << 2) | ||
30 | #define TDM_IRQ_MASK (1 << 3) | ||
31 | #define CAMERA_L_IRQ_MASK (1 << 4) | ||
32 | #define CAMERA_F_IRQ_MASK (1 << 5) | ||
33 | #define CAMERA_V_IRQ_MASK (1 << 6) | ||
34 | #define KEYBOARD_IRQ_MASK (1 << 7) | ||
35 | #define GPIO1_IRQ_MASK (1 << 8) | ||
36 | |||
37 | #define SHIRQ_RAS1_MASK 0x1FF | ||
38 | |||
39 | #define SPEAR300_CLCD_BASE 0x60000000 | ||
40 | #define SPEAR300_CLCD_SIZE 0x10000000 | ||
41 | |||
42 | #define SPEAR300_SDIO_BASE 0x70000000 | ||
43 | #define SPEAR300_SDIO_SIZE 0x10000000 | ||
44 | |||
45 | #define SPEAR300_NAND_0_BASE 0x80000000 | ||
46 | #define SPEAR300_NAND_0_SIZE 0x04000000 | ||
47 | |||
48 | #define SPEAR300_NAND_1_BASE 0x84000000 | ||
49 | #define SPEAR300_NAND_1_SIZE 0x04000000 | ||
50 | |||
51 | #define SPEAR300_NAND_2_BASE 0x88000000 | ||
52 | #define SPEAR300_NAND_2_SIZE 0x04000000 | ||
53 | |||
54 | #define SPEAR300_NAND_3_BASE 0x8c000000 | ||
55 | #define SPEAR300_NAND_3_SIZE 0x04000000 | ||
56 | |||
57 | #define SPEAR300_NOR_0_BASE 0x90000000 | ||
58 | #define SPEAR300_NOR_0_SIZE 0x01000000 | ||
59 | |||
60 | #define SPEAR300_NOR_1_BASE 0x91000000 | ||
61 | #define SPEAR300_NOR_1_SIZE 0x01000000 | ||
62 | |||
63 | #define SPEAR300_NOR_2_BASE 0x92000000 | ||
64 | #define SPEAR300_NOR_2_SIZE 0x01000000 | ||
65 | |||
66 | #define SPEAR300_NOR_3_BASE 0x93000000 | ||
67 | #define SPEAR300_NOR_3_SIZE 0x01000000 | ||
68 | |||
69 | #define SPEAR300_FSMC_BASE 0x94000000 | ||
70 | #define SPEAR300_FSMC_SIZE 0x05000000 | ||
71 | |||
72 | #define SPEAR300_SOC_CONFIG_BASE 0x99000000 | ||
73 | #define SPEAR300_SOC_CONFIG_SIZE 0x00000008 | ||
74 | |||
75 | #define SPEAR300_KEYBOARD_BASE 0xA0000000 | ||
76 | #define SPEAR300_KEYBOARD_SIZE 0x09000000 | ||
77 | |||
78 | #define SPEAR300_GPIO_BASE 0xA9000000 | ||
79 | #define SPEAR300_GPIO_SIZE 0x07000000 | ||
80 | |||
81 | #endif /* __MACH_SPEAR300_H */ | ||
82 | |||
83 | #endif /* CONFIG_MACH_SPEAR300 */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/spear310.h b/arch/arm/mach-spear3xx/include/mach/spear310.h new file mode 100644 index 000000000000..b27bb8af3309 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/spear310.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/spear310.h | ||
3 | * | ||
4 | * SPEAr310 Machine specific definition | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifdef CONFIG_MACH_SPEAR310 | ||
15 | |||
16 | #ifndef __MACH_SPEAR310_H | ||
17 | #define __MACH_SPEAR310_H | ||
18 | |||
19 | #define SPEAR310_NAND_BASE 0x40000000 | ||
20 | #define SPEAR310_NAND_SIZE 0x04000000 | ||
21 | |||
22 | #define SPEAR310_FSMC_BASE 0x44000000 | ||
23 | #define SPEAR310_FSMC_SIZE 0x01000000 | ||
24 | |||
25 | #define SPEAR310_UART1_BASE 0xB2000000 | ||
26 | #define SPEAR310_UART2_BASE 0xB2080000 | ||
27 | #define SPEAR310_UART3_BASE 0xB2100000 | ||
28 | #define SPEAR310_UART4_BASE 0xB2180000 | ||
29 | #define SPEAR310_UART5_BASE 0xB2200000 | ||
30 | #define SPEAR310_UART_SIZE 0x00080000 | ||
31 | |||
32 | #define SPEAR310_HDLC_BASE 0xB2800000 | ||
33 | #define SPEAR310_HDLC_SIZE 0x00800000 | ||
34 | |||
35 | #define SPEAR310_RS485_0_BASE 0xB3000000 | ||
36 | #define SPEAR310_RS485_0_SIZE 0x00800000 | ||
37 | |||
38 | #define SPEAR310_RS485_1_BASE 0xB3800000 | ||
39 | #define SPEAR310_RS485_1_SIZE 0x00800000 | ||
40 | |||
41 | #define SPEAR310_SOC_CONFIG_BASE 0xB4000000 | ||
42 | #define SPEAR310_SOC_CONFIG_SIZE 0x00000070 | ||
43 | /* Interrupt registers offsets and masks */ | ||
44 | #define INT_STS_MASK_REG 0x04 | ||
45 | #define SMII0_IRQ_MASK (1 << 0) | ||
46 | #define SMII1_IRQ_MASK (1 << 1) | ||
47 | #define SMII2_IRQ_MASK (1 << 2) | ||
48 | #define SMII3_IRQ_MASK (1 << 3) | ||
49 | #define WAKEUP_SMII0_IRQ_MASK (1 << 4) | ||
50 | #define WAKEUP_SMII1_IRQ_MASK (1 << 5) | ||
51 | #define WAKEUP_SMII2_IRQ_MASK (1 << 6) | ||
52 | #define WAKEUP_SMII3_IRQ_MASK (1 << 7) | ||
53 | #define UART1_IRQ_MASK (1 << 8) | ||
54 | #define UART2_IRQ_MASK (1 << 9) | ||
55 | #define UART3_IRQ_MASK (1 << 10) | ||
56 | #define UART4_IRQ_MASK (1 << 11) | ||
57 | #define UART5_IRQ_MASK (1 << 12) | ||
58 | #define EMI_IRQ_MASK (1 << 13) | ||
59 | #define TDM_HDLC_IRQ_MASK (1 << 14) | ||
60 | #define RS485_0_IRQ_MASK (1 << 15) | ||
61 | #define RS485_1_IRQ_MASK (1 << 16) | ||
62 | |||
63 | #define SHIRQ_RAS1_MASK 0x000FF | ||
64 | #define SHIRQ_RAS2_MASK 0x01F00 | ||
65 | #define SHIRQ_RAS3_MASK 0x02000 | ||
66 | #define SHIRQ_INTRCOMM_RAS_MASK 0x1C000 | ||
67 | |||
68 | #endif /* __MACH_SPEAR310_H */ | ||
69 | |||
70 | #endif /* CONFIG_MACH_SPEAR310 */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/spear320.h b/arch/arm/mach-spear3xx/include/mach/spear320.h new file mode 100644 index 000000000000..cacf17a958cd --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/spear320.h | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/spear320.h | ||
3 | * | ||
4 | * SPEAr320 Machine specific definition | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifdef CONFIG_MACH_SPEAR320 | ||
15 | |||
16 | #ifndef __MACH_SPEAR320_H | ||
17 | #define __MACH_SPEAR320_H | ||
18 | |||
19 | #define SPEAR320_EMI_CTRL_BASE 0x40000000 | ||
20 | #define SPEAR320_EMI_CTRL_SIZE 0x08000000 | ||
21 | |||
22 | #define SPEAR320_FSMC_BASE 0x4C000000 | ||
23 | #define SPEAR320_FSMC_SIZE 0x01000000 | ||
24 | |||
25 | #define SPEAR320_I2S_BASE 0x60000000 | ||
26 | #define SPEAR320_I2S_SIZE 0x10000000 | ||
27 | |||
28 | #define SPEAR320_SDIO_BASE 0x70000000 | ||
29 | #define SPEAR320_SDIO_SIZE 0x10000000 | ||
30 | |||
31 | #define SPEAR320_CLCD_BASE 0x90000000 | ||
32 | #define SPEAR320_CLCD_SIZE 0x10000000 | ||
33 | |||
34 | #define SPEAR320_PAR_PORT_BASE 0xA0000000 | ||
35 | #define SPEAR320_PAR_PORT_SIZE 0x01000000 | ||
36 | |||
37 | #define SPEAR320_CAN0_BASE 0xA1000000 | ||
38 | #define SPEAR320_CAN0_SIZE 0x01000000 | ||
39 | |||
40 | #define SPEAR320_CAN1_BASE 0xA2000000 | ||
41 | #define SPEAR320_CAN1_SIZE 0x01000000 | ||
42 | |||
43 | #define SPEAR320_UART1_BASE 0xA3000000 | ||
44 | #define SPEAR320_UART2_BASE 0xA4000000 | ||
45 | #define SPEAR320_UART_SIZE 0x01000000 | ||
46 | |||
47 | #define SPEAR320_SSP0_BASE 0xA5000000 | ||
48 | #define SPEAR320_SSP0_SIZE 0x01000000 | ||
49 | |||
50 | #define SPEAR320_SSP1_BASE 0xA6000000 | ||
51 | #define SPEAR320_SSP1_SIZE 0x01000000 | ||
52 | |||
53 | #define SPEAR320_I2C_BASE 0xA7000000 | ||
54 | #define SPEAR320_I2C_SIZE 0x01000000 | ||
55 | |||
56 | #define SPEAR320_PWM_BASE 0xA8000000 | ||
57 | #define SPEAR320_PWM_SIZE 0x01000000 | ||
58 | |||
59 | #define SPEAR320_SMII0_BASE 0xAA000000 | ||
60 | #define SPEAR320_SMII0_SIZE 0x01000000 | ||
61 | |||
62 | #define SPEAR320_SMII1_BASE 0xAB000000 | ||
63 | #define SPEAR320_SMII1_SIZE 0x01000000 | ||
64 | |||
65 | #define SPEAR320_SOC_CONFIG_BASE 0xB4000000 | ||
66 | #define SPEAR320_SOC_CONFIG_SIZE 0x00000070 | ||
67 | /* Interrupt registers offsets and masks */ | ||
68 | #define INT_STS_MASK_REG 0x04 | ||
69 | #define INT_CLR_MASK_REG 0x04 | ||
70 | #define INT_ENB_MASK_REG 0x08 | ||
71 | #define GPIO_IRQ_MASK (1 << 0) | ||
72 | #define I2S_PLAY_IRQ_MASK (1 << 1) | ||
73 | #define I2S_REC_IRQ_MASK (1 << 2) | ||
74 | #define EMI_IRQ_MASK (1 << 7) | ||
75 | #define CLCD_IRQ_MASK (1 << 8) | ||
76 | #define SPP_IRQ_MASK (1 << 9) | ||
77 | #define SDIO_IRQ_MASK (1 << 10) | ||
78 | #define CAN_U_IRQ_MASK (1 << 11) | ||
79 | #define CAN_L_IRQ_MASK (1 << 12) | ||
80 | #define UART1_IRQ_MASK (1 << 13) | ||
81 | #define UART2_IRQ_MASK (1 << 14) | ||
82 | #define SSP1_IRQ_MASK (1 << 15) | ||
83 | #define SSP2_IRQ_MASK (1 << 16) | ||
84 | #define SMII0_IRQ_MASK (1 << 17) | ||
85 | #define MII1_SMII1_IRQ_MASK (1 << 18) | ||
86 | #define WAKEUP_SMII0_IRQ_MASK (1 << 19) | ||
87 | #define WAKEUP_MII1_SMII1_IRQ_MASK (1 << 20) | ||
88 | #define I2C1_IRQ_MASK (1 << 21) | ||
89 | |||
90 | #define SHIRQ_RAS1_MASK 0x000380 | ||
91 | #define SHIRQ_RAS3_MASK 0x000007 | ||
92 | #define SHIRQ_INTRCOMM_RAS_MASK 0x3FF800 | ||
93 | |||
94 | #endif /* __MACH_SPEAR320_H */ | ||
95 | |||
96 | #endif /* CONFIG_MACH_SPEAR320 */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/system.h b/arch/arm/mach-spear3xx/include/mach/system.h new file mode 100644 index 000000000000..92cee6335c90 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/system.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/system.h | ||
3 | * | ||
4 | * SPEAr3xx Machine family specific architecture functions | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_SYSTEM_H | ||
15 | #define __MACH_SYSTEM_H | ||
16 | |||
17 | #include <plat/system.h> | ||
18 | |||
19 | #endif /* __MACH_SYSTEM_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/timex.h b/arch/arm/mach-spear3xx/include/mach/timex.h new file mode 100644 index 000000000000..a38cc9de876f --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/timex.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/timex.h | ||
3 | * | ||
4 | * SPEAr3XX machine family specific timex definitions | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_TIMEX_H | ||
15 | #define __MACH_TIMEX_H | ||
16 | |||
17 | #include <plat/timex.h> | ||
18 | |||
19 | #endif /* __MACH_TIMEX_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/uncompress.h b/arch/arm/mach-spear3xx/include/mach/uncompress.h new file mode 100644 index 000000000000..53ba8bbc0dfa --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/uncompress.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/uncompress.h | ||
3 | * | ||
4 | * Serial port stubs for kernel decompress status messages | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_UNCOMPRESS_H | ||
15 | #define __MACH_UNCOMPRESS_H | ||
16 | |||
17 | #include <plat/uncompress.h> | ||
18 | |||
19 | #endif /* __MACH_UNCOMPRESS_H */ | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/vmalloc.h b/arch/arm/mach-spear3xx/include/mach/vmalloc.h new file mode 100644 index 000000000000..df977b3c9a63 --- /dev/null +++ b/arch/arm/mach-spear3xx/include/mach/vmalloc.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/include/mach/vmalloc.h | ||
3 | * | ||
4 | * Defining Vmalloc area for SPEAr3xx machine family | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __MACH_VMALLOC_H | ||
15 | #define __MACH_VMALLOC_H | ||
16 | |||
17 | #include <plat/vmalloc.h> | ||
18 | |||
19 | #endif /* __MACH_VMALLOC_H */ | ||
diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c new file mode 100644 index 000000000000..3560f8c1e723 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear300.c | |||
@@ -0,0 +1,468 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear300.c | ||
3 | * | ||
4 | * SPEAr300 machine source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/types.h> | ||
15 | #include <linux/amba/pl061.h> | ||
16 | #include <linux/ptrace.h> | ||
17 | #include <asm/irq.h> | ||
18 | #include <mach/generic.h> | ||
19 | #include <mach/spear.h> | ||
20 | #include <plat/shirq.h> | ||
21 | |||
22 | /* pad multiplexing support */ | ||
23 | /* muxing registers */ | ||
24 | #define PAD_MUX_CONFIG_REG 0x00 | ||
25 | #define MODE_CONFIG_REG 0x04 | ||
26 | |||
27 | /* modes */ | ||
28 | #define NAND_MODE (1 << 0) | ||
29 | #define NOR_MODE (1 << 1) | ||
30 | #define PHOTO_FRAME_MODE (1 << 2) | ||
31 | #define LEND_IP_PHONE_MODE (1 << 3) | ||
32 | #define HEND_IP_PHONE_MODE (1 << 4) | ||
33 | #define LEND_WIFI_PHONE_MODE (1 << 5) | ||
34 | #define HEND_WIFI_PHONE_MODE (1 << 6) | ||
35 | #define ATA_PABX_WI2S_MODE (1 << 7) | ||
36 | #define ATA_PABX_I2S_MODE (1 << 8) | ||
37 | #define CAML_LCDW_MODE (1 << 9) | ||
38 | #define CAMU_LCD_MODE (1 << 10) | ||
39 | #define CAMU_WLCD_MODE (1 << 11) | ||
40 | #define CAML_LCD_MODE (1 << 12) | ||
41 | #define ALL_MODES 0x1FFF | ||
42 | |||
43 | struct pmx_mode nand_mode = { | ||
44 | .id = NAND_MODE, | ||
45 | .name = "nand mode", | ||
46 | .mask = 0x00, | ||
47 | }; | ||
48 | |||
49 | struct pmx_mode nor_mode = { | ||
50 | .id = NOR_MODE, | ||
51 | .name = "nor mode", | ||
52 | .mask = 0x01, | ||
53 | }; | ||
54 | |||
55 | struct pmx_mode photo_frame_mode = { | ||
56 | .id = PHOTO_FRAME_MODE, | ||
57 | .name = "photo frame mode", | ||
58 | .mask = 0x02, | ||
59 | }; | ||
60 | |||
61 | struct pmx_mode lend_ip_phone_mode = { | ||
62 | .id = LEND_IP_PHONE_MODE, | ||
63 | .name = "lend ip phone mode", | ||
64 | .mask = 0x03, | ||
65 | }; | ||
66 | |||
67 | struct pmx_mode hend_ip_phone_mode = { | ||
68 | .id = HEND_IP_PHONE_MODE, | ||
69 | .name = "hend ip phone mode", | ||
70 | .mask = 0x04, | ||
71 | }; | ||
72 | |||
73 | struct pmx_mode lend_wifi_phone_mode = { | ||
74 | .id = LEND_WIFI_PHONE_MODE, | ||
75 | .name = "lend wifi phone mode", | ||
76 | .mask = 0x05, | ||
77 | }; | ||
78 | |||
79 | struct pmx_mode hend_wifi_phone_mode = { | ||
80 | .id = HEND_WIFI_PHONE_MODE, | ||
81 | .name = "hend wifi phone mode", | ||
82 | .mask = 0x06, | ||
83 | }; | ||
84 | |||
85 | struct pmx_mode ata_pabx_wi2s_mode = { | ||
86 | .id = ATA_PABX_WI2S_MODE, | ||
87 | .name = "ata pabx wi2s mode", | ||
88 | .mask = 0x07, | ||
89 | }; | ||
90 | |||
91 | struct pmx_mode ata_pabx_i2s_mode = { | ||
92 | .id = ATA_PABX_I2S_MODE, | ||
93 | .name = "ata pabx i2s mode", | ||
94 | .mask = 0x08, | ||
95 | }; | ||
96 | |||
97 | struct pmx_mode caml_lcdw_mode = { | ||
98 | .id = CAML_LCDW_MODE, | ||
99 | .name = "caml lcdw mode", | ||
100 | .mask = 0x0C, | ||
101 | }; | ||
102 | |||
103 | struct pmx_mode camu_lcd_mode = { | ||
104 | .id = CAMU_LCD_MODE, | ||
105 | .name = "camu lcd mode", | ||
106 | .mask = 0x0D, | ||
107 | }; | ||
108 | |||
109 | struct pmx_mode camu_wlcd_mode = { | ||
110 | .id = CAMU_WLCD_MODE, | ||
111 | .name = "camu wlcd mode", | ||
112 | .mask = 0x0E, | ||
113 | }; | ||
114 | |||
115 | struct pmx_mode caml_lcd_mode = { | ||
116 | .id = CAML_LCD_MODE, | ||
117 | .name = "caml lcd mode", | ||
118 | .mask = 0x0F, | ||
119 | }; | ||
120 | |||
121 | /* devices */ | ||
122 | struct pmx_dev_mode pmx_fsmc_2_chips_modes[] = { | ||
123 | { | ||
124 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
125 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
126 | .mask = PMX_FIRDA_MASK, | ||
127 | }, | ||
128 | }; | ||
129 | |||
130 | struct pmx_dev pmx_fsmc_2_chips = { | ||
131 | .name = "fsmc_2_chips", | ||
132 | .modes = pmx_fsmc_2_chips_modes, | ||
133 | .mode_count = ARRAY_SIZE(pmx_fsmc_2_chips_modes), | ||
134 | .enb_on_reset = 1, | ||
135 | }; | ||
136 | |||
137 | struct pmx_dev_mode pmx_fsmc_4_chips_modes[] = { | ||
138 | { | ||
139 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
140 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
141 | .mask = PMX_FIRDA_MASK | PMX_UART0_MASK, | ||
142 | }, | ||
143 | }; | ||
144 | |||
145 | struct pmx_dev pmx_fsmc_4_chips = { | ||
146 | .name = "fsmc_4_chips", | ||
147 | .modes = pmx_fsmc_4_chips_modes, | ||
148 | .mode_count = ARRAY_SIZE(pmx_fsmc_4_chips_modes), | ||
149 | .enb_on_reset = 1, | ||
150 | }; | ||
151 | |||
152 | struct pmx_dev_mode pmx_keyboard_modes[] = { | ||
153 | { | ||
154 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
155 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
156 | CAML_LCDW_MODE | CAMU_LCD_MODE | CAMU_WLCD_MODE | | ||
157 | CAML_LCD_MODE, | ||
158 | .mask = 0x0, | ||
159 | }, | ||
160 | }; | ||
161 | |||
162 | struct pmx_dev pmx_keyboard = { | ||
163 | .name = "keyboard", | ||
164 | .modes = pmx_keyboard_modes, | ||
165 | .mode_count = ARRAY_SIZE(pmx_keyboard_modes), | ||
166 | .enb_on_reset = 1, | ||
167 | }; | ||
168 | |||
169 | struct pmx_dev_mode pmx_clcd_modes[] = { | ||
170 | { | ||
171 | .ids = PHOTO_FRAME_MODE, | ||
172 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK , | ||
173 | }, { | ||
174 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
175 | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
176 | .mask = PMX_TIMER_3_4_MASK, | ||
177 | }, | ||
178 | }; | ||
179 | |||
180 | struct pmx_dev pmx_clcd = { | ||
181 | .name = "clcd", | ||
182 | .modes = pmx_clcd_modes, | ||
183 | .mode_count = ARRAY_SIZE(pmx_clcd_modes), | ||
184 | .enb_on_reset = 1, | ||
185 | }; | ||
186 | |||
187 | struct pmx_dev_mode pmx_telecom_gpio_modes[] = { | ||
188 | { | ||
189 | .ids = PHOTO_FRAME_MODE | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
190 | .mask = PMX_MII_MASK, | ||
191 | }, { | ||
192 | .ids = LEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE, | ||
193 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
194 | }, { | ||
195 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_WLCD_MODE, | ||
196 | .mask = PMX_MII_MASK | PMX_TIMER_3_4_MASK, | ||
197 | }, { | ||
198 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE, | ||
199 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK, | ||
200 | }, { | ||
201 | .ids = ATA_PABX_WI2S_MODE, | ||
202 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | ||
203 | | PMX_UART0_MODEM_MASK, | ||
204 | }, | ||
205 | }; | ||
206 | |||
207 | struct pmx_dev pmx_telecom_gpio = { | ||
208 | .name = "telecom_gpio", | ||
209 | .modes = pmx_telecom_gpio_modes, | ||
210 | .mode_count = ARRAY_SIZE(pmx_telecom_gpio_modes), | ||
211 | .enb_on_reset = 1, | ||
212 | }; | ||
213 | |||
214 | struct pmx_dev_mode pmx_telecom_tdm_modes[] = { | ||
215 | { | ||
216 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
217 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | ||
218 | | HEND_WIFI_PHONE_MODE | ATA_PABX_WI2S_MODE | ||
219 | | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
220 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
221 | .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK, | ||
222 | }, | ||
223 | }; | ||
224 | |||
225 | struct pmx_dev pmx_telecom_tdm = { | ||
226 | .name = "telecom_tdm", | ||
227 | .modes = pmx_telecom_tdm_modes, | ||
228 | .mode_count = ARRAY_SIZE(pmx_telecom_tdm_modes), | ||
229 | .enb_on_reset = 1, | ||
230 | }; | ||
231 | |||
232 | struct pmx_dev_mode pmx_telecom_spi_cs_i2c_clk_modes[] = { | ||
233 | { | ||
234 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
235 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | ||
236 | | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE | | ||
237 | CAML_LCDW_MODE | CAML_LCD_MODE, | ||
238 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
239 | }, | ||
240 | }; | ||
241 | |||
242 | struct pmx_dev pmx_telecom_spi_cs_i2c_clk = { | ||
243 | .name = "telecom_spi_cs_i2c_clk", | ||
244 | .modes = pmx_telecom_spi_cs_i2c_clk_modes, | ||
245 | .mode_count = ARRAY_SIZE(pmx_telecom_spi_cs_i2c_clk_modes), | ||
246 | .enb_on_reset = 1, | ||
247 | }; | ||
248 | |||
249 | struct pmx_dev_mode pmx_telecom_camera_modes[] = { | ||
250 | { | ||
251 | .ids = CAML_LCDW_MODE | CAML_LCD_MODE, | ||
252 | .mask = PMX_MII_MASK, | ||
253 | }, { | ||
254 | .ids = CAMU_LCD_MODE | CAMU_WLCD_MODE, | ||
255 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | PMX_MII_MASK, | ||
256 | }, | ||
257 | }; | ||
258 | |||
259 | struct pmx_dev pmx_telecom_camera = { | ||
260 | .name = "telecom_camera", | ||
261 | .modes = pmx_telecom_camera_modes, | ||
262 | .mode_count = ARRAY_SIZE(pmx_telecom_camera_modes), | ||
263 | .enb_on_reset = 1, | ||
264 | }; | ||
265 | |||
266 | struct pmx_dev_mode pmx_telecom_dac_modes[] = { | ||
267 | { | ||
268 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
269 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
270 | .mask = PMX_TIMER_1_2_MASK, | ||
271 | }, | ||
272 | }; | ||
273 | |||
274 | struct pmx_dev pmx_telecom_dac = { | ||
275 | .name = "telecom_dac", | ||
276 | .modes = pmx_telecom_dac_modes, | ||
277 | .mode_count = ARRAY_SIZE(pmx_telecom_dac_modes), | ||
278 | .enb_on_reset = 1, | ||
279 | }; | ||
280 | |||
281 | struct pmx_dev_mode pmx_telecom_i2s_modes[] = { | ||
282 | { | ||
283 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | ||
284 | | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
285 | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
286 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
287 | .mask = PMX_UART0_MODEM_MASK, | ||
288 | }, | ||
289 | }; | ||
290 | |||
291 | struct pmx_dev pmx_telecom_i2s = { | ||
292 | .name = "telecom_i2s", | ||
293 | .modes = pmx_telecom_i2s_modes, | ||
294 | .mode_count = ARRAY_SIZE(pmx_telecom_i2s_modes), | ||
295 | .enb_on_reset = 1, | ||
296 | }; | ||
297 | |||
298 | struct pmx_dev_mode pmx_telecom_boot_pins_modes[] = { | ||
299 | { | ||
300 | .ids = NAND_MODE | NOR_MODE, | ||
301 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
302 | PMX_TIMER_3_4_MASK, | ||
303 | }, | ||
304 | }; | ||
305 | |||
306 | struct pmx_dev pmx_telecom_boot_pins = { | ||
307 | .name = "telecom_boot_pins", | ||
308 | .modes = pmx_telecom_boot_pins_modes, | ||
309 | .mode_count = ARRAY_SIZE(pmx_telecom_boot_pins_modes), | ||
310 | .enb_on_reset = 1, | ||
311 | }; | ||
312 | |||
313 | struct pmx_dev_mode pmx_telecom_sdio_4bit_modes[] = { | ||
314 | { | ||
315 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
316 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
317 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
318 | CAMU_WLCD_MODE | CAML_LCD_MODE | ATA_PABX_WI2S_MODE | | ||
319 | ATA_PABX_I2S_MODE, | ||
320 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
321 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
322 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, | ||
323 | }, | ||
324 | }; | ||
325 | |||
326 | struct pmx_dev pmx_telecom_sdio_4bit = { | ||
327 | .name = "telecom_sdio_4bit", | ||
328 | .modes = pmx_telecom_sdio_4bit_modes, | ||
329 | .mode_count = ARRAY_SIZE(pmx_telecom_sdio_4bit_modes), | ||
330 | .enb_on_reset = 1, | ||
331 | }; | ||
332 | |||
333 | struct pmx_dev_mode pmx_telecom_sdio_8bit_modes[] = { | ||
334 | { | ||
335 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
336 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
337 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
338 | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
339 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
340 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
341 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK | PMX_MII_MASK, | ||
342 | }, | ||
343 | }; | ||
344 | |||
345 | struct pmx_dev pmx_telecom_sdio_8bit = { | ||
346 | .name = "telecom_sdio_8bit", | ||
347 | .modes = pmx_telecom_sdio_8bit_modes, | ||
348 | .mode_count = ARRAY_SIZE(pmx_telecom_sdio_8bit_modes), | ||
349 | .enb_on_reset = 1, | ||
350 | }; | ||
351 | |||
352 | struct pmx_dev_mode pmx_gpio1_modes[] = { | ||
353 | { | ||
354 | .ids = PHOTO_FRAME_MODE, | ||
355 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
356 | PMX_TIMER_3_4_MASK, | ||
357 | }, | ||
358 | }; | ||
359 | |||
360 | struct pmx_dev pmx_gpio1 = { | ||
361 | .name = "arm gpio1", | ||
362 | .modes = pmx_gpio1_modes, | ||
363 | .mode_count = ARRAY_SIZE(pmx_gpio1_modes), | ||
364 | .enb_on_reset = 1, | ||
365 | }; | ||
366 | |||
367 | /* pmx driver structure */ | ||
368 | struct pmx_driver pmx_driver = { | ||
369 | .mode_reg = {.offset = MODE_CONFIG_REG, .mask = 0x0000000f}, | ||
370 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
371 | }; | ||
372 | |||
373 | /* Add spear300 specific devices here */ | ||
374 | /* arm gpio1 device registeration */ | ||
375 | static struct pl061_platform_data gpio1_plat_data = { | ||
376 | .gpio_base = 8, | ||
377 | .irq_base = SPEAR_GPIO1_INT_BASE, | ||
378 | }; | ||
379 | |||
380 | struct amba_device gpio1_device = { | ||
381 | .dev = { | ||
382 | .init_name = "gpio1", | ||
383 | .platform_data = &gpio1_plat_data, | ||
384 | }, | ||
385 | .res = { | ||
386 | .start = SPEAR300_GPIO_BASE, | ||
387 | .end = SPEAR300_GPIO_BASE + SPEAR300_GPIO_SIZE - 1, | ||
388 | .flags = IORESOURCE_MEM, | ||
389 | }, | ||
390 | .irq = {VIRQ_GPIO1, NO_IRQ}, | ||
391 | }; | ||
392 | |||
393 | /* spear3xx shared irq */ | ||
394 | struct shirq_dev_config shirq_ras1_config[] = { | ||
395 | { | ||
396 | .virq = VIRQ_IT_PERS_S, | ||
397 | .enb_mask = IT_PERS_S_IRQ_MASK, | ||
398 | .status_mask = IT_PERS_S_IRQ_MASK, | ||
399 | }, { | ||
400 | .virq = VIRQ_IT_CHANGE_S, | ||
401 | .enb_mask = IT_CHANGE_S_IRQ_MASK, | ||
402 | .status_mask = IT_CHANGE_S_IRQ_MASK, | ||
403 | }, { | ||
404 | .virq = VIRQ_I2S, | ||
405 | .enb_mask = I2S_IRQ_MASK, | ||
406 | .status_mask = I2S_IRQ_MASK, | ||
407 | }, { | ||
408 | .virq = VIRQ_TDM, | ||
409 | .enb_mask = TDM_IRQ_MASK, | ||
410 | .status_mask = TDM_IRQ_MASK, | ||
411 | }, { | ||
412 | .virq = VIRQ_CAMERA_L, | ||
413 | .enb_mask = CAMERA_L_IRQ_MASK, | ||
414 | .status_mask = CAMERA_L_IRQ_MASK, | ||
415 | }, { | ||
416 | .virq = VIRQ_CAMERA_F, | ||
417 | .enb_mask = CAMERA_F_IRQ_MASK, | ||
418 | .status_mask = CAMERA_F_IRQ_MASK, | ||
419 | }, { | ||
420 | .virq = VIRQ_CAMERA_V, | ||
421 | .enb_mask = CAMERA_V_IRQ_MASK, | ||
422 | .status_mask = CAMERA_V_IRQ_MASK, | ||
423 | }, { | ||
424 | .virq = VIRQ_KEYBOARD, | ||
425 | .enb_mask = KEYBOARD_IRQ_MASK, | ||
426 | .status_mask = KEYBOARD_IRQ_MASK, | ||
427 | }, { | ||
428 | .virq = VIRQ_GPIO1, | ||
429 | .enb_mask = GPIO1_IRQ_MASK, | ||
430 | .status_mask = GPIO1_IRQ_MASK, | ||
431 | }, | ||
432 | }; | ||
433 | |||
434 | struct spear_shirq shirq_ras1 = { | ||
435 | .irq = IRQ_GEN_RAS_1, | ||
436 | .dev_config = shirq_ras1_config, | ||
437 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
438 | .regs = { | ||
439 | .enb_reg = INT_ENB_MASK_REG, | ||
440 | .status_reg = INT_STS_MASK_REG, | ||
441 | .status_reg_mask = SHIRQ_RAS1_MASK, | ||
442 | .clear_reg = -1, | ||
443 | }, | ||
444 | }; | ||
445 | |||
446 | /* spear300 routines */ | ||
447 | void __init spear300_init(void) | ||
448 | { | ||
449 | int ret = 0; | ||
450 | |||
451 | /* call spear3xx family common init function */ | ||
452 | spear3xx_init(); | ||
453 | |||
454 | /* shared irq registeration */ | ||
455 | shirq_ras1.regs.base = | ||
456 | ioremap(SPEAR300_TELECOM_BASE, SPEAR300_TELECOM_REG_SIZE); | ||
457 | if (shirq_ras1.regs.base) { | ||
458 | ret = spear_shirq_register(&shirq_ras1); | ||
459 | if (ret) | ||
460 | printk(KERN_ERR "Error registering Shared IRQ\n"); | ||
461 | } | ||
462 | } | ||
463 | |||
464 | void spear300_pmx_init(void) | ||
465 | { | ||
466 | spear_pmx_init(&pmx_driver, SPEAR300_SOC_CONFIG_BASE, | ||
467 | SPEAR300_SOC_CONFIG_SIZE); | ||
468 | } | ||
diff --git a/arch/arm/mach-spear3xx/spear300_evb.c b/arch/arm/mach-spear3xx/spear300_evb.c new file mode 100644 index 000000000000..bb21db152a23 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear300_evb.c | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear300_evb.c | ||
3 | * | ||
4 | * SPEAr300 evaluation board source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <asm/mach/arch.h> | ||
15 | #include <asm/mach-types.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/spear.h> | ||
18 | |||
19 | /* padmux devices to enable */ | ||
20 | static struct pmx_dev *pmx_devs[] = { | ||
21 | /* spear3xx specific devices */ | ||
22 | &pmx_i2c, | ||
23 | &pmx_ssp_cs, | ||
24 | &pmx_ssp, | ||
25 | &pmx_mii, | ||
26 | &pmx_uart0, | ||
27 | |||
28 | /* spear300 specific devices */ | ||
29 | &pmx_fsmc_2_chips, | ||
30 | &pmx_clcd, | ||
31 | &pmx_telecom_sdio_4bit, | ||
32 | &pmx_gpio1, | ||
33 | }; | ||
34 | |||
35 | static struct amba_device *amba_devs[] __initdata = { | ||
36 | /* spear3xx specific devices */ | ||
37 | &gpio_device, | ||
38 | &uart_device, | ||
39 | |||
40 | /* spear300 specific devices */ | ||
41 | &gpio1_device, | ||
42 | }; | ||
43 | |||
44 | static struct platform_device *plat_devs[] __initdata = { | ||
45 | /* spear3xx specific devices */ | ||
46 | |||
47 | /* spear300 specific devices */ | ||
48 | }; | ||
49 | |||
50 | static void __init spear300_evb_init(void) | ||
51 | { | ||
52 | unsigned int i; | ||
53 | |||
54 | /* call spear300 machine init function */ | ||
55 | spear300_init(); | ||
56 | |||
57 | /* padmux initialization */ | ||
58 | pmx_driver.mode = &photo_frame_mode; | ||
59 | pmx_driver.devs = pmx_devs; | ||
60 | pmx_driver.devs_count = ARRAY_SIZE(pmx_devs); | ||
61 | spear300_pmx_init(); | ||
62 | |||
63 | /* Add Platform Devices */ | ||
64 | platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs)); | ||
65 | |||
66 | /* Add Amba Devices */ | ||
67 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
68 | amba_device_register(amba_devs[i], &iomem_resource); | ||
69 | } | ||
70 | |||
71 | MACHINE_START(SPEAR300, "ST-SPEAR300-EVB") | ||
72 | .boot_params = 0x00000100, | ||
73 | .map_io = spear3xx_map_io, | ||
74 | .init_irq = spear3xx_init_irq, | ||
75 | .timer = &spear_sys_timer, | ||
76 | .init_machine = spear300_evb_init, | ||
77 | MACHINE_END | ||
diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear3xx/spear310.c new file mode 100644 index 000000000000..96a1ab824bac --- /dev/null +++ b/arch/arm/mach-spear3xx/spear310.c | |||
@@ -0,0 +1,302 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear310.c | ||
3 | * | ||
4 | * SPEAr310 machine source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/ptrace.h> | ||
15 | #include <asm/irq.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/spear.h> | ||
18 | #include <plat/shirq.h> | ||
19 | |||
20 | /* pad multiplexing support */ | ||
21 | /* muxing registers */ | ||
22 | #define PAD_MUX_CONFIG_REG 0x08 | ||
23 | |||
24 | /* devices */ | ||
25 | struct pmx_dev_mode pmx_emi_cs_0_1_4_5_modes[] = { | ||
26 | { | ||
27 | .ids = 0x00, | ||
28 | .mask = PMX_TIMER_3_4_MASK, | ||
29 | }, | ||
30 | }; | ||
31 | |||
32 | struct pmx_dev pmx_emi_cs_0_1_4_5 = { | ||
33 | .name = "emi_cs_0_1_4_5", | ||
34 | .modes = pmx_emi_cs_0_1_4_5_modes, | ||
35 | .mode_count = ARRAY_SIZE(pmx_emi_cs_0_1_4_5_modes), | ||
36 | .enb_on_reset = 1, | ||
37 | }; | ||
38 | |||
39 | struct pmx_dev_mode pmx_emi_cs_2_3_modes[] = { | ||
40 | { | ||
41 | .ids = 0x00, | ||
42 | .mask = PMX_TIMER_1_2_MASK, | ||
43 | }, | ||
44 | }; | ||
45 | |||
46 | struct pmx_dev pmx_emi_cs_2_3 = { | ||
47 | .name = "emi_cs_2_3", | ||
48 | .modes = pmx_emi_cs_2_3_modes, | ||
49 | .mode_count = ARRAY_SIZE(pmx_emi_cs_2_3_modes), | ||
50 | .enb_on_reset = 1, | ||
51 | }; | ||
52 | |||
53 | struct pmx_dev_mode pmx_uart1_modes[] = { | ||
54 | { | ||
55 | .ids = 0x00, | ||
56 | .mask = PMX_FIRDA_MASK, | ||
57 | }, | ||
58 | }; | ||
59 | |||
60 | struct pmx_dev pmx_uart1 = { | ||
61 | .name = "uart1", | ||
62 | .modes = pmx_uart1_modes, | ||
63 | .mode_count = ARRAY_SIZE(pmx_uart1_modes), | ||
64 | .enb_on_reset = 1, | ||
65 | }; | ||
66 | |||
67 | struct pmx_dev_mode pmx_uart2_modes[] = { | ||
68 | { | ||
69 | .ids = 0x00, | ||
70 | .mask = PMX_TIMER_1_2_MASK, | ||
71 | }, | ||
72 | }; | ||
73 | |||
74 | struct pmx_dev pmx_uart2 = { | ||
75 | .name = "uart2", | ||
76 | .modes = pmx_uart2_modes, | ||
77 | .mode_count = ARRAY_SIZE(pmx_uart2_modes), | ||
78 | .enb_on_reset = 1, | ||
79 | }; | ||
80 | |||
81 | struct pmx_dev_mode pmx_uart3_4_5_modes[] = { | ||
82 | { | ||
83 | .ids = 0x00, | ||
84 | .mask = PMX_UART0_MODEM_MASK, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | struct pmx_dev pmx_uart3_4_5 = { | ||
89 | .name = "uart3_4_5", | ||
90 | .modes = pmx_uart3_4_5_modes, | ||
91 | .mode_count = ARRAY_SIZE(pmx_uart3_4_5_modes), | ||
92 | .enb_on_reset = 1, | ||
93 | }; | ||
94 | |||
95 | struct pmx_dev_mode pmx_fsmc_modes[] = { | ||
96 | { | ||
97 | .ids = 0x00, | ||
98 | .mask = PMX_SSP_CS_MASK, | ||
99 | }, | ||
100 | }; | ||
101 | |||
102 | struct pmx_dev pmx_fsmc = { | ||
103 | .name = "fsmc", | ||
104 | .modes = pmx_fsmc_modes, | ||
105 | .mode_count = ARRAY_SIZE(pmx_fsmc_modes), | ||
106 | .enb_on_reset = 1, | ||
107 | }; | ||
108 | |||
109 | struct pmx_dev_mode pmx_rs485_0_1_modes[] = { | ||
110 | { | ||
111 | .ids = 0x00, | ||
112 | .mask = PMX_MII_MASK, | ||
113 | }, | ||
114 | }; | ||
115 | |||
116 | struct pmx_dev pmx_rs485_0_1 = { | ||
117 | .name = "rs485_0_1", | ||
118 | .modes = pmx_rs485_0_1_modes, | ||
119 | .mode_count = ARRAY_SIZE(pmx_rs485_0_1_modes), | ||
120 | .enb_on_reset = 1, | ||
121 | }; | ||
122 | |||
123 | struct pmx_dev_mode pmx_tdm0_modes[] = { | ||
124 | { | ||
125 | .ids = 0x00, | ||
126 | .mask = PMX_MII_MASK, | ||
127 | }, | ||
128 | }; | ||
129 | |||
130 | struct pmx_dev pmx_tdm0 = { | ||
131 | .name = "tdm0", | ||
132 | .modes = pmx_tdm0_modes, | ||
133 | .mode_count = ARRAY_SIZE(pmx_tdm0_modes), | ||
134 | .enb_on_reset = 1, | ||
135 | }; | ||
136 | |||
137 | /* pmx driver structure */ | ||
138 | struct pmx_driver pmx_driver = { | ||
139 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
140 | }; | ||
141 | |||
142 | /* Add spear310 specific devices here */ | ||
143 | |||
144 | /* spear3xx shared irq */ | ||
145 | struct shirq_dev_config shirq_ras1_config[] = { | ||
146 | { | ||
147 | .virq = VIRQ_SMII0, | ||
148 | .status_mask = SMII0_IRQ_MASK, | ||
149 | }, { | ||
150 | .virq = VIRQ_SMII1, | ||
151 | .status_mask = SMII1_IRQ_MASK, | ||
152 | }, { | ||
153 | .virq = VIRQ_SMII2, | ||
154 | .status_mask = SMII2_IRQ_MASK, | ||
155 | }, { | ||
156 | .virq = VIRQ_SMII3, | ||
157 | .status_mask = SMII3_IRQ_MASK, | ||
158 | }, { | ||
159 | .virq = VIRQ_WAKEUP_SMII0, | ||
160 | .status_mask = WAKEUP_SMII0_IRQ_MASK, | ||
161 | }, { | ||
162 | .virq = VIRQ_WAKEUP_SMII1, | ||
163 | .status_mask = WAKEUP_SMII1_IRQ_MASK, | ||
164 | }, { | ||
165 | .virq = VIRQ_WAKEUP_SMII2, | ||
166 | .status_mask = WAKEUP_SMII2_IRQ_MASK, | ||
167 | }, { | ||
168 | .virq = VIRQ_WAKEUP_SMII3, | ||
169 | .status_mask = WAKEUP_SMII3_IRQ_MASK, | ||
170 | }, | ||
171 | }; | ||
172 | |||
173 | struct spear_shirq shirq_ras1 = { | ||
174 | .irq = IRQ_GEN_RAS_1, | ||
175 | .dev_config = shirq_ras1_config, | ||
176 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
177 | .regs = { | ||
178 | .enb_reg = -1, | ||
179 | .status_reg = INT_STS_MASK_REG, | ||
180 | .status_reg_mask = SHIRQ_RAS1_MASK, | ||
181 | .clear_reg = -1, | ||
182 | }, | ||
183 | }; | ||
184 | |||
185 | struct shirq_dev_config shirq_ras2_config[] = { | ||
186 | { | ||
187 | .virq = VIRQ_UART1, | ||
188 | .status_mask = UART1_IRQ_MASK, | ||
189 | }, { | ||
190 | .virq = VIRQ_UART2, | ||
191 | .status_mask = UART2_IRQ_MASK, | ||
192 | }, { | ||
193 | .virq = VIRQ_UART3, | ||
194 | .status_mask = UART3_IRQ_MASK, | ||
195 | }, { | ||
196 | .virq = VIRQ_UART4, | ||
197 | .status_mask = UART4_IRQ_MASK, | ||
198 | }, { | ||
199 | .virq = VIRQ_UART5, | ||
200 | .status_mask = UART5_IRQ_MASK, | ||
201 | }, | ||
202 | }; | ||
203 | |||
204 | struct spear_shirq shirq_ras2 = { | ||
205 | .irq = IRQ_GEN_RAS_2, | ||
206 | .dev_config = shirq_ras2_config, | ||
207 | .dev_count = ARRAY_SIZE(shirq_ras2_config), | ||
208 | .regs = { | ||
209 | .enb_reg = -1, | ||
210 | .status_reg = INT_STS_MASK_REG, | ||
211 | .status_reg_mask = SHIRQ_RAS2_MASK, | ||
212 | .clear_reg = -1, | ||
213 | }, | ||
214 | }; | ||
215 | |||
216 | struct shirq_dev_config shirq_ras3_config[] = { | ||
217 | { | ||
218 | .virq = VIRQ_EMI, | ||
219 | .status_mask = EMI_IRQ_MASK, | ||
220 | }, | ||
221 | }; | ||
222 | |||
223 | struct spear_shirq shirq_ras3 = { | ||
224 | .irq = IRQ_GEN_RAS_3, | ||
225 | .dev_config = shirq_ras3_config, | ||
226 | .dev_count = ARRAY_SIZE(shirq_ras3_config), | ||
227 | .regs = { | ||
228 | .enb_reg = -1, | ||
229 | .status_reg = INT_STS_MASK_REG, | ||
230 | .status_reg_mask = SHIRQ_RAS3_MASK, | ||
231 | .clear_reg = -1, | ||
232 | }, | ||
233 | }; | ||
234 | |||
235 | struct shirq_dev_config shirq_intrcomm_ras_config[] = { | ||
236 | { | ||
237 | .virq = VIRQ_TDM_HDLC, | ||
238 | .status_mask = TDM_HDLC_IRQ_MASK, | ||
239 | }, { | ||
240 | .virq = VIRQ_RS485_0, | ||
241 | .status_mask = RS485_0_IRQ_MASK, | ||
242 | }, { | ||
243 | .virq = VIRQ_RS485_1, | ||
244 | .status_mask = RS485_1_IRQ_MASK, | ||
245 | }, | ||
246 | }; | ||
247 | |||
248 | struct spear_shirq shirq_intrcomm_ras = { | ||
249 | .irq = IRQ_INTRCOMM_RAS_ARM, | ||
250 | .dev_config = shirq_intrcomm_ras_config, | ||
251 | .dev_count = ARRAY_SIZE(shirq_intrcomm_ras_config), | ||
252 | .regs = { | ||
253 | .enb_reg = -1, | ||
254 | .status_reg = INT_STS_MASK_REG, | ||
255 | .status_reg_mask = SHIRQ_INTRCOMM_RAS_MASK, | ||
256 | .clear_reg = -1, | ||
257 | }, | ||
258 | }; | ||
259 | |||
260 | /* spear310 routines */ | ||
261 | void __init spear310_init(void) | ||
262 | { | ||
263 | void __iomem *base; | ||
264 | int ret = 0; | ||
265 | |||
266 | /* call spear3xx family common init function */ | ||
267 | spear3xx_init(); | ||
268 | |||
269 | /* shared irq registeration */ | ||
270 | base = ioremap(SPEAR310_SOC_CONFIG_BASE, SPEAR310_SOC_CONFIG_SIZE); | ||
271 | if (base) { | ||
272 | /* shirq 1 */ | ||
273 | shirq_ras1.regs.base = base; | ||
274 | ret = spear_shirq_register(&shirq_ras1); | ||
275 | if (ret) | ||
276 | printk(KERN_ERR "Error registering Shared IRQ 1\n"); | ||
277 | |||
278 | /* shirq 2 */ | ||
279 | shirq_ras2.regs.base = base; | ||
280 | ret = spear_shirq_register(&shirq_ras2); | ||
281 | if (ret) | ||
282 | printk(KERN_ERR "Error registering Shared IRQ 2\n"); | ||
283 | |||
284 | /* shirq 3 */ | ||
285 | shirq_ras3.regs.base = base; | ||
286 | ret = spear_shirq_register(&shirq_ras3); | ||
287 | if (ret) | ||
288 | printk(KERN_ERR "Error registering Shared IRQ 3\n"); | ||
289 | |||
290 | /* shirq 4 */ | ||
291 | shirq_intrcomm_ras.regs.base = base; | ||
292 | ret = spear_shirq_register(&shirq_intrcomm_ras); | ||
293 | if (ret) | ||
294 | printk(KERN_ERR "Error registering Shared IRQ 4\n"); | ||
295 | } | ||
296 | } | ||
297 | |||
298 | void spear310_pmx_init(void) | ||
299 | { | ||
300 | spear_pmx_init(&pmx_driver, SPEAR310_SOC_CONFIG_BASE, | ||
301 | SPEAR310_SOC_CONFIG_SIZE); | ||
302 | } | ||
diff --git a/arch/arm/mach-spear3xx/spear310_evb.c b/arch/arm/mach-spear3xx/spear310_evb.c new file mode 100644 index 000000000000..7facf6643199 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear310_evb.c | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear310_evb.c | ||
3 | * | ||
4 | * SPEAr310 evaluation board source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <asm/mach/arch.h> | ||
15 | #include <asm/mach-types.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/spear.h> | ||
18 | |||
19 | /* padmux devices to enable */ | ||
20 | static struct pmx_dev *pmx_devs[] = { | ||
21 | /* spear3xx specific devices */ | ||
22 | &pmx_i2c, | ||
23 | &pmx_ssp, | ||
24 | &pmx_gpio_pin0, | ||
25 | &pmx_gpio_pin1, | ||
26 | &pmx_gpio_pin2, | ||
27 | &pmx_gpio_pin3, | ||
28 | &pmx_gpio_pin4, | ||
29 | &pmx_gpio_pin5, | ||
30 | &pmx_uart0, | ||
31 | |||
32 | /* spear310 specific devices */ | ||
33 | &pmx_emi_cs_0_1_4_5, | ||
34 | &pmx_emi_cs_2_3, | ||
35 | &pmx_uart1, | ||
36 | &pmx_uart2, | ||
37 | &pmx_uart3_4_5, | ||
38 | &pmx_fsmc, | ||
39 | &pmx_rs485_0_1, | ||
40 | &pmx_tdm0, | ||
41 | }; | ||
42 | |||
43 | static struct amba_device *amba_devs[] __initdata = { | ||
44 | /* spear3xx specific devices */ | ||
45 | &gpio_device, | ||
46 | &uart_device, | ||
47 | |||
48 | /* spear310 specific devices */ | ||
49 | }; | ||
50 | |||
51 | static struct platform_device *plat_devs[] __initdata = { | ||
52 | /* spear3xx specific devices */ | ||
53 | |||
54 | /* spear310 specific devices */ | ||
55 | }; | ||
56 | |||
57 | static void __init spear310_evb_init(void) | ||
58 | { | ||
59 | unsigned int i; | ||
60 | |||
61 | /* call spear310 machine init function */ | ||
62 | spear310_init(); | ||
63 | |||
64 | /* padmux initialization */ | ||
65 | pmx_driver.mode = NULL; | ||
66 | pmx_driver.devs = pmx_devs; | ||
67 | pmx_driver.devs_count = ARRAY_SIZE(pmx_devs); | ||
68 | spear310_pmx_init(); | ||
69 | |||
70 | /* Add Platform Devices */ | ||
71 | platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs)); | ||
72 | |||
73 | /* Add Amba Devices */ | ||
74 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
75 | amba_device_register(amba_devs[i], &iomem_resource); | ||
76 | } | ||
77 | |||
78 | MACHINE_START(SPEAR310, "ST-SPEAR310-EVB") | ||
79 | .boot_params = 0x00000100, | ||
80 | .map_io = spear3xx_map_io, | ||
81 | .init_irq = spear3xx_init_irq, | ||
82 | .timer = &spear_sys_timer, | ||
83 | .init_machine = spear310_evb_init, | ||
84 | MACHINE_END | ||
diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c new file mode 100644 index 000000000000..6a1219549369 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear320.c | |||
@@ -0,0 +1,549 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear320.c | ||
3 | * | ||
4 | * SPEAr320 machine source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/ptrace.h> | ||
15 | #include <asm/irq.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/spear.h> | ||
18 | #include <plat/shirq.h> | ||
19 | |||
20 | /* pad multiplexing support */ | ||
21 | /* muxing registers */ | ||
22 | #define PAD_MUX_CONFIG_REG 0x0C | ||
23 | #define MODE_CONFIG_REG 0x10 | ||
24 | |||
25 | /* modes */ | ||
26 | #define AUTO_NET_SMII_MODE (1 << 0) | ||
27 | #define AUTO_NET_MII_MODE (1 << 1) | ||
28 | #define AUTO_EXP_MODE (1 << 2) | ||
29 | #define SMALL_PRINTERS_MODE (1 << 3) | ||
30 | #define ALL_MODES 0xF | ||
31 | |||
32 | struct pmx_mode auto_net_smii_mode = { | ||
33 | .id = AUTO_NET_SMII_MODE, | ||
34 | .name = "Automation Networking SMII Mode", | ||
35 | .mask = 0x00, | ||
36 | }; | ||
37 | |||
38 | struct pmx_mode auto_net_mii_mode = { | ||
39 | .id = AUTO_NET_MII_MODE, | ||
40 | .name = "Automation Networking MII Mode", | ||
41 | .mask = 0x01, | ||
42 | }; | ||
43 | |||
44 | struct pmx_mode auto_exp_mode = { | ||
45 | .id = AUTO_EXP_MODE, | ||
46 | .name = "Automation Expanded Mode", | ||
47 | .mask = 0x02, | ||
48 | }; | ||
49 | |||
50 | struct pmx_mode small_printers_mode = { | ||
51 | .id = SMALL_PRINTERS_MODE, | ||
52 | .name = "Small Printers Mode", | ||
53 | .mask = 0x03, | ||
54 | }; | ||
55 | |||
56 | /* devices */ | ||
57 | struct pmx_dev_mode pmx_clcd_modes[] = { | ||
58 | { | ||
59 | .ids = AUTO_NET_SMII_MODE, | ||
60 | .mask = 0x0, | ||
61 | }, | ||
62 | }; | ||
63 | |||
64 | struct pmx_dev pmx_clcd = { | ||
65 | .name = "clcd", | ||
66 | .modes = pmx_clcd_modes, | ||
67 | .mode_count = ARRAY_SIZE(pmx_clcd_modes), | ||
68 | .enb_on_reset = 1, | ||
69 | }; | ||
70 | |||
71 | struct pmx_dev_mode pmx_emi_modes[] = { | ||
72 | { | ||
73 | .ids = AUTO_EXP_MODE, | ||
74 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
75 | }, | ||
76 | }; | ||
77 | |||
78 | struct pmx_dev pmx_emi = { | ||
79 | .name = "emi", | ||
80 | .modes = pmx_emi_modes, | ||
81 | .mode_count = ARRAY_SIZE(pmx_emi_modes), | ||
82 | .enb_on_reset = 1, | ||
83 | }; | ||
84 | |||
85 | struct pmx_dev_mode pmx_fsmc_modes[] = { | ||
86 | { | ||
87 | .ids = ALL_MODES, | ||
88 | .mask = 0x0, | ||
89 | }, | ||
90 | }; | ||
91 | |||
92 | struct pmx_dev pmx_fsmc = { | ||
93 | .name = "fsmc", | ||
94 | .modes = pmx_fsmc_modes, | ||
95 | .mode_count = ARRAY_SIZE(pmx_fsmc_modes), | ||
96 | .enb_on_reset = 1, | ||
97 | }; | ||
98 | |||
99 | struct pmx_dev_mode pmx_spp_modes[] = { | ||
100 | { | ||
101 | .ids = SMALL_PRINTERS_MODE, | ||
102 | .mask = 0x0, | ||
103 | }, | ||
104 | }; | ||
105 | |||
106 | struct pmx_dev pmx_spp = { | ||
107 | .name = "spp", | ||
108 | .modes = pmx_spp_modes, | ||
109 | .mode_count = ARRAY_SIZE(pmx_spp_modes), | ||
110 | .enb_on_reset = 1, | ||
111 | }; | ||
112 | |||
113 | struct pmx_dev_mode pmx_sdio_modes[] = { | ||
114 | { | ||
115 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | | ||
116 | SMALL_PRINTERS_MODE, | ||
117 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
118 | }, | ||
119 | }; | ||
120 | |||
121 | struct pmx_dev pmx_sdio = { | ||
122 | .name = "sdio", | ||
123 | .modes = pmx_sdio_modes, | ||
124 | .mode_count = ARRAY_SIZE(pmx_sdio_modes), | ||
125 | .enb_on_reset = 1, | ||
126 | }; | ||
127 | |||
128 | struct pmx_dev_mode pmx_i2s_modes[] = { | ||
129 | { | ||
130 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
131 | .mask = PMX_UART0_MODEM_MASK, | ||
132 | }, | ||
133 | }; | ||
134 | |||
135 | struct pmx_dev pmx_i2s = { | ||
136 | .name = "i2s", | ||
137 | .modes = pmx_i2s_modes, | ||
138 | .mode_count = ARRAY_SIZE(pmx_i2s_modes), | ||
139 | .enb_on_reset = 1, | ||
140 | }; | ||
141 | |||
142 | struct pmx_dev_mode pmx_uart1_modes[] = { | ||
143 | { | ||
144 | .ids = ALL_MODES, | ||
145 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | struct pmx_dev pmx_uart1 = { | ||
150 | .name = "uart1", | ||
151 | .modes = pmx_uart1_modes, | ||
152 | .mode_count = ARRAY_SIZE(pmx_uart1_modes), | ||
153 | .enb_on_reset = 1, | ||
154 | }; | ||
155 | |||
156 | struct pmx_dev_mode pmx_uart1_modem_modes[] = { | ||
157 | { | ||
158 | .ids = AUTO_EXP_MODE, | ||
159 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | | ||
160 | PMX_SSP_CS_MASK, | ||
161 | }, { | ||
162 | .ids = SMALL_PRINTERS_MODE, | ||
163 | .mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK | | ||
164 | PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK, | ||
165 | }, | ||
166 | }; | ||
167 | |||
168 | struct pmx_dev pmx_uart1_modem = { | ||
169 | .name = "uart1_modem", | ||
170 | .modes = pmx_uart1_modem_modes, | ||
171 | .mode_count = ARRAY_SIZE(pmx_uart1_modem_modes), | ||
172 | .enb_on_reset = 1, | ||
173 | }; | ||
174 | |||
175 | struct pmx_dev_mode pmx_uart2_modes[] = { | ||
176 | { | ||
177 | .ids = ALL_MODES, | ||
178 | .mask = PMX_FIRDA_MASK, | ||
179 | }, | ||
180 | }; | ||
181 | |||
182 | struct pmx_dev pmx_uart2 = { | ||
183 | .name = "uart2", | ||
184 | .modes = pmx_uart2_modes, | ||
185 | .mode_count = ARRAY_SIZE(pmx_uart2_modes), | ||
186 | .enb_on_reset = 1, | ||
187 | }; | ||
188 | |||
189 | struct pmx_dev_mode pmx_touchscreen_modes[] = { | ||
190 | { | ||
191 | .ids = AUTO_NET_SMII_MODE, | ||
192 | .mask = PMX_SSP_CS_MASK, | ||
193 | }, | ||
194 | }; | ||
195 | |||
196 | struct pmx_dev pmx_touchscreen = { | ||
197 | .name = "touchscreen", | ||
198 | .modes = pmx_touchscreen_modes, | ||
199 | .mode_count = ARRAY_SIZE(pmx_touchscreen_modes), | ||
200 | .enb_on_reset = 1, | ||
201 | }; | ||
202 | |||
203 | struct pmx_dev_mode pmx_can_modes[] = { | ||
204 | { | ||
205 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE, | ||
206 | .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
207 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, | ||
208 | }, | ||
209 | }; | ||
210 | |||
211 | struct pmx_dev pmx_can = { | ||
212 | .name = "can", | ||
213 | .modes = pmx_can_modes, | ||
214 | .mode_count = ARRAY_SIZE(pmx_can_modes), | ||
215 | .enb_on_reset = 1, | ||
216 | }; | ||
217 | |||
218 | struct pmx_dev_mode pmx_sdio_led_modes[] = { | ||
219 | { | ||
220 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
221 | .mask = PMX_SSP_CS_MASK, | ||
222 | }, | ||
223 | }; | ||
224 | |||
225 | struct pmx_dev pmx_sdio_led = { | ||
226 | .name = "sdio_led", | ||
227 | .modes = pmx_sdio_led_modes, | ||
228 | .mode_count = ARRAY_SIZE(pmx_sdio_led_modes), | ||
229 | .enb_on_reset = 1, | ||
230 | }; | ||
231 | |||
232 | struct pmx_dev_mode pmx_pwm0_modes[] = { | ||
233 | { | ||
234 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
235 | .mask = PMX_UART0_MODEM_MASK, | ||
236 | }, { | ||
237 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
238 | .mask = PMX_MII_MASK, | ||
239 | }, | ||
240 | }; | ||
241 | |||
242 | struct pmx_dev pmx_pwm0 = { | ||
243 | .name = "pwm0", | ||
244 | .modes = pmx_pwm0_modes, | ||
245 | .mode_count = ARRAY_SIZE(pmx_pwm0_modes), | ||
246 | .enb_on_reset = 1, | ||
247 | }; | ||
248 | |||
249 | struct pmx_dev_mode pmx_pwm1_modes[] = { | ||
250 | { | ||
251 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
252 | .mask = PMX_UART0_MODEM_MASK, | ||
253 | }, { | ||
254 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
255 | .mask = PMX_MII_MASK, | ||
256 | }, | ||
257 | }; | ||
258 | |||
259 | struct pmx_dev pmx_pwm1 = { | ||
260 | .name = "pwm1", | ||
261 | .modes = pmx_pwm1_modes, | ||
262 | .mode_count = ARRAY_SIZE(pmx_pwm1_modes), | ||
263 | .enb_on_reset = 1, | ||
264 | }; | ||
265 | |||
266 | struct pmx_dev_mode pmx_pwm2_modes[] = { | ||
267 | { | ||
268 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
269 | .mask = PMX_SSP_CS_MASK, | ||
270 | }, { | ||
271 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
272 | .mask = PMX_MII_MASK, | ||
273 | }, | ||
274 | }; | ||
275 | |||
276 | struct pmx_dev pmx_pwm2 = { | ||
277 | .name = "pwm2", | ||
278 | .modes = pmx_pwm2_modes, | ||
279 | .mode_count = ARRAY_SIZE(pmx_pwm2_modes), | ||
280 | .enb_on_reset = 1, | ||
281 | }; | ||
282 | |||
283 | struct pmx_dev_mode pmx_pwm3_modes[] = { | ||
284 | { | ||
285 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE, | ||
286 | .mask = PMX_MII_MASK, | ||
287 | }, | ||
288 | }; | ||
289 | |||
290 | struct pmx_dev pmx_pwm3 = { | ||
291 | .name = "pwm3", | ||
292 | .modes = pmx_pwm3_modes, | ||
293 | .mode_count = ARRAY_SIZE(pmx_pwm3_modes), | ||
294 | .enb_on_reset = 1, | ||
295 | }; | ||
296 | |||
297 | struct pmx_dev_mode pmx_ssp1_modes[] = { | ||
298 | { | ||
299 | .ids = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE, | ||
300 | .mask = PMX_MII_MASK, | ||
301 | }, | ||
302 | }; | ||
303 | |||
304 | struct pmx_dev pmx_ssp1 = { | ||
305 | .name = "ssp1", | ||
306 | .modes = pmx_ssp1_modes, | ||
307 | .mode_count = ARRAY_SIZE(pmx_ssp1_modes), | ||
308 | .enb_on_reset = 1, | ||
309 | }; | ||
310 | |||
311 | struct pmx_dev_mode pmx_ssp2_modes[] = { | ||
312 | { | ||
313 | .ids = AUTO_NET_SMII_MODE, | ||
314 | .mask = PMX_MII_MASK, | ||
315 | }, | ||
316 | }; | ||
317 | |||
318 | struct pmx_dev pmx_ssp2 = { | ||
319 | .name = "ssp2", | ||
320 | .modes = pmx_ssp2_modes, | ||
321 | .mode_count = ARRAY_SIZE(pmx_ssp2_modes), | ||
322 | .enb_on_reset = 1, | ||
323 | }; | ||
324 | |||
325 | struct pmx_dev_mode pmx_mii1_modes[] = { | ||
326 | { | ||
327 | .ids = AUTO_NET_MII_MODE, | ||
328 | .mask = 0x0, | ||
329 | }, | ||
330 | }; | ||
331 | |||
332 | struct pmx_dev pmx_mii1 = { | ||
333 | .name = "mii1", | ||
334 | .modes = pmx_mii1_modes, | ||
335 | .mode_count = ARRAY_SIZE(pmx_mii1_modes), | ||
336 | .enb_on_reset = 1, | ||
337 | }; | ||
338 | |||
339 | struct pmx_dev_mode pmx_smii0_modes[] = { | ||
340 | { | ||
341 | .ids = AUTO_NET_SMII_MODE | AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
342 | .mask = PMX_MII_MASK, | ||
343 | }, | ||
344 | }; | ||
345 | |||
346 | struct pmx_dev pmx_smii0 = { | ||
347 | .name = "smii0", | ||
348 | .modes = pmx_smii0_modes, | ||
349 | .mode_count = ARRAY_SIZE(pmx_smii0_modes), | ||
350 | .enb_on_reset = 1, | ||
351 | }; | ||
352 | |||
353 | struct pmx_dev_mode pmx_smii1_modes[] = { | ||
354 | { | ||
355 | .ids = AUTO_NET_SMII_MODE | SMALL_PRINTERS_MODE, | ||
356 | .mask = PMX_MII_MASK, | ||
357 | }, | ||
358 | }; | ||
359 | |||
360 | struct pmx_dev pmx_smii1 = { | ||
361 | .name = "smii1", | ||
362 | .modes = pmx_smii1_modes, | ||
363 | .mode_count = ARRAY_SIZE(pmx_smii1_modes), | ||
364 | .enb_on_reset = 1, | ||
365 | }; | ||
366 | |||
367 | struct pmx_dev_mode pmx_i2c1_modes[] = { | ||
368 | { | ||
369 | .ids = AUTO_EXP_MODE, | ||
370 | .mask = 0x0, | ||
371 | }, | ||
372 | }; | ||
373 | |||
374 | struct pmx_dev pmx_i2c1 = { | ||
375 | .name = "i2c1", | ||
376 | .modes = pmx_i2c1_modes, | ||
377 | .mode_count = ARRAY_SIZE(pmx_i2c1_modes), | ||
378 | .enb_on_reset = 1, | ||
379 | }; | ||
380 | |||
381 | /* pmx driver structure */ | ||
382 | struct pmx_driver pmx_driver = { | ||
383 | .mode_reg = {.offset = MODE_CONFIG_REG, .mask = 0x00000007}, | ||
384 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
385 | }; | ||
386 | |||
387 | /* Add spear320 specific devices here */ | ||
388 | |||
389 | /* spear3xx shared irq */ | ||
390 | struct shirq_dev_config shirq_ras1_config[] = { | ||
391 | { | ||
392 | .virq = VIRQ_EMI, | ||
393 | .status_mask = EMI_IRQ_MASK, | ||
394 | .clear_mask = EMI_IRQ_MASK, | ||
395 | }, { | ||
396 | .virq = VIRQ_CLCD, | ||
397 | .status_mask = CLCD_IRQ_MASK, | ||
398 | .clear_mask = CLCD_IRQ_MASK, | ||
399 | }, { | ||
400 | .virq = VIRQ_SPP, | ||
401 | .status_mask = SPP_IRQ_MASK, | ||
402 | .clear_mask = SPP_IRQ_MASK, | ||
403 | }, | ||
404 | }; | ||
405 | |||
406 | struct spear_shirq shirq_ras1 = { | ||
407 | .irq = IRQ_GEN_RAS_1, | ||
408 | .dev_config = shirq_ras1_config, | ||
409 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
410 | .regs = { | ||
411 | .enb_reg = -1, | ||
412 | .status_reg = INT_STS_MASK_REG, | ||
413 | .status_reg_mask = SHIRQ_RAS1_MASK, | ||
414 | .clear_reg = INT_CLR_MASK_REG, | ||
415 | .reset_to_clear = 1, | ||
416 | }, | ||
417 | }; | ||
418 | |||
419 | struct shirq_dev_config shirq_ras3_config[] = { | ||
420 | { | ||
421 | .virq = VIRQ_PLGPIO, | ||
422 | .enb_mask = GPIO_IRQ_MASK, | ||
423 | .status_mask = GPIO_IRQ_MASK, | ||
424 | .clear_mask = GPIO_IRQ_MASK, | ||
425 | }, { | ||
426 | .virq = VIRQ_I2S_PLAY, | ||
427 | .enb_mask = I2S_PLAY_IRQ_MASK, | ||
428 | .status_mask = I2S_PLAY_IRQ_MASK, | ||
429 | .clear_mask = I2S_PLAY_IRQ_MASK, | ||
430 | }, { | ||
431 | .virq = VIRQ_I2S_REC, | ||
432 | .enb_mask = I2S_REC_IRQ_MASK, | ||
433 | .status_mask = I2S_REC_IRQ_MASK, | ||
434 | .clear_mask = I2S_REC_IRQ_MASK, | ||
435 | }, | ||
436 | }; | ||
437 | |||
438 | struct spear_shirq shirq_ras3 = { | ||
439 | .irq = IRQ_GEN_RAS_3, | ||
440 | .dev_config = shirq_ras3_config, | ||
441 | .dev_count = ARRAY_SIZE(shirq_ras3_config), | ||
442 | .regs = { | ||
443 | .enb_reg = INT_ENB_MASK_REG, | ||
444 | .reset_to_enb = 1, | ||
445 | .status_reg = INT_STS_MASK_REG, | ||
446 | .status_reg_mask = SHIRQ_RAS3_MASK, | ||
447 | .clear_reg = INT_CLR_MASK_REG, | ||
448 | .reset_to_clear = 1, | ||
449 | }, | ||
450 | }; | ||
451 | |||
452 | struct shirq_dev_config shirq_intrcomm_ras_config[] = { | ||
453 | { | ||
454 | .virq = VIRQ_CANU, | ||
455 | .status_mask = CAN_U_IRQ_MASK, | ||
456 | .clear_mask = CAN_U_IRQ_MASK, | ||
457 | }, { | ||
458 | .virq = VIRQ_CANL, | ||
459 | .status_mask = CAN_L_IRQ_MASK, | ||
460 | .clear_mask = CAN_L_IRQ_MASK, | ||
461 | }, { | ||
462 | .virq = VIRQ_UART1, | ||
463 | .status_mask = UART1_IRQ_MASK, | ||
464 | .clear_mask = UART1_IRQ_MASK, | ||
465 | }, { | ||
466 | .virq = VIRQ_UART2, | ||
467 | .status_mask = UART2_IRQ_MASK, | ||
468 | .clear_mask = UART2_IRQ_MASK, | ||
469 | }, { | ||
470 | .virq = VIRQ_SSP1, | ||
471 | .status_mask = SSP1_IRQ_MASK, | ||
472 | .clear_mask = SSP1_IRQ_MASK, | ||
473 | }, { | ||
474 | .virq = VIRQ_SSP2, | ||
475 | .status_mask = SSP2_IRQ_MASK, | ||
476 | .clear_mask = SSP2_IRQ_MASK, | ||
477 | }, { | ||
478 | .virq = VIRQ_SMII0, | ||
479 | .status_mask = SMII0_IRQ_MASK, | ||
480 | .clear_mask = SMII0_IRQ_MASK, | ||
481 | }, { | ||
482 | .virq = VIRQ_MII1_SMII1, | ||
483 | .status_mask = MII1_SMII1_IRQ_MASK, | ||
484 | .clear_mask = MII1_SMII1_IRQ_MASK, | ||
485 | }, { | ||
486 | .virq = VIRQ_WAKEUP_SMII0, | ||
487 | .status_mask = WAKEUP_SMII0_IRQ_MASK, | ||
488 | .clear_mask = WAKEUP_SMII0_IRQ_MASK, | ||
489 | }, { | ||
490 | .virq = VIRQ_WAKEUP_MII1_SMII1, | ||
491 | .status_mask = WAKEUP_MII1_SMII1_IRQ_MASK, | ||
492 | .clear_mask = WAKEUP_MII1_SMII1_IRQ_MASK, | ||
493 | }, { | ||
494 | .virq = VIRQ_I2C, | ||
495 | .status_mask = I2C1_IRQ_MASK, | ||
496 | .clear_mask = I2C1_IRQ_MASK, | ||
497 | }, | ||
498 | }; | ||
499 | |||
500 | struct spear_shirq shirq_intrcomm_ras = { | ||
501 | .irq = IRQ_INTRCOMM_RAS_ARM, | ||
502 | .dev_config = shirq_intrcomm_ras_config, | ||
503 | .dev_count = ARRAY_SIZE(shirq_intrcomm_ras_config), | ||
504 | .regs = { | ||
505 | .enb_reg = -1, | ||
506 | .status_reg = INT_STS_MASK_REG, | ||
507 | .status_reg_mask = SHIRQ_INTRCOMM_RAS_MASK, | ||
508 | .clear_reg = INT_CLR_MASK_REG, | ||
509 | .reset_to_clear = 1, | ||
510 | }, | ||
511 | }; | ||
512 | |||
513 | /* spear320 routines */ | ||
514 | void __init spear320_init(void) | ||
515 | { | ||
516 | void __iomem *base; | ||
517 | int ret = 0; | ||
518 | |||
519 | /* call spear3xx family common init function */ | ||
520 | spear3xx_init(); | ||
521 | |||
522 | /* shared irq registeration */ | ||
523 | base = ioremap(SPEAR320_SOC_CONFIG_BASE, SPEAR320_SOC_CONFIG_SIZE); | ||
524 | if (base) { | ||
525 | /* shirq 1 */ | ||
526 | shirq_ras1.regs.base = base; | ||
527 | ret = spear_shirq_register(&shirq_ras1); | ||
528 | if (ret) | ||
529 | printk(KERN_ERR "Error registering Shared IRQ 1\n"); | ||
530 | |||
531 | /* shirq 3 */ | ||
532 | shirq_ras3.regs.base = base; | ||
533 | ret = spear_shirq_register(&shirq_ras3); | ||
534 | if (ret) | ||
535 | printk(KERN_ERR "Error registering Shared IRQ 3\n"); | ||
536 | |||
537 | /* shirq 4 */ | ||
538 | shirq_intrcomm_ras.regs.base = base; | ||
539 | ret = spear_shirq_register(&shirq_intrcomm_ras); | ||
540 | if (ret) | ||
541 | printk(KERN_ERR "Error registering Shared IRQ 4\n"); | ||
542 | } | ||
543 | } | ||
544 | |||
545 | void spear320_pmx_init(void) | ||
546 | { | ||
547 | spear_pmx_init(&pmx_driver, SPEAR320_SOC_CONFIG_BASE, | ||
548 | SPEAR320_SOC_CONFIG_SIZE); | ||
549 | } | ||
diff --git a/arch/arm/mach-spear3xx/spear320_evb.c b/arch/arm/mach-spear3xx/spear320_evb.c new file mode 100644 index 000000000000..62ac685a4135 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear320_evb.c | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear320_evb.c | ||
3 | * | ||
4 | * SPEAr320 evaluation board source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <asm/mach/arch.h> | ||
15 | #include <asm/mach-types.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/spear.h> | ||
18 | |||
19 | /* padmux devices to enable */ | ||
20 | static struct pmx_dev *pmx_devs[] = { | ||
21 | /* spear3xx specific devices */ | ||
22 | &pmx_i2c, | ||
23 | &pmx_ssp, | ||
24 | &pmx_mii, | ||
25 | &pmx_uart0, | ||
26 | |||
27 | /* spear320 specific devices */ | ||
28 | &pmx_fsmc, | ||
29 | &pmx_sdio, | ||
30 | &pmx_i2s, | ||
31 | &pmx_uart1, | ||
32 | &pmx_uart2, | ||
33 | &pmx_can, | ||
34 | &pmx_pwm0, | ||
35 | &pmx_pwm1, | ||
36 | &pmx_pwm2, | ||
37 | &pmx_mii1, | ||
38 | }; | ||
39 | |||
40 | static struct amba_device *amba_devs[] __initdata = { | ||
41 | /* spear3xx specific devices */ | ||
42 | &gpio_device, | ||
43 | &uart_device, | ||
44 | |||
45 | /* spear320 specific devices */ | ||
46 | }; | ||
47 | |||
48 | static struct platform_device *plat_devs[] __initdata = { | ||
49 | /* spear3xx specific devices */ | ||
50 | |||
51 | /* spear320 specific devices */ | ||
52 | }; | ||
53 | |||
54 | static void __init spear320_evb_init(void) | ||
55 | { | ||
56 | unsigned int i; | ||
57 | |||
58 | /* call spear320 machine init function */ | ||
59 | spear320_init(); | ||
60 | |||
61 | /* padmux initialization */ | ||
62 | pmx_driver.mode = &auto_net_mii_mode; | ||
63 | pmx_driver.devs = pmx_devs; | ||
64 | pmx_driver.devs_count = ARRAY_SIZE(pmx_devs); | ||
65 | spear320_pmx_init(); | ||
66 | |||
67 | /* Add Platform Devices */ | ||
68 | platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs)); | ||
69 | |||
70 | /* Add Amba Devices */ | ||
71 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
72 | amba_device_register(amba_devs[i], &iomem_resource); | ||
73 | } | ||
74 | |||
75 | MACHINE_START(SPEAR320, "ST-SPEAR320-EVB") | ||
76 | .boot_params = 0x00000100, | ||
77 | .map_io = spear3xx_map_io, | ||
78 | .init_irq = spear3xx_init_irq, | ||
79 | .timer = &spear_sys_timer, | ||
80 | .init_machine = spear320_evb_init, | ||
81 | MACHINE_END | ||
diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c new file mode 100644 index 000000000000..e87313aeae20 --- /dev/null +++ b/arch/arm/mach-spear3xx/spear3xx.c | |||
@@ -0,0 +1,548 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear3xx/spear3xx.c | ||
3 | * | ||
4 | * SPEAr3XX machines common source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/types.h> | ||
15 | #include <linux/amba/pl061.h> | ||
16 | #include <linux/ptrace.h> | ||
17 | #include <linux/io.h> | ||
18 | #include <asm/hardware/vic.h> | ||
19 | #include <asm/irq.h> | ||
20 | #include <asm/mach/arch.h> | ||
21 | #include <mach/generic.h> | ||
22 | #include <mach/spear.h> | ||
23 | |||
24 | /* Add spear3xx machines common devices here */ | ||
25 | /* gpio device registeration */ | ||
26 | static struct pl061_platform_data gpio_plat_data = { | ||
27 | .gpio_base = 0, | ||
28 | .irq_base = SPEAR_GPIO_INT_BASE, | ||
29 | }; | ||
30 | |||
31 | struct amba_device gpio_device = { | ||
32 | .dev = { | ||
33 | .init_name = "gpio", | ||
34 | .platform_data = &gpio_plat_data, | ||
35 | }, | ||
36 | .res = { | ||
37 | .start = SPEAR3XX_ICM3_GPIO_BASE, | ||
38 | .end = SPEAR3XX_ICM3_GPIO_BASE + SPEAR3XX_ICM3_GPIO_SIZE - 1, | ||
39 | .flags = IORESOURCE_MEM, | ||
40 | }, | ||
41 | .irq = {IRQ_BASIC_GPIO, NO_IRQ}, | ||
42 | }; | ||
43 | |||
44 | /* uart device registeration */ | ||
45 | struct amba_device uart_device = { | ||
46 | .dev = { | ||
47 | .init_name = "uart", | ||
48 | }, | ||
49 | .res = { | ||
50 | .start = SPEAR3XX_ICM1_UART_BASE, | ||
51 | .end = SPEAR3XX_ICM1_UART_BASE + SPEAR3XX_ICM1_UART_SIZE - 1, | ||
52 | .flags = IORESOURCE_MEM, | ||
53 | }, | ||
54 | .irq = {IRQ_UART, NO_IRQ}, | ||
55 | }; | ||
56 | |||
57 | /* Do spear3xx familiy common initialization part here */ | ||
58 | void __init spear3xx_init(void) | ||
59 | { | ||
60 | /* nothing to do for now */ | ||
61 | } | ||
62 | |||
63 | /* This will initialize vic */ | ||
64 | void __init spear3xx_init_irq(void) | ||
65 | { | ||
66 | vic_init((void __iomem *)VA_SPEAR3XX_ML1_VIC_BASE, 0, ~0, 0); | ||
67 | } | ||
68 | |||
69 | /* Following will create static virtual/physical mappings */ | ||
70 | struct map_desc spear3xx_io_desc[] __initdata = { | ||
71 | { | ||
72 | .virtual = VA_SPEAR3XX_ICM1_UART_BASE, | ||
73 | .pfn = __phys_to_pfn(SPEAR3XX_ICM1_UART_BASE), | ||
74 | .length = SPEAR3XX_ICM1_UART_SIZE, | ||
75 | .type = MT_DEVICE | ||
76 | }, { | ||
77 | .virtual = VA_SPEAR3XX_ML1_VIC_BASE, | ||
78 | .pfn = __phys_to_pfn(SPEAR3XX_ML1_VIC_BASE), | ||
79 | .length = SPEAR3XX_ML1_VIC_SIZE, | ||
80 | .type = MT_DEVICE | ||
81 | }, { | ||
82 | .virtual = VA_SPEAR3XX_ICM3_SYS_CTRL_BASE, | ||
83 | .pfn = __phys_to_pfn(SPEAR3XX_ICM3_SYS_CTRL_BASE), | ||
84 | .length = SPEAR3XX_ICM3_SYS_CTRL_SIZE, | ||
85 | .type = MT_DEVICE | ||
86 | }, { | ||
87 | .virtual = VA_SPEAR3XX_ICM3_MISC_REG_BASE, | ||
88 | .pfn = __phys_to_pfn(SPEAR3XX_ICM3_MISC_REG_BASE), | ||
89 | .length = SPEAR3XX_ICM3_MISC_REG_SIZE, | ||
90 | .type = MT_DEVICE | ||
91 | }, | ||
92 | }; | ||
93 | |||
94 | /* This will create static memory mapping for selected devices */ | ||
95 | void __init spear3xx_map_io(void) | ||
96 | { | ||
97 | iotable_init(spear3xx_io_desc, ARRAY_SIZE(spear3xx_io_desc)); | ||
98 | |||
99 | /* This will initialize clock framework */ | ||
100 | clk_init(); | ||
101 | } | ||
102 | |||
103 | /* pad multiplexing support */ | ||
104 | /* devices */ | ||
105 | struct pmx_dev_mode pmx_firda_modes[] = { | ||
106 | { | ||
107 | .ids = 0xffffffff, | ||
108 | .mask = PMX_FIRDA_MASK, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | struct pmx_dev pmx_firda = { | ||
113 | .name = "firda", | ||
114 | .modes = pmx_firda_modes, | ||
115 | .mode_count = ARRAY_SIZE(pmx_firda_modes), | ||
116 | .enb_on_reset = 0, | ||
117 | }; | ||
118 | |||
119 | struct pmx_dev_mode pmx_i2c_modes[] = { | ||
120 | { | ||
121 | .ids = 0xffffffff, | ||
122 | .mask = PMX_I2C_MASK, | ||
123 | }, | ||
124 | }; | ||
125 | |||
126 | struct pmx_dev pmx_i2c = { | ||
127 | .name = "i2c", | ||
128 | .modes = pmx_i2c_modes, | ||
129 | .mode_count = ARRAY_SIZE(pmx_i2c_modes), | ||
130 | .enb_on_reset = 0, | ||
131 | }; | ||
132 | |||
133 | struct pmx_dev_mode pmx_ssp_cs_modes[] = { | ||
134 | { | ||
135 | .ids = 0xffffffff, | ||
136 | .mask = PMX_SSP_CS_MASK, | ||
137 | }, | ||
138 | }; | ||
139 | |||
140 | struct pmx_dev pmx_ssp_cs = { | ||
141 | .name = "ssp_chip_selects", | ||
142 | .modes = pmx_ssp_cs_modes, | ||
143 | .mode_count = ARRAY_SIZE(pmx_ssp_cs_modes), | ||
144 | .enb_on_reset = 0, | ||
145 | }; | ||
146 | |||
147 | struct pmx_dev_mode pmx_ssp_modes[] = { | ||
148 | { | ||
149 | .ids = 0xffffffff, | ||
150 | .mask = PMX_SSP_MASK, | ||
151 | }, | ||
152 | }; | ||
153 | |||
154 | struct pmx_dev pmx_ssp = { | ||
155 | .name = "ssp", | ||
156 | .modes = pmx_ssp_modes, | ||
157 | .mode_count = ARRAY_SIZE(pmx_ssp_modes), | ||
158 | .enb_on_reset = 0, | ||
159 | }; | ||
160 | |||
161 | struct pmx_dev_mode pmx_mii_modes[] = { | ||
162 | { | ||
163 | .ids = 0xffffffff, | ||
164 | .mask = PMX_MII_MASK, | ||
165 | }, | ||
166 | }; | ||
167 | |||
168 | struct pmx_dev pmx_mii = { | ||
169 | .name = "mii", | ||
170 | .modes = pmx_mii_modes, | ||
171 | .mode_count = ARRAY_SIZE(pmx_mii_modes), | ||
172 | .enb_on_reset = 0, | ||
173 | }; | ||
174 | |||
175 | struct pmx_dev_mode pmx_gpio_pin0_modes[] = { | ||
176 | { | ||
177 | .ids = 0xffffffff, | ||
178 | .mask = PMX_GPIO_PIN0_MASK, | ||
179 | }, | ||
180 | }; | ||
181 | |||
182 | struct pmx_dev pmx_gpio_pin0 = { | ||
183 | .name = "gpio_pin0", | ||
184 | .modes = pmx_gpio_pin0_modes, | ||
185 | .mode_count = ARRAY_SIZE(pmx_gpio_pin0_modes), | ||
186 | .enb_on_reset = 0, | ||
187 | }; | ||
188 | |||
189 | struct pmx_dev_mode pmx_gpio_pin1_modes[] = { | ||
190 | { | ||
191 | .ids = 0xffffffff, | ||
192 | .mask = PMX_GPIO_PIN1_MASK, | ||
193 | }, | ||
194 | }; | ||
195 | |||
196 | struct pmx_dev pmx_gpio_pin1 = { | ||
197 | .name = "gpio_pin1", | ||
198 | .modes = pmx_gpio_pin1_modes, | ||
199 | .mode_count = ARRAY_SIZE(pmx_gpio_pin1_modes), | ||
200 | .enb_on_reset = 0, | ||
201 | }; | ||
202 | |||
203 | struct pmx_dev_mode pmx_gpio_pin2_modes[] = { | ||
204 | { | ||
205 | .ids = 0xffffffff, | ||
206 | .mask = PMX_GPIO_PIN2_MASK, | ||
207 | }, | ||
208 | }; | ||
209 | |||
210 | struct pmx_dev pmx_gpio_pin2 = { | ||
211 | .name = "gpio_pin2", | ||
212 | .modes = pmx_gpio_pin2_modes, | ||
213 | .mode_count = ARRAY_SIZE(pmx_gpio_pin2_modes), | ||
214 | .enb_on_reset = 0, | ||
215 | }; | ||
216 | |||
217 | struct pmx_dev_mode pmx_gpio_pin3_modes[] = { | ||
218 | { | ||
219 | .ids = 0xffffffff, | ||
220 | .mask = PMX_GPIO_PIN3_MASK, | ||
221 | }, | ||
222 | }; | ||
223 | |||
224 | struct pmx_dev pmx_gpio_pin3 = { | ||
225 | .name = "gpio_pin3", | ||
226 | .modes = pmx_gpio_pin3_modes, | ||
227 | .mode_count = ARRAY_SIZE(pmx_gpio_pin3_modes), | ||
228 | .enb_on_reset = 0, | ||
229 | }; | ||
230 | |||
231 | struct pmx_dev_mode pmx_gpio_pin4_modes[] = { | ||
232 | { | ||
233 | .ids = 0xffffffff, | ||
234 | .mask = PMX_GPIO_PIN4_MASK, | ||
235 | }, | ||
236 | }; | ||
237 | |||
238 | struct pmx_dev pmx_gpio_pin4 = { | ||
239 | .name = "gpio_pin4", | ||
240 | .modes = pmx_gpio_pin4_modes, | ||
241 | .mode_count = ARRAY_SIZE(pmx_gpio_pin4_modes), | ||
242 | .enb_on_reset = 0, | ||
243 | }; | ||
244 | |||
245 | struct pmx_dev_mode pmx_gpio_pin5_modes[] = { | ||
246 | { | ||
247 | .ids = 0xffffffff, | ||
248 | .mask = PMX_GPIO_PIN5_MASK, | ||
249 | }, | ||
250 | }; | ||
251 | |||
252 | struct pmx_dev pmx_gpio_pin5 = { | ||
253 | .name = "gpio_pin5", | ||
254 | .modes = pmx_gpio_pin5_modes, | ||
255 | .mode_count = ARRAY_SIZE(pmx_gpio_pin5_modes), | ||
256 | .enb_on_reset = 0, | ||
257 | }; | ||
258 | |||
259 | struct pmx_dev_mode pmx_uart0_modem_modes[] = { | ||
260 | { | ||
261 | .ids = 0xffffffff, | ||
262 | .mask = PMX_UART0_MODEM_MASK, | ||
263 | }, | ||
264 | }; | ||
265 | |||
266 | struct pmx_dev pmx_uart0_modem = { | ||
267 | .name = "uart0_modem", | ||
268 | .modes = pmx_uart0_modem_modes, | ||
269 | .mode_count = ARRAY_SIZE(pmx_uart0_modem_modes), | ||
270 | .enb_on_reset = 0, | ||
271 | }; | ||
272 | |||
273 | struct pmx_dev_mode pmx_uart0_modes[] = { | ||
274 | { | ||
275 | .ids = 0xffffffff, | ||
276 | .mask = PMX_UART0_MASK, | ||
277 | }, | ||
278 | }; | ||
279 | |||
280 | struct pmx_dev pmx_uart0 = { | ||
281 | .name = "uart0", | ||
282 | .modes = pmx_uart0_modes, | ||
283 | .mode_count = ARRAY_SIZE(pmx_uart0_modes), | ||
284 | .enb_on_reset = 0, | ||
285 | }; | ||
286 | |||
287 | struct pmx_dev_mode pmx_timer_3_4_modes[] = { | ||
288 | { | ||
289 | .ids = 0xffffffff, | ||
290 | .mask = PMX_TIMER_3_4_MASK, | ||
291 | }, | ||
292 | }; | ||
293 | |||
294 | struct pmx_dev pmx_timer_3_4 = { | ||
295 | .name = "timer_3_4", | ||
296 | .modes = pmx_timer_3_4_modes, | ||
297 | .mode_count = ARRAY_SIZE(pmx_timer_3_4_modes), | ||
298 | .enb_on_reset = 0, | ||
299 | }; | ||
300 | |||
301 | struct pmx_dev_mode pmx_timer_1_2_modes[] = { | ||
302 | { | ||
303 | .ids = 0xffffffff, | ||
304 | .mask = PMX_TIMER_1_2_MASK, | ||
305 | }, | ||
306 | }; | ||
307 | |||
308 | struct pmx_dev pmx_timer_1_2 = { | ||
309 | .name = "timer_1_2", | ||
310 | .modes = pmx_timer_1_2_modes, | ||
311 | .mode_count = ARRAY_SIZE(pmx_timer_1_2_modes), | ||
312 | .enb_on_reset = 0, | ||
313 | }; | ||
314 | |||
315 | #if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320) | ||
316 | /* plgpios devices */ | ||
317 | struct pmx_dev_mode pmx_plgpio_0_1_modes[] = { | ||
318 | { | ||
319 | .ids = 0x00, | ||
320 | .mask = PMX_FIRDA_MASK, | ||
321 | }, | ||
322 | }; | ||
323 | |||
324 | struct pmx_dev pmx_plgpio_0_1 = { | ||
325 | .name = "plgpio 0 and 1", | ||
326 | .modes = pmx_plgpio_0_1_modes, | ||
327 | .mode_count = ARRAY_SIZE(pmx_plgpio_0_1_modes), | ||
328 | .enb_on_reset = 1, | ||
329 | }; | ||
330 | |||
331 | struct pmx_dev_mode pmx_plgpio_2_3_modes[] = { | ||
332 | { | ||
333 | .ids = 0x00, | ||
334 | .mask = PMX_UART0_MASK, | ||
335 | }, | ||
336 | }; | ||
337 | |||
338 | struct pmx_dev pmx_plgpio_2_3 = { | ||
339 | .name = "plgpio 2 and 3", | ||
340 | .modes = pmx_plgpio_2_3_modes, | ||
341 | .mode_count = ARRAY_SIZE(pmx_plgpio_2_3_modes), | ||
342 | .enb_on_reset = 1, | ||
343 | }; | ||
344 | |||
345 | struct pmx_dev_mode pmx_plgpio_4_5_modes[] = { | ||
346 | { | ||
347 | .ids = 0x00, | ||
348 | .mask = PMX_I2C_MASK, | ||
349 | }, | ||
350 | }; | ||
351 | |||
352 | struct pmx_dev pmx_plgpio_4_5 = { | ||
353 | .name = "plgpio 4 and 5", | ||
354 | .modes = pmx_plgpio_4_5_modes, | ||
355 | .mode_count = ARRAY_SIZE(pmx_plgpio_4_5_modes), | ||
356 | .enb_on_reset = 1, | ||
357 | }; | ||
358 | |||
359 | struct pmx_dev_mode pmx_plgpio_6_9_modes[] = { | ||
360 | { | ||
361 | .ids = 0x00, | ||
362 | .mask = PMX_SSP_MASK, | ||
363 | }, | ||
364 | }; | ||
365 | |||
366 | struct pmx_dev pmx_plgpio_6_9 = { | ||
367 | .name = "plgpio 6 to 9", | ||
368 | .modes = pmx_plgpio_6_9_modes, | ||
369 | .mode_count = ARRAY_SIZE(pmx_plgpio_6_9_modes), | ||
370 | .enb_on_reset = 1, | ||
371 | }; | ||
372 | |||
373 | struct pmx_dev_mode pmx_plgpio_10_27_modes[] = { | ||
374 | { | ||
375 | .ids = 0x00, | ||
376 | .mask = PMX_MII_MASK, | ||
377 | }, | ||
378 | }; | ||
379 | |||
380 | struct pmx_dev pmx_plgpio_10_27 = { | ||
381 | .name = "plgpio 10 to 27", | ||
382 | .modes = pmx_plgpio_10_27_modes, | ||
383 | .mode_count = ARRAY_SIZE(pmx_plgpio_10_27_modes), | ||
384 | .enb_on_reset = 1, | ||
385 | }; | ||
386 | |||
387 | struct pmx_dev_mode pmx_plgpio_28_modes[] = { | ||
388 | { | ||
389 | .ids = 0x00, | ||
390 | .mask = PMX_GPIO_PIN0_MASK, | ||
391 | }, | ||
392 | }; | ||
393 | |||
394 | struct pmx_dev pmx_plgpio_28 = { | ||
395 | .name = "plgpio 28", | ||
396 | .modes = pmx_plgpio_28_modes, | ||
397 | .mode_count = ARRAY_SIZE(pmx_plgpio_28_modes), | ||
398 | .enb_on_reset = 1, | ||
399 | }; | ||
400 | |||
401 | struct pmx_dev_mode pmx_plgpio_29_modes[] = { | ||
402 | { | ||
403 | .ids = 0x00, | ||
404 | .mask = PMX_GPIO_PIN1_MASK, | ||
405 | }, | ||
406 | }; | ||
407 | |||
408 | struct pmx_dev pmx_plgpio_29 = { | ||
409 | .name = "plgpio 29", | ||
410 | .modes = pmx_plgpio_29_modes, | ||
411 | .mode_count = ARRAY_SIZE(pmx_plgpio_29_modes), | ||
412 | .enb_on_reset = 1, | ||
413 | }; | ||
414 | |||
415 | struct pmx_dev_mode pmx_plgpio_30_modes[] = { | ||
416 | { | ||
417 | .ids = 0x00, | ||
418 | .mask = PMX_GPIO_PIN2_MASK, | ||
419 | }, | ||
420 | }; | ||
421 | |||
422 | struct pmx_dev pmx_plgpio_30 = { | ||
423 | .name = "plgpio 30", | ||
424 | .modes = pmx_plgpio_30_modes, | ||
425 | .mode_count = ARRAY_SIZE(pmx_plgpio_30_modes), | ||
426 | .enb_on_reset = 1, | ||
427 | }; | ||
428 | |||
429 | struct pmx_dev_mode pmx_plgpio_31_modes[] = { | ||
430 | { | ||
431 | .ids = 0x00, | ||
432 | .mask = PMX_GPIO_PIN3_MASK, | ||
433 | }, | ||
434 | }; | ||
435 | |||
436 | struct pmx_dev pmx_plgpio_31 = { | ||
437 | .name = "plgpio 31", | ||
438 | .modes = pmx_plgpio_31_modes, | ||
439 | .mode_count = ARRAY_SIZE(pmx_plgpio_31_modes), | ||
440 | .enb_on_reset = 1, | ||
441 | }; | ||
442 | |||
443 | struct pmx_dev_mode pmx_plgpio_32_modes[] = { | ||
444 | { | ||
445 | .ids = 0x00, | ||
446 | .mask = PMX_GPIO_PIN4_MASK, | ||
447 | }, | ||
448 | }; | ||
449 | |||
450 | struct pmx_dev pmx_plgpio_32 = { | ||
451 | .name = "plgpio 32", | ||
452 | .modes = pmx_plgpio_32_modes, | ||
453 | .mode_count = ARRAY_SIZE(pmx_plgpio_32_modes), | ||
454 | .enb_on_reset = 1, | ||
455 | }; | ||
456 | |||
457 | struct pmx_dev_mode pmx_plgpio_33_modes[] = { | ||
458 | { | ||
459 | .ids = 0x00, | ||
460 | .mask = PMX_GPIO_PIN5_MASK, | ||
461 | }, | ||
462 | }; | ||
463 | |||
464 | struct pmx_dev pmx_plgpio_33 = { | ||
465 | .name = "plgpio 33", | ||
466 | .modes = pmx_plgpio_33_modes, | ||
467 | .mode_count = ARRAY_SIZE(pmx_plgpio_33_modes), | ||
468 | .enb_on_reset = 1, | ||
469 | }; | ||
470 | |||
471 | struct pmx_dev_mode pmx_plgpio_34_36_modes[] = { | ||
472 | { | ||
473 | .ids = 0x00, | ||
474 | .mask = PMX_SSP_CS_MASK, | ||
475 | }, | ||
476 | }; | ||
477 | |||
478 | struct pmx_dev pmx_plgpio_34_36 = { | ||
479 | .name = "plgpio 34 to 36", | ||
480 | .modes = pmx_plgpio_34_36_modes, | ||
481 | .mode_count = ARRAY_SIZE(pmx_plgpio_34_36_modes), | ||
482 | .enb_on_reset = 1, | ||
483 | }; | ||
484 | |||
485 | struct pmx_dev_mode pmx_plgpio_37_42_modes[] = { | ||
486 | { | ||
487 | .ids = 0x00, | ||
488 | .mask = PMX_UART0_MODEM_MASK, | ||
489 | }, | ||
490 | }; | ||
491 | |||
492 | struct pmx_dev pmx_plgpio_37_42 = { | ||
493 | .name = "plgpio 37 to 42", | ||
494 | .modes = pmx_plgpio_37_42_modes, | ||
495 | .mode_count = ARRAY_SIZE(pmx_plgpio_37_42_modes), | ||
496 | .enb_on_reset = 1, | ||
497 | }; | ||
498 | |||
499 | struct pmx_dev_mode pmx_plgpio_43_44_47_48_modes[] = { | ||
500 | { | ||
501 | .ids = 0x00, | ||
502 | .mask = PMX_TIMER_1_2_MASK, | ||
503 | }, | ||
504 | }; | ||
505 | |||
506 | struct pmx_dev pmx_plgpio_43_44_47_48 = { | ||
507 | .name = "plgpio 43, 44, 47 and 48", | ||
508 | .modes = pmx_plgpio_43_44_47_48_modes, | ||
509 | .mode_count = ARRAY_SIZE(pmx_plgpio_43_44_47_48_modes), | ||
510 | .enb_on_reset = 1, | ||
511 | }; | ||
512 | |||
513 | struct pmx_dev_mode pmx_plgpio_45_46_49_50_modes[] = { | ||
514 | { | ||
515 | .ids = 0x00, | ||
516 | .mask = PMX_TIMER_3_4_MASK, | ||
517 | }, | ||
518 | }; | ||
519 | |||
520 | struct pmx_dev pmx_plgpio_45_46_49_50 = { | ||
521 | .name = "plgpio 45, 46, 49 and 50", | ||
522 | .modes = pmx_plgpio_45_46_49_50_modes, | ||
523 | .mode_count = ARRAY_SIZE(pmx_plgpio_45_46_49_50_modes), | ||
524 | .enb_on_reset = 1, | ||
525 | }; | ||
526 | |||
527 | #endif | ||
528 | |||
529 | /* spear padmux initialization function */ | ||
530 | void spear_pmx_init(struct pmx_driver *pmx_driver, uint base, uint size) | ||
531 | { | ||
532 | int ret = 0; | ||
533 | |||
534 | /* pad mux initialization */ | ||
535 | pmx_driver->base = ioremap(base, size); | ||
536 | if (!pmx_driver->base) { | ||
537 | ret = -ENOMEM; | ||
538 | goto pmx_fail; | ||
539 | } | ||
540 | |||
541 | ret = pmx_register(pmx_driver); | ||
542 | iounmap(pmx_driver->base); | ||
543 | |||
544 | pmx_fail: | ||
545 | if (ret) | ||
546 | printk(KERN_ERR "padmux: registeration failed. err no: %d\n", | ||
547 | ret); | ||
548 | } | ||