diff options
author | Peng Fan <peng.fan@nxp.com> | 2018-06-13 11:02:33 +0800 |
---|---|---|
committer | Peng Fan <peng.fan@nxp.com> | 2018-06-13 11:02:33 +0800 |
commit | b41475b83c8d7c83bd6069f4fea05d3405e81e50 (patch) | |
tree | 9c32c11bcf2b1146699a3e76c12c59cbce32be06 | |
parent | 8836c3104a1edfe542e0c1cef6690bc9d3d842a0 (diff) |
MLK-18577-4 serial: add simple xen debug output
Add simple debug output when uboot runs in a VM.
Needs DM_SERIAL disabled, and XEN_DEBUG_SERIAL enabled.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
-rw-r--r-- | drivers/serial/Kconfig | 6 | ||||
-rw-r--r-- | drivers/serial/Makefile | 1 | ||||
-rw-r--r-- | drivers/serial/serial.c | 2 | ||||
-rw-r--r-- | drivers/serial/serial_xen.c | 70 |
4 files changed, 79 insertions, 0 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index b11f3ff89eb..6140c4b7613 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -413,4 +413,10 @@ config PXA_SERIAL If you have a machine based on a Marvell XScale PXA2xx CPU you can enable its onboard serial ports by enabling this option. +config XEN_DEBUG_SERIAL + bool "XEN debug serial support" + depends on XEN + help + This is not pv console, it needs CONFIG_VERBOSE_DEBUG in XEN. + endmenu diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 8430668bf98..290030fe3ab 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -46,6 +46,7 @@ obj-$(CONFIG_STM32X7_SERIAL) += serial_stm32x7.o obj-$(CONFIG_BCM283X_MU_SERIAL) += serial_bcm283x_mu.o obj-$(CONFIG_MSM_SERIAL) += serial_msm.o obj-$(CONFIG_MVEBU_A3700_UART) += serial_mvebu_a3700.o +obj-$(CONFIG_XEN_DEBUG_SERIAL) += serial_xen.o ifndef CONFIG_SPL_BUILD obj-$(CONFIG_USB_TTY) += usbtty.o diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index f1bd15b002d..69809a9f02f 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -154,6 +154,7 @@ serial_initfunc(sconsole_serial_initialize); serial_initfunc(sh_serial_initialize); serial_initfunc(stm32_serial_initialize); serial_initfunc(uartlite_serial_initialize); +serial_initfunc(xen_debug_serial_initialize); serial_initfunc(zynq_serial_initialize); /** @@ -245,6 +246,7 @@ void serial_initialize(void) sh_serial_initialize(); stm32_serial_initialize(); uartlite_serial_initialize(); + xen_debug_serial_initialize(); zynq_serial_initialize(); serial_assign(default_serial_console()->name); diff --git a/drivers/serial/serial_xen.c b/drivers/serial/serial_xen.c new file mode 100644 index 00000000000..ce0c36319b5 --- /dev/null +++ b/drivers/serial/serial_xen.c @@ -0,0 +1,70 @@ +/* + * Copyright 2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <dm.h> +#include <errno.h> +#include <serial.h> + +extern void xenprintf(const char *buf); +extern void xenprintc(const char c); +#ifndef CONFIG_DM_SERIAL + +static void xen_debug_serial_putc(const char c) +{ + /* If \n, also do \r */ + if (c == '\n') + serial_putc('\r'); + + xenprintc(c); +} + +static void xen_debug_serial_puts(const char *buf) +{ + xenprintf(buf); +} + +static int xen_debug_serial_start(void) +{ + return 0; +} + +static void xen_debug_serial_setbrg(void) +{ + +} + +static int xen_debug_serial_getc(void) +{ + return 0; +} + +static int xen_debug_serial_tstc(void) +{ + return 0; +} + +static struct serial_device xen_debug_serial_drv = { + .name = "xen_debug_serial", + .start = xen_debug_serial_start, + .stop = NULL, + .setbrg = xen_debug_serial_setbrg, + .putc = xen_debug_serial_putc, + .puts = xen_debug_serial_puts, + .getc = xen_debug_serial_getc, + .tstc = xen_debug_serial_tstc, +}; + +void xen_debug_serial_initialize(void) +{ + serial_register(&xen_debug_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &xen_debug_serial_drv; +} +#endif |