sfc: Fix reporting of PHY id
authorBen Hutchings <bhutchings@solarflare.com>
Fri, 27 Feb 2009 13:07:15 +0000 (13:07 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Mar 2009 11:15:04 +0000 (03:15 -0800)
Shuffle bits of the OUI into the conventional written order.

Replace PHY id component macros with functions.

Zero-pad PHY id components in log messages.

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/xfp_phy.c

index 4462fb58a3a9be33d752ef265884ca64dd3ad4ce..9f5ec3eb3418c4b797b6a1a626af87b1addcd66b 100644 (file)
 #include "boards.h"
 #include "workarounds.h"
 
+unsigned mdio_id_oui(u32 id)
+{
+       unsigned oui = 0;
+       int i;
+
+       /* The bits of the OUI are designated a..x, with a=0 and b variable.
+        * In the id register c is the MSB but the OUI is conventionally
+        * written as bytes h..a, p..i, x..q.  Reorder the bits accordingly. */
+       for (i = 0; i < 22; ++i)
+               if (id & (1 << (i + 10)))
+                       oui |= 1 << (i ^ 7);
+
+       return oui;
+}
+
 int mdio_clause45_reset_mmd(struct efx_nic *port, int mmd,
                            int spins, int spintime)
 {
index 8ba49773ce7e19a9f4b14ca319510b0eb0aff133..7014d2279c20f633977808647839681cfdfe7244 100644 (file)
 #define MDIO_MMDREG_STAT1_LPABLE_LBN   (1)
 #define MDIO_MMDREG_STAT1_LPABLE_WIDTH (1)
 
-/* Bits in ID reg */
-#define MDIO_ID_REV(_id32)     (_id32 & 0xf)
-#define MDIO_ID_MODEL(_id32)   ((_id32 >> 4) & 0x3f)
-#define MDIO_ID_OUI(_id32)     (_id32 >> 10)
+/* Bits in combined ID regs */
+static inline unsigned mdio_id_rev(u32 id) { return id & 0xf; }
+static inline unsigned mdio_id_model(u32 id) { return (id >> 4) & 0x3f; }
+extern unsigned mdio_id_oui(u32 id);
 
 /* Bits in MMDREG_DEVS0/1. Someone thoughtfully layed things out
  * so the 'bit present' bit number of an MMD is the number of
index 5d1c7f800007d536b2470cbdd56b2c91bd8eee4b..2df467d280643d117f390e5b72145158b738063c 100644 (file)
@@ -88,9 +88,9 @@ static int xfp_phy_init(struct efx_nic *efx)
                return -ENOMEM;
        efx->phy_data = phy_data;
 
-       EFX_INFO(efx, "PHY ID reg %x (OUI %x model %x revision %x)\n",
-                devid, MDIO_ID_OUI(devid), MDIO_ID_MODEL(devid),
-                MDIO_ID_REV(devid));
+       EFX_INFO(efx, "PHY ID reg %x (OUI %06x model %02x revision %x)\n",
+                devid, mdio_id_oui(devid), mdio_id_model(devid),
+                mdio_id_rev(devid));
 
        phy_data->phy_mode = efx->phy_mode;