[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Sat, 10 Oct 2009 17:58:14 +0200
From: Manfred Spraul <manfred@...orfullife.com>
To: aabdulla@...dia.com
Cc: netdev@...r.kernel.org, davem@...emloft.net,
Manfred Spraul <manfred@...orfullife.com>
Subject: [PATCH 3/3] drivers/net/forcedeth.c: add support for Broadcom AC131
This patch adds an errata/update for the Broadcom AC131 PHY to forcedeth.c
The changes where written by Ayaz, I added meaningful names from
drivers/net/phy/broadcom.c.
Ayaz: The change is similar to brcm_fet_config_init(), except that you only
enable auto power down.
Is that sufficient? Please double check that.
--
Manfred
---
drivers/net/forcedeth.c | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index ccb9543..1595b2c 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -598,6 +598,12 @@ union ring_type {
#define PHY_BCM54XX_SHD_WRITE 0x8000
#define PHY_BCM54XX_SHD_REG3 0x0c00 /* shadow reg 3 - unknown */
+/* AC131: */
+#define PHY_BCM_AC131_BRCMTEST 0x1f /* Brcm test register */
+#define PHY_BCM_AC131_BRCMTEST_SRE 0x0080 /* Shadow register enable */
+#define PHY_BCM_AC131_SHDW_AUXSTAT2 0x1b /* Auxiliary status 2 */
+#define PHY_BCM_AC131_SHDW_AUXSTAT2_APDE 0x0020 /* Auto power down enable */
+
#define PHY_GIGABIT 0x0100
#define PHY_TIMEOUT 0x1
@@ -1415,6 +1421,23 @@ static int phy_init(struct net_device *dev)
}
if (np->phy_oui == PHY_OUI_BROADCOM) {
+ if (np->driver_data & DEV_NEED_PHY_INIT_FIX) {
+ if (np->phy_model == PHY_MODEL_BROADCOM_AC131) {
+ phy_reserved = mii_rw(dev, np->phyaddr, PHY_BCM_AC131_BRCMTEST, MII_READ);
+ phy_reserved |= PHY_BCM_AC131_BRCMTEST_SRE;
+ if (mii_rw(dev, np->phyaddr, PHY_BCM_AC131_BRCMTEST,phy_reserved)) {
+ printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+ return PHY_ERROR;
+ }
+
+ phy_reserved = mii_rw(dev, np->phyaddr, PHY_BCM_AC131_SHDW_AUXSTAT2, MII_READ);
+ phy_reserved |= PHY_BCM_AC131_SHDW_AUXSTAT2_APDE;
+ if (mii_rw(dev, np->phyaddr, PHY_BCM_AC131_SHDW_AUXSTAT2,phy_reserved)) {
+ printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+ return PHY_ERROR;
+ }
+ }
+ }
if (np->phy_model == PHY_MODEL_BROADCOM_50610) {
if (mii_rw(dev, np->phyaddr, PHY_BCM54XX_SHD, PHY_BCM54XX_SHD_WRITE||
PHY_BCM54XX_SHD_REG3|0)) {
--
1.6.2.5
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists