| From c4cad90f9e9dcb85afc5e75a02ae3522ed077296 Mon Sep 17 00:00:00 2001 |
| From: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Date: Tue, 3 Jun 2014 17:33:41 +1000 |
| Subject: powerpc/serial: Use saner flags when creating legacy ports |
| |
| From: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| |
| commit c4cad90f9e9dcb85afc5e75a02ae3522ed077296 upstream. |
| |
| We had a mix & match of flags used when creating legacy ports |
| depending on where we found them in the device-tree. Among others |
| we were missing UPF_SKIP_TEST for some kind of ISA ports which is |
| a problem as quite a few UARTs out there don't support the loopback |
| test (such as a lot of BMCs). |
| |
| Let's pick the set of flags used by the SoC code and generalize it |
| which means autoconf, no loopback test, irq maybe shared and fixed |
| port. |
| |
| Sending to stable as the lack of UPF_SKIP_TEST is breaking |
| serial on some machines so I want this back into distros |
| |
| Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/kernel/legacy_serial.c | 15 +++++++++------ |
| 1 file changed, 9 insertions(+), 6 deletions(-) |
| |
| --- a/arch/powerpc/kernel/legacy_serial.c |
| +++ b/arch/powerpc/kernel/legacy_serial.c |
| @@ -48,6 +48,9 @@ static struct of_device_id legacy_serial |
| static unsigned int legacy_serial_count; |
| static int legacy_serial_console = -1; |
| |
| +static const upf_t legacy_port_flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
| + UPF_SHARE_IRQ | UPF_FIXED_PORT; |
| + |
| static unsigned int tsi_serial_in(struct uart_port *p, int offset) |
| { |
| unsigned int tmp; |
| @@ -153,8 +156,6 @@ static int __init add_legacy_soc_port(st |
| { |
| u64 addr; |
| const __be32 *addrp; |
| - upf_t flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ |
| - | UPF_FIXED_PORT; |
| struct device_node *tsi = of_get_parent(np); |
| |
| /* We only support ports that have a clock frequency properly |
| @@ -185,9 +186,11 @@ static int __init add_legacy_soc_port(st |
| * IO port value. It will be fixed up later along with the irq |
| */ |
| if (tsi && !strcmp(tsi->type, "tsi-bridge")) |
| - return add_legacy_port(np, -1, UPIO_TSI, addr, addr, NO_IRQ, flags, 0); |
| + return add_legacy_port(np, -1, UPIO_TSI, addr, addr, |
| + NO_IRQ, legacy_port_flags, 0); |
| else |
| - return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags, 0); |
| + return add_legacy_port(np, -1, UPIO_MEM, addr, addr, |
| + NO_IRQ, legacy_port_flags, 0); |
| } |
| |
| static int __init add_legacy_isa_port(struct device_node *np, |
| @@ -233,7 +236,7 @@ static int __init add_legacy_isa_port(st |
| |
| /* Add port, irq will be dealt with later */ |
| return add_legacy_port(np, index, UPIO_PORT, be32_to_cpu(reg[1]), |
| - taddr, NO_IRQ, UPF_BOOT_AUTOCONF, 0); |
| + taddr, NO_IRQ, legacy_port_flags, 0); |
| |
| } |
| |
| @@ -306,7 +309,7 @@ static int __init add_legacy_pci_port(st |
| * IO port value. It will be fixed up later along with the irq |
| */ |
| return add_legacy_port(np, index, iotype, base, addr, NO_IRQ, |
| - UPF_BOOT_AUTOCONF, np != pci_dev); |
| + legacy_port_flags, np != pci_dev); |
| } |
| #endif |
| |