summaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/cpu/irq/ipr.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-15 10:01:15 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-15 10:01:15 -0800
commitf99c6bb6e2e9c35bd3dc0b1d0faa28bd6970930d (patch)
tree338721c5084d536208a944567c2dface6a38a994 /arch/sh/kernel/cpu/irq/ipr.c
parente0a04cffa4e97e1e53625e40e70895c882e8972f (diff)
parent9c57548f17806ffd8e4dc4f7973ce78bbfbc2079 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6: (35 commits) sh: rts7751r2d board updates. sh: Kill off dead bigsur and ec3104 boards. sh: Fixup r7780rp pata_platform for devres conversion. sh: Revert TLB miss fast-path changes that broke PTEA parts. sh: Compile fix for heartbeat consolidation. sh: heartbeat consolidation for banked LEDs. sh: define dma noncoherent API functions. sh: Missing flush_dcache_all() proto in cacheflush.h. sh: Kill dead/unused ISA code from __ioremap(). sh: Add cpu-features header to asm/Kbuild. sh: Move __KERNEL__ up in asm/page.h. sh: Fix syscall numbering breakage. sh: dcache write-back for R7780RP PIO. sh: Switch to local TLB flush variants in additional callsites. sh: Local TLB flushing variants for SMP prep. sh: Fixup cpu_data references for the non-boot CPUs. sh: Use a per-cpu ASID cache. sh: add SH_CLK_MD Kconfig default. sh: Fixup SHMIN INTC register definitions. sh: SH-DMAC compile fixes ...
Diffstat (limited to 'arch/sh/kernel/cpu/irq/ipr.c')
-rw-r--r--arch/sh/kernel/cpu/irq/ipr.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c
index 35eb5751a3a..210280b6fdd 100644
--- a/arch/sh/kernel/cpu/irq/ipr.c
+++ b/arch/sh/kernel/cpu/irq/ipr.c
@@ -43,16 +43,29 @@ static struct irq_chip ipr_irq_chip = {
.mask_ack = disable_ipr_irq,
};
+unsigned int map_ipridx_to_addr(int idx) __attribute__ ((weak));
+unsigned int map_ipridx_to_addr(int idx)
+{
+ return 0;
+}
+
void make_ipr_irq(struct ipr_data *table, unsigned int nr_irqs)
{
int i;
for (i = 0; i < nr_irqs; i++) {
unsigned int irq = table[i].irq;
- table[i].addr = map_ipridx_to_addr(table[i].ipr_idx);
+
+ if (!irq)
+ irq = table[i].irq = i;
+
/* could the IPR index be mapped, if not we ignore this */
- if (table[i].addr == 0)
- continue;
+ if (!table[i].addr) {
+ table[i].addr = map_ipridx_to_addr(table[i].ipr_idx);
+ if (!table[i].addr)
+ continue;
+ }
+
disable_irq_nosync(irq);
set_irq_chip_and_handler_name(irq, &ipr_irq_chip,
handle_level_irq, "level");