* [PATCH 12/14] powerpc: Add early udbg support for 40x processors
@ 2007-11-21 6:15 Benjamin Herrenschmidt
2007-11-21 23:47 ` Grant Likely
0 siblings, 1 reply; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2007-11-21 6:15 UTC (permalink / raw)
To: linuxppc-dev
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"
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors
2007-11-21 6:15 [PATCH 12/14] powerpc: Add early udbg support for 40x processors Benjamin Herrenschmidt
@ 2007-11-21 23:47 ` Grant Likely
2007-11-22 0:00 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 5+ messages in thread
From: Grant Likely @ 2007-11-21 23:47 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
On 11/20/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> 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>
> ---
> --- 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
Unfortunately, this isn't always true. The Xilinx Virtex parts us
config 40x, but not all FPGA bitstreams have a 16550 serial port.
Sometimes it's a uartlite instead.
Cheers,
g.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
grant.likely@secretlab.ca
(403) 399-0195
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors
2007-11-21 23:47 ` Grant Likely
@ 2007-11-22 0:00 ` Benjamin Herrenschmidt
2007-11-22 0:20 ` Grant Likely
0 siblings, 1 reply; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2007-11-22 0:00 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev
On Wed, 2007-11-21 at 16:47 -0700, Grant Likely wrote:
> On 11/20/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > 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>
> > ---
> > --- 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
>
> Unfortunately, this isn't always true. The Xilinx Virtex parts us
> config 40x, but not all FPGA bitstreams have a 16550 serial port.
> Sometimes it's a uartlite instead.
What does uartlite looks like ?
Ben.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors
2007-11-22 0:00 ` Benjamin Herrenschmidt
@ 2007-11-22 0:20 ` Grant Likely
2007-11-22 0:52 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 5+ messages in thread
From: Grant Likely @ 2007-11-22 0:20 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev
On 11/21/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
>
> On Wed, 2007-11-21 at 16:47 -0700, Grant Likely wrote:
> > On 11/20/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > > 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>
> > > ---
> > > --- 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
> >
> > Unfortunately, this isn't always true. The Xilinx Virtex parts us
> > config 40x, but not all FPGA bitstreams have a 16550 serial port.
> > Sometimes it's a uartlite instead.
>
> What does uartlite looks like ?
fixed speed
4 registers: rx, tx, status & control
rx & tx are... well... rx and tx registers
status has a number of bits reporting fifos full/empty etc.
control has three bits; reset tx, reset rx and interrupt enable.
See the top of drivers/serial/uartlite.c
Very simple stuff; but definitely not 16550.
g.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
grant.likely@secretlab.ca
(403) 399-0195
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors
2007-11-22 0:20 ` Grant Likely
@ 2007-11-22 0:52 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 5+ messages in thread
From: Benjamin Herrenschmidt @ 2007-11-22 0:52 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev
> fixed speed
> 4 registers: rx, tx, status & control
>
> rx & tx are... well... rx and tx registers
> status has a number of bits reporting fifos full/empty etc.
> control has three bits; reset tx, reset rx and interrupt enable.
>
> See the top of drivers/serial/uartlite.c
>
> Very simple stuff; but definitely not 16550.
Yuck, they could have made it look like 16550 at least...
Oh well, that's allright, select'ing it wont break anything anyway.
Ultimately, we can if we want have a list of all support 40x (and 4xx)
variants and select what we want in a given kernel build. Those variants
would themselves select the individual bits they care about...
Ben.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-11-22 0:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-21 6:15 [PATCH 12/14] powerpc: Add early udbg support for 40x processors Benjamin Herrenschmidt
2007-11-21 23:47 ` Grant Likely
2007-11-22 0:00 ` Benjamin Herrenschmidt
2007-11-22 0:20 ` Grant Likely
2007-11-22 0:52 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).