[MIPS] Atlas, Malta, SEAD: Remove scroll from interrupt handler.
authorRalf Baechle <ralf@linux-mips.org>
Wed, 16 May 2007 15:54:08 +0000 (17:54 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 6 Jun 2007 18:34:30 +0000 (19:34 +0100)
Aside of being handy for debugging this has never been a particularly
good idea but is now getting in the way of dyntick / tickless kernels
and general cleanups.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mips-boards/atlas/atlas_setup.c
arch/mips/mips-boards/generic/display.c
arch/mips/mips-boards/generic/time.c
arch/mips/mips-boards/malta/malta_setup.c
arch/mips/mips-boards/sead/sead_setup.c
include/asm-mips/mips-boards/prom.h

index 0c6b0ce15028827c6e1e069bcf2ee497d23dfc3b..1cc6ebbedfdd8cc89d611f71522478dd90f96adf 100644 (file)
@@ -48,6 +48,8 @@ const char *get_system_type(void)
        return "MIPS Atlas";
 }
 
+const char display_string[] = "        LINUX ON ATLAS       ";
+
 void __init plat_mem_setup(void)
 {
        mips_pcibios_init();
index 548dbe5ce7c8c889447ee24df97e2987ceca5d28..5d600054090a5c258a448a77340de12d205fd906 100644 (file)
  */
 
 #include <linux/compiler.h>
+#include <linux/timer.h>
 #include <asm/io.h>
 #include <asm/mips-boards/generic.h>
 
+extern const char display_string[];
+static unsigned int display_count;
+static unsigned int max_display_count;
+
 void mips_display_message(const char *str)
 {
        static unsigned int __iomem *display = NULL;
@@ -37,3 +42,22 @@ void mips_display_message(const char *str)
                         writel(' ', display + i);
        }
 }
+
+static void scroll_display_message(unsigned long data);
+static DEFINE_TIMER(mips_scroll_timer, scroll_display_message, HZ, 0);
+
+static void scroll_display_message(unsigned long data)
+{
+       mips_display_message(&display_string[display_count++]);
+       if (display_count == max_display_count)
+               display_count = 0;
+
+       mod_timer(&mips_scroll_timer, jiffies + HZ);
+}
+
+void mips_scroll_message(void)
+{
+       del_timer_sync(&mips_scroll_timer);
+       max_display_count = strlen(display_string) + 1 - 8;
+       mod_timer(&mips_scroll_timer, jiffies + 1);
+}
index df2a2bd3aa5d198188e0fc3f8e1eadb167ee5dfd..37735bfc3afda540f7bb56adae0cfc0dcd7d075e 100644 (file)
 
 unsigned long cpu_khz;
 
-#if defined(CONFIG_MIPS_ATLAS)
-static char display_string[] = "        LINUX ON ATLAS       ";
-#endif
-#if defined(CONFIG_MIPS_MALTA)
-#if defined(CONFIG_MIPS_MT_SMTC)
-static char display_string[] = "       SMTC LINUX ON MALTA       ";
-#else
-static char display_string[] = "        LINUX ON MALTA       ";
-#endif /* CONFIG_MIPS_MT_SMTC */
-#endif
-#if defined(CONFIG_MIPS_SEAD)
-static char display_string[] = "        LINUX ON SEAD       ";
-#endif
-static unsigned int display_count;
-#define MAX_DISPLAY_COUNT (sizeof(display_string) - 8)
-
 #define CPUCTR_IMASKBIT (0x100 << MIPSCPU_INT_CPUCTR)
 
-static unsigned int timer_tick_count;
 static int mips_cpu_timer_irq;
 extern void smtc_timer_broadcast(int);
 
-static inline void scroll_display_message(void)
-{
-       if ((timer_tick_count++ % HZ) == 0) {
-               mips_display_message(&display_string[display_count++]);
-               if (display_count == MAX_DISPLAY_COUNT)
-                       display_count = 0;
-       }
-}
-
 static void mips_timer_dispatch(void)
 {
        do_IRQ(mips_cpu_timer_irq);
@@ -143,7 +117,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
                if (cpu_data[cpu].vpe_id == 0) {
                                timer_interrupt(irq, NULL);
                                smtc_timer_broadcast(cpu_data[cpu].vpe_id);
-                               scroll_display_message();
                } else {
                        write_c0_compare(read_c0_count() +
                                         (mips_hpt_frequency/HZ));
@@ -167,8 +140,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
                /* we keep interrupt disabled all the time */
                if (!r2 || (read_c0_cause() & (1 << 30)))
                        timer_interrupt(irq, NULL);
-
-               scroll_display_message();
        } else {
                /* Everyone else needs to reset the timer int here as
                   ll_local_timer_interrupt doesn't */
@@ -262,6 +233,8 @@ void __init mips_time_init(void)
               (est_freq%1000000)*100/1000000);
 
         cpu_khz = est_freq / 1000;
+
+       mips_scroll_message();
 }
 
 void __init plat_timer_setup(struct irqaction *irq)
index 7873932532a10b9fc2c8186bf6bfdca2d6ef3923..c14b7bf89950cb131445c509ef0dbec189645417 100644 (file)
@@ -56,6 +56,12 @@ const char *get_system_type(void)
        return "MIPS Malta";
 }
 
+#if defined(CONFIG_MIPS_MT_SMTC)
+const char display_string[] = "       SMTC LINUX ON MALTA       ";
+#else
+const char display_string[] = "        LINUX ON MALTA       ";
+#endif /* CONFIG_MIPS_MT_SMTC */
+
 #ifdef CONFIG_BLK_DEV_FD
 void __init fd_activate(void)
 {
index a189dec7c7bc8603ebecce5eab41570144ca236e..811aba100605aa53711930e400f21f82b17cac15 100644 (file)
@@ -43,6 +43,8 @@ const char *get_system_type(void)
        return "MIPS SEAD";
 }
 
+const char display_string[] = "        LINUX ON SEAD       ";
+
 void __init plat_mem_setup(void)
 {
        ioport_resource.end = 0x7fffffff;
index daaf9f98fc63ce7547a3660b915cb0ee2599e547..a9db576a9768e0493711dd07ee39e2bdc63b6e5f 100644 (file)
@@ -33,6 +33,7 @@ extern void prom_meminit(void);
 extern void prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem);
 extern void mips_display_message(const char *str);
 extern void mips_display_word(unsigned int num);
+extern void mips_scroll_message(void);
 extern int get_ethernet_addr(char *ethernet_addr);
 
 /* Memory descriptor management. */