[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm: Make hwdom vUART optional feature
Hi Julien, On 15/02/2024 17:05, Julien Grall wrote: > > > Hi Michal, > > On 15/02/2024 14:39, Michal Orzel wrote: >> 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> >> --- >> xen/arch/arm/Kconfig | 8 ++++++++ >> xen/arch/arm/Makefile | 2 +- >> xen/arch/arm/include/asm/domain.h | 2 ++ >> xen/arch/arm/vuart.h | 15 +++++++++++++++ >> 4 files changed, 26 insertions(+), 1 deletion(-) >> >> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig >> index 50e9bfae1ac8..72af329564b7 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 33c677672fe6..7b1350e2ef0a 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 5fb8cd79c01a..8218afb8626a 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 bd23bd92f631..36658b4a8c7f 100644 >> --- a/xen/arch/arm/vuart.h >> +++ b/xen/arch/arm/vuart.h >> @@ -20,9 +20,24 @@ >> #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) >> +{ >> + return 0; > > NIT: I was going to query why we return 0 rather than -EOPNOSUPP. But it > looks like this is because domain_vuart_init() is unconditionally called > for the hardware domain. This is unusual and would be worth adding a > comment. > > In any case, > > Acked-by: Julien Grall <jgrall@xxxxxxxxxx> Thanks. If you want to add a comment, feel free to do in on commit. ~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |