summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2018-06-13 11:02:33 +0800
committerPeng Fan <peng.fan@nxp.com>2018-06-13 11:02:33 +0800
commitb41475b83c8d7c83bd6069f4fea05d3405e81e50 (patch)
tree9c32c11bcf2b1146699a3e76c12c59cbce32be06
parent8836c3104a1edfe542e0c1cef6690bc9d3d842a0 (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/Kconfig6
-rw-r--r--drivers/serial/Makefile1
-rw-r--r--drivers/serial/serial.c2
-rw-r--r--drivers/serial/serial_xen.c70
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