|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1] xen/common: move gic_preinit() to common code
On 29.10.2024 17:47, Oleksii Kurochko wrote:
> --- a/xen/common/device.c
> +++ b/xen/common/device.c
> @@ -4,10 +4,14 @@
> * xen/arch/arm/device.c
> */
>
> +#include <xen/acpi.h>
> #include <xen/bug.h>
> #include <xen/device_tree.h>
> #include <xen/errno.h>
> #include <xen/init.h>
> +#include <xen/kernel.h>
> +#include <xen/lib.h>
> +#include <xen/types.h>
I don't think non-ACPI configs should include xen/acpi.h here. Surely this
can be moved down into the ACPI-only code section?
> @@ -56,6 +60,40 @@ enum device_class device_get_class(const struct
> dt_device_node *dev)
> return DEVICE_UNKNOWN;
> }
>
> +static void __init ic_dt_preinit(void)
> +{
> + 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;
> +
> + if ( !device_init(node, DEVICE_INTERRUPT_CONTROLLER, NULL) )
> + {
> + /* NOTE: Only one GIC is supported */
> + num_gics = 1;
> + break;
> + }
> + }
> +
> + if ( !num_gics )
> + panic("Unable to find compatible interrupt contoller"
> + "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);
> +}
> +
> +#else /* !CONFIG_HAS_DEVICE_TREE */
> +
> +static void __init ic_dt_preinit(void) { }
> +
> #endif
While for DT I can only guess that the IC is common across platforms, ...
> @@ -79,4 +117,31 @@ int __init acpi_device_init(enum device_class class,
> const void *data, int class
> return -EBADF;
> }
>
> +static void __init ic_acpi_preinit(void)
> +{
> + struct acpi_subtable_header *header;
> + struct acpi_madt_generic_distributor *dist;
> +
> + header = acpi_table_get_entry_madt(ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR,
> 0);
> + if ( !header )
> + panic("No valid interrupt controller entries exists\n");
> +
> + dist = container_of(header, struct acpi_madt_generic_distributor,
> header);
> +
> + if ( acpi_device_init(DEVICE_INTERRUPT_CONTROLLER, NULL, dist->version) )
> + panic("Unable to find compatible interrupt controller"
> + "in the ACPI table\n");
> +}
> +#else /* !CONFIG_ACPI */
> +
> +static void __init ic_acpi_preinit(void) { }
> +
> #endif
... simply deriving from x86 (and IA-64) it's clear it isn't for ACPI. I'm
therefore unconvinced placing this in common code is appropriate.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |