[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v1 02/16] arm/vpl011: move DT node parsing to PL011 emulator code
From: Denis Mukhin <dmukhin@xxxxxxxx> Move vpl011 DT node parsing from common Arm code to PL011 emulator code. While doing it pick the generic name vuart_add_fwnode() for DT parser function and place the declaration in the common header in include/xen/vuart.h. No functional change. Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx> --- xen/arch/arm/dom0less-build.c | 52 ++--------------------------------- xen/arch/arm/vpl011.c | 52 +++++++++++++++++++++++++++++++++++ xen/include/xen/vuart.h | 23 ++++++++++++++++ 3 files changed, 77 insertions(+), 50 deletions(-) create mode 100644 xen/include/xen/vuart.h diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c index 2a5531a2b892..7c1b59750fb5 100644 --- a/xen/arch/arm/dom0less-build.c +++ b/xen/arch/arm/dom0less-build.c @@ -15,6 +15,7 @@ #include <xen/static-memory.h> #include <xen/static-shmem.h> #include <xen/vmap.h> +#include <xen/vuart.h> #include <public/bootfdt.h> #include <public/io/xs_wire.h> @@ -167,55 +168,6 @@ int __init make_intc_domU_node(struct kernel_info *kinfo) } } -#ifdef CONFIG_HAS_VUART_PL011 -static int __init make_vpl011_uart_node(struct kernel_info *kinfo) -{ - void *fdt = kinfo->fdt; - int res; - gic_interrupt_t intr; - __be32 reg[GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS]; - __be32 *cells; - struct domain *d = kinfo->d; - - res = domain_fdt_begin_node(fdt, "sbsa-uart", d->arch.vpl011.base_addr); - if ( res ) - return res; - - res = fdt_property_string(fdt, "compatible", "arm,sbsa-uart"); - if ( res ) - return res; - - cells = ®[0]; - dt_child_set_range(&cells, GUEST_ROOT_ADDRESS_CELLS, - GUEST_ROOT_SIZE_CELLS, d->arch.vpl011.base_addr, - GUEST_PL011_SIZE); - - res = fdt_property(fdt, "reg", reg, sizeof(reg)); - if ( res ) - return res; - - set_interrupt(intr, d->arch.vpl011.virq, 0xf, DT_IRQ_TYPE_LEVEL_HIGH); - - res = fdt_property(fdt, "interrupts", intr, sizeof (intr)); - if ( res ) - return res; - - res = fdt_property_cell(fdt, "interrupt-parent", - kinfo->phandle_intc); - if ( res ) - return res; - - /* Use a default baud rate of 115200. */ - fdt_property_u32(fdt, "current-speed", 115200); - - res = fdt_end_node(fdt); - if ( res ) - return res; - - return 0; -} -#endif - int __init make_arch_nodes(struct kernel_info *kinfo) { int ret; @@ -227,7 +179,7 @@ int __init make_arch_nodes(struct kernel_info *kinfo) if ( kinfo->arch.vpl011 ) { #ifdef CONFIG_HAS_VUART_PL011 - ret = make_vpl011_uart_node(kinfo); + ret = vuart_add_fwnode(kinfo->d, kinfo); #endif if ( ret ) return -EINVAL; diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c index 480fc664fc62..cafc532cf028 100644 --- a/xen/arch/arm/vpl011.c +++ b/xen/arch/arm/vpl011.c @@ -12,15 +12,20 @@ #include <xen/errno.h> #include <xen/event.h> +#include <xen/device_tree.h> #include <xen/guest_access.h> #include <xen/init.h> #include <xen/lib.h> +#include <xen/libfdt/libfdt.h> #include <xen/mm.h> #include <xen/sched.h> #include <xen/console.h> #include <xen/serial.h> +#include <xen/vuart.h> #include <public/domctl.h> #include <public/io/console.h> +#include <asm/domain_build.h> +#include <asm/kernel.h> #include <asm/pl011-uart.h> #include <asm/vgic-emul.h> #include <asm/vpl011.h> @@ -784,6 +789,53 @@ void domain_vpl011_deinit(struct domain *d) XFREE(vpl011->backend.xen); } +int __init vuart_add_fwnode(struct domain *d, void *node) +{ + struct kernel_info *kinfo = node; + void *fdt = kinfo->fdt; + int res; + gic_interrupt_t intr; + __be32 reg[GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS]; + __be32 *cells; + + res = domain_fdt_begin_node(fdt, "sbsa-uart", d->arch.vpl011.base_addr); + if ( res ) + return res; + + res = fdt_property_string(fdt, "compatible", "arm,sbsa-uart"); + if ( res ) + return res; + + cells = ®[0]; + dt_child_set_range(&cells, GUEST_ROOT_ADDRESS_CELLS, + GUEST_ROOT_SIZE_CELLS, d->arch.vpl011.base_addr, + GUEST_PL011_SIZE); + + res = fdt_property(fdt, "reg", reg, sizeof(reg)); + if ( res ) + return res; + + set_interrupt(intr, d->arch.vpl011.virq, 0xf, DT_IRQ_TYPE_LEVEL_HIGH); + + res = fdt_property(fdt, "interrupts", intr, sizeof (intr)); + if ( res ) + return res; + + res = fdt_property_cell(fdt, "interrupt-parent", + kinfo->phandle_intc); + if ( res ) + return res; + + /* Use a default baud rate of 115200. */ + fdt_property_u32(fdt, "current-speed", 115200); + + res = fdt_end_node(fdt); + if ( res ) + return res; + + return 0; +} + /* * Local variables: * mode: C diff --git a/xen/include/xen/vuart.h b/xen/include/xen/vuart.h new file mode 100644 index 000000000000..bb883823ea31 --- /dev/null +++ b/xen/include/xen/vuart.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef XEN_VUART_H +#define XEN_VUART_H + +#ifdef CONFIG_HAS_VUART_PL011 +int __init vuart_add_fwnode(struct domain *d, void *node); +#else +static inline int __init vuart_add_fwnode(struct domain *d, void *node) +{ + return 0; +} +#endif + +#endif /* XEN_VUART_H */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |