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)
clk_total += jiffy_ticks;
clk_offset = 0;
timer_routine(0, NULL);
timer_heartbeat();
return IRQ_HANDLED;
}
......
......@@ -173,6 +173,7 @@ irqreturn_t dn_timer_int(int irq, void *dev_id)
volatile unsigned char x;
timer_handler(irq, dev_id);
timer_heartbeat();
x = *(volatile unsigned char *)(apollo_timer + 3);
x = *(volatile unsigned char *)(apollo_timer + 5);
......
......@@ -21,6 +21,7 @@
#include <linux/export.h>
#include <asm/atariints.h>
#include <asm/machdep.h>
DEFINE_SPINLOCK(rtc_lock);
EXPORT_SYMBOL_GPL(rtc_lock);
......@@ -49,6 +50,7 @@ static irqreturn_t mfp_timer_c_handler(int irq, void *dev_id)
} while (last_timer_count == 1);
clk_total += INT_TICKS;
timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags);
return IRQ_HANDLED;
......
......@@ -65,6 +65,7 @@ static irqreturn_t hp300_tick(int irq, void *dev_id)
clk_total += INTVAL;
clk_offset = 0;
timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags);
/* Turn off the network and SCSI leds */
......
......@@ -35,6 +35,13 @@ extern void (*mach_beep) (unsigned int, unsigned int);
/* Hardware clock functions */
extern void hw_timer_init(irq_handler_t handler);
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);
......
......@@ -45,8 +45,12 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
xtime_update(1);
update_process_times(user_mode(get_irq_regs()));
profile_tick(CPU_PROFILING);
return IRQ_HANDLED;
}
#ifdef CONFIG_HEARTBEAT
void timer_heartbeat(void)
{
/* use power LED as a heartbeat instead -- much more useful
for debugging -- based on the version for PReP by Cort */
/* acts like an actual heart beat -- ie thump-thump-pause... */
......@@ -68,9 +72,8 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
dist = period / 4;
}
}
#endif /* CONFIG_HEARTBEAT */
return IRQ_HANDLED;
}
#endif /* CONFIG_HEARTBEAT */
#ifdef CONFIG_M68KCLASSIC
#if !IS_BUILTIN(CONFIG_RTC_DRV_GENERIC)
......
......@@ -17,6 +17,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <asm/machdep.h>
#include <asm/ptrace.h>
#include <asm/traps.h>
......@@ -144,6 +145,7 @@ static irqreturn_t q40_timer_int(int irq, void *dev_id)
local_irq_save(flags);
timer_routine(0, NULL);
timer_heartbeat();
local_irq_restore(flags);
}
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