Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c009442 authored by Ralf Baechle's avatar Ralf Baechle
Browse files

[MIPS] IP27: Fix collision with hardcoded interrupt number.

parent 0307e8d0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ static struct hw_interrupt_type bridge_irq_type = {

static unsigned long irq_map[NR_IRQS / BITS_PER_LONG];

static int allocate_irqno(void)
int allocate_irqno(void)
{
	int irq;

+59 −2
Original line number Diff line number Diff line
@@ -89,11 +89,13 @@ static int set_rtc_mmss(unsigned long nowtime)
}
#endif

static unsigned int rt_timer_irq;

void ip27_rt_timer_interrupt(struct pt_regs *regs)
{
	int cpu = smp_processor_id();
	int cpuA = cputoslice(cpu) == 0;
	int irq = 9;				/* XXX Assign number */
	unsigned int irq = rt_timer_irq;

	irq_enter();
	write_seqlock(&xtime_lock);
@@ -179,13 +181,68 @@ static __init unsigned long get_m48t35_time(void)
        return mktime(year, month, date, hour, min, sec);
}

static void startup_rt_irq(unsigned int irq)
{
}

static void shutdown_rt_irq(unsigned int irq)
{
}

static void enable_rt_irq(unsigned int irq)
{
}

static void disable_rt_irq(unsigned int irq)
{
}

static void mask_and_ack_rt(unsigned int irq)
{
}

static void end_rt_irq(unsigned int irq)
{
}

static struct hw_interrupt_type rt_irq_type = {
	.typename	= "SN HUB RT timer",
	.startup	= startup_rt_irq,
	.shutdown	= shutdown_rt_irq,
	.enable		= enable_rt_irq,
	.disable	= disable_rt_irq,
	.ack		= mask_and_ack_rt,
	.end		= end_rt_irq,
};

static struct irqaction rt_irqaction = {
	.handler	= ip27_rt_timer_interrupt,
	.flags		= SA_INTERRUPT,
	.mask		= CPU_MASK_NONE,
	.name		= "timer"
};

extern int allocate_irqno(void);

static void ip27_timer_setup(struct irqaction *irq)
{
	int irqno  = allocate_irqno();

	if (irqno < 0)
		panic("Can't allocate interrupt number for timer interrupt");

	irq_desc[irqno].status = IRQ_DISABLED;
	irq_desc[irqno].action = NULL;
	irq_desc[irqno].depth = 1;
	irq_desc[irqno].handler = &rt_irq_type;

	/* over-write the handler, we use our own way */
	irq->handler = no_action;

	/* setup irqaction */
//	setup_irq(IP27_TIMER_IRQ, irq);		/* XXX Can't do this yet.  */
	irq_desc[irqno].status |= IRQ_PER_CPU;

	rt_timer_irq = irqno;
}

void __init ip27_time_init(void)