diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh3/setup-sh7720.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh3/setup-sh7720.c | 78 |
1 files changed, 64 insertions, 14 deletions
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c index a0929b8a95ae..3855ea4c21c8 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c | |||
@@ -85,9 +85,62 @@ static struct platform_device sci_device = { | |||
85 | }, | 85 | }, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static struct resource usb_ohci_resources[] = { | ||
89 | [0] = { | ||
90 | .start = 0xA4428000, | ||
91 | .end = 0xA44280FF, | ||
92 | .flags = IORESOURCE_MEM, | ||
93 | }, | ||
94 | [1] = { | ||
95 | .start = 67, | ||
96 | .end = 67, | ||
97 | .flags = IORESOURCE_IRQ, | ||
98 | }, | ||
99 | }; | ||
100 | |||
101 | static u64 usb_ohci_dma_mask = 0xffffffffUL; | ||
102 | static struct platform_device usb_ohci_device = { | ||
103 | .name = "sh_ohci", | ||
104 | .id = -1, | ||
105 | .dev = { | ||
106 | .dma_mask = &usb_ohci_dma_mask, | ||
107 | .coherent_dma_mask = 0xffffffff, | ||
108 | }, | ||
109 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | ||
110 | .resource = usb_ohci_resources, | ||
111 | }; | ||
112 | |||
113 | static struct resource usbf_resources[] = { | ||
114 | [0] = { | ||
115 | .name = "sh_udc", | ||
116 | .start = 0xA4420000, | ||
117 | .end = 0xA44200FF, | ||
118 | .flags = IORESOURCE_MEM, | ||
119 | }, | ||
120 | [1] = { | ||
121 | .name = "sh_udc", | ||
122 | .start = 65, | ||
123 | .end = 65, | ||
124 | .flags = IORESOURCE_IRQ, | ||
125 | }, | ||
126 | }; | ||
127 | |||
128 | static struct platform_device usbf_device = { | ||
129 | .name = "sh_udc", | ||
130 | .id = -1, | ||
131 | .dev = { | ||
132 | .dma_mask = NULL, | ||
133 | .coherent_dma_mask = 0xffffffff, | ||
134 | }, | ||
135 | .num_resources = ARRAY_SIZE(usbf_resources), | ||
136 | .resource = usbf_resources, | ||
137 | }; | ||
138 | |||
88 | static struct platform_device *sh7720_devices[] __initdata = { | 139 | static struct platform_device *sh7720_devices[] __initdata = { |
89 | &rtc_device, | 140 | &rtc_device, |
90 | &sci_device, | 141 | &sci_device, |
142 | &usb_ohci_device, | ||
143 | &usbf_device, | ||
91 | }; | 144 | }; |
92 | 145 | ||
93 | static int __init sh7720_devices_setup(void) | 146 | static int __init sh7720_devices_setup(void) |
@@ -127,8 +180,11 @@ static struct intc_vect vectors[] __initdata = { | |||
127 | INTC_VECT(USBF_SPD, 0x6e0), INTC_VECT(DMAC1_DEI0, 0x800), | 180 | INTC_VECT(USBF_SPD, 0x6e0), INTC_VECT(DMAC1_DEI0, 0x800), |
128 | INTC_VECT(DMAC1_DEI1, 0x820), INTC_VECT(DMAC1_DEI2, 0x840), | 181 | INTC_VECT(DMAC1_DEI1, 0x820), INTC_VECT(DMAC1_DEI2, 0x840), |
129 | INTC_VECT(DMAC1_DEI3, 0x860), INTC_VECT(LCDC, 0x900), | 182 | INTC_VECT(DMAC1_DEI3, 0x860), INTC_VECT(LCDC, 0x900), |
130 | INTC_VECT(SSL, 0x980), INTC_VECT(USBFI0, 0xa20), | 183 | #if defined(CONFIG_CPU_SUBTYPE_SH7720) |
131 | INTC_VECT(USBFI1, 0xa40), INTC_VECT(USBHI, 0xa60), | 184 | INTC_VECT(SSL, 0x980), |
185 | #endif | ||
186 | INTC_VECT(USBFI0, 0xa20), INTC_VECT(USBFI1, 0xa40), | ||
187 | INTC_VECT(USBHI, 0xa60), | ||
132 | INTC_VECT(DMAC2_DEI4, 0xb80), INTC_VECT(DMAC2_DEI5, 0xba0), | 188 | INTC_VECT(DMAC2_DEI4, 0xb80), INTC_VECT(DMAC2_DEI5, 0xba0), |
133 | INTC_VECT(ADC, 0xbe0), INTC_VECT(SCIF0, 0xc00), | 189 | INTC_VECT(ADC, 0xbe0), INTC_VECT(SCIF0, 0xc00), |
134 | INTC_VECT(SCIF1, 0xc20), INTC_VECT(PINT07, 0xc80), | 190 | INTC_VECT(SCIF1, 0xc20), INTC_VECT(PINT07, 0xc80), |
@@ -153,22 +209,16 @@ static struct intc_group groups[] __initdata = { | |||
153 | INTC_GROUP(MMC, MMCI0, MMCI1, MMCI2, MMCI3), | 209 | INTC_GROUP(MMC, MMCI0, MMCI1, MMCI2, MMCI3), |
154 | }; | 210 | }; |
155 | 211 | ||
156 | static struct intc_prio priorities[] __initdata = { | ||
157 | INTC_PRIO(SCIF0, 2), | ||
158 | INTC_PRIO(SCIF1, 2), | ||
159 | INTC_PRIO(DMAC1, 1), | ||
160 | INTC_PRIO(DMAC2, 1), | ||
161 | INTC_PRIO(RTC, 2), | ||
162 | INTC_PRIO(TMU, 2), | ||
163 | INTC_PRIO(TPU, 2), | ||
164 | }; | ||
165 | |||
166 | static struct intc_prio_reg prio_registers[] __initdata = { | 212 | static struct intc_prio_reg prio_registers[] __initdata = { |
167 | { 0xA414FEE2UL, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, | 213 | { 0xA414FEE2UL, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, |
168 | { 0xA414FEE4UL, 0, 16, 4, /* IPRB */ { WDT, REF_RCMI, SIM, 0 } }, | 214 | { 0xA414FEE4UL, 0, 16, 4, /* IPRB */ { WDT, REF_RCMI, SIM, 0 } }, |
169 | { 0xA4140016UL, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } }, | 215 | { 0xA4140016UL, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } }, |
170 | { 0xA4140018UL, 0, 16, 4, /* IPRD */ { USBF_SPD, TMU_SUNI, IRQ5, IRQ4 } }, | 216 | { 0xA4140018UL, 0, 16, 4, /* IPRD */ { USBF_SPD, TMU_SUNI, IRQ5, IRQ4 } }, |
217 | #if defined(CONFIG_CPU_SUBTYPE_SH7720) | ||
171 | { 0xA414001AUL, 0, 16, 4, /* IPRE */ { DMAC1, 0, LCDC, SSL } }, | 218 | { 0xA414001AUL, 0, 16, 4, /* IPRE */ { DMAC1, 0, LCDC, SSL } }, |
219 | #else | ||
220 | { 0xA414001AUL, 0, 16, 4, /* IPRE */ { DMAC1, 0, LCDC, 0 } }, | ||
221 | #endif | ||
172 | { 0xA4080000UL, 0, 16, 4, /* IPRF */ { ADC, DMAC2, USBFI, CMT } }, | 222 | { 0xA4080000UL, 0, 16, 4, /* IPRF */ { ADC, DMAC2, USBFI, CMT } }, |
173 | { 0xA4080002UL, 0, 16, 4, /* IPRG */ { SCIF0, SCIF1, 0, 0 } }, | 223 | { 0xA4080002UL, 0, 16, 4, /* IPRG */ { SCIF0, SCIF1, 0, 0 } }, |
174 | { 0xA4080004UL, 0, 16, 4, /* IPRH */ { PINT07, PINT815, TPU, IIC } }, | 224 | { 0xA4080004UL, 0, 16, 4, /* IPRH */ { PINT07, PINT815, TPU, IIC } }, |
@@ -177,7 +227,7 @@ static struct intc_prio_reg prio_registers[] __initdata = { | |||
177 | }; | 227 | }; |
178 | 228 | ||
179 | static DECLARE_INTC_DESC(intc_desc, "sh7720", vectors, groups, | 229 | static DECLARE_INTC_DESC(intc_desc, "sh7720", vectors, groups, |
180 | priorities, NULL, prio_registers, NULL); | 230 | NULL, prio_registers, NULL); |
181 | 231 | ||
182 | static struct intc_sense_reg sense_registers[] __initdata = { | 232 | static struct intc_sense_reg sense_registers[] __initdata = { |
183 | { INTC_ICR1, 16, 2, { 0, 0, IRQ5, IRQ4, IRQ3, IRQ2, IRQ1, IRQ0 } }, | 233 | { INTC_ICR1, 16, 2, { 0, 0, IRQ5, IRQ4, IRQ3, IRQ2, IRQ1, IRQ0 } }, |
@@ -190,7 +240,7 @@ static struct intc_vect vectors_irq[] __initdata = { | |||
190 | }; | 240 | }; |
191 | 241 | ||
192 | static DECLARE_INTC_DESC(intc_irq_desc, "sh7720-irq", vectors_irq, | 242 | static DECLARE_INTC_DESC(intc_irq_desc, "sh7720-irq", vectors_irq, |
193 | NULL, priorities, NULL, prio_registers, sense_registers); | 243 | NULL, NULL, prio_registers, sense_registers); |
194 | 244 | ||
195 | void __init plat_irq_setup_pins(int mode) | 245 | void __init plat_irq_setup_pins(int mode) |
196 | { | 246 | { |