diff options
Diffstat (limited to 'drivers/irqchip')
-rw-r--r-- | drivers/irqchip/irq-crossbar.c | 20 |
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; |