| From ea7db772ed2f7cf3ce5d40ea3da4f4ead0505fb2 Mon Sep 17 00:00:00 2001 |
| From: Jamie Iles <jamie@jamieiles.com> |
| Date: Mon, 15 Aug 2011 10:17:55 +0100 |
| Subject: tty: serial8250: remove UPIO_DWAPB{,32} |
| |
| Now that platforms can override the port IRQ handler and the only user |
| of these UPIO modes has been converted over, kill off UPIO_DWAPB and |
| UPIO_DWAPB32. |
| |
| Acked-by: Alan Cox <alan@linux.intel.com> |
| Signed-off-by: Jamie Iles <jamie@jamieiles.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| (cherry picked from commit 4834d028978583dfe8e1fc19f1180ceb03d8dfb7) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/tty/serial/8250.c | 68 --------------------------------------- |
| drivers/tty/serial/serial_core.c | 4 -- |
| include/linux/serial_core.h | 4 -- |
| 3 files changed, 1 insertion(+), 75 deletions(-) |
| |
| --- a/drivers/tty/serial/8250.c |
| +++ b/drivers/tty/serial/8250.c |
| @@ -461,42 +461,6 @@ static void tsi_serial_out(struct uart_p |
| writeb(value, p->membase + offset); |
| } |
| |
| -/* Save the LCR value so it can be re-written when a Busy Detect IRQ occurs. */ |
| -static inline void dwapb_save_out_value(struct uart_port *p, int offset, |
| - int value) |
| -{ |
| - struct uart_8250_port *up = |
| - container_of(p, struct uart_8250_port, port); |
| - |
| - if (offset == UART_LCR) |
| - up->lcr = value; |
| -} |
| - |
| -/* Read the IER to ensure any interrupt is cleared before returning from ISR. */ |
| -static inline void dwapb_check_clear_ier(struct uart_port *p, int offset) |
| -{ |
| - if (offset == UART_TX || offset == UART_IER) |
| - p->serial_in(p, UART_IER); |
| -} |
| - |
| -static void dwapb_serial_out(struct uart_port *p, int offset, int value) |
| -{ |
| - int save_offset = offset; |
| - offset = map_8250_out_reg(p, offset) << p->regshift; |
| - dwapb_save_out_value(p, save_offset, value); |
| - writeb(value, p->membase + offset); |
| - dwapb_check_clear_ier(p, save_offset); |
| -} |
| - |
| -static void dwapb32_serial_out(struct uart_port *p, int offset, int value) |
| -{ |
| - int save_offset = offset; |
| - offset = map_8250_out_reg(p, offset) << p->regshift; |
| - dwapb_save_out_value(p, save_offset, value); |
| - writel(value, p->membase + offset); |
| - dwapb_check_clear_ier(p, save_offset); |
| -} |
| - |
| static unsigned int io_serial_in(struct uart_port *p, int offset) |
| { |
| offset = map_8250_in_reg(p, offset) << p->regshift; |
| @@ -542,16 +506,6 @@ static void set_io_from_upio(struct uart |
| p->serial_out = tsi_serial_out; |
| break; |
| |
| - case UPIO_DWAPB: |
| - p->serial_in = mem_serial_in; |
| - p->serial_out = dwapb_serial_out; |
| - break; |
| - |
| - case UPIO_DWAPB32: |
| - p->serial_in = mem32_serial_in; |
| - p->serial_out = dwapb32_serial_out; |
| - break; |
| - |
| default: |
| p->serial_in = io_serial_in; |
| p->serial_out = io_serial_out; |
| @@ -570,8 +524,6 @@ serial_out_sync(struct uart_8250_port *u |
| case UPIO_MEM: |
| case UPIO_MEM32: |
| case UPIO_AU: |
| - case UPIO_DWAPB: |
| - case UPIO_DWAPB32: |
| p->serial_out(p, offset, value); |
| p->serial_in(p, UART_LCR); /* safe, no side-effects */ |
| break; |
| @@ -1679,23 +1631,7 @@ static irqreturn_t serial8250_interrupt( |
| port = &up->port; |
| |
| if (port->handle_irq(port)) { |
| - |
| handled = 1; |
| - |
| - end = NULL; |
| - } else if ((up->port.iotype == UPIO_DWAPB || |
| - up->port.iotype == UPIO_DWAPB32) && |
| - (iir & UART_IIR_BUSY) == UART_IIR_BUSY) { |
| - /* The DesignWare APB UART has an Busy Detect (0x07) |
| - * interrupt meaning an LCR write attempt occurred while the |
| - * UART was busy. The interrupt must be cleared by reading |
| - * the UART status register (USR) and the LCR re-written. */ |
| - unsigned int status; |
| - status = *(volatile u32 *)up->port.private_data; |
| - serial_out(up, UART_LCR, up->lcr); |
| - |
| - handled = 1; |
| - |
| end = NULL; |
| } else if (end == NULL) |
| end = l; |
| @@ -2594,8 +2530,6 @@ static int serial8250_request_std_resour |
| case UPIO_TSI: |
| case UPIO_MEM32: |
| case UPIO_MEM: |
| - case UPIO_DWAPB: |
| - case UPIO_DWAPB32: |
| if (!up->port.mapbase) |
| break; |
| |
| @@ -2632,8 +2566,6 @@ static void serial8250_release_std_resou |
| case UPIO_TSI: |
| case UPIO_MEM32: |
| case UPIO_MEM: |
| - case UPIO_DWAPB: |
| - case UPIO_DWAPB32: |
| if (!up->port.mapbase) |
| break; |
| |
| --- a/drivers/tty/serial/serial_core.c |
| +++ b/drivers/tty/serial/serial_core.c |
| @@ -2069,8 +2069,6 @@ uart_report_port(struct uart_driver *drv |
| case UPIO_MEM32: |
| case UPIO_AU: |
| case UPIO_TSI: |
| - case UPIO_DWAPB: |
| - case UPIO_DWAPB32: |
| snprintf(address, sizeof(address), |
| "MMIO 0x%llx", (unsigned long long)port->mapbase); |
| break; |
| @@ -2491,8 +2489,6 @@ int uart_match_port(struct uart_port *po |
| case UPIO_MEM32: |
| case UPIO_AU: |
| case UPIO_TSI: |
| - case UPIO_DWAPB: |
| - case UPIO_DWAPB32: |
| return (port1->mapbase == port2->mapbase); |
| } |
| return 0; |
| --- a/include/linux/serial_core.h |
| +++ b/include/linux/serial_core.h |
| @@ -318,9 +318,7 @@ struct uart_port { |
| #define UPIO_MEM32 (3) |
| #define UPIO_AU (4) /* Au1x00 type IO */ |
| #define UPIO_TSI (5) /* Tsi108/109 type IO */ |
| -#define UPIO_DWAPB (6) /* DesignWare APB UART */ |
| -#define UPIO_RM9000 (7) /* RM9000 type IO */ |
| -#define UPIO_DWAPB32 (8) /* DesignWare APB UART (32 bit accesses) */ |
| +#define UPIO_RM9000 (6) /* RM9000 type IO */ |
| |
| unsigned int read_status_mask; /* driver specific */ |
| unsigned int ignore_status_mask; /* driver specific */ |