[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>
This commit is contained in:
parent
37bb30e86b
commit
a6f1063b38
|
@ -63,6 +63,35 @@ static struct sys_timer enp2611_timer = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* ENP-2611 I/O
|
||||||
|
*************************************************************************/
|
||||||
|
static struct map_desc enp2611_io_desc[] __initdata = {
|
||||||
|
{
|
||||||
|
.virtual = ENP2611_CALEB_VIRT_BASE,
|
||||||
|
.physical = ENP2611_CALEB_PHYS_BASE,
|
||||||
|
.length = ENP2611_CALEB_SIZE,
|
||||||
|
.type = MT_IXP2000_DEVICE
|
||||||
|
}, {
|
||||||
|
.virtual = ENP2611_PM3386_0_VIRT_BASE,
|
||||||
|
.physical = ENP2611_PM3386_0_PHYS_BASE,
|
||||||
|
.length = ENP2611_PM3386_0_SIZE,
|
||||||
|
.type = MT_IXP2000_DEVICE
|
||||||
|
}, {
|
||||||
|
.virtual = ENP2611_PM3386_1_VIRT_BASE,
|
||||||
|
.physical = ENP2611_PM3386_1_PHYS_BASE,
|
||||||
|
.length = ENP2611_PM3386_1_SIZE,
|
||||||
|
.type = MT_IXP2000_DEVICE
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init enp2611_map_io(void)
|
||||||
|
{
|
||||||
|
ixp2000_map_io();
|
||||||
|
iotable_init(enp2611_io_desc, ARRAY_SIZE(enp2611_io_desc));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* ENP-2611 PCI
|
* ENP-2611 PCI
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
@ -229,7 +258,7 @@ MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board")
|
||||||
.phys_io = IXP2000_UART_PHYS_BASE,
|
.phys_io = IXP2000_UART_PHYS_BASE,
|
||||||
.io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
|
.io_pg_offst = ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
|
||||||
.boot_params = 0x00000100,
|
.boot_params = 0x00000100,
|
||||||
.map_io = ixp2000_map_io,
|
.map_io = enp2611_map_io,
|
||||||
.init_irq = ixp2000_init_irq,
|
.init_irq = ixp2000_init_irq,
|
||||||
.timer = &enp2611_timer,
|
.timer = &enp2611_timer,
|
||||||
.init_machine = enp2611_init_machine,
|
.init_machine = enp2611_init_machine,
|
||||||
|
|
|
@ -21,8 +21,20 @@
|
||||||
#ifndef __ENP2611_H
|
#ifndef __ENP2611_H
|
||||||
#define __ENP2611_H
|
#define __ENP2611_H
|
||||||
|
|
||||||
#define ENP2611_GPIO_SCL 0x07
|
#define ENP2611_CALEB_PHYS_BASE 0xc5000000
|
||||||
#define ENP2611_GPIO_SDA 0x06
|
#define ENP2611_CALEB_VIRT_BASE 0xfe000000
|
||||||
|
#define ENP2611_CALEB_SIZE 0x00100000
|
||||||
|
|
||||||
|
#define ENP2611_PM3386_0_PHYS_BASE 0xc6000000
|
||||||
|
#define ENP2611_PM3386_0_VIRT_BASE 0xfe100000
|
||||||
|
#define ENP2611_PM3386_0_SIZE 0x00100000
|
||||||
|
|
||||||
|
#define ENP2611_PM3386_1_PHYS_BASE 0xc6400000
|
||||||
|
#define ENP2611_PM3386_1_VIRT_BASE 0xfe200000
|
||||||
|
#define ENP2611_PM3386_1_SIZE 0x00100000
|
||||||
|
|
||||||
|
#define ENP2611_GPIO_SCL 7
|
||||||
|
#define ENP2611_GPIO_SDA 6
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue