[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/common: Move gic_dt_preinit() to common code
commit 2e853c19204e2d660a8becf4b377cc99216854dd Author: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx> AuthorDate: Mon Nov 25 11:34:40 2024 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Nov 25 11:34:40 2024 +0100 xen/common: Move gic_dt_preinit() to common code Introduce intc_dt_preinit() in the common codebase, as it is not architecture-specific and can be reused by both PPC and RISC-V. This function identifies the node with the interrupt-controller property in the device tree and calls device_init() to handle architecture-specific initialization of the interrupt controller. Make minor adjustments compared to the original ARM implementation of gic_dt_preinit(): - Remove the local rc variable in gic_dt_preinit() since it is only used once. - Change the prefix from gic to intc to clarify that the function is not specific to ARMâ??s GIC, making it suitable for other architectures as well. Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx> Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx> --- xen/arch/arm/gic.c | 32 +----------------------------- xen/common/device-tree/Makefile | 1 + xen/common/device-tree/intc.c | 43 +++++++++++++++++++++++++++++++++++++++++ xen/include/xen/device_tree.h | 2 ++ 4 files changed, 47 insertions(+), 31 deletions(-) diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index 3eaf670fd7..acf61a4de3 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -214,36 +214,6 @@ int gic_map_hwdom_extra_mappings(struct domain *d) return 0; } -static void __init gic_dt_preinit(void) -{ - int rc; - struct dt_device_node *node; - uint8_t num_gics = 0; - - dt_for_each_device_node( dt_host, node ) - { - if ( !dt_get_property(node, "interrupt-controller", NULL) ) - continue; - - if ( !dt_get_parent(node) ) - continue; - - rc = device_init(node, DEVICE_INTERRUPT_CONTROLLER, NULL); - if ( !rc ) - { - /* NOTE: Only one GIC is supported */ - num_gics = 1; - break; - } - } - if ( !num_gics ) - panic("Unable to find compatible GIC in the device tree\n"); - - /* Set the GIC as the primary interrupt controller */ - dt_interrupt_controller = node; - dt_device_set_used_by(node, DOMID_XEN); -} - #ifdef CONFIG_ACPI static void __init gic_acpi_preinit(void) { @@ -269,7 +239,7 @@ static void __init gic_acpi_preinit(void) { } void __init gic_preinit(void) { if ( acpi_disabled ) - gic_dt_preinit(); + intc_dt_preinit(); else gic_acpi_preinit(); } diff --git a/xen/common/device-tree/Makefile b/xen/common/device-tree/Makefile index 58052d074e..7c549be38a 100644 --- a/xen/common/device-tree/Makefile +++ b/xen/common/device-tree/Makefile @@ -2,3 +2,4 @@ obj-y += bootfdt.init.o obj-y += bootinfo.init.o obj-y += device-tree.o obj-$(CONFIG_OVERLAY_DTB) += dt-overlay.o +obj-y += intc.o diff --git a/xen/common/device-tree/intc.c b/xen/common/device-tree/intc.c new file mode 100644 index 0000000000..b09fbf6a49 --- /dev/null +++ b/xen/common/device-tree/intc.c @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include <xen/device_tree.h> +#include <xen/init.h> +#include <xen/lib.h> + +void __init intc_dt_preinit(void) +{ + struct dt_device_node *node; + uint8_t num_intc = 0; + + dt_for_each_device_node( dt_host, node ) + { + if ( !dt_get_property(node, "interrupt-controller", NULL) ) + continue; + + if ( !dt_get_parent(node) ) + continue; + + if ( !device_init(node, DEVICE_INTERRUPT_CONTROLLER, NULL) ) + { + /* NOTE: Only one interrupt controller is supported */ + num_intc = 1; + break; + } + } + + if ( !num_intc ) + panic("Unable to find compatible interrupt controller in the device tree\n"); + + /* Set the interrupt controller as the primary interrupt controller */ + dt_interrupt_controller = node; + dt_device_set_used_by(node, DOMID_XEN); +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index e6287305a7..5ff763bb80 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -238,6 +238,8 @@ extern rwlock_t dt_host_lock; struct dt_device_node * dt_find_interrupt_controller(const struct dt_device_match *matches); +void intc_dt_preinit(void); + #define dt_prop_cmp(s1, s2) strcmp((s1), (s2)) #define dt_node_cmp(s1, s2) strcasecmp((s1), (s2)) #define dt_compat_cmp(s1, s2) strcasecmp((s1), (s2)) -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |