|
@@ -39,21 +39,24 @@ static int extract_range(char *input, int *plo, int *phi)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int mdio_write_ranges(struct phy_device *phydev, struct mii_dev *bus,
|
|
|
+static int mdio_write_ranges(struct mii_dev *bus,
|
|
|
int addrlo,
|
|
|
int addrhi, int devadlo, int devadhi,
|
|
|
int reglo, int reghi, unsigned short data,
|
|
|
int extended)
|
|
|
{
|
|
|
+ struct phy_device *phydev;
|
|
|
int addr, devad, reg;
|
|
|
int err = 0;
|
|
|
|
|
|
for (addr = addrlo; addr <= addrhi; addr++) {
|
|
|
+ phydev = bus->phymap[addr];
|
|
|
+
|
|
|
for (devad = devadlo; devad <= devadhi; devad++) {
|
|
|
for (reg = reglo; reg <= reghi; reg++) {
|
|
|
if (!extended)
|
|
|
- err = bus->write(bus, addr, devad,
|
|
|
- reg, data);
|
|
|
+ err = phy_write_mmd(phydev, devad,
|
|
|
+ reg, data);
|
|
|
else
|
|
|
err = phydev->drv->writeext(phydev,
|
|
|
addr, devad, reg, data);
|
|
@@ -68,15 +71,17 @@ err_out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus,
|
|
|
+static int mdio_read_ranges(struct mii_dev *bus,
|
|
|
int addrlo,
|
|
|
int addrhi, int devadlo, int devadhi,
|
|
|
int reglo, int reghi, int extended)
|
|
|
{
|
|
|
int addr, devad, reg;
|
|
|
+ struct phy_device *phydev;
|
|
|
|
|
|
printf("Reading from bus %s\n", bus->name);
|
|
|
for (addr = addrlo; addr <= addrhi; addr++) {
|
|
|
+ phydev = bus->phymap[addr];
|
|
|
printf("PHY at address %x:\n", addr);
|
|
|
|
|
|
for (devad = devadlo; devad <= devadhi; devad++) {
|
|
@@ -84,7 +89,7 @@ static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus,
|
|
|
int val;
|
|
|
|
|
|
if (!extended)
|
|
|
- val = bus->read(bus, addr, devad, reg);
|
|
|
+ val = phy_read_mmd(phydev, devad, reg);
|
|
|
else
|
|
|
val = phydev->drv->readext(phydev, addr,
|
|
|
devad, reg);
|
|
@@ -222,14 +227,14 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
|
bus = phydev->bus;
|
|
|
extended = 1;
|
|
|
} else {
|
|
|
- return -1;
|
|
|
+ return CMD_RET_FAILURE;
|
|
|
}
|
|
|
|
|
|
if (!phydev->drv ||
|
|
|
(!phydev->drv->writeext && (op[0] == 'w')) ||
|
|
|
(!phydev->drv->readext && (op[0] == 'r'))) {
|
|
|
puts("PHY does not have extended functions\n");
|
|
|
- return -1;
|
|
|
+ return CMD_RET_FAILURE;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -242,13 +247,13 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
|
if (pos > 1)
|
|
|
if (extract_reg_range(argv[pos--], &devadlo, &devadhi,
|
|
|
®lo, ®hi))
|
|
|
- return -1;
|
|
|
+ return CMD_RET_FAILURE;
|
|
|
|
|
|
default:
|
|
|
if (pos > 1)
|
|
|
if (extract_phy_range(&argv[2], pos - 1, &bus,
|
|
|
&phydev, &addrlo, &addrhi))
|
|
|
- return -1;
|
|
|
+ return CMD_RET_FAILURE;
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -264,12 +269,12 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
|
|
|
|
switch (op[0]) {
|
|
|
case 'w':
|
|
|
- mdio_write_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi,
|
|
|
+ mdio_write_ranges(bus, addrlo, addrhi, devadlo, devadhi,
|
|
|
reglo, reghi, data, extended);
|
|
|
break;
|
|
|
|
|
|
case 'r':
|
|
|
- mdio_read_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi,
|
|
|
+ mdio_read_ranges(bus, addrlo, addrhi, devadlo, devadhi,
|
|
|
reglo, reghi, extended);
|
|
|
break;
|
|
|
}
|