From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752329AbcBOSTH (ORCPT ); Mon, 15 Feb 2016 13:19:07 -0500 Received: from mail-ob0-f172.google.com ([209.85.214.172]:34130 "EHLO mail-ob0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751193AbcBOSTF (ORCPT ); Mon, 15 Feb 2016 13:19:05 -0500 Subject: Re: [PATCH] phy: marvell: Fix and unify reg-init behavior To: Clemens Gruber , netdev@vger.kernel.org References: <1455558779-15953-1-git-send-email-clemens.gruber@pqgruber.com> Cc: linux-kernel@vger.kernel.org, "David S . Miller" , Andrew Lunn From: Florian Fainelli X-Enigmail-Draft-Status: N1110 Message-ID: <56C21695.1030809@gmail.com> Date: Mon, 15 Feb 2016 10:19:01 -0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1455558779-15953-1-git-send-email-clemens.gruber@pqgruber.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 15/02/2016 09:52, Clemens Gruber wrote: > For the Marvell 88E1510, marvell_of_reg_init was called too late (in > m88e1510_config_aneg), which lead to the phy state machine being stuck > at waiting for interrupts, which are off by default on the 88E1510. > This further lead to the ethernet link not coming up at boot. > For some Marvell PHYs, marvell_of_reg_init was not called at all. You could mention that this became apparent with > > Add a generic marvell_config_init function, which in turn calls > marvell_of_reg_init and resets the PHY, to get more consistent behavior > across all Marvell PHYs. Looks good, just few comments below: > > Signed-off-by: Clemens Gruber > --- > drivers/net/phy/marvell.c | 65 +++++++++++++++++++++++------------------------ > 1 file changed, 32 insertions(+), 33 deletions(-) > > diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c > index e3eb964..473beaa 100644 > --- a/drivers/net/phy/marvell.c > +++ b/drivers/net/phy/marvell.c > @@ -153,6 +153,8 @@ struct marvell_priv { > u64 stats[ARRAY_SIZE(marvell_hw_stats)]; > }; > > +static int marvell_of_reg_init(struct phy_device *phydev); Can we avoid the forward declaration by re-arranging function bodies? > + > static int marvell_ack_interrupt(struct phy_device *phydev) > { > int err; > @@ -215,6 +217,24 @@ static int marvell_set_polarity(struct phy_device *phydev, int polarity) > return 0; > } > > +static int marvell_config_init(struct phy_device *phydev) > +{ > + int err; > + > + /* Set page to 0 */ > + err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0); > + if (err < 0) > + return err; > + > + /* Set registers from marvell,reg-init DT property */ > + err = marvell_of_reg_init(phydev); > + if (err < 0) > + return err; > + > + /* Reset the PHY (The page is 0 already) */ > + return phy_write(phydev, MII_BMCR, BMCR_RESET); This does not appear to be needed except for the 88E1111, 1118 and 1149, might be better to check these PHY IDs explicitly here to avoid a software reset for the other PHYs and make the transformation identical before and after the change? -- Florian