Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+19 -9
+19 -9
arch/c6x/platforms/megamod-pic.c
··· 243 243 * as their interrupt parent. 244 244 */ 245 245 for (i = 0; i < NR_COMBINERS; i++) { 246 + struct irq_data *irq_data; 247 + irq_hw_number_t hwirq; 246 248 247 249 irq = irq_of_parse_and_map(np, i); 248 250 if (irq == NO_IRQ) 249 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 253 - * direct mapped. Check that device tree provided something 254 - * in that range. 263 + * Check that device tree provided something in the range 264 + * of the core priority interrupts (4 - 15). 255 265 */ 256 - if (irq < 4 || irq >= NR_PRIORITY_IRQS) { 257 - pr_err("%s: combiner-%d virq %d out of range!\n", 258 - np->full_name, i, irq); 266 + if (hwirq < 4 || hwirq >= NR_PRIORITY_IRQS) { 267 + pr_err("%s: combiner-%d core irq %ld out of range!\n", 268 + np->full_name, i, hwirq); 259 269 continue; 260 270 } 261 271 262 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", 266 - np->full_name, i, irq); 275 + pr_debug("%s: combiner-%d cascading to hwirq %ld\n", 276 + np->full_name, i, hwirq); 267 277 268 278 cascade_data[i].pic = pic; 269 279 cascade_data[i].index = i;