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

Commit 937a8015 authored by Ralf Baechle's avatar Ralf Baechle
Browse files

[MIPS] Complete fixes after removal of pt_regs argument to int handlers.

parent 31aa3665
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -160,7 +160,7 @@ void dump_au1000_dma_channel(unsigned int dmanr)
 * Requests the DMA done IRQ if irqhandler != NULL.
 * Requests the DMA done IRQ if irqhandler != NULL.
 */
 */
int request_au1000_dma(int dev_id, const char *dev_str,
int request_au1000_dma(int dev_id, const char *dev_str,
		       irqreturn_t (*irqhandler)(int, void *, struct pt_regs *),
		       irqreturn_t (*irqhandler)(int, void *),
		       unsigned long irqflags,
		       unsigned long irqflags,
		       void *irq_dev_id)
		       void *irq_dev_id)
{
{
+26 −26
Original line number Original line Diff line number Diff line
@@ -67,7 +67,7 @@


extern void set_debug_traps(void);
extern void set_debug_traps(void);
extern irq_cpustat_t irq_stat [NR_CPUS];
extern irq_cpustat_t irq_stat [NR_CPUS];
extern void mips_timer_interrupt(struct pt_regs *regs);
extern void mips_timer_interrupt(void);


static void setup_local_irq(unsigned int irq, int type, int int_req);
static void setup_local_irq(unsigned int irq, int type, int int_req);
static unsigned int startup_irq(unsigned int irq);
static unsigned int startup_irq(unsigned int irq);
@@ -81,10 +81,6 @@ inline void local_disable_irq(unsigned int irq_nr);


void	(*board_init_irq)(void);
void	(*board_init_irq)(void);


#ifdef CONFIG_PM
extern irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs);
#endif

static DEFINE_SPINLOCK(irq_lock);
static DEFINE_SPINLOCK(irq_lock);




@@ -292,7 +288,7 @@ static struct irq_chip level_irq_type = {
};
};


#ifdef CONFIG_PM
#ifdef CONFIG_PM
void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *))
void startup_match20_interrupt(irqreturn_t (*handler)(int, void *))
{
{
	struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT];
	struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT];


@@ -501,14 +497,15 @@ void __init arch_init_irq(void)
 * intcX_reqX_irqdispatch().
 * intcX_reqX_irqdispatch().
 */
 */


void intc0_req0_irqdispatch(struct pt_regs *regs)
static void intc0_req0_irqdispatch(void)
{
{
	int irq = 0;
	int irq = 0;
	static unsigned long intc0_req0 = 0;
	static unsigned long intc0_req0 = 0;


	intc0_req0 |= au_readl(IC0_REQ0INT);
	intc0_req0 |= au_readl(IC0_REQ0INT);


	if (!intc0_req0) return;
	if (!intc0_req0)
		return;
#ifdef AU1000_USB_DEV_REQ_INT
#ifdef AU1000_USB_DEV_REQ_INT
	/*
	/*
	 * Because of the tight timing of SETUP token to reply
	 * Because of the tight timing of SETUP token to reply
@@ -517,28 +514,29 @@ void intc0_req0_irqdispatch(struct pt_regs *regs)
	 */
	 */
	if ((intc0_req0 & (1<<AU1000_USB_DEV_REQ_INT))) {
	if ((intc0_req0 & (1<<AU1000_USB_DEV_REQ_INT))) {
		intc0_req0 &= ~(1<<AU1000_USB_DEV_REQ_INT);
		intc0_req0 &= ~(1<<AU1000_USB_DEV_REQ_INT);
		do_IRQ(AU1000_USB_DEV_REQ_INT, regs);
		do_IRQ(AU1000_USB_DEV_REQ_INT);
		return;
		return;
	}
	}
#endif
#endif
	irq = au_ffs(intc0_req0) - 1;
	irq = au_ffs(intc0_req0) - 1;
	intc0_req0 &= ~(1<<irq);
	intc0_req0 &= ~(1<<irq);
	do_IRQ(irq, regs);
	do_IRQ(irq);
}
}




void intc0_req1_irqdispatch(struct pt_regs *regs)
static void intc0_req1_irqdispatch(void)
{
{
	int irq = 0;
	int irq = 0;
	static unsigned long intc0_req1 = 0;
	static unsigned long intc0_req1 = 0;


	intc0_req1 |= au_readl(IC0_REQ1INT);
	intc0_req1 |= au_readl(IC0_REQ1INT);


	if (!intc0_req1) return;
	if (!intc0_req1)
		return;


	irq = au_ffs(intc0_req1) - 1;
	irq = au_ffs(intc0_req1) - 1;
	intc0_req1 &= ~(1<<irq);
	intc0_req1 &= ~(1<<irq);
	do_IRQ(irq, regs);
	do_IRQ(irq);
}
}




@@ -546,35 +544,37 @@ void intc0_req1_irqdispatch(struct pt_regs *regs)
 * Interrupt Controller 1:
 * Interrupt Controller 1:
 * interrupts 32 - 63
 * interrupts 32 - 63
 */
 */
void intc1_req0_irqdispatch(struct pt_regs *regs)
static void intc1_req0_irqdispatch(void)
{
{
	int irq = 0;
	int irq = 0;
	static unsigned long intc1_req0 = 0;
	static unsigned long intc1_req0 = 0;


	intc1_req0 |= au_readl(IC1_REQ0INT);
	intc1_req0 |= au_readl(IC1_REQ0INT);


	if (!intc1_req0) return;
	if (!intc1_req0)
		return;


	irq = au_ffs(intc1_req0) - 1;
	irq = au_ffs(intc1_req0) - 1;
	intc1_req0 &= ~(1<<irq);
	intc1_req0 &= ~(1<<irq);
	irq += 32;
	irq += 32;
	do_IRQ(irq, regs);
	do_IRQ(irq);
}
}




void intc1_req1_irqdispatch(struct pt_regs *regs)
static void intc1_req1_irqdispatch(void)
{
{
	int irq = 0;
	int irq = 0;
	static unsigned long intc1_req1 = 0;
	static unsigned long intc1_req1 = 0;


	intc1_req1 |= au_readl(IC1_REQ1INT);
	intc1_req1 |= au_readl(IC1_REQ1INT);


	if (!intc1_req1) return;
	if (!intc1_req1)
		return;


	irq = au_ffs(intc1_req1) - 1;
	irq = au_ffs(intc1_req1) - 1;
	intc1_req1 &= ~(1<<irq);
	intc1_req1 &= ~(1<<irq);
	irq += 32;
	irq += 32;
	do_IRQ(irq, regs);
	do_IRQ(irq);
}
}


#ifdef CONFIG_PM
#ifdef CONFIG_PM
@@ -660,20 +660,20 @@ restore_au1xxx_intctl(void)
}
}
#endif /* CONFIG_PM */
#endif /* CONFIG_PM */


asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
asmlinkage void plat_irq_dispatch(void)
{
{
	unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
	unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;


	if (pending & CAUSEF_IP7)
	if (pending & CAUSEF_IP7)
		mips_timer_interrupt(regs);
		mips_timer_interrupt();
	else if (pending & CAUSEF_IP2)
	else if (pending & CAUSEF_IP2)
		intc0_req0_irqdispatch(regs);
		intc0_req0_irqdispatch();
	else if (pending & CAUSEF_IP3)
	else if (pending & CAUSEF_IP3)
		intc0_req1_irqdispatch(regs);
		intc0_req1_irqdispatch();
	else if (pending & CAUSEF_IP4)
	else if (pending & CAUSEF_IP4)
		intc1_req0_irqdispatch(regs);
		intc1_req0_irqdispatch();
	else if (pending  & CAUSEF_IP5)
	else if (pending  & CAUSEF_IP5)
		intc1_req1_irqdispatch(regs);
		intc1_req1_irqdispatch();
	else
	else
		spurious_interrupt(regs);
		spurious_interrupt();
}
}
+7 −6
Original line number Original line Diff line number Diff line
@@ -62,7 +62,7 @@ static unsigned int timerhi = 0, timerlo = 0;
#error "unsupported HZ value! Must be in [100,1000]"
#error "unsupported HZ value! Must be in [100,1000]"
#endif
#endif
#define MATCH20_INC (328*100/HZ) /* magic number 328 is for HZ=100... */
#define MATCH20_INC (328*100/HZ) /* magic number 328 is for HZ=100... */
extern void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *));
extern void startup_match20_interrupt(irqreturn_t (*handler)(int, void *));
static unsigned long last_pc0, last_match20;
static unsigned long last_pc0, last_match20;
#endif
#endif


@@ -79,7 +79,8 @@ static inline void ack_r4ktimer(unsigned long newval)
 * is provably more robust.
 * is provably more robust.
 */
 */
unsigned long wtimer;
unsigned long wtimer;
void mips_timer_interrupt(struct pt_regs *regs)

void mips_timer_interrupt(void)
{
{
	int irq = 63;
	int irq = 63;
	unsigned long count;
	unsigned long count;
@@ -98,7 +99,7 @@ void mips_timer_interrupt(struct pt_regs *regs)
		kstat_this_cpu.irqs[irq]++;
		kstat_this_cpu.irqs[irq]++;
		do_timer(1);
		do_timer(1);
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
		update_process_times(user_mode(regs));
		update_process_times(user_mode(get_irq_regs()));
#endif
#endif
		r4k_cur += r4k_offset;
		r4k_cur += r4k_offset;
		ack_r4ktimer(r4k_cur);
		ack_r4ktimer(r4k_cur);
@@ -115,7 +116,7 @@ void mips_timer_interrupt(struct pt_regs *regs)
}
}


#ifdef CONFIG_PM
#ifdef CONFIG_PM
irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs)
irqreturn_t counter0_irq(int irq, void *dev_id)
{
{
	unsigned long pc0;
	unsigned long pc0;
	int time_elapsed;
	int time_elapsed;
@@ -139,7 +140,7 @@ irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs)
	while (time_elapsed > 0) {
	while (time_elapsed > 0) {
		do_timer(1);
		do_timer(1);
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
		update_process_times(user_mode(regs));
		update_process_times(user_mode(get_irq_regs()));
#endif
#endif
		time_elapsed -= MATCH20_INC;
		time_elapsed -= MATCH20_INC;
		last_match20 += MATCH20_INC;
		last_match20 += MATCH20_INC;
@@ -158,7 +159,7 @@ irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs)
		jiffie_drift -= 999;
		jiffie_drift -= 999;
		do_timer(1); /* increment jiffies by one */
		do_timer(1); /* increment jiffies by one */
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
		update_process_times(user_mode(regs));
		update_process_times(user_mode(get_irq_regs()));
#endif
#endif
	}
	}


+3 −6
Original line number Original line Diff line number Diff line
@@ -1031,8 +1031,7 @@ process_ep_receive (struct usb_dev* dev, endpoint_t *ep)




/* This ISR handles the receive complete and suspend events */
/* This ISR handles the receive complete and suspend events */
static void
static void req_sus_intr (int irq, void *dev_id)
req_sus_intr (int irq, void *dev_id, struct pt_regs *regs)
{
{
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	u32 status;
	u32 status;
@@ -1050,8 +1049,7 @@ req_sus_intr (int irq, void *dev_id, struct pt_regs *regs)




/* This ISR handles the DMA done events on EP0 */
/* This ISR handles the DMA done events on EP0 */
static void
static void dma_done_ep0_intr(int irq, void *dev_id)
dma_done_ep0_intr(int irq, void *dev_id, struct pt_regs *regs)
{
{
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	usbdev_pkt_t* pkt;
	usbdev_pkt_t* pkt;
@@ -1094,8 +1092,7 @@ dma_done_ep0_intr(int irq, void *dev_id, struct pt_regs *regs)
}
}


/* This ISR handles the DMA done events on endpoints 2,3,4,5 */
/* This ISR handles the DMA done events on endpoints 2,3,4,5 */
static void
static void dma_done_ep_intr(int irq, void *dev_id)
dma_done_ep_intr(int irq, void *dev_id, struct pt_regs *regs)
{
{
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	struct usb_dev *dev = (struct usb_dev *) dev_id;
	int i;
	int i;
+3 −2
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
 */
 */
static volatile int pb1200_cascade_en=0;
static volatile int pb1200_cascade_en=0;


irqreturn_t pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs)
irqreturn_t pb1200_cascade_handler( int irq, void *dev_id)
{
{
	unsigned short bisr = bcsr->int_status;
	unsigned short bisr = bcsr->int_status;
	int extirq_nr = 0;
	int extirq_nr = 0;
@@ -76,8 +76,9 @@ irqreturn_t pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs)
	{
	{
		extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr);
		extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr);
		/* Ack and dispatch IRQ */
		/* Ack and dispatch IRQ */
		do_IRQ(extirq_nr,regs);
		do_IRQ(extirq_nr);
	}
	}

	return IRQ_RETVAL(1);
	return IRQ_RETVAL(1);
}
}


Loading