[PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-20 Thread Benjamin Herrenschmidt
This adds some basic real mode based early udbg support for 40x
in order to debug things more easily

Signed-off-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
---

 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.0 
+1100
+++ linux-work/arch/powerpc/Kconfig.debug   2007-11-21 12:47:58.0 
+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.0 +1100
+++ linux-work/arch/powerpc/kernel/misc_32.S2007-11-21 12:41:43.0 
+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
+   xorir0,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
+   xorir0,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.0 
+1100
+++ linux-work/arch/powerpc/kernel/udbg.c   2007-11-21 12:44:50.0 
+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.c2007-11-21 
12:42:24.0 +1100
+++ linux-work/arch/powerpc/kernel/udbg_16550.c 2007-11-21 12:50:40.0 
+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.ori

[RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-20 Thread Benjamin Herrenschmidt
This adds some basic real mode based early udbg support for 40x
in order to debug things more easily

Signed-off-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
---

 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.0 
+1100
+++ linux-work/arch/powerpc/Kconfig.debug   2007-11-21 12:47:58.0 
+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.0 +1100
+++ linux-work/arch/powerpc/kernel/misc_32.S2007-11-21 12:41:43.0 
+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
+   xorir0,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
+   xorir0,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.0 
+1100
+++ linux-work/arch/powerpc/kernel/udbg.c   2007-11-21 12:44:50.0 
+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.c2007-11-21 
12:42:24.0 +1100
+++ linux-work/arch/powerpc/kernel/udbg_16550.c 2007-11-21 12:50:40.0 
+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.ori

Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread Grant Likely
On 11/20/07, Benjamin Herrenschmidt <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> ---
> --- linux-work.orig/arch/powerpc/platforms/Kconfig.cputype  2007-11-21 
> 12:50:16.0 +1100
> +++ linux-work/arch/powerpc/platforms/Kconfig.cputype   2007-11-21 
> 12:50:18.0 +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.
[EMAIL PROTECTED]
(403) 399-0195
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread Benjamin Herrenschmidt

On Wed, 2007-11-21 at 16:47 -0700, Grant Likely wrote:
> On 11/20/07, Benjamin Herrenschmidt <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> > ---
> > --- linux-work.orig/arch/powerpc/platforms/Kconfig.cputype  2007-11-21 
> > 12:50:16.0 +1100
> > +++ linux-work/arch/powerpc/platforms/Kconfig.cputype   2007-11-21 
> > 12:50:18.0 +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.


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread Grant Likely
On 11/21/07, Benjamin Herrenschmidt <[EMAIL PROTECTED]> wrote:
>
> On Wed, 2007-11-21 at 16:47 -0700, Grant Likely wrote:
> > On 11/20/07, Benjamin Herrenschmidt <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> > > ---
> > > --- linux-work.orig/arch/powerpc/platforms/Kconfig.cputype  
> > > 2007-11-21 12:50:16.0 +1100
> > > +++ linux-work/arch/powerpc/platforms/Kconfig.cputype   2007-11-21 
> > > 12:50:18.0 +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.
[EMAIL PROTECTED]
(403) 399-0195
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread Benjamin Herrenschmidt

> 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.


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread David Gibson
On Wed, Nov 21, 2007 at 05:16:30PM +1100, Benjamin Herrenschmidt wrote:
> This adds some basic real mode based early udbg support for 40x
> in order to debug things more easily

Shouldn't we be able to share code with the Maple realmode udbg()?

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread Benjamin Herrenschmidt

On Thu, 2007-11-22 at 09:58 +1100, David Gibson wrote:
> On Wed, Nov 21, 2007 at 05:16:30PM +1100, Benjamin Herrenschmidt wrote:
> > This adds some basic real mode based early udbg support for 40x
> > in order to debug things more easily
> 
> Shouldn't we be able to share code with the Maple realmode udbg()?

Do you really care ?

Ben.


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [RFC/PATCH 12/14] powerpc: Add early udbg support for 40x processors

2007-11-21 Thread David Gibson
On Thu, Nov 22, 2007 at 11:00:15AM +1100, Benjamin Herrenschmidt wrote:
> 
> On Thu, 2007-11-22 at 09:58 +1100, David Gibson wrote:
> > On Wed, Nov 21, 2007 at 05:16:30PM +1100, Benjamin Herrenschmidt wrote:
> > > This adds some basic real mode based early udbg support for 40x
> > > in order to debug things more easily
> > 
> > Shouldn't we be able to share code with the Maple realmode udbg()?
> 
> Do you really care ?

Not very much, no.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev