Hi Patrick, On Mon, Oct 14, 2024 at 6:16 AM Patrick Rudolph <patrick.rudo...@9elements.com> wrote: > > Translate IRQs by implementing of_xlate() as required by > irq_get_by_index() to parse interrupt properties. > > TEST: Booted on qemu sbsa-ref that has a GICV3. > > Signed-off-by: Patrick Rudolph <patrick.rudo...@9elements.com> > Reviewed-by: Simon Glass <s...@chromium.org> > --- > Changelog v6: > - Update header order > > --- > arch/arm/lib/gic-v3-its.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/arch/arm/lib/gic-v3-its.c b/arch/arm/lib/gic-v3-its.c > index 22fa46a341..0d5545bfb2 100644 > --- a/arch/arm/lib/gic-v3-its.c > +++ b/arch/arm/lib/gic-v3-its.c > @@ -4,6 +4,7 @@ > */ > #include <cpu_func.h> > #include <dm.h> > +#include <irq.h> > #include <asm/gic.h> > #include <asm/gic-v3.h> > #include <asm/io.h> > @@ -163,8 +164,28 @@ static const struct udevice_id gic_v3_ids[] = { > {} > }; > > +static int arm_gic_v3_of_xlate(struct irq *irq, struct ofnode_phandle_args > *args) > +{ > + if (args->args_count > 2) { > + log_debug("Invalid args_count: %d\n", args->args_count); > + return -EINVAL; > + } Aren't gicv3 at least #interrupt-cells = 3; to distinguish PPI / SPI? > + > + if (args->args_count > 0) > + irq->id = args->args[0]; > + if (args->args_count > 1) > + irq->flags = args->args[1];
Don't you have to distinguish PPI and SPIs here? You'll use args->args[0] as PPI vs SPI and args[1] is either 1:1 (PPI) or offset by 32 for SPIs or am I misunderstanding something? > + > + return 0; > +} > + > +static const struct irq_ops arm_gic_v3_ops = { > + .of_xlate = arm_gic_v3_of_xlate, > +}; > + > U_BOOT_DRIVER(arm_gic_v3) = { > .name = "gic-v3", > .id = UCLASS_IRQ, > .of_match = gic_v3_ids, > + .ops = &arm_gic_v3_ops, > }; > -- > 2.46.2 > Cheers, Moritz