aboutsummaryrefslogtreecommitdiffstats
path: root/arch/c6x/platforms
diff options
context:
space:
mode:
authorMark Salter <msalter@redhat.com>2012-07-18 21:11:59 -0400
committerMark Salter <msalter@redhat.com>2012-07-18 23:43:37 -0400
commitb3f89562100ad7d8deecc5a97ac74db7708c1bba (patch)
tree434dc814ec1c2460f155c8d9130617e1d7ebc03e /arch/c6x/platforms
parent84a1caf1453c3d44050bd22db958af4a7f99315c (diff)
C6X: remove megamod-pic requirement on direct-mapped core pic
The megamodule PIC cascades a number of interrupt sources into the core priority PIC. The megamodule code depends on the core hardware interrupt numbers being mapped one-to-one with regard to linux interrupt numbers. This patch removes that dependence in order to pave the way for removing the direct mapping in the core PIC code. Signed-off-by: Mark Salter <msalter@redhat.com>
Diffstat (limited to 'arch/c6x/platforms')
-rw-r--r--arch/c6x/platforms/megamod-pic.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/arch/c6x/platforms/megamod-pic.c b/arch/c6x/platforms/megamod-pic.c
index c1c4e2ae3f85..74e3371eb824 100644
--- a/arch/c6x/platforms/megamod-pic.c
+++ b/arch/c6x/platforms/megamod-pic.c
@@ -243,27 +243,37 @@ static struct megamod_pic * __init init_megamod_pic(struct device_node *np)
243 * as their interrupt parent. 243 * as their interrupt parent.
244 */ 244 */
245 for (i = 0; i < NR_COMBINERS; i++) { 245 for (i = 0; i < NR_COMBINERS; i++) {
246 struct irq_data *irq_data;
247 irq_hw_number_t hwirq;
246 248
247 irq = irq_of_parse_and_map(np, i); 249 irq = irq_of_parse_and_map(np, i);
248 if (irq == NO_IRQ) 250 if (irq == NO_IRQ)
249 continue; 251 continue;
250 252
253 irq_data = irq_get_irq_data(irq);
254 if (!irq_data) {
255 pr_err("%s: combiner-%d no irq_data for virq %d!\n",
256 np->full_name, i, irq);
257 continue;
258 }
259
260 hwirq = irq_data->hwirq;
261
251 /* 262 /*
252 * We count on the core priority interrupts (4 - 15) being 263 * Check that device tree provided something in the range
253 * direct mapped. Check that device tree provided something 264 * of the core priority interrupts (4 - 15).
254 * in that range.
255 */ 265 */
256 if (irq < 4 || irq >= NR_PRIORITY_IRQS) { 266 if (hwirq < 4 || hwirq >= NR_PRIORITY_IRQS) {
257 pr_err("%s: combiner-%d virq %d out of range!\n", 267 pr_err("%s: combiner-%d core irq %ld out of range!\n",
258 np->full_name, i, irq); 268 np->full_name, i, hwirq);
259 continue; 269 continue;
260 } 270 }
261 271
262 /* record the mapping */ 272 /* record the mapping */
263 mapping[irq - 4] = i; 273 mapping[hwirq - 4] = i;
264 274
265 pr_debug("%s: combiner-%d cascading to virq %d\n", 275 pr_debug("%s: combiner-%d cascading to hwirq %ld\n",
266 np->full_name, i, irq); 276 np->full_name, i, hwirq);
267 277
268 cascade_data[i].pic = pic; 278 cascade_data[i].pic = pic;
269 cascade_data[i].index = i; 279 cascade_data[i].index = i;