Commit d6444094 authored by Arnd Bergmann's avatar Arnd Bergmann

m68k: split heartbeat out of timer function

The heartbeat functionality is mostly separate from the
actual timer interrupt handling, and it is only used on
five platforms.

Split it out into a separate function and call that directly
from the timer irq on those platforms.
Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Tested-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 275e70e4
...@@ -480,6 +480,7 @@ static irqreturn_t ciab_timer_handler(int irq, void *dev_id) ...@@ -480,6 +480,7 @@ static irqreturn_t ciab_timer_handler(int irq, void *dev_id)
clk_total += jiffy_ticks; clk_total += jiffy_ticks;
clk_offset = 0; clk_offset = 0;
timer_routine(0, NULL); timer_routine(0, NULL);
timer_heartbeat();
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -173,6 +173,7 @@ irqreturn_t dn_timer_int(int irq, void *dev_id) ...@@ -173,6 +173,7 @@ irqreturn_t dn_timer_int(int irq, void *dev_id)
volatile unsigned char x; volatile unsigned char x;
timer_handler(irq, dev_id); timer_handler(irq, dev_id);
timer_heartbeat();
x = *(volatile unsigned char *)(apollo_timer + 3); x = *(volatile unsigned char *)(apollo_timer + 3);
x = *(volatile unsigned char *)(apollo_timer + 5); x = *(volatile unsigned char *)(apollo_timer + 5);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <asm/atariints.h> #include <asm/atariints.h>
#include <asm/machdep.h>
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
EXPORT_SYMBOL_GPL(rtc_lock); EXPORT_SYMBOL_GPL(rtc_lock);
...@@ -49,6 +50,7 @@ static irqreturn_t mfp_timer_c_handler(int irq, void *dev_id) ...@@ -49,6 +50,7 @@ static irqreturn_t mfp_timer_c_handler(int irq, void *dev_id)
} while (last_timer_count == 1); } while (last_timer_count == 1);
clk_total += INT_TICKS; clk_total += INT_TICKS;
timer_routine(0, NULL); timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags); local_irq_restore(flags);
return IRQ_HANDLED; return IRQ_HANDLED;
......
...@@ -65,6 +65,7 @@ static irqreturn_t hp300_tick(int irq, void *dev_id) ...@@ -65,6 +65,7 @@ static irqreturn_t hp300_tick(int irq, void *dev_id)
clk_total += INTVAL; clk_total += INTVAL;
clk_offset = 0; clk_offset = 0;
timer_routine(0, NULL); timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags); local_irq_restore(flags);
/* Turn off the network and SCSI leds */ /* Turn off the network and SCSI leds */
......
...@@ -35,6 +35,13 @@ extern void (*mach_beep) (unsigned int, unsigned int); ...@@ -35,6 +35,13 @@ extern void (*mach_beep) (unsigned int, unsigned int);
/* Hardware clock functions */ /* Hardware clock functions */
extern void hw_timer_init(irq_handler_t handler); extern void hw_timer_init(irq_handler_t handler);
extern unsigned long hw_timer_offset(void); extern unsigned long hw_timer_offset(void);
#ifdef CONFIG_HEARTBEAT
extern void timer_heartbeat(void);
#else
static inline void timer_heartbeat(void)
{
}
#endif
extern void config_BSP(char *command, int len); extern void config_BSP(char *command, int len);
......
...@@ -45,8 +45,12 @@ static irqreturn_t timer_interrupt(int irq, void *dummy) ...@@ -45,8 +45,12 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
xtime_update(1); xtime_update(1);
update_process_times(user_mode(get_irq_regs())); update_process_times(user_mode(get_irq_regs()));
profile_tick(CPU_PROFILING); profile_tick(CPU_PROFILING);
return IRQ_HANDLED;
}
#ifdef CONFIG_HEARTBEAT #ifdef CONFIG_HEARTBEAT
void timer_heartbeat(void)
{
/* use power LED as a heartbeat instead -- much more useful /* use power LED as a heartbeat instead -- much more useful
for debugging -- based on the version for PReP by Cort */ for debugging -- based on the version for PReP by Cort */
/* acts like an actual heart beat -- ie thump-thump-pause... */ /* acts like an actual heart beat -- ie thump-thump-pause... */
...@@ -68,9 +72,8 @@ static irqreturn_t timer_interrupt(int irq, void *dummy) ...@@ -68,9 +72,8 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
dist = period / 4; dist = period / 4;
} }
} }
#endif /* CONFIG_HEARTBEAT */
return IRQ_HANDLED;
} }
#endif /* CONFIG_HEARTBEAT */
#ifdef CONFIG_M68KCLASSIC #ifdef CONFIG_M68KCLASSIC
#if !IS_BUILTIN(CONFIG_RTC_DRV_GENERIC) #if !IS_BUILTIN(CONFIG_RTC_DRV_GENERIC)
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/machdep.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/traps.h> #include <asm/traps.h>
...@@ -144,6 +145,7 @@ static irqreturn_t q40_timer_int(int irq, void *dev_id) ...@@ -144,6 +145,7 @@ static irqreturn_t q40_timer_int(int irq, void *dev_id)
local_irq_save(flags); local_irq_save(flags);
timer_routine(0, NULL); timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags); local_irq_restore(flags);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment