From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Fainelli Subject: Re: [PATCH net] net: phy: Allow BCM54616S PHY to setup internal TX/RX clock delay Date: Mon, 5 Nov 2018 14:40:27 -0800 Message-ID: <4844a371-ed1f-9f74-1674-e649a9283f12@gmail.com> References: <20181105223540.1897084-1-taoren@fb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: openbmc@lists.ozlabs.org To: Tao Ren , Andrew Lunn , "David S . Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Return-path: In-Reply-To: <20181105223540.1897084-1-taoren@fb.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On 11/5/18 2:35 PM, Tao Ren wrote: > This patch allows users to enable/disable internal TX and/or RX clock > delay for BCM54616S PHYs so as to satisfy RGMII timing specifications. > > On a particular platform, whether TX and/or RX clock delay is required > depends on how PHY connected to the MAC IP. This requirement can be > specified through "phy-mode" property in the platform device tree. > > The patch is inspired by commit 733336262b28 ("net: phy: Allow BCM5481x > PHYs to setup internal TX/RX clock delay"). I will let David be the judge whether this is appropriate as a bugfix (thus targeting the "net" tree) or a feature, which would have to wait for net-next to re-open. > > Signed-off-by: Tao Ren Reviewed-by: Florian Fainelli > --- > drivers/net/phy/broadcom.c | 18 ++++++++++++++++-- > 1 file changed, 16 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c > index e86ea105c802..704537010453 100644 > --- a/drivers/net/phy/broadcom.c > +++ b/drivers/net/phy/broadcom.c > @@ -92,7 +92,7 @@ static int bcm54612e_config_init(struct phy_device *phydev) > return 0; > } > > -static int bcm5481x_config(struct phy_device *phydev) > +static int bcm54xx_config_clock_delay(struct phy_device *phydev) > { > int rc, val; > > @@ -429,7 +429,7 @@ static int bcm5481_config_aneg(struct phy_device *phydev) > ret = genphy_config_aneg(phydev); > > /* Then we can set up the delay. */ > - bcm5481x_config(phydev); > + bcm54xx_config_clock_delay(phydev); > > if (of_property_read_bool(np, "enet-phy-lane-swap")) { > /* Lane Swap - Undocumented register...magic! */ > @@ -442,6 +442,19 @@ static int bcm5481_config_aneg(struct phy_device *phydev) > return ret; > } > > +static int bcm54616s_config_aneg(struct phy_device *phydev) > +{ > + int ret; > + > + /* Aneg firsly. */ > + ret = genphy_config_aneg(phydev); > + > + /* Then we can set up the delay. */ > + bcm54xx_config_clock_delay(phydev); > + > + return ret; > +} > + > static int brcm_phy_setbits(struct phy_device *phydev, int reg, int set) > { > int val; > @@ -636,6 +649,7 @@ static struct phy_driver broadcom_drivers[] = { > .features = PHY_GBIT_FEATURES, > .flags = PHY_HAS_INTERRUPT, > .config_init = bcm54xx_config_init, > + .config_aneg = bcm54616s_config_aneg, > .ack_interrupt = bcm_phy_ack_intr, > .config_intr = bcm_phy_config_intr, > }, { > -- Florian