aboutsummaryrefslogtreecommitdiffstats
path: root/arch/microblaze
diff options
context:
space:
mode:
Diffstat (limited to 'arch/microblaze')
-rw-r--r--arch/microblaze/kernel/intc.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c
index da33e45deba0..1293098ff70d 100644
--- a/arch/microblaze/kernel/intc.c
+++ b/arch/microblaze/kernel/intc.c
@@ -99,7 +99,7 @@ unsigned int get_irq(struct pt_regs *regs)
99 99
100void __init init_IRQ(void) 100void __init init_IRQ(void)
101{ 101{
102 u32 i, intr_type; 102 u32 i, intr_mask;
103 struct device_node *intc = NULL; 103 struct device_node *intc = NULL;
104#ifdef CONFIG_SELFMOD_INTC 104#ifdef CONFIG_SELFMOD_INTC
105 unsigned int intc_baseaddr = 0; 105 unsigned int intc_baseaddr = 0;
@@ -122,10 +122,9 @@ void __init init_IRQ(void)
122 nr_irq = be32_to_cpup(of_get_property(intc, 122 nr_irq = be32_to_cpup(of_get_property(intc,
123 "xlnx,num-intr-inputs", NULL)); 123 "xlnx,num-intr-inputs", NULL));
124 124
125 intr_type = 125 intr_mask =
126 be32_to_cpup(of_get_property(intc, 126 be32_to_cpup(of_get_property(intc, "xlnx,kind-of-intr", NULL));
127 "xlnx,kind-of-intr", NULL)); 127 if (intr_mask > (u32)((1ULL << nr_irq) - 1))
128 if (intr_type > (u32)((1ULL << nr_irq) - 1))
129 printk(KERN_INFO " ERROR: Mismatch in kind-of-intr param\n"); 128 printk(KERN_INFO " ERROR: Mismatch in kind-of-intr param\n");
130 129
131#ifdef CONFIG_SELFMOD_INTC 130#ifdef CONFIG_SELFMOD_INTC
@@ -147,7 +146,7 @@ void __init init_IRQ(void)
147 out_be32(intc_baseaddr + MER, MER_HIE | MER_ME); 146 out_be32(intc_baseaddr + MER, MER_HIE | MER_ME);
148 147
149 for (i = 0; i < nr_irq; ++i) { 148 for (i = 0; i < nr_irq; ++i) {
150 if (intr_type & (0x00000001 << i)) { 149 if (intr_mask & (0x00000001 << i)) {
151 irq_set_chip_and_handler_name(i, &intc_dev, 150 irq_set_chip_and_handler_name(i, &intc_dev,
152 handle_edge_irq, "edge"); 151 handle_edge_irq, "edge");
153 irq_clear_status_flags(i, IRQ_LEVEL); 152 irq_clear_status_flags(i, IRQ_LEVEL);