From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753921AbeD3NRk (ORCPT ); Mon, 30 Apr 2018 09:17:40 -0400 Received: from vps0.lunn.ch ([185.16.172.187]:44940 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753795AbeD3NRj (ORCPT ); Mon, 30 Apr 2018 09:17:39 -0400 Date: Mon, 30 Apr 2018 15:17:30 +0200 From: Andrew Lunn To: Jisheng Zhang Cc: Bhadram Varka , Florian Fainelli , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jingju Hou Subject: Re: [PATCH] net: phy: marvell: clear wol event before setting it Message-ID: <20180430131730.GE10066@lunn.ch> References: <20180419160232.519d15be@xhacker.debian> <20180419121801.GC17888@lunn.ch> <4273f766-a017-b336-7d14-a28901d274b9@nvidia.com> <20180426141508.6660a633@xhacker.debian> <73e21c83-f78a-8b22-a421-f179ef6adef1@nvidia.com> <20180427152555.5e8efb9c@xhacker.debian> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20180427152555.5e8efb9c@xhacker.debian> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > > diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c > > index ed8a67d..5d3d138 100644 > > --- a/drivers/net/phy/marvell.c > > +++ b/drivers/net/phy/marvell.c > > @@ -55,6 +55,7 @@ > > > >  #define MII_M1011_IEVENT               0x13 > >  #define MII_M1011_IEVENT_CLEAR         0x0000 > > +#define MII_M1011_IEVENT_WOL_EVENT     BIT(7) > > > >  #define MII_M1011_IMASK                        0x12 > > - #define MII_M1011_IMASK_INIT           0x6400 > > + #define MII_M1011_IMASK_INIT           0x6480 > > > > @@ -195,13 +196,40 @@ struct marvell_priv { > >         bool copper; > >  }; > > > > +static int marvell_clear_wol_status(struct phy_device *phydev) > > +{ > > +       int err, temp, oldpage; > > + > > +       oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); > > +       if (oldpage < 0) > > +               return oldpage; > > + > > +       err = phy_write(phydev, MII_MARVELL_PHY_PAGE, > > +                        MII_88E1318S_PHY_WOL_PAGE); > > +       if (err < 0) > > +               return err; > > + > > +       /* > > +        * Clear WOL status so that for next WOL event > > +        * interrupt will be generated by HW > > +        */ > > +       temp = phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); > > +       temp |= MII_88E1318S_PHY_WOL_CTRL_CLEAR_WOL_STATUS; > > +       err = phy_write(phydev, MII_88E1318S_PHY_WOL_CTRL, temp); > > is it better to reuse __phy_write()? phy_modify_paged() would be the best function to use. Andrew