Commit 310a09d8 authored by Ralf Baechle's avatar Ralf Baechle
Browse files

[MIPS] Alchemy: Nuke homebrew setup_irq(), it's broken and unnecessary.

parent be5f1f21
Loading
Loading
Loading
Loading
+0 −32
Original line number Diff line number Diff line
@@ -318,38 +318,6 @@ static struct irq_chip level_irq_type = {
	.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)
{
	unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
+9 −2
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ static DEFINE_SPINLOCK(time_lock);
unsigned long wtimer;

#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;
	int time_elapsed;
@@ -117,6 +117,13 @@ irqreturn_t counter0_irq(int irq, void *dev_id)
	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
 * 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_sync();
		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.
		*/