sfc: Treat all MAC registers as 128-bit
authorBen Hutchings <bhutchings@solarflare.com>
Wed, 25 Nov 2009 16:08:41 +0000 (16:08 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Nov 2009 23:59:00 +0000 (15:59 -0800)
Although all the defined fields in these registers are within 32 bits,
they are architecturally defined as 128-bit like most other Falcon
registers.  In particular, we must use efx_reado() to ensure proper
locking when reading MD_STAT_REG.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/sfc/falcon.c
drivers/net/sfc/falcon_xmac.c

index 7b19686218a586f5f0c949964af3f27d6c636ba1..f97ef3e0572f32fa69a869c7bc77db1c27ac4386 100644 (file)
@@ -2042,18 +2042,18 @@ int falcon_dma_stats(struct efx_nic *efx, unsigned int done_offset)
 /* Wait for GMII access to complete */
 static int falcon_gmii_wait(struct efx_nic *efx)
 {
-       efx_dword_t md_stat;
+       efx_oword_t md_stat;
        int count;
 
        /* wait upto 50ms - taken max from datasheet */
        for (count = 0; count < 5000; count++) {
-               efx_readd(efx, &md_stat, FR_AB_MD_STAT);
-               if (EFX_DWORD_FIELD(md_stat, FRF_AB_MD_BSY) == 0) {
-                       if (EFX_DWORD_FIELD(md_stat, FRF_AB_MD_LNFL) != 0 ||
-                           EFX_DWORD_FIELD(md_stat, FRF_AB_MD_BSERR) != 0) {
+               efx_reado(efx, &md_stat, FR_AB_MD_STAT);
+               if (EFX_OWORD_FIELD(md_stat, FRF_AB_MD_BSY) == 0) {
+                       if (EFX_OWORD_FIELD(md_stat, FRF_AB_MD_LNFL) != 0 ||
+                           EFX_OWORD_FIELD(md_stat, FRF_AB_MD_BSERR) != 0) {
                                EFX_ERR(efx, "error from GMII access "
-                                       EFX_DWORD_FMT"\n",
-                                       EFX_DWORD_VAL(md_stat));
+                                       EFX_OWORD_FMT"\n",
+                                       EFX_OWORD_VAL(md_stat));
                                return -EIO;
                        }
                        return 0;
index 69cb55fc615aa1259879b3d5094724fabb203f28..cf24513900e7fa1b32a0eb33341b2b530f307b0a 100644 (file)
@@ -64,7 +64,7 @@ int falcon_reset_xaui(struct efx_nic *efx)
        int count;
 
        /* Start reset sequence */
-       EFX_POPULATE_DWORD_1(reg, FRF_AB_XX_RST_XX_EN, 1);
+       EFX_POPULATE_OWORD_1(reg, FRF_AB_XX_RST_XX_EN, 1);
        efx_writeo(efx, &reg, FR_AB_XX_PWR_RST);
 
        /* Wait up to 10 ms for completion, then reinitialise */
@@ -146,14 +146,14 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
        bool rx_fc = !!(efx->link_state.fc & EFX_FC_RX);
 
        /* Configure MAC  - cut-thru mode is hard wired on */
-       EFX_POPULATE_DWORD_3(reg,
+       EFX_POPULATE_OWORD_3(reg,
                             FRF_AB_XM_RX_JUMBO_MODE, 1,
                             FRF_AB_XM_TX_STAT_EN, 1,
                             FRF_AB_XM_RX_STAT_EN, 1);
        efx_writeo(efx, &reg, FR_AB_XM_GLB_CFG);
 
        /* Configure TX */
-       EFX_POPULATE_DWORD_6(reg,
+       EFX_POPULATE_OWORD_6(reg,
                             FRF_AB_XM_TXEN, 1,
                             FRF_AB_XM_TX_PRMBL, 1,
                             FRF_AB_XM_AUTO_PAD, 1,
@@ -163,7 +163,7 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
        efx_writeo(efx, &reg, FR_AB_XM_TX_CFG);
 
        /* Configure RX */
-       EFX_POPULATE_DWORD_5(reg,
+       EFX_POPULATE_OWORD_5(reg,
                             FRF_AB_XM_RXEN, 1,
                             FRF_AB_XM_AUTO_DEPAD, 0,
                             FRF_AB_XM_ACPT_ALL_MCAST, 1,
@@ -173,14 +173,14 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
 
        /* Set frame length */
        max_frame_len = EFX_MAX_FRAME_LEN(efx->net_dev->mtu);
-       EFX_POPULATE_DWORD_1(reg, FRF_AB_XM_MAX_RX_FRM_SIZE, max_frame_len);
+       EFX_POPULATE_OWORD_1(reg, FRF_AB_XM_MAX_RX_FRM_SIZE, max_frame_len);
        efx_writeo(efx, &reg, FR_AB_XM_RX_PARAM);
-       EFX_POPULATE_DWORD_2(reg,
+       EFX_POPULATE_OWORD_2(reg,
                             FRF_AB_XM_MAX_TX_FRM_SIZE, max_frame_len,
                             FRF_AB_XM_TX_JUMBO_MODE, 1);
        efx_writeo(efx, &reg, FR_AB_XM_TX_PARAM);
 
-       EFX_POPULATE_DWORD_2(reg,
+       EFX_POPULATE_OWORD_2(reg,
                             FRF_AB_XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */
                             FRF_AB_XM_DIS_FCNTL, !rx_fc);
        efx_writeo(efx, &reg, FR_AB_XM_FC);