/* SPDX-License-Identifier: GPL-2.0-only */ /* * Aspeed AST2700 Interrupt Controller. * * Copyright (C) 2026 ASPEED Technology Inc. */ #ifndef DRIVERS_IRQCHIP_AST2700 #define DRIVERS_IRQCHIP_AST2700 #include <linux/device.h> #include <linux/irqdomain.h> #define AST2700_INTC_INVALID_ROUTE (~0U) #define ASPEED_INTC_RANGES_BASE 0U #define ASPEED_INTC_RANGES_COUNT 1U struct aspeed_intc_interrupt_range { u32 start; u32 count; struct irq_fwspec upstream; struct irq_domain *domain; }; struct aspeed_intc_interrupt_ranges { struct aspeed_intc_interrupt_range *ranges; unsigned int nranges; }; struct aspeed_intc0 { struct device *dev; void __iomem *base; raw_spinlock_t intc_lock; struct irq_domain *local; struct device_node *parent; struct aspeed_intc_interrupt_ranges ranges; }; int aspeed_intc_populate_ranges(struct device *dev, struct aspeed_intc_interrupt_ranges *ranges); int aspeed_intc0_resolve_route(const struct irq_domain *c0domain, size_t nc1outs, const u32 *c1outs, size_t nc1ranges, const struct aspeed_intc_interrupt_range *c1ranges, struct aspeed_intc_interrupt_range *resolved); #endif