diff options
author | Roland Stigge <stigge@antcom.de> | 2012-03-12 17:27:28 -0400 |
---|---|---|
committer | Roland Stigge <stigge@antcom.de> | 2012-03-13 16:23:07 -0400 |
commit | c20b909be9ba27173294a52d08cab293ec030a2c (patch) | |
tree | bc3ec77875ddd37dc6e80fffd83c4e251ad756dd /arch/arm/mach-lpc32xx | |
parent | 48a5dedfa78899dad50b3b4ae30f07e27e6591ab (diff) |
ARM: LPC32xx: Ethernet support
This patch adds ethernet support to the LPC32xx ARM architecture. The actual
driver in drivers/net is contained in a separate patch.
Signed-off-by: Roland Stigge <stigge@antcom.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-lpc32xx')
-rw-r--r-- | arch/arm/mach-lpc32xx/Kconfig | 25 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/clock.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/common.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/common.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/include/mach/board.h | 24 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/irq.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-lpc32xx/phy3250.c | 2 |
7 files changed, 79 insertions, 3 deletions
diff --git a/arch/arm/mach-lpc32xx/Kconfig b/arch/arm/mach-lpc32xx/Kconfig index fde663508696..75946ac89ee9 100644 --- a/arch/arm/mach-lpc32xx/Kconfig +++ b/arch/arm/mach-lpc32xx/Kconfig | |||
@@ -29,5 +29,30 @@ config ARCH_LPC32XX_UART6_SELECT | |||
29 | 29 | ||
30 | endmenu | 30 | endmenu |
31 | 31 | ||
32 | menu "LPC32XX chip components" | ||
33 | |||
34 | config ARCH_LPC32XX_IRAM_FOR_NET | ||
35 | bool "Use IRAM for network buffers" | ||
36 | default y | ||
37 | help | ||
38 | Say Y here to use the LPC internal fast IRAM (i.e. 256KB SRAM) as | ||
39 | network buffer. If the total combined required buffer sizes is | ||
40 | larger than the size of IRAM, then SDRAM will be used instead. | ||
41 | |||
42 | This can be enabled safely if the IRAM is not intended for other | ||
43 | uses. | ||
44 | |||
45 | config ARCH_LPC32XX_MII_SUPPORT | ||
46 | bool "Check to enable MII support or leave disabled for RMII support" | ||
47 | help | ||
48 | Say Y here to enable MII support, or N for RMII support. Regardless of | ||
49 | which support is selected, the ethernet interface driver needs to be | ||
50 | selected in the device driver networking section. | ||
51 | |||
52 | The PHY3250 reference board uses RMII, so users of this board should | ||
53 | say N. | ||
54 | |||
55 | endmenu | ||
56 | |||
32 | endif | 57 | endif |
33 | 58 | ||
diff --git a/arch/arm/mach-lpc32xx/clock.c b/arch/arm/mach-lpc32xx/clock.c index 370a5471798e..47639f31ba38 100644 --- a/arch/arm/mach-lpc32xx/clock.c +++ b/arch/arm/mach-lpc32xx/clock.c | |||
@@ -1134,7 +1134,7 @@ static struct clk_lookup lookups[] = { | |||
1134 | _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc) | 1134 | _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc) |
1135 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) | 1135 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) |
1136 | _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc) | 1136 | _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc) |
1137 | _REGISTER_CLOCK("lpc-net.0", NULL, clk_net) | 1137 | _REGISTER_CLOCK("lpc-eth.0", NULL, clk_net) |
1138 | _REGISTER_CLOCK("dev:clcd", NULL, clk_lcd) | 1138 | _REGISTER_CLOCK("dev:clcd", NULL, clk_lcd) |
1139 | _REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd) | 1139 | _REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd) |
1140 | _REGISTER_CLOCK("lpc32xx_rtc", NULL, clk_rtc) | 1140 | _REGISTER_CLOCK("lpc32xx_rtc", NULL, clk_rtc) |
diff --git a/arch/arm/mach-lpc32xx/common.c b/arch/arm/mach-lpc32xx/common.c index 11c900857b1b..bbbf063a74c2 100644 --- a/arch/arm/mach-lpc32xx/common.c +++ b/arch/arm/mach-lpc32xx/common.c | |||
@@ -186,6 +186,27 @@ struct platform_device lpc32xx_ohci_device = { | |||
186 | }; | 186 | }; |
187 | 187 | ||
188 | /* | 188 | /* |
189 | * Network Support | ||
190 | */ | ||
191 | static struct resource net_resources[] = { | ||
192 | [0] = DEFINE_RES_MEM(LPC32XX_ETHERNET_BASE, SZ_4K), | ||
193 | [1] = DEFINE_RES_MEM(LPC32XX_IRAM_BASE, SZ_128K), | ||
194 | [2] = DEFINE_RES_IRQ(IRQ_LPC32XX_ETHERNET), | ||
195 | }; | ||
196 | |||
197 | static u64 lpc32xx_mac_dma_mask = 0xffffffffUL; | ||
198 | struct platform_device lpc32xx_net_device = { | ||
199 | .name = "lpc-eth", | ||
200 | .id = 0, | ||
201 | .dev = { | ||
202 | .dma_mask = &lpc32xx_mac_dma_mask, | ||
203 | .coherent_dma_mask = 0xffffffffUL, | ||
204 | }, | ||
205 | .num_resources = ARRAY_SIZE(net_resources), | ||
206 | .resource = net_resources, | ||
207 | }; | ||
208 | |||
209 | /* | ||
189 | * Returns the unique ID for the device | 210 | * Returns the unique ID for the device |
190 | */ | 211 | */ |
191 | void lpc32xx_get_uid(u32 devid[4]) | 212 | void lpc32xx_get_uid(u32 devid[4]) |
diff --git a/arch/arm/mach-lpc32xx/common.h b/arch/arm/mach-lpc32xx/common.h index e1880b02b76b..23c21905ff89 100644 --- a/arch/arm/mach-lpc32xx/common.h +++ b/arch/arm/mach-lpc32xx/common.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #ifndef __LPC32XX_COMMON_H | 19 | #ifndef __LPC32XX_COMMON_H |
20 | #define __LPC32XX_COMMON_H | 20 | #define __LPC32XX_COMMON_H |
21 | 21 | ||
22 | #include <mach/board.h> | ||
22 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
23 | 24 | ||
24 | /* | 25 | /* |
@@ -32,6 +33,7 @@ extern struct platform_device lpc32xx_tsc_device; | |||
32 | extern struct platform_device lpc32xx_adc_device; | 33 | extern struct platform_device lpc32xx_adc_device; |
33 | extern struct platform_device lpc32xx_rtc_device; | 34 | extern struct platform_device lpc32xx_rtc_device; |
34 | extern struct platform_device lpc32xx_ohci_device; | 35 | extern struct platform_device lpc32xx_ohci_device; |
36 | extern struct platform_device lpc32xx_net_device; | ||
35 | 37 | ||
36 | /* | 38 | /* |
37 | * Other arch specific structures and functions | 39 | * Other arch specific structures and functions |
@@ -67,8 +69,6 @@ extern u32 clk_get_pclk_div(void); | |||
67 | */ | 69 | */ |
68 | extern void lpc32xx_get_uid(u32 devid[4]); | 70 | extern void lpc32xx_get_uid(u32 devid[4]); |
69 | 71 | ||
70 | extern u32 lpc32xx_return_iram_size(void); | ||
71 | |||
72 | /* | 72 | /* |
73 | * Pointers used for sizing and copying suspend function data | 73 | * Pointers used for sizing and copying suspend function data |
74 | */ | 74 | */ |
diff --git a/arch/arm/mach-lpc32xx/include/mach/board.h b/arch/arm/mach-lpc32xx/include/mach/board.h new file mode 100644 index 000000000000..52531ca7bd1d --- /dev/null +++ b/arch/arm/mach-lpc32xx/include/mach/board.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * arm/arch/mach-lpc32xx/include/mach/board.h | ||
3 | * | ||
4 | * Author: Kevin Wells <kevin.wells@nxp.com> | ||
5 | * | ||
6 | * Copyright (C) 2010 NXP Semiconductors | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_BOARD_H | ||
20 | #define __ASM_ARCH_BOARD_H | ||
21 | |||
22 | extern u32 lpc32xx_return_iram_size(void); | ||
23 | |||
24 | #endif /* __ASM_ARCH_BOARD_H */ | ||
diff --git a/arch/arm/mach-lpc32xx/irq.c b/arch/arm/mach-lpc32xx/irq.c index 4eae566dfdc7..f4564cb68df6 100644 --- a/arch/arm/mach-lpc32xx/irq.c +++ b/arch/arm/mach-lpc32xx/irq.c | |||
@@ -146,6 +146,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = { | |||
146 | .event_group = &lpc32xx_event_int_regs, | 146 | .event_group = &lpc32xx_event_int_regs, |
147 | .mask = LPC32XX_CLKPWR_INTSRC_KEY_BIT, | 147 | .mask = LPC32XX_CLKPWR_INTSRC_KEY_BIT, |
148 | }, | 148 | }, |
149 | [IRQ_LPC32XX_ETHERNET] = { | ||
150 | .event_group = &lpc32xx_event_int_regs, | ||
151 | .mask = LPC32XX_CLKPWR_INTSRC_MAC_BIT, | ||
152 | }, | ||
149 | [IRQ_LPC32XX_USB_OTG_ATX] = { | 153 | [IRQ_LPC32XX_USB_OTG_ATX] = { |
150 | .event_group = &lpc32xx_event_int_regs, | 154 | .event_group = &lpc32xx_event_int_regs, |
151 | .mask = LPC32XX_CLKPWR_INTSRC_USBATXINT_BIT, | 155 | .mask = LPC32XX_CLKPWR_INTSRC_USBATXINT_BIT, |
diff --git a/arch/arm/mach-lpc32xx/phy3250.c b/arch/arm/mach-lpc32xx/phy3250.c index 53f12301be8a..562ec96b8930 100644 --- a/arch/arm/mach-lpc32xx/phy3250.c +++ b/arch/arm/mach-lpc32xx/phy3250.c | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | #include <mach/hardware.h> | 38 | #include <mach/hardware.h> |
39 | #include <mach/platform.h> | 39 | #include <mach/platform.h> |
40 | #include <mach/board.h> | ||
40 | #include <mach/gpio-lpc32xx.h> | 41 | #include <mach/gpio-lpc32xx.h> |
41 | #include "common.h" | 42 | #include "common.h" |
42 | 43 | ||
@@ -280,6 +281,7 @@ static struct platform_device *phy3250_devs[] __initdata = { | |||
280 | &lpc32xx_gpio_led_device, | 281 | &lpc32xx_gpio_led_device, |
281 | &lpc32xx_adc_device, | 282 | &lpc32xx_adc_device, |
282 | &lpc32xx_ohci_device, | 283 | &lpc32xx_ohci_device, |
284 | &lpc32xx_net_device, | ||
283 | }; | 285 | }; |
284 | 286 | ||
285 | static struct amba_device *amba_devs[] __initdata = { | 287 | static struct amba_device *amba_devs[] __initdata = { |