[U-Boot] [PATCH 1/2] serial: dcc: Move driver to DM
Simon Glass
sjg at chromium.org
Fri Feb 19 21:55:15 CET 2016
Hi Michal,
On 18 February 2016 at 09:01, Michal Simek <michal.simek at xilinx.com> wrote:
> Enabling this driver requires some DT changes.
> Adding DCC to root or main bus:
> dcc: dcc {
> compatible = "arm,dcc";
> u-boot,dm-pre-reloc;
> };
>
> Extend alias list to link DCC:
> serial0 = &uart0;
> serial1 = &uart1;
> serial2 = &dcc;
>
> Change stdout-path to point to dcc port.
> stdout-path = "serial2:115200n8";
>
> Also add support for debug uart to help with early debug.
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
> drivers/serial/Kconfig | 5 ++++
> drivers/serial/arm_dcc.c | 63 +++++++++++++++++++++++++++++-------------------
> 2 files changed, 43 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index fac317610e2a..7c18a6218b1f 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -119,6 +119,11 @@ config DEBUG_UART_UARTLITE
> You will need to provide parameters to make this work. The driver will
> be available until the real driver-model serial is running.
>
> +config DEBUG_UART_ARM_DCC
> + bool "ARM DCC"
> + help
> + Select this to enable a debug UART using the ARM DCC port.
Can you please expand this - what is DCC? What parts support it? What is it for?
> +
> config DEBUG_UART_ZYNQ
> bool "Xilinx Zynq"
> help
> diff --git a/drivers/serial/arm_dcc.c b/drivers/serial/arm_dcc.c
> index 4624666e8a2c..07981e18ee49 100644
> --- a/drivers/serial/arm_dcc.c
> +++ b/drivers/serial/arm_dcc.c
> @@ -1,6 +1,7 @@
> /*
> * Copyright (C) 2004-2007 ARM Limited.
> * Copyright (C) 2008 Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> + * Copyright (C) 2015 - 2016 Xilinx, Inc, Michal Simek
> *
> * SPDX-License-Identifier: GPL-2.0
> *
> @@ -16,6 +17,7 @@
> */
>
> #include <common.h>
> +#include <dm.h>
> #include <serial.h>
>
> #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V7)
> @@ -94,12 +96,7 @@
>
> #define TIMEOUT_COUNT 0x4000000
>
> -static int arm_dcc_init(void)
> -{
> - return 0;
> -}
> -
> -static int arm_dcc_getc(void)
> +static int arm_dcc_getc(struct udevice *dev)
> {
> int ch;
> register unsigned int reg;
> @@ -112,7 +109,7 @@ static int arm_dcc_getc(void)
> return ch;
> }
>
> -static void arm_dcc_putc(char ch)
> +static int arm_dcc_putc(struct udevice *dev, char ch)
> {
> register unsigned int reg;
> unsigned int timeout_count = TIMEOUT_COUNT;
> @@ -123,41 +120,57 @@ static void arm_dcc_putc(char ch)
> break;
> }
> if (timeout_count == 0)
> - return;
> + return -EAGAIN;
> else
> write_dcc(ch);
> +
> + return 0;
> }
>
> -static int arm_dcc_tstc(void)
> +static int arm_dcc_pending(struct udevice *dev, bool input)
> {
> register unsigned int reg;
>
> - can_read_dcc(reg);
> + if (input) {
Don't need the {} here
> + can_read_dcc(reg);
> + } else {
> + can_write_dcc(reg);
> + }
>
> return reg;
> }
>
> -static void arm_dcc_setbrg(void)
> -{
> -}
> +static const struct dm_serial_ops arm_dcc_ops = {
> + .putc = arm_dcc_putc,
> + .pending = arm_dcc_pending,
> + .getc = arm_dcc_getc,
> +};
> +
> +static const struct udevice_id arm_dcc_ids[] = {
> + { .compatible = "arm,dcc", },
> + { }
> +};
>
> -static struct serial_device arm_dcc_drv = {
> +U_BOOT_DRIVER(serial_dcc) = {
> .name = "arm_dcc",
> - .start = arm_dcc_init,
> - .stop = NULL,
> - .setbrg = arm_dcc_setbrg,
> - .putc = arm_dcc_putc,
> - .puts = default_serial_puts,
> - .getc = arm_dcc_getc,
> - .tstc = arm_dcc_tstc,
> + .id = UCLASS_SERIAL,
> + .of_match = arm_dcc_ids,
> + .ops = &arm_dcc_ops,
> + .flags = DM_FLAG_PRE_RELOC,
> };
>
> -void arm_dcc_initialize(void)
> +#ifdef CONFIG_DEBUG_UART_ARM_DCC
> +
> +#include <debug_uart.h>
> +
> +static inline void _debug_uart_init(void)
> {
> - serial_register(&arm_dcc_drv);
> }
>
> -__weak struct serial_device *default_serial_console(void)
> +static inline void _debug_uart_putc(int ch)
> {
> - return &arm_dcc_drv;
> + arm_dcc_putc(NULL, ch);
> }
> +
> +DEBUG_UART_FUNCS
> +#endif
> --
> 1.9.1
>
Regards,
Simon
More information about the U-Boot
mailing list