[MIPS] Alchemy: Nuke homebrew setup_irq(), it's broken and unnecessary.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
be5f1f2114
commit
310a09d850
|
@ -318,38 +318,6 @@ static struct irq_chip level_irq_type = {
|
||||||
.end = end_irq,
|
.end = end_irq,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
void startup_match20_interrupt(irq_handler_t handler)
|
|
||||||
{
|
|
||||||
struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT];
|
|
||||||
|
|
||||||
static struct irqaction action;
|
|
||||||
memset(&action, 0, sizeof(struct irqaction));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a big problem.... since we didn't use request_irq
|
|
||||||
* when kernel/irq.c calls probe_irq_xxx this interrupt will
|
|
||||||
* be probed for usage. This will end up disabling the device :(
|
|
||||||
* Give it a bogus "action" pointer -- this will keep it from
|
|
||||||
* getting auto-probed!
|
|
||||||
*
|
|
||||||
* By setting the status to match that of request_irq() we
|
|
||||||
* can avoid it. --cgray
|
|
||||||
*/
|
|
||||||
action.dev_id = handler;
|
|
||||||
action.flags = IRQF_DISABLED;
|
|
||||||
cpus_clear(action.mask);
|
|
||||||
action.name = "Au1xxx TOY";
|
|
||||||
action.handler = handler;
|
|
||||||
action.next = NULL;
|
|
||||||
|
|
||||||
desc->action = &action;
|
|
||||||
desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
|
|
||||||
|
|
||||||
local_enable_irq(AU1000_TOY_MATCH2_INT);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void __init setup_local_irq(unsigned int irq_nr, int type, int int_req)
|
static void __init setup_local_irq(unsigned int irq_nr, int type, int int_req)
|
||||||
{
|
{
|
||||||
unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
|
unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
|
||||||
|
|
|
@ -67,7 +67,7 @@ static DEFINE_SPINLOCK(time_lock);
|
||||||
unsigned long wtimer;
|
unsigned long wtimer;
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
irqreturn_t counter0_irq(int irq, void *dev_id)
|
static irqreturn_t counter0_irq(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
unsigned long pc0;
|
unsigned long pc0;
|
||||||
int time_elapsed;
|
int time_elapsed;
|
||||||
|
@ -117,6 +117,13 @@ irqreturn_t counter0_irq(int irq, void *dev_id)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct irqaction counter0_action = {
|
||||||
|
.handler = counter0_irq,
|
||||||
|
.flags = IRQF_DISABLED,
|
||||||
|
.name = "alchemy-toy",
|
||||||
|
.dev_id = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
/* When we wakeup from sleep, we have to "catch up" on all of the
|
/* When we wakeup from sleep, we have to "catch up" on all of the
|
||||||
* timer ticks we have missed.
|
* timer ticks we have missed.
|
||||||
*/
|
*/
|
||||||
|
@ -280,7 +287,7 @@ void __init plat_timer_setup(struct irqaction *irq)
|
||||||
au_writel(last_match20 + MATCH20_INC, SYS_TOYMATCH2);
|
au_writel(last_match20 + MATCH20_INC, SYS_TOYMATCH2);
|
||||||
au_sync();
|
au_sync();
|
||||||
while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20);
|
while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20);
|
||||||
startup_match20_interrupt(counter0_irq);
|
setup_irq(AU1000_TOY_MATCH2_INT, &counter0_action);
|
||||||
|
|
||||||
/* We can use the real 'wait' instruction.
|
/* We can use the real 'wait' instruction.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue