diff options
author | Olof Johansson <olof@lixom.net> | 2012-03-13 20:38:09 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-03-13 20:38:09 -0400 |
commit | ae0b82504e515fdb9bc23c0b770d2b30efd49dc9 (patch) | |
tree | 665d1f26b32f9e68346a9529388fbadec519e865 /arch/arm/mach-shmobile | |
parent | f7c8faedf98aa5ec372e0191078ac7fe1e7fb067 (diff) | |
parent | a6e24019468009a21b674e392d74283a90f415dd (diff) |
Merge branch 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas into next/soc
* 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas: (234 commits)
ARM: shmobile: remove additional __io() macro use
ARM: mach-shmobile: default to no earlytimer
ARM: mach-shmobile: r8a7779 and Marzen timer rework
ARM: mach-shmobile: r8a7740 and Bonito timer rework
ARM: mach-shmobile: sh73a0, AG5EVM and Kota2 timer rework
ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework
ARM: mach-shmobile: sh7377 and G4EVM timer rework
ARM: mach-shmobile: sh7367 and G3EVM timer rework
ARM: mach-shmobile: add shmobile_earlytimer_init()
ARM: mach-shmobile: Move sh7372 AP4EVB external clk setup
ARM: mach-shmobile: Move sh7372 Mackerel external clk setup
ARM: mach-shmobile: rename clk_init() to shmobile_clk_init()
ARM: mach-shmobile: r8a7779 L2 cache support
ARM: mach-shmobile: r8a7779 map_io and init_early update
ARM: mach-shmobile: r8a7740 map_io and init_early update
ARM: mach-shmobile: sh73a0 map_io and init_early update
ARM: mach-shmobile: sh7372 map_io and init_early update
ARM: mach-shmobile: sh7377 map_io and init_early update
ARM: mach-shmobile: sh7367 map_io and init_early update
sh: remove clk_ops
...
(includes an update to v3.3-rc7)
Conflicts:
arch/arm/mach-omap2/id.c
Diffstat (limited to 'arch/arm/mach-shmobile')
23 files changed, 306 insertions, 337 deletions
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index 068b754bc348..675660d951d0 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -46,8 +46,6 @@ | |||
46 | #include <mach/common.h> | 46 | #include <mach/common.h> |
47 | #include <asm/mach-types.h> | 47 | #include <asm/mach-types.h> |
48 | #include <asm/mach/arch.h> | 48 | #include <asm/mach/arch.h> |
49 | #include <asm/mach/map.h> | ||
50 | #include <asm/mach/time.h> | ||
51 | #include <asm/hardware/gic.h> | 49 | #include <asm/hardware/gic.h> |
52 | #include <asm/hardware/cache-l2x0.h> | 50 | #include <asm/hardware/cache-l2x0.h> |
53 | #include <asm/traps.h> | 51 | #include <asm/traps.h> |
@@ -486,27 +484,6 @@ static struct platform_device *ag5evm_devices[] __initdata = { | |||
486 | &sdhi1_device, | 484 | &sdhi1_device, |
487 | }; | 485 | }; |
488 | 486 | ||
489 | static struct map_desc ag5evm_io_desc[] __initdata = { | ||
490 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
491 | * used by CPGA, INTC and PFC. | ||
492 | */ | ||
493 | { | ||
494 | .virtual = 0xe6000000, | ||
495 | .pfn = __phys_to_pfn(0xe6000000), | ||
496 | .length = 256 << 20, | ||
497 | .type = MT_DEVICE_NONSHARED | ||
498 | }, | ||
499 | }; | ||
500 | |||
501 | static void __init ag5evm_map_io(void) | ||
502 | { | ||
503 | iotable_init(ag5evm_io_desc, ARRAY_SIZE(ag5evm_io_desc)); | ||
504 | |||
505 | /* setup early devices and console here as well */ | ||
506 | sh73a0_add_early_devices(); | ||
507 | shmobile_setup_console(); | ||
508 | } | ||
509 | |||
510 | static void __init ag5evm_init(void) | 487 | static void __init ag5evm_init(void) |
511 | { | 488 | { |
512 | sh73a0_pinmux_init(); | 489 | sh73a0_pinmux_init(); |
@@ -622,22 +599,12 @@ static void __init ag5evm_init(void) | |||
622 | platform_add_devices(ag5evm_devices, ARRAY_SIZE(ag5evm_devices)); | 599 | platform_add_devices(ag5evm_devices, ARRAY_SIZE(ag5evm_devices)); |
623 | } | 600 | } |
624 | 601 | ||
625 | static void __init ag5evm_timer_init(void) | ||
626 | { | ||
627 | sh73a0_clock_init(); | ||
628 | shmobile_timer.init(); | ||
629 | return; | ||
630 | } | ||
631 | |||
632 | struct sys_timer ag5evm_timer = { | ||
633 | .init = ag5evm_timer_init, | ||
634 | }; | ||
635 | |||
636 | MACHINE_START(AG5EVM, "ag5evm") | 602 | MACHINE_START(AG5EVM, "ag5evm") |
637 | .map_io = ag5evm_map_io, | 603 | .map_io = sh73a0_map_io, |
604 | .init_early = sh73a0_add_early_devices, | ||
638 | .nr_irqs = NR_IRQS_LEGACY, | 605 | .nr_irqs = NR_IRQS_LEGACY, |
639 | .init_irq = sh73a0_init_irq, | 606 | .init_irq = sh73a0_init_irq, |
640 | .handle_irq = gic_handle_irq, | 607 | .handle_irq = gic_handle_irq, |
641 | .init_machine = ag5evm_init, | 608 | .init_machine = ag5evm_init, |
642 | .timer = &ag5evm_timer, | 609 | .timer = &shmobile_timer, |
643 | MACHINE_END | 610 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index eeb4d9664584..d07ec186a6cf 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -61,8 +61,6 @@ | |||
61 | 61 | ||
62 | #include <asm/mach-types.h> | 62 | #include <asm/mach-types.h> |
63 | #include <asm/mach/arch.h> | 63 | #include <asm/mach/arch.h> |
64 | #include <asm/mach/map.h> | ||
65 | #include <asm/mach/time.h> | ||
66 | #include <asm/setup.h> | 64 | #include <asm/setup.h> |
67 | 65 | ||
68 | /* | 66 | /* |
@@ -1190,27 +1188,6 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1190 | }, | 1188 | }, |
1191 | }; | 1189 | }; |
1192 | 1190 | ||
1193 | static struct map_desc ap4evb_io_desc[] __initdata = { | ||
1194 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
1195 | * used by CPGA, INTC and PFC. | ||
1196 | */ | ||
1197 | { | ||
1198 | .virtual = 0xe6000000, | ||
1199 | .pfn = __phys_to_pfn(0xe6000000), | ||
1200 | .length = 256 << 20, | ||
1201 | .type = MT_DEVICE_NONSHARED | ||
1202 | }, | ||
1203 | }; | ||
1204 | |||
1205 | static void __init ap4evb_map_io(void) | ||
1206 | { | ||
1207 | iotable_init(ap4evb_io_desc, ARRAY_SIZE(ap4evb_io_desc)); | ||
1208 | |||
1209 | /* setup early devices and console here as well */ | ||
1210 | sh7372_add_early_devices(); | ||
1211 | shmobile_setup_console(); | ||
1212 | } | ||
1213 | |||
1214 | #define GPIO_PORT9CR 0xE6051009 | 1191 | #define GPIO_PORT9CR 0xE6051009 |
1215 | #define GPIO_PORT10CR 0xE605100A | 1192 | #define GPIO_PORT10CR 0xE605100A |
1216 | #define USCCR1 0xE6058144 | 1193 | #define USCCR1 0xE6058144 |
@@ -1219,6 +1196,9 @@ static void __init ap4evb_init(void) | |||
1219 | u32 srcr4; | 1196 | u32 srcr4; |
1220 | struct clk *clk; | 1197 | struct clk *clk; |
1221 | 1198 | ||
1199 | /* External clock source */ | ||
1200 | clk_set_rate(&sh7372_dv_clki_clk, 27000000); | ||
1201 | |||
1222 | sh7372_pinmux_init(); | 1202 | sh7372_pinmux_init(); |
1223 | 1203 | ||
1224 | /* enable SCIFA0 */ | 1204 | /* enable SCIFA0 */ |
@@ -1455,23 +1435,11 @@ static void __init ap4evb_init(void) | |||
1455 | pm_clk_add(&lcdc1_device.dev, "hdmi"); | 1435 | pm_clk_add(&lcdc1_device.dev, "hdmi"); |
1456 | } | 1436 | } |
1457 | 1437 | ||
1458 | static void __init ap4evb_timer_init(void) | ||
1459 | { | ||
1460 | sh7372_clock_init(); | ||
1461 | shmobile_timer.init(); | ||
1462 | |||
1463 | /* External clock source */ | ||
1464 | clk_set_rate(&sh7372_dv_clki_clk, 27000000); | ||
1465 | } | ||
1466 | |||
1467 | static struct sys_timer ap4evb_timer = { | ||
1468 | .init = ap4evb_timer_init, | ||
1469 | }; | ||
1470 | |||
1471 | MACHINE_START(AP4EVB, "ap4evb") | 1438 | MACHINE_START(AP4EVB, "ap4evb") |
1472 | .map_io = ap4evb_map_io, | 1439 | .map_io = sh7372_map_io, |
1440 | .init_early = sh7372_add_early_devices, | ||
1473 | .init_irq = sh7372_init_irq, | 1441 | .init_irq = sh7372_init_irq, |
1474 | .handle_irq = shmobile_handle_irq_intc, | 1442 | .handle_irq = shmobile_handle_irq_intc, |
1475 | .init_machine = ap4evb_init, | 1443 | .init_machine = ap4evb_init, |
1476 | .timer = &ap4evb_timer, | 1444 | .timer = &shmobile_timer, |
1477 | MACHINE_END | 1445 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-bonito.c b/arch/arm/mach-shmobile/board-bonito.c index 4d2201622323..d062becd5460 100644 --- a/arch/arm/mach-shmobile/board-bonito.c +++ b/arch/arm/mach-shmobile/board-bonito.c | |||
@@ -327,28 +327,6 @@ static struct platform_device *bonito_base_devices[] __initdata = { | |||
327 | * map I/O | 327 | * map I/O |
328 | */ | 328 | */ |
329 | static struct map_desc bonito_io_desc[] __initdata = { | 329 | static struct map_desc bonito_io_desc[] __initdata = { |
330 | /* | ||
331 | * for CPGA/INTC/PFC | ||
332 | * 0xe6000000-0xefffffff -> 0xe6000000-0xefffffff | ||
333 | */ | ||
334 | { | ||
335 | .virtual = 0xe6000000, | ||
336 | .pfn = __phys_to_pfn(0xe6000000), | ||
337 | .length = 160 << 20, | ||
338 | .type = MT_DEVICE_NONSHARED | ||
339 | }, | ||
340 | #ifdef CONFIG_CACHE_L2X0 | ||
341 | /* | ||
342 | * for l2x0_init() | ||
343 | * 0xf0100000-0xf0101000 -> 0xf0002000-0xf0003000 | ||
344 | */ | ||
345 | { | ||
346 | .virtual = 0xf0002000, | ||
347 | .pfn = __phys_to_pfn(0xf0100000), | ||
348 | .length = PAGE_SIZE, | ||
349 | .type = MT_DEVICE_NONSHARED | ||
350 | }, | ||
351 | #endif | ||
352 | /* | 330 | /* |
353 | * for FPGA (0x1800000-0x19ffffff) | 331 | * for FPGA (0x1800000-0x19ffffff) |
354 | * 0x18000000-0x18002000 -> 0xf0003000-0xf0005000 | 332 | * 0x18000000-0x18002000 -> 0xf0003000-0xf0005000 |
@@ -363,11 +341,8 @@ static struct map_desc bonito_io_desc[] __initdata = { | |||
363 | 341 | ||
364 | static void __init bonito_map_io(void) | 342 | static void __init bonito_map_io(void) |
365 | { | 343 | { |
344 | r8a7740_map_io(); | ||
366 | iotable_init(bonito_io_desc, ARRAY_SIZE(bonito_io_desc)); | 345 | iotable_init(bonito_io_desc, ARRAY_SIZE(bonito_io_desc)); |
367 | |||
368 | /* setup early devices and console here as well */ | ||
369 | r8a7740_add_early_devices(); | ||
370 | shmobile_setup_console(); | ||
371 | } | 346 | } |
372 | 347 | ||
373 | /* | 348 | /* |
@@ -491,7 +466,7 @@ static void __init bonito_init(void) | |||
491 | } | 466 | } |
492 | } | 467 | } |
493 | 468 | ||
494 | static void __init bonito_timer_init(void) | 469 | static void __init bonito_earlytimer_init(void) |
495 | { | 470 | { |
496 | u16 val; | 471 | u16 val; |
497 | u8 md_ck = 0; | 472 | u8 md_ck = 0; |
@@ -506,17 +481,22 @@ static void __init bonito_timer_init(void) | |||
506 | md_ck |= MD_CK0; | 481 | md_ck |= MD_CK0; |
507 | 482 | ||
508 | r8a7740_clock_init(md_ck); | 483 | r8a7740_clock_init(md_ck); |
509 | shmobile_timer.init(); | 484 | shmobile_earlytimer_init(); |
510 | } | 485 | } |
511 | 486 | ||
512 | struct sys_timer bonito_timer = { | 487 | void __init bonito_add_early_devices(void) |
513 | .init = bonito_timer_init, | 488 | { |
514 | }; | 489 | r8a7740_add_early_devices(); |
490 | |||
491 | /* override timer setup with board-specific code */ | ||
492 | shmobile_timer.init = bonito_earlytimer_init; | ||
493 | } | ||
515 | 494 | ||
516 | MACHINE_START(BONITO, "bonito") | 495 | MACHINE_START(BONITO, "bonito") |
517 | .map_io = bonito_map_io, | 496 | .map_io = bonito_map_io, |
497 | .init_early = bonito_add_early_devices, | ||
518 | .init_irq = r8a7740_init_irq, | 498 | .init_irq = r8a7740_init_irq, |
519 | .handle_irq = shmobile_handle_irq_intc, | 499 | .handle_irq = shmobile_handle_irq_intc, |
520 | .init_machine = bonito_init, | 500 | .init_machine = bonito_init, |
521 | .timer = &bonito_timer, | 501 | .timer = &shmobile_timer, |
522 | MACHINE_END | 502 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c index 72d557281b1f..b627e89037f5 100644 --- a/arch/arm/mach-shmobile/board-g3evm.c +++ b/arch/arm/mach-shmobile/board-g3evm.c | |||
@@ -37,8 +37,6 @@ | |||
37 | #include <mach/common.h> | 37 | #include <mach/common.h> |
38 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
39 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
40 | #include <asm/mach/map.h> | ||
41 | #include <asm/mach/time.h> | ||
42 | 40 | ||
43 | /* | 41 | /* |
44 | * IrDA | 42 | * IrDA |
@@ -246,27 +244,6 @@ static struct platform_device *g3evm_devices[] __initdata = { | |||
246 | &irda_device, | 244 | &irda_device, |
247 | }; | 245 | }; |
248 | 246 | ||
249 | static struct map_desc g3evm_io_desc[] __initdata = { | ||
250 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
251 | * used by CPGA, INTC and PFC. | ||
252 | */ | ||
253 | { | ||
254 | .virtual = 0xe6000000, | ||
255 | .pfn = __phys_to_pfn(0xe6000000), | ||
256 | .length = 256 << 20, | ||
257 | .type = MT_DEVICE_NONSHARED | ||
258 | }, | ||
259 | }; | ||
260 | |||
261 | static void __init g3evm_map_io(void) | ||
262 | { | ||
263 | iotable_init(g3evm_io_desc, ARRAY_SIZE(g3evm_io_desc)); | ||
264 | |||
265 | /* setup early devices and console here as well */ | ||
266 | sh7367_add_early_devices(); | ||
267 | shmobile_setup_console(); | ||
268 | } | ||
269 | |||
270 | static void __init g3evm_init(void) | 247 | static void __init g3evm_init(void) |
271 | { | 248 | { |
272 | sh7367_pinmux_init(); | 249 | sh7367_pinmux_init(); |
@@ -354,20 +331,11 @@ static void __init g3evm_init(void) | |||
354 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); | 331 | platform_add_devices(g3evm_devices, ARRAY_SIZE(g3evm_devices)); |
355 | } | 332 | } |
356 | 333 | ||
357 | static void __init g3evm_timer_init(void) | ||
358 | { | ||
359 | sh7367_clock_init(); | ||
360 | shmobile_timer.init(); | ||
361 | } | ||
362 | |||
363 | static struct sys_timer g3evm_timer = { | ||
364 | .init = g3evm_timer_init, | ||
365 | }; | ||
366 | |||
367 | MACHINE_START(G3EVM, "g3evm") | 334 | MACHINE_START(G3EVM, "g3evm") |
368 | .map_io = g3evm_map_io, | 335 | .map_io = sh7367_map_io, |
336 | .init_early = sh7367_add_early_devices, | ||
369 | .init_irq = sh7367_init_irq, | 337 | .init_irq = sh7367_init_irq, |
370 | .handle_irq = shmobile_handle_irq_intc, | 338 | .handle_irq = shmobile_handle_irq_intc, |
371 | .init_machine = g3evm_init, | 339 | .init_machine = g3evm_init, |
372 | .timer = &g3evm_timer, | 340 | .timer = &shmobile_timer, |
373 | MACHINE_END | 341 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-g4evm.c b/arch/arm/mach-shmobile/board-g4evm.c index 2220b885cff5..46d757d2759d 100644 --- a/arch/arm/mach-shmobile/board-g4evm.c +++ b/arch/arm/mach-shmobile/board-g4evm.c | |||
@@ -38,8 +38,6 @@ | |||
38 | #include <mach/common.h> | 38 | #include <mach/common.h> |
39 | #include <asm/mach-types.h> | 39 | #include <asm/mach-types.h> |
40 | #include <asm/mach/arch.h> | 40 | #include <asm/mach/arch.h> |
41 | #include <asm/mach/map.h> | ||
42 | #include <asm/mach/time.h> | ||
43 | 41 | ||
44 | /* | 42 | /* |
45 | * SDHI | 43 | * SDHI |
@@ -260,27 +258,6 @@ static struct platform_device *g4evm_devices[] __initdata = { | |||
260 | &sdhi1_device, | 258 | &sdhi1_device, |
261 | }; | 259 | }; |
262 | 260 | ||
263 | static struct map_desc g4evm_io_desc[] __initdata = { | ||
264 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
265 | * used by CPGA, INTC and PFC. | ||
266 | */ | ||
267 | { | ||
268 | .virtual = 0xe6000000, | ||
269 | .pfn = __phys_to_pfn(0xe6000000), | ||
270 | .length = 256 << 20, | ||
271 | .type = MT_DEVICE_NONSHARED | ||
272 | }, | ||
273 | }; | ||
274 | |||
275 | static void __init g4evm_map_io(void) | ||
276 | { | ||
277 | iotable_init(g4evm_io_desc, ARRAY_SIZE(g4evm_io_desc)); | ||
278 | |||
279 | /* setup early devices and console here as well */ | ||
280 | sh7377_add_early_devices(); | ||
281 | shmobile_setup_console(); | ||
282 | } | ||
283 | |||
284 | #define GPIO_SDHID0_D0 0xe60520fc | 261 | #define GPIO_SDHID0_D0 0xe60520fc |
285 | #define GPIO_SDHID0_D1 0xe60520fd | 262 | #define GPIO_SDHID0_D1 0xe60520fd |
286 | #define GPIO_SDHID0_D2 0xe60520fe | 263 | #define GPIO_SDHID0_D2 0xe60520fe |
@@ -397,20 +374,11 @@ static void __init g4evm_init(void) | |||
397 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); | 374 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); |
398 | } | 375 | } |
399 | 376 | ||
400 | static void __init g4evm_timer_init(void) | ||
401 | { | ||
402 | sh7377_clock_init(); | ||
403 | shmobile_timer.init(); | ||
404 | } | ||
405 | |||
406 | static struct sys_timer g4evm_timer = { | ||
407 | .init = g4evm_timer_init, | ||
408 | }; | ||
409 | |||
410 | MACHINE_START(G4EVM, "g4evm") | 377 | MACHINE_START(G4EVM, "g4evm") |
411 | .map_io = g4evm_map_io, | 378 | .map_io = sh7377_map_io, |
379 | .init_early = sh7377_add_early_devices, | ||
412 | .init_irq = sh7377_init_irq, | 380 | .init_irq = sh7377_init_irq, |
413 | .handle_irq = shmobile_handle_irq_intc, | 381 | .handle_irq = shmobile_handle_irq_intc, |
414 | .init_machine = g4evm_init, | 382 | .init_machine = g4evm_init, |
415 | .timer = &g4evm_timer, | 383 | .timer = &shmobile_timer, |
416 | MACHINE_END | 384 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index c8e7ca23fc06..61c067294660 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
@@ -43,7 +43,6 @@ | |||
43 | #include <mach/common.h> | 43 | #include <mach/common.h> |
44 | #include <asm/mach-types.h> | 44 | #include <asm/mach-types.h> |
45 | #include <asm/mach/arch.h> | 45 | #include <asm/mach/arch.h> |
46 | #include <asm/mach/map.h> | ||
47 | #include <asm/mach/time.h> | 46 | #include <asm/mach/time.h> |
48 | #include <asm/hardware/gic.h> | 47 | #include <asm/hardware/gic.h> |
49 | #include <asm/hardware/cache-l2x0.h> | 48 | #include <asm/hardware/cache-l2x0.h> |
@@ -409,27 +408,6 @@ static struct platform_device *kota2_devices[] __initdata = { | |||
409 | &sdhi1_device, | 408 | &sdhi1_device, |
410 | }; | 409 | }; |
411 | 410 | ||
412 | static struct map_desc kota2_io_desc[] __initdata = { | ||
413 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
414 | * used by CPGA, INTC and PFC. | ||
415 | */ | ||
416 | { | ||
417 | .virtual = 0xe6000000, | ||
418 | .pfn = __phys_to_pfn(0xe6000000), | ||
419 | .length = 256 << 20, | ||
420 | .type = MT_DEVICE_NONSHARED | ||
421 | }, | ||
422 | }; | ||
423 | |||
424 | static void __init kota2_map_io(void) | ||
425 | { | ||
426 | iotable_init(kota2_io_desc, ARRAY_SIZE(kota2_io_desc)); | ||
427 | |||
428 | /* setup early devices and console here as well */ | ||
429 | sh73a0_add_early_devices(); | ||
430 | shmobile_setup_console(); | ||
431 | } | ||
432 | |||
433 | static void __init kota2_init(void) | 411 | static void __init kota2_init(void) |
434 | { | 412 | { |
435 | sh73a0_pinmux_init(); | 413 | sh73a0_pinmux_init(); |
@@ -535,22 +513,12 @@ static void __init kota2_init(void) | |||
535 | platform_add_devices(kota2_devices, ARRAY_SIZE(kota2_devices)); | 513 | platform_add_devices(kota2_devices, ARRAY_SIZE(kota2_devices)); |
536 | } | 514 | } |
537 | 515 | ||
538 | static void __init kota2_timer_init(void) | ||
539 | { | ||
540 | sh73a0_clock_init(); | ||
541 | shmobile_timer.init(); | ||
542 | return; | ||
543 | } | ||
544 | |||
545 | struct sys_timer kota2_timer = { | ||
546 | .init = kota2_timer_init, | ||
547 | }; | ||
548 | |||
549 | MACHINE_START(KOTA2, "kota2") | 516 | MACHINE_START(KOTA2, "kota2") |
550 | .map_io = kota2_map_io, | 517 | .map_io = sh73a0_map_io, |
518 | .init_early = sh73a0_add_early_devices, | ||
551 | .nr_irqs = NR_IRQS_LEGACY, | 519 | .nr_irqs = NR_IRQS_LEGACY, |
552 | .init_irq = sh73a0_init_irq, | 520 | .init_irq = sh73a0_init_irq, |
553 | .handle_irq = gic_handle_irq, | 521 | .handle_irq = gic_handle_irq, |
554 | .init_machine = kota2_init, | 522 | .init_machine = kota2_init, |
555 | .timer = &kota2_timer, | 523 | .timer = &shmobile_timer, |
556 | MACHINE_END | 524 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index a2813247b455..55da7a115912 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -57,8 +57,6 @@ | |||
57 | #include <mach/sh7372.h> | 57 | #include <mach/sh7372.h> |
58 | 58 | ||
59 | #include <asm/mach/arch.h> | 59 | #include <asm/mach/arch.h> |
60 | #include <asm/mach/time.h> | ||
61 | #include <asm/mach/map.h> | ||
62 | #include <asm/mach-types.h> | 60 | #include <asm/mach-types.h> |
63 | 61 | ||
64 | /* | 62 | /* |
@@ -1337,27 +1335,6 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1337 | }, | 1335 | }, |
1338 | }; | 1336 | }; |
1339 | 1337 | ||
1340 | static struct map_desc mackerel_io_desc[] __initdata = { | ||
1341 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
1342 | * used by CPGA, INTC and PFC. | ||
1343 | */ | ||
1344 | { | ||
1345 | .virtual = 0xe6000000, | ||
1346 | .pfn = __phys_to_pfn(0xe6000000), | ||
1347 | .length = 256 << 20, | ||
1348 | .type = MT_DEVICE_NONSHARED | ||
1349 | }, | ||
1350 | }; | ||
1351 | |||
1352 | static void __init mackerel_map_io(void) | ||
1353 | { | ||
1354 | iotable_init(mackerel_io_desc, ARRAY_SIZE(mackerel_io_desc)); | ||
1355 | |||
1356 | /* setup early devices and console here as well */ | ||
1357 | sh7372_add_early_devices(); | ||
1358 | shmobile_setup_console(); | ||
1359 | } | ||
1360 | |||
1361 | #define GPIO_PORT9CR 0xE6051009 | 1338 | #define GPIO_PORT9CR 0xE6051009 |
1362 | #define GPIO_PORT10CR 0xE605100A | 1339 | #define GPIO_PORT10CR 0xE605100A |
1363 | #define GPIO_PORT167CR 0xE60520A7 | 1340 | #define GPIO_PORT167CR 0xE60520A7 |
@@ -1370,6 +1347,9 @@ static void __init mackerel_init(void) | |||
1370 | struct clk *clk; | 1347 | struct clk *clk; |
1371 | int ret; | 1348 | int ret; |
1372 | 1349 | ||
1350 | /* External clock source */ | ||
1351 | clk_set_rate(&sh7372_dv_clki_clk, 27000000); | ||
1352 | |||
1373 | sh7372_pinmux_init(); | 1353 | sh7372_pinmux_init(); |
1374 | 1354 | ||
1375 | /* enable SCIFA0 */ | 1355 | /* enable SCIFA0 */ |
@@ -1573,23 +1553,11 @@ static void __init mackerel_init(void) | |||
1573 | pm_clk_add(&hdmi_lcdc_device.dev, "hdmi"); | 1553 | pm_clk_add(&hdmi_lcdc_device.dev, "hdmi"); |
1574 | } | 1554 | } |
1575 | 1555 | ||
1576 | static void __init mackerel_timer_init(void) | ||
1577 | { | ||
1578 | sh7372_clock_init(); | ||
1579 | shmobile_timer.init(); | ||
1580 | |||
1581 | /* External clock source */ | ||
1582 | clk_set_rate(&sh7372_dv_clki_clk, 27000000); | ||
1583 | } | ||
1584 | |||
1585 | static struct sys_timer mackerel_timer = { | ||
1586 | .init = mackerel_timer_init, | ||
1587 | }; | ||
1588 | |||
1589 | MACHINE_START(MACKEREL, "mackerel") | 1556 | MACHINE_START(MACKEREL, "mackerel") |
1590 | .map_io = mackerel_map_io, | 1557 | .map_io = sh7372_map_io, |
1558 | .init_early = sh7372_add_early_devices, | ||
1591 | .init_irq = sh7372_init_irq, | 1559 | .init_irq = sh7372_init_irq, |
1592 | .handle_irq = shmobile_handle_irq_intc, | 1560 | .handle_irq = shmobile_handle_irq_intc, |
1593 | .init_machine = mackerel_init, | 1561 | .init_machine = mackerel_init, |
1594 | .timer = &mackerel_timer, | 1562 | .timer = &shmobile_timer, |
1595 | MACHINE_END | 1563 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index f0e02c0ce99f..cbd5e4cd06d2 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
@@ -33,8 +33,6 @@ | |||
33 | #include <mach/common.h> | 33 | #include <mach/common.h> |
34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
35 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
36 | #include <asm/mach/map.h> | ||
37 | #include <asm/mach/time.h> | ||
38 | #include <asm/hardware/gic.h> | 36 | #include <asm/hardware/gic.h> |
39 | #include <asm/traps.h> | 37 | #include <asm/traps.h> |
40 | 38 | ||
@@ -72,49 +70,6 @@ static struct platform_device *marzen_devices[] __initdata = { | |||
72 | ð_device, | 70 | ð_device, |
73 | }; | 71 | }; |
74 | 72 | ||
75 | static struct map_desc marzen_io_desc[] __initdata = { | ||
76 | /* 2M entity map for 0xf0000000 (MPCORE) */ | ||
77 | { | ||
78 | .virtual = 0xf0000000, | ||
79 | .pfn = __phys_to_pfn(0xf0000000), | ||
80 | .length = SZ_2M, | ||
81 | .type = MT_DEVICE_NONSHARED | ||
82 | }, | ||
83 | /* 16M entity map for 0xfexxxxxx (DMAC-S/HPBREG/INTC2/LRAM/DBSC) */ | ||
84 | { | ||
85 | .virtual = 0xfe000000, | ||
86 | .pfn = __phys_to_pfn(0xfe000000), | ||
87 | .length = SZ_16M, | ||
88 | .type = MT_DEVICE_NONSHARED | ||
89 | }, | ||
90 | }; | ||
91 | |||
92 | static void __init marzen_map_io(void) | ||
93 | { | ||
94 | iotable_init(marzen_io_desc, ARRAY_SIZE(marzen_io_desc)); | ||
95 | } | ||
96 | |||
97 | static void __init marzen_init_early(void) | ||
98 | { | ||
99 | r8a7779_add_early_devices(); | ||
100 | |||
101 | /* Early serial console setup is not included here due to | ||
102 | * memory map collisions. The SCIF serial ports in r8a7779 | ||
103 | * are difficult to entity map 1:1 due to collision with the | ||
104 | * virtual memory range used by the coherent DMA code on ARM. | ||
105 | * | ||
106 | * Anyone wanting to debug early can remove UPF_IOREMAP from | ||
107 | * the sh-sci serial console platform data, adjust mapbase | ||
108 | * to a static M:N virt:phys mapping that needs to be added to | ||
109 | * the mappings passed with iotable_init() above. | ||
110 | * | ||
111 | * Then add a call to shmobile_setup_console() from this function. | ||
112 | * | ||
113 | * As a final step pass earlyprint=sh-sci.2,115200 on the kernel | ||
114 | * command line. | ||
115 | */ | ||
116 | } | ||
117 | |||
118 | static void __init marzen_init(void) | 73 | static void __init marzen_init(void) |
119 | { | 74 | { |
120 | r8a7779_pinmux_init(); | 75 | r8a7779_pinmux_init(); |
@@ -135,23 +90,12 @@ static void __init marzen_init(void) | |||
135 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); | 90 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); |
136 | } | 91 | } |
137 | 92 | ||
138 | static void __init marzen_timer_init(void) | ||
139 | { | ||
140 | r8a7779_clock_init(); | ||
141 | shmobile_timer.init(); | ||
142 | return; | ||
143 | } | ||
144 | |||
145 | struct sys_timer marzen_timer = { | ||
146 | .init = marzen_timer_init, | ||
147 | }; | ||
148 | |||
149 | MACHINE_START(MARZEN, "marzen") | 93 | MACHINE_START(MARZEN, "marzen") |
150 | .map_io = marzen_map_io, | 94 | .map_io = r8a7779_map_io, |
151 | .init_early = marzen_init_early, | 95 | .init_early = r8a7779_add_early_devices, |
152 | .nr_irqs = NR_IRQS_LEGACY, | 96 | .nr_irqs = NR_IRQS_LEGACY, |
153 | .init_irq = r8a7779_init_irq, | 97 | .init_irq = r8a7779_init_irq, |
154 | .handle_irq = gic_handle_irq, | 98 | .handle_irq = gic_handle_irq, |
155 | .init_machine = marzen_init, | 99 | .init_machine = marzen_init, |
156 | .timer = &marzen_timer, | 100 | .timer = &shmobile_timer, |
157 | MACHINE_END | 101 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/clock-r8a7740.c b/arch/arm/mach-shmobile/clock-r8a7740.c index 3b35b9afc001..99c4d743a99c 100644 --- a/arch/arm/mach-shmobile/clock-r8a7740.c +++ b/arch/arm/mach-shmobile/clock-r8a7740.c | |||
@@ -93,7 +93,7 @@ static unsigned long div_recalc(struct clk *clk) | |||
93 | return clk->parent->rate / (int)(clk->priv); | 93 | return clk->parent->rate / (int)(clk->priv); |
94 | } | 94 | } |
95 | 95 | ||
96 | static struct clk_ops div_clk_ops = { | 96 | static struct sh_clk_ops div_clk_ops = { |
97 | .recalc = div_recalc, | 97 | .recalc = div_recalc, |
98 | }; | 98 | }; |
99 | 99 | ||
@@ -125,7 +125,7 @@ static struct clk extal2_div2_clk = { | |||
125 | .parent = &extal2_clk, | 125 | .parent = &extal2_clk, |
126 | }; | 126 | }; |
127 | 127 | ||
128 | static struct clk_ops followparent_clk_ops = { | 128 | static struct sh_clk_ops followparent_clk_ops = { |
129 | .recalc = followparent_recalc, | 129 | .recalc = followparent_recalc, |
130 | }; | 130 | }; |
131 | 131 | ||
@@ -156,7 +156,7 @@ static unsigned long pllc01_recalc(struct clk *clk) | |||
156 | return clk->parent->rate * mult; | 156 | return clk->parent->rate * mult; |
157 | } | 157 | } |
158 | 158 | ||
159 | static struct clk_ops pllc01_clk_ops = { | 159 | static struct sh_clk_ops pllc01_clk_ops = { |
160 | .recalc = pllc01_recalc, | 160 | .recalc = pllc01_recalc, |
161 | }; | 161 | }; |
162 | 162 | ||
@@ -376,7 +376,7 @@ void __init r8a7740_clock_init(u8 md_ck) | |||
376 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 376 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
377 | 377 | ||
378 | if (!ret) | 378 | if (!ret) |
379 | clk_init(); | 379 | shmobile_clk_init(); |
380 | else | 380 | else |
381 | panic("failed to setup r8a7740 clocks\n"); | 381 | panic("failed to setup r8a7740 clocks\n"); |
382 | } | 382 | } |
diff --git a/arch/arm/mach-shmobile/clock-r8a7779.c b/arch/arm/mach-shmobile/clock-r8a7779.c index b4b0e8cd096d..7d6e9fe47b56 100644 --- a/arch/arm/mach-shmobile/clock-r8a7779.c +++ b/arch/arm/mach-shmobile/clock-r8a7779.c | |||
@@ -107,7 +107,7 @@ static unsigned long mul4_recalc(struct clk *clk) | |||
107 | return clk->parent->rate * 4; | 107 | return clk->parent->rate * 4; |
108 | } | 108 | } |
109 | 109 | ||
110 | static struct clk_ops mul4_clk_ops = { | 110 | static struct sh_clk_ops mul4_clk_ops = { |
111 | .recalc = mul4_recalc, | 111 | .recalc = mul4_recalc, |
112 | }; | 112 | }; |
113 | 113 | ||
@@ -170,7 +170,7 @@ void __init r8a7779_clock_init(void) | |||
170 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 170 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
171 | 171 | ||
172 | if (!ret) | 172 | if (!ret) |
173 | clk_init(); | 173 | shmobile_clk_init(); |
174 | else | 174 | else |
175 | panic("failed to setup r8a7779 clocks\n"); | 175 | panic("failed to setup r8a7779 clocks\n"); |
176 | } | 176 | } |
diff --git a/arch/arm/mach-shmobile/clock-sh7367.c b/arch/arm/mach-shmobile/clock-sh7367.c index 5218c34a9cc6..006e7b5d304c 100644 --- a/arch/arm/mach-shmobile/clock-sh7367.c +++ b/arch/arm/mach-shmobile/clock-sh7367.c | |||
@@ -74,7 +74,7 @@ static unsigned long div2_recalc(struct clk *clk) | |||
74 | return clk->parent->rate / 2; | 74 | return clk->parent->rate / 2; |
75 | } | 75 | } |
76 | 76 | ||
77 | static struct clk_ops div2_clk_ops = { | 77 | static struct sh_clk_ops div2_clk_ops = { |
78 | .recalc = div2_recalc, | 78 | .recalc = div2_recalc, |
79 | }; | 79 | }; |
80 | 80 | ||
@@ -101,7 +101,7 @@ static unsigned long pllc1_recalc(struct clk *clk) | |||
101 | return clk->parent->rate * mult; | 101 | return clk->parent->rate * mult; |
102 | } | 102 | } |
103 | 103 | ||
104 | static struct clk_ops pllc1_clk_ops = { | 104 | static struct sh_clk_ops pllc1_clk_ops = { |
105 | .recalc = pllc1_recalc, | 105 | .recalc = pllc1_recalc, |
106 | }; | 106 | }; |
107 | 107 | ||
@@ -128,7 +128,7 @@ static unsigned long pllc2_recalc(struct clk *clk) | |||
128 | return clk->parent->rate * mult; | 128 | return clk->parent->rate * mult; |
129 | } | 129 | } |
130 | 130 | ||
131 | static struct clk_ops pllc2_clk_ops = { | 131 | static struct sh_clk_ops pllc2_clk_ops = { |
132 | .recalc = pllc2_recalc, | 132 | .recalc = pllc2_recalc, |
133 | }; | 133 | }; |
134 | 134 | ||
@@ -349,7 +349,7 @@ void __init sh7367_clock_init(void) | |||
349 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 349 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
350 | 350 | ||
351 | if (!ret) | 351 | if (!ret) |
352 | clk_init(); | 352 | shmobile_clk_init(); |
353 | else | 353 | else |
354 | panic("failed to setup sh7367 clocks\n"); | 354 | panic("failed to setup sh7367 clocks\n"); |
355 | } | 355 | } |
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 293456d8dcfd..de243e3c8392 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
@@ -89,7 +89,7 @@ static unsigned long div2_recalc(struct clk *clk) | |||
89 | return clk->parent->rate / 2; | 89 | return clk->parent->rate / 2; |
90 | } | 90 | } |
91 | 91 | ||
92 | static struct clk_ops div2_clk_ops = { | 92 | static struct sh_clk_ops div2_clk_ops = { |
93 | .recalc = div2_recalc, | 93 | .recalc = div2_recalc, |
94 | }; | 94 | }; |
95 | 95 | ||
@@ -128,7 +128,7 @@ static unsigned long pllc01_recalc(struct clk *clk) | |||
128 | return clk->parent->rate * mult; | 128 | return clk->parent->rate * mult; |
129 | } | 129 | } |
130 | 130 | ||
131 | static struct clk_ops pllc01_clk_ops = { | 131 | static struct sh_clk_ops pllc01_clk_ops = { |
132 | .recalc = pllc01_recalc, | 132 | .recalc = pllc01_recalc, |
133 | }; | 133 | }; |
134 | 134 | ||
@@ -276,7 +276,7 @@ static int pllc2_set_parent(struct clk *clk, struct clk *parent) | |||
276 | return 0; | 276 | return 0; |
277 | } | 277 | } |
278 | 278 | ||
279 | static struct clk_ops pllc2_clk_ops = { | 279 | static struct sh_clk_ops pllc2_clk_ops = { |
280 | .recalc = pllc2_recalc, | 280 | .recalc = pllc2_recalc, |
281 | .round_rate = pllc2_round_rate, | 281 | .round_rate = pllc2_round_rate, |
282 | .set_rate = pllc2_set_rate, | 282 | .set_rate = pllc2_set_rate, |
@@ -468,7 +468,7 @@ static int fsidiv_set_rate(struct clk *clk, unsigned long rate) | |||
468 | return 0; | 468 | return 0; |
469 | } | 469 | } |
470 | 470 | ||
471 | static struct clk_ops fsidiv_clk_ops = { | 471 | static struct sh_clk_ops fsidiv_clk_ops = { |
472 | .recalc = fsidiv_recalc, | 472 | .recalc = fsidiv_recalc, |
473 | .round_rate = fsidiv_round_rate, | 473 | .round_rate = fsidiv_round_rate, |
474 | .set_rate = fsidiv_set_rate, | 474 | .set_rate = fsidiv_set_rate, |
@@ -710,7 +710,7 @@ void __init sh7372_clock_init(void) | |||
710 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 710 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
711 | 711 | ||
712 | if (!ret) | 712 | if (!ret) |
713 | clk_init(); | 713 | shmobile_clk_init(); |
714 | else | 714 | else |
715 | panic("failed to setup sh7372 clocks\n"); | 715 | panic("failed to setup sh7372 clocks\n"); |
716 | 716 | ||
diff --git a/arch/arm/mach-shmobile/clock-sh7377.c b/arch/arm/mach-shmobile/clock-sh7377.c index 8cee7b151ae3..0798a15936c3 100644 --- a/arch/arm/mach-shmobile/clock-sh7377.c +++ b/arch/arm/mach-shmobile/clock-sh7377.c | |||
@@ -77,7 +77,7 @@ static unsigned long div2_recalc(struct clk *clk) | |||
77 | return clk->parent->rate / 2; | 77 | return clk->parent->rate / 2; |
78 | } | 78 | } |
79 | 79 | ||
80 | static struct clk_ops div2_clk_ops = { | 80 | static struct sh_clk_ops div2_clk_ops = { |
81 | .recalc = div2_recalc, | 81 | .recalc = div2_recalc, |
82 | }; | 82 | }; |
83 | 83 | ||
@@ -110,7 +110,7 @@ static unsigned long pllc1_recalc(struct clk *clk) | |||
110 | return clk->parent->rate * mult; | 110 | return clk->parent->rate * mult; |
111 | } | 111 | } |
112 | 112 | ||
113 | static struct clk_ops pllc1_clk_ops = { | 113 | static struct sh_clk_ops pllc1_clk_ops = { |
114 | .recalc = pllc1_recalc, | 114 | .recalc = pllc1_recalc, |
115 | }; | 115 | }; |
116 | 116 | ||
@@ -137,7 +137,7 @@ static unsigned long pllc2_recalc(struct clk *clk) | |||
137 | return clk->parent->rate * mult; | 137 | return clk->parent->rate * mult; |
138 | } | 138 | } |
139 | 139 | ||
140 | static struct clk_ops pllc2_clk_ops = { | 140 | static struct sh_clk_ops pllc2_clk_ops = { |
141 | .recalc = pllc2_recalc, | 141 | .recalc = pllc2_recalc, |
142 | }; | 142 | }; |
143 | 143 | ||
@@ -360,7 +360,7 @@ void __init sh7377_clock_init(void) | |||
360 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 360 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
361 | 361 | ||
362 | if (!ret) | 362 | if (!ret) |
363 | clk_init(); | 363 | shmobile_clk_init(); |
364 | else | 364 | else |
365 | panic("failed to setup sh7377 clocks\n"); | 365 | panic("failed to setup sh7377 clocks\n"); |
366 | } | 366 | } |
diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index 7727cca6136c..472d1f5361e5 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c | |||
@@ -88,7 +88,7 @@ static unsigned long div2_recalc(struct clk *clk) | |||
88 | return clk->parent->rate / 2; | 88 | return clk->parent->rate / 2; |
89 | } | 89 | } |
90 | 90 | ||
91 | static struct clk_ops div2_clk_ops = { | 91 | static struct sh_clk_ops div2_clk_ops = { |
92 | .recalc = div2_recalc, | 92 | .recalc = div2_recalc, |
93 | }; | 93 | }; |
94 | 94 | ||
@@ -97,7 +97,7 @@ static unsigned long div7_recalc(struct clk *clk) | |||
97 | return clk->parent->rate / 7; | 97 | return clk->parent->rate / 7; |
98 | } | 98 | } |
99 | 99 | ||
100 | static struct clk_ops div7_clk_ops = { | 100 | static struct sh_clk_ops div7_clk_ops = { |
101 | .recalc = div7_recalc, | 101 | .recalc = div7_recalc, |
102 | }; | 102 | }; |
103 | 103 | ||
@@ -106,7 +106,7 @@ static unsigned long div13_recalc(struct clk *clk) | |||
106 | return clk->parent->rate / 13; | 106 | return clk->parent->rate / 13; |
107 | } | 107 | } |
108 | 108 | ||
109 | static struct clk_ops div13_clk_ops = { | 109 | static struct sh_clk_ops div13_clk_ops = { |
110 | .recalc = div13_recalc, | 110 | .recalc = div13_recalc, |
111 | }; | 111 | }; |
112 | 112 | ||
@@ -122,7 +122,7 @@ static struct clk extal2_div2_clk = { | |||
122 | .parent = &sh73a0_extal2_clk, | 122 | .parent = &sh73a0_extal2_clk, |
123 | }; | 123 | }; |
124 | 124 | ||
125 | static struct clk_ops main_clk_ops = { | 125 | static struct sh_clk_ops main_clk_ops = { |
126 | .recalc = followparent_recalc, | 126 | .recalc = followparent_recalc, |
127 | }; | 127 | }; |
128 | 128 | ||
@@ -156,7 +156,7 @@ static unsigned long pll_recalc(struct clk *clk) | |||
156 | return clk->parent->rate * mult; | 156 | return clk->parent->rate * mult; |
157 | } | 157 | } |
158 | 158 | ||
159 | static struct clk_ops pll_clk_ops = { | 159 | static struct sh_clk_ops pll_clk_ops = { |
160 | .recalc = pll_recalc, | 160 | .recalc = pll_recalc, |
161 | }; | 161 | }; |
162 | 162 | ||
@@ -438,7 +438,7 @@ static int dsiphy_set_rate(struct clk *clk, unsigned long rate) | |||
438 | return 0; | 438 | return 0; |
439 | } | 439 | } |
440 | 440 | ||
441 | static struct clk_ops dsiphy_clk_ops = { | 441 | static struct sh_clk_ops dsiphy_clk_ops = { |
442 | .recalc = dsiphy_recalc, | 442 | .recalc = dsiphy_recalc, |
443 | .round_rate = dsiphy_round_rate, | 443 | .round_rate = dsiphy_round_rate, |
444 | .set_rate = dsiphy_set_rate, | 444 | .set_rate = dsiphy_set_rate, |
@@ -620,7 +620,7 @@ void __init sh73a0_clock_init(void) | |||
620 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 620 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
621 | 621 | ||
622 | if (!ret) | 622 | if (!ret) |
623 | clk_init(); | 623 | shmobile_clk_init(); |
624 | else | 624 | else |
625 | panic("failed to setup sh73a0 clocks\n"); | 625 | panic("failed to setup sh73a0 clocks\n"); |
626 | } | 626 | } |
diff --git a/arch/arm/mach-shmobile/clock.c b/arch/arm/mach-shmobile/clock.c index 31654d78b96b..e816ca9bd213 100644 --- a/arch/arm/mach-shmobile/clock.c +++ b/arch/arm/mach-shmobile/clock.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/sh_clk.h> | 24 | #include <linux/sh_clk.h> |
25 | #include <linux/export.h> | 25 | #include <linux/export.h> |
26 | 26 | ||
27 | int __init clk_init(void) | 27 | int __init shmobile_clk_init(void) |
28 | { | 28 | { |
29 | /* Kick the child clocks.. */ | 29 | /* Kick the child clocks.. */ |
30 | recalculate_root_clocks(); | 30 | recalculate_root_clocks(); |
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index e4b945e271e7..e41b61a48439 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
@@ -1,12 +1,13 @@ | |||
1 | #ifndef __ARCH_MACH_COMMON_H | 1 | #ifndef __ARCH_MACH_COMMON_H |
2 | #define __ARCH_MACH_COMMON_H | 2 | #define __ARCH_MACH_COMMON_H |
3 | 3 | ||
4 | extern void shmobile_earlytimer_init(void); | ||
4 | extern struct sys_timer shmobile_timer; | 5 | extern struct sys_timer shmobile_timer; |
5 | extern void shmobile_setup_console(void); | 6 | extern void shmobile_setup_console(void); |
6 | extern void shmobile_secondary_vector(void); | 7 | extern void shmobile_secondary_vector(void); |
7 | extern int shmobile_platform_cpu_kill(unsigned int cpu); | 8 | extern int shmobile_platform_cpu_kill(unsigned int cpu); |
8 | struct clk; | 9 | struct clk; |
9 | extern int clk_init(void); | 10 | extern int shmobile_clk_init(void); |
10 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 11 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
11 | extern struct platform_suspend_ops shmobile_suspend_ops; | 12 | extern struct platform_suspend_ops shmobile_suspend_ops; |
12 | struct cpuidle_driver; | 13 | struct cpuidle_driver; |
@@ -14,6 +15,7 @@ extern void (*shmobile_cpuidle_modes[])(void); | |||
14 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); | 15 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); |
15 | 16 | ||
16 | extern void sh7367_init_irq(void); | 17 | extern void sh7367_init_irq(void); |
18 | extern void sh7367_map_io(void); | ||
17 | extern void sh7367_add_early_devices(void); | 19 | extern void sh7367_add_early_devices(void); |
18 | extern void sh7367_add_standard_devices(void); | 20 | extern void sh7367_add_standard_devices(void); |
19 | extern void sh7367_clock_init(void); | 21 | extern void sh7367_clock_init(void); |
@@ -22,6 +24,7 @@ extern struct clk sh7367_extalb1_clk; | |||
22 | extern struct clk sh7367_extal2_clk; | 24 | extern struct clk sh7367_extal2_clk; |
23 | 25 | ||
24 | extern void sh7377_init_irq(void); | 26 | extern void sh7377_init_irq(void); |
27 | extern void sh7377_map_io(void); | ||
25 | extern void sh7377_add_early_devices(void); | 28 | extern void sh7377_add_early_devices(void); |
26 | extern void sh7377_add_standard_devices(void); | 29 | extern void sh7377_add_standard_devices(void); |
27 | extern void sh7377_clock_init(void); | 30 | extern void sh7377_clock_init(void); |
@@ -30,6 +33,7 @@ extern struct clk sh7377_extalc1_clk; | |||
30 | extern struct clk sh7377_extal2_clk; | 33 | extern struct clk sh7377_extal2_clk; |
31 | 34 | ||
32 | extern void sh7372_init_irq(void); | 35 | extern void sh7372_init_irq(void); |
36 | extern void sh7372_map_io(void); | ||
33 | extern void sh7372_add_early_devices(void); | 37 | extern void sh7372_add_early_devices(void); |
34 | extern void sh7372_add_standard_devices(void); | 38 | extern void sh7372_add_standard_devices(void); |
35 | extern void sh7372_clock_init(void); | 39 | extern void sh7372_clock_init(void); |
@@ -41,6 +45,7 @@ extern struct clk sh7372_extal1_clk; | |||
41 | extern struct clk sh7372_extal2_clk; | 45 | extern struct clk sh7372_extal2_clk; |
42 | 46 | ||
43 | extern void sh73a0_init_irq(void); | 47 | extern void sh73a0_init_irq(void); |
48 | extern void sh73a0_map_io(void); | ||
44 | extern void sh73a0_add_early_devices(void); | 49 | extern void sh73a0_add_early_devices(void); |
45 | extern void sh73a0_add_standard_devices(void); | 50 | extern void sh73a0_add_standard_devices(void); |
46 | extern void sh73a0_clock_init(void); | 51 | extern void sh73a0_clock_init(void); |
@@ -56,12 +61,14 @@ extern int sh73a0_boot_secondary(unsigned int cpu); | |||
56 | extern void sh73a0_smp_prepare_cpus(void); | 61 | extern void sh73a0_smp_prepare_cpus(void); |
57 | 62 | ||
58 | extern void r8a7740_init_irq(void); | 63 | extern void r8a7740_init_irq(void); |
64 | extern void r8a7740_map_io(void); | ||
59 | extern void r8a7740_add_early_devices(void); | 65 | extern void r8a7740_add_early_devices(void); |
60 | extern void r8a7740_add_standard_devices(void); | 66 | extern void r8a7740_add_standard_devices(void); |
61 | extern void r8a7740_clock_init(u8 md_ck); | 67 | extern void r8a7740_clock_init(u8 md_ck); |
62 | extern void r8a7740_pinmux_init(void); | 68 | extern void r8a7740_pinmux_init(void); |
63 | 69 | ||
64 | extern void r8a7779_init_irq(void); | 70 | extern void r8a7779_init_irq(void); |
71 | extern void r8a7779_map_io(void); | ||
65 | extern void r8a7779_add_early_devices(void); | 72 | extern void r8a7779_add_early_devices(void); |
66 | extern void r8a7779_add_standard_devices(void); | 73 | extern void r8a7779_add_standard_devices(void); |
67 | extern void r8a7779_clock_init(void); | 74 | extern void r8a7779_clock_init(void); |
diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c index 986dca6b3fad..74e52341dd1b 100644 --- a/arch/arm/mach-shmobile/setup-r8a7740.c +++ b/arch/arm/mach-shmobile/setup-r8a7740.c | |||
@@ -25,8 +25,41 @@ | |||
25 | #include <linux/serial_sci.h> | 25 | #include <linux/serial_sci.h> |
26 | #include <linux/sh_timer.h> | 26 | #include <linux/sh_timer.h> |
27 | #include <mach/r8a7740.h> | 27 | #include <mach/r8a7740.h> |
28 | #include <mach/common.h> | ||
28 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <asm/mach/map.h> | ||
29 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
32 | #include <asm/mach/time.h> | ||
33 | |||
34 | static struct map_desc r8a7740_io_desc[] __initdata = { | ||
35 | /* | ||
36 | * for CPGA/INTC/PFC | ||
37 | * 0xe6000000-0xefffffff -> 0xe6000000-0xefffffff | ||
38 | */ | ||
39 | { | ||
40 | .virtual = 0xe6000000, | ||
41 | .pfn = __phys_to_pfn(0xe6000000), | ||
42 | .length = 160 << 20, | ||
43 | .type = MT_DEVICE_NONSHARED | ||
44 | }, | ||
45 | #ifdef CONFIG_CACHE_L2X0 | ||
46 | /* | ||
47 | * for l2x0_init() | ||
48 | * 0xf0100000-0xf0101000 -> 0xf0002000-0xf0003000 | ||
49 | */ | ||
50 | { | ||
51 | .virtual = 0xf0002000, | ||
52 | .pfn = __phys_to_pfn(0xf0100000), | ||
53 | .length = PAGE_SIZE, | ||
54 | .type = MT_DEVICE_NONSHARED | ||
55 | }, | ||
56 | #endif | ||
57 | }; | ||
58 | |||
59 | void __init r8a7740_map_io(void) | ||
60 | { | ||
61 | iotable_init(r8a7740_io_desc, ARRAY_SIZE(r8a7740_io_desc)); | ||
62 | } | ||
30 | 63 | ||
31 | /* SCIFA0 */ | 64 | /* SCIFA0 */ |
32 | static struct plat_sci_port scif0_platform_data = { | 65 | static struct plat_sci_port scif0_platform_data = { |
@@ -345,8 +378,20 @@ void __init r8a7740_add_standard_devices(void) | |||
345 | ARRAY_SIZE(r8a7740_late_devices)); | 378 | ARRAY_SIZE(r8a7740_late_devices)); |
346 | } | 379 | } |
347 | 380 | ||
381 | static void __init r8a7740_earlytimer_init(void) | ||
382 | { | ||
383 | r8a7740_clock_init(0); | ||
384 | shmobile_earlytimer_init(); | ||
385 | } | ||
386 | |||
348 | void __init r8a7740_add_early_devices(void) | 387 | void __init r8a7740_add_early_devices(void) |
349 | { | 388 | { |
350 | early_platform_add_devices(r8a7740_early_devices, | 389 | early_platform_add_devices(r8a7740_early_devices, |
351 | ARRAY_SIZE(r8a7740_early_devices)); | 390 | ARRAY_SIZE(r8a7740_early_devices)); |
391 | |||
392 | /* setup early console here as well */ | ||
393 | shmobile_setup_console(); | ||
394 | |||
395 | /* override timer setup with soc-specific code */ | ||
396 | shmobile_timer.init = r8a7740_earlytimer_init; | ||
352 | } | 397 | } |
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c index 4725663bd032..6820d785493d 100644 --- a/arch/arm/mach-shmobile/setup-r8a7779.c +++ b/arch/arm/mach-shmobile/setup-r8a7779.c | |||
@@ -33,6 +33,31 @@ | |||
33 | #include <mach/common.h> | 33 | #include <mach/common.h> |
34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
35 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
36 | #include <asm/mach/time.h> | ||
37 | #include <asm/mach/map.h> | ||
38 | #include <asm/hardware/cache-l2x0.h> | ||
39 | |||
40 | static struct map_desc r8a7779_io_desc[] __initdata = { | ||
41 | /* 2M entity map for 0xf0000000 (MPCORE) */ | ||
42 | { | ||
43 | .virtual = 0xf0000000, | ||
44 | .pfn = __phys_to_pfn(0xf0000000), | ||
45 | .length = SZ_2M, | ||
46 | .type = MT_DEVICE_NONSHARED | ||
47 | }, | ||
48 | /* 16M entity map for 0xfexxxxxx (DMAC-S/HPBREG/INTC2/LRAM/DBSC) */ | ||
49 | { | ||
50 | .virtual = 0xfe000000, | ||
51 | .pfn = __phys_to_pfn(0xfe000000), | ||
52 | .length = SZ_16M, | ||
53 | .type = MT_DEVICE_NONSHARED | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | void __init r8a7779_map_io(void) | ||
58 | { | ||
59 | iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); | ||
60 | } | ||
36 | 61 | ||
37 | static struct plat_sci_port scif0_platform_data = { | 62 | static struct plat_sci_port scif0_platform_data = { |
38 | .mapbase = 0xffe40000, | 63 | .mapbase = 0xffe40000, |
@@ -219,6 +244,10 @@ static struct platform_device *r8a7779_late_devices[] __initdata = { | |||
219 | 244 | ||
220 | void __init r8a7779_add_standard_devices(void) | 245 | void __init r8a7779_add_standard_devices(void) |
221 | { | 246 | { |
247 | #ifdef CONFIG_CACHE_L2X0 | ||
248 | /* Early BRESP enable, Shared attribute override enable, 64K*16way */ | ||
249 | l2x0_init((void __iomem __force *)(0xf0100000), 0x40470000, 0x82000fff); | ||
250 | #endif | ||
222 | r8a7779_pm_init(); | 251 | r8a7779_pm_init(); |
223 | 252 | ||
224 | r8a7779_init_pm_domain(&r8a7779_sh4a); | 253 | r8a7779_init_pm_domain(&r8a7779_sh4a); |
@@ -232,8 +261,33 @@ void __init r8a7779_add_standard_devices(void) | |||
232 | ARRAY_SIZE(r8a7779_late_devices)); | 261 | ARRAY_SIZE(r8a7779_late_devices)); |
233 | } | 262 | } |
234 | 263 | ||
264 | static void __init r8a7779_earlytimer_init(void) | ||
265 | { | ||
266 | r8a7779_clock_init(); | ||
267 | shmobile_earlytimer_init(); | ||
268 | } | ||
269 | |||
235 | void __init r8a7779_add_early_devices(void) | 270 | void __init r8a7779_add_early_devices(void) |
236 | { | 271 | { |
237 | early_platform_add_devices(r8a7779_early_devices, | 272 | early_platform_add_devices(r8a7779_early_devices, |
238 | ARRAY_SIZE(r8a7779_early_devices)); | 273 | ARRAY_SIZE(r8a7779_early_devices)); |
274 | |||
275 | /* Early serial console setup is not included here due to | ||
276 | * memory map collisions. The SCIF serial ports in r8a7779 | ||
277 | * are difficult to entity map 1:1 due to collision with the | ||
278 | * virtual memory range used by the coherent DMA code on ARM. | ||
279 | * | ||
280 | * Anyone wanting to debug early can remove UPF_IOREMAP from | ||
281 | * the sh-sci serial console platform data, adjust mapbase | ||
282 | * to a static M:N virt:phys mapping that needs to be added to | ||
283 | * the mappings passed with iotable_init() above. | ||
284 | * | ||
285 | * Then add a call to shmobile_setup_console() from this function. | ||
286 | * | ||
287 | * As a final step pass earlyprint=sh-sci.2,115200 on the kernel | ||
288 | * command line in case of the marzen board. | ||
289 | */ | ||
290 | |||
291 | /* override timer setup with soc-specific code */ | ||
292 | shmobile_timer.init = r8a7779_earlytimer_init; | ||
239 | } | 293 | } |
diff --git a/arch/arm/mach-shmobile/setup-sh7367.c b/arch/arm/mach-shmobile/setup-sh7367.c index e546017f15de..a51e1a1e6996 100644 --- a/arch/arm/mach-shmobile/setup-sh7367.c +++ b/arch/arm/mach-shmobile/setup-sh7367.c | |||
@@ -29,8 +29,28 @@ | |||
29 | #include <linux/serial_sci.h> | 29 | #include <linux/serial_sci.h> |
30 | #include <linux/sh_timer.h> | 30 | #include <linux/sh_timer.h> |
31 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
32 | #include <mach/common.h> | ||
32 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
35 | #include <asm/mach/map.h> | ||
36 | #include <asm/mach/time.h> | ||
37 | |||
38 | static struct map_desc sh7367_io_desc[] __initdata = { | ||
39 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
40 | * used by CPGA, INTC and PFC. | ||
41 | */ | ||
42 | { | ||
43 | .virtual = 0xe6000000, | ||
44 | .pfn = __phys_to_pfn(0xe6000000), | ||
45 | .length = 256 << 20, | ||
46 | .type = MT_DEVICE_NONSHARED | ||
47 | }, | ||
48 | }; | ||
49 | |||
50 | void __init sh7367_map_io(void) | ||
51 | { | ||
52 | iotable_init(sh7367_io_desc, ARRAY_SIZE(sh7367_io_desc)); | ||
53 | } | ||
34 | 54 | ||
35 | /* SCIFA0 */ | 55 | /* SCIFA0 */ |
36 | static struct plat_sci_port scif0_platform_data = { | 56 | static struct plat_sci_port scif0_platform_data = { |
@@ -435,6 +455,12 @@ void __init sh7367_add_standard_devices(void) | |||
435 | ARRAY_SIZE(sh7367_devices)); | 455 | ARRAY_SIZE(sh7367_devices)); |
436 | } | 456 | } |
437 | 457 | ||
458 | static void __init sh7367_earlytimer_init(void) | ||
459 | { | ||
460 | sh7367_clock_init(); | ||
461 | shmobile_earlytimer_init(); | ||
462 | } | ||
463 | |||
438 | #define SYMSTPCR2 0xe6158048 | 464 | #define SYMSTPCR2 0xe6158048 |
439 | #define SYMSTPCR2_CMT1 (1 << 29) | 465 | #define SYMSTPCR2_CMT1 (1 << 29) |
440 | 466 | ||
@@ -445,4 +471,10 @@ void __init sh7367_add_early_devices(void) | |||
445 | 471 | ||
446 | early_platform_add_devices(sh7367_early_devices, | 472 | early_platform_add_devices(sh7367_early_devices, |
447 | ARRAY_SIZE(sh7367_early_devices)); | 473 | ARRAY_SIZE(sh7367_early_devices)); |
474 | |||
475 | /* setup early console here as well */ | ||
476 | shmobile_setup_console(); | ||
477 | |||
478 | /* override timer setup with soc-specific code */ | ||
479 | shmobile_timer.init = sh7367_earlytimer_init; | ||
448 | } | 480 | } |
diff --git a/arch/arm/mach-shmobile/setup-sh7372.c b/arch/arm/mach-shmobile/setup-sh7372.c index a83cf51fc099..c14fb35de47c 100644 --- a/arch/arm/mach-shmobile/setup-sh7372.c +++ b/arch/arm/mach-shmobile/setup-sh7372.c | |||
@@ -33,8 +33,28 @@ | |||
33 | #include <linux/pm_domain.h> | 33 | #include <linux/pm_domain.h> |
34 | #include <mach/hardware.h> | 34 | #include <mach/hardware.h> |
35 | #include <mach/sh7372.h> | 35 | #include <mach/sh7372.h> |
36 | #include <mach/common.h> | ||
37 | #include <asm/mach/map.h> | ||
36 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
37 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
40 | #include <asm/mach/time.h> | ||
41 | |||
42 | static struct map_desc sh7372_io_desc[] __initdata = { | ||
43 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
44 | * used by CPGA, INTC and PFC. | ||
45 | */ | ||
46 | { | ||
47 | .virtual = 0xe6000000, | ||
48 | .pfn = __phys_to_pfn(0xe6000000), | ||
49 | .length = 256 << 20, | ||
50 | .type = MT_DEVICE_NONSHARED | ||
51 | }, | ||
52 | }; | ||
53 | |||
54 | void __init sh7372_map_io(void) | ||
55 | { | ||
56 | iotable_init(sh7372_io_desc, ARRAY_SIZE(sh7372_io_desc)); | ||
57 | } | ||
38 | 58 | ||
39 | /* SCIFA0 */ | 59 | /* SCIFA0 */ |
40 | static struct plat_sci_port scif0_platform_data = { | 60 | static struct plat_sci_port scif0_platform_data = { |
@@ -1045,8 +1065,20 @@ void __init sh7372_add_standard_devices(void) | |||
1045 | sh7372_add_device_to_domain(&sh7372_a4r, &jpu_device); | 1065 | sh7372_add_device_to_domain(&sh7372_a4r, &jpu_device); |
1046 | } | 1066 | } |
1047 | 1067 | ||
1068 | static void __init sh7372_earlytimer_init(void) | ||
1069 | { | ||
1070 | sh7372_clock_init(); | ||
1071 | shmobile_earlytimer_init(); | ||
1072 | } | ||
1073 | |||
1048 | void __init sh7372_add_early_devices(void) | 1074 | void __init sh7372_add_early_devices(void) |
1049 | { | 1075 | { |
1050 | early_platform_add_devices(sh7372_early_devices, | 1076 | early_platform_add_devices(sh7372_early_devices, |
1051 | ARRAY_SIZE(sh7372_early_devices)); | 1077 | ARRAY_SIZE(sh7372_early_devices)); |
1078 | |||
1079 | /* setup early console here as well */ | ||
1080 | shmobile_setup_console(); | ||
1081 | |||
1082 | /* override timer setup with soc-specific code */ | ||
1083 | shmobile_timer.init = sh7372_earlytimer_init; | ||
1052 | } | 1084 | } |
diff --git a/arch/arm/mach-shmobile/setup-sh7377.c b/arch/arm/mach-shmobile/setup-sh7377.c index bb405b8e459b..9f146095098b 100644 --- a/arch/arm/mach-shmobile/setup-sh7377.c +++ b/arch/arm/mach-shmobile/setup-sh7377.c | |||
@@ -30,8 +30,28 @@ | |||
30 | #include <linux/sh_intc.h> | 30 | #include <linux/sh_intc.h> |
31 | #include <linux/sh_timer.h> | 31 | #include <linux/sh_timer.h> |
32 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <mach/common.h> | ||
34 | #include <asm/mach/map.h> | ||
33 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
34 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
37 | #include <asm/mach/time.h> | ||
38 | |||
39 | static struct map_desc sh7377_io_desc[] __initdata = { | ||
40 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
41 | * used by CPGA, INTC and PFC. | ||
42 | */ | ||
43 | { | ||
44 | .virtual = 0xe6000000, | ||
45 | .pfn = __phys_to_pfn(0xe6000000), | ||
46 | .length = 256 << 20, | ||
47 | .type = MT_DEVICE_NONSHARED | ||
48 | }, | ||
49 | }; | ||
50 | |||
51 | void __init sh7377_map_io(void) | ||
52 | { | ||
53 | iotable_init(sh7377_io_desc, ARRAY_SIZE(sh7377_io_desc)); | ||
54 | } | ||
35 | 55 | ||
36 | /* SCIFA0 */ | 56 | /* SCIFA0 */ |
37 | static struct plat_sci_port scif0_platform_data = { | 57 | static struct plat_sci_port scif0_platform_data = { |
@@ -456,6 +476,12 @@ void __init sh7377_add_standard_devices(void) | |||
456 | ARRAY_SIZE(sh7377_devices)); | 476 | ARRAY_SIZE(sh7377_devices)); |
457 | } | 477 | } |
458 | 478 | ||
479 | static void __init sh7377_earlytimer_init(void) | ||
480 | { | ||
481 | sh7377_clock_init(); | ||
482 | shmobile_earlytimer_init(); | ||
483 | } | ||
484 | |||
459 | #define SMSTPCR3 0xe615013c | 485 | #define SMSTPCR3 0xe615013c |
460 | #define SMSTPCR3_CMT1 (1 << 29) | 486 | #define SMSTPCR3_CMT1 (1 << 29) |
461 | 487 | ||
@@ -466,4 +492,10 @@ void __init sh7377_add_early_devices(void) | |||
466 | 492 | ||
467 | early_platform_add_devices(sh7377_early_devices, | 493 | early_platform_add_devices(sh7377_early_devices, |
468 | ARRAY_SIZE(sh7377_early_devices)); | 494 | ARRAY_SIZE(sh7377_early_devices)); |
495 | |||
496 | /* setup early console here as well */ | ||
497 | shmobile_setup_console(); | ||
498 | |||
499 | /* override timer setup with soc-specific code */ | ||
500 | shmobile_timer.init = sh7377_earlytimer_init; | ||
469 | } | 501 | } |
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index 20e71e5cace4..b6a0734a738e 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c | |||
@@ -32,8 +32,28 @@ | |||
32 | #include <linux/sh_timer.h> | 32 | #include <linux/sh_timer.h> |
33 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
34 | #include <mach/sh73a0.h> | 34 | #include <mach/sh73a0.h> |
35 | #include <mach/common.h> | ||
35 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
37 | #include <asm/mach/map.h> | ||
36 | #include <asm/mach/arch.h> | 38 | #include <asm/mach/arch.h> |
39 | #include <asm/mach/time.h> | ||
40 | |||
41 | static struct map_desc sh73a0_io_desc[] __initdata = { | ||
42 | /* create a 1:1 entity map for 0xe6xxxxxx | ||
43 | * used by CPGA, INTC and PFC. | ||
44 | */ | ||
45 | { | ||
46 | .virtual = 0xe6000000, | ||
47 | .pfn = __phys_to_pfn(0xe6000000), | ||
48 | .length = 256 << 20, | ||
49 | .type = MT_DEVICE_NONSHARED | ||
50 | }, | ||
51 | }; | ||
52 | |||
53 | void __init sh73a0_map_io(void) | ||
54 | { | ||
55 | iotable_init(sh73a0_io_desc, ARRAY_SIZE(sh73a0_io_desc)); | ||
56 | } | ||
37 | 57 | ||
38 | static struct plat_sci_port scif0_platform_data = { | 58 | static struct plat_sci_port scif0_platform_data = { |
39 | .mapbase = 0xe6c40000, | 59 | .mapbase = 0xe6c40000, |
@@ -667,8 +687,20 @@ void __init sh73a0_add_standard_devices(void) | |||
667 | ARRAY_SIZE(sh73a0_late_devices)); | 687 | ARRAY_SIZE(sh73a0_late_devices)); |
668 | } | 688 | } |
669 | 689 | ||
690 | static void __init sh73a0_earlytimer_init(void) | ||
691 | { | ||
692 | sh73a0_clock_init(); | ||
693 | shmobile_earlytimer_init(); | ||
694 | } | ||
695 | |||
670 | void __init sh73a0_add_early_devices(void) | 696 | void __init sh73a0_add_early_devices(void) |
671 | { | 697 | { |
672 | early_platform_add_devices(sh73a0_early_devices, | 698 | early_platform_add_devices(sh73a0_early_devices, |
673 | ARRAY_SIZE(sh73a0_early_devices)); | 699 | ARRAY_SIZE(sh73a0_early_devices)); |
700 | |||
701 | /* setup early console here as well */ | ||
702 | shmobile_setup_console(); | ||
703 | |||
704 | /* override timer setup with soc-specific code */ | ||
705 | shmobile_timer.init = sh73a0_earlytimer_init; | ||
674 | } | 706 | } |
diff --git a/arch/arm/mach-shmobile/timer.c b/arch/arm/mach-shmobile/timer.c index 895794b543cd..be1ad70fe404 100644 --- a/arch/arm/mach-shmobile/timer.c +++ b/arch/arm/mach-shmobile/timer.c | |||
@@ -36,11 +36,15 @@ static void __init shmobile_late_time_init(void) | |||
36 | early_platform_driver_probe("earlytimer", 2, 0); | 36 | early_platform_driver_probe("earlytimer", 2, 0); |
37 | } | 37 | } |
38 | 38 | ||
39 | static void __init shmobile_timer_init(void) | 39 | void __init shmobile_earlytimer_init(void) |
40 | { | 40 | { |
41 | late_time_init = shmobile_late_time_init; | 41 | late_time_init = shmobile_late_time_init; |
42 | } | 42 | } |
43 | 43 | ||
44 | static void __init shmobile_timer_init(void) | ||
45 | { | ||
46 | } | ||
47 | |||
44 | struct sys_timer shmobile_timer = { | 48 | struct sys_timer shmobile_timer = { |
45 | .init = shmobile_timer_init, | 49 | .init = shmobile_timer_init, |
46 | }; | 50 | }; |