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: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Tested-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
} 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)
|
|||||||
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);
|
|||||||
/* 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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
|
|
||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user