diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2005-11-01 14:44:24 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-11-01 14:44:24 -0500 |
commit | a6f1063b388cfd48a598cc7971eae1f83ebc8ba4 (patch) | |
tree | 229a5d899fef3c181b1624e0c73572b894cac9de /arch/arm | |
parent | 37bb30e86bc2e48d9affb25f6ce9eb3d8e65b2ac (diff) |
[ARM] 3062/1: map in various enp2611 peripherals for the ixp2000 netdev driver
Patch from Lennert Buytenhek
The enp2611 version of the ixp2000 netdev driver needs to be able to
access a number of on-board peripherals. ioremap() is not suitable
for this, as that will cause XCB=000 mappings to be done, which will
make the cpu susceptible to crashing on ixp2400 erratum #66. Properly
aligned iotable mappings with MT_IXP2000_DEVICE will cause section
mappings with XCB=101 to be done, which is safe.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Deepak Saxena <dsaxena@plexity.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-ixp2000/enp2611.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c index 9aa54de44740..b91fe7c80fac 100644 --- a/arch/arm/mach-ixp2000/enp2611.c +++ b/arch/arm/mach-ixp2000/enp2611.c | |||
@@ -64,6 +64,35 @@ static struct sys_timer enp2611_timer = { | |||
64 | 64 | ||
65 | 65 | ||
66 | /************************************************************************* | 66 | /************************************************************************* |
67 | * ENP-2611 I/O | ||
68 | *************************************************************************/ | ||
69 | static struct map_desc enp2611_io_desc[] __initdata = { | ||
70 | { | ||
71 | .virtual = ENP2611_CALEB_VIRT_BASE, | ||
72 | .physical = ENP2611_CALEB_PHYS_BASE, | ||
73 | .length = ENP2611_CALEB_SIZE, | ||
74 | .type = MT_IXP2000_DEVICE | ||
75 | }, { | ||
76 | .virtual = ENP2611_PM3386_0_VIRT_BASE, | ||
77 | .physical = ENP2611_PM3386_0_PHYS_BASE, | ||
78 | .length = ENP2611_PM3386_0_SIZE, | ||
79 | .type = MT_IXP2000_DEVICE | ||
80 | }, { | ||
81 | .virtual = ENP2611_PM3386_1_VIRT_BASE, | ||
82 | .physical = ENP2611_PM3386_1_PHYS_BASE, | ||
83 | .length = ENP2611_PM3386_1_SIZE, | ||
84 | .type = MT_IXP2000_DEVICE | ||
85 | } | ||
86 | }; | ||
87 | |||
88 | void __init enp2611_map_io(void) | ||
89 | { | ||
90 | ixp2000_map_io(); | ||
91 | iotable_init(enp2611_io_desc, ARRAY_SIZE(enp2611_io_desc)); | ||
92 | } | ||
93 | |||
94 | |||
95 | /************************************************************************* | ||
67 | * ENP-2611 PCI | 96 | * ENP-2611 PCI |
68 | *************************************************************************/ | 97 | *************************************************************************/ |
69 | static int enp2611_pci_setup(int nr, struct pci_sys_data *sys) | 98 | static int enp2611_pci_setup(int nr, struct pci_sys_data *sys) |
@@ -229,7 +258,7 @@ MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board") | |||
229 | .phys_io = IXP2000_UART_PHYS_BASE, | 258 | .phys_io = IXP2000_UART_PHYS_BASE, |
230 | .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, | 259 | .io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc, |
231 | .boot_params = 0x00000100, | 260 | .boot_params = 0x00000100, |
232 | .map_io = ixp2000_map_io, | 261 | .map_io = enp2611_map_io, |
233 | .init_irq = ixp2000_init_irq, | 262 | .init_irq = ixp2000_init_irq, |
234 | .timer = &enp2611_timer, | 263 | .timer = &enp2611_timer, |
235 | .init_machine = enp2611_init_machine, | 264 | .init_machine = enp2611_init_machine, |