Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 1 | /* |
| 2 | * SH7206 Setup |
| 3 | * |
| 4 | * Copyright (C) 2006 Yoshinori Sato |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 5 | * Copyright (C) 2009 Paul Mundt |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 6 | * |
| 7 | * This file is subject to the terms and conditions of the GNU General Public |
| 8 | * License. See the file "COPYING" in the main directory of this archive |
| 9 | * for more details. |
| 10 | */ |
| 11 | #include <linux/platform_device.h> |
| 12 | #include <linux/init.h> |
| 13 | #include <linux/serial.h> |
Paul Mundt | 96de1a8 | 2008-02-26 14:52:45 +0900 | [diff] [blame] | 14 | #include <linux/serial_sci.h> |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 15 | #include <linux/sh_cmt.h> |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 16 | #include <linux/sh_mtu2.h> |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 17 | #include <linux/io.h> |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 18 | |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 19 | enum { |
| 20 | UNUSED = 0, |
| 21 | |
| 22 | /* interrupt sources */ |
| 23 | IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, |
| 24 | PINT0, PINT1, PINT2, PINT3, PINT4, PINT5, PINT6, PINT7, |
| 25 | ADC_ADI0, ADC_ADI1, |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 26 | |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 27 | DMAC0, DMAC1, DMAC2, DMAC3, DMAC4, DMAC5, DMAC6, DMAC7, |
| 28 | |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 29 | MTU0_ABCD, MTU0_VEF, MTU1_AB, MTU1_VU, MTU2_AB, MTU2_VU, |
| 30 | MTU3_ABCD, MTU4_ABCD, MTU5, POE2_12, MTU3S_ABCD, MTU4S_ABCD, MTU5S, |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 31 | IIC3, |
| 32 | |
| 33 | CMT0, CMT1, BSC, WDT, |
| 34 | |
| 35 | MTU2_TCI3V, MTU2_TCI4V, MTU2S_TCI3V, MTU2S_TCI4V, |
| 36 | |
| 37 | POE2_OEI3, |
| 38 | |
| 39 | SCIF0, SCIF1, SCIF2, SCIF3, |
| 40 | |
| 41 | /* interrupt groups */ |
| 42 | PINT, |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 43 | }; |
| 44 | |
| 45 | static struct intc_vect vectors[] __initdata = { |
| 46 | INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), |
| 47 | INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), |
| 48 | INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), |
| 49 | INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), |
| 50 | INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), |
| 51 | INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), |
| 52 | INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), |
| 53 | INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), |
| 54 | INTC_IRQ(ADC_ADI0, 92), INTC_IRQ(ADC_ADI1, 96), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 55 | INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), |
| 56 | INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), |
| 57 | INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), |
| 58 | INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), |
| 59 | INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), |
| 60 | INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129), |
| 61 | INTC_IRQ(DMAC6, 132), INTC_IRQ(DMAC6, 133), |
| 62 | INTC_IRQ(DMAC7, 136), INTC_IRQ(DMAC7, 137), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 63 | INTC_IRQ(CMT0, 140), INTC_IRQ(CMT1, 144), |
| 64 | INTC_IRQ(BSC, 148), INTC_IRQ(WDT, 152), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 65 | INTC_IRQ(MTU0_ABCD, 156), INTC_IRQ(MTU0_ABCD, 157), |
| 66 | INTC_IRQ(MTU0_ABCD, 158), INTC_IRQ(MTU0_ABCD, 159), |
| 67 | INTC_IRQ(MTU0_VEF, 160), INTC_IRQ(MTU0_VEF, 161), |
| 68 | INTC_IRQ(MTU0_VEF, 162), |
| 69 | INTC_IRQ(MTU1_AB, 164), INTC_IRQ(MTU1_AB, 165), |
| 70 | INTC_IRQ(MTU1_VU, 168), INTC_IRQ(MTU1_VU, 169), |
| 71 | INTC_IRQ(MTU2_AB, 172), INTC_IRQ(MTU2_AB, 173), |
| 72 | INTC_IRQ(MTU2_VU, 176), INTC_IRQ(MTU2_VU, 177), |
| 73 | INTC_IRQ(MTU3_ABCD, 180), INTC_IRQ(MTU3_ABCD, 181), |
| 74 | INTC_IRQ(MTU3_ABCD, 182), INTC_IRQ(MTU3_ABCD, 183), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 75 | INTC_IRQ(MTU2_TCI3V, 184), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 76 | INTC_IRQ(MTU4_ABCD, 188), INTC_IRQ(MTU4_ABCD, 189), |
| 77 | INTC_IRQ(MTU4_ABCD, 190), INTC_IRQ(MTU4_ABCD, 191), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 78 | INTC_IRQ(MTU2_TCI4V, 192), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 79 | INTC_IRQ(MTU5, 196), INTC_IRQ(MTU5, 197), |
| 80 | INTC_IRQ(MTU5, 198), |
| 81 | INTC_IRQ(POE2_12, 200), INTC_IRQ(POE2_12, 201), |
| 82 | INTC_IRQ(MTU3S_ABCD, 204), INTC_IRQ(MTU3S_ABCD, 205), |
| 83 | INTC_IRQ(MTU3S_ABCD, 206), INTC_IRQ(MTU3S_ABCD, 207), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 84 | INTC_IRQ(MTU2S_TCI3V, 208), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 85 | INTC_IRQ(MTU4S_ABCD, 212), INTC_IRQ(MTU4S_ABCD, 213), |
| 86 | INTC_IRQ(MTU4S_ABCD, 214), INTC_IRQ(MTU4S_ABCD, 215), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 87 | INTC_IRQ(MTU2S_TCI4V, 216), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 88 | INTC_IRQ(MTU5S, 220), INTC_IRQ(MTU5S, 221), |
| 89 | INTC_IRQ(MTU5S, 222), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 90 | INTC_IRQ(POE2_OEI3, 224), |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 91 | INTC_IRQ(IIC3, 228), INTC_IRQ(IIC3, 229), |
| 92 | INTC_IRQ(IIC3, 230), INTC_IRQ(IIC3, 231), |
| 93 | INTC_IRQ(IIC3, 232), |
| 94 | INTC_IRQ(SCIF0, 240), INTC_IRQ(SCIF0, 241), |
| 95 | INTC_IRQ(SCIF0, 242), INTC_IRQ(SCIF0, 243), |
| 96 | INTC_IRQ(SCIF1, 244), INTC_IRQ(SCIF1, 245), |
| 97 | INTC_IRQ(SCIF1, 246), INTC_IRQ(SCIF1, 247), |
| 98 | INTC_IRQ(SCIF2, 248), INTC_IRQ(SCIF2, 249), |
| 99 | INTC_IRQ(SCIF2, 250), INTC_IRQ(SCIF2, 251), |
| 100 | INTC_IRQ(SCIF3, 252), INTC_IRQ(SCIF3, 253), |
| 101 | INTC_IRQ(SCIF3, 254), INTC_IRQ(SCIF3, 255), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 102 | }; |
| 103 | |
| 104 | static struct intc_group groups[] __initdata = { |
| 105 | INTC_GROUP(PINT, PINT0, PINT1, PINT2, PINT3, |
| 106 | PINT4, PINT5, PINT6, PINT7), |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 107 | }; |
| 108 | |
| 109 | static struct intc_prio_reg prio_registers[] __initdata = { |
| 110 | { 0xfffe0818, 0, 16, 4, /* IPR01 */ { IRQ0, IRQ1, IRQ2, IRQ3 } }, |
| 111 | { 0xfffe081a, 0, 16, 4, /* IPR02 */ { IRQ4, IRQ5, IRQ6, IRQ7 } }, |
| 112 | { 0xfffe0820, 0, 16, 4, /* IPR05 */ { PINT, 0, ADC_ADI0, ADC_ADI1 } }, |
| 113 | { 0xfffe0c00, 0, 16, 4, /* IPR06 */ { DMAC0, DMAC1, DMAC2, DMAC3 } }, |
| 114 | { 0xfffe0c02, 0, 16, 4, /* IPR07 */ { DMAC4, DMAC5, DMAC6, DMAC7 } }, |
| 115 | { 0xfffe0c04, 0, 16, 4, /* IPR08 */ { CMT0, CMT1, BSC, WDT } }, |
| 116 | { 0xfffe0c06, 0, 16, 4, /* IPR09 */ { MTU0_ABCD, MTU0_VEF, |
| 117 | MTU1_AB, MTU1_VU } }, |
| 118 | { 0xfffe0c08, 0, 16, 4, /* IPR10 */ { MTU2_AB, MTU2_VU, |
| 119 | MTU3_ABCD, MTU2_TCI3V } }, |
| 120 | { 0xfffe0c0a, 0, 16, 4, /* IPR11 */ { MTU4_ABCD, MTU2_TCI4V, |
| 121 | MTU5, POE2_12 } }, |
| 122 | { 0xfffe0c0c, 0, 16, 4, /* IPR12 */ { MTU3S_ABCD, MTU2S_TCI3V, |
| 123 | MTU4S_ABCD, MTU2S_TCI4V } }, |
| 124 | { 0xfffe0c0e, 0, 16, 4, /* IPR13 */ { MTU5S, POE2_OEI3, IIC3, 0 } }, |
| 125 | { 0xfffe0c10, 0, 16, 4, /* IPR14 */ { SCIF0, SCIF1, SCIF2, SCIF3 } }, |
| 126 | }; |
| 127 | |
| 128 | static struct intc_mask_reg mask_registers[] __initdata = { |
| 129 | { 0xfffe0808, 0, 16, /* PINTER */ |
| 130 | { 0, 0, 0, 0, 0, 0, 0, 0, |
| 131 | PINT7, PINT6, PINT5, PINT4, PINT3, PINT2, PINT1, PINT0 } }, |
| 132 | }; |
| 133 | |
| 134 | static DECLARE_INTC_DESC(intc_desc, "sh7206", vectors, groups, |
Magnus Damm | 7f3edee | 2008-01-10 14:08:55 +0900 | [diff] [blame] | 135 | mask_registers, prio_registers, NULL); |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 136 | |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 137 | static struct plat_sci_port sci_platform_data[] = { |
| 138 | { |
| 139 | .mapbase = 0xfffe8000, |
| 140 | .flags = UPF_BOOT_AUTOCONF, |
| 141 | .type = PORT_SCIF, |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 142 | .irqs = { 240, 240, 240, 240 }, |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 143 | }, { |
| 144 | .mapbase = 0xfffe8800, |
| 145 | .flags = UPF_BOOT_AUTOCONF, |
| 146 | .type = PORT_SCIF, |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 147 | .irqs = { 244, 244, 244, 244 }, |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 148 | }, { |
| 149 | .mapbase = 0xfffe9000, |
| 150 | .flags = UPF_BOOT_AUTOCONF, |
| 151 | .type = PORT_SCIF, |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 152 | .irqs = { 248, 248, 248, 248 }, |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 153 | }, { |
| 154 | .mapbase = 0xfffe9800, |
| 155 | .flags = UPF_BOOT_AUTOCONF, |
| 156 | .type = PORT_SCIF, |
Paul Mundt | f858abb | 2009-03-06 18:34:15 +0900 | [diff] [blame] | 157 | .irqs = { 252, 252, 252, 252 }, |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 158 | }, { |
| 159 | .flags = 0, |
| 160 | } |
| 161 | }; |
| 162 | |
| 163 | static struct platform_device sci_device = { |
| 164 | .name = "sh-sci", |
| 165 | .id = -1, |
| 166 | .dev = { |
| 167 | .platform_data = sci_platform_data, |
| 168 | }, |
| 169 | }; |
| 170 | |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 171 | static struct sh_cmt_config cmt0_platform_data = { |
| 172 | .name = "CMT0", |
| 173 | .channel_offset = 0x02, |
| 174 | .timer_bit = 0, |
| 175 | .clk = "module_clk", |
| 176 | .clockevent_rating = 125, |
| 177 | .clocksource_rating = 0, /* disabled due to code generation issues */ |
| 178 | }; |
| 179 | |
| 180 | static struct resource cmt0_resources[] = { |
| 181 | [0] = { |
| 182 | .name = "CMT0", |
| 183 | .start = 0xfffec002, |
| 184 | .end = 0xfffec007, |
| 185 | .flags = IORESOURCE_MEM, |
| 186 | }, |
| 187 | [1] = { |
| 188 | .start = 140, |
| 189 | .flags = IORESOURCE_IRQ, |
| 190 | }, |
| 191 | }; |
| 192 | |
| 193 | static struct platform_device cmt0_device = { |
| 194 | .name = "sh_cmt", |
| 195 | .id = 0, |
| 196 | .dev = { |
| 197 | .platform_data = &cmt0_platform_data, |
| 198 | }, |
| 199 | .resource = cmt0_resources, |
| 200 | .num_resources = ARRAY_SIZE(cmt0_resources), |
| 201 | }; |
| 202 | |
| 203 | static struct sh_cmt_config cmt1_platform_data = { |
| 204 | .name = "CMT1", |
| 205 | .channel_offset = 0x08, |
| 206 | .timer_bit = 1, |
| 207 | .clk = "module_clk", |
| 208 | .clockevent_rating = 125, |
| 209 | .clocksource_rating = 0, /* disabled due to code generation issues */ |
| 210 | }; |
| 211 | |
| 212 | static struct resource cmt1_resources[] = { |
| 213 | [0] = { |
| 214 | .name = "CMT1", |
| 215 | .start = 0xfffec008, |
| 216 | .end = 0xfffec00d, |
| 217 | .flags = IORESOURCE_MEM, |
| 218 | }, |
| 219 | [1] = { |
| 220 | .start = 144, |
| 221 | .flags = IORESOURCE_IRQ, |
| 222 | }, |
| 223 | }; |
| 224 | |
| 225 | static struct platform_device cmt1_device = { |
| 226 | .name = "sh_cmt", |
| 227 | .id = 1, |
| 228 | .dev = { |
| 229 | .platform_data = &cmt1_platform_data, |
| 230 | }, |
| 231 | .resource = cmt1_resources, |
| 232 | .num_resources = ARRAY_SIZE(cmt1_resources), |
| 233 | }; |
| 234 | |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 235 | static struct sh_mtu2_config mtu2_0_platform_data = { |
| 236 | .name = "MTU2_0", |
| 237 | .channel_offset = -0x80, |
| 238 | .timer_bit = 0, |
| 239 | .clk = "module_clk", |
| 240 | .clockevent_rating = 200, |
| 241 | }; |
| 242 | |
| 243 | static struct resource mtu2_0_resources[] = { |
| 244 | [0] = { |
| 245 | .name = "MTU2_0", |
| 246 | .start = 0xfffe4300, |
| 247 | .end = 0xfffe4326, |
| 248 | .flags = IORESOURCE_MEM, |
| 249 | }, |
| 250 | [1] = { |
| 251 | .start = 156, |
| 252 | .flags = IORESOURCE_IRQ, |
| 253 | }, |
| 254 | }; |
| 255 | |
| 256 | static struct platform_device mtu2_0_device = { |
| 257 | .name = "sh_mtu2", |
| 258 | .id = 0, |
| 259 | .dev = { |
| 260 | .platform_data = &mtu2_0_platform_data, |
| 261 | }, |
| 262 | .resource = mtu2_0_resources, |
| 263 | .num_resources = ARRAY_SIZE(mtu2_0_resources), |
| 264 | }; |
| 265 | |
| 266 | static struct sh_mtu2_config mtu2_1_platform_data = { |
| 267 | .name = "MTU2_1", |
| 268 | .channel_offset = -0x100, |
| 269 | .timer_bit = 1, |
| 270 | .clk = "module_clk", |
| 271 | .clockevent_rating = 200, |
| 272 | }; |
| 273 | |
| 274 | static struct resource mtu2_1_resources[] = { |
| 275 | [0] = { |
| 276 | .name = "MTU2_1", |
| 277 | .start = 0xfffe4380, |
| 278 | .end = 0xfffe4390, |
| 279 | .flags = IORESOURCE_MEM, |
| 280 | }, |
| 281 | [1] = { |
| 282 | .start = 164, |
| 283 | .flags = IORESOURCE_IRQ, |
| 284 | }, |
| 285 | }; |
| 286 | |
| 287 | static struct platform_device mtu2_1_device = { |
| 288 | .name = "sh_mtu2", |
| 289 | .id = 1, |
| 290 | .dev = { |
| 291 | .platform_data = &mtu2_1_platform_data, |
| 292 | }, |
| 293 | .resource = mtu2_1_resources, |
| 294 | .num_resources = ARRAY_SIZE(mtu2_1_resources), |
| 295 | }; |
| 296 | |
| 297 | static struct sh_mtu2_config mtu2_2_platform_data = { |
| 298 | .name = "MTU2_2", |
| 299 | .channel_offset = 0x80, |
| 300 | .timer_bit = 2, |
| 301 | .clk = "module_clk", |
| 302 | .clockevent_rating = 200, |
| 303 | }; |
| 304 | |
| 305 | static struct resource mtu2_2_resources[] = { |
| 306 | [0] = { |
| 307 | .name = "MTU2_2", |
| 308 | .start = 0xfffe4000, |
| 309 | .end = 0xfffe400a, |
| 310 | .flags = IORESOURCE_MEM, |
| 311 | }, |
| 312 | [1] = { |
| 313 | .start = 180, |
| 314 | .flags = IORESOURCE_IRQ, |
| 315 | }, |
| 316 | }; |
| 317 | |
| 318 | static struct platform_device mtu2_2_device = { |
| 319 | .name = "sh_mtu2", |
| 320 | .id = 2, |
| 321 | .dev = { |
| 322 | .platform_data = &mtu2_2_platform_data, |
| 323 | }, |
| 324 | .resource = mtu2_2_resources, |
| 325 | .num_resources = ARRAY_SIZE(mtu2_2_resources), |
| 326 | }; |
| 327 | |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 328 | static struct platform_device *sh7206_devices[] __initdata = { |
| 329 | &sci_device, |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 330 | &cmt0_device, |
| 331 | &cmt1_device, |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 332 | &mtu2_0_device, |
| 333 | &mtu2_1_device, |
| 334 | &mtu2_2_device, |
Yoshinori Sato | 9d4436a | 2006-11-05 15:40:13 +0900 | [diff] [blame] | 335 | }; |
| 336 | |
| 337 | static int __init sh7206_devices_setup(void) |
| 338 | { |
| 339 | return platform_add_devices(sh7206_devices, |
| 340 | ARRAY_SIZE(sh7206_devices)); |
| 341 | } |
| 342 | __initcall(sh7206_devices_setup); |
Yoshinori Sato | 780a156 | 2006-12-07 18:01:23 +0900 | [diff] [blame] | 343 | |
Magnus Damm | 90015c8 | 2007-07-18 17:57:34 +0900 | [diff] [blame] | 344 | void __init plat_irq_setup(void) |
Yoshinori Sato | 780a156 | 2006-12-07 18:01:23 +0900 | [diff] [blame] | 345 | { |
Magnus Damm | 2eb0303 | 2007-08-17 00:53:41 +0900 | [diff] [blame] | 346 | register_intc_controller(&intc_desc); |
Yoshinori Sato | 780a156 | 2006-12-07 18:01:23 +0900 | [diff] [blame] | 347 | } |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 348 | |
| 349 | static struct platform_device *sh7206_early_devices[] __initdata = { |
| 350 | &cmt0_device, |
| 351 | &cmt1_device, |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 352 | &mtu2_0_device, |
| 353 | &mtu2_1_device, |
| 354 | &mtu2_2_device, |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 355 | }; |
| 356 | |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 357 | #define STBCR3 0xfffe0408 |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 358 | #define STBCR4 0xfffe040c |
| 359 | |
| 360 | void __init plat_early_device_setup(void) |
| 361 | { |
| 362 | /* enable CMT clock */ |
| 363 | __raw_writeb(__raw_readb(STBCR4) & ~0x04, STBCR4); |
| 364 | |
Magnus Damm | da107c6 | 2009-04-30 07:06:26 +0000 | [diff] [blame^] | 365 | /* enable MTU2 clock */ |
| 366 | __raw_writeb(__raw_readb(STBCR3) & ~0x20, STBCR3); |
| 367 | |
Magnus Damm | 698aa99 | 2009-04-30 04:08:18 +0000 | [diff] [blame] | 368 | early_platform_add_devices(sh7206_early_devices, |
| 369 | ARRAY_SIZE(sh7206_early_devices)); |
| 370 | } |