All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luis Machado <luisgpm@linux.vnet.ibm.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: netdev@vger.kernel.org, jgarzik@pobox.com, linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 5/6] ibm_newemac: PowerPC 440GX EMAC PHY clock workaround
Date: Fri, 13 Jun 2008 09:43:13 -0300	[thread overview]
Message-ID: <1213360994.32117.0.camel@gargoyle> (raw)
In-Reply-To: <20080422004803.7F497DE2C5@ozlabs.org>

Did this show up on 2.6.26 recently? Or we're expecting it to show up a
bit later?

Thanks,
Luis

On Tue, 2008-04-22 at 10:46 +1000, Benjamin Herrenschmidt wrote:
> From: Valentine Barshak <vbarshak@ru.mvista.com>
> 
> The PowerPC 440GX Taishan board fails to reset EMAC3 (reset timeout error)
> if there's no link. Because of that it fails to find PHY chip. The older ibm_emac
> driver had a workaround for that: the EMAC_CLK_INTERNAL/EMAC_CLK_EXTERNAL macros,
> which toggle the Ethernet Clock Select bit in the SDR0_MFR register. This patch
> does the same for "ibm,emac-440gx" compatible chips. The workaround forces
> clock on -all- EMACs, so we select clock under global emac_phy_map_lock.
> 
> BenH: Made that #ifdef CONFIG_PPC_DCR_NATIVE for now as dcri_* stuff doesn't
> exist for MMIO type DCRs like Cell. Some future rework & improvements of the
> DCR infrastructure will make that cleaner but for now, this makes it work.
> 
> Signed-off-by: Valentine Barshak <vbarshak@ru.mvista.com>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> ---
>  drivers/net/ibm_newemac/core.c |   18 +++++++++++++++++-
>  drivers/net/ibm_newemac/core.h |    8 ++++++--
>  2 files changed, 23 insertions(+), 3 deletions(-)
> 
> --- linux-work.orig/drivers/net/ibm_newemac/core.c	2008-04-22 10:11:59.000000000 +1000
> +++ linux-work/drivers/net/ibm_newemac/core.c	2008-04-22 10:31:18.000000000 +1000
> @@ -43,6 +43,8 @@
>  #include <asm/io.h>
>  #include <asm/dma.h>
>  #include <asm/uaccess.h>
> +#include <asm/dcr.h>
> +#include <asm/dcr-regs.h>
> 
>  #include "core.h"
> 
> @@ -2333,6 +2335,11 @@ static int __devinit emac_init_phy(struc
>  	dev->phy.mdio_read = emac_mdio_read;
>  	dev->phy.mdio_write = emac_mdio_write;
> 
> +	/* Enable internal clock source */
> +#ifdef CONFIG_PPC_DCR_NATIVE
> +	if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
> +		dcri_clrset(SDR0, SDR0_MFR, 0, SDR0_MFR_ECS);
> +#endif
>  	/* Configure EMAC with defaults so we can at least use MDIO
>  	 * This is needed mostly for 440GX
>  	 */
> @@ -2365,6 +2372,12 @@ static int __devinit emac_init_phy(struc
>  			if (!emac_mii_phy_probe(&dev->phy, i))
>  				break;
>  		}
> +
> +	/* Enable external clock source */
> +#ifdef CONFIG_PPC_DCR_NATIVE
> +	if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
> +		dcri_clrset(SDR0, SDR0_MFR, SDR0_MFR_ECS, 0);
> +#endif
>  	mutex_unlock(&emac_phy_map_lock);
>  	if (i == 0x20) {
>  		printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name);
> @@ -2490,8 +2503,11 @@ static int __devinit emac_init_config(st
>  	}
> 
>  	/* Check EMAC version */
> -	if (of_device_is_compatible(np, "ibm,emac4"))
> +	if (of_device_is_compatible(np, "ibm,emac4")) {
>  		dev->features |= EMAC_FTR_EMAC4;
> +		if (of_device_is_compatible(np, "ibm,emac-440gx"))
> +			dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX;
> +	}
> 
>  	/* Fixup some feature bits based on the device tree */
>  	if (of_get_property(np, "has-inverted-stacr-oc", NULL))
> Index: linux-work/drivers/net/ibm_newemac/core.h
> ===================================================================
> --- linux-work.orig/drivers/net/ibm_newemac/core.h	2008-04-22 10:06:31.000000000 +1000
> +++ linux-work/drivers/net/ibm_newemac/core.h	2008-04-22 10:30:03.000000000 +1000
> @@ -301,6 +301,10 @@ struct emac_instance {
>   * Set if we have new type STACR with STAOPC
>   */
>  #define EMAC_FTR_HAS_NEW_STACR		0x00000040
> +/*
> + * Set if we need phy clock workaround for 440gx
> + */
> +#define EMAC_FTR_440GX_PHY_CLK_FIX	0x00000080
> 
> 
>  /* Right now, we don't quite handle the always/possible masks on the
> @@ -312,8 +316,8 @@ enum {
> 
>  	EMAC_FTRS_POSSIBLE	=
>  #ifdef CONFIG_IBM_NEW_EMAC_EMAC4
> -	    EMAC_FTR_EMAC4	| EMAC_FTR_HAS_NEW_STACR	|
> -	    EMAC_FTR_STACR_OC_INVERT	|
> +	    EMAC_FTR_EMAC4 | EMAC_FTR_HAS_NEW_STACR |
> +	    EMAC_FTR_STACR_OC_INVERT | EMAC_FTR_440GX_PHY_CLK_FIX |
>  #endif
>  #ifdef CONFIG_IBM_NEW_EMAC_TAH
>  	    EMAC_FTR_HAS_TAH	|
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
-- 
Luis Machado
Software Engineer 
IBM Linux Technology Center

WARNING: multiple messages have this Message-ID (diff)
From: Luis Machado <luisgpm@linux.vnet.ibm.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: jgarzik@pobox.com, netdev@vger.kernel.org, linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 5/6] ibm_newemac: PowerPC 440GX EMAC PHY clock workaround
Date: Fri, 13 Jun 2008 09:43:13 -0300	[thread overview]
Message-ID: <1213360994.32117.0.camel@gargoyle> (raw)
In-Reply-To: <20080422004803.7F497DE2C5@ozlabs.org>

Did this show up on 2.6.26 recently? Or we're expecting it to show up a
bit later?

Thanks,
Luis

On Tue, 2008-04-22 at 10:46 +1000, Benjamin Herrenschmidt wrote:
> From: Valentine Barshak <vbarshak@ru.mvista.com>
> 
> The PowerPC 440GX Taishan board fails to reset EMAC3 (reset timeout error)
> if there's no link. Because of that it fails to find PHY chip. The older ibm_emac
> driver had a workaround for that: the EMAC_CLK_INTERNAL/EMAC_CLK_EXTERNAL macros,
> which toggle the Ethernet Clock Select bit in the SDR0_MFR register. This patch
> does the same for "ibm,emac-440gx" compatible chips. The workaround forces
> clock on -all- EMACs, so we select clock under global emac_phy_map_lock.
> 
> BenH: Made that #ifdef CONFIG_PPC_DCR_NATIVE for now as dcri_* stuff doesn't
> exist for MMIO type DCRs like Cell. Some future rework & improvements of the
> DCR infrastructure will make that cleaner but for now, this makes it work.
> 
> Signed-off-by: Valentine Barshak <vbarshak@ru.mvista.com>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> ---
>  drivers/net/ibm_newemac/core.c |   18 +++++++++++++++++-
>  drivers/net/ibm_newemac/core.h |    8 ++++++--
>  2 files changed, 23 insertions(+), 3 deletions(-)
> 
> --- linux-work.orig/drivers/net/ibm_newemac/core.c	2008-04-22 10:11:59.000000000 +1000
> +++ linux-work/drivers/net/ibm_newemac/core.c	2008-04-22 10:31:18.000000000 +1000
> @@ -43,6 +43,8 @@
>  #include <asm/io.h>
>  #include <asm/dma.h>
>  #include <asm/uaccess.h>
> +#include <asm/dcr.h>
> +#include <asm/dcr-regs.h>
> 
>  #include "core.h"
> 
> @@ -2333,6 +2335,11 @@ static int __devinit emac_init_phy(struc
>  	dev->phy.mdio_read = emac_mdio_read;
>  	dev->phy.mdio_write = emac_mdio_write;
> 
> +	/* Enable internal clock source */
> +#ifdef CONFIG_PPC_DCR_NATIVE
> +	if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
> +		dcri_clrset(SDR0, SDR0_MFR, 0, SDR0_MFR_ECS);
> +#endif
>  	/* Configure EMAC with defaults so we can at least use MDIO
>  	 * This is needed mostly for 440GX
>  	 */
> @@ -2365,6 +2372,12 @@ static int __devinit emac_init_phy(struc
>  			if (!emac_mii_phy_probe(&dev->phy, i))
>  				break;
>  		}
> +
> +	/* Enable external clock source */
> +#ifdef CONFIG_PPC_DCR_NATIVE
> +	if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
> +		dcri_clrset(SDR0, SDR0_MFR, SDR0_MFR_ECS, 0);
> +#endif
>  	mutex_unlock(&emac_phy_map_lock);
>  	if (i == 0x20) {
>  		printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name);
> @@ -2490,8 +2503,11 @@ static int __devinit emac_init_config(st
>  	}
> 
>  	/* Check EMAC version */
> -	if (of_device_is_compatible(np, "ibm,emac4"))
> +	if (of_device_is_compatible(np, "ibm,emac4")) {
>  		dev->features |= EMAC_FTR_EMAC4;
> +		if (of_device_is_compatible(np, "ibm,emac-440gx"))
> +			dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX;
> +	}
> 
>  	/* Fixup some feature bits based on the device tree */
>  	if (of_get_property(np, "has-inverted-stacr-oc", NULL))
> Index: linux-work/drivers/net/ibm_newemac/core.h
> ===================================================================
> --- linux-work.orig/drivers/net/ibm_newemac/core.h	2008-04-22 10:06:31.000000000 +1000
> +++ linux-work/drivers/net/ibm_newemac/core.h	2008-04-22 10:30:03.000000000 +1000
> @@ -301,6 +301,10 @@ struct emac_instance {
>   * Set if we have new type STACR with STAOPC
>   */
>  #define EMAC_FTR_HAS_NEW_STACR		0x00000040
> +/*
> + * Set if we need phy clock workaround for 440gx
> + */
> +#define EMAC_FTR_440GX_PHY_CLK_FIX	0x00000080
> 
> 
>  /* Right now, we don't quite handle the always/possible masks on the
> @@ -312,8 +316,8 @@ enum {
> 
>  	EMAC_FTRS_POSSIBLE	=
>  #ifdef CONFIG_IBM_NEW_EMAC_EMAC4
> -	    EMAC_FTR_EMAC4	| EMAC_FTR_HAS_NEW_STACR	|
> -	    EMAC_FTR_STACR_OC_INVERT	|
> +	    EMAC_FTR_EMAC4 | EMAC_FTR_HAS_NEW_STACR |
> +	    EMAC_FTR_STACR_OC_INVERT | EMAC_FTR_440GX_PHY_CLK_FIX |
>  #endif
>  #ifdef CONFIG_IBM_NEW_EMAC_TAH
>  	    EMAC_FTR_HAS_TAH	|
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
-- 
Luis Machado
Software Engineer 
IBM Linux Technology Center


  reply	other threads:[~2008-06-13 12:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-22  0:46 [PATCH 5/6] ibm_newemac: PowerPC 440GX EMAC PHY clock workaround Benjamin Herrenschmidt
2008-04-22  0:46 ` Benjamin Herrenschmidt
2008-06-13 12:43 ` Luis Machado [this message]
2008-06-13 12:43   ` Luis Machado

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=1213360994.32117.0.camel@gargoyle \
    --to=luisgpm@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=jgarzik@pobox.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=netdev@vger.kernel.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.