Commit 5d4c9bc7 authored by Marc Zyngier's avatar Marc Zyngier Committed by Thomas Gleixner

irqdomain: Use irq_domain_get_of_node() instead of direct field access

The struct irq_domain contains a "struct device_node *" field
(of_node) that is almost the only link between the irqdomain
and the device tree infrastructure.

In order to prepare for the removal of that field, convert all
users to use irq_domain_get_of_node() instead.
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Reviewed-and-tested-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
Tested-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: <linux-arm-kernel@lists.infradead.org>
Cc: Tomasz Nowicki <tomasz.nowicki@linaro.org>
Cc: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
Cc: Graeme Gregory <graeme@xora.org.uk>
Cc: Jake Oshins <jakeo@microsoft.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Link: http://lkml.kernel.org/r/1444737105-31573-2-git-send-email-marc.zyngier@arm.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent e50226b4
...@@ -184,7 +184,7 @@ static int exynos_pmu_domain_xlate(struct irq_domain *domain, ...@@ -184,7 +184,7 @@ static int exynos_pmu_domain_xlate(struct irq_domain *domain,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (domain->of_node != controller) if (irq_domain_get_of_node(domain) != controller)
return -EINVAL; /* Shouldn't happen, really... */ return -EINVAL; /* Shouldn't happen, really... */
if (intsize != 3) if (intsize != 3)
return -EINVAL; /* Not GIC compliant */ return -EINVAL; /* Not GIC compliant */
...@@ -217,7 +217,7 @@ static int exynos_pmu_domain_alloc(struct irq_domain *domain, ...@@ -217,7 +217,7 @@ static int exynos_pmu_domain_alloc(struct irq_domain *domain,
&exynos_pmu_chip, NULL); &exynos_pmu_chip, NULL);
parent_args = *args; parent_args = *args;
parent_args.np = domain->parent->of_node; parent_args.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args); return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args);
} }
......
...@@ -188,7 +188,7 @@ static int imx_gpc_domain_xlate(struct irq_domain *domain, ...@@ -188,7 +188,7 @@ static int imx_gpc_domain_xlate(struct irq_domain *domain,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (domain->of_node != controller) if (irq_domain_get_of_node(domain) != controller)
return -EINVAL; /* Shouldn't happen, really... */ return -EINVAL; /* Shouldn't happen, really... */
if (intsize != 3) if (intsize != 3)
return -EINVAL; /* Not GIC compliant */ return -EINVAL; /* Not GIC compliant */
...@@ -223,7 +223,7 @@ static int imx_gpc_domain_alloc(struct irq_domain *domain, ...@@ -223,7 +223,7 @@ static int imx_gpc_domain_alloc(struct irq_domain *domain,
&imx_gpc_chip, NULL); &imx_gpc_chip, NULL);
parent_args = *args; parent_args = *args;
parent_args.np = domain->parent->of_node; parent_args.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args); return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args);
} }
......
...@@ -406,7 +406,7 @@ static int wakeupgen_domain_xlate(struct irq_domain *domain, ...@@ -406,7 +406,7 @@ static int wakeupgen_domain_xlate(struct irq_domain *domain,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (domain->of_node != controller) if (irq_domain_get_of_node(domain) != controller)
return -EINVAL; /* Shouldn't happen, really... */ return -EINVAL; /* Shouldn't happen, really... */
if (intsize != 3) if (intsize != 3)
return -EINVAL; /* Not GIC compliant */ return -EINVAL; /* Not GIC compliant */
...@@ -441,7 +441,7 @@ static int wakeupgen_domain_alloc(struct irq_domain *domain, ...@@ -441,7 +441,7 @@ static int wakeupgen_domain_alloc(struct irq_domain *domain,
&wakeupgen_chip, NULL); &wakeupgen_chip, NULL);
parent_args = *args; parent_args = *args;
parent_args.np = domain->parent->of_node; parent_args.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args); return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args);
} }
......
...@@ -178,7 +178,7 @@ static void __init set_megamod_mux(struct megamod_pic *pic, int src, int output) ...@@ -178,7 +178,7 @@ static void __init set_megamod_mux(struct megamod_pic *pic, int src, int output)
static void __init parse_priority_map(struct megamod_pic *pic, static void __init parse_priority_map(struct megamod_pic *pic,
int *mapping, int size) int *mapping, int size)
{ {
struct device_node *np = pic->irqhost->of_node; struct device_node *np = irq_domain_get_of_node(pic->irqhost);
const __be32 *map; const __be32 *map;
int i, maplen; int i, maplen;
u32 val; u32 val;
......
...@@ -1094,7 +1094,7 @@ static int octeon_irq_gpio_xlat(struct irq_domain *d, ...@@ -1094,7 +1094,7 @@ static int octeon_irq_gpio_xlat(struct irq_domain *d,
unsigned int pin; unsigned int pin;
unsigned int trigger; unsigned int trigger;
if (d->of_node != node) if (irq_domain_get_of_node(d) != node)
return -EINVAL; return -EINVAL;
if (intsize < 2) if (intsize < 2)
...@@ -2163,7 +2163,7 @@ static int octeon_irq_cib_map(struct irq_domain *d, ...@@ -2163,7 +2163,7 @@ static int octeon_irq_cib_map(struct irq_domain *d,
if (hw >= host_data->max_bits) { if (hw >= host_data->max_bits) {
pr_err("ERROR: %s mapping %u is to big!\n", pr_err("ERROR: %s mapping %u is to big!\n",
d->of_node->name, (unsigned)hw); irq_domain_get_of_node(d)->name, (unsigned)hw);
return -EINVAL; return -EINVAL;
} }
......
...@@ -327,7 +327,7 @@ static void axon_msi_shutdown(struct platform_device *device) ...@@ -327,7 +327,7 @@ static void axon_msi_shutdown(struct platform_device *device)
u32 tmp; u32 tmp;
pr_devel("axon_msi: disabling %s\n", pr_devel("axon_msi: disabling %s\n",
msic->irq_domain->of_node->full_name); irq_domain_get_of_node(msic->irq_domain)->full_name);
tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG); tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG);
tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE; tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE;
msic_dcr_write(msic, MSIC_CTRL_REG, tmp); msic_dcr_write(msic, MSIC_CTRL_REG, tmp);
......
...@@ -231,20 +231,23 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic) ...@@ -231,20 +231,23 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic)
const u32 *imap, *tmp; const u32 *imap, *tmp;
int imaplen, intsize, unit; int imaplen, intsize, unit;
struct device_node *iic; struct device_node *iic;
struct device_node *of_node;
of_node = irq_domain_get_of_node(pic->host);
/* First, we check whether we have a real "interrupts" in the device /* First, we check whether we have a real "interrupts" in the device
* tree in case the device-tree is ever fixed * tree in case the device-tree is ever fixed
*/ */
virq = irq_of_parse_and_map(pic->host->of_node, 0); virq = irq_of_parse_and_map(of_node, 0);
if (virq) if (virq)
return virq; return virq;
/* Now do the horrible hacks */ /* Now do the horrible hacks */
tmp = of_get_property(pic->host->of_node, "#interrupt-cells", NULL); tmp = of_get_property(of_node, "#interrupt-cells", NULL);
if (tmp == NULL) if (tmp == NULL)
return NO_IRQ; return NO_IRQ;
intsize = *tmp; intsize = *tmp;
imap = of_get_property(pic->host->of_node, "interrupt-map", &imaplen); imap = of_get_property(of_node, "interrupt-map", &imaplen);
if (imap == NULL || imaplen < (intsize + 1)) if (imap == NULL || imaplen < (intsize + 1))
return NO_IRQ; return NO_IRQ;
iic = of_find_node_by_phandle(imap[intsize]); iic = of_find_node_by_phandle(imap[intsize]);
......
...@@ -144,9 +144,11 @@ int mpic_pasemi_msi_init(struct mpic *mpic) ...@@ -144,9 +144,11 @@ int mpic_pasemi_msi_init(struct mpic *mpic)
{ {
int rc; int rc;
struct pci_controller *phb; struct pci_controller *phb;
struct device_node *of_node;
if (!mpic->irqhost->of_node || of_node = irq_domain_get_of_node(mpic->irqhost);
!of_device_is_compatible(mpic->irqhost->of_node, if (!of_node ||
!of_device_is_compatible(of_node,
"pasemi,pwrficient-openpic")) "pasemi,pwrficient-openpic"))
return -ENODEV; return -ENODEV;
......
...@@ -137,7 +137,7 @@ static void opal_handle_irq_work(struct irq_work *work) ...@@ -137,7 +137,7 @@ static void opal_handle_irq_work(struct irq_work *work)
static int opal_event_match(struct irq_domain *h, struct device_node *node, static int opal_event_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
return h->of_node == node; return irq_domain_get_of_node(h) == node;
} }
static int opal_event_xlate(struct irq_domain *h, struct device_node *np, static int opal_event_xlate(struct irq_domain *h, struct device_node *np,
......
...@@ -181,7 +181,8 @@ static int ehv_pic_host_match(struct irq_domain *h, struct device_node *node, ...@@ -181,7 +181,8 @@ static int ehv_pic_host_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
/* Exact match, unless ehv_pic node is NULL */ /* Exact match, unless ehv_pic node is NULL */
return h->of_node == NULL || h->of_node == node; struct device_node *of_node = irq_domain_get_of_node(h);
return of_node == NULL || of_node == node;
} }
static int ehv_pic_host_map(struct irq_domain *h, unsigned int virq, static int ehv_pic_host_map(struct irq_domain *h, unsigned int virq,
......
...@@ -110,7 +110,7 @@ static int fsl_msi_init_allocator(struct fsl_msi *msi_data) ...@@ -110,7 +110,7 @@ static int fsl_msi_init_allocator(struct fsl_msi *msi_data)
int rc, hwirq; int rc, hwirq;
rc = msi_bitmap_alloc(&msi_data->bitmap, NR_MSI_IRQS_MAX, rc = msi_bitmap_alloc(&msi_data->bitmap, NR_MSI_IRQS_MAX,
msi_data->irqhost->of_node); irq_domain_get_of_node(msi_data->irqhost));
if (rc) if (rc)
return rc; return rc;
......
...@@ -165,7 +165,8 @@ static struct resource pic_edgectrl_iores = { ...@@ -165,7 +165,8 @@ static struct resource pic_edgectrl_iores = {
static int i8259_host_match(struct irq_domain *h, struct device_node *node, static int i8259_host_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
return h->of_node == NULL || h->of_node == node; struct device_node *of_node = irq_domain_get_of_node(h);
return of_node == NULL || of_node == node;
} }
static int i8259_host_map(struct irq_domain *h, unsigned int virq, static int i8259_host_map(struct irq_domain *h, unsigned int virq,
......
...@@ -675,7 +675,8 @@ static int ipic_host_match(struct irq_domain *h, struct device_node *node, ...@@ -675,7 +675,8 @@ static int ipic_host_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
/* Exact match, unless ipic node is NULL */ /* Exact match, unless ipic node is NULL */
return h->of_node == NULL || h->of_node == node; struct device_node *of_node = irq_domain_get_of_node(h);
return of_node == NULL || of_node == node;
} }
static int ipic_host_map(struct irq_domain *h, unsigned int virq, static int ipic_host_map(struct irq_domain *h, unsigned int virq,
......
...@@ -1011,7 +1011,8 @@ static int mpic_host_match(struct irq_domain *h, struct device_node *node, ...@@ -1011,7 +1011,8 @@ static int mpic_host_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
/* Exact match, unless mpic node is NULL */ /* Exact match, unless mpic node is NULL */
return h->of_node == NULL || h->of_node == node; struct device_node *of_node = irq_domain_get_of_node(h);
return of_node == NULL || of_node == node;
} }
static int mpic_host_map(struct irq_domain *h, unsigned int virq, static int mpic_host_map(struct irq_domain *h, unsigned int virq,
......
...@@ -84,7 +84,7 @@ int mpic_msi_init_allocator(struct mpic *mpic) ...@@ -84,7 +84,7 @@ int mpic_msi_init_allocator(struct mpic *mpic)
int rc; int rc;
rc = msi_bitmap_alloc(&mpic->msi_bitmap, mpic->num_sources, rc = msi_bitmap_alloc(&mpic->msi_bitmap, mpic->num_sources,
mpic->irqhost->of_node); irq_domain_get_of_node(mpic->irqhost));
if (rc) if (rc)
return rc; return rc;
......
...@@ -248,7 +248,8 @@ static int qe_ic_host_match(struct irq_domain *h, struct device_node *node, ...@@ -248,7 +248,8 @@ static int qe_ic_host_match(struct irq_domain *h, struct device_node *node,
enum irq_domain_bus_token bus_token) enum irq_domain_bus_token bus_token)
{ {
/* Exact match, unless qe_ic node is NULL */ /* Exact match, unless qe_ic node is NULL */
return h->of_node == NULL || h->of_node == node; struct device_node *of_node = irq_domain_get_of_node(h);
return of_node == NULL || of_node == node;
} }
static int qe_ic_host_map(struct irq_domain *h, unsigned int virq, static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
......
...@@ -102,7 +102,7 @@ static int sdv_xlate(struct irq_domain *h, struct device_node *node, ...@@ -102,7 +102,7 @@ static int sdv_xlate(struct irq_domain *h, struct device_node *node,
{ {
u32 line, type; u32 line, type;
if (node != h->of_node) if (node != irq_domain_get_of_node(h))
return -EINVAL; return -EINVAL;
if (intsize < 2) if (intsize < 2)
......
...@@ -144,7 +144,7 @@ static int combiner_irq_domain_xlate(struct irq_domain *d, ...@@ -144,7 +144,7 @@ static int combiner_irq_domain_xlate(struct irq_domain *d,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; return -EINVAL;
if (intsize < 2) if (intsize < 2)
......
...@@ -114,7 +114,7 @@ int aic_common_irq_domain_xlate(struct irq_domain *d, ...@@ -114,7 +114,7 @@ int aic_common_irq_domain_xlate(struct irq_domain *d,
static void __init aic_common_ext_irq_of_init(struct irq_domain *domain) static void __init aic_common_ext_irq_of_init(struct irq_domain *domain)
{ {
struct device_node *node = domain->of_node; struct device_node *node = irq_domain_get_of_node(domain);
struct irq_chip_generic *gc; struct irq_chip_generic *gc;
struct aic_chip_data *aic; struct aic_chip_data *aic;
struct property *prop; struct property *prop;
......
...@@ -94,7 +94,7 @@ static int allocate_gic_irq(struct irq_domain *domain, unsigned virq, ...@@ -94,7 +94,7 @@ static int allocate_gic_irq(struct irq_domain *domain, unsigned virq,
if (i < 0) if (i < 0)
return -ENODEV; return -ENODEV;
args.np = domain->parent->of_node; args.np = irq_domain_get_of_node(domain->parent);
args.args_count = 3; args.args_count = 3;
args.args[0] = 0; /* SPI */ args.args[0] = 0; /* SPI */
args.args[1] = i; args.args[1] = i;
...@@ -172,7 +172,7 @@ static int crossbar_domain_xlate(struct irq_domain *d, ...@@ -172,7 +172,7 @@ static int crossbar_domain_xlate(struct irq_domain *d,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; /* Shouldn't happen, really... */ return -EINVAL; /* Shouldn't happen, really... */
if (intsize != 3) if (intsize != 3)
return -EINVAL; /* Not GIC compliant */ return -EINVAL; /* Not GIC compliant */
......
...@@ -128,7 +128,7 @@ static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain, ...@@ -128,7 +128,7 @@ static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain,
struct irq_data *d; struct irq_data *d;
int err; int err;
args.np = domain->parent->of_node; args.np = irq_domain_get_of_node(domain->parent);
args.args_count = 3; args.args_count = 3;
args.args[0] = 0; args.args[0] = 0;
args.args[1] = hwirq - 32; args.args[1] = hwirq - 32;
......
...@@ -1267,7 +1267,7 @@ static int its_irq_gic_domain_alloc(struct irq_domain *domain, ...@@ -1267,7 +1267,7 @@ static int its_irq_gic_domain_alloc(struct irq_domain *domain,
{ {
struct of_phandle_args args; struct of_phandle_args args;
args.np = domain->parent->of_node; args.np = irq_domain_get_of_node(domain->parent);
args.args_count = 3; args.args_count = 3;
args.args[0] = GIC_IRQ_TYPE_LPI; args.args[0] = GIC_IRQ_TYPE_LPI;
args.args[1] = hwirq; args.args[1] = hwirq;
......
...@@ -742,7 +742,7 @@ static int gic_irq_domain_xlate(struct irq_domain *d, ...@@ -742,7 +742,7 @@ static int gic_irq_domain_xlate(struct irq_domain *d,
const u32 *intspec, unsigned int intsize, const u32 *intspec, unsigned int intsize,
unsigned long *out_hwirq, unsigned int *out_type) unsigned long *out_hwirq, unsigned int *out_type)
{ {
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; return -EINVAL;
if (intsize < 3) if (intsize < 3)
return -EINVAL; return -EINVAL;
......
...@@ -923,7 +923,7 @@ static int gic_irq_domain_xlate(struct irq_domain *d, ...@@ -923,7 +923,7 @@ static int gic_irq_domain_xlate(struct irq_domain *d,
{ {
unsigned long ret = 0; unsigned long ret = 0;
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; return -EINVAL;
if (intsize < 3) if (intsize < 3)
return -EINVAL; return -EINVAL;
......
...@@ -325,7 +325,7 @@ static int hip04_irq_domain_xlate(struct irq_domain *d, ...@@ -325,7 +325,7 @@ static int hip04_irq_domain_xlate(struct irq_domain *d,
{ {
unsigned long ret = 0; unsigned long ret = 0;
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; return -EINVAL;
if (intsize < 3) if (intsize < 3)
return -EINVAL; return -EINVAL;
......
...@@ -158,7 +158,7 @@ static int imx_gpcv2_domain_xlate(struct irq_domain *domain, ...@@ -158,7 +158,7 @@ static int imx_gpcv2_domain_xlate(struct irq_domain *domain,
unsigned int *out_type) unsigned int *out_type)
{ {
/* Shouldn't happen, really... */ /* Shouldn't happen, really... */
if (domain->of_node != controller) if (irq_domain_get_of_node(domain) != controller)
return -EINVAL; return -EINVAL;
/* Not GIC compliant */ /* Not GIC compliant */
...@@ -202,7 +202,7 @@ static int imx_gpcv2_domain_alloc(struct irq_domain *domain, ...@@ -202,7 +202,7 @@ static int imx_gpcv2_domain_alloc(struct irq_domain *domain,
} }
parent_args = *args; parent_args = *args;
parent_args.np = domain->parent->of_node; parent_args.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args); return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args);
} }
......
...@@ -106,7 +106,7 @@ static int mtk_sysirq_domain_alloc(struct irq_domain *domain, unsigned int virq, ...@@ -106,7 +106,7 @@ static int mtk_sysirq_domain_alloc(struct irq_domain *domain, unsigned int virq,
&mtk_sysirq_chip, &mtk_sysirq_chip,
domain->host_data); domain->host_data);
gic_data.np = domain->parent->of_node; gic_data.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &gic_data); return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &gic_data);
} }
......
...@@ -311,7 +311,7 @@ static void s3c_irq_demux(struct irq_desc *desc) ...@@ -311,7 +311,7 @@ static void s3c_irq_demux(struct irq_desc *desc)
* and one big domain for the dt case where the subintc * and one big domain for the dt case where the subintc
* starts at hwirq number 32. * starts at hwirq number 32.
*/ */
offset = (intc->domain->of_node) ? 32 : 0; offset = irq_domain_get_of_node(intc->domain) ? 32 : 0;
chained_irq_enter(chip, desc); chained_irq_enter(chip, desc);
...@@ -342,7 +342,7 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc, ...@@ -342,7 +342,7 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
return false; return false;
/* non-dt machines use individual domains */ /* non-dt machines use individual domains */
if (!intc->domain->of_node) if (!irq_domain_get_of_node(intc->domain))
intc_offset = 0; intc_offset = 0;
/* We have a problem that the INTOFFSET register does not always /* We have a problem that the INTOFFSET register does not always
......
...@@ -227,7 +227,7 @@ static int tegra_ictlr_domain_xlate(struct irq_domain *domain, ...@@ -227,7 +227,7 @@ static int tegra_ictlr_domain_xlate(struct irq_domain *domain,
unsigned long *out_hwirq, unsigned long *out_hwirq,
unsigned int *out_type) unsigned int *out_type)
{ {
if (domain->of_node != controller) if (irq_domain_get_of_node(domain) != controller)
return -EINVAL; /* Shouldn't happen, really... */ return -EINVAL; /* Shouldn't happen, really... */
if (intsize != 3) if (intsize != 3)
return -EINVAL; /* Not GIC compliant */ return -EINVAL; /* Not GIC compliant */
...@@ -267,7 +267,7 @@ static int tegra_ictlr_domain_alloc(struct irq_domain *domain, ...@@ -267,7 +267,7 @@ static int tegra_ictlr_domain_alloc(struct irq_domain *domain,
} }
parent_args = *args; parent_args = *args;
parent_args.np = domain->parent->of_node; parent_args.np = irq_domain_get_of_node(domain->parent);
return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args); return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent_args);
} }
......
...@@ -142,7 +142,7 @@ static int vf610_mscm_ir_domain_alloc(struct irq_domain *domain, unsigned int vi ...@@ -142,7 +142,7 @@ static int vf610_mscm_ir_domain_alloc(struct irq_domain *domain, unsigned int vi
&vf610_mscm_ir_irq_chip, &vf610_mscm_ir_irq_chip,
domain->host_data); domain->host_data);
gic_data.np = domain->parent->of_node; gic_data.np = irq_domain_get_of_node(domain->parent);
if (mscm_ir_data->is_nvic) { if (mscm_ir_data->is_nvic) {
gic_data.args_count = 1; gic_data.args_count = 1;
...@@ -205,7 +205,8 @@ static int __init vf610_mscm_ir_of_init(struct device_node *node, ...@@ -205,7 +205,8 @@ static int __init vf610_mscm_ir_of_init(struct device_node *node,
goto out_unmap; goto out_unmap;
} }
if (of_device_is_compatible(domain->parent->of_node, "arm,armv7m-nvic")) if (of_device_is_compatible(irq_domain_get_of_node(domain->parent),
"arm,armv7m-nvic"))
mscm_ir_data->is_nvic = true; mscm_ir_data->is_nvic = true;
cpu_pm_register_notifier(&mscm_ir_notifier_block); cpu_pm_register_notifier(&mscm_ir_notifier_block);
......
...@@ -657,7 +657,7 @@ static int qpnpint_irq_domain_dt_translate(struct irq_domain *d, ...@@ -657,7 +657,7 @@ static int qpnpint_irq_domain_dt_translate(struct irq_domain *d,
"intspec[0] 0x%1x intspec[1] 0x%02x intspec[2] 0x%02x\n", "intspec[0] 0x%1x intspec[1] 0x%02x intspec[2] 0x%02x\n",
intspec[0], intspec[1], intspec[2]); intspec[0], intspec[1], intspec[2]);
if (d->of_node != controller) if (irq_domain_get_of_node(d) != controller)
return -EINVAL; return -EINVAL;
if (intsize != 4) if (intsize != 4)
return -EINVAL; return -EINVAL;
......
...@@ -102,7 +102,7 @@ void irq_domain_remove(struct irq_domain *domain) ...@@ -102,7 +102,7 @@ void irq_domain_remove(struct irq_domain *domain)
pr_debug("Removed domain %s\n", domain->name); pr_debug("Removed domain %s\n", domain->name);
of_node_put(domain->of_node); of_node_put(irq_domain_get_of_node(domain));
kfree(domain); kfree(domain);
} }
EXPORT_SYMBOL_GPL(irq_domain_remove); EXPORT_SYMBOL_GPL(irq_domain_remove);
...@@ -208,10 +208,12 @@ struct irq_domain *irq_find_matching_host(struct device_node *node, ...@@ -208,10 +208,12 @@ struct irq_domain *irq_find_matching_host(struct device_node *node,
*/ */
mutex_lock(&irq_domain_mutex); mutex_lock(&irq_domain_mutex);
list_for_each_entry(h, &irq_domain_list, link) { list_for_each_entry(h, &irq_domain_list, link) {
struct device_node *of_node;
of_node = irq_domain_get_of_node(h);
if (h->ops->match) if (h->ops->match)
rc = h->ops->match(h, node, bus_token); rc = h->ops->match(h, node, bus_token);
else else
rc = ((h->of_node != NULL) && (h->of_node == node) && rc = ((of_node != NULL) && (of_node == node) &&
((bus_token == DOMAIN_BUS_ANY) || ((bus_token == DOMAIN_BUS_ANY) ||
(h->bus_token == bus_token))); (h->bus_token == bus_token)));
...@@ -336,10 +338,12 @@ EXPORT_SYMBOL_GPL(irq_domain_associate); ...@@ -336,10 +338,12 @@ EXPORT_SYMBOL_GPL(irq_domain_associate);
void irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base, void irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base,
irq_hw_number_t hwirq_base, int count) irq_hw_number_t hwirq_base, int count)
{ {
struct device_node *of_node;
int i; int i;
of_node = irq_domain_get_of_node(domain);
pr_debug("%s(%s, irqbase=%i, hwbase=%i, count=%i)\n", __func__, pr_debug("%s(%s, irqbase=%i, hwbase=%i, count=%i)\n", __func__,
of_node_full_name(domain->of_node), irq_base, (int)hwirq_base, count); of_node_full_name(of_node), irq_base, (int)hwirq_base, count);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
irq_domain_associate(domain, irq_base + i, hwirq_base + i); irq_domain_associate(domain, irq_base + i, hwirq_base + i);
...@@ -359,12 +363,14 @@ EXPORT_SYMBOL_GPL(irq_domain_associate_many); ...@@ -359,12 +363,14 @@ EXPORT_SYMBOL_GPL(irq_domain_associate_many);
*/ */
unsigned int irq_create_direct_mapping(struct irq_domain *domain) unsigned int irq_create_direct_mapping(struct irq_domain *domain)
{ {
struct device_node *of_node;
unsigned int virq; unsigned int virq;
if (domain == NULL) if (domain == NULL)
domain = irq_default_domain; domain = irq_default_domain;
virq = irq_alloc_desc_from(1, of_node_to_nid(domain->of_node)); of_node = irq_domain_get_of_node(domain);
virq = irq_alloc_desc_from(1, of_node_to_nid(of_node));
if (!virq) { if (!virq) {
pr_debug("create_direct virq allocation failed\n"); pr_debug("create_direct virq allocation failed\n");
return 0; return 0;
...@@ -399,6 +405,7 @@ EXPORT_SYMBOL_GPL(irq_create_direct_mapping); ...@@ -399,6 +405,7 @@ EXPORT_SYMBOL_GPL(irq_create_direct_mapping);
unsigned int irq_create_mapping(struct irq_domain *domain, unsigned int irq_create_mapping(struct irq_domain *domain,
irq_hw_number_t hwirq) irq_hw_number_t hwirq)
{ {
struct device_node *of_node;
int virq; int virq;
pr_debug("irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); pr_debug("irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq);
...@@ -412,6 +419,8 @@ unsigned int irq_create_mapping(struct irq_domain *domain, ...@@ -412,6 +419,8 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
} }
pr_debug("-> using domain @%p\n", domain); pr_debug("-> using domain @%p\n", domain);
of_node = irq_domain_get_of_node(domain);
/* Check if mapping already exists */ /* Check if mapping already exists */
virq = irq_find_mapping(domain, hwirq); virq = irq_find_mapping(domain, hwirq);
if (virq) { if (virq) {
...@@ -420,8 +429,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain, ...@@ -420,8 +429,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
} }
/* Allocate a virtual interrupt number */ /* Allocate a virtual interrupt number */
virq = irq_domain_alloc_descs(-1, 1, hwirq, virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node));
of_node_to_nid(domain->of_node));
if (virq <= 0) { if (virq <= 0) {
pr_debug("-> virq allocation failed\n"); pr_debug("-> virq allocation failed\n");
return 0; return 0;
...@@ -433,7 +441,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain, ...@@ -433,7 +441,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
} }
pr_debug("irq %lu on domain %s mapped to virtual irq %u\n", pr_debug("irq %lu on domain %s mapped to virtual irq %u\n",
hwirq, of_node_full_name(domain->of_node), virq); hwirq, of_node_full_name(of_node), virq);
return virq; return virq;
} }
...@@ -460,10 +468,12 @@ EXPORT_SYMBOL_GPL(irq_create_mapping); ...@@ -460,10 +468,12 @@ EXPORT_SYMBOL_GPL(irq_create_mapping);
int irq_create_strict_mappings(struct irq_domain *domain, unsigned int irq_base, int irq_create_strict_mappings(struct irq_domain *domain, unsigned int irq_base,
irq_hw_number_t hwirq_base, int count) irq_hw_number_t hwirq_base, int count)
{ {
struct device_node *of_node;
int ret; int ret;
of_node = irq_domain_get_of_node(domain);
ret = irq_alloc_descs(irq_base, irq_base, count, ret = irq_alloc_descs(irq_base, irq_base, count,
of_node_to_nid(domain->of_node)); of_node_to_nid(of_node));
if (unlikely(ret < 0)) if (unlikely(ret < 0))
return ret; return ret;
...@@ -590,14 +600,16 @@ static int virq_debug_show(struct seq_file *m, void *private) ...@@ -590,14 +600,16 @@ static int virq_debug_show(struct seq_file *m, void *private)
"name", "mapped", "linear-max", "direct-max", "devtree-node"); "name", "mapped", "linear-max", "direct-max", "devtree-node");
mutex_lock(&irq_domain_mutex); mutex_lock(&irq_domain_mutex);
list_for_each_entry(domain, &irq_domain_list, link) { list_for_each_entry(domain, &irq_domain_list, link) {
struct device_node *of_node;
int count = 0; int count = 0;
of_node = irq_domain_get_of_node(domain);
radix_tree_for_each_slot(slot, &domain->revmap_tree, &iter, 0) radix_tree_for_each_slot(slot, &domain->revmap_tree, &iter, 0)
count++; count++;
seq_printf(m, "%c%-16s %6u %10u %10u %s\n", seq_printf(m, "%c%-16s %6u %10u %10u %s\n",
domain == irq_default_domain ? '*' : ' ', domain->name, domain == irq_default_domain ? '*' : ' ', domain->name,
domain->revmap_size + count, domain->revmap_size, domain->revmap_size + count, domain->revmap_size,
domain->revmap_direct_max_irq, domain->revmap_direct_max_irq,
domain->of_node ? of_node_full_name(domain->of_node) : ""); of_node ? of_node_full_name(of_node) : "");
} }
mutex_unlock(&irq_domain_mutex); mutex_unlock(&irq_domain_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment