From: Kumar Gala Converts the initialization of serial8250 ports on various 85xx parts from using the old ISA style to a platform device. Signed-off-by: Kumar Gala Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc/platforms/85xx/mpc8540_ads.c | 15 +++++++ 25-akpm/arch/ppc/platforms/85xx/mpc8540_ads.h | 4 - 25-akpm/arch/ppc/platforms/85xx/mpc85xx_cds_common.c | 18 +++++++- 25-akpm/arch/ppc/platforms/85xx/mpc85xx_cds_common.h | 4 - 25-akpm/arch/ppc/platforms/85xx/mpc85xx_devices.c | 21 ++++++++++ 25-akpm/arch/ppc/platforms/85xx/mpc85xx_sys.c | 20 ++++----- 25-akpm/arch/ppc/syslib/ppc85xx_setup.c | 39 +++++++++---------- 25-akpm/arch/ppc/syslib/ppc85xx_setup.h | 9 ---- 8 files changed, 82 insertions(+), 48 deletions(-) diff -puN arch/ppc/platforms/85xx/mpc8540_ads.c~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc8540_ads.c --- 25/arch/ppc/platforms/85xx/mpc8540_ads.c~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.001661640 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc8540_ads.c 2005-01-28 14:15:09.115644312 -0800 @@ -147,10 +147,25 @@ platform_init(unsigned long r3, unsigned #ifdef CONFIG_SERIAL_TEXT_DEBUG { bd_t *binfo = (bd_t *) __res; + struct uart_port p; /* Use the last TLB entry to map CCSRBAR to allow access to DUART regs */ settlbcam(NUM_TLBCAMS - 1, binfo->bi_immr_base, binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); + + memset(&p, 0, sizeof (p)); + p.iotype = SERIAL_IO_MEM; + p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; + p.uartclk = binfo->bi_busfreq; + + gen550_init(0, &p); + + memset(&p, 0, sizeof (p)); + p.iotype = SERIAL_IO_MEM; + p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; + p.uartclk = binfo->bi_busfreq; + + gen550_init(1, &p); } #endif diff -puN arch/ppc/platforms/85xx/mpc8540_ads.h~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc8540_ads.h --- 25/arch/ppc/platforms/85xx/mpc8540_ads.h~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.002661488 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc8540_ads.h 2005-01-28 14:15:09.115644312 -0800 @@ -22,8 +22,4 @@ #include #include -#define SERIAL_PORT_DFNS \ - STD_UART_OP(0) \ - STD_UART_OP(1) - #endif /* __MACH_MPC8540ADS_H__ */ diff -puN arch/ppc/platforms/85xx/mpc85xx_cds_common.c~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc85xx_cds_common.c --- 25/arch/ppc/platforms/85xx/mpc85xx_cds_common.c~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.004661184 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc85xx_cds_common.c 2005-01-28 14:15:09.116644160 -0800 @@ -396,11 +396,25 @@ platform_init(unsigned long r3, unsigned #ifdef CONFIG_SERIAL_TEXT_DEBUG { bd_t *binfo = (bd_t *) __res; + struct uart_port p; /* Use the last TLB entry to map CCSRBAR to allow access to DUART regs */ settlbcam(NUM_TLBCAMS - 1, binfo->bi_immr_base, - binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); - + binfo->bi_immr_base, MPC85xx_CCSRBAR_SIZE, _PAGE_IO, 0); + + memset(&p, 0, sizeof (p)); + p.iotype = SERIAL_IO_MEM; + p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART0_OFFSET; + p.uartclk = binfo->bi_busfreq; + + gen550_init(0, &p); + + memset(&p, 0, sizeof (p)); + p.iotype = SERIAL_IO_MEM; + p.membase = (void *) binfo->bi_immr_base + MPC85xx_UART1_OFFSET; + p.uartclk = binfo->bi_busfreq; + + gen550_init(1, &p); } #endif diff -puN arch/ppc/platforms/85xx/mpc85xx_cds_common.h~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc85xx_cds_common.h --- 25/arch/ppc/platforms/85xx/mpc85xx_cds_common.h~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.005661032 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc85xx_cds_common.h 2005-01-28 14:15:09.116644160 -0800 @@ -71,8 +71,4 @@ #define MPC85XX_PCI2_IO_SIZE 0x01000000 -#define SERIAL_PORT_DFNS \ - STD_UART_OP(0) \ - STD_UART_OP(1) - #endif /* __MACH_MPC85XX_CDS_H__ */ diff -puN arch/ppc/platforms/85xx/mpc85xx_devices.c~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc85xx_devices.c --- 25/arch/ppc/platforms/85xx/mpc85xx_devices.c~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.021658600 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc85xx_devices.c 2005-01-28 14:15:09.117644008 -0800 @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +48,21 @@ static struct fsl_i2c_platform_data mpc8 .device_flags = FSL_I2C_DEV_SEPARATE_DFSRR, }; +static struct plat_serial8250_port serial_platform_data[] = { + [0] = { + .mapbase = 0x4500, + .irq = MPC85xx_IRQ_DUART, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ, + }, + [1] = { + .mapbase = 0x4600, + .irq = MPC85xx_IRQ_DUART, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ, + }, +}; + struct platform_device ppc_sys_platform_devices[] = { [MPC85xx_TSEC1] = { .name = "fsl-gianfar", @@ -223,6 +239,11 @@ struct platform_device ppc_sys_platform_ }, }, }, + [MPC85xx_DUART] = { + .name = "serial8250", + .id = 0, + .dev.platform_data = serial_platform_data, + }, [MPC85xx_PERFMON] = { .name = "fsl-perfmon", .id = 1, diff -puN arch/ppc/platforms/85xx/mpc85xx_sys.c~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/platforms/85xx/mpc85xx_sys.c --- 25/arch/ppc/platforms/85xx/mpc85xx_sys.c~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.039655864 -0800 +++ 25-akpm/arch/ppc/platforms/85xx/mpc85xx_sys.c 2005-01-28 14:15:09.154638384 -0800 @@ -24,12 +24,12 @@ struct ppc_sys_spec ppc_sys_specs[] = { .ppc_sys_name = "MPC8540", .mask = 0xFFFF0000, .value = 0x80300000, - .num_devices = 9, + .num_devices = 10, .device_list = (enum ppc_sys_devices[]) { MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_FEC, MPC85xx_IIC1, MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, - MPC85xx_PERFMON, + MPC85xx_PERFMON, MPC85xx_DUART, }, }, { @@ -52,12 +52,12 @@ struct ppc_sys_spec ppc_sys_specs[] = { .ppc_sys_name = "MPC8541", .mask = 0xFFFF0000, .value = 0x80720000, - .num_devices = 12, + .num_devices = 13, .device_list = (enum ppc_sys_devices[]) { MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1, MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, - MPC85xx_PERFMON, + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, }, @@ -66,12 +66,12 @@ struct ppc_sys_spec ppc_sys_specs[] = { .ppc_sys_name = "MPC8541E", .mask = 0xFFFF0000, .value = 0x807A0000, - .num_devices = 13, + .num_devices = 14, .device_list = (enum ppc_sys_devices[]) { MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1, MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, - MPC85xx_PERFMON, MPC85xx_SEC2, + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, }, @@ -80,12 +80,12 @@ struct ppc_sys_spec ppc_sys_specs[] = { .ppc_sys_name = "MPC8555", .mask = 0xFFFF0000, .value = 0x80710000, - .num_devices = 19, + .num_devices = 20, .device_list = (enum ppc_sys_devices[]) { MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1, MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, - MPC85xx_PERFMON, + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_SCC1, MPC85xx_CPM_SCC2, MPC85xx_CPM_SCC3, MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, MPC85xx_CPM_FCC3, @@ -97,12 +97,12 @@ struct ppc_sys_spec ppc_sys_specs[] = { .ppc_sys_name = "MPC8555E", .mask = 0xFFFF0000, .value = 0x80790000, - .num_devices = 20, + .num_devices = 21, .device_list = (enum ppc_sys_devices[]) { MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1, MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, - MPC85xx_PERFMON, MPC85xx_SEC2, + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_SCC1, MPC85xx_CPM_SCC2, MPC85xx_CPM_SCC3, MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, MPC85xx_CPM_FCC3, diff -puN arch/ppc/syslib/ppc85xx_setup.c~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/syslib/ppc85xx_setup.c --- 25/arch/ppc/syslib/ppc85xx_setup.c~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.093647656 -0800 +++ 25-akpm/arch/ppc/syslib/ppc85xx_setup.c 2005-01-28 14:15:09.155638232 -0800 @@ -21,12 +21,14 @@ #include #include /* for linux/serial_core.h */ #include +#include #include #include #include #include #include +#include #include #include @@ -72,40 +74,39 @@ mpc85xx_calibrate_decr(void) void __init mpc85xx_early_serial_map(void) { +#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) struct uart_port serial_req; +#endif + struct plat_serial8250_port *pdata; bd_t *binfo = (bd_t *) __res; - phys_addr_t duart_paddr = binfo->bi_immr_base + MPC85xx_UART0_OFFSET; + pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(MPC85xx_DUART); /* Setup serial port access */ + pdata[0].uartclk = binfo->bi_busfreq; + pdata[0].mapbase += binfo->bi_immr_base; + pdata[0].membase = ioremap(pdata[0].mapbase, MPC85xx_UART0_SIZE); + +#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) memset(&serial_req, 0, sizeof (serial_req)); - serial_req.uartclk = binfo->bi_busfreq; - serial_req.line = 0; - serial_req.irq = MPC85xx_IRQ_DUART; - serial_req.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; serial_req.iotype = SERIAL_IO_MEM; - serial_req.membase = ioremap(duart_paddr, MPC85xx_UART0_SIZE); - serial_req.mapbase = duart_paddr; + serial_req.mapbase = pdata[0].mapbase; + serial_req.membase = pdata[0].membase; serial_req.regshift = 0; -#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) gen550_init(0, &serial_req); #endif - if (early_serial_setup(&serial_req) != 0) - printk("Early serial init of port 0 failed\n"); - - /* Assume early_serial_setup() doesn't modify serial_req */ - duart_paddr = binfo->bi_immr_base + MPC85xx_UART1_OFFSET; - serial_req.line = 1; - serial_req.mapbase = duart_paddr; - serial_req.membase = ioremap(duart_paddr, MPC85xx_UART1_SIZE); + pdata[1].uartclk = binfo->bi_busfreq; + pdata[1].mapbase += binfo->bi_immr_base; + pdata[1].membase = ioremap(pdata[1].mapbase, MPC85xx_UART0_SIZE); #if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB) + /* Assume gen550_init() doesn't modify serial_req */ + serial_req.mapbase = pdata[1].mapbase; + serial_req.membase = pdata[1].membase; + gen550_init(1, &serial_req); #endif - - if (early_serial_setup(&serial_req) != 0) - printk("Early serial init of port 1 failed\n"); } #endif diff -puN arch/ppc/syslib/ppc85xx_setup.h~ppc32-use-platform-device-style-initialization-for-85xx arch/ppc/syslib/ppc85xx_setup.h --- 25/arch/ppc/syslib/ppc85xx_setup.h~ppc32-use-platform-device-style-initialization-for-85xx 2005-01-28 14:15:09.111644920 -0800 +++ 25-akpm/arch/ppc/syslib/ppc85xx_setup.h 2005-01-28 14:15:09.155638232 -0800 @@ -43,9 +43,6 @@ extern void mpc85xx_setup_hose(void) __i #define PCIX_STATUS 0x64 /* Serial Config */ -#define MPC85XX_0_SERIAL (CCSRBAR + 0x4500) -#define MPC85XX_1_SERIAL (CCSRBAR + 0x4600) - #ifdef CONFIG_SERIAL_MANY_PORTS #define RS_TABLE_SIZE 64 #else @@ -56,12 +53,6 @@ extern void mpc85xx_setup_hose(void) __i #define BASE_BAUD 115200 #endif -#define STD_UART_OP(num) \ - { 0, BASE_BAUD, num, MPC85xx_IRQ_DUART, \ - (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \ - iomem_base: (u8 *)MPC85XX_##num##_SERIAL, \ - io_type: SERIAL_IO_MEM}, - /* Offset of CPM register space */ #define CPM_MAP_ADDR (CCSRBAR + MPC85xx_CPM_OFFSET) _