1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * arch/arm/include/asm/hardware/entry-macro-iomd.S 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Low-level IRQ helper macros for IOC/IOMD based platforms 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public 7*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any 8*4882a593Smuzhiyun * warranty of any kind, whether express or implied. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun/* IOC / IOMD based hardware */ 12*4882a593Smuzhiyun#include <asm/hardware/iomd.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun .macro get_irqnr_and_base, irqnr, irqstat, base, tmp 15*4882a593Smuzhiyun ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first 16*4882a593Smuzhiyun ldr \tmp, =irq_prio_h 17*4882a593Smuzhiyun teq \irqstat, #0 18*4882a593Smuzhiyun#ifdef IOMD_BASE 19*4882a593Smuzhiyun ldrbeq \irqstat, [\base, #IOMD_DMAREQ] @ get dma 20*4882a593Smuzhiyun addeq \tmp, \tmp, #256 @ irq_prio_h table size 21*4882a593Smuzhiyun teqeq \irqstat, #0 22*4882a593Smuzhiyun bne 2406f 23*4882a593Smuzhiyun#endif 24*4882a593Smuzhiyun ldrbeq \irqstat, [\base, #IOMD_IRQREQA] @ get low priority 25*4882a593Smuzhiyun addeq \tmp, \tmp, #256 @ irq_prio_d table size 26*4882a593Smuzhiyun teqeq \irqstat, #0 27*4882a593Smuzhiyun#ifdef IOMD_IRQREQC 28*4882a593Smuzhiyun ldrbeq \irqstat, [\base, #IOMD_IRQREQC] 29*4882a593Smuzhiyun addeq \tmp, \tmp, #256 @ irq_prio_l table size 30*4882a593Smuzhiyun teqeq \irqstat, #0 31*4882a593Smuzhiyun#endif 32*4882a593Smuzhiyun#ifdef IOMD_IRQREQD 33*4882a593Smuzhiyun ldrbeq \irqstat, [\base, #IOMD_IRQREQD] 34*4882a593Smuzhiyun addeq \tmp, \tmp, #256 @ irq_prio_lc table size 35*4882a593Smuzhiyun teqeq \irqstat, #0 36*4882a593Smuzhiyun#endif 37*4882a593Smuzhiyun2406: ldrbne \irqnr, [\tmp, \irqstat] @ get IRQ number 38*4882a593Smuzhiyun .endm 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun/* 41*4882a593Smuzhiyun * Interrupt table (incorporates priority). Please note that we 42*4882a593Smuzhiyun * rely on the order of these tables (see above code). 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun .align 5 45*4882a593Smuzhiyunirq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 46*4882a593Smuzhiyun .byte 12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 47*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 48*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 49*4882a593Smuzhiyun .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 50*4882a593Smuzhiyun .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 51*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 52*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 53*4882a593Smuzhiyun .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 54*4882a593Smuzhiyun .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 55*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 56*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 57*4882a593Smuzhiyun .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 58*4882a593Smuzhiyun .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 59*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 60*4882a593Smuzhiyun .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 61*4882a593Smuzhiyun#ifdef IOMD_BASE 62*4882a593Smuzhiyunirq_prio_d: .byte 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 63*4882a593Smuzhiyun .byte 20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 64*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 65*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 66*4882a593Smuzhiyun .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 67*4882a593Smuzhiyun .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 68*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 69*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 70*4882a593Smuzhiyun .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 71*4882a593Smuzhiyun .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 72*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 73*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 74*4882a593Smuzhiyun .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 75*4882a593Smuzhiyun .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 76*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 77*4882a593Smuzhiyun .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 78*4882a593Smuzhiyun#endif 79*4882a593Smuzhiyunirq_prio_l: .byte 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 80*4882a593Smuzhiyun .byte 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 81*4882a593Smuzhiyun .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 82*4882a593Smuzhiyun .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 83*4882a593Smuzhiyun .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 84*4882a593Smuzhiyun .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 85*4882a593Smuzhiyun .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 86*4882a593Smuzhiyun .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 87*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 88*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 89*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 90*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 91*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 92*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 93*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 94*4882a593Smuzhiyun .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 95*4882a593Smuzhiyun#ifdef IOMD_IRQREQC 96*4882a593Smuzhiyunirq_prio_lc: .byte 24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 97*4882a593Smuzhiyun .byte 28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 98*4882a593Smuzhiyun .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 99*4882a593Smuzhiyun .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 100*4882a593Smuzhiyun .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 101*4882a593Smuzhiyun .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 102*4882a593Smuzhiyun .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 103*4882a593Smuzhiyun .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 104*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 105*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 106*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 107*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 108*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 109*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 110*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 111*4882a593Smuzhiyun .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 112*4882a593Smuzhiyun#endif 113*4882a593Smuzhiyun#ifdef IOMD_IRQREQD 114*4882a593Smuzhiyunirq_prio_ld: .byte 40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 115*4882a593Smuzhiyun .byte 44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 116*4882a593Smuzhiyun .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 117*4882a593Smuzhiyun .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 118*4882a593Smuzhiyun .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 119*4882a593Smuzhiyun .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 120*4882a593Smuzhiyun .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 121*4882a593Smuzhiyun .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 122*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 123*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 124*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 125*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 126*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 127*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 128*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 129*4882a593Smuzhiyun .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 130*4882a593Smuzhiyun#endif 131*4882a593Smuzhiyun 132