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

Re: [Xen-devel] [PATCH 4/4] dt-uart: support /chosen/stdout-path property.



Hi Ian,

On 07/01/15 15:31, Ian Campbell wrote:
> ePAPR v1.1 section 3.5 defines the /chosen/stdout-path property to
> refer to the device to be used for boot console output, so if no
> dtuart property is given try to use that instead. This will make Xen
> find a suitable console by default on DT platforms which include this
> property.
> 
> As it happens the dtuart option has the exact same syntax as
> stdout-path, so we can just copy the value into that buffer if it is
> empty.
> 
> FWIW support for this was added to Linux in v3.19-rc1 (7914a7c5651a
> "of: support passing console options with stdout-path") and a fairly
> large number of the dts files shipped with Linux have already included
> a stdout-path property for quite a while now.
> 
> Since there is a base of existing device trees with the property, we
> do not support the legacy ',' options separator so we remain
> compatible.
> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
>  xen/arch/arm/domain_build.c |    2 ++
>  xen/drivers/char/dt-uart.c  |   29 +++++++++++++++++++++++++++--
>  2 files changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index de180d8..c33a73c 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -424,6 +424,7 @@ static int write_properties(struct domain *d, struct 
> kernel_info *kinfo,
>           *   bootargs (from module #1, above).
>           * * remove bootargs,  xen,dom0-bootargs, xen,xen-bootargs,
>           *   linux,initrd-start and linux,initrd-end.
> +         * * remove stdout-path.
>           * * remove bootargs, linux,uefi-system-table,
>           *   linux,uefi-mmap-start, linux,uefi-mmap-size,
>           *   linux,uefi-mmap-desc-size, and linux,uefi-mmap-desc-ver
> @@ -434,6 +435,7 @@ static int write_properties(struct domain *d, struct 
> kernel_info *kinfo,
>              if ( dt_property_name_is_equal(prop, "xen,xen-bootargs") ||
>                   dt_property_name_is_equal(prop, "linux,initrd-start") ||
>                   dt_property_name_is_equal(prop, "linux,initrd-end") ||
> +                 dt_property_name_is_equal(prop, "stdout-path") ||
>                   dt_property_name_is_equal(prop, "linux,uefi-system-table") 
> ||
>                   dt_property_name_is_equal(prop, "linux,uefi-mmap-start") ||
>                   dt_property_name_is_equal(prop, "linux,uefi-mmap-size") ||
> diff --git a/xen/drivers/char/dt-uart.c b/xen/drivers/char/dt-uart.c
> index 54e65fc..08b0d76 100644
> --- a/xen/drivers/char/dt-uart.c
> +++ b/xen/drivers/char/dt-uart.c
> @@ -22,6 +22,7 @@
>  #include <xen/console.h>
>  #include <xen/device_tree.h>
>  #include <xen/serial.h>
> +#include <xen/errno.h>
>  
>  /*
>   * Configure UART port with a string:
> @@ -38,7 +39,7 @@ void __init dt_uart_init(void)
>  {
>      struct dt_device_node *dev;
>      int ret;
> -    const char *devpath = opt_dtuart;
> +    const char *devpath = opt_dtuart, *stdout = NULL;
>      char *options;
>  
>      if ( !console_has("dtuart") )
> @@ -46,12 +47,36 @@ void __init dt_uart_init(void)
>  
>      if ( !strcmp(opt_dtuart, "") )
>      {
> +        struct dt_device_node *chosen = dt_find_node_by_path("/chosen");

const struct dt_device_node *chosen

> +
> +        if ( chosen )
> +        {
> +            ret = dt_property_read_string(chosen, "stdout-path", &stdout);
> +            if ( ret >= 0 )
> +            {
> +                printk("Taking dtuart configuration from 
> /chosen/stdout-path\n");
> +                strlcpy(opt_dtuart, stdout, sizeof(opt_dtuart));

The final string in opt_dtuart may be truncated if stdout is bigger than
255 characters.

I would add a check to avoid hours of debugging later.

Regards,

-- 
Julien Grall

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