serial: Enable Freescale 16550 workaround on arm
PATCH 1/1 serial: Enable Freescale 16550 workaround on arm
The same serial hardware is present on LS2080A which is arm64, and LS1021A which is arm32, so don't limit the workaround to PPC.
Unlike PPC which uses arch/powerpc/kernel/legacy_serial.c, the ARM targets use drivers/tty/serial/of_serial.c, so add the handle_irq override check there as well.
--- drivers/tty/serial/8250/Kconfig | 4 ++-- drivers/tty/serial/of_serial.c | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-)
drivers/tty/serial/8250/Kconfig +2 -2
@@ -274,8 +274,8 @@ config SERIAL_8250_ACORN config SERIAL_8250_FSL bool - depends on SERIAL_8250_CONSOLE && PPC_UDBG_16550 - default PPC + depends on SERIAL_8250_CONSOLE + default PPC || ARM || ARM64 config SERIAL_8250_DW tristate "Support for Synopsys DesignWare 8250 quirks"
drivers/tty/serial/of_serial.c +6 -0
@@ -150,6 +150,12 @@ static int of_platform_serial_setup(struct platform_device *ofdev,break ; } +#ifdef CONFIG_SERIAL_8250_FSL +if (of_device_is_compatible (np,"fsl,ns16550" ) || +of_device_is_compatible (np,"fsl,16550-FIFO64" )) + port->handle_irq = fsl8250_handle_irq; +#endif +return 0 ; out:if (info->clk)
Signature · 1 line
2.1.4
PATCH 1/1 serial: Enable Freescale 16550 workaround on arm
drivers/tty/serial/of_serial.c static int of_platform_serial_setup(struct platform_device *ofdev, · line 158
Quoted 8 lines · On Thursday 01 October 2015 19:16:16 Scott Wood wrote:
drivers/tty/serial/of_serial.c +6
-0+#ifdef CONFIG_SERIAL_8250_FSL +if (of_device_is_compatible (np,"fsl,ns16550" ) || +of_device_is_compatible (np,"fsl,16550-FIFO64" )) + port->handle_irq = fsl8250_handle_irq; +#endif +
Can you change this to use
if (IS_ENABLED(CONFIG_SERIAL_8250_FSL)) && ...
The resulting code will be the same, it just get a little easier on the eye.
Other than that, I wonder if we should do this completely differently and have the respective entries in of_platform_serial_table[] with an appropriate PORT_* constant to handle the freescale case.
Arnd
PATCH 1/1 serial: Enable Freescale 16550 workaround on arm
Quoted 12 lines · Arnd Bergmann
drivers/tty/serial/of_serial.c static int of_platform_serial_setup(struct platform_device *ofdev, · line 158
Quoted 8 lines · On Thursday 01 October 2015 19:16:16 Scott Wood wrote:
drivers/tty/serial/of_serial.c +6
-0+#ifdef CONFIG_SERIAL_8250_FSL +if (of_device_is_compatible (np,"fsl,ns16550" ) || +of_device_is_compatible (np,"fsl,16550-FIFO64" )) + port->handle_irq = fsl8250_handle_irq; +#endif +Can you change this to use
Quoted 4 lines
if (IS_ENABLED(CONFIG_SERIAL_8250_FSL)) && ...The resulting code will be the same, it just get a little easier on the eye.
Sure.
Quoted 3 lines
Other than that, I wonder if we should do this completely differently and have the respective entries in of_platform_serial_table[] with an appropriate PORT_* constant to handle the freescale case.
I'd considered that, but it seemed like it would be more complicated, with no real benefit. We'd need to add a new PORT for the non-fifo64 case, and it would need to otherwise behave like PORT_16550A. There's no room for an extra 8250-style PORT number unless we break PORT_MAX_8250 or renumber the "ARM specific type numbers", and for some reason these PORT numbers are defined in uapi (even if there's some legacy reason for that, do we really need to keep adding to it?). We'd also need to make sure that autoconfig() doesn't overwrite the new PORT number (or ignore the fact that it gets overwritten after using it to substitute handle_irq). It would also increase the discrepancy between how the same issue is handled on ARM versus PPC (with the latter using arch/powerpc/kernel/legacy_serial.c which doesn't supply PORT numbers).
The above check wouldn't go away, as it's not something currently addressed by struct serial8250_config (unless you're also asking for a new flag for that struct, in which case it would merely be moved elsewhere); it would just require a bunch of changes elsewhere to support changing it from a simple compatible check to a PORT check.
-Scott
PATCH 1/1 serial: Enable Freescale 16550 workaround on arm
Quoted 17 lines · On Friday 02 October 2015 18:49:24 Scott Wood wrote:
Quoted 3 lines
Other than that, I wonder if we should do this completely differently and have the respective entries in of_platform_serial_table[] with an appropriate PORT_* constant to handle the freescale case.
I'd considered that, but it seemed like it would be more complicated, with no real benefit. We'd need to add a new PORT for the non-fifo64 case, and it would need to otherwise behave like
PORT_16550A. There's no room for an extra 8250-style PORT number unless we breakPORT_MAX_8250or renumber the "ARM specific type numbers", and for some reason these PORT numbers are defined in uapi (even if there's some legacy reason for that, do we really need to keep adding to it?). We'd also need to make sure thatautoconfig()doesn't overwrite the new PORT number (or ignore the fact that it gets overwritten after using it to substitutehandle_irq). It would also increase the discrepancy between how the same issue is handled on ARM versus PPC (with the latter usingarch/powerpc/kernel/legacy_serial.cwhich doesn't supply PORT numbers).
Quoted 5 lines
The above check wouldn't go away, as it's not something currently addressed by struct
serial8250_config(unless you're also asking for a new flag for that struct, in which case it would merely be moved elsewhere); it would just require a bunch of changes elsewhere to support changing it from a simple compatible check to a PORT check.
Ok, let's keep your version then, unless someone has a better idea.
FWIW, I think we should just move of_serial.c to drivers/tty/serial/8250/ now and remove the nwp specific bits.
Looking for a volunteer to actually do that work ;-)
Arnd
PATCH v2 1/1 serial: Enable Freescale 16550 workaround on arm
In reply to Scott WoodThe same serial hardware is present on LS2080A which is arm64, and LS1021A which is arm32, so don't limit the workaround to PPC.
Unlike PPC which uses arch/powerpc/kernel/legacy_serial.c, the ARM targets use drivers/tty/serial/of_serial.c, so add the handle_irq override check there as well.
---
v2: Use IS_ENABLED rather than ifdef
drivers/tty/serial/8250/Kconfig | 4 ++-- drivers/tty/serial/of_serial.c | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-)
drivers/tty/serial/8250/Kconfig +2 -2
@@ -274,8 +274,8 @@ config SERIAL_8250_ACORN config SERIAL_8250_FSL bool - depends on SERIAL_8250_CONSOLE && PPC_UDBG_16550 - default PPC + depends on SERIAL_8250_CONSOLE + default PPC || ARM || ARM64 config SERIAL_8250_DW tristate "Support for Synopsys DesignWare 8250 quirks"
drivers/tty/serial/of_serial.c +5 -0
@@ -150,6 +150,11 @@ static int of_platform_serial_setup(struct platform_device *ofdev,break ; } +if (IS_ENABLED (CONFIG_SERIAL_8250_FSL ) && + (of_device_is_compatible (np,"fsl,ns16550" ) || +of_device_is_compatible (np,"fsl,16550-FIFO64" ))) + port->handle_irq = fsl8250_handle_irq; +return 0 ; out:if (info->clk)
Signature · 1 line
2.1.4
PATCH v2 1/1 serial: Enable Freescale 16550 workaround on arm
Quoted 9 lines · On Wednesday 07 October 2015 17:31:21 Scott Wood wrote:
The same serial hardware is present on LS2080A which is arm64, and LS1021A which is arm32, so don't limit the workaround to PPC.
Unlike PPC which uses
arch/powerpc/kernel/legacy_serial.c, the ARM targets usedrivers/tty/serial/of_serial.c, so add thehandle_irqoverride check there as well.Signed-off-by Scott Wood <[email protected]>