m68k: mvme147: Reinstate early console

[ Upstream commit 077b33b9e2833ff25050d986178a2c4c4036cbac ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Daniel Palmer 2024-11-06 10:51:24 +11:00 committed by Ksawlii
parent 37f4b0981e
commit 21be10eb1e
3 changed files with 40 additions and 1 deletions

View file

@ -13,6 +13,7 @@
#include <asm/setup.h> #include <asm/setup.h>
#include "../mvme147/mvme147.h"
#include "../mvme16x/mvme16x.h" #include "../mvme16x/mvme16x.h"
asmlinkage void __init debug_cons_nputs(const char *s, unsigned n); 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) || \ #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
defined(CONFIG_COLDFIRE)) 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); mvme16x_cons_write(c, s, n);
else else
debug_cons_nputs(s, n); debug_cons_nputs(s, n);

View file

@ -35,6 +35,7 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/mvme147hw.h> #include <asm/mvme147hw.h>
#include "mvme147.h"
static void mvme147_get_model(char *model); static void mvme147_get_model(char *model);
extern void mvme147_sched_init(irq_handler_t handler); extern void mvme147_sched_init(irq_handler_t handler);
@ -188,3 +189,32 @@ int mvme147_hwclk(int op, struct rtc_time *t)
} }
return 0; 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);
}

View file

@ -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);