Commit 79894c7b authored by Ralf Baechle's avatar Ralf Baechle

[MIPS] Atlas, Malta, SEAD: Remove scroll from interrupt handler.

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: default avatarRalf Baechle <ralf@linux-mips.org>
parent 5ecd3100
...@@ -48,6 +48,8 @@ const char *get_system_type(void) ...@@ -48,6 +48,8 @@ const char *get_system_type(void)
return "MIPS Atlas"; return "MIPS Atlas";
} }
const char display_string[] = " LINUX ON ATLAS ";
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
mips_pcibios_init(); mips_pcibios_init();
......
...@@ -19,9 +19,14 @@ ...@@ -19,9 +19,14 @@
*/ */
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/timer.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mips-boards/generic.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) void mips_display_message(const char *str)
{ {
static unsigned int __iomem *display = NULL; static unsigned int __iomem *display = NULL;
...@@ -37,3 +42,22 @@ void mips_display_message(const char *str) ...@@ -37,3 +42,22 @@ void mips_display_message(const char *str)
writel(' ', display + i); 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);
}
...@@ -53,37 +53,11 @@ ...@@ -53,37 +53,11 @@
unsigned long cpu_khz; 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) #define CPUCTR_IMASKBIT (0x100 << MIPSCPU_INT_CPUCTR)
static unsigned int timer_tick_count;
static int mips_cpu_timer_irq; static int mips_cpu_timer_irq;
extern void smtc_timer_broadcast(int); 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) static void mips_timer_dispatch(void)
{ {
do_IRQ(mips_cpu_timer_irq); do_IRQ(mips_cpu_timer_irq);
...@@ -143,7 +117,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id) ...@@ -143,7 +117,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
if (cpu_data[cpu].vpe_id == 0) { if (cpu_data[cpu].vpe_id == 0) {
timer_interrupt(irq, NULL); timer_interrupt(irq, NULL);
smtc_timer_broadcast(cpu_data[cpu].vpe_id); smtc_timer_broadcast(cpu_data[cpu].vpe_id);
scroll_display_message();
} else { } else {
write_c0_compare(read_c0_count() + write_c0_compare(read_c0_count() +
(mips_hpt_frequency/HZ)); (mips_hpt_frequency/HZ));
...@@ -167,8 +140,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id) ...@@ -167,8 +140,6 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id)
/* we keep interrupt disabled all the time */ /* we keep interrupt disabled all the time */
if (!r2 || (read_c0_cause() & (1 << 30))) if (!r2 || (read_c0_cause() & (1 << 30)))
timer_interrupt(irq, NULL); timer_interrupt(irq, NULL);
scroll_display_message();
} else { } else {
/* Everyone else needs to reset the timer int here as /* Everyone else needs to reset the timer int here as
ll_local_timer_interrupt doesn't */ ll_local_timer_interrupt doesn't */
...@@ -262,6 +233,8 @@ void __init mips_time_init(void) ...@@ -262,6 +233,8 @@ void __init mips_time_init(void)
(est_freq%1000000)*100/1000000); (est_freq%1000000)*100/1000000);
cpu_khz = est_freq / 1000; cpu_khz = est_freq / 1000;
mips_scroll_message();
} }
void __init plat_timer_setup(struct irqaction *irq) void __init plat_timer_setup(struct irqaction *irq)
......
...@@ -56,6 +56,12 @@ const char *get_system_type(void) ...@@ -56,6 +56,12 @@ const char *get_system_type(void)
return "MIPS Malta"; 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 #ifdef CONFIG_BLK_DEV_FD
void __init fd_activate(void) void __init fd_activate(void)
{ {
......
...@@ -43,6 +43,8 @@ const char *get_system_type(void) ...@@ -43,6 +43,8 @@ const char *get_system_type(void)
return "MIPS SEAD"; return "MIPS SEAD";
} }
const char display_string[] = " LINUX ON SEAD ";
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
ioport_resource.end = 0x7fffffff; ioport_resource.end = 0x7fffffff;
......
...@@ -33,6 +33,7 @@ extern void prom_meminit(void); ...@@ -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 prom_fixup_mem_map(unsigned long start_mem, unsigned long end_mem);
extern void mips_display_message(const char *str); extern void mips_display_message(const char *str);
extern void mips_display_word(unsigned int num); extern void mips_display_word(unsigned int num);
extern void mips_scroll_message(void);
extern int get_ethernet_addr(char *ethernet_addr); extern int get_ethernet_addr(char *ethernet_addr);
/* Memory descriptor management. */ /* Memory descriptor management. */
......
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