aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips/mips-boards/atlas/atlas_setup.c2
-rw-r--r--arch/mips/mips-boards/generic/display.c24
-rw-r--r--arch/mips/mips-boards/generic/time.c31
-rw-r--r--arch/mips/mips-boards/malta/malta_setup.c6
-rw-r--r--arch/mips/mips-boards/sead/sead_setup.c2
-rw-r--r--include/asm-mips/mips-boards/prom.h1
6 files changed, 37 insertions, 29 deletions
diff --git a/arch/mips/mips-boards/atlas/atlas_setup.c b/arch/mips/mips-boards/atlas/atlas_setup.c
index 0c6b0ce15028..1cc6ebbedfdd 100644
--- a/arch/mips/mips-boards/atlas/atlas_setup.c
+++ b/arch/mips/mips-boards/atlas/atlas_setup.c
@@ -48,6 +48,8 @@ const char *get_system_type(void)
48 return "MIPS Atlas"; 48 return "MIPS Atlas";
49} 49}
50 50
51const char display_string[] = " LINUX ON ATLAS ";
52
51void __init plat_mem_setup(void) 53void __init plat_mem_setup(void)
52{ 54{
53 mips_pcibios_init(); 55 mips_pcibios_init();
diff --git a/arch/mips/mips-boards/generic/display.c b/arch/mips/mips-boards/generic/display.c
index 548dbe5ce7c8..5d600054090a 100644
--- a/arch/mips/mips-boards/generic/display.c
+++ b/arch/mips/mips-boards/generic/display.c
@@ -19,9 +19,14 @@
19 */ 19 */
20 20
21#include <linux/compiler.h> 21#include <linux/compiler.h>
22#include <linux/timer.h>
22#include <asm/io.h> 23#include <asm/io.h>
23#include <asm/mips-boards/generic.h> 24#include <asm/mips-boards/generic.h>
24 25
26extern const char display_string[];
27static unsigned int display_count;
28static unsigned int max_display_count;
29
25void mips_display_message(const char *str) 30void mips_display_message(const char *str)
26{ 31{
27 static unsigned int __iomem *display = NULL; 32 static unsigned int __iomem *display = NULL;
@@ -37,3 +42,22 @@ void mips_display_message(const char *str)
37 writel(' ', display + i); 42 writel(' ', display + i);
38 } 43 }
39} 44}
45
46static void scroll_display_message(unsigned long data);
47static DEFINE_TIMER(mips_scroll_timer, scroll_display_message, HZ, 0);
48
49static void scroll_display_message(unsigned long data)
50{
51 mips_display_message(&display_string[display_count++]);
52 if (display_count == max_display_count)
53 display_count = 0;
54
55 mod_timer(&mips_scroll_timer, jiffies + HZ);
56}
57
58void mips_scroll_message(void)
59{
60 del_timer_sync(&mips_scroll_timer);
61 max_display_count = strlen(display_string) + 1 - 8;
62 mod_timer(&mips_scroll_timer, jiffies + 1);
63}
diff --git a/arch/mips/mips-boards/generic/time.c b/arch/mips/mips-boards/generic/time.c
index df2a2bd3aa5d..37735bfc3afd 100644
--- a/arch/mips/mips-boards/generic/time.c
+++ b/arch/mips/mips-boards/generic/time.c
@@ -53,37 +53,11 @@
53 53
54unsigned long cpu_khz; 54unsigned long cpu_khz;
55 55
56#if defined(CONFIG_MIPS_ATLAS)
57static char display_string[] = " LINUX ON ATLAS ";
58#endif
59#if defined(CONFIG_MIPS_MALTA)
60#if defined(CONFIG_MIPS_MT_SMTC)
61static char display_string[] = " SMTC LINUX ON MALTA ";
62#else
63static char display_string[] = " LINUX ON MALTA ";
64#endif /* CONFIG_MIPS_MT_SMTC */
65#endif
66#if defined(CONFIG_MIPS_SEAD)
67static char display_string[] = " LINUX ON SEAD ";
68#endif
69static unsigned int display_count;
70#define MAX_DISPLAY_COUNT (sizeof(display_string) - 8)
71
72#define CPUCTR_IMASKBIT (0x100 << MIPSCPU_INT_CPUCTR) 56#define CPUCTR_IMASKBIT (0x100 << MIPSCPU_INT_CPUCTR)
73 57
74static unsigned int timer_tick_count;
75static int mips_cpu_timer_irq; 58static int mips_cpu_timer_irq;
76extern void smtc_timer_broadcast(int); 59extern void smtc_timer_broadcast(int);
77 60
78static inline void scroll_display_message(void)
79{
80 if ((timer_tick_count++ % HZ) == 0) {
81 mips_display_message(&display_string[display_count++]);
82 if (display_count == MAX_DISPLAY_COUNT)
83 display_count = 0;
84 }
85}
86
87static void mips_timer_dispatch(void) 61static void mips_timer_dispatch(void)
88{ 62{
89 do_IRQ(mips_cpu_timer_irq); 63 do_IRQ(mips_cpu_timer_irq);
@@ -143,7 +117,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
143 if (cpu_data[cpu].vpe_id == 0) { 117 if (cpu_data[cpu].vpe_id == 0) {
144 timer_interrupt(irq, NULL); 118 timer_interrupt(irq, NULL);
145 smtc_timer_broadcast(cpu_data[cpu].vpe_id); 119 smtc_timer_broadcast(cpu_data[cpu].vpe_id);
146 scroll_display_message();
147 } else { 120 } else {
148 write_c0_compare(read_c0_count() + 121 write_c0_compare(read_c0_count() +
149 (mips_hpt_frequency/HZ)); 122 (mips_hpt_frequency/HZ));
@@ -167,8 +140,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
167 /* we keep interrupt disabled all the time */ 140 /* we keep interrupt disabled all the time */
168 if (!r2 || (read_c0_cause() & (1 << 30))) 141 if (!r2 || (read_c0_cause() & (1 << 30)))
169 timer_interrupt(irq, NULL); 142 timer_interrupt(irq, NULL);
170
171 scroll_display_message();
172 } else { 143 } else {
173 /* Everyone else needs to reset the timer int here as 144 /* Everyone else needs to reset the timer int here as
174 ll_local_timer_interrupt doesn't */ 145 ll_local_timer_interrupt doesn't */
@@ -262,6 +233,8 @@ void __init mips_time_init(void)
262 (est_freq%1000000)*100/1000000); 233 (est_freq%1000000)*100/1000000);
263 234
264 cpu_khz = est_freq / 1000; 235 cpu_khz = est_freq / 1000;
236
237 mips_scroll_message();
265} 238}
266 239
267void __init plat_timer_setup(struct irqaction *irq) 240void __init plat_timer_setup(struct irqaction *irq)
diff --git a/arch/mips/mips-boards/malta/malta_setup.c b/arch/mips/mips-boards/malta/malta_setup.c
index 7873932532a1..c14b7bf89950 100644
--- a/arch/mips/mips-boards/malta/malta_setup.c
+++ b/arch/mips/mips-boards/malta/malta_setup.c
@@ -56,6 +56,12 @@ const char *get_system_type(void)
56 return "MIPS Malta"; 56 return "MIPS Malta";
57} 57}
58 58
59#if defined(CONFIG_MIPS_MT_SMTC)
60const char display_string[] = " SMTC LINUX ON MALTA ";
61#else
62const char display_string[] = " LINUX ON MALTA ";
63#endif /* CONFIG_MIPS_MT_SMTC */
64
59#ifdef CONFIG_BLK_DEV_FD 65#ifdef CONFIG_BLK_DEV_FD
60void __init fd_activate(void) 66void __init fd_activate(void)
61{ 67{
diff --git a/arch/mips/mips-boards/sead/sead_setup.c b/arch/mips/mips-boards/sead/sead_setup.c
index a189dec7c7bc..811aba100605 100644
--- a/arch/mips/mips-boards/sead/sead_setup.c
+++ b/arch/mips/mips-boards/sead/sead_setup.c
@@ -43,6 +43,8 @@ const char *get_system_type(void)
43 return "MIPS SEAD"; 43 return "MIPS SEAD";
44} 44}
45 45
46const char display_string[] = " LINUX ON SEAD ";
47
46void __init plat_mem_setup(void) 48void __init plat_mem_setup(void)
47{ 49{
48 ioport_resource.end = 0x7fffffff; 50 ioport_resource.end = 0x7fffffff;
diff --git a/include/asm-mips/mips-boards/prom.h b/include/asm-mips/mips-boards/prom.h
index daaf9f98fc63..a9db576a9768 100644
--- a/include/asm-mips/mips-boards/prom.h
+++ b/include/asm-mips/mips-boards/prom.h
@@ -33,6 +33,7 @@ extern void prom_meminit(void);
33extern void prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem); 33extern void prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem);
34extern void mips_display_message(const char *str); 34extern void mips_display_message(const char *str);
35extern void mips_display_word(unsigned int num); 35extern void mips_display_word(unsigned int num);
36extern void mips_scroll_message(void);
36extern int get_ethernet_addr(char *ethernet_addr); 37extern int get_ethernet_addr(char *ethernet_addr);
37 38
38/* Memory descriptor management. */ 39/* Memory descriptor management. */