[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V2 20/33] xen/arm: Add generic UART to get the device in the device tree



On Wed, 2013-05-08 at 16:58 +0100, Julien Grall wrote:
> On 05/08/2013 03:01 PM, Ian Campbell wrote:
> 
> > On Wed, 2013-05-08 at 03:33 +0100, Julien Grall wrote:
> >> This generic UART will find the right UART via xen command line
> >> with dtuart=myserial.
> > 
> > I suppose there way to determine sensible default, since it differs on
> > every platform?
> > 
> >> "myserial" is the alias of the UART in the device tree. Xen will retrieve
> >> the information via the device tree and call the initialization function 
> >> for
> >> this specific UART thanks to the device API.
> >>
> >> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> > 
> > You need to CC code code maintainers when you change core code. Keir
> > added.
> >>
> >> Changes in v2:
> >>     - Use dtuart parameter instead of com1. The first one is more arm
> >>     while the latter is more x86
> >> ---
> >>  xen/arch/arm/setup.c         |    3 +-
> >>  xen/drivers/char/Makefile    |    1 +
> >>  xen/drivers/char/arm-uart.c  |   81 
> >> ++++++++++++++++++++++++++++++++++++++++++
> >>  xen/drivers/char/serial.c    |    6 ++++
> >>  xen/include/asm-arm/config.h |    2 +-
> >>  xen/include/xen/serial.h     |    7 ++++
> >>  6 files changed, 98 insertions(+), 2 deletions(-)
> >>  create mode 100644 xen/drivers/char/arm-uart.c
> >>
> >> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> >> index e4228f7..7b2df8b 100644
> >> --- a/xen/arch/arm/setup.c
> >> +++ b/xen/arch/arm/setup.c
> >> @@ -435,8 +435,9 @@ void __init start_xen(unsigned long boot_phys_offset,
> >>  #ifdef EARLY_UART_ADDRESS
> >>      /* TODO Need to get device tree or command line for UART address */
> >>      pl011_init(0, FIXMAP_ADDR(FIXMAP_CONSOLE));
> >> -    console_init_preirq();
> >>  #endif
> >> +    arm_uart_init();
> >> +    console_init_preirq();
> >>  
> >>      /* FIXME: Do something smarter */
> >>      dt_switch_to_printk();
> >> diff --git a/xen/drivers/char/Makefile b/xen/drivers/char/Makefile
> >> index ab2246d..e68a54a 100644
> >> --- a/xen/drivers/char/Makefile
> >> +++ b/xen/drivers/char/Makefile
> >> @@ -2,4 +2,5 @@ obj-y += console.o
> >>  obj-$(HAS_NS16550) += ns16550.o
> >>  obj-$(HAS_PL011) += pl011.o
> >>  obj-$(HAS_EHCI) += ehci-dbgp.o
> >> +obj-$(CONFIG_ARM) += arm-uart.o
> >>  obj-y += serial.o
> >> diff --git a/xen/drivers/char/arm-uart.c b/xen/drivers/char/arm-uart.c
> >> new file mode 100644
> >> index 0000000..c76875e
> >> --- /dev/null
> >> +++ b/xen/drivers/char/arm-uart.c
> >> @@ -0,0 +1,81 @@
> >> +/*
> >> + * xen/drivers/char/arm-uart.c
> >> + *
> >> + * Generic ARM uart retrieved via the device tree
> >> + *
> >> + * Julien Grall <julien.grall@xxxxxxxxxx>
> >> + * Copyright (c) 2013 Linaro Limited.
> >> + *
> >> + * This program is free software; you can redistribute it and/or modify
> >> + * it under the terms of the GNU General Public License as published by
> >> + * the Free Software Foundation; either version 2 of the License, or
> >> + * (at your option) any later version.
> >> + *
> >> + * This program is distributed in the hope that it will be useful,
> >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >> + * GNU General Public License for more details.
> >> + */
> >> +
> >> +#include <asm/device.h>
> >> +#include <asm/early_printk.h>
> >> +#include <asm/types.h>
> >> +#include <xen/console.h>
> >> +#include <xen/device_tree.h>
> >> +#include <xen/mm.h>
> >> +#include <xen/serial.h>
> >> +
> >> +/*
> >> + * Configure UART port with a string:
> >> + * alias
> >> + *
> >> + * @alias: alias used in the device tree for the UART
> >> + * TODO: Implement config  in each UART driver.
> >> + */
> >> +static char __initdata opt_dtuart[30] = "";
> >> +string_param("dtuart", opt_dtuart);
> >> +
> >> +void __init arm_uart_init(void)
> > 
> > This (and the file and struct serial_arm_defaults etc) could perhaps be
> > better called dt_uart_init etc? There's nothing inherently ARM specific
> > here.
> 
> The FIXMAP_CONSOLE is ARM specific it can not works on x86. I'm
> wondering if it's usefull to move FIXMAP_CONSOLE on each UART driver.

I think I came to the same conclusion later in the series too, or more
likely the uart drivers should use ioremap.

> >> +    if ( !strncmp(conf, "dtuart", 5) )
> >> +    {
> >> +        handle = SERHND_COM1;
> > 
> > Do you mean COM1 here? Or did you intend to add SERHND_DT?
> 
> I mean COM1, I use the first serial slot for dtuart. I don't really see
> why we need to extend the number of serial slot.

I just dislike using things with one name for another purpose.

Ultimately this bit is up to Keir though.

Ian.



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.