linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
@ 2006-09-07 14:35 Josh Boyer
  2006-09-07 17:19 ` Eugene Surovegin
  2006-09-07 17:20 ` Matt Porter
  0 siblings, 2 replies; 6+ messages in thread
From: Josh Boyer @ 2006-09-07 14:35 UTC (permalink / raw)
  To: mporter, paulus; +Cc: linuxppc-dev

The following patch allows XMON to run on the 4xx platform.  Tested on
Walnut, Ebony, and Nova (440GX based) eval boards.  440EP and 440SP boards
should work as well.  Patch is against 2.6.18-rc6.

Signed-off-by: Josh Boyer <jdub@us.ibm.com>

---
 arch/ppc/xmon/start.c |   21 +++++++++++++++++++++
 arch/ppc/xmon/xmon.c  |   26 ++++++++++++++++++++------
 2 files changed, 41 insertions(+), 6 deletions(-)

--- linux-2.6.orig/arch/ppc/xmon/xmon.c
+++ linux-2.6/arch/ppc/xmon/xmon.c
@@ -153,6 +153,12 @@ static int xmon_trace[NR_CPUS];
 #define SSTEP	1		/* stepping because of 's' command */
 #define BRSTEP	2		/* stepping over breakpoint */
 
+#ifdef CONFIG_4xx
+#define MSR_SSTEP_ENABLE 0x200
+#else
+#define MSR_SSTEP_ENABLE 0x400
+#endif
+
 static struct pt_regs *xmon_regs[NR_CPUS];
 
 extern inline void sync(void)
@@ -211,6 +217,14 @@ static void get_tb(unsigned *p)
 	p[1] = lo;
 }
 
+static inline void xmon_enable_sstep(struct pt_regs *regs)
+{
+	regs->msr |= MSR_SSTEP_ENABLE;
+#ifdef CONFIG_4xx
+	mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_IC | DBCR0_IDM);
+#endif
+}
+
 int xmon(struct pt_regs *excp)
 {
 	struct pt_regs regs;
@@ -254,10 +268,10 @@ int xmon(struct pt_regs *excp)
 	cmd = cmds(excp);
 	if (cmd == 's') {
 		xmon_trace[smp_processor_id()] = SSTEP;
-		excp->msr |= 0x400;
+		xmon_enable_sstep(excp);
 	} else if (at_breakpoint(excp->nip)) {
 		xmon_trace[smp_processor_id()] = BRSTEP;
-		excp->msr |= 0x400;
+		xmon_enable_sstep(excp);
 	} else {
 		xmon_trace[smp_processor_id()] = 0;
 		insert_bpts();
@@ -298,7 +312,7 @@ xmon_bpt(struct pt_regs *regs)
 		remove_bpts();
 		excprint(regs);
 		xmon_trace[smp_processor_id()] = BRSTEP;
-		regs->msr |= 0x400;
+		xmon_enable_sstep(regs);
 	} else {
 		xmon(regs);
 	}
@@ -385,7 +399,7 @@ insert_bpts(void)
 		}
 		store_inst((void *) bp->address);
 	}
-#if !defined(CONFIG_8xx)
+#if ! (defined(CONFIG_8xx) || defined(CONFIG_4xx))
 	if (dabr.enabled)
 		set_dabr(dabr.address);
 	if (iabr.enabled)
@@ -400,7 +414,7 @@ remove_bpts(void)
 	struct bpt *bp;
 	unsigned instr;
 
-#if !defined(CONFIG_8xx)
+#if ! (defined(CONFIG_8xx) || defined(CONFIG_4xx))
 	set_dabr(0);
 	set_iabr(0);
 #endif
@@ -677,7 +691,7 @@ bpt_cmds(void)
 
 	cmd = inchar();
 	switch (cmd) {
-#if !defined(CONFIG_8xx)
+#if ! (defined(CONFIG_8xx) || defined(CONFIG_4xx))
 	case 'd':
 		mode = 7;
 		cmd = inchar();
--- linux-2.6.orig/arch/ppc/xmon/start.c
+++ linux-2.6/arch/ppc/xmon/start.c
@@ -73,6 +73,27 @@ xmon_map_scc(void)
 	TXRDY = 0x20;
 	RXRDY = 1;
 	DLAB = 0x80;
+#elif defined(CONFIG_440EP)
+	sccd = (volatile unsigned char *) ioremap(0xef600300, 8);
+	sccc = sccd + 5;
+	TXRDY = 0x20;
+	RXRDY = 1;
+	DLAB = 0x80;
+#elif defined(CONFIG_440SP)
+	sccd = (volatile unsigned char *) ioremap64(0x00000001f0000200ULL, 8);
+	sccc = sccd + 5;
+	TXRDY = 0x20;
+	RXRDY = 1;
+	DLAB = 0x80;
+#elif defined(CONFIG_44x)
+	/* This is the default for 44x platforms.  Any boards that have a
+	   different UART address need to be put in cases before this or the
+	   port will be mapped incorrectly */
+	sccd = (volatile unsigned char *) ioremap64(0x0000000140000200ULL, 8);
+	sccc = sccd + 5;
+	TXRDY = 0x20;
+	RXRDY = 1;
+	DLAB = 0x80;
 #endif /* platform */
 
 	register_sysrq_key('x', &sysrq_xmon_op);

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
  2006-09-07 14:35 [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards Josh Boyer
@ 2006-09-07 17:19 ` Eugene Surovegin
  2006-09-07 18:08   ` Josh Boyer
  2006-09-07 17:20 ` Matt Porter
  1 sibling, 1 reply; 6+ messages in thread
From: Eugene Surovegin @ 2006-09-07 17:19 UTC (permalink / raw)
  To: Josh Boyer; +Cc: paulus, mporter, linuxppc-dev

On Thu, Sep 07, 2006 at 09:35:20AM -0500, Josh Boyer wrote:

[snip]

> --- linux-2.6.orig/arch/ppc/xmon/start.c
> +++ linux-2.6/arch/ppc/xmon/start.c
> @@ -73,6 +73,27 @@ xmon_map_scc(void)
>  	TXRDY = 0x20;
>  	RXRDY = 1;
>  	DLAB = 0x80;
> +#elif defined(CONFIG_440EP)
> +	sccd = (volatile unsigned char *) ioremap(0xef600300, 8);
> +	sccc = sccd + 5;
> +	TXRDY = 0x20;
> +	RXRDY = 1;
> +	DLAB = 0x80;
> +#elif defined(CONFIG_440SP)
> +	sccd = (volatile unsigned char *) ioremap64(0x00000001f0000200ULL, 8);
> +	sccc = sccd + 5;
> +	TXRDY = 0x20;
> +	RXRDY = 1;
> +	DLAB = 0x80;
> +#elif defined(CONFIG_44x)
> +	/* This is the default for 44x platforms.  Any boards that have a
> +	   different UART address need to be put in cases before this or the
> +	   port will be mapped incorrectly */
> +	sccd = (volatile unsigned char *) ioremap64(0x0000000140000200ULL, 8);
> +	sccc = sccd + 5;
> +	TXRDY = 0x20;
> +	RXRDY = 1;
> +	DLAB = 0x80;

There is only one line which is different, why did you put all other 
under #ifdef?

Also, all these hardcoded addresses are already available as defines, 
why just not use them?

-- 
Eugene

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
  2006-09-07 14:35 [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards Josh Boyer
  2006-09-07 17:19 ` Eugene Surovegin
@ 2006-09-07 17:20 ` Matt Porter
  1 sibling, 0 replies; 6+ messages in thread
From: Matt Porter @ 2006-09-07 17:20 UTC (permalink / raw)
  To: Josh Boyer; +Cc: linuxppc-dev, paulus

On Thu, Sep 07, 2006 at 09:35:20AM -0500, Josh Boyer wrote:
> The following patch allows XMON to run on the 4xx platform.  Tested on
> Walnut, Ebony, and Nova (440GX based) eval boards.  440EP and 440SP boards
> should work as well.  Patch is against 2.6.18-rc6.
> 
> Signed-off-by: Josh Boyer <jdub@us.ibm.com>

ACK

Thanks for pointing out that 440SP needed a different case as well.

-Matt

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
  2006-09-07 17:19 ` Eugene Surovegin
@ 2006-09-07 18:08   ` Josh Boyer
  2006-09-08  1:03     ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 6+ messages in thread
From: Josh Boyer @ 2006-09-07 18:08 UTC (permalink / raw)
  To: Eugene Surovegin; +Cc: paulus, mporter, linuxppc-dev

On Thu, 2006-09-07 at 10:19 -0700, Eugene Surovegin wrote:
> On Thu, Sep 07, 2006 at 09:35:20AM -0500, Josh Boyer wrote:
> 
> [snip]
> 
> > --- linux-2.6.orig/arch/ppc/xmon/start.c
> > +++ linux-2.6/arch/ppc/xmon/start.c
> > @@ -73,6 +73,27 @@ xmon_map_scc(void)
> >  	TXRDY = 0x20;
> >  	RXRDY = 1;
> >  	DLAB = 0x80;
> > +#elif defined(CONFIG_440EP)
> > +	sccd = (volatile unsigned char *) ioremap(0xef600300, 8);
> > +	sccc = sccd + 5;
> > +	TXRDY = 0x20;
> > +	RXRDY = 1;
> > +	DLAB = 0x80;
> > +#elif defined(CONFIG_440SP)
> > +	sccd = (volatile unsigned char *) ioremap64(0x00000001f0000200ULL, 8);
> > +	sccc = sccd + 5;
> > +	TXRDY = 0x20;
> > +	RXRDY = 1;
> > +	DLAB = 0x80;
> > +#elif defined(CONFIG_44x)
> > +	/* This is the default for 44x platforms.  Any boards that have a
> > +	   different UART address need to be put in cases before this or the
> > +	   port will be mapped incorrectly */
> > +	sccd = (volatile unsigned char *) ioremap64(0x0000000140000200ULL, 8);
> > +	sccc = sccd + 5;
> > +	TXRDY = 0x20;
> > +	RXRDY = 1;
> > +	DLAB = 0x80;
> 
> There is only one line which is different, why did you put all other 
> under #ifdef?
> 
> Also, all these hardcoded addresses are already available as defines, 
> why just not use them?

Blindly following the existing convention.  I agree it's ugly.  I'll fix
it up shortly and send out another patch.  It'll also fix 440SPE, which
also has a different UART address.

josh

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
  2006-09-07 18:08   ` Josh Boyer
@ 2006-09-08  1:03     ` Benjamin Herrenschmidt
  2006-09-08  1:10       ` Josh Boyer
  0 siblings, 1 reply; 6+ messages in thread
From: Benjamin Herrenschmidt @ 2006-09-08  1:03 UTC (permalink / raw)
  To: Josh Boyer; +Cc: mporter, paulus, linuxppc-dev


> Blindly following the existing convention.  I agree it's ugly.  I'll fix
> it up shortly and send out another patch.  It'll also fix 440SPE, which
> also has a different UART address.

It should all move to udbg anyway

Ben.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards
  2006-09-08  1:03     ` Benjamin Herrenschmidt
@ 2006-09-08  1:10       ` Josh Boyer
  0 siblings, 0 replies; 6+ messages in thread
From: Josh Boyer @ 2006-09-08  1:10 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, paulus, mporter

On Fri, 2006-09-08 at 11:03 +1000, Benjamin Herrenschmidt wrote:
> > Blindly following the existing convention.  I agree it's ugly.  I'll fix
> > it up shortly and send out another patch.  It'll also fix 440SPE, which
> > also has a different UART address.
> 
> It should all move to udbg anyway

udbg is arch/powerpc.  This is arch/ppc.  I have every intention of
porting this to arch/powerpc when 4xx itself moves over and I'll gladly
use udbg then.

Until then, I'd still like to get this patch (v4) into the kernel since
it's quite useful now.

josh

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-09-08  1:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-07 14:35 [PATCH] [v3] PPC 4xx: Enable XMON on PPC 4xx boards Josh Boyer
2006-09-07 17:19 ` Eugene Surovegin
2006-09-07 18:08   ` Josh Boyer
2006-09-08  1:03     ` Benjamin Herrenschmidt
2006-09-08  1:10       ` Josh Boyer
2006-09-07 17:20 ` Matt Porter

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