Hi Sekhar,

On 07/06/2015 05:47 AM, Sekhar Nori wrote:
> Use of of_machine_is_compatible() for AM335x specific DMA
> quirk in 8250_omap driver makes it ugly to extend the
> quirk for other platforms. Instead use a new compatible.
> 
> The new compatible will also make it easier to care of other
> quirks specific to AM335x and like SoCs.
> 
> This patch does break backward DTB compatibility for users of
> 8250_omap driver on AM335x boards.

Not ok.

8250_omap was released with 3.19 and has been the default driver for
BeagleBone since 4.0.

Regards,
Peter Hurley

> However, the 8250_omap driver
> is new and omap_serial is still the default choice driver for UART
> and so choosing to break compatibility over keeping the code
> around forever.
> 
> Signed-off-by: Sekhar Nori <nsek...@ti.com>
> ---
>  .../devicetree/bindings/serial/omap_serial.txt     |  1 +
>  arch/arm/boot/dts/am33xx.dtsi                      | 12 ++++----
>  drivers/tty/serial/8250/8250_omap.c                | 35 
> +++++++++++++---------
>  3 files changed, 28 insertions(+), 20 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt 
> b/Documentation/devicetree/bindings/serial/omap_serial.txt
> index d3bd2b1ec401..0ee88209b341 100644
> --- a/Documentation/devicetree/bindings/serial/omap_serial.txt
> +++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
> @@ -5,6 +5,7 @@ Required properties:
>  - compatible : should be "ti,omap3-uart" for OMAP3 controllers
>  - compatible : should be "ti,omap4-uart" for OMAP4 controllers
>  - compatible : should be "ti,am4372-uart" for AM437x controllers
> +- compatible : should be "ti,am3352-uart" for AM335x controllers
>  - reg : address and length of the register space
>  - interrupts or interrupts-extended : Should contain the uart interrupt
>                                        specifier or both the interrupt
> diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
> index 21fcc440fc1a..b76f9a2ce05d 100644
> --- a/arch/arm/boot/dts/am33xx.dtsi
> +++ b/arch/arm/boot/dts/am33xx.dtsi
> @@ -210,7 +210,7 @@
>               };
>  
>               uart0: serial@44e09000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart1";
>                       clock-frequency = <48000000>;
>                       reg = <0x44e09000 0x2000>;
> @@ -221,7 +221,7 @@
>               };
>  
>               uart1: serial@48022000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart2";
>                       clock-frequency = <48000000>;
>                       reg = <0x48022000 0x2000>;
> @@ -232,7 +232,7 @@
>               };
>  
>               uart2: serial@48024000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart3";
>                       clock-frequency = <48000000>;
>                       reg = <0x48024000 0x2000>;
> @@ -243,7 +243,7 @@
>               };
>  
>               uart3: serial@481a6000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart4";
>                       clock-frequency = <48000000>;
>                       reg = <0x481a6000 0x2000>;
> @@ -252,7 +252,7 @@
>               };
>  
>               uart4: serial@481a8000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart5";
>                       clock-frequency = <48000000>;
>                       reg = <0x481a8000 0x2000>;
> @@ -261,7 +261,7 @@
>               };
>  
>               uart5: serial@481aa000 {
> -                     compatible = "ti,omap3-uart";
> +                     compatible = "ti,am3352-uart", "ti,omap3-uart";
>                       ti,hwmods = "uart6";
>                       clock-frequency = <48000000>;
>                       reg = <0x481aa000 0x2000>;
> diff --git a/drivers/tty/serial/8250/8250_omap.c 
> b/drivers/tty/serial/8250/8250_omap.c
> index d9c96b993a84..52566387ec37 100644
> --- a/drivers/tty/serial/8250/8250_omap.c
> +++ b/drivers/tty/serial/8250/8250_omap.c
> @@ -16,6 +16,7 @@
>  #include <linux/platform_device.h>
>  #include <linux/slab.h>
>  #include <linux/of.h>
> +#include <linux/of_device.h>
>  #include <linux/of_gpio.h>
>  #include <linux/of_irq.h>
>  #include <linux/delay.h>
> @@ -537,14 +538,14 @@ static void omap_serial_fill_features_erratas(struct 
> uart_8250_port *up,
>  
>       switch (revision) {
>       case OMAP_UART_REV_46:
> -             priv->habit = UART_ERRATA_i202_MDR1_ACCESS;
> +             priv->habit |= UART_ERRATA_i202_MDR1_ACCESS;
>               break;
>       case OMAP_UART_REV_52:
> -             priv->habit = UART_ERRATA_i202_MDR1_ACCESS |
> +             priv->habit |= UART_ERRATA_i202_MDR1_ACCESS |
>                               OMAP_UART_WER_HAS_TX_WAKEUP;
>               break;
>       case OMAP_UART_REV_63:
> -             priv->habit = UART_ERRATA_i202_MDR1_ACCESS |
> +             priv->habit |= UART_ERRATA_i202_MDR1_ACCESS |
>                       OMAP_UART_WER_HAS_TX_WAKEUP;
>               break;
>       default:
> @@ -1061,6 +1062,17 @@ static int omap8250_no_handle_irq(struct uart_port 
> *port)
>       return 0;
>  }
>  
> +static const u8 am3352_habit = OMAP_DMA_TX_KICK;
> +
> +static const struct of_device_id omap8250_dt_ids[] = {
> +     { .compatible = "ti,omap2-uart" },
> +     { .compatible = "ti,omap3-uart" },
> +     { .compatible = "ti,omap4-uart" },
> +     { .compatible = "ti,am3352-uart", .data = &am3352_habit, },
> +     {},
> +};
> +MODULE_DEVICE_TABLE(of, omap8250_dt_ids);
> +
>  static int omap8250_probe(struct platform_device *pdev)
>  {
>       struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -1125,11 +1137,17 @@ static int omap8250_probe(struct platform_device 
> *pdev)
>       up.port.unthrottle = omap_8250_unthrottle;
>  
>       if (pdev->dev.of_node) {
> +             const struct of_device_id *id;
> +
>               ret = of_alias_get_id(pdev->dev.of_node, "serial");
>  
>               of_property_read_u32(pdev->dev.of_node, "clock-frequency",
>                                    &up.port.uartclk);
>               priv->wakeirq = irq_of_parse_and_map(pdev->dev.of_node, 1);
> +
> +             id = of_match_device(of_match_ptr(omap8250_dt_ids), &pdev->dev);
> +             if (id && id->data)
> +                     priv->habit |= *(u8 *)id->data;
>       } else {
>               ret = pdev->id;
>       }
> @@ -1184,9 +1202,6 @@ static int omap8250_probe(struct platform_device *pdev)
>                       priv->omap8250_dma.rx_size = RX_TRIGGER;
>                       priv->omap8250_dma.rxconf.src_maxburst = RX_TRIGGER;
>                       priv->omap8250_dma.txconf.dst_maxburst = TX_TRIGGER;
> -
> -                     if (of_machine_is_compatible("ti,am33xx"))
> -                             priv->habit |= OMAP_DMA_TX_KICK;
>               }
>       }
>  #endif
> @@ -1374,14 +1389,6 @@ static const struct dev_pm_ops omap8250_dev_pm_ops = {
>       .complete       = omap8250_complete,
>  };
>  
> -static const struct of_device_id omap8250_dt_ids[] = {
> -     { .compatible = "ti,omap2-uart" },
> -     { .compatible = "ti,omap3-uart" },
> -     { .compatible = "ti,omap4-uart" },
> -     {},
> -};
> -MODULE_DEVICE_TABLE(of, omap8250_dt_ids);
> -
>  static struct platform_driver omap8250_platform_driver = {
>       .driver = {
>               .name           = "omap8250",
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to