sfc: Clear RXIN_SEL when soft-resetting QT2025C

When we enable PMA/PMD loopback this automatically sets RXIN_SEL
(inverse polarity for RXIN).  We need to clear that bit during the
soft-reset sequence, as it is not done automatically.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Ben Hutchings 2010-12-02 13:46:37 +00:00 committed by David S. Miller
parent adc1d23411
commit 3157183a90

View file

@ -41,6 +41,8 @@
#define PCS_UC_STATUS_LBN 0 #define PCS_UC_STATUS_LBN 0
#define PCS_UC_STATUS_WIDTH 8 #define PCS_UC_STATUS_WIDTH 8
#define PCS_UC_STATUS_FW_SAVE 0x20 #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_CTRL2_REG 0xc309
#define PMA_PMD_FTX_STATIC_LBN 13 #define PMA_PMD_FTX_STATIC_LBN 13
#define PMA_PMD_VEND1_REG 0xc001 #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 * slow) reload of the firmware image (the microcontroller's code
* memory is not affected by the microcontroller reset). */ * memory is not affected by the microcontroller reset). */
efx_mdio_write(efx, 1, 0xc317, 0x00ff); 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); efx_mdio_write(efx, 1, 0xc300, 0x0002);
msleep(20); msleep(20);