diff options
Diffstat (limited to 'arch/arm/mach-kirkwood')
-rw-r--r-- | arch/arm/mach-kirkwood/common.c | 59 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/dma.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/gpio.h | 38 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/irqs.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/kirkwood.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/include/mach/memory.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/irq.c | 35 | ||||
-rw-r--r-- | arch/arm/mach-kirkwood/rd88f6281-setup.c | 16 |
9 files changed, 150 insertions, 12 deletions
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 0bb1fbd84ccb..7b8ef97fb501 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -57,6 +57,7 @@ void __init kirkwood_map_io(void) | |||
57 | ****************************************************************************/ | 57 | ****************************************************************************/ |
58 | static struct orion_ehci_data kirkwood_ehci_data = { | 58 | static struct orion_ehci_data kirkwood_ehci_data = { |
59 | .dram = &kirkwood_mbus_dram_info, | 59 | .dram = &kirkwood_mbus_dram_info, |
60 | .phy_version = EHCI_PHY_NA, | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | static u64 ehci_dmamask = 0xffffffffUL; | 63 | static u64 ehci_dmamask = 0xffffffffUL; |
@@ -153,6 +154,64 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) | |||
153 | 154 | ||
154 | 155 | ||
155 | /***************************************************************************** | 156 | /***************************************************************************** |
157 | * GE01 | ||
158 | ****************************************************************************/ | ||
159 | struct mv643xx_eth_shared_platform_data kirkwood_ge01_shared_data = { | ||
160 | .dram = &kirkwood_mbus_dram_info, | ||
161 | .shared_smi = &kirkwood_ge00_shared, | ||
162 | }; | ||
163 | |||
164 | static struct resource kirkwood_ge01_shared_resources[] = { | ||
165 | { | ||
166 | .name = "ge01 base", | ||
167 | .start = GE01_PHYS_BASE + 0x2000, | ||
168 | .end = GE01_PHYS_BASE + 0x3fff, | ||
169 | .flags = IORESOURCE_MEM, | ||
170 | }, { | ||
171 | .name = "ge01 err irq", | ||
172 | .start = IRQ_KIRKWOOD_GE01_ERR, | ||
173 | .end = IRQ_KIRKWOOD_GE01_ERR, | ||
174 | .flags = IORESOURCE_IRQ, | ||
175 | }, | ||
176 | }; | ||
177 | |||
178 | static struct platform_device kirkwood_ge01_shared = { | ||
179 | .name = MV643XX_ETH_SHARED_NAME, | ||
180 | .id = 1, | ||
181 | .dev = { | ||
182 | .platform_data = &kirkwood_ge01_shared_data, | ||
183 | }, | ||
184 | .num_resources = ARRAY_SIZE(kirkwood_ge01_shared_resources), | ||
185 | .resource = kirkwood_ge01_shared_resources, | ||
186 | }; | ||
187 | |||
188 | static struct resource kirkwood_ge01_resources[] = { | ||
189 | { | ||
190 | .name = "ge01 irq", | ||
191 | .start = IRQ_KIRKWOOD_GE01_SUM, | ||
192 | .end = IRQ_KIRKWOOD_GE01_SUM, | ||
193 | .flags = IORESOURCE_IRQ, | ||
194 | }, | ||
195 | }; | ||
196 | |||
197 | static struct platform_device kirkwood_ge01 = { | ||
198 | .name = MV643XX_ETH_NAME, | ||
199 | .id = 1, | ||
200 | .num_resources = 1, | ||
201 | .resource = kirkwood_ge01_resources, | ||
202 | }; | ||
203 | |||
204 | void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) | ||
205 | { | ||
206 | eth_data->shared = &kirkwood_ge01_shared; | ||
207 | kirkwood_ge01.dev.platform_data = eth_data; | ||
208 | |||
209 | platform_device_register(&kirkwood_ge01_shared); | ||
210 | platform_device_register(&kirkwood_ge01); | ||
211 | } | ||
212 | |||
213 | |||
214 | /***************************************************************************** | ||
156 | * Ethernet switch | 215 | * Ethernet switch |
157 | ****************************************************************************/ | 216 | ****************************************************************************/ |
158 | static struct resource kirkwood_switch_resources[] = { | 217 | static struct resource kirkwood_switch_resources[] = { |
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 5774632a67e3..fe367c18e722 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -30,6 +30,7 @@ void kirkwood_pcie_id(u32 *dev, u32 *rev); | |||
30 | 30 | ||
31 | void kirkwood_ehci_init(void); | 31 | void kirkwood_ehci_init(void); |
32 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); | 32 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); |
33 | void kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data); | ||
33 | void kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq); | 34 | void kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq); |
34 | void kirkwood_pcie_init(void); | 35 | void kirkwood_pcie_init(void); |
35 | void kirkwood_rtc_init(void); | 36 | void kirkwood_rtc_init(void); |
diff --git a/arch/arm/mach-kirkwood/include/mach/dma.h b/arch/arm/mach-kirkwood/include/mach/dma.h deleted file mode 100644 index 40a8c178f10d..000000000000 --- a/arch/arm/mach-kirkwood/include/mach/dma.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | /* empty */ | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/gpio.h b/arch/arm/mach-kirkwood/include/mach/gpio.h new file mode 100644 index 000000000000..81b335eb62ec --- /dev/null +++ b/arch/arm/mach-kirkwood/include/mach/gpio.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * arch/asm-arm/mach-kirkwood/include/mach/gpio.h | ||
3 | * | ||
4 | * This file is licensed under the terms of the GNU General Public | ||
5 | * License version 2. This program is licensed "as is" without any | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_GPIO_H | ||
10 | #define __ASM_ARCH_GPIO_H | ||
11 | |||
12 | #include <mach/irqs.h> | ||
13 | #include <plat/gpio.h> | ||
14 | #include <asm-generic/gpio.h> /* cansleep wrappers */ | ||
15 | |||
16 | #define GPIO_MAX 50 | ||
17 | #define GPIO_OFF(pin) (((pin) >> 5) ? 0x0140 : 0x0100) | ||
18 | #define GPIO_OUT(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x00) | ||
19 | #define GPIO_IO_CONF(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x04) | ||
20 | #define GPIO_BLINK_EN(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x08) | ||
21 | #define GPIO_IN_POL(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x0c) | ||
22 | #define GPIO_DATA_IN(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x10) | ||
23 | #define GPIO_EDGE_CAUSE(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x14) | ||
24 | #define GPIO_EDGE_MASK(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x18) | ||
25 | #define GPIO_LEVEL_MASK(pin) (DEV_BUS_VIRT_BASE + GPIO_OFF(pin) + 0x1c) | ||
26 | |||
27 | static inline int gpio_to_irq(int pin) | ||
28 | { | ||
29 | return pin + IRQ_KIRKWOOD_GPIO_START; | ||
30 | } | ||
31 | |||
32 | static inline int irq_to_gpio(int irq) | ||
33 | { | ||
34 | return irq - IRQ_KIRKWOOD_GPIO_START; | ||
35 | } | ||
36 | |||
37 | |||
38 | #endif | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/irqs.h b/arch/arm/mach-kirkwood/include/mach/irqs.h index ffab89f21c11..f00a0a45a67e 100644 --- a/arch/arm/mach-kirkwood/include/mach/irqs.h +++ b/arch/arm/mach-kirkwood/include/mach/irqs.h | |||
@@ -11,8 +11,6 @@ | |||
11 | #ifndef __ASM_ARCH_IRQS_H | 11 | #ifndef __ASM_ARCH_IRQS_H |
12 | #define __ASM_ARCH_IRQS_H | 12 | #define __ASM_ARCH_IRQS_H |
13 | 13 | ||
14 | #include "kirkwood.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | 14 | /* |
17 | * Low Interrupt Controller | 15 | * Low Interrupt Controller |
18 | */ | 16 | */ |
@@ -51,12 +49,13 @@ | |||
51 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 | 49 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 |
52 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 | 50 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 |
53 | #define IRQ_KIRKWOOD_GE00_ERR 46 | 51 | #define IRQ_KIRKWOOD_GE00_ERR 46 |
52 | #define IRQ_KIRKWOOD_GE01_ERR 47 | ||
54 | 53 | ||
55 | /* | 54 | /* |
56 | * KIRKWOOD General Purpose Pins | 55 | * KIRKWOOD General Purpose Pins |
57 | */ | 56 | */ |
58 | #define IRQ_KIRKWOOD_GPIO_START 64 | 57 | #define IRQ_KIRKWOOD_GPIO_START 64 |
59 | #define NR_GPIO_IRQS GPIO_MAX | 58 | #define NR_GPIO_IRQS 50 |
60 | 59 | ||
61 | #define NR_IRQS (IRQ_KIRKWOOD_GPIO_START + NR_GPIO_IRQS) | 60 | #define NR_IRQS (IRQ_KIRKWOOD_GPIO_START + NR_GPIO_IRQS) |
62 | 61 | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h index eae42406fd86..ada480c0e197 100644 --- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h | |||
@@ -117,7 +117,4 @@ | |||
117 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) | 117 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) |
118 | 118 | ||
119 | 119 | ||
120 | #define GPIO_MAX 50 | ||
121 | |||
122 | |||
123 | #endif | 120 | #endif |
diff --git a/arch/arm/mach-kirkwood/include/mach/memory.h b/arch/arm/mach-kirkwood/include/mach/memory.h index b5fb34bdccd5..45431e131465 100644 --- a/arch/arm/mach-kirkwood/include/mach/memory.h +++ b/arch/arm/mach-kirkwood/include/mach/memory.h | |||
@@ -7,8 +7,4 @@ | |||
7 | 7 | ||
8 | #define PHYS_OFFSET UL(0x00000000) | 8 | #define PHYS_OFFSET UL(0x00000000) |
9 | 9 | ||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | 10 | #endif |
diff --git a/arch/arm/mach-kirkwood/irq.c b/arch/arm/mach-kirkwood/irq.c index 5790643ffe07..efb86b700276 100644 --- a/arch/arm/mach-kirkwood/irq.c +++ b/arch/arm/mach-kirkwood/irq.c | |||
@@ -13,10 +13,45 @@ | |||
13 | #include <linux/irq.h> | 13 | #include <linux/irq.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <plat/irq.h> | 15 | #include <plat/irq.h> |
16 | #include <asm/gpio.h> | ||
16 | #include "common.h" | 17 | #include "common.h" |
17 | 18 | ||
19 | static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | ||
20 | { | ||
21 | BUG_ON(irq < IRQ_KIRKWOOD_GPIO_LOW_0_7); | ||
22 | BUG_ON(irq > IRQ_KIRKWOOD_GPIO_HIGH_16_23); | ||
23 | |||
24 | orion_gpio_irq_handler((irq - IRQ_KIRKWOOD_GPIO_LOW_0_7) << 3); | ||
25 | } | ||
26 | |||
18 | void __init kirkwood_init_irq(void) | 27 | void __init kirkwood_init_irq(void) |
19 | { | 28 | { |
29 | int i; | ||
30 | |||
20 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); | 31 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); |
21 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); | 32 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); |
33 | |||
34 | /* | ||
35 | * Mask and clear GPIO IRQ interrupts. | ||
36 | */ | ||
37 | writel(0, GPIO_LEVEL_MASK(0)); | ||
38 | writel(0, GPIO_EDGE_MASK(0)); | ||
39 | writel(0, GPIO_EDGE_CAUSE(0)); | ||
40 | writel(0, GPIO_LEVEL_MASK(32)); | ||
41 | writel(0, GPIO_EDGE_MASK(32)); | ||
42 | writel(0, GPIO_EDGE_CAUSE(32)); | ||
43 | |||
44 | for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { | ||
45 | set_irq_chip(i, &orion_gpio_irq_level_chip); | ||
46 | set_irq_handler(i, handle_level_irq); | ||
47 | irq_desc[i].status |= IRQ_LEVEL; | ||
48 | set_irq_flags(i, IRQF_VALID); | ||
49 | } | ||
50 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_LOW_0_7, gpio_irq_handler); | ||
51 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_LOW_8_15, gpio_irq_handler); | ||
52 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_LOW_16_23, gpio_irq_handler); | ||
53 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_LOW_24_31, gpio_irq_handler); | ||
54 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_HIGH_0_7, gpio_irq_handler); | ||
55 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_HIGH_8_15, gpio_irq_handler); | ||
56 | set_irq_chained_handler(IRQ_KIRKWOOD_GPIO_HIGH_16_23, gpio_irq_handler); | ||
22 | } | 57 | } |
diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c index 175054abd630..9a0e905d10cd 100644 --- a/arch/arm/mach-kirkwood/rd88f6281-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c | |||
@@ -80,24 +80,38 @@ static struct dsa_platform_data rd88f6281_switch_data = { | |||
80 | .port_names[1] = "lan2", | 80 | .port_names[1] = "lan2", |
81 | .port_names[2] = "lan3", | 81 | .port_names[2] = "lan3", |
82 | .port_names[3] = "lan4", | 82 | .port_names[3] = "lan4", |
83 | .port_names[4] = "wan", | ||
84 | .port_names[5] = "cpu", | 83 | .port_names[5] = "cpu", |
85 | }; | 84 | }; |
86 | 85 | ||
86 | static struct mv643xx_eth_platform_data rd88f6281_ge01_data = { | ||
87 | .phy_addr = MV643XX_ETH_PHY_ADDR(11), | ||
88 | }; | ||
89 | |||
87 | static struct mv_sata_platform_data rd88f6281_sata_data = { | 90 | static struct mv_sata_platform_data rd88f6281_sata_data = { |
88 | .n_ports = 2, | 91 | .n_ports = 2, |
89 | }; | 92 | }; |
90 | 93 | ||
91 | static void __init rd88f6281_init(void) | 94 | static void __init rd88f6281_init(void) |
92 | { | 95 | { |
96 | u32 dev, rev; | ||
97 | |||
93 | /* | 98 | /* |
94 | * Basic setup. Needs to be called early. | 99 | * Basic setup. Needs to be called early. |
95 | */ | 100 | */ |
96 | kirkwood_init(); | 101 | kirkwood_init(); |
97 | 102 | ||
98 | kirkwood_ehci_init(); | 103 | kirkwood_ehci_init(); |
104 | |||
99 | kirkwood_ge00_init(&rd88f6281_ge00_data); | 105 | kirkwood_ge00_init(&rd88f6281_ge00_data); |
106 | kirkwood_pcie_id(&dev, &rev); | ||
107 | if (rev == MV88F6281_REV_A0) { | ||
108 | rd88f6281_switch_data.sw_addr = 10; | ||
109 | kirkwood_ge01_init(&rd88f6281_ge01_data); | ||
110 | } else { | ||
111 | rd88f6281_switch_data.port_names[4] = "wan"; | ||
112 | } | ||
100 | kirkwood_ge00_switch_init(&rd88f6281_switch_data, NO_IRQ); | 113 | kirkwood_ge00_switch_init(&rd88f6281_switch_data, NO_IRQ); |
114 | |||
101 | kirkwood_rtc_init(); | 115 | kirkwood_rtc_init(); |
102 | kirkwood_sata_init(&rd88f6281_sata_data); | 116 | kirkwood_sata_init(&rd88f6281_sata_data); |
103 | kirkwood_uart0_init(); | 117 | kirkwood_uart0_init(); |