aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/irqchip
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2014-06-26 03:10:21 -0400
committerJason Cooper <jason@lakedaemon.net>2014-06-30 15:11:18 -0400
commit64e0f8ba5cae74471f72e0cb218c67915e365f47 (patch)
treed37a9eefd697f98912cb697858054cd5d2ba092c /drivers/irqchip
parent6f16fc878a51572a998655e5ef1c396cb269648d (diff)
irqchip: crossbar: Introduce ti, irqs-skip to skip irqs that bypass crossbar
When, in the system due to varied reasons, interrupts might be unusable due to hardware behavior, but register maps do exist, then those interrupts should be skipped while mapping irq to crossbars. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Sricharan R <r.sricharan@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Link: https://lkml.kernel.org/r/1403766634-18543-4-git-send-email-r.sricharan@ti.com Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Diffstat (limited to 'drivers/irqchip')
-rw-r--r--drivers/irqchip/irq-crossbar.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c
index 51d4b878e5d6..0533a71fa86f 100644
--- a/drivers/irqchip/irq-crossbar.c
+++ b/drivers/irqchip/irq-crossbar.c
@@ -18,6 +18,7 @@
18 18
19#define IRQ_FREE -1 19#define IRQ_FREE -1
20#define IRQ_RESERVED -2 20#define IRQ_RESERVED -2
21#define IRQ_SKIP -3
21#define GIC_IRQ_START 32 22#define GIC_IRQ_START 32
22 23
23/* 24/*
@@ -160,6 +161,25 @@ static int __init crossbar_of_init(struct device_node *node)
160 } 161 }
161 } 162 }
162 163
164 /* Skip irqs hardwired to bypass the crossbar */
165 irqsr = of_get_property(node, "ti,irqs-skip", &size);
166 if (irqsr) {
167 size /= sizeof(__be32);
168
169 for (i = 0; i < size; i++) {
170 of_property_read_u32_index(node,
171 "ti,irqs-skip",
172 i, &entry);
173 if (entry > max) {
174 pr_err("Invalid skip entry\n");
175 ret = -EINVAL;
176 goto err3;
177 }
178 cb->irq_map[entry] = IRQ_SKIP;
179 }
180 }
181
182
163 cb->register_offsets = kzalloc(max * sizeof(int), GFP_KERNEL); 183 cb->register_offsets = kzalloc(max * sizeof(int), GFP_KERNEL);
164 if (!cb->register_offsets) 184 if (!cb->register_offsets)
165 goto err3; 185 goto err3;