aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-common/ints-priority.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/mach-common/ints-priority.c')
-rw-r--r--arch/blackfin/mach-common/ints-priority.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c
index 5fa536727c61..34e8a726ffda 100644
--- a/arch/blackfin/mach-common/ints-priority.c
+++ b/arch/blackfin/mach-common/ints-priority.c
@@ -243,12 +243,14 @@ int bfin_internal_set_wake(unsigned int irq, unsigned int state)
243#endif 243#endif
244 244
245static struct irq_chip bfin_core_irqchip = { 245static struct irq_chip bfin_core_irqchip = {
246 .name = "CORE",
246 .ack = bfin_ack_noop, 247 .ack = bfin_ack_noop,
247 .mask = bfin_core_mask_irq, 248 .mask = bfin_core_mask_irq,
248 .unmask = bfin_core_unmask_irq, 249 .unmask = bfin_core_unmask_irq,
249}; 250};
250 251
251static struct irq_chip bfin_internal_irqchip = { 252static struct irq_chip bfin_internal_irqchip = {
253 .name = "INTN",
252 .ack = bfin_ack_noop, 254 .ack = bfin_ack_noop,
253 .mask = bfin_internal_mask_irq, 255 .mask = bfin_internal_mask_irq,
254 .unmask = bfin_internal_unmask_irq, 256 .unmask = bfin_internal_unmask_irq,
@@ -278,6 +280,7 @@ static void bfin_generic_error_unmask_irq(unsigned int irq)
278} 280}
279 281
280static struct irq_chip bfin_generic_error_irqchip = { 282static struct irq_chip bfin_generic_error_irqchip = {
283 .name = "ERROR",
281 .ack = bfin_ack_noop, 284 .ack = bfin_ack_noop,
282 .mask_ack = bfin_generic_error_mask_irq, 285 .mask_ack = bfin_generic_error_mask_irq,
283 .mask = bfin_generic_error_mask_irq, 286 .mask = bfin_generic_error_mask_irq,
@@ -361,6 +364,14 @@ static void bfin_demux_error_irq(unsigned int int_err_irq,
361} 364}
362#endif /* BF537_GENERIC_ERROR_INT_DEMUX */ 365#endif /* BF537_GENERIC_ERROR_INT_DEMUX */
363 366
367static inline void bfin_set_irq_handler(unsigned irq, irq_flow_handler_t handle)
368{
369 struct irq_desc *desc = irq_desc + irq;
370 /* May not call generic set_irq_handler() due to spinlock
371 recursion. */
372 desc->handle_irq = handle;
373}
374
364#if !defined(CONFIG_BF54x) 375#if !defined(CONFIG_BF54x)
365 376
366static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; 377static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
@@ -473,9 +484,9 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
473 SSYNC(); 484 SSYNC();
474 485
475 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) 486 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
476 set_irq_handler(irq, handle_edge_irq); 487 bfin_set_irq_handler(irq, handle_edge_irq);
477 else 488 else
478 set_irq_handler(irq, handle_level_irq); 489 bfin_set_irq_handler(irq, handle_level_irq);
479 490
480 return 0; 491 return 0;
481} 492}
@@ -495,6 +506,7 @@ int bfin_gpio_set_wake(unsigned int irq, unsigned int state)
495#endif 506#endif
496 507
497static struct irq_chip bfin_gpio_irqchip = { 508static struct irq_chip bfin_gpio_irqchip = {
509 .name = "GPIO",
498 .ack = bfin_gpio_ack_irq, 510 .ack = bfin_gpio_ack_irq,
499 .mask = bfin_gpio_mask_irq, 511 .mask = bfin_gpio_mask_irq,
500 .mask_ack = bfin_gpio_mask_ack_irq, 512 .mask_ack = bfin_gpio_mask_ack_irq,
@@ -804,10 +816,10 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
804 816
805 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { 817 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
806 pint[bank]->edge_set = pintbit; 818 pint[bank]->edge_set = pintbit;
807 set_irq_handler(irq, handle_edge_irq); 819 bfin_set_irq_handler(irq, handle_edge_irq);
808 } else { 820 } else {
809 pint[bank]->edge_clear = pintbit; 821 pint[bank]->edge_clear = pintbit;
810 set_irq_handler(irq, handle_level_irq); 822 bfin_set_irq_handler(irq, handle_level_irq);
811 } 823 }
812 824
813 SSYNC(); 825 SSYNC();
@@ -884,6 +896,7 @@ void bfin_pm_restore(void)
884#endif 896#endif
885 897
886static struct irq_chip bfin_gpio_irqchip = { 898static struct irq_chip bfin_gpio_irqchip = {
899 .name = "GPIO",
887 .ack = bfin_gpio_ack_irq, 900 .ack = bfin_gpio_ack_irq,
888 .mask = bfin_gpio_mask_irq, 901 .mask = bfin_gpio_mask_irq,
889 .mask_ack = bfin_gpio_mask_ack_irq, 902 .mask_ack = bfin_gpio_mask_ack_irq,
@@ -1136,8 +1149,4 @@ void do_irq(int vec, struct pt_regs *fp)
1136 vec = ivg->irqno; 1149 vec = ivg->irqno;
1137 } 1150 }
1138 asm_do_IRQ(vec, fp); 1151 asm_do_IRQ(vec, fp);
1139
1140#ifdef CONFIG_KGDB
1141 kgdb_process_breakpoint();
1142#endif
1143} 1152}