sfc: Fix reporting of PHY id
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>
This commit is contained in:
Родитель
f794fd4400
Коммит
3f39a5e9bf
|
@ -17,6 +17,21 @@
|
|||
#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)
|
||||
{
|
||||
|
|
|
@ -70,10 +70,10 @@
|
|||
#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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче