Commit 83f672a7 authored by Finn Thain's avatar Finn Thain Committed by Geert Uytterhoeven
Browse files

m68k: Don't unregister boot console needlessly



When MACH_IS_MVME147, the boot console calls mvme147_scc_write() to
generate console output. That will continue to work even after
debug_cons_nputs() becomes unavailable so there's no need to
unregister the boot console.

Take the opportunity to remove a repeated MACH_IS_* test. Use the
actual .write method (instead of a wrapper) and test that pointer
instead. This means adding an unused parameter to debug_cons_nputs() for
consistency with the struct console API.

early_printk.c is only built when CONFIG_EARLY_PRINTK=y. As of late,
head.S is only built when CONFIG_MMU_MOTOROLA=y. So let the former symbol
depend on the latter, to obviate some ifdef conditionals.

Cc: Daniel Palmer <daniel@0x0f.com>
Fixes: 077b33b9 ("m68k: mvme147: Reinstate early console")
Signed-off-by: default avatarFinn Thain <fthain@linux-m68k.org>
Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/d1d4328e5aa9a87bd8352529ce62b767731c0530.1743467205.git.fthain@linux-m68k.org


Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent e911044c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ config BOOTPARAM_STRING

config EARLY_PRINTK
	bool "Early printk"
	depends on !(SUN3 || M68000 || COLDFIRE)
	depends on MMU_MOTOROLA
	help
	  Write kernel log output directly to a serial port.
	  Where implemented, output goes to the framebuffer as well.
+14 −28
Original line number Diff line number Diff line
@@ -16,25 +16,10 @@
#include "../mvme147/mvme147.h"
#include "../mvme16x/mvme16x.h"

asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);

static void __ref debug_cons_write(struct console *c,
				   const char *s, unsigned n)
{
#if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
      defined(CONFIG_COLDFIRE))
	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);
#endif
}
asmlinkage void __init debug_cons_nputs(struct console *c, const char *s, unsigned int n);

static struct console early_console_instance = {
	.name  = "debug",
	.write = debug_cons_write,
	.flags = CON_PRINTBUFFER | CON_BOOT,
	.index = -1
};
@@ -44,6 +29,12 @@ static int __init setup_early_printk(char *buf)
	if (early_console || buf)
		return 0;

	if (MACH_IS_MVME147)
		early_console_instance.write = mvme147_scc_write;
	else if (MACH_IS_MVME16x)
		early_console_instance.write = mvme16x_cons_write;
	else
		early_console_instance.write = debug_cons_nputs;
	early_console = &early_console_instance;
	register_console(early_console);

@@ -51,20 +42,15 @@ static int __init setup_early_printk(char *buf)
}
early_param("earlyprintk", setup_early_printk);

static int __init unregister_early_console(void)
{
	/*
 * debug_cons_nputs() defined in arch/m68k/kernel/head.S cannot be called
 * after init sections are discarded (for platforms that use it).
	 * debug_cons_nputs() defined in arch/m68k/kernel/head.S cannot be
	 * called after init sections are discarded (for platforms that use it).
	 */
#if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
      defined(CONFIG_COLDFIRE))
	if (early_console && early_console->write == debug_cons_nputs)
		return unregister_console(early_console);

static int __init unregister_early_console(void)
{
	if (!early_console || MACH_IS_MVME16x)
	return 0;

	return unregister_console(early_console);
}
late_initcall(unregister_early_console);

#endif
+4 −4
Original line number Diff line number Diff line
@@ -3263,8 +3263,8 @@ func_return putn
 *	turns around and calls the internal routines.  This routine
 *	is used by the boot console.
 *
 *	The calling parameters are:
 *		void debug_cons_nputs(const char *str, unsigned length)
 *	The function signature is -
 *		void debug_cons_nputs(struct console *c, const char *s, unsigned int n)
 *
 *	This routine does NOT understand variable arguments only
 *	simple strings!
@@ -3273,8 +3273,8 @@ ENTRY(debug_cons_nputs)
	moveml	%d0/%d1/%a0,%sp@-
	movew	%sr,%sp@-
	ori	#0x0700,%sr
	movel	%sp@(18),%a0		/* fetch parameter */
	movel	%sp@(22),%d1		/* fetch parameter */
	movel	%sp@(22),%a0		/* char *s */
	movel	%sp@(26),%d1		/* unsigned int n */
	jra	2f
1:
#ifdef CONSOLE_DEBUG