Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6f1063b authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Russell King
Browse files

[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: default avatarLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: default avatarDeepak Saxena <dsaxena@plexity.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 37bb30e8
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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
 *************************************************************************/
@@ -229,7 +258,7 @@ MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board")
	.phys_io	= IXP2000_UART_PHYS_BASE,
	.io_pg_offst	= ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
	.boot_params	= 0x00000100,
	.map_io		= ixp2000_map_io,
	.map_io		= enp2611_map_io,
	.init_irq	= ixp2000_init_irq,
	.timer		= &enp2611_timer,
	.init_machine	= enp2611_init_machine,
+14 −2
Original line number Diff line number Diff line
@@ -21,8 +21,20 @@
#ifndef __ENP2611_H
#define __ENP2611_H

#define ENP2611_GPIO_SCL	0x07
#define ENP2611_GPIO_SDA	0x06
#define ENP2611_CALEB_PHYS_BASE		0xc5000000
#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