diff options
-rw-r--r-- | Documentation/devicetree/bindings/arm/spear.txt | 8 | ||||
-rw-r--r-- | arch/arm/boot/dts/spear600-evb.dts | 47 | ||||
-rw-r--r-- | arch/arm/boot/dts/spear600.dtsi | 174 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/Kconfig | 7 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/Makefile | 6 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/clock.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/spear600.c | 25 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/spear600_evb.c | 54 | ||||
-rw-r--r-- | arch/arm/mach-spear6xx/spear6xx.c | 132 |
9 files changed, 276 insertions, 191 deletions
diff --git a/Documentation/devicetree/bindings/arm/spear.txt b/Documentation/devicetree/bindings/arm/spear.txt new file mode 100644 index 000000000000..f8e54f092328 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/spear.txt | |||
@@ -0,0 +1,8 @@ | |||
1 | ST SPEAr Platforms Device Tree Bindings | ||
2 | --------------------------------------- | ||
3 | |||
4 | Boards with the ST SPEAr600 SoC shall have the following properties: | ||
5 | |||
6 | Required root node property: | ||
7 | |||
8 | compatible = "st,spear600"; | ||
diff --git a/arch/arm/boot/dts/spear600-evb.dts b/arch/arm/boot/dts/spear600-evb.dts new file mode 100644 index 000000000000..636292e18c90 --- /dev/null +++ b/arch/arm/boot/dts/spear600-evb.dts | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Stefan Roese <sr@denx.de> | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /dts-v1/; | ||
13 | /include/ "spear600.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "ST SPEAr600 Evaluation Board"; | ||
17 | compatible = "st,spear600-evb", "st,spear600"; | ||
18 | #address-cells = <1>; | ||
19 | #size-cells = <1>; | ||
20 | |||
21 | memory { | ||
22 | device_type = "memory"; | ||
23 | reg = <0 0x10000000>; | ||
24 | }; | ||
25 | |||
26 | ahb { | ||
27 | gmac: ethernet@e0800000 { | ||
28 | phy-mode = "gmii"; | ||
29 | status = "okay"; | ||
30 | }; | ||
31 | |||
32 | apb { | ||
33 | serial@d0000000 { | ||
34 | status = "okay"; | ||
35 | }; | ||
36 | |||
37 | serial@d0080000 { | ||
38 | status = "okay"; | ||
39 | }; | ||
40 | |||
41 | i2c@d0200000 { | ||
42 | clock-frequency = <400000>; | ||
43 | status = "okay"; | ||
44 | }; | ||
45 | }; | ||
46 | }; | ||
47 | }; | ||
diff --git a/arch/arm/boot/dts/spear600.dtsi b/arch/arm/boot/dts/spear600.dtsi new file mode 100644 index 000000000000..ebe0885a2b98 --- /dev/null +++ b/arch/arm/boot/dts/spear600.dtsi | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Stefan Roese <sr@denx.de> | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /include/ "skeleton.dtsi" | ||
13 | |||
14 | / { | ||
15 | compatible = "st,spear600"; | ||
16 | |||
17 | cpus { | ||
18 | cpu@0 { | ||
19 | compatible = "arm,arm926ejs"; | ||
20 | }; | ||
21 | }; | ||
22 | |||
23 | memory { | ||
24 | device_type = "memory"; | ||
25 | reg = <0 0x40000000>; | ||
26 | }; | ||
27 | |||
28 | ahb { | ||
29 | #address-cells = <1>; | ||
30 | #size-cells = <1>; | ||
31 | compatible = "simple-bus"; | ||
32 | ranges = <0xd0000000 0xd0000000 0x30000000>; | ||
33 | |||
34 | vic0: interrupt-controller@f1100000 { | ||
35 | compatible = "arm,pl190-vic"; | ||
36 | interrupt-controller; | ||
37 | reg = <0xf1100000 0x1000>; | ||
38 | #interrupt-cells = <1>; | ||
39 | }; | ||
40 | |||
41 | vic1: interrupt-controller@f1000000 { | ||
42 | compatible = "arm,pl190-vic"; | ||
43 | interrupt-controller; | ||
44 | reg = <0xf1000000 0x1000>; | ||
45 | #interrupt-cells = <1>; | ||
46 | }; | ||
47 | |||
48 | gmac: ethernet@e0800000 { | ||
49 | compatible = "st,spear600-gmac"; | ||
50 | reg = <0xe0800000 0x8000>; | ||
51 | interrupt-parent = <&vic1>; | ||
52 | interrupts = <24 23>; | ||
53 | interrupt-names = "macirq", "eth_wake_irq"; | ||
54 | status = "disabled"; | ||
55 | }; | ||
56 | |||
57 | fsmc: flash@d1800000 { | ||
58 | compatible = "st,spear600-fsmc-nand"; | ||
59 | #address-cells = <1>; | ||
60 | #size-cells = <1>; | ||
61 | reg = <0xd1800000 0x1000 /* FSMC Register */ | ||
62 | 0xd2000000 0x4000>; /* NAND Base */ | ||
63 | reg-names = "fsmc_regs", "nand_data"; | ||
64 | st,ale-off = <0x20000>; | ||
65 | st,cle-off = <0x10000>; | ||
66 | status = "disabled"; | ||
67 | }; | ||
68 | |||
69 | smi: flash@fc000000 { | ||
70 | compatible = "st,spear600-smi"; | ||
71 | #address-cells = <1>; | ||
72 | #size-cells = <1>; | ||
73 | reg = <0xfc000000 0x1000>; | ||
74 | interrupt-parent = <&vic1>; | ||
75 | interrupts = <12>; | ||
76 | status = "disabled"; | ||
77 | }; | ||
78 | |||
79 | ehci@e1800000 { | ||
80 | compatible = "st,spear600-ehci", "usb-ehci"; | ||
81 | reg = <0xe1800000 0x1000>; | ||
82 | interrupt-parent = <&vic1>; | ||
83 | interrupts = <27>; | ||
84 | status = "disabled"; | ||
85 | }; | ||
86 | |||
87 | ehci@e2000000 { | ||
88 | compatible = "st,spear600-ehci", "usb-ehci"; | ||
89 | reg = <0xe2000000 0x1000>; | ||
90 | interrupt-parent = <&vic1>; | ||
91 | interrupts = <29>; | ||
92 | status = "disabled"; | ||
93 | }; | ||
94 | |||
95 | ohci@e1900000 { | ||
96 | compatible = "st,spear600-ohci", "usb-ohci"; | ||
97 | reg = <0xe1900000 0x1000>; | ||
98 | interrupt-parent = <&vic1>; | ||
99 | interrupts = <26>; | ||
100 | status = "disabled"; | ||
101 | }; | ||
102 | |||
103 | ohci@e2100000 { | ||
104 | compatible = "st,spear600-ohci", "usb-ohci"; | ||
105 | reg = <0xe2100000 0x1000>; | ||
106 | interrupt-parent = <&vic1>; | ||
107 | interrupts = <28>; | ||
108 | status = "disabled"; | ||
109 | }; | ||
110 | |||
111 | apb { | ||
112 | #address-cells = <1>; | ||
113 | #size-cells = <1>; | ||
114 | compatible = "simple-bus"; | ||
115 | ranges = <0xd0000000 0xd0000000 0x30000000>; | ||
116 | |||
117 | serial@d0000000 { | ||
118 | compatible = "arm,pl011", "arm,primecell"; | ||
119 | reg = <0xd0000000 0x1000>; | ||
120 | interrupt-parent = <&vic0>; | ||
121 | interrupts = <24>; | ||
122 | status = "disabled"; | ||
123 | }; | ||
124 | |||
125 | serial@d0080000 { | ||
126 | compatible = "arm,pl011", "arm,primecell"; | ||
127 | reg = <0xd0080000 0x1000>; | ||
128 | interrupt-parent = <&vic0>; | ||
129 | interrupts = <25>; | ||
130 | status = "disabled"; | ||
131 | }; | ||
132 | |||
133 | /* local/cpu GPIO */ | ||
134 | gpio0: gpio@f0100000 { | ||
135 | #gpio-cells = <2>; | ||
136 | compatible = "arm,pl061", "arm,primecell"; | ||
137 | gpio-controller; | ||
138 | reg = <0xf0100000 0x1000>; | ||
139 | interrupt-parent = <&vic0>; | ||
140 | interrupts = <18>; | ||
141 | }; | ||
142 | |||
143 | /* basic GPIO */ | ||
144 | gpio1: gpio@fc980000 { | ||
145 | #gpio-cells = <2>; | ||
146 | compatible = "arm,pl061", "arm,primecell"; | ||
147 | gpio-controller; | ||
148 | reg = <0xfc980000 0x1000>; | ||
149 | interrupt-parent = <&vic1>; | ||
150 | interrupts = <19>; | ||
151 | }; | ||
152 | |||
153 | /* appl GPIO */ | ||
154 | gpio2: gpio@d8100000 { | ||
155 | #gpio-cells = <2>; | ||
156 | compatible = "arm,pl061", "arm,primecell"; | ||
157 | gpio-controller; | ||
158 | reg = <0xd8100000 0x1000>; | ||
159 | interrupt-parent = <&vic1>; | ||
160 | interrupts = <4>; | ||
161 | }; | ||
162 | |||
163 | i2c@d0200000 { | ||
164 | #address-cells = <1>; | ||
165 | #size-cells = <0>; | ||
166 | compatible = "snps,designware-i2c"; | ||
167 | reg = <0xd0200000 0x1000>; | ||
168 | interrupt-parent = <&vic0>; | ||
169 | interrupts = <28>; | ||
170 | status = "disabled"; | ||
171 | }; | ||
172 | }; | ||
173 | }; | ||
174 | }; | ||
diff --git a/arch/arm/mach-spear6xx/Kconfig b/arch/arm/mach-spear6xx/Kconfig index ff4ae5ba00f1..fbe298bd1d92 100644 --- a/arch/arm/mach-spear6xx/Kconfig +++ b/arch/arm/mach-spear6xx/Kconfig | |||
@@ -5,11 +5,12 @@ | |||
5 | if ARCH_SPEAR6XX | 5 | if ARCH_SPEAR6XX |
6 | 6 | ||
7 | menu "SPEAr6xx Implementations" | 7 | menu "SPEAr6xx Implementations" |
8 | config BOARD_SPEAR600_EVB | 8 | config BOARD_SPEAR600_DT |
9 | bool "SPEAr600 Evaluation Board" | 9 | bool "SPEAr600 generic board configured via device-tree" |
10 | select MACH_SPEAR600 | 10 | select MACH_SPEAR600 |
11 | select USE_OF | ||
11 | help | 12 | help |
12 | Supports ST SPEAr600 Evaluation Board | 13 | Supports ST SPEAr600 boards configured via the device-tree |
13 | 14 | ||
14 | endmenu | 15 | endmenu |
15 | 16 | ||
diff --git a/arch/arm/mach-spear6xx/Makefile b/arch/arm/mach-spear6xx/Makefile index cc1a4d82d459..76e5750552fc 100644 --- a/arch/arm/mach-spear6xx/Makefile +++ b/arch/arm/mach-spear6xx/Makefile | |||
@@ -4,9 +4,3 @@ | |||
4 | 4 | ||
5 | # common files | 5 | # common files |
6 | obj-y += clock.o spear6xx.o | 6 | obj-y += clock.o spear6xx.o |
7 | |||
8 | # spear600 specific files | ||
9 | obj-$(CONFIG_MACH_SPEAR600) += spear600.o | ||
10 | |||
11 | # spear600 boards files | ||
12 | obj-$(CONFIG_BOARD_SPEAR600_EVB) += spear600_evb.o | ||
diff --git a/arch/arm/mach-spear6xx/clock.c b/arch/arm/mach-spear6xx/clock.c index ac70e0d88fef..358f2800f17b 100644 --- a/arch/arm/mach-spear6xx/clock.c +++ b/arch/arm/mach-spear6xx/clock.c | |||
@@ -641,8 +641,8 @@ static struct clk_lookup spear_clk_lookups[] = { | |||
641 | { .con_id = "gpt0_synth_clk", .clk = &gpt0_synth_clk}, | 641 | { .con_id = "gpt0_synth_clk", .clk = &gpt0_synth_clk}, |
642 | { .con_id = "gpt2_synth_clk", .clk = &gpt2_synth_clk}, | 642 | { .con_id = "gpt2_synth_clk", .clk = &gpt2_synth_clk}, |
643 | { .con_id = "gpt3_synth_clk", .clk = &gpt3_synth_clk}, | 643 | { .con_id = "gpt3_synth_clk", .clk = &gpt3_synth_clk}, |
644 | { .dev_id = "uart0", .clk = &uart0_clk}, | 644 | { .dev_id = "d0000000.serial", .clk = &uart0_clk}, |
645 | { .dev_id = "uart1", .clk = &uart1_clk}, | 645 | { .dev_id = "d0080000.serial", .clk = &uart1_clk}, |
646 | { .dev_id = "firda", .clk = &firda_clk}, | 646 | { .dev_id = "firda", .clk = &firda_clk}, |
647 | { .dev_id = "clcd", .clk = &clcd_clk}, | 647 | { .dev_id = "clcd", .clk = &clcd_clk}, |
648 | { .dev_id = "gpt0", .clk = &gpt0_clk}, | 648 | { .dev_id = "gpt0", .clk = &gpt0_clk}, |
@@ -655,20 +655,20 @@ static struct clk_lookup spear_clk_lookups[] = { | |||
655 | { .con_id = "usbh.1_clk", .clk = &usbh1_clk}, | 655 | { .con_id = "usbh.1_clk", .clk = &usbh1_clk}, |
656 | /* clock derived from ahb clk */ | 656 | /* clock derived from ahb clk */ |
657 | { .con_id = "apb_clk", .clk = &apb_clk}, | 657 | { .con_id = "apb_clk", .clk = &apb_clk}, |
658 | { .dev_id = "i2c_designware.0", .clk = &i2c_clk}, | 658 | { .dev_id = "d0200000.i2c", .clk = &i2c_clk}, |
659 | { .dev_id = "dma", .clk = &dma_clk}, | 659 | { .dev_id = "dma", .clk = &dma_clk}, |
660 | { .dev_id = "jpeg", .clk = &jpeg_clk}, | 660 | { .dev_id = "jpeg", .clk = &jpeg_clk}, |
661 | { .dev_id = "gmac", .clk = &gmac_clk}, | 661 | { .dev_id = "gmac", .clk = &gmac_clk}, |
662 | { .dev_id = "smi", .clk = &smi_clk}, | 662 | { .dev_id = "smi", .clk = &smi_clk}, |
663 | { .con_id = "fsmc", .clk = &fsmc_clk}, | 663 | { .dev_id = "fsmc-nand", .clk = &fsmc_clk}, |
664 | /* clock derived from apb clk */ | 664 | /* clock derived from apb clk */ |
665 | { .dev_id = "adc", .clk = &adc_clk}, | 665 | { .dev_id = "adc", .clk = &adc_clk}, |
666 | { .dev_id = "ssp-pl022.0", .clk = &ssp0_clk}, | 666 | { .dev_id = "ssp-pl022.0", .clk = &ssp0_clk}, |
667 | { .dev_id = "ssp-pl022.1", .clk = &ssp1_clk}, | 667 | { .dev_id = "ssp-pl022.1", .clk = &ssp1_clk}, |
668 | { .dev_id = "ssp-pl022.2", .clk = &ssp2_clk}, | 668 | { .dev_id = "ssp-pl022.2", .clk = &ssp2_clk}, |
669 | { .dev_id = "gpio0", .clk = &gpio0_clk}, | 669 | { .dev_id = "f0100000.gpio", .clk = &gpio0_clk}, |
670 | { .dev_id = "gpio1", .clk = &gpio1_clk}, | 670 | { .dev_id = "fc980000.gpio", .clk = &gpio1_clk}, |
671 | { .dev_id = "gpio2", .clk = &gpio2_clk}, | 671 | { .dev_id = "d8100000.gpio", .clk = &gpio2_clk}, |
672 | }; | 672 | }; |
673 | 673 | ||
674 | void __init spear6xx_clk_init(void) | 674 | void __init spear6xx_clk_init(void) |
diff --git a/arch/arm/mach-spear6xx/spear600.c b/arch/arm/mach-spear6xx/spear600.c deleted file mode 100644 index d0e6eeae9b04..000000000000 --- a/arch/arm/mach-spear6xx/spear600.c +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear6xx/spear600.c | ||
3 | * | ||
4 | * SPEAr600 machine source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Rajeev Kumar<rajeev-dlh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/ptrace.h> | ||
15 | #include <asm/irq.h> | ||
16 | #include <mach/generic.h> | ||
17 | #include <mach/hardware.h> | ||
18 | |||
19 | /* Add spear600 specific devices here */ | ||
20 | |||
21 | void __init spear600_init(void) | ||
22 | { | ||
23 | /* call spear6xx family common init function */ | ||
24 | spear6xx_init(); | ||
25 | } | ||
diff --git a/arch/arm/mach-spear6xx/spear600_evb.c b/arch/arm/mach-spear6xx/spear600_evb.c deleted file mode 100644 index c6e4254741cc..000000000000 --- a/arch/arm/mach-spear6xx/spear600_evb.c +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-spear6xx/spear600_evb.c | ||
3 | * | ||
4 | * SPEAr600 evaluation board source file | ||
5 | * | ||
6 | * Copyright (C) 2009 ST Microelectronics | ||
7 | * Viresh Kumar<viresh.kumar@st.com> | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <asm/hardware/vic.h> | ||
15 | #include <asm/mach/arch.h> | ||
16 | #include <asm/mach-types.h> | ||
17 | #include <mach/generic.h> | ||
18 | #include <mach/hardware.h> | ||
19 | |||
20 | static struct amba_device *amba_devs[] __initdata = { | ||
21 | &gpio_device[0], | ||
22 | &gpio_device[1], | ||
23 | &gpio_device[2], | ||
24 | &uart_device[0], | ||
25 | &uart_device[1], | ||
26 | }; | ||
27 | |||
28 | static struct platform_device *plat_devs[] __initdata = { | ||
29 | }; | ||
30 | |||
31 | static void __init spear600_evb_init(void) | ||
32 | { | ||
33 | unsigned int i; | ||
34 | |||
35 | /* call spear600 machine init function */ | ||
36 | spear600_init(); | ||
37 | |||
38 | /* Add Platform Devices */ | ||
39 | platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs)); | ||
40 | |||
41 | /* Add Amba Devices */ | ||
42 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
43 | amba_device_register(amba_devs[i], &iomem_resource); | ||
44 | } | ||
45 | |||
46 | MACHINE_START(SPEAR600, "ST-SPEAR600-EVB") | ||
47 | .atag_offset = 0x100, | ||
48 | .map_io = spear6xx_map_io, | ||
49 | .init_irq = spear6xx_init_irq, | ||
50 | .handle_irq = vic_handle_irq, | ||
51 | .timer = &spear6xx_timer, | ||
52 | .init_machine = spear600_evb_init, | ||
53 | .restart = spear_restart, | ||
54 | MACHINE_END | ||
diff --git a/arch/arm/mach-spear6xx/spear6xx.c b/arch/arm/mach-spear6xx/spear6xx.c index e0f6628c8b2c..2ed8b14c82c8 100644 --- a/arch/arm/mach-spear6xx/spear6xx.c +++ b/arch/arm/mach-spear6xx/spear6xx.c | |||
@@ -6,111 +6,21 @@ | |||
6 | * Copyright (C) 2009 ST Microelectronics | 6 | * Copyright (C) 2009 ST Microelectronics |
7 | * Rajeev Kumar<rajeev-dlh.kumar@st.com> | 7 | * Rajeev Kumar<rajeev-dlh.kumar@st.com> |
8 | * | 8 | * |
9 | * Copyright 2012 Stefan Roese <sr@denx.de> | ||
10 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | 11 | * This file is licensed under the terms of the GNU General Public |
10 | * License version 2. This program is licensed "as is" without any | 12 | * License version 2. This program is licensed "as is" without any |
11 | * warranty of any kind, whether express or implied. | 13 | * warranty of any kind, whether express or implied. |
12 | */ | 14 | */ |
13 | 15 | ||
14 | #include <linux/types.h> | 16 | #include <linux/of.h> |
15 | #include <linux/amba/pl061.h> | 17 | #include <linux/of_address.h> |
16 | #include <linux/ptrace.h> | 18 | #include <linux/of_irq.h> |
17 | #include <linux/io.h> | 19 | #include <linux/of_platform.h> |
18 | #include <asm/hardware/vic.h> | 20 | #include <asm/hardware/vic.h> |
19 | #include <asm/irq.h> | ||
20 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
21 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
22 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
23 | #include <mach/irqs.h> | ||
24 | |||
25 | /* Add spear6xx machines common devices here */ | ||
26 | /* uart device registration */ | ||
27 | struct amba_device uart_device[] = { | ||
28 | { | ||
29 | .dev = { | ||
30 | .init_name = "uart0", | ||
31 | }, | ||
32 | .res = { | ||
33 | .start = SPEAR6XX_ICM1_UART0_BASE, | ||
34 | .end = SPEAR6XX_ICM1_UART0_BASE + SZ_4K - 1, | ||
35 | .flags = IORESOURCE_MEM, | ||
36 | }, | ||
37 | .irq = {IRQ_UART_0, NO_IRQ}, | ||
38 | }, { | ||
39 | .dev = { | ||
40 | .init_name = "uart1", | ||
41 | }, | ||
42 | .res = { | ||
43 | .start = SPEAR6XX_ICM1_UART1_BASE, | ||
44 | .end = SPEAR6XX_ICM1_UART1_BASE + SZ_4K - 1, | ||
45 | .flags = IORESOURCE_MEM, | ||
46 | }, | ||
47 | .irq = {IRQ_UART_1, NO_IRQ}, | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | /* gpio device registration */ | ||
52 | static struct pl061_platform_data gpio_plat_data[] = { | ||
53 | { | ||
54 | .gpio_base = 0, | ||
55 | .irq_base = SPEAR_GPIO0_INT_BASE, | ||
56 | }, { | ||
57 | .gpio_base = 8, | ||
58 | .irq_base = SPEAR_GPIO1_INT_BASE, | ||
59 | }, { | ||
60 | .gpio_base = 16, | ||
61 | .irq_base = SPEAR_GPIO2_INT_BASE, | ||
62 | }, | ||
63 | }; | ||
64 | |||
65 | struct amba_device gpio_device[] = { | ||
66 | { | ||
67 | .dev = { | ||
68 | .init_name = "gpio0", | ||
69 | .platform_data = &gpio_plat_data[0], | ||
70 | }, | ||
71 | .res = { | ||
72 | .start = SPEAR6XX_CPU_GPIO_BASE, | ||
73 | .end = SPEAR6XX_CPU_GPIO_BASE + SZ_4K - 1, | ||
74 | .flags = IORESOURCE_MEM, | ||
75 | }, | ||
76 | .irq = {IRQ_LOCAL_GPIO, NO_IRQ}, | ||
77 | }, { | ||
78 | .dev = { | ||
79 | .init_name = "gpio1", | ||
80 | .platform_data = &gpio_plat_data[1], | ||
81 | }, | ||
82 | .res = { | ||
83 | .start = SPEAR6XX_ICM3_GPIO_BASE, | ||
84 | .end = SPEAR6XX_ICM3_GPIO_BASE + SZ_4K - 1, | ||
85 | .flags = IORESOURCE_MEM, | ||
86 | }, | ||
87 | .irq = {IRQ_BASIC_GPIO, NO_IRQ}, | ||
88 | }, { | ||
89 | .dev = { | ||
90 | .init_name = "gpio2", | ||
91 | .platform_data = &gpio_plat_data[2], | ||
92 | }, | ||
93 | .res = { | ||
94 | .start = SPEAR6XX_ICM2_GPIO_BASE, | ||
95 | .end = SPEAR6XX_ICM2_GPIO_BASE + SZ_4K - 1, | ||
96 | .flags = IORESOURCE_MEM, | ||
97 | }, | ||
98 | .irq = {IRQ_APPL_GPIO, NO_IRQ}, | ||
99 | } | ||
100 | }; | ||
101 | |||
102 | /* This will add devices, and do machine specific tasks */ | ||
103 | void __init spear6xx_init(void) | ||
104 | { | ||
105 | /* nothing to do for now */ | ||
106 | } | ||
107 | |||
108 | /* This will initialize vic */ | ||
109 | void __init spear6xx_init_irq(void) | ||
110 | { | ||
111 | vic_init((void __iomem *)VA_SPEAR6XX_CPU_VIC_PRI_BASE, 0, ~0, 0); | ||
112 | vic_init((void __iomem *)VA_SPEAR6XX_CPU_VIC_SEC_BASE, 32, ~0, 0); | ||
113 | } | ||
114 | 24 | ||
115 | /* Following will create static virtual/physical mappings */ | 25 | /* Following will create static virtual/physical mappings */ |
116 | static struct map_desc spear6xx_io_desc[] __initdata = { | 26 | static struct map_desc spear6xx_io_desc[] __initdata = { |
@@ -181,3 +91,33 @@ static void __init spear6xx_timer_init(void) | |||
181 | struct sys_timer spear6xx_timer = { | 91 | struct sys_timer spear6xx_timer = { |
182 | .init = spear6xx_timer_init, | 92 | .init = spear6xx_timer_init, |
183 | }; | 93 | }; |
94 | |||
95 | static void __init spear600_dt_init(void) | ||
96 | { | ||
97 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
98 | } | ||
99 | |||
100 | static const char *spear600_dt_board_compat[] = { | ||
101 | "st,spear600", | ||
102 | NULL | ||
103 | }; | ||
104 | |||
105 | static const struct of_device_id vic_of_match[] __initconst = { | ||
106 | { .compatible = "arm,pl190-vic", .data = vic_of_init, }, | ||
107 | { /* Sentinel */ } | ||
108 | }; | ||
109 | |||
110 | static void __init spear6xx_dt_init_irq(void) | ||
111 | { | ||
112 | of_irq_init(vic_of_match); | ||
113 | } | ||
114 | |||
115 | DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)") | ||
116 | .map_io = spear6xx_map_io, | ||
117 | .init_irq = spear6xx_dt_init_irq, | ||
118 | .handle_irq = vic_handle_irq, | ||
119 | .timer = &spear6xx_timer, | ||
120 | .init_machine = spear600_dt_init, | ||
121 | .restart = spear_restart, | ||
122 | .dt_compat = spear600_dt_board_compat, | ||
123 | MACHINE_END | ||