diff options
-rw-r--r-- | arch/arm/boot/dts/emev2.dtsi | 63 | ||||
-rw-r--r-- | arch/arm/mach-shmobile/clock-emev2.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-shmobile/setup-emev2.c | 47 |
3 files changed, 114 insertions, 1 deletions
diff --git a/arch/arm/boot/dts/emev2.dtsi b/arch/arm/boot/dts/emev2.dtsi new file mode 100644 index 000000000000..eb504a6c0f4a --- /dev/null +++ b/arch/arm/boot/dts/emev2.dtsi | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Device Tree Source for the EMEV2 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Renesas Solutions Corp. | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public License | ||
7 | * version 2. This program is licensed "as is" without any warranty of any | ||
8 | * kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | /include/ "skeleton.dtsi" | ||
12 | |||
13 | / { | ||
14 | compatible = "renesas,emev2"; | ||
15 | interrupt-parent = <&gic>; | ||
16 | |||
17 | cpus { | ||
18 | cpu@0 { | ||
19 | compatible = "arm,cortex-a9"; | ||
20 | }; | ||
21 | cpu@1 { | ||
22 | compatible = "arm,cortex-a9"; | ||
23 | }; | ||
24 | }; | ||
25 | |||
26 | gic: interrupt-controller@e0020000 { | ||
27 | compatible = "arm,cortex-a9-gic"; | ||
28 | interrupt-controller; | ||
29 | #interrupt-cells = <3>; | ||
30 | reg = <0xe0028000 0x1000>, | ||
31 | <0xe0020000 0x0100>; | ||
32 | }; | ||
33 | |||
34 | sti@e0180000 { | ||
35 | compatible = "renesas,em-sti"; | ||
36 | reg = <0xe0180000 0x54>; | ||
37 | interrupts = <0 125 0>; | ||
38 | }; | ||
39 | |||
40 | uart@e1020000 { | ||
41 | compatible = "renesas,em-uart"; | ||
42 | reg = <0xe1020000 0x38>; | ||
43 | interrupts = <0 8 0>; | ||
44 | }; | ||
45 | |||
46 | uart@e1030000 { | ||
47 | compatible = "renesas,em-uart"; | ||
48 | reg = <0xe1030000 0x38>; | ||
49 | interrupts = <0 9 0>; | ||
50 | }; | ||
51 | |||
52 | uart@e1040000 { | ||
53 | compatible = "renesas,em-uart"; | ||
54 | reg = <0xe1040000 0x38>; | ||
55 | interrupts = <0 10 0>; | ||
56 | }; | ||
57 | |||
58 | uart@e1050000 { | ||
59 | compatible = "renesas,em-uart"; | ||
60 | reg = <0xe1050000 0x38>; | ||
61 | interrupts = <0 11 0>; | ||
62 | }; | ||
63 | }; | ||
diff --git a/arch/arm/mach-shmobile/clock-emev2.c b/arch/arm/mach-shmobile/clock-emev2.c index 5bc97de4a1ed..4710f1847bb7 100644 --- a/arch/arm/mach-shmobile/clock-emev2.c +++ b/arch/arm/mach-shmobile/clock-emev2.c | |||
@@ -191,10 +191,15 @@ static int __init emev2_sclkdiv_register(struct clk *clks, int nr) | |||
191 | 191 | ||
192 | static struct clk_lookup lookups[] = { | 192 | static struct clk_lookup lookups[] = { |
193 | CLKDEV_DEV_ID("serial8250-em.0", &gclk_clks[GCLK_USIAU0_SCLK]), | 193 | CLKDEV_DEV_ID("serial8250-em.0", &gclk_clks[GCLK_USIAU0_SCLK]), |
194 | CLKDEV_DEV_ID("e1020000.uart", &gclk_clks[GCLK_USIAU0_SCLK]), | ||
194 | CLKDEV_DEV_ID("serial8250-em.1", &gclk_clks[GCLK_USIBU1_SCLK]), | 195 | CLKDEV_DEV_ID("serial8250-em.1", &gclk_clks[GCLK_USIBU1_SCLK]), |
196 | CLKDEV_DEV_ID("e1030000.uart", &gclk_clks[GCLK_USIBU1_SCLK]), | ||
195 | CLKDEV_DEV_ID("serial8250-em.2", &gclk_clks[GCLK_USIBU2_SCLK]), | 197 | CLKDEV_DEV_ID("serial8250-em.2", &gclk_clks[GCLK_USIBU2_SCLK]), |
198 | CLKDEV_DEV_ID("e1040000.uart", &gclk_clks[GCLK_USIBU2_SCLK]), | ||
196 | CLKDEV_DEV_ID("serial8250-em.3", &gclk_clks[GCLK_USIBU3_SCLK]), | 199 | CLKDEV_DEV_ID("serial8250-em.3", &gclk_clks[GCLK_USIBU3_SCLK]), |
200 | CLKDEV_DEV_ID("e1050000.uart", &gclk_clks[GCLK_USIBU3_SCLK]), | ||
197 | CLKDEV_DEV_ID("em_sti.0", &gclk_clks[GCLK_STI_SCLK]), | 201 | CLKDEV_DEV_ID("em_sti.0", &gclk_clks[GCLK_STI_SCLK]), |
202 | CLKDEV_DEV_ID("e0180000.sti", &gclk_clks[GCLK_STI_SCLK]), | ||
198 | }; | 203 | }; |
199 | 204 | ||
200 | void __init emev2_clock_init(void) | 205 | void __init emev2_clock_init(void) |
diff --git a/arch/arm/mach-shmobile/setup-emev2.c b/arch/arm/mach-shmobile/setup-emev2.c index d40fede8c9b3..dae9aa68bb09 100644 --- a/arch/arm/mach-shmobile/setup-emev2.c +++ b/arch/arm/mach-shmobile/setup-emev2.c | |||
@@ -22,9 +22,11 @@ | |||
22 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/platform_data/gpio-em.h> | 24 | #include <linux/platform_data/gpio-em.h> |
25 | #include <linux/of_platform.h> | ||
25 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
26 | #include <linux/input.h> | 27 | #include <linux/input.h> |
27 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | #include <linux/of_irq.h> | ||
28 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
29 | #include <mach/common.h> | 31 | #include <mach/common.h> |
30 | #include <mach/emev2.h> | 32 | #include <mach/emev2.h> |
@@ -381,9 +383,14 @@ void __init emev2_add_standard_devices(void) | |||
381 | ARRAY_SIZE(emev2_late_devices)); | 383 | ARRAY_SIZE(emev2_late_devices)); |
382 | } | 384 | } |
383 | 385 | ||
384 | void __init emev2_add_early_devices(void) | 386 | void __init emev2_init_delay(void) |
385 | { | 387 | { |
386 | shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ | 388 | shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ |
389 | } | ||
390 | |||
391 | void __init emev2_add_early_devices(void) | ||
392 | { | ||
393 | emev2_init_delay(); | ||
387 | 394 | ||
388 | early_platform_add_devices(emev2_early_devices, | 395 | early_platform_add_devices(emev2_early_devices, |
389 | ARRAY_SIZE(emev2_early_devices)); | 396 | ARRAY_SIZE(emev2_early_devices)); |
@@ -405,3 +412,41 @@ void __init emev2_init_irq(void) | |||
405 | /* Use GIC to handle interrupts */ | 412 | /* Use GIC to handle interrupts */ |
406 | gic_init(0, 29, gic_dist_base, gic_cpu_base); | 413 | gic_init(0, 29, gic_dist_base, gic_cpu_base); |
407 | } | 414 | } |
415 | |||
416 | #ifdef CONFIG_USE_OF | ||
417 | static const struct of_dev_auxdata emev2_auxdata_lookup[] __initconst = { | ||
418 | { } | ||
419 | }; | ||
420 | |||
421 | void __init emev2_add_standard_devices_dt(void) | ||
422 | { | ||
423 | of_platform_populate(NULL, of_default_bus_match_table, | ||
424 | emev2_auxdata_lookup, NULL); | ||
425 | } | ||
426 | |||
427 | static const struct of_device_id emev2_dt_irq_match[] = { | ||
428 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
429 | {}, | ||
430 | }; | ||
431 | |||
432 | static const char *emev2_boards_compat_dt[] __initdata = { | ||
433 | "renesas,emev2", | ||
434 | NULL, | ||
435 | }; | ||
436 | |||
437 | void __init emev2_init_irq_dt(void) | ||
438 | { | ||
439 | of_irq_init(emev2_dt_irq_match); | ||
440 | } | ||
441 | |||
442 | DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") | ||
443 | .init_early = emev2_init_delay, | ||
444 | .nr_irqs = NR_IRQS_LEGACY, | ||
445 | .init_irq = emev2_init_irq_dt, | ||
446 | .handle_irq = gic_handle_irq, | ||
447 | .init_machine = emev2_add_standard_devices_dt, | ||
448 | .timer = &shmobile_timer, | ||
449 | .dt_compat = emev2_boards_compat_dt, | ||
450 | MACHINE_END | ||
451 | |||
452 | #endif /* CONFIG_USE_OF */ | ||