> > +static int lan88xx_config_init(struct phy_device *phydev) > > +{ > > + phydev->supported &= phydev->drv->features; > > + phydev->advertising &= phydev->drv->features; > > This looks suspicious, phy_probe() takes the driver supported features > and assigns it to phydev->supported, and phydev->advertising, is not > that working somehow? > > genphy_config_init() does look at the current MII_BMRS value to > determine what is supported by the PHY, and masks it in > phydev->supported, so that could indeed be an issue if we had not had a > change to mask with the supported modes before. > > I think we need more explanation here as to what kind of bug you may > have been observing, there could be one.
SUPPORTED_Pause & SUPPORTED_Asym_Pause set at phydev->features are removed by genphy_config_init(). As you pointed, it may be better to modify genphy_config_init() than each driver's config_init routine. - Woojung