| From koba@kmckk.co.jp Wed Oct 3 04:30:22 2012 |
| From: Tetsuyuki Kobayashi <koba@kmckk.co.jp> |
| Date: Wed, 3 Oct 2012 20:23:16 +0900 |
| Subject: [PATCH 24/26] mach-shmobile: Emma Mobile EV2 DT support V3 |
| To: greg@kroah.com |
| Cc: ltsi-dev@lists.linuxfoundation.org, horms@verge.net.au, damm@opensource.se, "Rafael J. Wysocki" <rjw@sisk.pl>, Tetsuyuki Kobayashi <koba@kmckk.co.jp> |
| Message-ID: <1349263398-13152-25-git-send-email-koba@kmckk.co.jp> |
| |
| |
| From: Magnus Damm <damm@opensource.se> |
| |
| This is EMEV2 DT support V3. The support is limited to |
| whatever devices that are complied in the kernel. At this |
| point we have UARTs handled by "em-uart" and a timer |
| handled by "em-sti". Clocks and SMP are not supported. |
| |
| Signed-off-by: Magnus Damm <damm@opensource.se> |
| Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> |
| (cherry picked from commit 3d5de27174955702bc874302ba9e72d71d5acd58) |
| |
| Signed-off-by: Tetsuyuki Kobayashi <koba@kmckk.co.jp> |
| --- |
| arch/arm/boot/dts/emev2.dtsi | 63 ++++++++++++++++++++++++++++++++++ |
| arch/arm/mach-shmobile/clock-emev2.c | 5 +++ |
| arch/arm/mach-shmobile/setup-emev2.c | 47 ++++++++++++++++++++++++- |
| 3 files changed, 114 insertions(+), 1 deletion(-) |
| create mode 100644 arch/arm/boot/dts/emev2.dtsi |
| |
| diff --git a/arch/arm/boot/dts/emev2.dtsi b/arch/arm/boot/dts/emev2.dtsi |
| new file mode 100644 |
| index 0000000..eb504a6 |
| --- /dev/null |
| +++ b/arch/arm/boot/dts/emev2.dtsi |
| @@ -0,0 +1,63 @@ |
| +/* |
| + * Device Tree Source for the EMEV2 SoC |
| + * |
| + * Copyright (C) 2012 Renesas Solutions Corp. |
| + * |
| + * This file is licensed under the terms of the GNU General Public License |
| + * version 2. This program is licensed "as is" without any warranty of any |
| + * kind, whether express or implied. |
| + */ |
| + |
| +/include/ "skeleton.dtsi" |
| + |
| +/ { |
| + compatible = "renesas,emev2"; |
| + interrupt-parent = <&gic>; |
| + |
| + cpus { |
| + cpu@0 { |
| + compatible = "arm,cortex-a9"; |
| + }; |
| + cpu@1 { |
| + compatible = "arm,cortex-a9"; |
| + }; |
| + }; |
| + |
| + gic: interrupt-controller@e0020000 { |
| + compatible = "arm,cortex-a9-gic"; |
| + interrupt-controller; |
| + #interrupt-cells = <3>; |
| + reg = <0xe0028000 0x1000>, |
| + <0xe0020000 0x0100>; |
| + }; |
| + |
| + sti@e0180000 { |
| + compatible = "renesas,em-sti"; |
| + reg = <0xe0180000 0x54>; |
| + interrupts = <0 125 0>; |
| + }; |
| + |
| + uart@e1020000 { |
| + compatible = "renesas,em-uart"; |
| + reg = <0xe1020000 0x38>; |
| + interrupts = <0 8 0>; |
| + }; |
| + |
| + uart@e1030000 { |
| + compatible = "renesas,em-uart"; |
| + reg = <0xe1030000 0x38>; |
| + interrupts = <0 9 0>; |
| + }; |
| + |
| + uart@e1040000 { |
| + compatible = "renesas,em-uart"; |
| + reg = <0xe1040000 0x38>; |
| + interrupts = <0 10 0>; |
| + }; |
| + |
| + uart@e1050000 { |
| + compatible = "renesas,em-uart"; |
| + reg = <0xe1050000 0x38>; |
| + interrupts = <0 11 0>; |
| + }; |
| +}; |
| diff --git a/arch/arm/mach-shmobile/clock-emev2.c b/arch/arm/mach-shmobile/clock-emev2.c |
| index 5bc97de..4710f18 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) |
| |
| static struct clk_lookup lookups[] = { |
| CLKDEV_DEV_ID("serial8250-em.0", &gclk_clks[GCLK_USIAU0_SCLK]), |
| + CLKDEV_DEV_ID("e1020000.uart", &gclk_clks[GCLK_USIAU0_SCLK]), |
| CLKDEV_DEV_ID("serial8250-em.1", &gclk_clks[GCLK_USIBU1_SCLK]), |
| + CLKDEV_DEV_ID("e1030000.uart", &gclk_clks[GCLK_USIBU1_SCLK]), |
| CLKDEV_DEV_ID("serial8250-em.2", &gclk_clks[GCLK_USIBU2_SCLK]), |
| + CLKDEV_DEV_ID("e1040000.uart", &gclk_clks[GCLK_USIBU2_SCLK]), |
| CLKDEV_DEV_ID("serial8250-em.3", &gclk_clks[GCLK_USIBU3_SCLK]), |
| + CLKDEV_DEV_ID("e1050000.uart", &gclk_clks[GCLK_USIBU3_SCLK]), |
| CLKDEV_DEV_ID("em_sti.0", &gclk_clks[GCLK_STI_SCLK]), |
| + CLKDEV_DEV_ID("e0180000.sti", &gclk_clks[GCLK_STI_SCLK]), |
| }; |
| |
| 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 d40fede..dae9aa6 100644 |
| --- a/arch/arm/mach-shmobile/setup-emev2.c |
| +++ b/arch/arm/mach-shmobile/setup-emev2.c |
| @@ -22,9 +22,11 @@ |
| #include <linux/irq.h> |
| #include <linux/platform_device.h> |
| #include <linux/platform_data/gpio-em.h> |
| +#include <linux/of_platform.h> |
| #include <linux/delay.h> |
| #include <linux/input.h> |
| #include <linux/io.h> |
| +#include <linux/of_irq.h> |
| #include <mach/hardware.h> |
| #include <mach/common.h> |
| #include <mach/emev2.h> |
| @@ -381,9 +383,14 @@ void __init emev2_add_standard_devices(void) |
| ARRAY_SIZE(emev2_late_devices)); |
| } |
| |
| -void __init emev2_add_early_devices(void) |
| +void __init emev2_init_delay(void) |
| { |
| shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ |
| +} |
| + |
| +void __init emev2_add_early_devices(void) |
| +{ |
| + emev2_init_delay(); |
| |
| early_platform_add_devices(emev2_early_devices, |
| ARRAY_SIZE(emev2_early_devices)); |
| @@ -405,3 +412,41 @@ void __init emev2_init_irq(void) |
| /* Use GIC to handle interrupts */ |
| gic_init(0, 29, gic_dist_base, gic_cpu_base); |
| } |
| + |
| +#ifdef CONFIG_USE_OF |
| +static const struct of_dev_auxdata emev2_auxdata_lookup[] __initconst = { |
| + { } |
| +}; |
| + |
| +void __init emev2_add_standard_devices_dt(void) |
| +{ |
| + of_platform_populate(NULL, of_default_bus_match_table, |
| + emev2_auxdata_lookup, NULL); |
| +} |
| + |
| +static const struct of_device_id emev2_dt_irq_match[] = { |
| + { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, |
| + {}, |
| +}; |
| + |
| +static const char *emev2_boards_compat_dt[] __initdata = { |
| + "renesas,emev2", |
| + NULL, |
| +}; |
| + |
| +void __init emev2_init_irq_dt(void) |
| +{ |
| + of_irq_init(emev2_dt_irq_match); |
| +} |
| + |
| +DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") |
| + .init_early = emev2_init_delay, |
| + .nr_irqs = NR_IRQS_LEGACY, |
| + .init_irq = emev2_init_irq_dt, |
| + .handle_irq = gic_handle_irq, |
| + .init_machine = emev2_add_standard_devices_dt, |
| + .timer = &shmobile_timer, |
| + .dt_compat = emev2_boards_compat_dt, |
| +MACHINE_END |
| + |
| +#endif /* CONFIG_USE_OF */ |
| -- |
| 1.7.9.5 |
| |