aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/au1000/common/time.c
diff options
context:
space:
mode:
authorPete Popov <ppopov@embeddedalley.com>2005-03-13 03:19:05 -0500
committerRalf Baechle <ralf@linux-mips.org>2005-10-29 14:30:56 -0400
commita3701ca48763bbc681ee8db3d203827975849185 (patch)
tree9677ce80fb2dd3db49394665ddd1ca4f3bf8f2d5 /arch/mips/au1000/common/time.c
parent90a67b5909ed39425fd2402b2b4c46ef1372b300 (diff)
When CONFIG_PM is enabled, it uses the TOY_MATCH2 interrupt as the system
timer tick. Prior to this patch, if IDE IRQ probing occured, then the TOY_MATCH2 interrupt would be permanently disabled, and no system timer tick occurs. This patch corrects this situation by correctly registering the TOY_MATCH2 interrupt so that IDE IRQ probing doesn't have adverse side effects. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/au1000/common/time.c')
-rw-r--r--arch/mips/au1000/common/time.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/mips/au1000/common/time.c b/arch/mips/au1000/common/time.c
index 57675b41480e..90a0755c832b 100644
--- a/arch/mips/au1000/common/time.c
+++ b/arch/mips/au1000/common/time.c
@@ -50,7 +50,6 @@
50#include <linux/mc146818rtc.h> 50#include <linux/mc146818rtc.h>
51#include <linux/timex.h> 51#include <linux/timex.h>
52 52
53extern void startup_match20_interrupt(void);
54extern void do_softirq(void); 53extern void do_softirq(void);
55extern volatile unsigned long wall_jiffies; 54extern volatile unsigned long wall_jiffies;
56unsigned long missed_heart_beats = 0; 55unsigned long missed_heart_beats = 0;
@@ -65,7 +64,7 @@ static unsigned int timerhi = 0, timerlo = 0;
65 64
66#ifdef CONFIG_PM 65#ifdef CONFIG_PM
67#define MATCH20_INC 328 66#define MATCH20_INC 328
68extern void startup_match20_interrupt(void); 67extern void startup_match20_interrupt(void (*handler)(int, void *, struct pt_regs *));
69static unsigned long last_pc0, last_match20; 68static unsigned long last_pc0, last_match20;
70#endif 69#endif
71 70
@@ -446,7 +445,7 @@ void au1xxx_timer_setup(struct irqaction *irq)
446 au_writel(last_match20 + MATCH20_INC, SYS_TOYMATCH2); 445 au_writel(last_match20 + MATCH20_INC, SYS_TOYMATCH2);
447 au_sync(); 446 au_sync();
448 while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20); 447 while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20);
449 startup_match20_interrupt(); 448 startup_match20_interrupt(counter0_irq);
450 449
451 do_gettimeoffset = do_fast_pm_gettimeoffset; 450 do_gettimeoffset = do_fast_pm_gettimeoffset;
452 451