]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/cxgb3-allow-for-PHY-reset-status
Move xen patchset to new version's subdir.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / cxgb3-allow-for-PHY-reset-status
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/cxgb3-allow-for-PHY-reset-status b/src/patches/suse-2.6.27.31/patches.drivers/cxgb3-allow-for-PHY-reset-status
new file mode 100644 (file)
index 0000000..b3baf3b
--- /dev/null
@@ -0,0 +1,167 @@
+Commit-Id: 78e4689e908adc8334272756c32c9218d1967408
+From: Divy Le Ray <divy@chelsio.com>
+Date: Wed, 8 Oct 2008 17:38:01 -0700
+Acked-by: Karsten Keil <kkeil@novell.com>
+Subject: [PATCH] cxgb3: allow for PHY reset status
+Reference: bnc#446739
+
+First step towards overall PHY layering re-organization.
+Allow a status return when a PHY is reset.
+
+Signed-off-by: Divy Le Ray <divy@chelsio.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+
+Index: linux-2.6.27/drivers/net/cxgb3/ael1002.c
+===================================================================
+--- linux-2.6.27.orig/drivers/net/cxgb3/ael1002.c
++++ linux-2.6.27/drivers/net/cxgb3/ael1002.c
+@@ -119,11 +119,12 @@ static struct cphy_ops ael1002_ops = {
+       .power_down = ael1002_power_down,
+ };
+-void t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops)
++int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *mdio_ops)
+ {
+       cphy_init(phy, adapter, phy_addr, &ael1002_ops, mdio_ops);
+       ael100x_txon(phy);
++      return 0;
+ }
+ static int ael1006_reset(struct cphy *phy, int wait)
+@@ -174,11 +175,12 @@ static struct cphy_ops ael1006_ops = {
+       .power_down = ael1006_power_down,
+ };
+-void t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops)
++int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
++                           int phy_addr, const struct mdio_ops *mdio_ops)
+ {
+       cphy_init(phy, adapter, phy_addr, &ael1006_ops, mdio_ops);
+       ael100x_txon(phy);
++      return 0;
+ }
+ static struct cphy_ops qt2045_ops = {
+@@ -191,8 +193,8 @@ static struct cphy_ops qt2045_ops = {
+       .power_down = ael1006_power_down,
+ };
+-void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                      int phy_addr, const struct mdio_ops *mdio_ops)
++int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter,
++                     int phy_addr, const struct mdio_ops *mdio_ops)
+ {
+       unsigned int stat;
+@@ -205,6 +207,7 @@ void t3_qt2045_phy_prep(struct cphy *phy
+       if (!phy_addr && !mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMSR, &stat) &&
+           stat == 0xffff)
+               phy->addr = 1;
++      return 0;
+ }
+ static int xaui_direct_reset(struct cphy *phy, int wait)
+@@ -250,8 +253,9 @@ static struct cphy_ops xaui_direct_ops =
+       .power_down = xaui_direct_power_down,
+ };
+-void t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                           int phy_addr, const struct mdio_ops *mdio_ops)
++int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
++                          int phy_addr, const struct mdio_ops *mdio_ops)
+ {
+       cphy_init(phy, adapter, phy_addr, &xaui_direct_ops, mdio_ops);
++      return 0;
+ }
+Index: linux-2.6.27/drivers/net/cxgb3/common.h
+===================================================================
+--- linux-2.6.27.orig/drivers/net/cxgb3/common.h
++++ linux-2.6.27/drivers/net/cxgb3/common.h
+@@ -203,8 +203,8 @@ struct adapter_info {
+ };
+ struct port_type_info {
+-      void (*phy_prep)(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *ops);
++      int (*phy_prep)(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *ops);
+       unsigned int caps;
+       const char *desc;
+ };
+@@ -775,14 +775,14 @@ int t3_sge_read_rspq(struct adapter *ada
+ int t3_sge_cqcntxt_op(struct adapter *adapter, unsigned int id, unsigned int op,
+                     unsigned int credits);
+-void t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops);
+-void t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops);
+-void t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops);
+-void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr,
+-                      const struct mdio_ops *mdio_ops);
+-void t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                           int phy_addr, const struct mdio_ops *mdio_ops);
++int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *mdio_ops);
++int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *mdio_ops);
++int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *mdio_ops);
++int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr,
++                     const struct mdio_ops *mdio_ops);
++int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
++                          int phy_addr, const struct mdio_ops *mdio_ops);
+ #endif                                /* __CHELSIO_COMMON_H */
+Index: linux-2.6.27/drivers/net/cxgb3/t3_hw.c
+===================================================================
+--- linux-2.6.27.orig/drivers/net/cxgb3/t3_hw.c
++++ linux-2.6.27/drivers/net/cxgb3/t3_hw.c
+@@ -3626,8 +3626,11 @@ int t3_prep_adapter(struct adapter *adap
+                       ++j;
+               p->port_type = &port_types[adapter->params.vpd.port_type[j]];
+-              p->port_type->phy_prep(&p->phy, adapter, ai->phy_base_addr + j,
+-                                     ai->mdio_ops);
++              ret = p->port_type->phy_prep(&p->phy, adapter,
++                                           ai->phy_base_addr + j,
++                                           ai->mdio_ops);
++              if (ret)
++                      return ret;
+               mac_prep(&p->mac, adapter, j);
+               ++j;
+@@ -3674,9 +3677,11 @@ int t3_replay_prep_adapter(struct adapte
+               while (!adapter->params.vpd.port_type[j])
+                       ++j;
+-              p->port_type->phy_prep(&p->phy, adapter, ai->phy_base_addr + j,
+-                                      ai->mdio_ops);
+-
++              ret = p->port_type->phy_prep(&p->phy, adapter,
++                                           ai->phy_base_addr + j,
++                                           ai->mdio_ops);
++              if (ret)
++                      return ret;
+               p->phy.ops->power_down(&p->phy, 1);
+               ++j;
+       }
+Index: linux-2.6.27/drivers/net/cxgb3/vsc8211.c
+===================================================================
+--- linux-2.6.27.orig/drivers/net/cxgb3/vsc8211.c
++++ linux-2.6.27/drivers/net/cxgb3/vsc8211.c
+@@ -221,8 +221,9 @@ static struct cphy_ops vsc8211_ops = {
+       .power_down = vsc8211_power_down,
+ };
+-void t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
+-                       int phy_addr, const struct mdio_ops *mdio_ops)
++int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
++                      int phy_addr, const struct mdio_ops *mdio_ops)
+ {
+       cphy_init(phy, adapter, phy_addr, &vsc8211_ops, mdio_ops);
++      return 0;
+ }