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

Re: [Xen-devel] [RFC 18/29] xen/arm: add generic UART to get the device in the device tree



On Mon, 2013-04-29 at 18:24 +0100, Julien Grall wrote:
> On 04/29/2013 04:51 PM, Ian Campbell wrote:
> 
> > On Mon, 2013-04-29 at 00:02 +0100, Julien Grall wrote:
> >> This generic UART will find the right UART via xen command line
> >> with com1=myserial.
> >>
> >> "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>
> >> ---
> >>  xen/arch/arm/setup.c        |    3 +-
> >>  xen/drivers/char/Makefile   |    1 +
> >>  xen/drivers/char/arm-uart.c |   76 
> >> +++++++++++++++++++++++++++++++++++++++++++
> >>  xen/include/xen/serial.h    |    8 +++++
> >>  4 files changed, 87 insertions(+), 1 deletion(-)
> >>  create mode 100644 xen/drivers/char/arm-uart.c
> >>
> >> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> >> index 51f4bba..e5d8724 100644
> >> --- a/xen/arch/arm/setup.c
> >> +++ b/xen/arch/arm/setup.c
> >> @@ -434,8 +434,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..e242ae2
> >> --- /dev/null
> >> +++ b/xen/drivers/char/arm-uart.c
> >> @@ -0,0 +1,76 @@
> >> +/*
> >> + * 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 serial port with string: devname
> >> + * Where devname is the alias of the device in the device tree
> >> + */
> >> +static char __initdata opt_com1[30] = "";
> >> +string_param("com1", opt_com1);
> > 
> > com1 is a bit of an x86-ism. Can we use e.g. uart0 or does common code
> > constrain us here?
> 
> >
> 
> > Better would be to arrange things such that console=myserial does the
> > lookup. Then myserial=<foo> sets options for that device.
> > 
> > I think you would need to add a call to dt_console_init to
> > console_init_preirq(), in the "Where should console output go?" loop.
> 
> 
> I don't see an easy solution with dt_console_init.
> serial_parse_handle hardcodes the name of the serial, which only
> supports com1, com2, dbgp. Sadly, the serial initialization is made in
> the same function.

Couldn't it also hardcode a call to a "is this a dt serial alias"
function?

> If I understand your suggestion, you suggest to use console=myserial
> where *myserial* is the alias on the DTB, right?

Right.

> In this case the name could clash with the hardcoded ones in Xen that is not 
> good.

console=dt:<alias> ? Or to be honest I'm not sure that having the dt
aliases shadow the Xen hardcoded ones would be a bad thing -- the x86
centric com<X> definition hardcoded in Xen is hardly likely to be useful
on ARM or any DT using platform.

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®.