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; + } + + if (args->args_count > 0) + irq->id = args->args[0]; + if (args->args_count > 1) + irq->flags = args->args[1]; + + 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