Message ID | 20170721140210.4m3vuzuv6f3ckqzl@xps13.dannf |
---|---|
State | New |
Headers | show |
On 21.07.2017 16:02, dann frazier wrote: > From: Lin Yun Sheng <linyunsheng@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1705712 > > This patch fixes the phy loopback self_test failed issue. when > Marvell Phy Module is loaded, it will powerdown fiber when doing > phy loopback self test, which cause phy loopback self_test fail. > > Signed-off-by: Lin Yun Sheng <linyunsheng@huawei.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 7fe5b914313ff67d71cb2b5aa4b850e0884e75dd) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- > drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > index b8fab149690f..e95795b3c841 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c > @@ -288,9 +288,15 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en) > > /* Force 1000M Link, Default is 0x0200 */ > phy_write(phy_dev, 7, 0x20C); > - phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); > > - /* Enable PHY loop-back */ > + /* Powerup Fiber */ > + phy_write(phy_dev, HNS_PHY_PAGE_REG, 1); > + val = phy_read(phy_dev, COPPER_CONTROL_REG); > + val &= ~PHY_POWER_DOWN; > + phy_write(phy_dev, COPPER_CONTROL_REG, val); > + > + /* Enable Phy Loopback */ > + phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); > val = phy_read(phy_dev, COPPER_CONTROL_REG); > val |= PHY_LOOP_BACK; > val &= ~PHY_POWER_DOWN; > @@ -299,6 +305,12 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en) > phy_write(phy_dev, HNS_PHY_PAGE_REG, 0xFA); > phy_write(phy_dev, 1, 0x400); > phy_write(phy_dev, 7, 0x200); > + > + phy_write(phy_dev, HNS_PHY_PAGE_REG, 1); > + val = phy_read(phy_dev, COPPER_CONTROL_REG); > + val |= PHY_POWER_DOWN; > + phy_write(phy_dev, COPPER_CONTROL_REG, val); > + > phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); > phy_write(phy_dev, 9, 0xF00); > >
On Fri, Jul 21, 2017 at 08:02:10AM -0600, dann frazier wrote: > From: Lin Yun Sheng <linyunsheng@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1705712 > > This patch fixes the phy loopback self_test failed issue. when > Marvell Phy Module is loaded, it will powerdown fiber when doing > phy loopback self test, which cause phy loopback self_test fail. > > Signed-off-by: Lin Yun Sheng <linyunsheng@huawei.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 7fe5b914313ff67d71cb2b5aa4b850e0884e75dd) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Acked-by: Seth Forshee <seth.forshee@canonical.com> Applied to artful/master-next, thanks.
Applied on zesty master-next branch. Thank you, Kleber
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c index b8fab149690f..e95795b3c841 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c @@ -288,9 +288,15 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en) /* Force 1000M Link, Default is 0x0200 */ phy_write(phy_dev, 7, 0x20C); - phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); - /* Enable PHY loop-back */ + /* Powerup Fiber */ + phy_write(phy_dev, HNS_PHY_PAGE_REG, 1); + val = phy_read(phy_dev, COPPER_CONTROL_REG); + val &= ~PHY_POWER_DOWN; + phy_write(phy_dev, COPPER_CONTROL_REG, val); + + /* Enable Phy Loopback */ + phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); val = phy_read(phy_dev, COPPER_CONTROL_REG); val |= PHY_LOOP_BACK; val &= ~PHY_POWER_DOWN; @@ -299,6 +305,12 @@ static int hns_nic_config_phy_loopback(struct phy_device *phy_dev, u8 en) phy_write(phy_dev, HNS_PHY_PAGE_REG, 0xFA); phy_write(phy_dev, 1, 0x400); phy_write(phy_dev, 7, 0x200); + + phy_write(phy_dev, HNS_PHY_PAGE_REG, 1); + val = phy_read(phy_dev, COPPER_CONTROL_REG); + val |= PHY_POWER_DOWN; + phy_write(phy_dev, COPPER_CONTROL_REG, val); + phy_write(phy_dev, HNS_PHY_PAGE_REG, 0); phy_write(phy_dev, 9, 0xF00);