Patchwork RX problem in ibm_newemac driver

login
register
mail settings
Submitter Benjamin Herrenschmidt
Date March 11, 2009, 12:21 a.m.
Message ID <1236730894.7086.29.camel@pasglop>
Download mbox | patch
Permalink /patch/24271/
State Not Applicable, archived
Headers show

Comments

Benjamin Herrenschmidt - March 11, 2009, 12:21 a.m.
On Wed, 2009-03-11 at 01:39 +0200, Felix Radensky wrote:
> Benjamin Herrenschmidt wrote:
> > On Wed, 2009-03-11 at 00:14 +0200, Felix Radensky wrote:
> >   
> >> Yes, seems logical. U-boot has code to enable and disable loopback clock
> >> for 440SPE, 440EPX,440GRX,405EX, 460EX and 460GT.
> >>
> >> I can test patches on my board. Alternatively, I can try something myself
> >> if you can provide some guidance. I guess you are referring to the code 
> >> using
> >> EMAC_FTR_440GX_PHY_CLK_FIX and EMAC_FTR_440EP_PHY_CLK_FIX.
> >>     
> >
> > It would be nice if you could try something as I don't have anything to
> > test here.
> >
> > And yes, it's probably one of those 2 fixes that need to be extended.
> >
> > I'll have a look later today if I can find the 405EXr user manual and
> > give you more precise guidance.

>From the doc, it looks like it needs the 440 type workaround (and the
405EX as well). Can you try this patch:

emac: Fix clock control for 405EX and 405EXr chips

The EMAC variant in the 405EX and 405EXr chips needs the "440EP" type clock
control workaround to avoid lockups of the Rx side during reset.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
Felix Radensky - March 11, 2009, 8:56 a.m.
Benjamin Herrenschmidt wrote:
> On Wed, 2009-03-11 at 01:39 +0200, Felix Radensky wrote:
>   
>> Benjamin Herrenschmidt wrote:
>>     
>>> On Wed, 2009-03-11 at 00:14 +0200, Felix Radensky wrote:
>>>   
>>>       
>>>> Yes, seems logical. U-boot has code to enable and disable loopback clock
>>>> for 440SPE, 440EPX,440GRX,405EX, 460EX and 460GT.
>>>>
>>>> I can test patches on my board. Alternatively, I can try something myself
>>>> if you can provide some guidance. I guess you are referring to the code 
>>>> using
>>>> EMAC_FTR_440GX_PHY_CLK_FIX and EMAC_FTR_440EP_PHY_CLK_FIX.
>>>>     
>>>>         
>>> It would be nice if you could try something as I don't have anything to
>>> test here.
>>>
>>> And yes, it's probably one of those 2 fixes that need to be extended.
>>>
>>> I'll have a look later today if I can find the 405EXr user manual and
>>> give you more precise guidance.
>>>       
>
> >From the doc, it looks like it needs the 440 type workaround (and the
> 405EX as well). Can you try this patch:
>
> emac: Fix clock control for 405EX and 405EXr chips
>
> The EMAC variant in the 405EX and 405EXr chips needs the "440EP" type clock
> control workaround to avoid lockups of the Rx side during reset.
>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
>
> Index: linux-work/drivers/net/ibm_newemac/core.c
> ===================================================================
> --- linux-work.orig/drivers/net/ibm_newemac/core.c	2009-03-11 11:13:37.000000000 +1100
> +++ linux-work/drivers/net/ibm_newemac/core.c	2009-03-11 11:14:00.000000000 +1100
> @@ -2594,6 +2594,9 @@ static int __devinit emac_init_config(st
>  		if (of_device_is_compatible(np, "ibm,emac-460ex") ||
>  		    of_device_is_compatible(np, "ibm,emac-460gt"))
>  			dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX;
> +		if (of_device_is_compatible(np, "ibm,emac-405ex") ||
> +		    of_device_is_compatible(np, "ibm,emac-405exr"))
> +			dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
>  	} else if (of_device_is_compatible(np, "ibm,emac4")) {
>  		dev->features |= EMAC_FTR_EMAC4;
>  		if (of_device_is_compatible(np, "ibm,emac-440gx"))
>
>
>   
Hi, Ben

This patch fixes a problem for me. Thank you very much for a quick fix.

Felix.
David Miller - March 13, 2009, 8:49 p.m.
From: Felix Radensky <felix@embedded-sol.com>
Date: Wed, 11 Mar 2009 10:56:31 +0200

> Benjamin Herrenschmidt wrote:
> > emac: Fix clock control for 405EX and 405EXr chips
> >
> > The EMAC variant in the 405EX and 405EXr chips needs the "440EP" type clock
> > control workaround to avoid lockups of the Rx side during reset.
> >
> > Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
 ...
> This patch fixes a problem for me. Thank you very much for a quick fix.

Patch applied, thanks everyone.

Patch

Index: linux-work/drivers/net/ibm_newemac/core.c
===================================================================
--- linux-work.orig/drivers/net/ibm_newemac/core.c	2009-03-11 11:13:37.000000000 +1100
+++ linux-work/drivers/net/ibm_newemac/core.c	2009-03-11 11:14:00.000000000 +1100
@@ -2594,6 +2594,9 @@  static int __devinit emac_init_config(st
 		if (of_device_is_compatible(np, "ibm,emac-460ex") ||
 		    of_device_is_compatible(np, "ibm,emac-460gt"))
 			dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX;
+		if (of_device_is_compatible(np, "ibm,emac-405ex") ||
+		    of_device_is_compatible(np, "ibm,emac-405exr"))
+			dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
 	} else if (of_device_is_compatible(np, "ibm,emac4")) {
 		dev->features |= EMAC_FTR_EMAC4;
 		if (of_device_is_compatible(np, "ibm,emac-440gx"))