diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh4a/setup-sh7723.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7723.c | 138 |
1 files changed, 136 insertions, 2 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index a0470f2f547..cd6baffdc89 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c | |||
@@ -12,8 +12,94 @@ | |||
12 | #include <linux/serial.h> | 12 | #include <linux/serial.h> |
13 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
14 | #include <linux/serial_sci.h> | 14 | #include <linux/serial_sci.h> |
15 | #include <linux/uio_driver.h> | ||
16 | #include <asm/clock.h> | ||
15 | #include <asm/mmzone.h> | 17 | #include <asm/mmzone.h> |
16 | 18 | ||
19 | static struct uio_info vpu_platform_data = { | ||
20 | .name = "VPU5", | ||
21 | .version = "0", | ||
22 | .irq = 60, | ||
23 | }; | ||
24 | |||
25 | static struct resource vpu_resources[] = { | ||
26 | [0] = { | ||
27 | .name = "VPU", | ||
28 | .start = 0xfe900000, | ||
29 | .end = 0xfe902807, | ||
30 | .flags = IORESOURCE_MEM, | ||
31 | }, | ||
32 | [1] = { | ||
33 | /* place holder for contiguous memory */ | ||
34 | }, | ||
35 | }; | ||
36 | |||
37 | static struct platform_device vpu_device = { | ||
38 | .name = "uio_pdrv_genirq", | ||
39 | .id = 0, | ||
40 | .dev = { | ||
41 | .platform_data = &vpu_platform_data, | ||
42 | }, | ||
43 | .resource = vpu_resources, | ||
44 | .num_resources = ARRAY_SIZE(vpu_resources), | ||
45 | }; | ||
46 | |||
47 | static struct uio_info veu0_platform_data = { | ||
48 | .name = "VEU", | ||
49 | .version = "0", | ||
50 | .irq = 54, | ||
51 | }; | ||
52 | |||
53 | static struct resource veu0_resources[] = { | ||
54 | [0] = { | ||
55 | .name = "VEU2H0", | ||
56 | .start = 0xfe920000, | ||
57 | .end = 0xfe92027b, | ||
58 | .flags = IORESOURCE_MEM, | ||
59 | }, | ||
60 | [1] = { | ||
61 | /* place holder for contiguous memory */ | ||
62 | }, | ||
63 | }; | ||
64 | |||
65 | static struct platform_device veu0_device = { | ||
66 | .name = "uio_pdrv_genirq", | ||
67 | .id = 1, | ||
68 | .dev = { | ||
69 | .platform_data = &veu0_platform_data, | ||
70 | }, | ||
71 | .resource = veu0_resources, | ||
72 | .num_resources = ARRAY_SIZE(veu0_resources), | ||
73 | }; | ||
74 | |||
75 | static struct uio_info veu1_platform_data = { | ||
76 | .name = "VEU", | ||
77 | .version = "0", | ||
78 | .irq = 27, | ||
79 | }; | ||
80 | |||
81 | static struct resource veu1_resources[] = { | ||
82 | [0] = { | ||
83 | .name = "VEU2H1", | ||
84 | .start = 0xfe924000, | ||
85 | .end = 0xfe92427b, | ||
86 | .flags = IORESOURCE_MEM, | ||
87 | }, | ||
88 | [1] = { | ||
89 | /* place holder for contiguous memory */ | ||
90 | }, | ||
91 | }; | ||
92 | |||
93 | static struct platform_device veu1_device = { | ||
94 | .name = "uio_pdrv_genirq", | ||
95 | .id = 2, | ||
96 | .dev = { | ||
97 | .platform_data = &veu1_platform_data, | ||
98 | }, | ||
99 | .resource = veu1_resources, | ||
100 | .num_resources = ARRAY_SIZE(veu1_resources), | ||
101 | }; | ||
102 | |||
17 | static struct plat_sci_port sci_platform_data[] = { | 103 | static struct plat_sci_port sci_platform_data[] = { |
18 | { | 104 | { |
19 | .mapbase = 0xffe00000, | 105 | .mapbase = 0xffe00000, |
@@ -113,14 +199,56 @@ static struct platform_device sh7723_usb_host_device = { | |||
113 | .resource = sh7723_usb_host_resources, | 199 | .resource = sh7723_usb_host_resources, |
114 | }; | 200 | }; |
115 | 201 | ||
202 | static struct resource iic_resources[] = { | ||
203 | [0] = { | ||
204 | .name = "IIC", | ||
205 | .start = 0x04470000, | ||
206 | .end = 0x04470017, | ||
207 | .flags = IORESOURCE_MEM, | ||
208 | }, | ||
209 | [1] = { | ||
210 | .start = 96, | ||
211 | .end = 99, | ||
212 | .flags = IORESOURCE_IRQ, | ||
213 | }, | ||
214 | }; | ||
215 | |||
216 | static struct platform_device iic_device = { | ||
217 | .name = "i2c-sh_mobile", | ||
218 | .num_resources = ARRAY_SIZE(iic_resources), | ||
219 | .resource = iic_resources, | ||
220 | }; | ||
221 | |||
116 | static struct platform_device *sh7723_devices[] __initdata = { | 222 | static struct platform_device *sh7723_devices[] __initdata = { |
117 | &sci_device, | 223 | &sci_device, |
118 | &rtc_device, | 224 | &rtc_device, |
225 | &iic_device, | ||
119 | &sh7723_usb_host_device, | 226 | &sh7723_usb_host_device, |
227 | &vpu_device, | ||
228 | &veu0_device, | ||
229 | &veu1_device, | ||
120 | }; | 230 | }; |
121 | 231 | ||
122 | static int __init sh7723_devices_setup(void) | 232 | static int __init sh7723_devices_setup(void) |
123 | { | 233 | { |
234 | clk_always_enable("mstp031"); /* TLB */ | ||
235 | clk_always_enable("mstp030"); /* IC */ | ||
236 | clk_always_enable("mstp029"); /* OC */ | ||
237 | clk_always_enable("mstp024"); /* FPU */ | ||
238 | clk_always_enable("mstp022"); /* INTC */ | ||
239 | clk_always_enable("mstp020"); /* SuperHyway */ | ||
240 | clk_always_enable("mstp000"); /* MERAM */ | ||
241 | clk_always_enable("mstp109"); /* I2C */ | ||
242 | clk_always_enable("mstp108"); /* RTC */ | ||
243 | clk_always_enable("mstp211"); /* USB */ | ||
244 | clk_always_enable("mstp206"); /* VEU2H1 */ | ||
245 | clk_always_enable("mstp202"); /* VEU2H0 */ | ||
246 | clk_always_enable("mstp201"); /* VPU */ | ||
247 | |||
248 | platform_resource_setup_memory(&vpu_device, "vpu", 2 << 20); | ||
249 | platform_resource_setup_memory(&veu0_device, "veu0", 2 << 20); | ||
250 | platform_resource_setup_memory(&veu1_device, "veu1", 2 << 20); | ||
251 | |||
124 | return platform_add_devices(sh7723_devices, | 252 | return platform_add_devices(sh7723_devices, |
125 | ARRAY_SIZE(sh7723_devices)); | 253 | ARRAY_SIZE(sh7723_devices)); |
126 | } | 254 | } |
@@ -326,8 +454,14 @@ static struct intc_sense_reg sense_registers[] __initdata = { | |||
326 | { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, | 454 | { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, |
327 | }; | 455 | }; |
328 | 456 | ||
329 | static DECLARE_INTC_DESC(intc_desc, "sh7723", vectors, groups, | 457 | static struct intc_mask_reg ack_registers[] __initdata = { |
330 | mask_registers, prio_registers, sense_registers); | 458 | { 0xa4140024, 0, 8, /* INTREQ00 */ |
459 | { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, | ||
460 | }; | ||
461 | |||
462 | static DECLARE_INTC_DESC_ACK(intc_desc, "sh7723", vectors, groups, | ||
463 | mask_registers, prio_registers, sense_registers, | ||
464 | ack_registers); | ||
331 | 465 | ||
332 | void __init plat_irq_setup(void) | 466 | void __init plat_irq_setup(void) |
333 | { | 467 | { |