пт, 24 мая 2019 г. в 20:24, Heiner Kallweit <hkallwe...@gmail.com>: > > On 24.05.2019 12:25, Max Uvarov wrote: > > After reset SGMII Autoneg timer is set to 2us (bits 6 and 5 are 01). > > That us not enough to finalize autonegatiation on some devices. > > Increase this timer duration to maximum supported 16ms. > > > > Signed-off-by: Max Uvarov <muva...@gmail.com> > > --- > > drivers/net/phy/dp83867.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c > > index afd31c516cc7..66b0a09ad094 100644 > > --- a/drivers/net/phy/dp83867.c > > +++ b/drivers/net/phy/dp83867.c > > @@ -297,6 +297,19 @@ static int dp83867_config_init(struct phy_device > > *phydev) > > WARN_ONCE(1, "dp83867: err DP83867_10M_SGMII_CFG\n"); > > return ret; > > } > > + > > + /* After reset SGMII Autoneg timer is set to 2us (bits 6 and 5 > > + * are 01). That us not enough to finalize autoneg on some > > + * devices. Increase this timer duration to maximum 16ms. > > + */ > In the public datasheet the bits are described as reserved. However, based on > the value, I suppose it's not a timer value but the timer resolution.
No, it's public: http://www.ti.com/lit/ds/symlink/dp83867e.pdf page 72. SGMII Auto-Negotiation Timer Duration. > > > + val = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_CFG4); > > + val &= ~(BIT(5) | BIT(6)); > > + ret = phy_write_mmd(phydev, DP83867_DEVADDR, DP83867_CFG4, > > val); > > + if (ret) { > > + WARN_ONCE(1, "dp83867: error config sgmii auto-neg > > timer\n"); > > + return ret; > > Same comment as for patch 1. Yes, the same answer. I want to capture hardware error then silently return error and then debug it. WARN is more informative then some random "phy not detected" things. Max. > > > + } > > + > > } > > > > /* Enable Interrupt output INT_OE in CFG3 register */ > > >