Stable tag for the GPIO tree to pull from

-----BEGIN PGP SIGNATURE-----
 
 iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmf04k0THHRnbHhAbGlu
 dXRyb25peC5kZQAKCRCmGPVMDXSYocLBD/0bUwFH+WqgO+nHEiVulSgaYBZvyX8E
 fIVSQBCVmZdjmJSeuzyeaw+NIe76I4ISHZ9TH93Ki88f4siTkKhjl0M8W01sq4m6
 X37lGuZZJF1nqEAtU1qqZ4g+MyN/lLVHD8fe05D9fGimX7d1zvugE4xkSR8rIK6T
 nTLm90O5t8VbSwERCHhUK0ZuayvWUnLqZQBOU0CRK1ikyG0WXmYb8lTpU8PKM8tT
 xDfStiU2X3ERDqJflIJanz+o8fEcEm5LF45MbhQsXvgUQb0PRl4HHOnESKvhbGc/
 JQ83ocUXIQ7eeUGx8nZVmN6K/8NrSjCG8Dvwe6SLBgeIkdAHfyyi6igdfWaYG/h+
 LTsF9OODYDKcLGaf4wg+tK/Z46HC9aHnEvCDLO9A9h0vHHtXKdldkccmmFuPsKLF
 JN2FBNYcldItEjCHtRixJBdT1EpSy46VghJrnOD6tPvBzwqHYYSFbkrlWv1NF3Sw
 8hg5bYgemQ+8lYirsPWhAUCxgwb7f+IsNn/VwKufJ8ohr85O4EMOS+IDFtiKQJEQ
 A9KDRfzOwSUj0Fp5Y26s8rGSUHDcXqnkQZsJsHx8Bwe3SSndZtstTUgNhCkl9VXY
 aqxq+dKtvXhE4ZZZwMYa4BDoGqrWbJiGYbSidmTaDfc56LxOa4MVh1kwAo0WcEDY
 wsK6a7fRSsWYWw==
 =pJLt
 -----END PGP SIGNATURE-----

Merge tag 'irqdomain-04-08-25' into irq/cleanups

Merge to get the latest updates for the irqdomain cleanup series.
This commit is contained in:
Thomas Gleixner 2025-05-06 14:55:47 +02:00
commit 8288eac57d
2 changed files with 65 additions and 9 deletions

View File

@ -571,16 +571,16 @@ int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr,
const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type);
int irq_domain_xlate_twothreecell(struct irq_domain *d, struct device_node *ctrlr,
const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type);
int irq_domain_translate_twocell(struct irq_domain *d,
struct irq_fwspec *fwspec,
unsigned long *out_hwirq,
unsigned int *out_type);
int irq_domain_translate_onecell(struct irq_domain *d,
struct irq_fwspec *fwspec,
unsigned long *out_hwirq,
unsigned int *out_type);
int irq_domain_translate_onecell(struct irq_domain *d, struct irq_fwspec *fwspec,
unsigned long *out_hwirq, unsigned int *out_type);
int irq_domain_translate_twocell(struct irq_domain *d, struct irq_fwspec *fwspec,
unsigned long *out_hwirq, unsigned int *out_type);
int irq_domain_translate_twothreecell(struct irq_domain *d, struct irq_fwspec *fwspec,
unsigned long *out_hwirq, unsigned int *out_type);
/* IPI functions */
int irq_reserve_ipi(struct irq_domain *domain, const struct cpumask *dest);

View File

@ -1132,6 +1132,31 @@ int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
}
EXPORT_SYMBOL_GPL(irq_domain_xlate_twocell);
/**
* irq_domain_xlate_twothreecell() - Generic xlate for direct two or three cell bindings
* @d: Interrupt domain involved in the translation
* @ctrlr: The device tree node for the device whose interrupt is translated
* @intspec: The interrupt specifier data from the device tree
* @intsize: The number of entries in @intspec
* @out_hwirq: Pointer to storage for the hardware interrupt number
* @out_type: Pointer to storage for the interrupt type
*
* Device Tree interrupt specifier translation function for two or three
* cell bindings, where the cell values map directly to the hardware
* interrupt number and the type specifier.
*/
int irq_domain_xlate_twothreecell(struct irq_domain *d, struct device_node *ctrlr,
const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type)
{
struct irq_fwspec fwspec;
of_phandle_args_to_fwspec(ctrlr, intspec, intsize, &fwspec);
return irq_domain_translate_twothreecell(d, &fwspec, out_hwirq, out_type);
}
EXPORT_SYMBOL_GPL(irq_domain_xlate_twothreecell);
/**
* irq_domain_xlate_onetwocell() - Generic xlate for one or two cell bindings
* @d: Interrupt domain involved in the translation
@ -1216,6 +1241,37 @@ int irq_domain_translate_twocell(struct irq_domain *d,
}
EXPORT_SYMBOL_GPL(irq_domain_translate_twocell);
/**
* irq_domain_translate_twothreecell() - Generic translate for direct two or three cell
* bindings
* @d: Interrupt domain involved in the translation
* @fwspec: The firmware interrupt specifier to translate
* @out_hwirq: Pointer to storage for the hardware interrupt number
* @out_type: Pointer to storage for the interrupt type
*
* Firmware interrupt specifier translation function for two or three cell
* specifications, where the parameter values map directly to the hardware
* interrupt number and the type specifier.
*/
int irq_domain_translate_twothreecell(struct irq_domain *d, struct irq_fwspec *fwspec,
unsigned long *out_hwirq, unsigned int *out_type)
{
if (fwspec->param_count == 2) {
*out_hwirq = fwspec->param[0];
*out_type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK;
return 0;
}
if (fwspec->param_count == 3) {
*out_hwirq = fwspec->param[1];
*out_type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
return 0;
}
return -EINVAL;
}
EXPORT_SYMBOL_GPL(irq_domain_translate_twothreecell);
int irq_domain_alloc_descs(int virq, unsigned int cnt, irq_hw_number_t hwirq,
int node, const struct irq_affinity_desc *affinity)
{