m68k: split heartbeat out of timer function
authorArnd Bergmann <arnd@arndb.de>
Thu, 24 Sep 2020 14:37:37 +0000 (16:37 +0200)
committerArnd Bergmann <arnd@arndb.de>
Fri, 30 Oct 2020 20:57:05 +0000 (21:57 +0100)
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>
arch/m68k/amiga/config.c
arch/m68k/apollo/config.c
arch/m68k/atari/time.c
arch/m68k/hp300/time.c
arch/m68k/include/asm/machdep.h
arch/m68k/kernel/time.c
arch/m68k/q40/q40ints.c

index bee9f240f35deef59c5bf54651e90cfce0d355ce..29f92333119e675592117238ff612f8a5d122857 100644 (file)
@@ -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;
 }
index 762da5d7a415db7397494c346facb7e7218e1014..30915f1a8760ff8c825b5845592525fd986fa72d 100644 (file)
@@ -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);
index ce923a523695ae1ae0cf172c55a87fe2c7f6179b..ce4a5961ca9340154592e43dbc3403743127fc95 100644 (file)
@@ -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;
index bfee13e1d0fe1432e1b843763995341230855b41..e3cd938de0f9fbbbe7f970ca2be81e9b157648ef 100644 (file)
@@ -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 */
index 49bd3266b4b1b79ad9581f0b40d454b25228ffcd..e62a39d01ae4e99469e04ff85f6964a9d9d956fe 100644 (file)
@@ -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);
 
index c2697a4d4ddd79c92c8e07a27dbcbd6d8fec6df2..c05cec21b05fe17a1b59767aadc3d1be7c790820 100644 (file)
@@ -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)
index 1c696906c159f5acb5d39f773324d93bfa5508b5..b01b545a2db0bec7424e4eda223658ee3fbb2d5f 100644 (file)
@@ -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;