Commit 104c7b03 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Russell King

[ARM] 3383/3: ixp2000: ixdp2x01 platform serial conversion

Patch from Lennert Buytenhek

Add a PLAT8250_DEV_PLATFORM2, and convert the two ixdp2x01 CPLD serial
ports to use platform serial devices with ids PLAT8250_DEV_PLATFORM[12].
(The on-chip xscale UART is PLAT8250_DEV_PLATFORM, id #0.)
Signed-off-by: default avatarLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 98639a67
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/serial_8250.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -132,7 +133,7 @@ void __init ixdp2x01_init_irq(void) ...@@ -132,7 +133,7 @@ void __init ixdp2x01_init_irq(void)
/************************************************************************* /*************************************************************************
* IXDP2x01 memory map and serial ports * IXDP2x01 memory map
*************************************************************************/ *************************************************************************/
static struct map_desc ixdp2x01_io_desc __initdata = { static struct map_desc ixdp2x01_io_desc __initdata = {
.virtual = IXDP2X01_VIRT_CPLD_BASE, .virtual = IXDP2X01_VIRT_CPLD_BASE,
...@@ -141,40 +142,78 @@ static struct map_desc ixdp2x01_io_desc __initdata = { ...@@ -141,40 +142,78 @@ static struct map_desc ixdp2x01_io_desc __initdata = {
.type = MT_DEVICE .type = MT_DEVICE
}; };
static struct uart_port ixdp2x01_serial_ports[2] = { static void __init ixdp2x01_map_io(void)
{
ixp2000_map_io();
iotable_init(&ixdp2x01_io_desc, 1);
}
/*************************************************************************
* IXDP2x01 serial ports
*************************************************************************/
static struct plat_serial8250_port ixdp2x01_serial_port1[] = {
{ {
.membase = (char *)(IXDP2X01_UART1_VIRT_BASE),
.mapbase = (unsigned long)IXDP2X01_UART1_PHYS_BASE, .mapbase = (unsigned long)IXDP2X01_UART1_PHYS_BASE,
.membase = (char *)IXDP2X01_UART1_VIRT_BASE,
.irq = IRQ_IXDP2X01_UART1, .irq = IRQ_IXDP2X01_UART1,
.flags = UPF_SKIP_TEST, .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
.iotype = UPIO_MEM32, .iotype = UPIO_MEM32,
.regshift = 2, .regshift = 2,
.uartclk = IXDP2X01_UART_CLK, .uartclk = IXDP2X01_UART_CLK,
.line = 1, },
.type = PORT_16550A, { }
.fifosize = 16 };
}, {
.membase = (char *)(IXDP2X01_UART2_VIRT_BASE), static struct resource ixdp2x01_uart_resource1 = {
.start = IXDP2X01_UART1_PHYS_BASE,
.end = IXDP2X01_UART1_PHYS_BASE + 0xffff,
.flags = IORESOURCE_MEM,
};
static struct platform_device ixdp2x01_serial_device1 = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM1,
.dev = {
.platform_data = ixdp2x01_serial_port1,
},
.num_resources = 1,
.resource = &ixdp2x01_uart_resource1,
};
static struct plat_serial8250_port ixdp2x01_serial_port2[] = {
{
.mapbase = (unsigned long)IXDP2X01_UART2_PHYS_BASE, .mapbase = (unsigned long)IXDP2X01_UART2_PHYS_BASE,
.membase = (char *)IXDP2X01_UART2_VIRT_BASE,
.irq = IRQ_IXDP2X01_UART2, .irq = IRQ_IXDP2X01_UART2,
.flags = UPF_SKIP_TEST, .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
.iotype = UPIO_MEM32, .iotype = UPIO_MEM32,
.regshift = 2, .regshift = 2,
.uartclk = IXDP2X01_UART_CLK, .uartclk = IXDP2X01_UART_CLK,
.line = 2,
.type = PORT_16550A,
.fifosize = 16
}, },
{ }
}; };
static void __init ixdp2x01_map_io(void) static struct resource ixdp2x01_uart_resource2 = {
{ .start = IXDP2X01_UART2_PHYS_BASE,
ixp2000_map_io(); .end = IXDP2X01_UART2_PHYS_BASE + 0xffff,
.flags = IORESOURCE_MEM,
};
iotable_init(&ixdp2x01_io_desc, 1); static struct platform_device ixdp2x01_serial_device2 = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM2,
.dev = {
.platform_data = ixdp2x01_serial_port2,
},
.num_resources = 1,
.resource = &ixdp2x01_uart_resource2,
};
early_serial_setup(&ixdp2x01_serial_ports[0]); static void ixdp2x01_uart_init(void)
early_serial_setup(&ixdp2x01_serial_ports[1]); {
platform_device_register(&ixdp2x01_serial_device1);
platform_device_register(&ixdp2x01_serial_device2);
} }
...@@ -374,6 +413,7 @@ static void __init ixdp2x01_init_machine(void) ...@@ -374,6 +413,7 @@ static void __init ixdp2x01_init_machine(void)
platform_add_devices(ixdp2x01_devices, ARRAY_SIZE(ixdp2x01_devices)); platform_add_devices(ixdp2x01_devices, ARRAY_SIZE(ixdp2x01_devices));
ixp2000_uart_init(); ixp2000_uart_init();
ixdp2x01_uart_init();
} }
......
...@@ -37,6 +37,7 @@ enum { ...@@ -37,6 +37,7 @@ enum {
PLAT8250_DEV_LEGACY = -1, PLAT8250_DEV_LEGACY = -1,
PLAT8250_DEV_PLATFORM, PLAT8250_DEV_PLATFORM,
PLAT8250_DEV_PLATFORM1, PLAT8250_DEV_PLATFORM1,
PLAT8250_DEV_PLATFORM2,
PLAT8250_DEV_FOURPORT, PLAT8250_DEV_FOURPORT,
PLAT8250_DEV_ACCENT, PLAT8250_DEV_ACCENT,
PLAT8250_DEV_BOCA, PLAT8250_DEV_BOCA,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment