|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |