]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
m68k: mvme147: Reinstate early console
authorDaniel Palmer <daniel@0x0f.com>
Tue, 5 Nov 2024 23:51:24 +0000 (10:51 +1100)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Wed, 6 Nov 2024 14:22:13 +0000 (15:22 +0100)
Commit a38eaa07a0ce ("m68k/mvme147: config.c - Remove unused
functions"), removed the console functionality for the mvme147 instead
of wiring it up to an early console.  Put the console write function
back and wire it up like mvme16x does so it's possible to see Linux boot
on this fine hardware once more.

Fixes: a38eaa07a0ce ("m68k/mvme147: config.c - Remove unused functions")
Signed-off-by: Daniel Palmer <daniel@0x0f.com>
Co-developed-by: Finn Thain <fthain@linux-m68k.org>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/a82e8f0068a8722996a0ccfe666abb5e0a5c120d.1730850684.git.fthain@linux-m68k.org
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
arch/m68k/kernel/early_printk.c
arch/m68k/mvme147/config.c
arch/m68k/mvme147/mvme147.h [new file with mode: 0644]

index 3cc944df04f65ef13104eb23973bf135bf546dac..f11ef9f1f56fcfcc2217a6eb98f8a05a17f77179 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/setup.h>
 
 
+#include "../mvme147/mvme147.h"
 #include "../mvme16x/mvme16x.h"
 
 asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
@@ -22,7 +23,9 @@ static void __ref debug_cons_write(struct console *c,
 {
 #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
       defined(CONFIG_COLDFIRE))
-       if (MACH_IS_MVME16x)
+       if (MACH_IS_MVME147)
+               mvme147_scc_write(c, s, n);
+       else if (MACH_IS_MVME16x)
                mvme16x_cons_write(c, s, n);
        else
                debug_cons_nputs(s, n);
index 4279069fbb6e7bfe230e81bcfd317476fd13d459..824c42a302c6fd018a8b20a01c1dd11147fa90b3 100644 (file)
@@ -32,6 +32,7 @@
 #include <asm/mvme147hw.h>
 #include <asm/config.h>
 
+#include "mvme147.h"
 
 static void mvme147_get_model(char *model);
 static void __init mvme147_sched_init(void);
@@ -185,3 +186,32 @@ int mvme147_hwclk(int op, struct rtc_time *t)
        }
        return 0;
 }
+
+static void scc_delay(void)
+{
+       __asm__ __volatile__ ("nop; nop;");
+}
+
+static void scc_write(char ch)
+{
+       do {
+               scc_delay();
+       } while (!(in_8(M147_SCC_A_ADDR) & BIT(2)));
+       scc_delay();
+       out_8(M147_SCC_A_ADDR, 8);
+       scc_delay();
+       out_8(M147_SCC_A_ADDR, ch);
+}
+
+void mvme147_scc_write(struct console *co, const char *str, unsigned int count)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       while (count--) {
+               if (*str == '\n')
+                       scc_write('\r');
+               scc_write(*str++);
+       }
+       local_irq_restore(flags);
+}
diff --git a/arch/m68k/mvme147/mvme147.h b/arch/m68k/mvme147/mvme147.h
new file mode 100644 (file)
index 0000000..140bc98
--- /dev/null
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+struct console;
+
+/* config.c */
+void mvme147_scc_write(struct console *co, const char *str, unsigned int count);