[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen/arm: Make hwdom vUART optional feature



commit f8791d0fd3adbda3701e7eb9db63a9351b478365
Author:     Michal Orzel <michal.orzel@xxxxxxx>
AuthorDate: Thu Feb 15 15:39:47 2024 +0100
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Tue Feb 20 13:20:31 2024 +0000

    xen/arm: Make hwdom vUART optional feature
    
    At the moment, the hardware domain vUART is always compiled in. In the
    spirit of fine granular configuration, make it optional so that the
    feature can be disabled if not needed. This UART is not exposed (e.g.
    via device tree) to a domain and is mostly used to support special use
    cases like Linux early printk, prints from the decompressor code, etc.
    
    Introduce Kconfig option CONFIG_HWDOM_VUART, enabled by default (to keep
    the current behavior) and use it to protect the vUART related code.
    Provide stubs for domain_vuart_{init,free}() in case the feature is
    disabled. Take the opportunity to add a struct domain forward declaration
    to vuart.h, so that the header is self contained.
    
    Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
    Acked-by: Julien Grall <jgrall@xxxxxxxxxx>
    Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>
    Tested-by: Luca Fancellu <luca.fancellu@xxxxxxx>
---
 xen/arch/arm/Kconfig              |  8 ++++++++
 xen/arch/arm/Makefile             |  2 +-
 xen/arch/arm/include/asm/domain.h |  2 ++
 xen/arch/arm/vuart.h              | 19 +++++++++++++++++++
 4 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
index 50e9bfae1a..72af329564 100644
--- a/xen/arch/arm/Kconfig
+++ b/xen/arch/arm/Kconfig
@@ -150,6 +150,14 @@ config SBSA_VUART_CONSOLE
          Allows a guest to use SBSA Generic UART as a console. The
          SBSA Generic UART implements a subset of ARM PL011 UART.
 
+config HWDOM_VUART
+       bool "Emulated UART for hardware domain"
+       default y
+       help
+         Allows a hardware domain to use a minimalistic UART (single transmit
+         and status register) which takes information from dtuart. Note that 
this
+         UART is not intended to be exposed (e.g. via device-tree) to a domain.
+
 config ARM_SSBD
        bool "Speculative Store Bypass Disable" if EXPERT
        depends on HAS_ALTERNATIVE
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 33c677672f..7b1350e2ef 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -71,7 +71,7 @@ obj-y += vtimer.o
 obj-$(CONFIG_SBSA_VUART_CONSOLE) += vpl011.o
 obj-y += vsmc.o
 obj-y += vpsci.o
-obj-y += vuart.o
+obj-$(CONFIG_HWDOM_VUART) += vuart.o
 
 extra-y += xen.lds
 
diff --git a/xen/arch/arm/include/asm/domain.h 
b/xen/arch/arm/include/asm/domain.h
index 5fb8cd79c0..8218afb862 100644
--- a/xen/arch/arm/include/asm/domain.h
+++ b/xen/arch/arm/include/asm/domain.h
@@ -91,6 +91,7 @@ struct arch_domain
 
     struct vgic_dist vgic;
 
+#ifdef CONFIG_HWDOM_VUART
     struct vuart {
 #define VUART_BUF_SIZE 128
         char                        *buf;
@@ -98,6 +99,7 @@ struct arch_domain
         const struct vuart_info     *info;
         spinlock_t                  lock;
     } vuart;
+#endif
 
     unsigned int evtchn_irq;
 #ifdef CONFIG_ACPI
diff --git a/xen/arch/arm/vuart.h b/xen/arch/arm/vuart.h
index bd23bd92f6..e90d84c6ed 100644
--- a/xen/arch/arm/vuart.h
+++ b/xen/arch/arm/vuart.h
@@ -20,9 +20,28 @@
 #ifndef __ARCH_ARM_VUART_H__
 #define __ARCH_ARM_VUART_H__
 
+struct domain;
+
+#ifdef CONFIG_HWDOM_VUART
+
 int domain_vuart_init(struct domain *d);
 void domain_vuart_free(struct domain *d);
 
+#else
+
+static inline int domain_vuart_init(struct domain *d)
+{
+    /*
+     * The vUART is unconditionally inialized for the hw domain. So we
+     * can't return an error.
+     */
+    return 0;
+}
+
+static inline void domain_vuart_free(struct domain *d) {};
+
+#endif /* CONFIG_HWDOM_VUART */
+
 #endif /* __ARCH_ARM_VUART_H__ */
 
 /*
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.