sfc: Add support for MMDs numbered >15
authorBen Hutchings <bhutchings@solarflare.com>
Sat, 13 Dec 2008 05:44:14 +0000 (21:44 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 13 Dec 2008 05:57:58 +0000 (21:57 -0800)
Combine DEVS0 and DEVS1 registers into a 32-bit mask instead of
reading just DEVS0.

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

index 19e25210b687c34f701a16739c67ffa4626ba561..1eed48407ed87eda88dc94caf34016edfb17e375 100644 (file)
@@ -121,16 +121,18 @@ int mdio_clause45_wait_reset_mmds(struct efx_nic *efx,
 int mdio_clause45_check_mmds(struct efx_nic *efx,
                             unsigned int mmd_mask, unsigned int fatal_mask)
 {
-       int devices, mmd = 0;
-       int probe_mmd;
+       u32 devices;
+       int mmd = 0, probe_mmd;
 
        /* Historically we have probed the PHYXS to find out what devices are
         * present,but that doesn't work so well if the PHYXS isn't expected
         * to exist, if so just find the first item in the list supplied. */
-       probe_mmd = (mmd_mask & MDIO_MMDREG_DEVS0_PHYXS) ? MDIO_MMD_PHYXS :
+       probe_mmd = (mmd_mask & MDIO_MMDREG_DEVS_PHYXS) ? MDIO_MMD_PHYXS :
            __ffs(mmd_mask);
-       devices = mdio_clause45_read(efx, efx->mii.phy_id,
-                                    probe_mmd, MDIO_MMDREG_DEVS0);
+       devices = (mdio_clause45_read(efx, efx->mii.phy_id,
+                                     probe_mmd, MDIO_MMDREG_DEVS0) |
+                  mdio_clause45_read(efx, efx->mii.phy_id,
+                                     probe_mmd, MDIO_MMDREG_DEVS1) << 16);
 
        /* Check all the expected MMDs are present */
        if (devices < 0) {
@@ -175,14 +177,14 @@ bool mdio_clause45_links_ok(struct efx_nic *efx, unsigned int mmd_mask)
        else if (efx_phy_mode_disabled(efx->phy_mode))
                return false;
        else if (efx->loopback_mode == LOOPBACK_PHYXS)
-               mmd_mask &= ~(MDIO_MMDREG_DEVS0_PHYXS |
-                             MDIO_MMDREG_DEVS0_PCS |
-                             MDIO_MMDREG_DEVS0_PMAPMD);
+               mmd_mask &= ~(MDIO_MMDREG_DEVS_PHYXS |
+                             MDIO_MMDREG_DEVS_PCS |
+                             MDIO_MMDREG_DEVS_PMAPMD);
        else if (efx->loopback_mode == LOOPBACK_PCS)
-               mmd_mask &= ~(MDIO_MMDREG_DEVS0_PCS |
-                             MDIO_MMDREG_DEVS0_PMAPMD);
+               mmd_mask &= ~(MDIO_MMDREG_DEVS_PCS |
+                             MDIO_MMDREG_DEVS_PMAPMD);
        else if (efx->loopback_mode == LOOPBACK_PMAPMD)
-               mmd_mask &= ~MDIO_MMDREG_DEVS0_PMAPMD;
+               mmd_mask &= ~MDIO_MMDREG_DEVS_PMAPMD;
 
        while (mmd_mask) {
                if (mmd_mask & 1) {
index db9f358349c61c7fe57315b6f7f0cabcc60a7e09..45163838130e6c19853f6168521c5e5a27f26415 100644 (file)
 #define MDIO_ID_MODEL(_id32)   ((_id32 >> 4) & 0x3f)
 #define MDIO_ID_OUI(_id32)     (_id32 >> 10)
 
-/* Bits in MMDREG_DEVS0. Someone thoughtfully layed things out
+/* Bits in MMDREG_DEVS0/1. Someone thoughtfully layed things out
  * so the 'bit present' bit number of an MMD is the number of
  * that MMD */
 #define DEV_PRESENT_BIT(_b) (1 << _b)
 
-#define MDIO_MMDREG_DEVS0_PHYXS         DEV_PRESENT_BIT(MDIO_MMD_PHYXS)
-#define MDIO_MMDREG_DEVS0_PCS   DEV_PRESENT_BIT(MDIO_MMD_PCS)
-#define MDIO_MMDREG_DEVS0_PMAPMD DEV_PRESENT_BIT(MDIO_MMD_PMAPMD)
+#define MDIO_MMDREG_DEVS_PHYXS DEV_PRESENT_BIT(MDIO_MMD_PHYXS)
+#define MDIO_MMDREG_DEVS_PCS   DEV_PRESENT_BIT(MDIO_MMD_PCS)
+#define MDIO_MMDREG_DEVS_PMAPMD        DEV_PRESENT_BIT(MDIO_MMD_PMAPMD)
 
 /* Bits in MMDREG_STAT2 */
 #define MDIO_MMDREG_STAT2_PRESENT_VAL  (2)
index 3fa7ccb08d50f062f99117fcc65e2bf8dc72fe87..197b5449ab181bc0fd88c62a9ae65e9a386d3513 100644 (file)
@@ -19,9 +19,9 @@
 
 /* We expect these MMDs to be in the package */
 /* AN not here as mdio_check_mmds() requires STAT2 support */
-#define TENXPRESS_REQUIRED_DEVS (MDIO_MMDREG_DEVS0_PMAPMD | \
-                                MDIO_MMDREG_DEVS0_PCS    | \
-                                MDIO_MMDREG_DEVS0_PHYXS)
+#define TENXPRESS_REQUIRED_DEVS (MDIO_MMDREG_DEVS_PMAPMD       | \
+                                MDIO_MMDREG_DEVS_PCS           | \
+                                MDIO_MMDREG_DEVS_PHYXS)
 
 #define TENXPRESS_LOOPBACKS ((1 << LOOPBACK_PHYXS) |   \
                             (1 << LOOPBACK_PCS) |      \
index 971a24b59fa7d4c1b5acdaafe4918c997d503fc3..0413d135e4aa3f401aaa4a49feced2a52d7f51af 100644 (file)
@@ -19,9 +19,9 @@
 #include "phy.h"
 #include "mac.h"
 
-#define XFP_REQUIRED_DEVS (MDIO_MMDREG_DEVS0_PCS |     \
-                          MDIO_MMDREG_DEVS0_PMAPMD |   \
-                          MDIO_MMDREG_DEVS0_PHYXS)
+#define XFP_REQUIRED_DEVS (MDIO_MMDREG_DEVS_PCS |      \
+                          MDIO_MMDREG_DEVS_PMAPMD |    \
+                          MDIO_MMDREG_DEVS_PHYXS)
 
 #define XFP_LOOPBACKS ((1 << LOOPBACK_PCS) |           \
                       (1 << LOOPBACK_PMAPMD) |         \
@@ -64,7 +64,7 @@ static int xfp_reset_phy(struct efx_nic *efx)
        /* Check that all the MMDs we expect are present and responding. We
         * expect faults on some if the link is down, but not on the PHY XS */
        rc = mdio_clause45_check_mmds(efx, XFP_REQUIRED_DEVS,
-                                     MDIO_MMDREG_DEVS0_PHYXS);
+                                     MDIO_MMDREG_DEVS_PHYXS);
        if (rc < 0)
                goto fail;