xref: /openbmc/linux/kernel/irq/chip.c (revision 9ac8d3fb)
1 /*
2  * linux/kernel/irq/chip.c
3  *
4  * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5  * Copyright (C) 2005-2006, Thomas Gleixner, Russell King
6  *
7  * This file contains the core interrupt handling code, for irq-chip
8  * based architectures.
9  *
10  * Detailed information is available in Documentation/DocBook/genericirq
11  */
12 
13 #include <linux/irq.h>
14 #include <linux/msi.h>
15 #include <linux/module.h>
16 #include <linux/interrupt.h>
17 #include <linux/kernel_stat.h>
18 
19 #include "internals.h"
20 
21 /**
22  *	dynamic_irq_init - initialize a dynamically allocated irq
23  *	@irq:	irq number to initialize
24  */
25 void dynamic_irq_init(unsigned int irq)
26 {
27 	struct irq_desc *desc = irq_to_desc(irq);
28 	unsigned long flags;
29 
30 	if (!desc) {
31 		WARN(1, KERN_ERR "Trying to initialize invalid IRQ%d\n", irq);
32 		return;
33 	}
34 
35 	/* Ensure we don't have left over values from a previous use of this irq */
36 	spin_lock_irqsave(&desc->lock, flags);
37 	desc->status = IRQ_DISABLED;
38 	desc->chip = &no_irq_chip;
39 	desc->handle_irq = handle_bad_irq;
40 	desc->depth = 1;
41 	desc->msi_desc = NULL;
42 	desc->handler_data = NULL;
43 	desc->chip_data = NULL;
44 	desc->action = NULL;
45 	desc->irq_count = 0;
46 	desc->irqs_unhandled = 0;
47 #ifdef CONFIG_SMP
48 	cpus_setall(desc->affinity);
49 #endif
50 	spin_unlock_irqrestore(&desc->lock, flags);
51 }
52 
53 /**
54  *	dynamic_irq_cleanup - cleanup a dynamically allocated irq
55  *	@irq:	irq number to initialize
56  */
57 void dynamic_irq_cleanup(unsigned int irq)
58 {
59 	struct irq_desc *desc = irq_to_desc(irq);
60 	unsigned long flags;
61 
62 	if (!desc) {
63 		WARN(1, KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq);
64 		return;
65 	}
66 
67 	spin_lock_irqsave(&desc->lock, flags);
68 	if (desc->action) {
69 		spin_unlock_irqrestore(&desc->lock, flags);
70 		WARN(1, KERN_ERR "Destroying IRQ%d without calling free_irq\n",
71 			irq);
72 		return;
73 	}
74 	desc->msi_desc = NULL;
75 	desc->handler_data = NULL;
76 	desc->chip_data = NULL;
77 	desc->handle_irq = handle_bad_irq;
78 	desc->chip = &no_irq_chip;
79 	desc->name = NULL;
80 	spin_unlock_irqrestore(&desc->lock, flags);
81 }
82 
83 
84 /**
85  *	set_irq_chip - set the irq chip for an irq
86  *	@irq:	irq number
87  *	@chip:	pointer to irq chip description structure
88  */
89 int set_irq_chip(unsigned int irq, struct irq_chip *chip)
90 {
91 	struct irq_desc *desc = irq_to_desc(irq);
92 	unsigned long flags;
93 
94 	if (!desc) {
95 		WARN(1, KERN_ERR "Trying to install chip for IRQ%d\n", irq);
96 		return -EINVAL;
97 	}
98 
99 	if (!chip)
100 		chip = &no_irq_chip;
101 
102 	spin_lock_irqsave(&desc->lock, flags);
103 	irq_chip_set_defaults(chip);
104 	desc->chip = chip;
105 	spin_unlock_irqrestore(&desc->lock, flags);
106 
107 	return 0;
108 }
109 EXPORT_SYMBOL(set_irq_chip);
110 
111 /**
112  *	set_irq_type - set the irq trigger type for an irq
113  *	@irq:	irq number
114  *	@type:	IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h
115  */
116 int set_irq_type(unsigned int irq, unsigned int type)
117 {
118 	struct irq_desc *desc = irq_to_desc(irq);
119 	unsigned long flags;
120 	int ret = -ENXIO;
121 
122 	if (!desc) {
123 		printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq);
124 		return -ENODEV;
125 	}
126 
127 	if (type == IRQ_TYPE_NONE)
128 		return 0;
129 
130 	spin_lock_irqsave(&desc->lock, flags);
131 	ret = __irq_set_trigger(desc, irq, type);
132 	spin_unlock_irqrestore(&desc->lock, flags);
133 	return ret;
134 }
135 EXPORT_SYMBOL(set_irq_type);
136 
137 /**
138  *	set_irq_data - set irq type data for an irq
139  *	@irq:	Interrupt number
140  *	@data:	Pointer to interrupt specific data
141  *
142  *	Set the hardware irq controller data for an irq
143  */
144 int set_irq_data(unsigned int irq, void *data)
145 {
146 	struct irq_desc *desc = irq_to_desc(irq);
147 	unsigned long flags;
148 
149 	if (!desc) {
150 		printk(KERN_ERR
151 		       "Trying to install controller data for IRQ%d\n", irq);
152 		return -EINVAL;
153 	}
154 
155 	spin_lock_irqsave(&desc->lock, flags);
156 	desc->handler_data = data;
157 	spin_unlock_irqrestore(&desc->lock, flags);
158 	return 0;
159 }
160 EXPORT_SYMBOL(set_irq_data);
161 
162 /**
163  *	set_irq_data - set irq type data for an irq
164  *	@irq:	Interrupt number
165  *	@entry:	Pointer to MSI descriptor data
166  *
167  *	Set the hardware irq controller data for an irq
168  */
169 int set_irq_msi(unsigned int irq, struct msi_desc *entry)
170 {
171 	struct irq_desc *desc = irq_to_desc(irq);
172 	unsigned long flags;
173 
174 	if (!desc) {
175 		printk(KERN_ERR
176 		       "Trying to install msi data for IRQ%d\n", irq);
177 		return -EINVAL;
178 	}
179 
180 	spin_lock_irqsave(&desc->lock, flags);
181 	desc->msi_desc = entry;
182 	if (entry)
183 		entry->irq = irq;
184 	spin_unlock_irqrestore(&desc->lock, flags);
185 	return 0;
186 }
187 
188 /**
189  *	set_irq_chip_data - set irq chip data for an irq
190  *	@irq:	Interrupt number
191  *	@data:	Pointer to chip specific data
192  *
193  *	Set the hardware irq chip data for an irq
194  */
195 int set_irq_chip_data(unsigned int irq, void *data)
196 {
197 	struct irq_desc *desc = irq_to_desc(irq);
198 	unsigned long flags;
199 
200 	if (!desc) {
201 		printk(KERN_ERR
202 		       "Trying to install chip data for IRQ%d\n", irq);
203 		return -EINVAL;
204 	}
205 
206 	if (!desc->chip) {
207 		printk(KERN_ERR "BUG: bad set_irq_chip_data(IRQ#%d)\n", irq);
208 		return -EINVAL;
209 	}
210 
211 	spin_lock_irqsave(&desc->lock, flags);
212 	desc->chip_data = data;
213 	spin_unlock_irqrestore(&desc->lock, flags);
214 
215 	return 0;
216 }
217 EXPORT_SYMBOL(set_irq_chip_data);
218 
219 /*
220  * default enable function
221  */
222 static void default_enable(unsigned int irq)
223 {
224 	struct irq_desc *desc = irq_to_desc(irq);
225 
226 	desc->chip->unmask(irq);
227 	desc->status &= ~IRQ_MASKED;
228 }
229 
230 /*
231  * default disable function
232  */
233 static void default_disable(unsigned int irq)
234 {
235 }
236 
237 /*
238  * default startup function
239  */
240 static unsigned int default_startup(unsigned int irq)
241 {
242 	struct irq_desc *desc = irq_to_desc(irq);
243 
244 	desc->chip->enable(irq);
245 	return 0;
246 }
247 
248 /*
249  * default shutdown function
250  */
251 static void default_shutdown(unsigned int irq)
252 {
253 	struct irq_desc *desc = irq_to_desc(irq);
254 
255 	desc->chip->mask(irq);
256 	desc->status |= IRQ_MASKED;
257 }
258 
259 /*
260  * Fixup enable/disable function pointers
261  */
262 void irq_chip_set_defaults(struct irq_chip *chip)
263 {
264 	if (!chip->enable)
265 		chip->enable = default_enable;
266 	if (!chip->disable)
267 		chip->disable = default_disable;
268 	if (!chip->startup)
269 		chip->startup = default_startup;
270 	/*
271 	 * We use chip->disable, when the user provided its own. When
272 	 * we have default_disable set for chip->disable, then we need
273 	 * to use default_shutdown, otherwise the irq line is not
274 	 * disabled on free_irq():
275 	 */
276 	if (!chip->shutdown)
277 		chip->shutdown = chip->disable != default_disable ?
278 			chip->disable : default_shutdown;
279 	if (!chip->name)
280 		chip->name = chip->typename;
281 	if (!chip->end)
282 		chip->end = dummy_irq_chip.end;
283 }
284 
285 static inline void mask_ack_irq(struct irq_desc *desc, int irq)
286 {
287 	if (desc->chip->mask_ack)
288 		desc->chip->mask_ack(irq);
289 	else {
290 		desc->chip->mask(irq);
291 		desc->chip->ack(irq);
292 	}
293 }
294 
295 /**
296  *	handle_simple_irq - Simple and software-decoded IRQs.
297  *	@irq:	the interrupt number
298  *	@desc:	the interrupt description structure for this irq
299  *
300  *	Simple interrupts are either sent from a demultiplexing interrupt
301  *	handler or come from hardware, where no interrupt hardware control
302  *	is necessary.
303  *
304  *	Note: The caller is expected to handle the ack, clear, mask and
305  *	unmask issues if necessary.
306  */
307 void
308 handle_simple_irq(unsigned int irq, struct irq_desc *desc)
309 {
310 	struct irqaction *action;
311 	irqreturn_t action_ret;
312 
313 	spin_lock(&desc->lock);
314 
315 	if (unlikely(desc->status & IRQ_INPROGRESS))
316 		goto out_unlock;
317 	desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
318 	kstat_incr_irqs_this_cpu(irq, desc);
319 
320 	action = desc->action;
321 	if (unlikely(!action || (desc->status & IRQ_DISABLED)))
322 		goto out_unlock;
323 
324 	desc->status |= IRQ_INPROGRESS;
325 	spin_unlock(&desc->lock);
326 
327 	action_ret = handle_IRQ_event(irq, action);
328 	if (!noirqdebug)
329 		note_interrupt(irq, desc, action_ret);
330 
331 	spin_lock(&desc->lock);
332 	desc->status &= ~IRQ_INPROGRESS;
333 out_unlock:
334 	spin_unlock(&desc->lock);
335 }
336 
337 /**
338  *	handle_level_irq - Level type irq handler
339  *	@irq:	the interrupt number
340  *	@desc:	the interrupt description structure for this irq
341  *
342  *	Level type interrupts are active as long as the hardware line has
343  *	the active level. This may require to mask the interrupt and unmask
344  *	it after the associated handler has acknowledged the device, so the
345  *	interrupt line is back to inactive.
346  */
347 void
348 handle_level_irq(unsigned int irq, struct irq_desc *desc)
349 {
350 	struct irqaction *action;
351 	irqreturn_t action_ret;
352 
353 	spin_lock(&desc->lock);
354 	mask_ack_irq(desc, irq);
355 
356 	if (unlikely(desc->status & IRQ_INPROGRESS))
357 		goto out_unlock;
358 	desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
359 	kstat_incr_irqs_this_cpu(irq, desc);
360 
361 	/*
362 	 * If its disabled or no action available
363 	 * keep it masked and get out of here
364 	 */
365 	action = desc->action;
366 	if (unlikely(!action || (desc->status & IRQ_DISABLED)))
367 		goto out_unlock;
368 
369 	desc->status |= IRQ_INPROGRESS;
370 	spin_unlock(&desc->lock);
371 
372 	action_ret = handle_IRQ_event(irq, action);
373 	if (!noirqdebug)
374 		note_interrupt(irq, desc, action_ret);
375 
376 	spin_lock(&desc->lock);
377 	desc->status &= ~IRQ_INPROGRESS;
378 	if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask)
379 		desc->chip->unmask(irq);
380 out_unlock:
381 	spin_unlock(&desc->lock);
382 }
383 
384 /**
385  *	handle_fasteoi_irq - irq handler for transparent controllers
386  *	@irq:	the interrupt number
387  *	@desc:	the interrupt description structure for this irq
388  *
389  *	Only a single callback will be issued to the chip: an ->eoi()
390  *	call when the interrupt has been serviced. This enables support
391  *	for modern forms of interrupt handlers, which handle the flow
392  *	details in hardware, transparently.
393  */
394 void
395 handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
396 {
397 	struct irqaction *action;
398 	irqreturn_t action_ret;
399 
400 	spin_lock(&desc->lock);
401 
402 	if (unlikely(desc->status & IRQ_INPROGRESS))
403 		goto out;
404 
405 	desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
406 	kstat_incr_irqs_this_cpu(irq, desc);
407 
408 	/*
409 	 * If its disabled or no action available
410 	 * then mask it and get out of here:
411 	 */
412 	action = desc->action;
413 	if (unlikely(!action || (desc->status & IRQ_DISABLED))) {
414 		desc->status |= IRQ_PENDING;
415 		if (desc->chip->mask)
416 			desc->chip->mask(irq);
417 		goto out;
418 	}
419 
420 	desc->status |= IRQ_INPROGRESS;
421 	desc->status &= ~IRQ_PENDING;
422 	spin_unlock(&desc->lock);
423 
424 	action_ret = handle_IRQ_event(irq, action);
425 	if (!noirqdebug)
426 		note_interrupt(irq, desc, action_ret);
427 
428 	spin_lock(&desc->lock);
429 	desc->status &= ~IRQ_INPROGRESS;
430 out:
431 	desc->chip->eoi(irq);
432 
433 	spin_unlock(&desc->lock);
434 }
435 
436 /**
437  *	handle_edge_irq - edge type IRQ handler
438  *	@irq:	the interrupt number
439  *	@desc:	the interrupt description structure for this irq
440  *
441  *	Interrupt occures on the falling and/or rising edge of a hardware
442  *	signal. The occurence is latched into the irq controller hardware
443  *	and must be acked in order to be reenabled. After the ack another
444  *	interrupt can happen on the same source even before the first one
445  *	is handled by the assosiacted event handler. If this happens it
446  *	might be necessary to disable (mask) the interrupt depending on the
447  *	controller hardware. This requires to reenable the interrupt inside
448  *	of the loop which handles the interrupts which have arrived while
449  *	the handler was running. If all pending interrupts are handled, the
450  *	loop is left.
451  */
452 void
453 handle_edge_irq(unsigned int irq, struct irq_desc *desc)
454 {
455 	spin_lock(&desc->lock);
456 
457 	desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
458 
459 	/*
460 	 * If we're currently running this IRQ, or its disabled,
461 	 * we shouldn't process the IRQ. Mark it pending, handle
462 	 * the necessary masking and go out
463 	 */
464 	if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) ||
465 		    !desc->action)) {
466 		desc->status |= (IRQ_PENDING | IRQ_MASKED);
467 		mask_ack_irq(desc, irq);
468 		goto out_unlock;
469 	}
470 	kstat_incr_irqs_this_cpu(irq, desc);
471 
472 	/* Start handling the irq */
473 	desc->chip->ack(irq);
474 
475 	/* Mark the IRQ currently in progress.*/
476 	desc->status |= IRQ_INPROGRESS;
477 
478 	do {
479 		struct irqaction *action = desc->action;
480 		irqreturn_t action_ret;
481 
482 		if (unlikely(!action)) {
483 			desc->chip->mask(irq);
484 			goto out_unlock;
485 		}
486 
487 		/*
488 		 * When another irq arrived while we were handling
489 		 * one, we could have masked the irq.
490 		 * Renable it, if it was not disabled in meantime.
491 		 */
492 		if (unlikely((desc->status &
493 			       (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
494 			      (IRQ_PENDING | IRQ_MASKED))) {
495 			desc->chip->unmask(irq);
496 			desc->status &= ~IRQ_MASKED;
497 		}
498 
499 		desc->status &= ~IRQ_PENDING;
500 		spin_unlock(&desc->lock);
501 		action_ret = handle_IRQ_event(irq, action);
502 		if (!noirqdebug)
503 			note_interrupt(irq, desc, action_ret);
504 		spin_lock(&desc->lock);
505 
506 	} while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
507 
508 	desc->status &= ~IRQ_INPROGRESS;
509 out_unlock:
510 	spin_unlock(&desc->lock);
511 }
512 
513 /**
514  *	handle_percpu_IRQ - Per CPU local irq handler
515  *	@irq:	the interrupt number
516  *	@desc:	the interrupt description structure for this irq
517  *
518  *	Per CPU interrupts on SMP machines without locking requirements
519  */
520 void
521 handle_percpu_irq(unsigned int irq, struct irq_desc *desc)
522 {
523 	irqreturn_t action_ret;
524 
525 	kstat_incr_irqs_this_cpu(irq, desc);
526 
527 	if (desc->chip->ack)
528 		desc->chip->ack(irq);
529 
530 	action_ret = handle_IRQ_event(irq, desc->action);
531 	if (!noirqdebug)
532 		note_interrupt(irq, desc, action_ret);
533 
534 	if (desc->chip->eoi)
535 		desc->chip->eoi(irq);
536 }
537 
538 void
539 __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
540 		  const char *name)
541 {
542 	struct irq_desc *desc = irq_to_desc(irq);
543 	unsigned long flags;
544 
545 	if (!desc) {
546 		printk(KERN_ERR
547 		       "Trying to install type control for IRQ%d\n", irq);
548 		return;
549 	}
550 
551 	if (!handle)
552 		handle = handle_bad_irq;
553 	else if (desc->chip == &no_irq_chip) {
554 		printk(KERN_WARNING "Trying to install %sinterrupt handler "
555 		       "for IRQ%d\n", is_chained ? "chained " : "", irq);
556 		/*
557 		 * Some ARM implementations install a handler for really dumb
558 		 * interrupt hardware without setting an irq_chip. This worked
559 		 * with the ARM no_irq_chip but the check in setup_irq would
560 		 * prevent us to setup the interrupt at all. Switch it to
561 		 * dummy_irq_chip for easy transition.
562 		 */
563 		desc->chip = &dummy_irq_chip;
564 	}
565 
566 	spin_lock_irqsave(&desc->lock, flags);
567 
568 	/* Uninstall? */
569 	if (handle == handle_bad_irq) {
570 		if (desc->chip != &no_irq_chip)
571 			mask_ack_irq(desc, irq);
572 		desc->status |= IRQ_DISABLED;
573 		desc->depth = 1;
574 	}
575 	desc->handle_irq = handle;
576 	desc->name = name;
577 
578 	if (handle != handle_bad_irq && is_chained) {
579 		desc->status &= ~IRQ_DISABLED;
580 		desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE;
581 		desc->depth = 0;
582 		desc->chip->startup(irq);
583 	}
584 	spin_unlock_irqrestore(&desc->lock, flags);
585 }
586 
587 void
588 set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
589 			 irq_flow_handler_t handle)
590 {
591 	set_irq_chip(irq, chip);
592 	__set_irq_handler(irq, handle, 0, NULL);
593 }
594 
595 void
596 set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
597 			      irq_flow_handler_t handle, const char *name)
598 {
599 	set_irq_chip(irq, chip);
600 	__set_irq_handler(irq, handle, 0, name);
601 }
602 
603 void __init set_irq_noprobe(unsigned int irq)
604 {
605 	struct irq_desc *desc = irq_to_desc(irq);
606 	unsigned long flags;
607 
608 	if (!desc) {
609 		printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq);
610 		return;
611 	}
612 
613 	spin_lock_irqsave(&desc->lock, flags);
614 	desc->status |= IRQ_NOPROBE;
615 	spin_unlock_irqrestore(&desc->lock, flags);
616 }
617 
618 void __init set_irq_probe(unsigned int irq)
619 {
620 	struct irq_desc *desc = irq_to_desc(irq);
621 	unsigned long flags;
622 
623 	if (!desc) {
624 		printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq);
625 		return;
626 	}
627 
628 	spin_lock_irqsave(&desc->lock, flags);
629 	desc->status &= ~IRQ_NOPROBE;
630 	spin_unlock_irqrestore(&desc->lock, flags);
631 }
632