Commit 5404f5c0 authored by Marc Zyngier's avatar Marc Zyngier Committed by Thomas Gleixner
Browse files

of/irq: Add interrupt affinity reporting interface



Plug the irq_populate_fwspec_info() helper into the OF layer to offer an
interrupt affinity reporting function.

Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarWill Deacon <will@kernel.org>
Reviewed-by: default avatarJonathan Cameron <jonathan.cameron@huawei.com>
Link: https://patch.msgid.link/20251020122944.3074811-4-maz@kernel.org
parent 5324fe21
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -479,6 +479,26 @@ int of_irq_get(struct device_node *dev, int index)
}
EXPORT_SYMBOL_GPL(of_irq_get);

const struct cpumask *of_irq_get_affinity(struct device_node *dev, int index)
{
	struct of_phandle_args oirq;
	struct irq_fwspec_info info;
	struct irq_fwspec fwspec;
	int rc;

	rc = of_irq_parse_one(dev, index, &oirq);
	if (rc)
		return NULL;

	of_phandle_args_to_fwspec(oirq.np, oirq.args, oirq.args_count,
				  &fwspec);

	if (irq_populate_fwspec_info(&fwspec, &info))
		return NULL;

	return info.affinity;
}

/**
 * of_irq_get_byname - Decode a node's IRQ and return it as a Linux IRQ number
 * @dev: pointer to device tree node
+7 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ extern int of_irq_parse_one(struct device_node *device, int index,
			  struct of_phandle_args *out_irq);
extern int of_irq_count(struct device_node *dev);
extern int of_irq_get(struct device_node *dev, int index);
extern const struct cpumask *of_irq_get_affinity(struct device_node *dev,
						      int index);
extern int of_irq_get_byname(struct device_node *dev, const char *name);
extern int of_irq_to_resource_table(struct device_node *dev,
		struct resource *res, int nr_irqs);
@@ -76,6 +78,11 @@ static inline int of_irq_get_byname(struct device_node *dev, const char *name)
{
	return 0;
}
static inline const struct cpumask *of_irq_get_affinity(struct device_node *dev,
							int index)
{
	return NULL;
}
static inline int of_irq_to_resource_table(struct device_node *dev,
					   struct resource *res, int nr_irqs)
{