|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4] xen/common: Move gic_dt_preinit() to common code
On Thu, 2024-11-21 at 11:27 +0100, Michal Orzel wrote:
>
>
> On 19/11/2024 15:56, Oleksii Kurochko wrote:
> >
> >
> > 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>
> > ---
> > Changes in v4:
> > - Add SPDX tag in intc.c
> > - s/num_gics/num_intc
> > - Update the comment: s/GIC/interrupt controller.
> > ---
> > Changes in v3:
> > - s/ic/intc.
> > - Update the commit message.
> > - Move intc_dt_preinit() to common/device-tree/intc.c.
> > - Add declaration of intc_dt_preinit() in xen/device_tree.h.
> > - Revert intc_preinit()-related changes and just back
> > gic_preinit() in
> > Arm's gic.c.
> > - Revert ACPI-related changes.
> > ---
> > Changes in v2:
> > - Revert changes connected to moving of gic_acpi_preinit() to
> > common code as
> > it isn't really architecture indepent part.
> > - Update the commit message.
> > - Move stub of ic_acpi_preinit() to <asm-generic/device.h> for the
> > case when
> > CONFIG_ACPI=n.
> > ---
> > xen/arch/arm/gic.c | 32 +----------------------------
> > -
> > xen/common/device-tree/Makefile | 1 +
> > xen/common/device-tree/intc.c | 35
> > +++++++++++++++++++++++++++++++++
> > xen/include/xen/device_tree.h | 6 ++++++
> > 4 files changed, 43 insertions(+), 31 deletions(-)
> > create mode 100644 xen/common/device-tree/intc.c
> >
> > 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..d2bcbc2d5e
> > --- /dev/null
> > +++ b/xen/common/device-tree/intc.c
> > @@ -0,0 +1,35 @@
> > +/* 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 contoller"
> > + "in the device tree\n");
> Don't split printk messages. Also the split is incorrect as it'll
> result in "contollerin" (i.e. no space in between).
> Also s/contoller/controller/
>
> > +
> > + /* Set the interrupt controller as the primary interrupt
> > controller */
> > + dt_interrupt_controller = node;
> > + dt_device_set_used_by(node, DOMID_XEN);
> > +}
> Missing EMACS block at the end of file.
>
> > diff --git a/xen/include/xen/device_tree.h
> > b/xen/include/xen/device_tree.h
> > index e6287305a7..33d70b9594 100644
> > --- a/xen/include/xen/device_tree.h
> > +++ b/xen/include/xen/device_tree.h
> > @@ -238,6 +238,12 @@ extern rwlock_t dt_host_lock;
> > struct dt_device_node *
> > dt_find_interrupt_controller(const struct dt_device_match
> > *matches);
> >
> > +#ifdef CONFIG_HAS_DEVICE_TREE
> > +void intc_dt_preinit(void);
> > +#else
> > +static inline void intc_dt_preinit(void) { }
> > +#endif
> Is it really needed to provide the stub and guards? Other DT related
> functions in this header are not
> protected and AFAICT the inclusion of this header only works if
> CONFIG_HAS_DEVICE_TREE=y.
I think you are right and we can really drop stub and guards. I'll send
a new patch version applying this and the comments above.
Thanks.
~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |