]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
serial: 16550: Add Ingenic JZ4780 support
authorMarek Vasut <marex@denx.de>
Thu, 1 Dec 2016 01:06:31 +0000 (02:06 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 19 Dec 2016 17:26:37 +0000 (12:26 -0500)
Add compatibility string for the Ingenic JZ4780 SoC, the necessary
UART enable bit into FCR and register shift. Neither are encoded
in the DTS coming from Linux, so we need to support it this way.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Tom Rini <trini@konsulko.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/serial/ns16550.c
include/ns16550.h

index 3130a1d16ae4e2258791dbb3fc359c0d94db4997..9b423a591d8a3226db9c456f7738c413e1b6e563 100644 (file)
@@ -363,6 +363,7 @@ int ns16550_serial_probe(struct udevice *dev)
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 enum {
        PORT_NS16550 = 0,
+       PORT_JZ4780,
 };
 #endif
 
@@ -370,6 +371,7 @@ enum {
 int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
 {
        struct ns16550_platdata *plat = dev->platdata;
+       const u32 port_type = dev_get_driver_data(dev);
        fdt_addr_t addr;
        struct clk clk;
        int err;
@@ -439,6 +441,8 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
        }
 
        plat->fcr = UART_FCRVAL;
+       if (port_type == PORT_JZ4780)
+               plat->fcr |= UART_FCR_UME;
 
        return 0;
 }
@@ -461,6 +465,7 @@ const struct dm_serial_ops ns16550_serial_ops = {
 static const struct udevice_id ns16550_serial_ids[] = {
        { .compatible = "ns16550",              .data = PORT_NS16550 },
        { .compatible = "ns16550a",             .data = PORT_NS16550 },
+       { .compatible = "ingenic,jz4780-uart",  .data = PORT_JZ4780  },
        { .compatible = "nvidia,tegra20-uart",  .data = PORT_NS16550 },
        { .compatible = "snps,dw-apb-uart",     .data = PORT_NS16550 },
        { .compatible = "ti,omap2-uart",        .data = PORT_NS16550 },
index 45fd68b65d7f97f620f25fc48503a3f88b6a2871..7c9703683109e8268a8f3301ab2ce12d10486999 100644 (file)
@@ -118,6 +118,9 @@ typedef struct NS16550 *NS16550_t;
 #define UART_FCR_RXSR          0x02 /* Receiver soft reset */
 #define UART_FCR_TXSR          0x04 /* Transmitter soft reset */
 
+/* Ingenic JZ47xx specific UART-enable bit. */
+#define UART_FCR_UME           0x10
+
 /*
  * These are the definitions for the Modem Control Register
  */