summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJi Luo <ji.luo@nxp.com>2019-03-12 16:15:54 +0800
committerJi Luo <ji.luo@nxp.com>2019-03-12 17:31:09 +0800
commit30beee3fe6d4b35166c6e17203909231d33bc2db (patch)
tree99cf66d3514ff58785db17556f322e40d21838df /drivers
parent6c5a2fc34ba08eb4c990ee9044fc1dfd9ecbd04f (diff)
MA-14318-1 Support dual bootloader for xen
Trusty is not supported for xen so we don't need to check the keyslot package or rollback index in spl. Reassign the dram address for spl and u-boot to avoid conflicts. Support serial init functions to enable debug console in spl when xen is running. Test: Boot and A/B slot switch on imx8qm_mek. Change-Id: If6829252f1ec2e32255f951715c8747181951fd0 Signed-off-by: Ji Luo <ji.luo@nxp.com> Reviewed-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/serial/serial.c2
-rw-r--r--drivers/serial/serial_xen.c36
2 files changed, 37 insertions, 1 deletions
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index 1ef27ca4b2..6c9c58e8f5 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -136,6 +136,7 @@ serial_initfunc(ml2_serial_initialize);
serial_initfunc(mpc85xx_serial_initialize);
serial_initfunc(mpc8xx_serial_initialize);
serial_initfunc(mxc_serial_initialize);
+serial_initfunc(xen_serial_initialize);
serial_initfunc(serial_lpuart_initialize);
serial_initfunc(mxs_auart_initialize);
serial_initfunc(ns16550_serial_initialize);
@@ -225,6 +226,7 @@ void serial_initialize(void)
mpc85xx_serial_initialize();
mpc8xx_serial_initialize();
mxc_serial_initialize();
+ xen_serial_initialize();
serial_lpuart_initialize();
mxs_auart_initialize();
ns16550_serial_initialize();
diff --git a/drivers/serial/serial_xen.c b/drivers/serial/serial_xen.c
index 52b2c120ab..f20765c306 100644
--- a/drivers/serial/serial_xen.c
+++ b/drivers/serial/serial_xen.c
@@ -182,9 +182,43 @@ U_BOOT_DRIVER(serial_xen) = {
.flags = DM_FLAG_PRE_RELOC,
};
#else
+static void xen_serial_putc(const char c)
+{
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, &c);
+}
+
+static void xen_serial_puts(const char *str)
+{
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(str), str);
+}
+
+static int xen_serial_tstc(void)
+{
+ return 0;
+}
+
+static int xen_serial_init(void)
+{
+}
+
+static void xen_serial_setbrg(void)
+{
+}
+
+static struct serial_device xen_serial_drv = {
+ .name = "xen_serial",
+ .start = xen_serial_init,
+ .stop = NULL,
+ .setbrg = xen_serial_setbrg,
+ .getc = NULL,
+ .putc = xen_serial_putc,
+ .puts = xen_serial_puts,
+ .tstc = xen_serial_tstc,
+};
+
__weak struct serial_device *default_serial_console(void)
{
- return NULL;
+ return &xen_serial_drv;
}
#endif