X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Fite-boards%2Fgeneric%2Firq.c;h=cb71b9024d6f9bad0c2292d8a8c5fa4d94dd9f00;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=4be10d820687dbfec0c84b245ca2736187bf507a;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/mips/ite-boards/generic/irq.c b/arch/mips/ite-boards/generic/irq.c index 4be10d820..cb71b9024 100644 --- a/arch/mips/ite-boards/generic/irq.c +++ b/arch/mips/ite-boards/generic/irq.c @@ -32,7 +32,6 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include #include #include #include @@ -47,8 +46,8 @@ #include #include #include +#include -#include #include #include #include @@ -57,18 +56,6 @@ #include #include -#undef DEBUG_IRQ -#ifdef DEBUG_IRQ -/* note: prints function name for you */ -#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args) -#else -#define DPRINTK(fmt, args...) -#endif - -#ifdef CONFIG_KGDB -extern void breakpoint(void); -#endif - /* revisit */ #define EXT_IRQ0_TO_IP 2 /* IP 2 */ #define EXT_IRQ5_TO_IP 7 /* IP 7 */ @@ -85,111 +72,50 @@ extern asmlinkage void it8172_IRQ(void); struct it8172_intc_regs volatile *it8172_hw0_icregs = (struct it8172_intc_regs volatile *)(KSEG1ADDR(IT8172_PCI_IO_BASE + IT_INTC_BASE)); -/* Function for careful CP0 interrupt mask access */ -static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask) -{ - unsigned long status = read_c0_status(); - status &= ~((clr_mask & 0xFF) << 8); - status |= (set_mask & 0xFF) << 8; - write_c0_status(status); -} - -static inline void mask_irq(unsigned int irq_nr) -{ - modify_cp0_intmask(irq_nr, 0); -} - -static inline void unmask_irq(unsigned int irq_nr) -{ - modify_cp0_intmask(0, irq_nr); -} - -void local_disable_irq(unsigned int irq_nr) -{ - unsigned long flags; - - local_irq_save(flags); - disable_it8172_irq(irq_nr); - local_irq_restore(flags); -} - -void local_enable_irq(unsigned int irq_nr) +static void disable_it8172_irq(unsigned int irq_nr) { - unsigned long flags; - - local_irq_save(flags); - enable_it8172_irq(irq_nr); - local_irq_restore(flags); -} - - -void disable_it8172_irq(unsigned int irq_nr) -{ - DPRINTK("disable_it8172_irq %d\n", irq_nr); - if ( (irq_nr >= IT8172_LPC_IRQ_BASE) && (irq_nr <= IT8172_SERIRQ_15)) { /* LPC interrupt */ - DPRINTK("DB lpc_mask %x\n", it8172_hw0_icregs->lpc_mask); it8172_hw0_icregs->lpc_mask |= (1 << (irq_nr - IT8172_LPC_IRQ_BASE)); - DPRINTK("DA lpc_mask %x\n", it8172_hw0_icregs->lpc_mask); - } - else if ( (irq_nr >= IT8172_LB_IRQ_BASE) && (irq_nr <= IT8172_IOCHK_IRQ)) { + } else if ( (irq_nr >= IT8172_LB_IRQ_BASE) && (irq_nr <= IT8172_IOCHK_IRQ)) { /* Local Bus interrupt */ - DPRINTK("DB lb_mask %x\n", it8172_hw0_icregs->lb_mask); it8172_hw0_icregs->lb_mask |= (1 << (irq_nr - IT8172_LB_IRQ_BASE)); - DPRINTK("DA lb_mask %x\n", it8172_hw0_icregs->lb_mask); - } - else if ( (irq_nr >= IT8172_PCI_DEV_IRQ_BASE) && (irq_nr <= IT8172_DMA_IRQ)) { + } else if ( (irq_nr >= IT8172_PCI_DEV_IRQ_BASE) && (irq_nr <= IT8172_DMA_IRQ)) { /* PCI and other interrupts */ - DPRINTK("DB pci_mask %x\n", it8172_hw0_icregs->pci_mask); it8172_hw0_icregs->pci_mask |= (1 << (irq_nr - IT8172_PCI_DEV_IRQ_BASE)); - DPRINTK("DA pci_mask %x\n", it8172_hw0_icregs->pci_mask); - } - else if ( (irq_nr >= IT8172_NMI_IRQ_BASE) && (irq_nr <= IT8172_POWER_NMI_IRQ)) { + } else if ( (irq_nr >= IT8172_NMI_IRQ_BASE) && (irq_nr <= IT8172_POWER_NMI_IRQ)) { /* NMI interrupts */ - DPRINTK("DB nmi_mask %x\n", it8172_hw0_icregs->nmi_mask); it8172_hw0_icregs->nmi_mask |= (1 << (irq_nr - IT8172_NMI_IRQ_BASE)); - DPRINTK("DA nmi_mask %x\n", it8172_hw0_icregs->nmi_mask); - } - else { + } else { panic("disable_it8172_irq: bad irq %d", irq_nr); } } -void enable_it8172_irq(unsigned int irq_nr) +static void enable_it8172_irq(unsigned int irq_nr) { - DPRINTK("enable_it8172_irq %d\n", irq_nr); if ( (irq_nr >= IT8172_LPC_IRQ_BASE) && (irq_nr <= IT8172_SERIRQ_15)) { /* LPC interrupt */ - DPRINTK("EB before lpc_mask %x\n", it8172_hw0_icregs->lpc_mask); it8172_hw0_icregs->lpc_mask &= ~(1 << (irq_nr - IT8172_LPC_IRQ_BASE)); - DPRINTK("EA after lpc_mask %x\n", it8172_hw0_icregs->lpc_mask); } else if ( (irq_nr >= IT8172_LB_IRQ_BASE) && (irq_nr <= IT8172_IOCHK_IRQ)) { /* Local Bus interrupt */ - DPRINTK("EB lb_mask %x\n", it8172_hw0_icregs->lb_mask); it8172_hw0_icregs->lb_mask &= ~(1 << (irq_nr - IT8172_LB_IRQ_BASE)); - DPRINTK("EA lb_mask %x\n", it8172_hw0_icregs->lb_mask); } else if ( (irq_nr >= IT8172_PCI_DEV_IRQ_BASE) && (irq_nr <= IT8172_DMA_IRQ)) { /* PCI and other interrupts */ - DPRINTK("EB pci_mask %x\n", it8172_hw0_icregs->pci_mask); it8172_hw0_icregs->pci_mask &= ~(1 << (irq_nr - IT8172_PCI_DEV_IRQ_BASE)); - DPRINTK("EA pci_mask %x\n", it8172_hw0_icregs->pci_mask); } else if ( (irq_nr >= IT8172_NMI_IRQ_BASE) && (irq_nr <= IT8172_POWER_NMI_IRQ)) { /* NMI interrupts */ - DPRINTK("EB nmi_mask %x\n", it8172_hw0_icregs->nmi_mask); it8172_hw0_icregs->nmi_mask &= ~(1 << (irq_nr - IT8172_NMI_IRQ_BASE)); - DPRINTK("EA nmi_mask %x\n", it8172_hw0_icregs->nmi_mask); } else { panic("enable_it8172_irq: bad irq %d", irq_nr); @@ -247,11 +173,11 @@ void enable_cpu_timer(void) unsigned long flags; local_irq_save(flags); - unmask_irq(1<lb_mask = 0xffff; it8172_hw0_icregs->lpc_mask = 0xffff; @@ -297,13 +221,6 @@ void __init init_IRQ(void) } irq_desc[MIPS_CPU_TIMER_IRQ].handler = &cp0_irq_type; set_c0_status(ALLINTS_NOTIMER); - -#ifdef CONFIG_KGDB - /* If local serial I/O used for debug port, enter kgdb at once */ - puts("Waiting for kgdb to connect..."); - set_debug_traps(); - breakpoint(); -#endif } void mips_spurious_interrupt(struct pt_regs *regs) @@ -318,7 +235,6 @@ void mips_spurious_interrupt(struct pt_regs *regs) cause = read_c0_cause(); printk("status %x cause %x\n", status, cause); printk("epc %x badvaddr %x \n", regs->cp0_epc, regs->cp0_badvaddr); -// while(1); #endif } @@ -339,9 +255,7 @@ void it8172_hw0_irqdispatch(struct pt_regs *regs) status >>= 1; } irq += IT8172_PCI_DEV_IRQ_BASE; - //printk("pci int %d\n", irq); - } - else if (intstatus & 0x1) { + } else if (intstatus & 0x1) { /* Local Bus interrupt */ irq = 0; status |= it8172_hw0_icregs->lb_req; @@ -350,9 +264,7 @@ void it8172_hw0_irqdispatch(struct pt_regs *regs) status >>= 1; } irq += IT8172_LB_IRQ_BASE; - //printk("lb int %d\n", irq); - } - else if (intstatus & 0x2) { + } else if (intstatus & 0x2) { /* LPC interrupt */ /* Since some lpc interrupts are edge triggered, * we could lose an interrupt this way because @@ -366,7 +278,6 @@ void it8172_hw0_irqdispatch(struct pt_regs *regs) status >>= 1; } irq += IT8172_LPC_IRQ_BASE; - //printk("LPC int %d\n", irq); } else return;