Skip to content
Snippets Groups Projects
Commit af5484ac authored by Priyanka Jain's avatar Priyanka Jain Committed by Joe Hershberger
Browse files

net/phy/cortina.c: Update get_phy_id implementation


Update get_phy_id() implementation in cortina.c to check
for Cortina_phy by comparing device phy_id with cortina phy_id
instead of relying on presence of CORTINA macros.

This will allow get_phy_id to work with non-cortina phy devices
which might have same phy address as Cortina device but on
different  bus.

Signed-off-by: Priyanka Jain's avatarPriyanka Jain <priyanka.jain@nxp.com>
Acked-by: Joe Hershberger's avatarJoe Hershberger <joe.hershberger@ni.com>
parent a802d1e2
No related branches found
No related tags found
No related merge requests found
......@@ -295,45 +295,33 @@ int phy_cortina_init(void)
int get_phy_id(struct mii_dev *bus, int addr, int devad, u32 *phy_id)
{
int phy_reg;
bool is_cortina_phy = false;
switch (addr) {
#ifdef CORTINA_PHY_ADDR1
case CORTINA_PHY_ADDR1:
#endif
#ifdef CORTINA_PHY_ADDR2
case CORTINA_PHY_ADDR2:
#endif
#ifdef CORTINA_PHY_ADDR3
case CORTINA_PHY_ADDR3:
#endif
#ifdef CORTINA_PHY_ADDR4
case CORTINA_PHY_ADDR4:
#endif
is_cortina_phy = true;
break;
default:
break;
}
/* Cortina PHY has non-standard offset of PHY ID registers */
if (is_cortina_phy)
phy_reg = bus->read(bus, addr, 0, VILLA_GLOBAL_CHIP_ID_LSB);
else
phy_reg = bus->read(bus, addr, devad, MII_PHYSID1);
phy_reg = bus->read(bus, addr, 0, VILLA_GLOBAL_CHIP_ID_LSB);
if (phy_reg < 0)
return -EIO;
*phy_id = (phy_reg & 0xffff) << 16;
phy_reg = bus->read(bus, addr, 0, VILLA_GLOBAL_CHIP_ID_MSB);
if (phy_reg < 0)
return -EIO;
*phy_id |= (phy_reg & 0xffff);
*phy_id = (phy_reg & 0xffff) << 16;
if (is_cortina_phy)
phy_reg = bus->read(bus, addr, 0, VILLA_GLOBAL_CHIP_ID_MSB);
else
phy_reg = bus->read(bus, addr, devad, MII_PHYSID2);
if (*phy_id == PHY_UID_CS4340)
return 0;
/*
* If Cortina PHY not detected,
* try generic way to find PHY ID registers
*/
phy_reg = bus->read(bus, addr, devad, MII_PHYSID1);
if (phy_reg < 0)
return -EIO;
*phy_id = (phy_reg & 0xffff) << 16;
phy_reg = bus->read(bus, addr, devad, MII_PHYSID2);
if (phy_reg < 0)
return -EIO;
*phy_id |= (phy_reg & 0xffff);
return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment