 bbb33445b9
			
		
	
	
	bbb33445b9
	
	
	
		
			
			CP_INTC code in entry-macro.S code reads SECR1n register to see if an interrupt was indeed pending. This register is actually marked as write-only in the OMAP-L138 TRM. Moreover, the code just checks to see the entire register is non-zero and does not check a specific interrupt number. Fix this to use interrupt pending bit in GIPR register for this purpose. GIPR register is already being read to know the highest priority interrupt pending. Signed-off-by: Sekhar Nori <nsekhar@ti.com>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * Low-level IRQ helper macros for TI DaVinci-based platforms
 | |
|  *
 | |
|  * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
 | |
|  *
 | |
|  * 2007 (c) MontaVista Software, Inc. This file is licensed under
 | |
|  * the terms of the GNU General Public License version 2. This program
 | |
|  * is licensed "as is" without any warranty of any kind, whether express
 | |
|  * or implied.
 | |
|  */
 | |
| #include <mach/irqs.h>
 | |
| 
 | |
| 		.macro  get_irqnr_preamble, base, tmp
 | |
| 		ldr \base, =davinci_intc_base
 | |
| 		ldr \base, [\base]
 | |
| 		.endm
 | |
| 
 | |
| 		.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp
 | |
| #if defined(CONFIG_AINTC) && defined(CONFIG_CP_INTC)
 | |
| 		ldr \tmp, =davinci_intc_type
 | |
| 		ldr \tmp, [\tmp]
 | |
| 		cmp \tmp, #DAVINCI_INTC_TYPE_CP_INTC
 | |
| 		beq 1001f
 | |
| #endif
 | |
| #if defined(CONFIG_AINTC)
 | |
| 		ldr \tmp, [\base, #0x14]
 | |
| 		movs \tmp, \tmp, lsr #2
 | |
| 		sub \irqnr, \tmp, #1
 | |
| 		b 1002f
 | |
| #endif
 | |
| #if defined(CONFIG_CP_INTC)
 | |
| 1001:		ldr \irqnr, [\base, #0x80] /* get irq number */
 | |
| 		mov \tmp, \irqnr, lsr #31
 | |
| 		and \irqnr, \irqnr, #0xff  /* irq is in bits 0-9 */
 | |
| 		and \tmp, \tmp, #0x1
 | |
| 		cmp \tmp, #0x1
 | |
| #endif
 | |
| 1002:
 | |
| 		.endm
 |