From 7009af8cd37f7904939aec6bd2325c581abd7cac Mon Sep 17 00:00:00 2001 From: Vitaly Wool Date: Wed, 4 Oct 2006 19:19:58 +0400 Subject: [PATCH] [MIPS] PNX8550 fixups This patch fixes the compilation errors on PNX8550 and hard-to-track bug in interrupt handling. It also corresponds to the latest changes in PNX8550 serial driver. Signed-off-by: Vitaly Wool Signed-off-by: Ralf Baechle --- arch/mips/Kconfig | 2 -- arch/mips/philips/pnx8550/common/int.c | 2 +- arch/mips/philips/pnx8550/common/platform.c | 16 ++++++---------- arch/mips/philips/pnx8550/common/prom.c | 4 ++-- arch/mips/philips/pnx8550/common/setup.c | 6 +++--- include/asm-mips/mach-pnx8550/uart.h | 14 ++++++++++++++ 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index bfab055..8a49884 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -440,13 +440,11 @@ config MIPS_XXS1500 config PNX8550_V2PCI bool "Philips PNX8550 based Viper2-PCI board" - depends on BROKEN select PNX8550 select SYS_SUPPORTS_LITTLE_ENDIAN config PNX8550_JBS bool "Philips PNX8550 based JBS board" - depends on BROKEN select PNX8550 select SYS_SUPPORTS_LITTLE_ENDIAN diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c index 099679a..3c93512 100644 --- a/arch/mips/philips/pnx8550/common/int.c +++ b/arch/mips/philips/pnx8550/common/int.c @@ -90,7 +90,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) unsigned int pending = read_c0_status() & read_c0_cause(); if (pending & STATUSF_IP2) - do_IRQ(2, regs); + hw0_irqdispatch(2, regs); else if (pending & STATUSF_IP7) { if (read_c0_config7() & 0x01c0) timer_irqdispatch(7, regs); diff --git a/arch/mips/philips/pnx8550/common/platform.c b/arch/mips/philips/pnx8550/common/platform.c index 5436b4b..d43f56e 100644 --- a/arch/mips/philips/pnx8550/common/platform.c +++ b/arch/mips/philips/pnx8550/common/platform.c @@ -17,15 +17,13 @@ #include #include #include -#include +#include #include #include #include #include -extern struct uart_ops ip3106_pops; - static struct resource pnx8550_usb_ohci_resources[] = { [0] = { .start = PNX8550_USB_OHCI_OP_BASE, @@ -63,31 +61,29 @@ static struct resource pnx8550_uart_resources[] = { }, }; -struct ip3106_port ip3106_ports[] = { +struct pnx8xxx_port pnx8xxx_ports[] = { [0] = { .port = { - .type = PORT_IP3106, + .type = PORT_PNX8XXX, .iotype = UPIO_MEM, .membase = (void __iomem *)PNX8550_UART_PORT0, .mapbase = PNX8550_UART_PORT0, .irq = PNX8550_UART_INT(0), .uartclk = 3692300, .fifosize = 16, - .ops = &ip3106_pops, .flags = UPF_BOOT_AUTOCONF, .line = 0, }, }, [1] = { .port = { - .type = PORT_IP3106, + .type = PORT_PNX8XXX, .iotype = UPIO_MEM, .membase = (void __iomem *)PNX8550_UART_PORT1, .mapbase = PNX8550_UART_PORT1, .irq = PNX8550_UART_INT(1), .uartclk = 3692300, .fifosize = 16, - .ops = &ip3106_pops, .flags = UPF_BOOT_AUTOCONF, .line = 1, }, @@ -111,12 +107,12 @@ static struct platform_device pnx8550_usb_ohci_device = { }; static struct platform_device pnx8550_uart_device = { - .name = "ip3106-uart", + .name = "pnx8xxx-uart", .id = -1, .dev = { .dma_mask = &uart_dmamask, .coherent_dma_mask = 0xffffffff, - .platform_data = ip3106_ports, + .platform_data = pnx8xxx_ports, }, .num_resources = ARRAY_SIZE(pnx8550_uart_resources), .resource = pnx8550_uart_resources, diff --git a/arch/mips/philips/pnx8550/common/prom.c b/arch/mips/philips/pnx8550/common/prom.c index 70aac97..f8952c1 100644 --- a/arch/mips/philips/pnx8550/common/prom.c +++ b/arch/mips/philips/pnx8550/common/prom.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include @@ -126,7 +126,7 @@ void prom_putchar(char c) { if (pnx8550_console_port != -1) { /* Wait until FIFO not full */ - while( ((ip3106_fifo(UART_BASE, pnx8550_console_port) & IP3106_UART_FIFO_TXFIFO) >> 16) >= 16) + while( ((ip3106_fifo(UART_BASE, pnx8550_console_port) & PNX8XXX_UART_FIFO_TXFIFO) >> 16) >= 16) ; /* Send one char */ ip3106_fifo(UART_BASE, pnx8550_console_port) = c; diff --git a/arch/mips/philips/pnx8550/common/setup.c b/arch/mips/philips/pnx8550/common/setup.c index 36b0c8b..e62123c 100644 --- a/arch/mips/philips/pnx8550/common/setup.c +++ b/arch/mips/philips/pnx8550/common/setup.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include @@ -56,7 +56,7 @@ extern char *prom_getcmdline(void); struct resource standard_io_resources[] = { { - .start = .0x00, + .start = 0x00, .end = 0x1f, .name = "dma1", .flags = IORESOURCE_BUSY @@ -144,7 +144,7 @@ void __init plat_mem_setup(void) /* We must initialize the UART (console) before prom_printf */ /* Set LCR to 8-bit and BAUD to 38400 (no 5) */ ip3106_lcr(UART_BASE, pnx8550_console_port) = - IP3106_UART_LCR_8BIT; + PNX8XXX_UART_LCR_8BIT; ip3106_baud(UART_BASE, pnx8550_console_port) = 5; } diff --git a/include/asm-mips/mach-pnx8550/uart.h b/include/asm-mips/mach-pnx8550/uart.h index e32b9a2..814a7a1 100644 --- a/include/asm-mips/mach-pnx8550/uart.h +++ b/include/asm-mips/mach-pnx8550/uart.h @@ -13,4 +13,18 @@ #define PNX8550_UART_INT(x) (PNX8550_INT_GIC_MIN+19+x) #define IRQ_TO_UART(x) (x-PNX8550_INT_GIC_MIN-19) +/* early macros needed for prom/kgdb */ + +#define ip3106_lcr(base,port) *(volatile u32 *)(base+(port*0x1000) + 0x000) +#define ip3106_mcr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x004) +#define ip3106_baud(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x008) +#define ip3106_cfg(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x00C) +#define ip3106_fifo(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x028) +#define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0) +#define ip3106_ien(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE4) +#define ip3106_iclr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE8) +#define ip3106_iset(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFEC) +#define ip3106_pd(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFF4) +#define ip3106_mid(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFFC) + #endif -- 2.7.4