]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/sfc/qt202x_phy.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / net / sfc / qt202x_phy.c
index 68813d1d85f30eaac48648b7bb42b6e32ecaa34e..ea3ae00893156b49e0a564cb80a1d460934e0ca2 100644 (file)
@@ -41,6 +41,8 @@
 #define PCS_UC_STATUS_LBN      0
 #define PCS_UC_STATUS_WIDTH    8
 #define PCS_UC_STATUS_FW_SAVE  0x20
+#define PMA_PMD_MODE_REG       0xc301
+#define PMA_PMD_RXIN_SEL_LBN   6
 #define PMA_PMD_FTX_CTRL2_REG  0xc309
 #define PMA_PMD_FTX_STATIC_LBN 13
 #define PMA_PMD_VEND1_REG      0xc001
@@ -282,6 +284,10 @@ static int qt2025c_select_phy_mode(struct efx_nic *efx)
         * slow) reload of the firmware image (the microcontroller's code
         * memory is not affected by the microcontroller reset). */
        efx_mdio_write(efx, 1, 0xc317, 0x00ff);
+       /* PMA/PMD loopback sets RXIN to inverse polarity and the firmware
+        * restart doesn't reset it. We need to do that ourselves. */
+       efx_mdio_set_flag(efx, 1, PMA_PMD_MODE_REG,
+                         1 << PMA_PMD_RXIN_SEL_LBN, false);
        efx_mdio_write(efx, 1, 0xc300, 0x0002);
        msleep(20);