static void __init tx4938_irq_pic_init(void) { unsigned long flags; int i; for (i = TX4938_IRQ_PIC_BEG; i <= TX4938_IRQ_PIC_END; i++) { irq_desc[i].status = IRQ_DISABLED; irq_desc[i].action = 0; irq_desc[i].depth = 2; irq_desc[i].handler = &tx4938_irq_pic_type; } setup_irq(TX4938_IRQ_NEST_PIC_ON_CP0, &tx4938_irq_pic_action); spin_lock_irqsave(&tx4938_pic_lock, flags); TX4938_WR(0xff1ff640, 0x6); /* irq level mask -- only accept hightest */ TX4938_WR(0xff1ff600, TX4938_RD(0xff1ff600) | 0x1); /* irq enable */ spin_unlock_irqrestore(&tx4938_pic_lock, flags); return; }
static void tx4938_irq_pic_modify(unsigned pic_reg, unsigned clr_bits, unsigned set_bits) { unsigned long val = 0; val = TX4938_RD(pic_reg); val &= (~clr_bits); val |= (set_bits); TX4938_WR(pic_reg, val); mmiowb(); TX4938_RD(pic_reg); return; }
void __init arch_init_irq(void) { extern void tx4938_irq_init(void); /* Now, interrupt control disabled, */ /* all IRC interrupts are masked, */ /* all IRC interrupt mode are Low Active. */ /* mask all IOC interrupts */ *rbtx4938_imask_ptr = 0; /* clear SoftInt interrupts */ *rbtx4938_softint_ptr = 0; tx4938_irq_init(); toshiba_rbtx4938_irq_ioc_init(); /* Onboard 10M Ether: High Active */ TX4938_WR(TX4938_MKA(TX4938_IRC_IRDM0), 0x00000040); if (tx4938_ccfgptr->pcfg & TX4938_PCFG_SPI_SEL) { txx9_spi_irqinit(RBTX4938_IRQ_IRC_SPI); } wbflush(); }