[MIPS] PNX8550 fixups
authorVitaly Wool <vitalywool@gmail.com>
Wed, 4 Oct 2006 15:19:58 +0000 (19:19 +0400)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 4 Oct 2006 17:06:15 +0000 (18:06 +0100)
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 <vitalywool@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig
arch/mips/philips/pnx8550/common/int.c
arch/mips/philips/pnx8550/common/platform.c
arch/mips/philips/pnx8550/common/prom.c
arch/mips/philips/pnx8550/common/setup.c
include/asm-mips/mach-pnx8550/uart.h

index bfab055ad7cc3d98e358b21c60e6200bb10c557a..8a49884bd5ec674204d6d4852f272d70bbca593d 100644 (file)
@@ -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
 
index 099679a9dfb9c9dbc56744499d1855ddf4799a04..3c93512be1ec11bd54de27b47bcdb4222dc34e38 100644 (file)
@@ -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);
index 5436b4b97455f8ce95fffed943685d7eee5fda48..d43f56e2cd7887b1adea9cbae07996b59e3951c6 100644 (file)
 #include <linux/init.h>
 #include <linux/resource.h>
 #include <linux/serial.h>
-#include <linux/serial_ip3106.h>
+#include <linux/serial_pnx8xxx.h>
 #include <linux/platform_device.h>
 
 #include <int.h>
 #include <usb.h>
 #include <uart.h>
 
-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,
index 70aac9759412b8faf0557c396d48401e554ba64b..f8952c1359cd8b0752ec97e91154527d3a768d3d 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/string.h>
-#include <linux/serial_ip3106.h>
+#include <linux/serial_pnx8xxx.h>
 
 #include <asm/bootinfo.h>
 #include <uart.h>
@@ -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;
index 36b0c8bc6c06197824c0ca65f5645fcbd869bfcf..e62123ca9b64899c51176a2c6ad6ae95381f5882 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/mm.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
-#include <linux/serial_ip3106.h>
+#include <linux/serial_pnx8xxx.h>
 #include <linux/pm.h>
 
 #include <asm/cpu.h>
@@ -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;
        }
 
index e32b9a23d70e778e17b0a579b8244856d14f91e6..814a7a15ab4955d1a63d934643193c6366d8e009 100644 (file)
 #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