TMR0_CMIA0, TMR0_CMIB0, TMR0_OVI0, TMR1_CMIA1, TMR1_CMIB1, TMR1_OVI1, /* interrupt groups */ IRQ, PINT, ADC, MTU20_ABCD, MTU20_VEF, MTU21_AB, MTU21_VU, MTU22_AB, MTU22_VU, MTU23_ABCD, MTU24_ABCD, MTU25_UVW, RTC, IIC30, IIC31, IIC32, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, SCIF6, SCIF7, RCAN0, RCAN1, TMR0, TMR1 }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(ADC_ADI, 92), INTC_IRQ(MTU2_TGI0A, 108), INTC_IRQ(MTU2_TGI0B, 109), INTC_IRQ(MTU2_TGI0C, 110), INTC_IRQ(MTU2_TGI0D, 111), INTC_IRQ(MTU2_TCI0V, 112), INTC_IRQ(MTU2_TGI0E, 113), INTC_IRQ(MTU2_TGI0F, 114),
SCIF0, SCIF1, SCIF2, SCIF3, SSU0, SSU1, SSI0_SSII, SSI1_SSII, SSI2_SSII, SSI3_SSII, /* ROM-DEC, SDHI, SRC, and IEB are SH7263 specific */ ROMDEC, FLCTL, SDHI, RTC, RCAN0, RCAN1, SRC, IEBI, /* interrupt groups */ PINT, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129), INTC_IRQ(DMAC6, 132), INTC_IRQ(DMAC6, 133), INTC_IRQ(DMAC7, 136), INTC_IRQ(DMAC7, 137),
DMAC0_DMINTA, DMAC4_DMINT4, DMAC5_DMINT5, DMAC6_DMINT6, DMAC7_DMINT7, RCAN0, RCAN1, SSI0_SSII, SSI1_SSII, TMR0, TMR1, /* interrupt groups */ PINT, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(ADC_ADI, 92), INTC_IRQ(MTU20_ABCD, 108), INTC_IRQ(MTU20_ABCD, 109), INTC_IRQ(MTU20_ABCD, 110), INTC_IRQ(MTU20_ABCD, 111), INTC_IRQ(MTU20_VEF, 112), INTC_IRQ(MTU20_VEF, 113),
#include <linux/io.h> enum { UNUSED = 0, /* interrupt sources */ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, WDT, EDMAC, CMT0, CMT1, SCIF0, SCIF1, SCIF2, HIF_HIFI, HIF_HIFBI, DMAC0, DMAC1, DMAC2, DMAC3, SIOF, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 80), INTC_IRQ(IRQ5, 81), INTC_IRQ(IRQ6, 82), INTC_IRQ(IRQ7, 83), INTC_IRQ(WDT, 84), INTC_IRQ(EDMAC, 85), INTC_IRQ(CMT0, 86), INTC_IRQ(CMT1, 87), INTC_IRQ(SCIF0, 88), INTC_IRQ(SCIF0, 89), INTC_IRQ(SCIF0, 90), INTC_IRQ(SCIF0, 91), INTC_IRQ(SCIF1, 92), INTC_IRQ(SCIF1, 93), INTC_IRQ(SCIF1, 94), INTC_IRQ(SCIF1, 95), INTC_IRQ(SCIF2, 96), INTC_IRQ(SCIF2, 97), INTC_IRQ(SCIF2, 98), INTC_IRQ(SCIF2, 99), INTC_IRQ(HIF_HIFI, 100), INTC_IRQ(HIF_HIFBI, 101), INTC_IRQ(DMAC0, 104), INTC_IRQ(DMAC1, 105), INTC_IRQ(DMAC2, 106), INTC_IRQ(DMAC3, 107), INTC_IRQ(SIOF, 108),
SDCARD, /* SD Card */ CF_CD, CF_IDE, /* CF Card Detect + CF IDE */ SM501, /* SM501 aka Voyager */ PCI_INTD_RTL8139, /* Ethernet controller */ PCI_INTC_PCI1520, /* Cardbus/PCMCIA bridge */ PCI_INTB_RTL8139, /* Ethernet controller with HUB (R2D-PLUS board) */ PCI_INTB_SLOT, /* PCI Slot 3.3v (R2D-1 board) */ PCI_INTA_SLOT, /* PCI Slot 3.3v */ TP, /* Touch Panel */ }; #ifdef CONFIG_RTS7751R2D_1 /* Vectors for R2D-1 */ static struct intc_vect vectors_r2d_1[] __initdata = { INTC_IRQ(EXT, IRQ_EXT), INTC_IRQ(RTC_T, IRQ_RTC_T), INTC_IRQ(RTC_A, IRQ_RTC_A), INTC_IRQ(AX88796, IRQ_AX88796), INTC_IRQ(SDCARD, IRQ_SDCARD), INTC_IRQ(CF_CD, IRQ_CF_CD), INTC_IRQ(CF_IDE, IRQ_CF_IDE), /* ng */ INTC_IRQ(SM501, IRQ_VOYAGER), INTC_IRQ(PCI_INTD_RTL8139, IRQ_PCI_INTD), INTC_IRQ(PCI_INTC_PCI1520, IRQ_PCI_INTC), INTC_IRQ(PCI_INTB_SLOT, IRQ_PCI_INTB), INTC_IRQ(PCI_INTA_SLOT, IRQ_PCI_INTA), INTC_IRQ(TP, IRQ_TP), }; /* IRLMSK mask register layout for R2D-1 */ static struct intc_mask_reg mask_registers_r2d_1[] __initdata = { { 0xa4000000, 0, 16, /* IRLMSK */ { TP, PCI_INTA_SLOT, PCI_INTB_SLOT,
UNUSED = 0, /* FPGA specific interrupt sources */ CF, /* Compact Flash */ SMBUS, /* SMBUS */ TP, /* Touch panel */ RTC, /* RTC Alarm */ TH_ALERT, /* Temperature sensor */ AX88796, /* Ethernet controller */ /* external bus connector */ EXT0, EXT1, EXT2, EXT3, EXT4, EXT5, EXT6, EXT7, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(CF, IRQ_CF), INTC_IRQ(SMBUS, IRQ_SMBUS), INTC_IRQ(TP, IRQ_TP), INTC_IRQ(RTC, IRQ_RTC), INTC_IRQ(TH_ALERT, IRQ_TH_ALERT), INTC_IRQ(EXT0, IRQ_EXT0), INTC_IRQ(EXT1, IRQ_EXT1), INTC_IRQ(EXT2, IRQ_EXT2), INTC_IRQ(EXT3, IRQ_EXT3), INTC_IRQ(EXT4, IRQ_EXT4), INTC_IRQ(EXT5, IRQ_EXT5), INTC_IRQ(EXT6, IRQ_EXT6), INTC_IRQ(EXT7, IRQ_EXT7), INTC_IRQ(AX88796, IRQ_AX88796), }; static struct intc_mask_reg mask_registers[] __initdata = {
UNUSED = 0, /* board specific interrupt sources */ AX88796, /* Ethernet controller */ PSW, /* Push Switch */ CF, /* Compact Flash */ PCI_A, PCI_B, PCI_C, PCI_D, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(PCI_A, 65), /* dirty: overwrite cpu vectors for pci */ INTC_IRQ(PCI_B, 66), INTC_IRQ(PCI_C, 67), INTC_IRQ(PCI_D, 68), INTC_IRQ(CF, IRQ_CF), INTC_IRQ(PSW, IRQ_PSW), INTC_IRQ(AX88796, IRQ_AX88796), }; static struct intc_mask_reg mask_registers[] __initdata = { { 0xa5000000, 0, 16, /* IRLMSK */ { PCI_A, PCI_B, PCI_C, PCI_D, CF, 0, 0, 0, 0, 0, 0, 0, 0, 0, PSW, AX88796 } }, }; static unsigned char irl2irq[HL_NR_IRL] __initdata = {
IIC3, CMT0, CMT1, BSC, WDT, MTU2_TCI3V, MTU2_TCI4V, MTU2S_TCI3V, MTU2S_TCI4V, POE2_OEI3, SCIF0, SCIF1, SCIF2, SCIF3, /* interrupt groups */ PINT, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(ADC_ADI0, 92), INTC_IRQ(ADC_ADI1, 96), INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129), INTC_IRQ(DMAC6, 132), INTC_IRQ(DMAC6, 133),
*/ #include <linux/init.h> #include <linux/irq.h> #include <linux/interrupt.h> #include <linux/io.h> #include <asm/se7721.h> enum { UNUSED = 0, /* board specific interrupt sources */ MRSHPC, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(MRSHPC, MRSHPC_IRQ0), }; static struct intc_prio_reg prio_registers[] __initdata = { { FPGA_ILSR6, 0, 8, 4, /* IRLMSK */ { 0, MRSHPC } }, }; static DECLARE_INTC_DESC(intc_desc, "SE7721", vectors, NULL, NULL, prio_registers, NULL); /* * Initialize IRQ setting */ void __init init_se7721_IRQ(void) {
/* board specific interrupt sources */ CF, /* Compact Flash */ TP, /* Touch panel */ SCIF1, /* FPGA SCIF1 */ SCIF0, /* FPGA SCIF0 */ SMBUS, /* SMBUS */ RTC, /* RTC Alarm */ AX88796, /* Ethernet controller */ PSW, /* Push Switch */ /* external bus connector */ EXT1, EXT2, EXT4, EXT5, EXT6, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(CF, IRQ_CF), INTC_IRQ(TP, IRQ_TP), INTC_IRQ(SCIF1, IRQ_SCIF1), INTC_IRQ(SCIF0, IRQ_SCIF0), INTC_IRQ(SMBUS, IRQ_SMBUS), INTC_IRQ(RTC, IRQ_RTC), INTC_IRQ(AX88796, IRQ_AX88796), INTC_IRQ(PSW, IRQ_PSW), INTC_IRQ(EXT1, IRQ_EXT1), INTC_IRQ(EXT2, IRQ_EXT2), INTC_IRQ(EXT4, IRQ_EXT4), INTC_IRQ(EXT5, IRQ_EXT5), INTC_IRQ(EXT6, IRQ_EXT6), }; static struct intc_mask_reg mask_registers[] __initdata = { { 0xa4000000, 0, 16, /* IRLMSK */
SCIF6_BRI, SCIF6_ERI, SCIF6_RXI, SCIF6_TXI, SCIF7_BRI, SCIF7_ERI, SCIF7_RXI, SCIF7_TXI, RCAN0, RCAN1, RCAN2, RSPIC0, RSPIC1, IEBC, CD_ROMD, NFMC, SDHI0, SDHI1, RTC, SRCC0, SRCC1, SRCC2, /* interrupt groups */ PINT, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, SCIF6, SCIF7, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(DMAC0, 108), INTC_IRQ(DMAC0, 109), INTC_IRQ(DMAC1, 112), INTC_IRQ(DMAC1, 113), INTC_IRQ(DMAC2, 116), INTC_IRQ(DMAC2, 117), INTC_IRQ(DMAC3, 120), INTC_IRQ(DMAC3, 121), INTC_IRQ(DMAC4, 124), INTC_IRQ(DMAC4, 125), INTC_IRQ(DMAC5, 128), INTC_IRQ(DMAC5, 129),
RTC_ARM, RTC_PRD, RTC_CUP, RCAN0_ERS, RCAN0_OVR, RCAN0_RM0, RCAN0_RM1, RCAN0_SLE, RCAN1_ERS, RCAN1_OVR, RCAN1_RM0, RCAN1_RM1, RCAN1_SLE, SRC_OVF, SRC_ODFI, SRC_IDEI, IEBI, /* interrupt groups */ PINT, DMAC0, DMAC1, DMAC2, DMAC3, DMAC4, DMAC5, DMAC6, DMAC7, MTU0_ABCD, MTU0_VEF, MTU1_AB, MTU1_VU, MTU2_AB, MTU2_VU, MTU3_ABCD, MTU4_ABCD, IIC30, IIC31, IIC32, IIC33, SCIF0, SCIF1, SCIF2, SCIF3, SSU0, SSU1, ROMDEC, SDHI, FLCTL, RTC, RCAN0, RCAN1, SRC }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(DMAC0_DEI, 108), INTC_IRQ(DMAC0_HEI, 109), INTC_IRQ(DMAC1_DEI, 112), INTC_IRQ(DMAC1_HEI, 113), INTC_IRQ(DMAC2_DEI, 116), INTC_IRQ(DMAC2_HEI, 117), INTC_IRQ(DMAC3_DEI, 120), INTC_IRQ(DMAC3_HEI, 121), INTC_IRQ(DMAC4_DEI, 124), INTC_IRQ(DMAC4_HEI, 125), INTC_IRQ(DMAC5_DEI, 128), INTC_IRQ(DMAC5_HEI, 129), INTC_IRQ(DMAC6_DEI, 132), INTC_IRQ(DMAC6_HEI, 133), INTC_IRQ(DMAC7_DEI, 136), INTC_IRQ(DMAC7_HEI, 137),
enum { UNUSED = 0, PCI_INTA, PCI_INTB, PCI_INTC, PCI_INTD, ATA, FATA, POWER, BUTTON, }; static struct intc_vect vectors_landisk[] __initdata = { INTC_IRQ(PCI_INTA, IRQ_PCIINTA), INTC_IRQ(PCI_INTB, IRQ_PCIINTB), INTC_IRQ(PCI_INTC, IRQ_PCIINTC), INTC_IRQ(PCI_INTD, IRQ_PCIINTD), INTC_IRQ(ATA, IRQ_ATA), INTC_IRQ(FATA, IRQ_FATA), INTC_IRQ(POWER, IRQ_POWER), INTC_IRQ(BUTTON, IRQ_BUTTON), }; static struct intc_mask_reg mask_registers_landisk[] __initdata = { { PA_IMASK, 0, 8, { BUTTON, POWER, FATA, ATA, PCI_INTD, PCI_INTC, PCI_INTB, PCI_INTA, } },
IRQ8, IRQ9, IRQ10, IRQ11, IRQ12, IRQ13, IRQ14, IRQ15, PINT0, PINT1, PINT2, PINT3, PINT4, PINT5, PINT6, PINT7, SINT8, SINT7, SINT6, SINT5, SINT4, SINT3, SINT2, SINT1, SCIF0, SCIF1, MTU2_GROUP1, MTU2_GROUP2, MTU2_GROUP3, MTU2_GROUP4, MTU2_GROUP5, MTU2_TGI3B, MTU2_TGI3C, /* interrupt groups */ PINT, }; static struct intc_vect vectors[] __initdata = { INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), INTC_IRQ(IRQ4, 68), INTC_IRQ(IRQ5, 69), INTC_IRQ(IRQ6, 70), INTC_IRQ(IRQ7, 71), INTC_IRQ(IRQ8, 72), INTC_IRQ(IRQ9, 73), INTC_IRQ(IRQ10, 74), INTC_IRQ(IRQ11, 75), INTC_IRQ(IRQ12, 76), INTC_IRQ(IRQ13, 77), INTC_IRQ(IRQ14, 78), INTC_IRQ(IRQ15, 79), INTC_IRQ(PINT0, 80), INTC_IRQ(PINT1, 81), INTC_IRQ(PINT2, 82), INTC_IRQ(PINT3, 83), INTC_IRQ(PINT4, 84), INTC_IRQ(PINT5, 85), INTC_IRQ(PINT6, 86), INTC_IRQ(PINT7, 87), INTC_IRQ(SINT8, 94), INTC_IRQ(SINT7, 95), INTC_IRQ(SINT6, 96), INTC_IRQ(SINT5, 97),