summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJi Luo <ji.luo@nxp.com>2019-03-12 16:15:54 +0800
committerPeng Fan <peng.fan@nxp.com>2020-05-27 15:37:55 +0800
commit34b5b76b42226a2dcb2962f8a52ae581d6d24fb6 (patch)
treee07dab7f1301557826666790b9d8607cc16b5b86
parent5b27f2dca5390fd9ef042bc62946d7daab22dd3a (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> (cherry picked from commit 30beee3fe6d4b35166c6e17203909231d33bc2db) (cherry picked from commit a4ffa905d90d14ccdd146e4b38a69d40a568b747) (cherry picked from commit 4729a057e8ad699ec01357dd219abdf296afe354)
-rw-r--r--drivers/serial/serial.c2
-rw-r--r--drivers/serial/serial_xen.c45
-rw-r--r--include/configs/imx8qm_mek_android_auto_xen.h20
3 files changed, 61 insertions, 6 deletions
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index 193fcc3b78..ecc24716e4 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -121,6 +121,7 @@ serial_initfunc(atmel_serial_initialize);
serial_initfunc(mcf_serial_initialize);
serial_initfunc(mpc85xx_serial_initialize);
serial_initfunc(mxc_serial_initialize);
+serial_initfunc(xen_serial_initialize);
serial_initfunc(ns16550_serial_initialize);
serial_initfunc(pl01x_serial_initialize);
serial_initfunc(pxa_serial_initialize);
@@ -176,6 +177,7 @@ void serial_initialize(void)
mcf_serial_initialize();
mpc85xx_serial_initialize();
mxc_serial_initialize();
+ xen_serial_initialize();
ns16550_serial_initialize();
pl01x_serial_initialize();
pxa_serial_initialize();
diff --git a/drivers/serial/serial_xen.c b/drivers/serial/serial_xen.c
index 416d0ac191..5ec490d370 100644
--- a/drivers/serial/serial_xen.c
+++ b/drivers/serial/serial_xen.c
@@ -22,7 +22,7 @@
DECLARE_GLOBAL_DATA_PTR;
-#ifdef CONFIG_DM_SERIAL
+#if CONFIG_IS_ENABLED(DM_SERIAL)
struct xen_uart_priv {
struct xencons_interface *intf;
u32 evtchn;
@@ -149,7 +149,7 @@ static int write_console(struct udevice *dev, const char *data, int len)
static int xen_serial_puts(struct udevice *dev, const char *str)
{
#ifdef CONFIG_SPL_BUILD
- (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(str), str);
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(str), (char *)str);
#else
write_console(dev, str, strlen(str));
#endif
@@ -160,7 +160,7 @@ static int xen_serial_puts(struct udevice *dev, const char *str)
static int xen_serial_putc(struct udevice *dev, const char ch)
{
#ifdef CONFIG_SPL_BUILD
- (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, &ch);
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, (char *)&ch);
#else
write_console(dev, &ch, 1);
#endif
@@ -190,9 +190,44 @@ U_BOOT_DRIVER(serial_xen) = {
.flags = DM_FLAG_PRE_RELOC | DM_FLAG_IGNORE_DEFAULT_CLKS,
};
#else
+static void xen_serial_putc(const char c)
+{
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, (char *)&c);
+}
+
+static void xen_serial_puts(const char *str)
+{
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, strlen(str), (char *)str);
+}
+
+static int xen_serial_tstc(void)
+{
+ return 0;
+}
+
+static int xen_serial_init(void)
+{
+ return 0;
+}
+
+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
@@ -208,7 +243,7 @@ void _debug_uart_putc(int ch)
if (ch == '\n')
serial_putc('\r');
- (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, &ch);
+ (void)HYPERVISOR_console_io(CONSOLEIO_write, 1, (char *)&ch);
return;
}
diff --git a/include/configs/imx8qm_mek_android_auto_xen.h b/include/configs/imx8qm_mek_android_auto_xen.h
index 2fdff1fc80..68f8eb86a0 100644
--- a/include/configs/imx8qm_mek_android_auto_xen.h
+++ b/include/configs/imx8qm_mek_android_auto_xen.h
@@ -24,7 +24,7 @@
#undef CONFIG_LOADADDR
#define CONFIG_LOADADDR 0x80080000
#undef CONFIG_SYS_INIT_SP_ADDR
-#define CONFIG_SYS_INIT_SP_ADDR 0x80200000
+#define CONFIG_SYS_INIT_SP_ADDR 0x81200000
#undef CONFIG_REQUIRE_SERIAL_CONSOLE
#undef CONFIG_IMX_SMMU
@@ -35,4 +35,22 @@
/* This needs to be stay same in iomem in domu.cfg */
#define SC_IPC_CH 0x5d1d0000
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_SPL_BSS_START_ADDR
+#undef CONFIG_SYS_SPL_MALLOC_START
+#undef CONFIG_MALLOC_F_ADDR
+#undef CONFIG_SPL_TEXT_BASE
+#undef CONFIG_SPL_STACK
+
+#define CONFIG_SPL_TEXT_BASE 0x80080000
+#define CONFIG_MALLOC_F_ADDR 0x80100000
+#define CONFIG_SYS_SPL_MALLOC_START 0x80200000
+#define CONFIG_SPL_BSS_START_ADDR 0x80300000
+#define CONFIG_SPL_STACK 0x80400000
+
+#define CONFIG_SYS_SPL_PTE_RAM_BASE 0x80500000
+#endif
+
+#define AVB_AB_I_UNDERSTAND_LIBAVB_AB_IS_DEPRECATED
+
#endif /* IMX8QM_MEK_ANDROID_AUTO_XEN_H */