Message ID | 1309211120-2803-4-git-send-email-arnd@arndb.de (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
On 06/27/2011 02:45 PM, Arnd Bergmann wrote: > This iotype is only used by the legacy_serial code in powerpc, so the > code should live there, rather than be compiled in for every 8250 > driver. > > Signed-off-by: Arnd Bergmann<arnd@arndb.de> > Cc: Benjamin Herrenschmidt<benh@kernel.crashing.org> > Cc: linuxppc-dev@lists.ozlabs.org > Cc: Greg Kroah-Hartman<gregkh@suse.de> > Cc: linux-serial@vger.kernel.org > --- > arch/powerpc/kernel/legacy_serial.c | 24 ++++++++++++++++++++++++ > drivers/tty/serial/8250.c | 23 ----------------------- > 2 files changed, 24 insertions(+), 23 deletions(-) > This seems vaguely familiar: https://lkml.org/lkml/2008/10/6/297 So just for the hell of it... Acked-by: David Daney <david.daney@cavium.com>
On Mon, 2011-06-27 at 23:45 +0200, Arnd Bergmann wrote: > This iotype is only used by the legacy_serial code in powerpc, so the > code should live there, rather than be compiled in for every 8250 > driver. Obviously untested :-) Misses the definition of UART_IIR etc... I'm committing a fixed version in my tree Cheers. Ben. > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: linuxppc-dev@lists.ozlabs.org > Cc: Greg Kroah-Hartman <gregkh@suse.de> > Cc: linux-serial@vger.kernel.org > --- > arch/powerpc/kernel/legacy_serial.c | 24 ++++++++++++++++++++++++ > drivers/tty/serial/8250.c | 23 ----------------------- > 2 files changed, 24 insertions(+), 23 deletions(-) > > diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c > index 2b97b80..b229e1e 100644 > --- a/arch/powerpc/kernel/legacy_serial.c > +++ b/arch/powerpc/kernel/legacy_serial.c > @@ -47,6 +47,24 @@ static struct __initdata of_device_id legacy_serial_parents[] = { > static unsigned int legacy_serial_count; > static int legacy_serial_console = -1; > > +static unsigned int tsi_serial_in(struct uart_port *p, int offset) > +{ > + unsigned int tmp; > + offset = offset << p->regshift; > + if (offset == UART_IIR) { > + tmp = readl(p->membase + (UART_IIR & ~3)); > + return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */ > + } else > + return readb(p->membase + offset); > +} > + > +static void tsi_serial_out(struct uart_port *p, int offset, int value) > +{ > + offset = offset << p->regshift; > + if (!((offset == UART_IER) && (value & UART_IER_UUE))) > + writeb(value, p->membase + offset); > +} > + > static int __init add_legacy_port(struct device_node *np, int want_index, > int iotype, phys_addr_t base, > phys_addr_t taddr, unsigned long irq, > @@ -102,6 +120,7 @@ static int __init add_legacy_port(struct device_node *np, int want_index, > legacy_serial_ports[index].iobase = base; > else > legacy_serial_ports[index].mapbase = base; > + > legacy_serial_ports[index].iotype = iotype; > legacy_serial_ports[index].uartclk = clock; > legacy_serial_ports[index].irq = irq; > @@ -112,6 +131,11 @@ static int __init add_legacy_port(struct device_node *np, int want_index, > legacy_serial_infos[index].speed = spd ? be32_to_cpup(spd) : 0; > legacy_serial_infos[index].irq_check_parent = irq_check_parent; > > + if (iotype == UPIO_TSI) { > + legacy_serial_ports[index].serial_in = tsi_serial_in; > + legacy_serial_ports[index].serial_out = tsi_serial_out; > + } > + > printk(KERN_DEBUG "Found legacy serial port %d for %s\n", > index, np->full_name); > printk(KERN_DEBUG " %s=%llx, taddr=%llx, irq=%lx, clk=%d, speed=%d\n", > diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c > index c8f107e..d575ccb 100644 > --- a/drivers/tty/serial/8250.c > +++ b/drivers/tty/serial/8250.c > @@ -345,24 +345,6 @@ static unsigned int mem32_serial_in(struct uart_port *p, int offset) > return readl(p->membase + offset); > } > > -static unsigned int tsi_serial_in(struct uart_port *p, int offset) > -{ > - unsigned int tmp; > - offset = map_8250_in_reg(p, offset) << p->regshift; > - if (offset == UART_IIR) { > - tmp = readl(p->membase + (UART_IIR & ~3)); > - return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */ > - } else > - return readb(p->membase + offset); > -} > - > -static void tsi_serial_out(struct uart_port *p, int offset, int value) > -{ > - offset = map_8250_out_reg(p, offset) << p->regshift; > - if (!((offset == UART_IER) && (value & UART_IER_UUE))) > - 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) > @@ -431,11 +413,6 @@ static void set_io_from_upio(struct uart_port *p) > p->serial_out = mem32_serial_out; > break; > > - case UPIO_TSI: > - p->serial_in = tsi_serial_in; > - p->serial_out = tsi_serial_out; > - break; > - > case UPIO_DWAPB: > p->serial_in = mem_serial_in; > p->serial_out = dwapb_serial_out;
On Thursday 01 September 2011 16:02:06 Benjamin Herrenschmidt wrote: > On Mon, 2011-06-27 at 23:45 +0200, Arnd Bergmann wrote: > > This iotype is only used by the legacy_serial code in powerpc, so the > > code should live there, rather than be compiled in for every 8250 > > driver. > > Obviously untested > > Misses the definition of UART_IIR etc... > > I'm committing a fixed version in my tree Ok, thank you! Arnd
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c index 2b97b80..b229e1e 100644 --- a/arch/powerpc/kernel/legacy_serial.c +++ b/arch/powerpc/kernel/legacy_serial.c @@ -47,6 +47,24 @@ static struct __initdata of_device_id legacy_serial_parents[] = { static unsigned int legacy_serial_count; static int legacy_serial_console = -1; +static unsigned int tsi_serial_in(struct uart_port *p, int offset) +{ + unsigned int tmp; + offset = offset << p->regshift; + if (offset == UART_IIR) { + tmp = readl(p->membase + (UART_IIR & ~3)); + return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */ + } else + return readb(p->membase + offset); +} + +static void tsi_serial_out(struct uart_port *p, int offset, int value) +{ + offset = offset << p->regshift; + if (!((offset == UART_IER) && (value & UART_IER_UUE))) + writeb(value, p->membase + offset); +} + static int __init add_legacy_port(struct device_node *np, int want_index, int iotype, phys_addr_t base, phys_addr_t taddr, unsigned long irq, @@ -102,6 +120,7 @@ static int __init add_legacy_port(struct device_node *np, int want_index, legacy_serial_ports[index].iobase = base; else legacy_serial_ports[index].mapbase = base; + legacy_serial_ports[index].iotype = iotype; legacy_serial_ports[index].uartclk = clock; legacy_serial_ports[index].irq = irq; @@ -112,6 +131,11 @@ static int __init add_legacy_port(struct device_node *np, int want_index, legacy_serial_infos[index].speed = spd ? be32_to_cpup(spd) : 0; legacy_serial_infos[index].irq_check_parent = irq_check_parent; + if (iotype == UPIO_TSI) { + legacy_serial_ports[index].serial_in = tsi_serial_in; + legacy_serial_ports[index].serial_out = tsi_serial_out; + } + printk(KERN_DEBUG "Found legacy serial port %d for %s\n", index, np->full_name); printk(KERN_DEBUG " %s=%llx, taddr=%llx, irq=%lx, clk=%d, speed=%d\n", diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c index c8f107e..d575ccb 100644 --- a/drivers/tty/serial/8250.c +++ b/drivers/tty/serial/8250.c @@ -345,24 +345,6 @@ static unsigned int mem32_serial_in(struct uart_port *p, int offset) return readl(p->membase + offset); } -static unsigned int tsi_serial_in(struct uart_port *p, int offset) -{ - unsigned int tmp; - offset = map_8250_in_reg(p, offset) << p->regshift; - if (offset == UART_IIR) { - tmp = readl(p->membase + (UART_IIR & ~3)); - return (tmp >> 16) & 0xff; /* UART_IIR % 4 == 2 */ - } else - return readb(p->membase + offset); -} - -static void tsi_serial_out(struct uart_port *p, int offset, int value) -{ - offset = map_8250_out_reg(p, offset) << p->regshift; - if (!((offset == UART_IER) && (value & UART_IER_UUE))) - 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) @@ -431,11 +413,6 @@ static void set_io_from_upio(struct uart_port *p) p->serial_out = mem32_serial_out; break; - case UPIO_TSI: - p->serial_in = tsi_serial_in; - p->serial_out = tsi_serial_out; - break; - case UPIO_DWAPB: p->serial_in = mem_serial_in; p->serial_out = dwapb_serial_out;
This iotype is only used by the legacy_serial code in powerpc, so the code should live there, rather than be compiled in for every 8250 driver. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: linuxppc-dev@lists.ozlabs.org Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: linux-serial@vger.kernel.org --- arch/powerpc/kernel/legacy_serial.c | 24 ++++++++++++++++++++++++ drivers/tty/serial/8250.c | 23 ----------------------- 2 files changed, 24 insertions(+), 23 deletions(-)