Skip to content

Commit

Permalink
net: phy: marvell: Configure TDR pulse based on measurement length
Browse files Browse the repository at this point in the history
When performing a TDR measurement for a short distance, the pulse
width should be low, to help differentiate between the outgoing pulse
and any reflection. For longer distances, the pulse should be wider,
to help with attenuation.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Andrew Lunn authored and David S. Miller committed May 27, 2020
1 parent a618e86 commit db8668a
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions drivers/net/phy/marvell.c
Original file line number Diff line number Diff line change
@@ -214,6 +214,11 @@
#define MII_VCT5_TX_PULSE_CTRL_MAX_AMP BIT(7)
#define MII_VCT5_TX_PULSE_CTRL_GT_140m_46_86mV (0x6 << 0)

/* For TDR measurements less than 11 meters, a short pulse should be
* used.
*/
#define TDR_SHORT_CABLE_LENGTH 11

#define MII_VCT7_PAIR_0_DISTANCE 0x10
#define MII_VCT7_PAIR_1_DISTANCE 0x11
#define MII_VCT7_PAIR_2_DISTANCE 0x12
@@ -1835,14 +1840,19 @@ static int marvell_vct5_amplitude_graph(struct phy_device *phydev)
{
struct marvell_priv *priv = phydev->priv;
int distance;
u16 width;
int page;
int err;
u16 reg;

if (priv->first <= TDR_SHORT_CABLE_LENGTH)
width = MII_VCT5_TX_PULSE_CTRL_PULSE_WIDTH_32nS;
else
width = MII_VCT5_TX_PULSE_CTRL_PULSE_WIDTH_128nS;

reg = MII_VCT5_TX_PULSE_CTRL_GT_140m_46_86mV |
MII_VCT5_TX_PULSE_CTRL_DONT_WAIT_LINK_DOWN |
MII_VCT5_TX_PULSE_CTRL_MAX_AMP |
MII_VCT5_TX_PULSE_CTRL_PULSE_WIDTH_32nS;
MII_VCT5_TX_PULSE_CTRL_MAX_AMP | width;

err = phy_write_paged(phydev, MII_MARVELL_VCT5_PAGE,
MII_VCT5_TX_PULSE_CTRL, reg);
@@ -1866,6 +1876,17 @@ static int marvell_vct5_amplitude_graph(struct phy_device *phydev)
priv->pair);
if (err)
goto restore_page;

if (distance > TDR_SHORT_CABLE_LENGTH &&
width == MII_VCT5_TX_PULSE_CTRL_PULSE_WIDTH_32nS) {
width = MII_VCT5_TX_PULSE_CTRL_PULSE_WIDTH_128nS;
reg = MII_VCT5_TX_PULSE_CTRL_GT_140m_46_86mV |
MII_VCT5_TX_PULSE_CTRL_DONT_WAIT_LINK_DOWN |
MII_VCT5_TX_PULSE_CTRL_MAX_AMP | width;
err = __phy_write(phydev, MII_VCT5_TX_PULSE_CTRL, reg);
if (err)
goto restore_page;
}
}

restore_page:

0 comments on commit db8668a

Please sign in to comment.