aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/falcon_xmac.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2009-08-26 04:16:46 -0400
committerDavid S. Miller <davem@davemloft.net>2009-08-26 20:38:51 -0400
commitd4ec09acdb15cdb5afdb5cd03f6bceb5c3c690a5 (patch)
tree11b9a9e797958a86b4c33ffc8710a4528f7b4ba5 /drivers/net/sfc/falcon_xmac.c
parentaed0628dae0c26b47d40d65f942abe30279b52a5 (diff)
sfc: Do not reinitialise XAUI serdes before it has completed reset
falcon_reset_xaui() waits for XGXS reset to complete, but the XAUI serdes reset may take longer. It needs to check both reset active bits. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc/falcon_xmac.c')
-rw-r--r--drivers/net/sfc/falcon_xmac.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c
index 2b3269c0326..bec52ca37ee 100644
--- a/drivers/net/sfc/falcon_xmac.c
+++ b/drivers/net/sfc/falcon_xmac.c
@@ -64,13 +64,15 @@ int falcon_reset_xaui(struct efx_nic *efx)
64 efx_oword_t reg; 64 efx_oword_t reg;
65 int count; 65 int count;
66 66
67 /* Start reset sequence */
67 EFX_POPULATE_DWORD_1(reg, XX_RST_XX_EN, 1); 68 EFX_POPULATE_DWORD_1(reg, XX_RST_XX_EN, 1);
68 falcon_write(efx, &reg, XX_PWR_RST_REG); 69 falcon_write(efx, &reg, XX_PWR_RST_REG);
69 70
70 /* Give some time for the link to establish */ 71 /* Wait up to 10 ms for completion, then reinitialise */
71 for (count = 0; count < 1000; count++) { /* wait upto 10ms */ 72 for (count = 0; count < 1000; count++) {
72 falcon_read(efx, &reg, XX_PWR_RST_REG); 73 falcon_read(efx, &reg, XX_PWR_RST_REG);
73 if (EFX_OWORD_FIELD(reg, XX_RST_XX_EN) == 0) { 74 if (EFX_OWORD_FIELD(reg, XX_RST_XX_EN) == 0 &&
75 EFX_OWORD_FIELD(reg, XX_SD_RST_ACT) == 0) {
74 falcon_setup_xaui(efx); 76 falcon_setup_xaui(efx);
75 return 0; 77 return 0;
76 } 78 }