Messages in this thread | | | Subject | Re: [PATCH net] net: phy: Allow BCM54616S PHY to setup internal TX/RX clock delay | From | Florian Fainelli <> | Date | Mon, 5 Nov 2018 14:40:27 -0800 |
| |
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 <taoren@fb.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> --- > 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
| |