Re: LXT971 driver in the phy lib

From: Andy Fleming
Date: Mon May 08 2006 - 12:35:03 EST



On May 8, 2006, at 11:05, Uwe Zeisberger wrote:

Hello,

I try to get an network interface running that has an LXT971A[1].

If I apply the following patch, the target can detect the phy.

diff --git a/drivers/net/phy/lxt.c b/drivers/net/phy/lxt.c
index bef79e4..4c66fac 100644
--- a/drivers/net/phy/lxt.c
+++ b/drivers/net/phy/lxt.c
@@ -137,9 +137,9 @@ static struct phy_driver lxt970_driver =
};

static struct phy_driver lxt971_driver = {
- .phy_id = 0x0001378e,
+ .phy_id = 0x001378e0,
.name = "LXT971",
- .phy_id_mask = 0x0fffffff,
+ .phy_id_mask = 0xfffffff0,
.features = PHY_BASIC_FEATURES,
.flags = PHY_HAS_INTERRUPT,
.config_aneg = genphy_config_aneg,


This looks good.


According to

http://www.intel.com/design/network/products/LAN/datashts/ 24941402.pdf

page 90f the id registers yield 0x001378eX (with X being current
revision ID)

uzeisberger@io:~/gsrc/linux-2.6$ git grep -i 1378e drivers/net/
drivers/net/arm/at91_ether.h:#define MII_LXT971A_ID 0x001378E0
drivers/net/e1000/e1000_hw.h:#define L1LXT971A_PHY_ID 0x001378E0
drivers/net/fec.c: .id = 0x0001378e,
drivers/net/fec_8xx/fec_mii.c: .id = 0x0001378e,
drivers/net/phy/lxt.c: .phy_id = 0x0001378e,

The fec.c and fec_mii.c drivers used a shift by 4 to chop off the end of the ID. When the PHY Layer switched to using a mask, not all of the drivers got properly switched.


So both variants occur more than once. (I only took a quick glance at
the usage of these ids, but I think they all use it in the same way.
That is, ID1 << 16 | ID2.)

The fec-style drivers do this:

if(phy_info[i]->id == (fep->phy_id >> 4))

Anyway, your patch is correct.


"My" phy reports 0x001378e2 and now I wonder if there are different
chips out there with the same name.

Can anybody explain this mismatch to me? (Or point me to the right
query for google.)


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/