From: David Gibson <david@gibson.dropbear.id.au>
To: <linuxppc-dev@ozlabs.org>
Subject: [PATCH 7/16] Early serial debug support for PPC44x
Date: Tue, 13 Feb 2007 17:10:24 +1100 (EST) [thread overview]
Message-ID: <20070213061024.DA1ABDDD0C@ozlabs.org> (raw)
In-Reply-To: <20070213060904.GA6214@localhost.localdomain>
This patch adds support for early serial debugging via the built in
port on IBM/AMCC PowerPC 44x CPUs. It uses a bolted TLB entry in
address space 1 for the UART's mapping, allowing robust debugging both
before and after the initialization of the MMU.
Signed-off-by: David Gibson <dwg@au1.ibm.com>
---
arch/powerpc/Kconfig.debug | 18 +++++++++++----
arch/powerpc/kernel/Makefile | 1
arch/powerpc/kernel/head_44x.S | 34 +++++++++++-----------------
arch/powerpc/kernel/misc_44x.S | 46 +++++++++++++++++++++++++++++++++++++++
arch/powerpc/kernel/udbg.c | 3 ++
arch/powerpc/kernel/udbg_16550.c | 24 ++++++++++++++++++++
include/asm-powerpc/mmu_44x.h | 6 +++++
include/asm-powerpc/udbg.h | 1
8 files changed, 107 insertions(+), 26 deletions(-)
Index: working-2.6/arch/powerpc/Kconfig.debug
===================================================================
--- working-2.6.orig/arch/powerpc/Kconfig.debug 2007-02-09 09:57:55.000000000 +1100
+++ working-2.6/arch/powerpc/Kconfig.debug 2007-02-09 11:51:03.000000000 +1100
@@ -130,11 +130,6 @@ config BOOTX_TEXT
Say Y here to see progress messages from the boot firmware in text
mode. Requires either BootX or Open Firmware.
-config SERIAL_TEXT_DEBUG
- bool "Support for early boot texts over serial port"
- depends on 4xx || LOPEC || MV64X60 || PPLUS || PRPMC800 || \
- PPC_GEN550 || PPC_MPC52xx
-
config PPC_EARLY_DEBUG
bool "Early debugging (dangerous)"
@@ -199,6 +194,19 @@ config PPC_EARLY_DEBUG_BEAT
help
Select this to enable early debugging for Celleb with Beat.
+config PPC_EARLY_DEBUG_44x
+ bool "Early serial debugging for IBM 44x CPUs"
+ depends on 44x
+ select PPC_UDBG_16550
+ help
+ Select this to enable early debugging for IBM 44x chips via the
+ inbuilt serial port.
+
endchoice
+config PPC_EARLY_DEBUG_44x_PHYSADDR
+ hex
+ depends PPC_EARLY_DEBUG_44x
+ default "0x140000200"
+
endmenu
Index: working-2.6/arch/powerpc/kernel/head_44x.S
===================================================================
--- working-2.6.orig/arch/powerpc/kernel/head_44x.S 2007-02-09 11:51:01.000000000 +1100
+++ working-2.6/arch/powerpc/kernel/head_44x.S 2007-02-09 11:51:03.000000000 +1100
@@ -172,36 +172,28 @@ skpinv: addi r4,r4,1 /* Increment */
isync
4:
-#ifdef CONFIG_SERIAL_TEXT_DEBUG
- /*
- * Add temporary UART mapping for early debug.
- * We can map UART registers wherever we want as long as they don't
- * interfere with other system mappings (e.g. with pinned entries).
- * For an example of how we handle this - see ocotea.h. --ebs
- */
+#ifdef CONFIG_PPC_EARLY_DEBUG_44x
+ /* Add UART mapping for early debug. */
+
/* pageid fields */
- lis r3,UART0_IO_BASE@h
- ori r3,r3,PPC44x_TLB_VALID | PPC44x_TLB_4K
+ lis r3,PPC44x_EARLY_DEBUG_VIRTADDR@h
+ ori r3,r3,PPC44x_TLB_VALID|PPC44x_TLB_TS|PPC44x_TLB_64K
/* xlat fields */
- lis r4,UART0_PHYS_IO_BASE@h /* RPN depends on SoC */
-#ifndef CONFIG_440EP
- ori r4,r4,0x0001 /* ERPN is 1 for second 4GB page */
-#endif
+ lis r4,CONFIG_PPC_EARLY_DEBUG_44x_PHYSADDR@h
+ ori r4,r4,(CONFIG_PPC_EARLY_DEBUG_44x_PHYSADDR >> 32)
/* attrib fields */
- li r5,0
- ori r5,r5,(PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_I | PPC44x_TLB_G)
-
- li r0,0 /* TLB slot 0 */
+ li r5,(PPC44x_TLB_SW|PPC44x_TLB_SR|PPC44x_TLB_I|PPC44x_TLB_G)
+ li r0,62 /* TLB slot 0 */
- tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */
- tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields */
- tlbwe r5,r0,PPC44x_TLB_ATTRIB /* Load the attrib/access fields */
+ tlbwe r3,r0,PPC44x_TLB_PAGEID
+ tlbwe r4,r0,PPC44x_TLB_XLAT
+ tlbwe r5,r0,PPC44x_TLB_ATTRIB
/* Force context change */
isync
-#endif /* CONFIG_SERIAL_TEXT_DEBUG */
+#endif /* CONFIG_PPC_EARLY_DEBUG_44x */
/* Establish the interrupt vector offsets */
SET_IVOR(0, CriticalInput);
Index: working-2.6/arch/powerpc/kernel/udbg_16550.c
===================================================================
--- working-2.6.orig/arch/powerpc/kernel/udbg_16550.c 2007-02-09 09:57:55.000000000 +1100
+++ working-2.6/arch/powerpc/kernel/udbg_16550.c 2007-02-09 11:51:03.000000000 +1100
@@ -191,3 +191,27 @@ void udbg_init_pas_realmode(void)
udbg_getc_poll = NULL;
}
#endif /* CONFIG_PPC_MAPLE */
+
+#ifdef CONFIG_PPC_EARLY_DEBUG_44x
+extern u8 as1_readb(volatile u8 __iomem *addr);
+extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
+
+static void udbg_44x_as1_putc(char c)
+{
+ if (udbg_comport) {
+ while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
+ /* wait for idle */;
+ as1_writeb(c, &udbg_comport->thr); eieio();
+ if (c == '\n')
+ udbg_44x_as1_putc('\r');
+ }
+}
+
+void __init udbg_init_44x_as1(void)
+{
+ udbg_comport =
+ (volatile struct NS16550 __iomem *)PPC44x_EARLY_DEBUG_VIRTADDR;
+
+ udbg_putc = udbg_44x_as1_putc;
+}
+#endif /* CONFIG_PPC_EARLY_DEBUG_44x */
Index: working-2.6/include/asm-powerpc/mmu_44x.h
===================================================================
--- working-2.6.orig/include/asm-powerpc/mmu_44x.h 2007-02-09 11:51:01.000000000 +1100
+++ working-2.6/include/asm-powerpc/mmu_44x.h 2007-02-09 11:51:03.000000000 +1100
@@ -68,7 +68,13 @@ typedef struct {
#define PPC44x_PIN_SHIFT 28
#define PPC_PIN_SIZE (1 << PPC44x_PIN_SHIFT)
+#ifndef CONFIG_PPC_EARLY_DEBUG_44x
#define PPC44x_EARLY_TLBS 1
+#else
+#define PPC44x_EARLY_TLBS 2
+#define PPC44x_EARLY_DEBUG_VIRTADDR \
+ (ASM_CONST(0xf0000000) | (CONFIG_PPC_EARLY_DEBUG_44x_PHYSADDR & 0xffff))
+#endif
#endif /* _ASM_POWERPC_MMU_44X_H_ */
Index: working-2.6/arch/powerpc/kernel/udbg.c
===================================================================
--- working-2.6.orig/arch/powerpc/kernel/udbg.c 2007-02-09 11:50:17.000000000 +1100
+++ working-2.6/arch/powerpc/kernel/udbg.c 2007-02-09 11:51:03.000000000 +1100
@@ -51,6 +51,9 @@ void __init udbg_early_init(void)
udbg_init_pas_realmode();
#elif defined(CONFIG_BOOTX_TEXT)
udbg_init_btext();
+#elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
+ /* PPC44x debug */
+ udbg_init_44x_as1();
#endif
}
Index: working-2.6/include/asm-powerpc/udbg.h
===================================================================
--- working-2.6.orig/include/asm-powerpc/udbg.h 2007-02-09 11:50:41.000000000 +1100
+++ working-2.6/include/asm-powerpc/udbg.h 2007-02-09 11:51:03.000000000 +1100
@@ -47,6 +47,7 @@ extern void __init udbg_init_rtas_panel(
extern void __init udbg_init_rtas_console(void);
extern void __init udbg_init_debug_beat(void);
extern void __init udbg_init_btext(void);
+extern void __init udbg_init_44x_as1(void);
#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_UDBG_H */
Index: working-2.6/arch/powerpc/kernel/Makefile
===================================================================
--- working-2.6.orig/arch/powerpc/kernel/Makefile 2007-02-09 11:50:54.000000000 +1100
+++ working-2.6/arch/powerpc/kernel/Makefile 2007-02-09 11:51:03.000000000 +1100
@@ -54,6 +54,7 @@ obj-y += time.o prom.o traps.o setup-
udbg.o misc.o io.o
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
+obj-$(CONFIG_44x) += misc_44x.o
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
obj-$(CONFIG_MODULES) += ppc_ksyms.o
obj-$(CONFIG_BOOTX_TEXT) += btext.o
Index: working-2.6/arch/powerpc/kernel/misc_44x.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ working-2.6/arch/powerpc/kernel/misc_44x.S 2007-02-09 11:51:03.000000000 +1100
@@ -0,0 +1,46 @@
+/*
+ * This file contains miscellaneous low-level functions for PPC 44x.
+ * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ */
+
+#include <asm/reg.h>
+#include <asm/ppc_asm.h>
+
+ .text
+
+/*
+ * Do an IO access in AS1
+ */
+_GLOBAL(as1_readb)
+ mfmsr r7
+ ori r0,r7,MSR_DS
+ sync
+ mtmsr r0
+ sync
+ isync
+ lbz r3,0(r3)
+ sync
+ mtmsr r7
+ sync
+ isync
+ blr
+
+_GLOBAL(as1_writeb)
+ mfmsr r7
+ ori r0,r7,MSR_DS
+ sync
+ mtmsr r0
+ sync
+ isync
+ stb r3,0(r4)
+ sync
+ mtmsr r7
+ sync
+ isync
+ blr
next prev parent reply other threads:[~2007-02-13 6:10 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-13 6:09 [0/16] Preliminary Ebony (440GP) support for arch/powerpc David Gibson
2007-02-13 6:10 ` [PATCH 3/16] [powerpc] Use udbg_early_init() on ppc32 David Gibson
2007-02-13 6:22 ` Benjamin Herrenschmidt
2007-02-13 6:10 ` [PATCH 6/16] Port 44x MMU definitions to ARCH=powerpc David Gibson
2007-02-13 6:24 ` Benjamin Herrenschmidt
2007-02-13 17:13 ` Roland Dreier
2007-02-13 17:45 ` Josh Boyer
2007-02-13 21:36 ` Benjamin Herrenschmidt
2007-02-13 6:10 ` [PATCH 5/16] powerpc: Add zImage platform hook for kernel address David Gibson
2007-02-13 6:10 ` [PATCH 4/16] powerpc: Allow duplicate lmb_reserve() calls David Gibson
2007-02-13 7:05 ` Michael Neuling
2007-02-13 8:48 ` Michael Ellerman
2007-02-13 20:44 ` Benjamin Herrenschmidt
2007-02-13 6:10 ` [PATCH 8/16] Define FIXED_PORT flag for serial_core David Gibson
2007-02-13 6:10 ` David Gibson [this message]
2007-02-13 15:04 ` [PATCH 7/16] Early serial debug support for PPC44x Josh Boyer
2007-02-14 0:16 ` David Gibson
2007-02-14 1:02 ` Josh Boyer
2007-02-14 1:00 ` David Gibson
2007-02-14 2:00 ` Alan Modra
2007-02-14 2:02 ` David Gibson
2007-02-14 2:38 ` Alan Modra
2007-02-14 15:41 ` Josh Boyer
2007-02-14 23:05 ` David Gibson
2007-02-13 6:10 ` [PATCH 2/16] More DCR native fixups David Gibson
2007-02-13 6:22 ` Benjamin Herrenschmidt
2007-02-13 6:10 ` [PATCH 1/16] Remove ibm4{xx,4x}.h from arch/powerpc David Gibson
2007-02-13 14:19 ` Josh Boyer
2007-02-13 6:10 ` [PATCH 10/16] Add support for BSS stack for zImage wrapper David Gibson
2007-02-13 6:10 ` [PATCH 9/16] Use resource_size_t for serial port IO addresses David Gibson
2007-02-13 6:10 ` [PATCH 13/16] Add initrd properties to device tree from zImage David Gibson
2007-02-13 6:10 ` [PATCH 11/16] zImage wrapper for Ebony David Gibson
2007-02-13 17:05 ` Geoff Levand
2007-02-14 0:17 ` David Gibson
2007-02-13 6:10 ` [PATCH 14/16] Add arch/powerpc driver for UIC, PPC4xx interrupt controller David Gibson
2007-02-13 6:10 ` [PATCH 12/16] Automatically lmb_reserve() initrd David Gibson
2007-02-13 7:14 ` Michael Neuling
2007-02-13 6:10 ` [PATCH 15/16] Add device tree for Ebony David Gibson
2007-02-13 20:08 ` Segher Boessenkool
2007-02-14 0:22 ` David Gibson
2007-02-14 1:51 ` Benjamin Herrenschmidt
2007-02-14 4:46 ` David Gibson
2007-02-14 17:54 ` Segher Boessenkool
2007-02-14 23:18 ` David Gibson
2007-02-15 0:25 ` Segher Boessenkool
2007-02-14 17:51 ` Segher Boessenkool
2007-02-14 17:48 ` Segher Boessenkool
2007-02-14 21:30 ` Benjamin Herrenschmidt
2007-02-15 0:03 ` Segher Boessenkool
2007-02-15 0:53 ` Benjamin Herrenschmidt
2007-02-15 1:00 ` Segher Boessenkool
2007-02-15 2:22 ` Benjamin Herrenschmidt
2007-02-15 2:51 ` Segher Boessenkool
2007-02-14 23:17 ` David Gibson
2007-02-15 0:27 ` Segher Boessenkool
2007-02-15 14:02 ` Jon Loeliger
2007-02-15 14:56 ` Segher Boessenkool
2007-02-15 17:02 ` Yoder Stuart-B08248
2007-02-15 17:10 ` Scott Wood
2007-02-16 9:20 ` Segher Boessenkool
2007-02-14 16:14 ` Yoder Stuart-B08248
2007-02-14 16:32 ` Josh Boyer
2007-02-14 17:58 ` Segher Boessenkool
2007-02-14 20:08 ` Yoder Stuart-B08248
2007-02-14 21:12 ` Segher Boessenkool
2007-02-14 21:35 ` Yoder Stuart-B08248
2007-02-14 21:42 ` Benjamin Herrenschmidt
2007-02-14 21:59 ` Scott Wood
2007-02-15 0:20 ` Segher Boessenkool
2007-02-14 22:50 ` Yoder Stuart-B08248
2007-02-14 22:57 ` Benjamin Herrenschmidt
2007-02-15 0:17 ` Segher Boessenkool
2007-02-15 2:12 ` Paul Mackerras
2007-02-15 2:43 ` Segher Boessenkool
2007-02-15 3:15 ` Paul Mackerras
2007-02-15 14:40 ` Segher Boessenkool
2007-02-16 1:17 ` Paul Mackerras
2007-02-16 9:41 ` Segher Boessenkool
2007-02-15 0:10 ` Segher Boessenkool
2007-02-14 23:32 ` David Gibson
2007-02-14 23:27 ` David Gibson
2007-02-14 23:22 ` David Gibson
2007-02-14 23:51 ` Benjamin Herrenschmidt
2007-02-15 0:36 ` Segher Boessenkool
2007-02-15 0:31 ` Segher Boessenkool
2007-02-15 1:53 ` David Gibson
2007-02-15 3:09 ` Segher Boessenkool
2007-02-15 3:33 ` David Gibson
2007-02-15 14:47 ` Segher Boessenkool
2007-02-15 10:52 ` Benjamin Herrenschmidt
2007-02-15 14:52 ` Segher Boessenkool
2007-02-15 20:43 ` Benjamin Herrenschmidt
2007-02-16 9:23 ` Segher Boessenkool
2007-02-15 16:37 ` Yoder Stuart-B08248
2007-02-15 21:41 ` Benjamin Herrenschmidt
2007-02-16 9:25 ` Segher Boessenkool
2007-02-16 15:32 ` Hartmut Penner
2007-02-16 16:47 ` Yoder Stuart-B08248
2007-02-19 12:02 ` Hartmut Penner
2007-02-14 21:29 ` Benjamin Herrenschmidt
2007-02-13 6:10 ` [PATCH 16/16] Support for Ebony in arch/powerpc David Gibson
2007-02-13 17:18 ` Roland Dreier
2007-02-14 0:20 ` David Gibson
2007-02-13 14:37 ` [0/16] Preliminary Ebony (440GP) support for arch/powerpc Josh Boyer
2007-02-13 20:21 ` Josh Boyer
2007-02-13 15:46 ` Josh Boyer
2007-02-14 16:06 ` Josh Boyer
2007-02-14 23:12 ` David Gibson
2007-02-16 2:19 ` Josh Boyer
2007-02-16 2:53 ` David Gibson
2007-02-16 4:33 ` Josh Boyer
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=20070213061024.DA1ABDDD0C@ozlabs.org \
--to=david@gibson.dropbear.id.au \
--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.