From: Finn Thain <fthain@telegraphics.com.au>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Michael Schmitz <schmitz@debian.org>, linux-m68k@vger.kernel.org
Subject: [PATCH RESEND 3/4] m68k/mvme16x: adopt common boot console
Date: Fri, 11 Apr 2014 15:28:00 +1000 [thread overview]
Message-ID: <20140411052758.849384587@telegraphics.com.au> (raw)
In-Reply-To: 20140411052757.888960081@telegraphics.com.au
[-- Attachment #1: mvme16x-boot-console --]
[-- Type: text/plain, Size: 4718 bytes --]
In a multi-platform kernel binary we only need one early console instance.
The difficulty here is that the common early console gets started by
early_param(), whereas the MVME16x instance would be started later by
config_mvme16x(). That means some interrupt setup must be done earlier.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Tested-by: Stephen N Chivers <schivers@csc.com.au>
---
arch/m68k/kernel/early_printk.c | 18 ++++++++++++------
arch/m68k/kernel/head.S | 11 +++++++++++
arch/m68k/mvme16x/config.c | 27 ++-------------------------
3 files changed, 25 insertions(+), 31 deletions(-)
Index: linux-m68k/arch/m68k/kernel/early_printk.c
===================================================================
--- linux-m68k.orig/arch/m68k/kernel/early_printk.c 2014-03-03 10:29:59.000000000 +1100
+++ linux-m68k/arch/m68k/kernel/early_printk.c 2014-03-03 10:30:01.000000000 +1100
@@ -12,6 +12,9 @@
#include <linux/string.h>
#include <asm/setup.h>
+extern void mvme16x_cons_write(struct console *co,
+ const char *str, unsigned count);
+
asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
static void __init debug_cons_write(struct console *c,
@@ -20,7 +23,11 @@ static void __init debug_cons_write(stru
debug_cons_nputs(s, n);
}
+#ifdef CONFIG_MVME16X
+static struct console early_console_instance = {
+#else
static struct console early_console_instance __initdata = {
+#endif
.name = "debug",
.flags = CON_PRINTBUFFER | CON_BOOT,
.index = -1
@@ -28,14 +35,13 @@ static struct console early_console_inst
static int __init setup_early_printk(char *buf)
{
- /* MVME16x registers an early console after interrupt setup. */
- if (MACH_IS_MVME16x)
- return 0;
-
if (early_console || buf)
return 0;
- early_console_instance.write = debug_cons_write;
+ if (MACH_IS_MVME16x)
+ early_console_instance.write = mvme16x_cons_write;
+ else
+ early_console_instance.write = debug_cons_write;
early_console = &early_console_instance;
register_console(early_console);
@@ -47,7 +53,7 @@ early_param("earlyprintk", setup_early_p
static int __init unregister_early_console(void)
{
- if (!early_console)
+ if (!early_console || MACH_IS_MVME16x)
return 0;
/* debug_cons_nputs() can't be used after init sections are discarded */
Index: linux-m68k/arch/m68k/mvme16x/config.c
===================================================================
--- linux-m68k.orig/arch/m68k/mvme16x/config.c 2014-03-03 10:17:44.000000000 +1100
+++ linux-m68k/arch/m68k/mvme16x/config.c 2014-03-03 10:30:01.000000000 +1100
@@ -213,7 +213,8 @@ static void __init mvme16x_init_IRQ (voi
#define CySCRH (0x22)
#define CyTFTC (0x80)
-static void cons_write(struct console *co, const char *str, unsigned count)
+void mvme16x_cons_write(struct console *co,
+ const char *str, unsigned count)
{
volatile unsigned char *base_addr = (u_char *)CD2401_ADDR;
volatile u_char sink;
@@ -268,20 +269,6 @@ static void cons_write(struct console *c
base_addr[CyIER] = ier;
}
-static struct console cons_info =
-{
- .name = "sercon",
- .write = cons_write,
- .flags = CON_PRINTBUFFER | CON_BOOT,
- .index = -1,
-};
-
-static void __init mvme16x_early_console(void)
-{
- register_console(&cons_info);
-
- printk(KERN_INFO "MVME16x: early console registered\n");
-}
#endif
void __init config_mvme16x(void)
@@ -336,16 +323,6 @@ void __init config_mvme16x(void)
else
{
mvme16x_config = MVME16x_CONFIG_GOT_LP | MVME16x_CONFIG_GOT_CD2401;
-
- /* Dont allow any interrupts from the CD2401 until the interrupt */
- /* handlers are installed */
-
- pcc2chip[PccSCCMICR] = 0x10;
- pcc2chip[PccSCCTICR] = 0x10;
- pcc2chip[PccSCCRICR] = 0x10;
-#ifdef CONFIG_EARLY_PRINTK
- mvme16x_early_console();
-#endif
}
}
Index: linux-m68k/arch/m68k/kernel/head.S
===================================================================
--- linux-m68k.orig/arch/m68k/kernel/head.S 2014-03-03 10:29:59.000000000 +1100
+++ linux-m68k/arch/m68k/kernel/head.S 2014-03-03 10:30:01.000000000 +1100
@@ -2936,6 +2936,15 @@ L(serial_init_not_mac):
2:
#endif
+#ifdef CONFIG_MVME16x
+ is_not_mvme16x(L(serial_init_not_mvme16x))
+ moveb #0x10,M167_PCSCCMICR
+ moveb #0x10,M167_PCSCCTICR
+ moveb #0x10,M167_PCSCCRICR
+ jra L(serial_init_done)
+L(serial_init_not_mvme16x):
+#endif
+
#ifdef CONFIG_APOLLO
/* We count on the PROM initializing SIO1 */
#endif
@@ -3768,7 +3777,9 @@ M167_CYIER = 0xfff45011
M167_CYLICR = 0xfff45026
M167_CYTEOIR = 0xfff45085
M167_CYTDR = 0xfff450f8
+M167_PCSCCMICR = 0xfff4201d
M167_PCSCCTICR = 0xfff4201e
+M167_PCSCCRICR = 0xfff4201f
M167_PCTPIACKR = 0xfff42025
#endif
next prev parent reply other threads:[~2014-04-11 5:33 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-11 5:27 [PATCH RESEND 0/4] m68k: earlyprintk and debug console improvements Finn Thain
2014-04-11 5:27 ` [PATCH RESEND 1/4 v2] m68k: toward platform agnostic framebuffer debug logging Finn Thain
2014-04-11 5:27 ` [PATCH RESEND 2/4 v2] m68k: multi-platform EARLY_PRINTK Finn Thain
2014-04-11 5:28 ` Finn Thain [this message]
2014-04-11 9:19 ` [PATCH RESEND 3/4] m68k/mvme16x: adopt common boot console Geert Uytterhoeven
2014-04-12 1:40 ` Finn Thain
2014-04-11 5:28 ` [PATCH RESEND 4/4] m68k/atari: fix SCC initialization for debug console Finn Thain
2014-05-25 9:09 ` Geert Uytterhoeven
2014-05-25 10:37 ` Finn Thain
2014-05-26 1:23 ` Michael Schmitz
2014-05-26 4:30 ` Finn Thain
2014-05-26 1:18 ` Michael Schmitz
2014-05-26 8:56 ` Michael Schmitz
2014-05-26 9:28 ` Geert Uytterhoeven
2014-05-26 11:43 ` Finn Thain
2014-05-26 12:03 ` Finn Thain
2014-05-26 17:44 ` Andreas Schwab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140411052758.849384587@telegraphics.com.au \
--to=fthain@telegraphics.com.au \
--cc=geert@linux-m68k.org \
--cc=linux-m68k@vger.kernel.org \
--cc=schmitz@debian.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.