Skip to content

Commit 9c93829

Browse files
viviendavem330
authored andcommitted
net: dsa: mv88e6xxx: use the new PHY API
This commit replaces every MDIO direct or indirect access with the new generic mv88e6xxx_phy_* routines. This allows us to get rid of the mv88e6xxx_mdio_{read,write}_{,in}direct and {_,}mv88e6xxx_mdio_page_{read,write} functions. Signed-off-by: Vivien Didelot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 09cb7df commit 9c93829

File tree

1 file changed

+50
-135
lines changed
  • drivers/net/dsa/mv88e6xxx

1 file changed

+50
-135
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 50 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -372,22 +372,6 @@ static int _mv88e6xxx_reg_write(struct mv88e6xxx_chip *chip, int addr,
372372
return mv88e6xxx_write(chip, addr, reg, val);
373373
}
374374

375-
static int mv88e6xxx_mdio_read_direct(struct mv88e6xxx_chip *chip,
376-
int addr, int regnum)
377-
{
378-
if (addr >= 0)
379-
return _mv88e6xxx_reg_read(chip, addr, regnum);
380-
return 0xffff;
381-
}
382-
383-
static int mv88e6xxx_mdio_write_direct(struct mv88e6xxx_chip *chip,
384-
int addr, int regnum, u16 val)
385-
{
386-
if (addr >= 0)
387-
return _mv88e6xxx_reg_write(chip, addr, regnum, val);
388-
return 0;
389-
}
390-
391375
static int mv88e6xxx_ppu_disable(struct mv88e6xxx_chip *chip)
392376
{
393377
int ret;
@@ -942,87 +926,63 @@ static int _mv88e6xxx_atu_wait(struct mv88e6xxx_chip *chip)
942926
GLOBAL_ATU_OP_BUSY);
943927
}
944928

945-
static int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip, int addr,
946-
int reg, u16 *val);
947-
static int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip, int addr,
948-
int reg, u16 val);
949-
950-
static int mv88e6xxx_mdio_read_indirect(struct mv88e6xxx_chip *chip,
951-
int addr, int regnum)
952-
{
953-
u16 val;
954-
int err;
955-
956-
err = mv88e6xxx_g2_smi_phy_read(chip, addr, regnum, &val);
957-
if (err)
958-
return err;
959-
960-
return val;
961-
}
962-
963-
static int mv88e6xxx_mdio_write_indirect(struct mv88e6xxx_chip *chip,
964-
int addr, int regnum, u16 val)
965-
{
966-
return mv88e6xxx_g2_smi_phy_write(chip, addr, regnum, val);
967-
}
968-
969929
static int mv88e6xxx_get_eee(struct dsa_switch *ds, int port,
970930
struct ethtool_eee *e)
971931
{
972932
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
973-
int reg;
933+
u16 reg;
934+
int err;
974935

975936
if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_EEE))
976937
return -EOPNOTSUPP;
977938

978939
mutex_lock(&chip->reg_lock);
979940

980-
reg = mv88e6xxx_mdio_read_indirect(chip, port, 16);
981-
if (reg < 0)
941+
err = mv88e6xxx_phy_read(chip, port, 16, &reg);
942+
if (err)
982943
goto out;
983944

984945
e->eee_enabled = !!(reg & 0x0200);
985946
e->tx_lpi_enabled = !!(reg & 0x0100);
986947

987-
reg = _mv88e6xxx_reg_read(chip, REG_PORT(port), PORT_STATUS);
988-
if (reg < 0)
948+
err = mv88e6xxx_read(chip, REG_PORT(port), PORT_STATUS, &reg);
949+
if (err)
989950
goto out;
990951

991952
e->eee_active = !!(reg & PORT_STATUS_EEE);
992-
reg = 0;
993-
994953
out:
995954
mutex_unlock(&chip->reg_lock);
996-
return reg;
955+
956+
return err;
997957
}
998958

999959
static int mv88e6xxx_set_eee(struct dsa_switch *ds, int port,
1000960
struct phy_device *phydev, struct ethtool_eee *e)
1001961
{
1002962
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
1003-
int reg;
1004-
int ret;
963+
u16 reg;
964+
int err;
1005965

1006966
if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_EEE))
1007967
return -EOPNOTSUPP;
1008968

1009969
mutex_lock(&chip->reg_lock);
1010970

1011-
ret = mv88e6xxx_mdio_read_indirect(chip, port, 16);
1012-
if (ret < 0)
971+
err = mv88e6xxx_phy_read(chip, port, 16, &reg);
972+
if (err)
1013973
goto out;
1014974

1015-
reg = ret & ~0x0300;
975+
reg &= ~0x0300;
1016976
if (e->eee_enabled)
1017977
reg |= 0x0200;
1018978
if (e->tx_lpi_enabled)
1019979
reg |= 0x0100;
1020980

1021-
ret = mv88e6xxx_mdio_write_indirect(chip, port, 16, reg);
981+
err = mv88e6xxx_phy_write(chip, port, 16, reg);
1022982
out:
1023983
mutex_unlock(&chip->reg_lock);
1024984

1025-
return ret;
985+
return err;
1026986
}
1027987

1028988
static int _mv88e6xxx_atu_cmd(struct mv88e6xxx_chip *chip, u16 fid, u16 cmd)
@@ -2382,38 +2342,6 @@ static void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port)
23822342
mutex_unlock(&chip->reg_lock);
23832343
}
23842344

2385-
static int _mv88e6xxx_mdio_page_write(struct mv88e6xxx_chip *chip,
2386-
int port, int page, int reg, int val)
2387-
{
2388-
int ret;
2389-
2390-
ret = mv88e6xxx_mdio_write_indirect(chip, port, 0x16, page);
2391-
if (ret < 0)
2392-
goto restore_page_0;
2393-
2394-
ret = mv88e6xxx_mdio_write_indirect(chip, port, reg, val);
2395-
restore_page_0:
2396-
mv88e6xxx_mdio_write_indirect(chip, port, 0x16, 0x0);
2397-
2398-
return ret;
2399-
}
2400-
2401-
static int _mv88e6xxx_mdio_page_read(struct mv88e6xxx_chip *chip,
2402-
int port, int page, int reg)
2403-
{
2404-
int ret;
2405-
2406-
ret = mv88e6xxx_mdio_write_indirect(chip, port, 0x16, page);
2407-
if (ret < 0)
2408-
goto restore_page_0;
2409-
2410-
ret = mv88e6xxx_mdio_read_indirect(chip, port, reg);
2411-
restore_page_0:
2412-
mv88e6xxx_mdio_write_indirect(chip, port, 0x16, 0x0);
2413-
2414-
return ret;
2415-
}
2416-
24172345
static int mv88e6xxx_switch_reset(struct mv88e6xxx_chip *chip)
24182346
{
24192347
bool ppu_active = mv88e6xxx_has(chip, MV88E6XXX_FLAG_PPU_ACTIVE);
@@ -3322,32 +3250,6 @@ static int mv88e6xxx_set_addr(struct dsa_switch *ds, u8 *addr)
33223250
return err;
33233251
}
33243252

3325-
static int mv88e6xxx_mdio_page_read(struct dsa_switch *ds, int port, int page,
3326-
int reg)
3327-
{
3328-
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
3329-
int ret;
3330-
3331-
mutex_lock(&chip->reg_lock);
3332-
ret = _mv88e6xxx_mdio_page_read(chip, port, page, reg);
3333-
mutex_unlock(&chip->reg_lock);
3334-
3335-
return ret;
3336-
}
3337-
3338-
static int mv88e6xxx_mdio_page_write(struct dsa_switch *ds, int port, int page,
3339-
int reg, int val)
3340-
{
3341-
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
3342-
int ret;
3343-
3344-
mutex_lock(&chip->reg_lock);
3345-
ret = _mv88e6xxx_mdio_page_write(chip, port, page, reg, val);
3346-
mutex_unlock(&chip->reg_lock);
3347-
3348-
return ret;
3349-
}
3350-
33513253
static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg)
33523254
{
33533255
struct mv88e6xxx_chip *chip = bus->priv;
@@ -3441,44 +3343,42 @@ static void mv88e6xxx_mdio_unregister(struct mv88e6xxx_chip *chip)
34413343
static int mv88e61xx_get_temp(struct dsa_switch *ds, int *temp)
34423344
{
34433345
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
3346+
u16 val;
34443347
int ret;
3445-
int val;
34463348

34473349
*temp = 0;
34483350

34493351
mutex_lock(&chip->reg_lock);
34503352

3451-
ret = mv88e6xxx_mdio_write_direct(chip, 0x0, 0x16, 0x6);
3353+
ret = mv88e6xxx_phy_write(chip, 0x0, 0x16, 0x6);
34523354
if (ret < 0)
34533355
goto error;
34543356

34553357
/* Enable temperature sensor */
3456-
ret = mv88e6xxx_mdio_read_direct(chip, 0x0, 0x1a);
3358+
ret = mv88e6xxx_phy_read(chip, 0x0, 0x1a, &val);
34573359
if (ret < 0)
34583360
goto error;
34593361

3460-
ret = mv88e6xxx_mdio_write_direct(chip, 0x0, 0x1a, ret | (1 << 5));
3362+
ret = mv88e6xxx_phy_write(chip, 0x0, 0x1a, val | (1 << 5));
34613363
if (ret < 0)
34623364
goto error;
34633365

34643366
/* Wait for temperature to stabilize */
34653367
usleep_range(10000, 12000);
34663368

3467-
val = mv88e6xxx_mdio_read_direct(chip, 0x0, 0x1a);
3468-
if (val < 0) {
3469-
ret = val;
3369+
ret = mv88e6xxx_phy_read(chip, 0x0, 0x1a, &val);
3370+
if (ret < 0)
34703371
goto error;
3471-
}
34723372

34733373
/* Disable temperature sensor */
3474-
ret = mv88e6xxx_mdio_write_direct(chip, 0x0, 0x1a, ret & ~(1 << 5));
3374+
ret = mv88e6xxx_phy_write(chip, 0x0, 0x1a, val & ~(1 << 5));
34753375
if (ret < 0)
34763376
goto error;
34773377

34783378
*temp = ((val & 0x1f) - 5) * 5;
34793379

34803380
error:
3481-
mv88e6xxx_mdio_write_direct(chip, 0x0, 0x16, 0x0);
3381+
mv88e6xxx_phy_write(chip, 0x0, 0x16, 0x0);
34823382
mutex_unlock(&chip->reg_lock);
34833383
return ret;
34843384
}
@@ -3487,15 +3387,18 @@ static int mv88e63xx_get_temp(struct dsa_switch *ds, int *temp)
34873387
{
34883388
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
34893389
int phy = mv88e6xxx_6320_family(chip) ? 3 : 0;
3390+
u16 val;
34903391
int ret;
34913392

34923393
*temp = 0;
34933394

3494-
ret = mv88e6xxx_mdio_page_read(ds, phy, 6, 27);
3395+
mutex_lock(&chip->reg_lock);
3396+
ret = mv88e6xxx_phy_page_read(chip, phy, 6, 27, &val);
3397+
mutex_unlock(&chip->reg_lock);
34953398
if (ret < 0)
34963399
return ret;
34973400

3498-
*temp = (ret & 0xff) - 25;
3401+
*temp = (val & 0xff) - 25;
34993402

35003403
return 0;
35013404
}
@@ -3517,18 +3420,21 @@ static int mv88e6xxx_get_temp_limit(struct dsa_switch *ds, int *temp)
35173420
{
35183421
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
35193422
int phy = mv88e6xxx_6320_family(chip) ? 3 : 0;
3423+
u16 val;
35203424
int ret;
35213425

35223426
if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_TEMP_LIMIT))
35233427
return -EOPNOTSUPP;
35243428

35253429
*temp = 0;
35263430

3527-
ret = mv88e6xxx_mdio_page_read(ds, phy, 6, 26);
3431+
mutex_lock(&chip->reg_lock);
3432+
ret = mv88e6xxx_phy_page_read(chip, phy, 6, 26, &val);
3433+
mutex_unlock(&chip->reg_lock);
35283434
if (ret < 0)
35293435
return ret;
35303436

3531-
*temp = (((ret >> 8) & 0x1f) * 5) - 25;
3437+
*temp = (((val >> 8) & 0x1f) * 5) - 25;
35323438

35333439
return 0;
35343440
}
@@ -3537,35 +3443,44 @@ static int mv88e6xxx_set_temp_limit(struct dsa_switch *ds, int temp)
35373443
{
35383444
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
35393445
int phy = mv88e6xxx_6320_family(chip) ? 3 : 0;
3540-
int ret;
3446+
u16 val;
3447+
int err;
35413448

35423449
if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_TEMP_LIMIT))
35433450
return -EOPNOTSUPP;
35443451

3545-
ret = mv88e6xxx_mdio_page_read(ds, phy, 6, 26);
3546-
if (ret < 0)
3547-
return ret;
3452+
mutex_lock(&chip->reg_lock);
3453+
err = mv88e6xxx_phy_page_read(chip, phy, 6, 26, &val);
3454+
if (err)
3455+
goto unlock;
35483456
temp = clamp_val(DIV_ROUND_CLOSEST(temp, 5) + 5, 0, 0x1f);
3549-
return mv88e6xxx_mdio_page_write(ds, phy, 6, 26,
3550-
(ret & 0xe0ff) | (temp << 8));
3457+
err = mv88e6xxx_phy_page_write(chip, phy, 6, 26,
3458+
(val & 0xe0ff) | (temp << 8));
3459+
unlock:
3460+
mutex_unlock(&chip->reg_lock);
3461+
3462+
return err;
35513463
}
35523464

35533465
static int mv88e6xxx_get_temp_alarm(struct dsa_switch *ds, bool *alarm)
35543466
{
35553467
struct mv88e6xxx_chip *chip = ds_to_priv(ds);
35563468
int phy = mv88e6xxx_6320_family(chip) ? 3 : 0;
3469+
u16 val;
35573470
int ret;
35583471

35593472
if (!mv88e6xxx_has(chip, MV88E6XXX_FLAG_TEMP_LIMIT))
35603473
return -EOPNOTSUPP;
35613474

35623475
*alarm = false;
35633476

3564-
ret = mv88e6xxx_mdio_page_read(ds, phy, 6, 26);
3477+
mutex_lock(&chip->reg_lock);
3478+
ret = mv88e6xxx_phy_page_read(chip, phy, 6, 26, &val);
3479+
mutex_unlock(&chip->reg_lock);
35653480
if (ret < 0)
35663481
return ret;
35673482

3568-
*alarm = !!(ret & 0x40);
3483+
*alarm = !!(val & 0x40);
35693484

35703485
return 0;
35713486
}

0 commit comments

Comments
 (0)