[U-Boot] [PATCH 06/14] serial: 16550: Add Ingenic JZ4780 support

Marek Vasut marex at denx.de
Sun Nov 27 18:17:30 CET 2016


On 11/27/2016 06:03 PM, Simon Glass wrote:
> Hi Marex,
> 
> On 25 November 2016 at 15:32, Marek Vasut <marex at denx.de> wrote:
>> 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 at denx.de>
>> Cc: Tom Rini <trini at konsulko.com>
>> Cc: Simon Glass <sjg at chromium.org>
>> Cc: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
>> Cc: Paul Burton <paul.burton at imgtec.com>
>> ---
>>  drivers/serial/ns16550.c | 7 +++++++
>>  include/ns16550.h        | 3 +++
>>  2 files changed, 10 insertions(+)
>>
>> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
>> index 3130a1d..d00161c 100644
>> --- a/drivers/serial/ns16550.c
>> +++ b/drivers/serial/ns16550.c
>> @@ -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,10 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
>>         }
>>
>>         plat->fcr = UART_FCRVAL;
>> +       if (port_type == PORT_JZ4780) {
>> +               plat->fcr |= UART_FCR_UME;
>> +               plat->reg_shift = 2;
> 
> This should be in the device tree, shouldn't it?

Yeah, thanks.

>> +       }
>>
>>         return 0;
>>  }
>> @@ -461,6 +467,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 },
>> diff --git a/include/ns16550.h b/include/ns16550.h
>> index 45fd68b..7c97036 100644
>> --- a/include/ns16550.h
>> +++ b/include/ns16550.h
>> @@ -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
>>   */
>> --
>> 2.10.2
>>
> 
> Regards,
> Simon
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list