diff options
author | Vitaly Wool <vitalywool@gmail.com> | 2006-10-04 11:19:58 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-10-04 13:06:15 -0400 |
commit | 7009af8cd37f7904939aec6bd2325c581abd7cac (patch) | |
tree | bcf4dcda14c662a4d0394c54f2f05731655e3256 | |
parent | 4a61f17378c2cdd9bd8f34ef8bd7422861d0c1f1 (diff) |
[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 <vitalywool@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/Kconfig | 2 | ||||
-rw-r--r-- | arch/mips/philips/pnx8550/common/int.c | 2 | ||||
-rw-r--r-- | arch/mips/philips/pnx8550/common/platform.c | 16 | ||||
-rw-r--r-- | arch/mips/philips/pnx8550/common/prom.c | 4 | ||||
-rw-r--r-- | arch/mips/philips/pnx8550/common/setup.c | 6 | ||||
-rw-r--r-- | 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 bfab055ad7cc..8a49884bd5ec 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -440,13 +440,11 @@ config MIPS_XXS1500 | |||
440 | 440 | ||
441 | config PNX8550_V2PCI | 441 | config PNX8550_V2PCI |
442 | bool "Philips PNX8550 based Viper2-PCI board" | 442 | bool "Philips PNX8550 based Viper2-PCI board" |
443 | depends on BROKEN | ||
444 | select PNX8550 | 443 | select PNX8550 |
445 | select SYS_SUPPORTS_LITTLE_ENDIAN | 444 | select SYS_SUPPORTS_LITTLE_ENDIAN |
446 | 445 | ||
447 | config PNX8550_JBS | 446 | config PNX8550_JBS |
448 | bool "Philips PNX8550 based JBS board" | 447 | bool "Philips PNX8550 based JBS board" |
449 | depends on BROKEN | ||
450 | select PNX8550 | 448 | select PNX8550 |
451 | select SYS_SUPPORTS_LITTLE_ENDIAN | 449 | select SYS_SUPPORTS_LITTLE_ENDIAN |
452 | 450 | ||
diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c index 099679a9dfb9..3c93512be1ec 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) | |||
90 | unsigned int pending = read_c0_status() & read_c0_cause(); | 90 | unsigned int pending = read_c0_status() & read_c0_cause(); |
91 | 91 | ||
92 | if (pending & STATUSF_IP2) | 92 | if (pending & STATUSF_IP2) |
93 | do_IRQ(2, regs); | 93 | hw0_irqdispatch(2, regs); |
94 | else if (pending & STATUSF_IP7) { | 94 | else if (pending & STATUSF_IP7) { |
95 | if (read_c0_config7() & 0x01c0) | 95 | if (read_c0_config7() & 0x01c0) |
96 | timer_irqdispatch(7, regs); | 96 | timer_irqdispatch(7, regs); |
diff --git a/arch/mips/philips/pnx8550/common/platform.c b/arch/mips/philips/pnx8550/common/platform.c index 5436b4b97455..d43f56e2cd78 100644 --- a/arch/mips/philips/pnx8550/common/platform.c +++ b/arch/mips/philips/pnx8550/common/platform.c | |||
@@ -17,15 +17,13 @@ | |||
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/resource.h> | 18 | #include <linux/resource.h> |
19 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
20 | #include <linux/serial_ip3106.h> | 20 | #include <linux/serial_pnx8xxx.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | 22 | ||
23 | #include <int.h> | 23 | #include <int.h> |
24 | #include <usb.h> | 24 | #include <usb.h> |
25 | #include <uart.h> | 25 | #include <uart.h> |
26 | 26 | ||
27 | extern struct uart_ops ip3106_pops; | ||
28 | |||
29 | static struct resource pnx8550_usb_ohci_resources[] = { | 27 | static struct resource pnx8550_usb_ohci_resources[] = { |
30 | [0] = { | 28 | [0] = { |
31 | .start = PNX8550_USB_OHCI_OP_BASE, | 29 | .start = PNX8550_USB_OHCI_OP_BASE, |
@@ -63,31 +61,29 @@ static struct resource pnx8550_uart_resources[] = { | |||
63 | }, | 61 | }, |
64 | }; | 62 | }; |
65 | 63 | ||
66 | struct ip3106_port ip3106_ports[] = { | 64 | struct pnx8xxx_port pnx8xxx_ports[] = { |
67 | [0] = { | 65 | [0] = { |
68 | .port = { | 66 | .port = { |
69 | .type = PORT_IP3106, | 67 | .type = PORT_PNX8XXX, |
70 | .iotype = UPIO_MEM, | 68 | .iotype = UPIO_MEM, |
71 | .membase = (void __iomem *)PNX8550_UART_PORT0, | 69 | .membase = (void __iomem *)PNX8550_UART_PORT0, |
72 | .mapbase = PNX8550_UART_PORT0, | 70 | .mapbase = PNX8550_UART_PORT0, |
73 | .irq = PNX8550_UART_INT(0), | 71 | .irq = PNX8550_UART_INT(0), |
74 | .uartclk = 3692300, | 72 | .uartclk = 3692300, |
75 | .fifosize = 16, | 73 | .fifosize = 16, |
76 | .ops = &ip3106_pops, | ||
77 | .flags = UPF_BOOT_AUTOCONF, | 74 | .flags = UPF_BOOT_AUTOCONF, |
78 | .line = 0, | 75 | .line = 0, |
79 | }, | 76 | }, |
80 | }, | 77 | }, |
81 | [1] = { | 78 | [1] = { |
82 | .port = { | 79 | .port = { |
83 | .type = PORT_IP3106, | 80 | .type = PORT_PNX8XXX, |
84 | .iotype = UPIO_MEM, | 81 | .iotype = UPIO_MEM, |
85 | .membase = (void __iomem *)PNX8550_UART_PORT1, | 82 | .membase = (void __iomem *)PNX8550_UART_PORT1, |
86 | .mapbase = PNX8550_UART_PORT1, | 83 | .mapbase = PNX8550_UART_PORT1, |
87 | .irq = PNX8550_UART_INT(1), | 84 | .irq = PNX8550_UART_INT(1), |
88 | .uartclk = 3692300, | 85 | .uartclk = 3692300, |
89 | .fifosize = 16, | 86 | .fifosize = 16, |
90 | .ops = &ip3106_pops, | ||
91 | .flags = UPF_BOOT_AUTOCONF, | 87 | .flags = UPF_BOOT_AUTOCONF, |
92 | .line = 1, | 88 | .line = 1, |
93 | }, | 89 | }, |
@@ -111,12 +107,12 @@ static struct platform_device pnx8550_usb_ohci_device = { | |||
111 | }; | 107 | }; |
112 | 108 | ||
113 | static struct platform_device pnx8550_uart_device = { | 109 | static struct platform_device pnx8550_uart_device = { |
114 | .name = "ip3106-uart", | 110 | .name = "pnx8xxx-uart", |
115 | .id = -1, | 111 | .id = -1, |
116 | .dev = { | 112 | .dev = { |
117 | .dma_mask = &uart_dmamask, | 113 | .dma_mask = &uart_dmamask, |
118 | .coherent_dma_mask = 0xffffffff, | 114 | .coherent_dma_mask = 0xffffffff, |
119 | .platform_data = ip3106_ports, | 115 | .platform_data = pnx8xxx_ports, |
120 | }, | 116 | }, |
121 | .num_resources = ARRAY_SIZE(pnx8550_uart_resources), | 117 | .num_resources = ARRAY_SIZE(pnx8550_uart_resources), |
122 | .resource = pnx8550_uart_resources, | 118 | .resource = pnx8550_uart_resources, |
diff --git a/arch/mips/philips/pnx8550/common/prom.c b/arch/mips/philips/pnx8550/common/prom.c index 70aac9759412..f8952c1359cd 100644 --- a/arch/mips/philips/pnx8550/common/prom.c +++ b/arch/mips/philips/pnx8550/common/prom.c | |||
@@ -13,7 +13,7 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/string.h> | 15 | #include <linux/string.h> |
16 | #include <linux/serial_ip3106.h> | 16 | #include <linux/serial_pnx8xxx.h> |
17 | 17 | ||
18 | #include <asm/bootinfo.h> | 18 | #include <asm/bootinfo.h> |
19 | #include <uart.h> | 19 | #include <uart.h> |
@@ -126,7 +126,7 @@ void prom_putchar(char c) | |||
126 | { | 126 | { |
127 | if (pnx8550_console_port != -1) { | 127 | if (pnx8550_console_port != -1) { |
128 | /* Wait until FIFO not full */ | 128 | /* Wait until FIFO not full */ |
129 | while( ((ip3106_fifo(UART_BASE, pnx8550_console_port) & IP3106_UART_FIFO_TXFIFO) >> 16) >= 16) | 129 | while( ((ip3106_fifo(UART_BASE, pnx8550_console_port) & PNX8XXX_UART_FIFO_TXFIFO) >> 16) >= 16) |
130 | ; | 130 | ; |
131 | /* Send one char */ | 131 | /* Send one char */ |
132 | ip3106_fifo(UART_BASE, pnx8550_console_port) = c; | 132 | 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 36b0c8bc6c06..e62123ca9b64 100644 --- a/arch/mips/philips/pnx8550/common/setup.c +++ b/arch/mips/philips/pnx8550/common/setup.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
27 | #include <linux/serial_ip3106.h> | 27 | #include <linux/serial_pnx8xxx.h> |
28 | #include <linux/pm.h> | 28 | #include <linux/pm.h> |
29 | 29 | ||
30 | #include <asm/cpu.h> | 30 | #include <asm/cpu.h> |
@@ -56,7 +56,7 @@ extern char *prom_getcmdline(void); | |||
56 | 56 | ||
57 | struct resource standard_io_resources[] = { | 57 | struct resource standard_io_resources[] = { |
58 | { | 58 | { |
59 | .start = .0x00, | 59 | .start = 0x00, |
60 | .end = 0x1f, | 60 | .end = 0x1f, |
61 | .name = "dma1", | 61 | .name = "dma1", |
62 | .flags = IORESOURCE_BUSY | 62 | .flags = IORESOURCE_BUSY |
@@ -144,7 +144,7 @@ void __init plat_mem_setup(void) | |||
144 | /* We must initialize the UART (console) before prom_printf */ | 144 | /* We must initialize the UART (console) before prom_printf */ |
145 | /* Set LCR to 8-bit and BAUD to 38400 (no 5) */ | 145 | /* Set LCR to 8-bit and BAUD to 38400 (no 5) */ |
146 | ip3106_lcr(UART_BASE, pnx8550_console_port) = | 146 | ip3106_lcr(UART_BASE, pnx8550_console_port) = |
147 | IP3106_UART_LCR_8BIT; | 147 | PNX8XXX_UART_LCR_8BIT; |
148 | ip3106_baud(UART_BASE, pnx8550_console_port) = 5; | 148 | ip3106_baud(UART_BASE, pnx8550_console_port) = 5; |
149 | } | 149 | } |
150 | 150 | ||
diff --git a/include/asm-mips/mach-pnx8550/uart.h b/include/asm-mips/mach-pnx8550/uart.h index e32b9a23d70e..814a7a15ab49 100644 --- a/include/asm-mips/mach-pnx8550/uart.h +++ b/include/asm-mips/mach-pnx8550/uart.h | |||
@@ -13,4 +13,18 @@ | |||
13 | #define PNX8550_UART_INT(x) (PNX8550_INT_GIC_MIN+19+x) | 13 | #define PNX8550_UART_INT(x) (PNX8550_INT_GIC_MIN+19+x) |
14 | #define IRQ_TO_UART(x) (x-PNX8550_INT_GIC_MIN-19) | 14 | #define IRQ_TO_UART(x) (x-PNX8550_INT_GIC_MIN-19) |
15 | 15 | ||
16 | /* early macros needed for prom/kgdb */ | ||
17 | |||
18 | #define ip3106_lcr(base,port) *(volatile u32 *)(base+(port*0x1000) + 0x000) | ||
19 | #define ip3106_mcr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x004) | ||
20 | #define ip3106_baud(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x008) | ||
21 | #define ip3106_cfg(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x00C) | ||
22 | #define ip3106_fifo(base, port) *(volatile u32 *)(base+(port*0x1000) + 0x028) | ||
23 | #define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0) | ||
24 | #define ip3106_ien(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE4) | ||
25 | #define ip3106_iclr(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE8) | ||
26 | #define ip3106_iset(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFEC) | ||
27 | #define ip3106_pd(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFF4) | ||
28 | #define ip3106_mid(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFFC) | ||
29 | |||
16 | #endif | 30 | #endif |