Enable dom0less guests on ARM to use console_io hypercalls:
- set input_allow = true for dom0less domains
- update the in-code comment in console.c
- prioritize the VUART check to retain the same behavior as today
Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
---
xen/common/device-tree/dom0less-build.c | 2 ++
xen/drivers/char/console.c | 17 ++++++++++-------
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/xen/common/device-tree/dom0less-build.c b/xen/common/device-tree/dom0less-build.c
index 840d14419d..cb7026fa7e 100644
--- a/xen/common/device-tree/dom0less-build.c
+++ b/xen/common/device-tree/dom0less-build.c
@@ -829,6 +829,8 @@ static int __init construct_domU(struct kernel_info *kinfo,
rangeset_destroy(kinfo->xen_reg_assigned);
+ d->console->input_allowed = true;
+
return rc;
}
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 09354db2e0..26de872b8d 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -612,10 +612,18 @@ static void __serial_rx(char c)
if ( !d )
return;
- if ( is_hardware_domain(d) )
+#ifdef CONFIG_SBSA_VUART_CONSOLE
+ /* Prioritize vpl011 if enabled for this domain */
+ if ( d->arch.vpl011.base_addr )
+ {
+ /* Deliver input to the emulated UART. */
+ rc = vpl011_rx_char_xen(d, c);
+ }
+ else
+#endif
{
/*
- * Deliver input to the hardware domain buffer, unless it is
+ * Deliver input to the focus domain buffer, unless it is
* already full.
*/
nrspin_lock_irq(&console_lock);
@@ -629,11 +637,6 @@ static void __serial_rx(char c)
*/
send_global_virq(VIRQ_CONSOLE);
}
-#ifdef CONFIG_SBSA_VUART_CONSOLE
- else
- /* Deliver input to the emulated UART. */
- rc = vpl011_rx_char_xen(d, c);
-#endif
if ( consoled_is_enabled() )
/* Deliver input to the PV shim console. */
--
2.25.1