Messages in this thread | | | From | <> | Subject | Re: [PATCH net-next 6/6] net: phy: added ethtool master-slave configuration support | Date | Fri, 4 Mar 2022 13:31:50 +0000 |
| |
Hi Andrew,
On Fri, 2022-03-04 at 14:13 +0100, Andrew Lunn wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you > know the content is safe > > > +static int lan87xx_read_master_slave(struct phy_device *phydev) > > +{ > > + int rc = 0; > > + > > + phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN; > > + phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN; > > + > > + rc = phy_read(phydev, MII_CTRL1000); > > + if (rc < 0) > > + return rc; > > + > > + if (rc & CTL1000_AS_MASTER) > > + phydev->master_slave_get = > > MASTER_SLAVE_CFG_MASTER_FORCE; > > + else > > + phydev->master_slave_get = > > MASTER_SLAVE_CFG_SLAVE_FORCE; > > + > > + rc = phy_read(phydev, MII_STAT1000); > > + if (rc < 0) > > + return rc; > > + > > + if (rc & LPA_1000MSRES) > > + phydev->master_slave_state = > > MASTER_SLAVE_STATE_MASTER; > > + else > > + phydev->master_slave_state = > > MASTER_SLAVE_STATE_SLAVE; > > + > > + return rc; > > +} > > It looks like you can just call genphy_read_master_slave()? Or am i > missing some subtle difference?
Thanks for the comment.
genphy_read_master_slave() and genphy_setup_master_slave() functions first check for whether phy is gigabit capable. If no, it returns. LAN87XX is not gigabit capable, so I replicated the genphy function and removed only the gigabit capable check. I took nxp-tja11xx code as reference, which has similar implementation.
> > > +static int lan87xx_config_aneg(struct phy_device *phydev) > > +{ > > + u16 ctl = 0; > > + int rc; > > + > > + switch (phydev->master_slave_set) { > > + case MASTER_SLAVE_CFG_MASTER_FORCE: > > + ctl |= CTL1000_AS_MASTER; > > + break; > > + case MASTER_SLAVE_CFG_SLAVE_FORCE: > > + break; > > + case MASTER_SLAVE_CFG_UNKNOWN: > > + case MASTER_SLAVE_CFG_UNSUPPORTED: > > + return 0; > > + default: > > + phydev_warn(phydev, "Unsupported Master/Slave > > mode\n"); > > + return -EOPNOTSUPP; > > + } > > + > > + rc = phy_modify_changed(phydev, MII_CTRL1000, > > CTL1000_AS_MASTER, ctl); > > + if (rc == 1) > > + rc = genphy_soft_reset(phydev); > > + > > + return rc; > > +} > > Please use genphy_setup_master_slave() > > Andrew
| |