All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: <linuxppc-dev@ozlabs.org>
Subject: [RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors
Date: Wed, 21 Nov 2007 17:16:30 +1100	[thread overview]
Message-ID: <20071121061720.83D5ADEBE3@ozlabs.org> (raw)
In-Reply-To: <1195625777.579001.269266058699.qpush@grosgo>

This adds some basic real mode based early udbg support for 40x
in order to debug things more easily

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---

 arch/powerpc/Kconfig.debug             |   12 ++++++++++
 arch/powerpc/kernel/misc_32.S          |   39 +++++++++++++++++++++++++++++++++
 arch/powerpc/kernel/udbg.c             |    3 ++
 arch/powerpc/kernel/udbg_16550.c       |   33 +++++++++++++++++++++++++++
 arch/powerpc/platforms/Kconfig.cputype |    1 
 include/asm-powerpc/udbg.h             |    1 
 6 files changed, 89 insertions(+)

Index: linux-work/arch/powerpc/Kconfig.debug
===================================================================
--- linux-work.orig/arch/powerpc/Kconfig.debug	2007-11-21 12:44:03.000000000 +1100
+++ linux-work/arch/powerpc/Kconfig.debug	2007-11-21 12:47:58.000000000 +1100
@@ -220,6 +220,13 @@ config PPC_EARLY_DEBUG_44x
 	  Select this to enable early debugging for IBM 44x chips via the
 	  inbuilt serial port.
 
+config PPC_EARLY_DEBUG_40x
+	bool "Early serial debugging for IBM/AMCC 40x CPUs"
+	depends on 40x
+	help
+	  Select this to enable early debugging for IBM 40x chips via the
+	  inbuilt serial port.
+
 config PPC_EARLY_DEBUG_CPM
 	bool "Early serial debugging for Freescale CPM-based serial ports"
 	depends on SERIAL_CPM
@@ -241,6 +248,11 @@ config PPC_EARLY_DEBUG_44x_PHYSHIGH
 	depends on PPC_EARLY_DEBUG_44x
 	default "0x1"
 
+config PPC_EARLY_DEBUG_40x_PHYSADDR
+	hex "Early debug UART physical address"
+	depends on PPC_EARLY_DEBUG_40x
+	default "0xef600300"
+
 config PPC_EARLY_DEBUG_CPM_ADDR
 	hex "CPM UART early debug transmit descriptor address"
 	depends on PPC_EARLY_DEBUG_CPM
Index: linux-work/arch/powerpc/kernel/misc_32.S
===================================================================
--- linux-work.orig/arch/powerpc/kernel/misc_32.S	2007-11-21 12:40:26.000000000 +1100
+++ linux-work/arch/powerpc/kernel/misc_32.S	2007-11-21 12:41:43.000000000 +1100
@@ -206,6 +206,45 @@ _GLOBAL(_nmask_and_or_msr)
 	isync
 	blr			/* Done */
 
+#ifdef CONFIG_40x
+
+/*
+ * Do an IO access in real mode
+ */
+_GLOBAL(real_readb)
+	mfmsr	r7
+	ori	r0,r7,MSR_DR
+	xori	r0,r0,MSR_DR
+	sync
+	mtmsr	r0
+	sync
+	isync
+	lbz	r3,0(r3)
+	sync
+	mtmsr	r7
+	sync
+	isync
+	blr
+
+	/*
+ * Do an IO access in real mode
+ */
+_GLOBAL(real_writeb)
+	mfmsr	r7
+	ori	r0,r7,MSR_DR
+	xori	r0,r0,MSR_DR
+	sync
+	mtmsr	r0
+	sync
+	isync
+	stb	r3,0(r4)
+	sync
+	mtmsr	r7
+	sync
+	isync
+	blr
+
+#endif /* CONFIG_40x */
 
 /*
  * Flush MMU TLB
Index: linux-work/arch/powerpc/kernel/udbg.c
===================================================================
--- linux-work.orig/arch/powerpc/kernel/udbg.c	2007-11-21 12:38:11.000000000 +1100
+++ linux-work/arch/powerpc/kernel/udbg.c	2007-11-21 12:44:50.000000000 +1100
@@ -54,6 +54,9 @@ void __init udbg_early_init(void)
 #elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
 	/* PPC44x debug */
 	udbg_init_44x_as1();
+#elif defined(CONFIG_PPC_EARLY_DEBUG_40x)
+	/* PPC40x debug */
+	udbg_init_40x_realmode();
 #elif defined(CONFIG_PPC_EARLY_DEBUG_CPM)
 	udbg_init_cpm();
 #endif
Index: linux-work/arch/powerpc/kernel/udbg_16550.c
===================================================================
--- linux-work.orig/arch/powerpc/kernel/udbg_16550.c	2007-11-21 12:42:24.000000000 +1100
+++ linux-work/arch/powerpc/kernel/udbg_16550.c	2007-11-21 12:50:40.000000000 +1100
@@ -225,3 +225,36 @@ void __init udbg_init_44x_as1(void)
 	udbg_getc = udbg_44x_as1_getc;
 }
 #endif /* CONFIG_PPC_EARLY_DEBUG_44x */
+
+#ifdef CONFIG_PPC_EARLY_DEBUG_40x
+static void udbg_40x_real_putc(char c)
+{
+	if (udbg_comport) {
+		while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
+			/* wait for idle */;
+		real_writeb(c, &udbg_comport->thr); eieio();
+		if (c == '\n')
+			udbg_40x_real_putc('\r');
+	}
+}
+
+static int udbg_40x_real_getc(void)
+{
+	if (udbg_comport) {
+		while ((real_readb(&udbg_comport->lsr) & LSR_DR) == 0)
+			; /* wait for char */
+		return real_readb(&udbg_comport->rbr);
+	}
+	return -1;
+}
+
+void __init udbg_init_40x_realmode(void)
+{
+	udbg_comport = (volatile struct NS16550 __iomem *)
+		CONFIG_PPC_EARLY_DEBUG_40x_PHYSADDR;
+
+	udbg_putc = udbg_40x_real_putc;
+	udbg_getc = udbg_40x_real_getc;
+	udbg_getc_poll = NULL;
+}
+#endif /* CONFIG_PPC_EARLY_DEBUG_40x */
Index: linux-work/include/asm-powerpc/udbg.h
===================================================================
--- linux-work.orig/include/asm-powerpc/udbg.h	2007-11-21 12:44:31.000000000 +1100
+++ linux-work/include/asm-powerpc/udbg.h	2007-11-21 12:44:45.000000000 +1100
@@ -48,6 +48,7 @@ extern void __init udbg_init_rtas_consol
 extern void __init udbg_init_debug_beat(void);
 extern void __init udbg_init_btext(void);
 extern void __init udbg_init_44x_as1(void);
+extern void __init udbg_init_40x_realmode(void);
 extern void __init udbg_init_cpm(void);
 
 #endif /* __KERNEL__ */
Index: linux-work/arch/powerpc/platforms/Kconfig.cputype
===================================================================
--- linux-work.orig/arch/powerpc/platforms/Kconfig.cputype	2007-11-21 12:50:16.000000000 +1100
+++ linux-work/arch/powerpc/platforms/Kconfig.cputype	2007-11-21 12:50:18.000000000 +1100
@@ -43,6 +43,7 @@ config 40x
 	bool "AMCC 40x"
 	select PPC_DCR_NATIVE
 	select WANT_DEVICE_TREE
+	select PPC_UDBG_16550
 
 config 44x
 	bool "AMCC 44x"

  parent reply	other threads:[~2007-11-21  6:16 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-21  6:16 [RFC/PATCH 0/14] powerpc: 4xx PCI and PCI-X support Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 1/14] powerpc: Make isa_mem_base common to 32 and 64 bits Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 2/14] powerpc: Merge pci_process_bridge_OF_ranges() Benjamin Herrenschmidt
2007-11-22 18:35   ` Vitaly Bordug
2007-11-21  6:16 ` [RFC/PATCH 3/14] powerpc: Fix declaration of pcibios_free_controller Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 4/14] powerpc: Fix powerpc 32 bits resource fixup for 64 bits resources Benjamin Herrenschmidt
2007-11-22 18:31   ` Vitaly Bordug
2007-11-21  6:16 ` [RFC/PATCH 6/14] powerpc: Add xmon function to dump 44x TLB Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 5/14] powerpc: Fix 440/440A machine check handling Benjamin Herrenschmidt
2007-11-21 13:12   ` Josh Boyer
2007-11-21 19:48     ` Benjamin Herrenschmidt
2007-11-21 19:51       ` Josh Boyer
2007-11-21 20:05         ` Benjamin Herrenschmidt
2007-11-28 21:34           ` Olof Johansson
2007-11-28 21:52             ` Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 7/14] powerpc: Change 32 bits PCI message about resource allocation Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 8/14] powerpc: Fix kmalloc alignmenent on non-coherent DMA Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 9/14] powerpc: 4xx PLB to PCI-X support Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 10/14] powerpc: 4xx PLB to PCI 2.x support Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 11/14] powerpc: PCI support for 4xx Ebony board Benjamin Herrenschmidt
2007-11-21  6:16 ` Benjamin Herrenschmidt [this message]
2007-11-21 22:58   ` [RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors David Gibson
2007-11-22  0:00     ` Benjamin Herrenschmidt
2007-11-22  0:22       ` David Gibson
2007-11-21  6:16 ` [RFC/PATCH 13/14] powerpc: EP405 boards support for arch/powerpc Benjamin Herrenschmidt
2007-11-21 13:21   ` Josh Boyer
2007-11-21 19:49     ` Benjamin Herrenschmidt
2007-11-21  6:16 ` [RFC/PATCH 14/14] powerpc: Add PCI to Walnut platform Benjamin Herrenschmidt
2007-11-21 13:24   ` Josh Boyer
2007-11-21  6:35 ` [RFC/PATCH 0/14] powerpc: 4xx PCI and PCI-X support Benjamin Herrenschmidt
2007-11-21 13:23 ` Josh Boyer
2007-11-21 14:04   ` Stefan Roese
2007-11-21 14:33     ` Josh Boyer
2007-11-21 19:51     ` Benjamin Herrenschmidt
2007-11-21 19:50   ` Benjamin Herrenschmidt

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=20071121061720.83D5ADEBE3@ozlabs.org \
    --to=benh@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.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.