diff mbox series

net: phy: adin: add signal mean square error registers to phy-stats

Message ID 20201203080719.30040-1-alexandru.ardelean@analog.com
State Not Applicable
Headers show
Series net: phy: adin: add signal mean square error registers to phy-stats | expand

Commit Message

Alexandru Ardelean Dec. 3, 2020, 8:07 a.m. UTC
When the link is up on the ADIN1300/ADIN1200, the signal quality on each
pair is indicated in the mean square error register for each pair (MSE_A,
MSE_B, MSE_C, and MSE_D registers, Address 0x8402 to Address 0x8405,
Bits[7:0]).

These values can be useful for some industrial applications.

This change implements support for these registers using the PHY
statistics mechanism.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/net/phy/adin.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Andrew Lunn Dec. 3, 2020, 2:16 p.m. UTC | #1
On Thu, Dec 03, 2020 at 10:07:19AM +0200, Alexandru Ardelean wrote:
> When the link is up on the ADIN1300/ADIN1200, the signal quality on each
> pair is indicated in the mean square error register for each pair (MSE_A,
> MSE_B, MSE_C, and MSE_D registers, Address 0x8402 to Address 0x8405,
> Bits[7:0]).
> 
> These values can be useful for some industrial applications.
> 
> This change implements support for these registers using the PHY
> statistics mechanism.

There was a discussion about values like these before. If i remember
correctly, it was for a BroadReach PHY. I thought we decided to add
them to the link state information?

Ah, found it.

commit 68ff5e14759e7ac1aac7bc75ac5b935e390fa2b3
Author: Oleksij Rempel <linux@rempel-privat.de>
Date:   Wed May 20 08:29:15 2020 +0200

    net: phy: tja11xx: add SQI support

and

ommit 8066021915924f58ed338bf38208215f5a7355f6
Author: Oleksij Rempel <linux@rempel-privat.de>
Date:   Wed May 20 08:29:14 2020 +0200

    ethtool: provide UAPI for PHY Signal Quality Index (SQI)

Can you convert your MSE into SQI?

    Andrew
Alexandru Ardelean Dec. 3, 2020, 2:33 p.m. UTC | #2
> -----Original Message-----
> From: Andrew Lunn <andrew@lunn.ch>
> Sent: Thursday, December 3, 2020 4:16 PM
> To: Ardelean, Alexandru <alexandru.Ardelean@analog.com>
> Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org;
> hkallweit1@gmail.com; linux@armlinux.org.uk; davem@davemloft.net;
> kuba@kernel.org; Redmond, Catherine <Catherine.Redmond@analog.com>;
> Murray, Brian <Brian.Murray@analog.com>; Baylov, Danail
> <Danail.Baylov@analog.com>; OBrien, Maurice
> <Maurice.OBrien@analog.com>
> Subject: Re: [PATCH] net: phy: adin: add signal mean square error registers to
> phy-stats
> 
> On Thu, Dec 03, 2020 at 10:07:19AM +0200, Alexandru Ardelean wrote:
> > When the link is up on the ADIN1300/ADIN1200, the signal quality on
> > each pair is indicated in the mean square error register for each pair
> > (MSE_A, MSE_B, MSE_C, and MSE_D registers, Address 0x8402 to Address
> > 0x8405, Bits[7:0]).
> >
> > These values can be useful for some industrial applications.
> >
> > This change implements support for these registers using the PHY
> > statistics mechanism.
> 
> There was a discussion about values like these before. If i remember correctly, it
> was for a BroadReach PHY. I thought we decided to add them to the link state
> information?
> 

Oh, this is new.
I've had this MSE patch lying around in a branch since last year sometime.
Wasn't sure whether to put it in the phy-stats.

> Ah, found it.
> 
> commit 68ff5e14759e7ac1aac7bc75ac5b935e390fa2b3
> Author: Oleksij Rempel <linux@rempel-privat.de>
> Date:   Wed May 20 08:29:15 2020 +0200
> 
>     net: phy: tja11xx: add SQI support
> 
> and
> 
> ommit 8066021915924f58ed338bf38208215f5a7355f6
> Author: Oleksij Rempel <linux@rempel-privat.de>
> Date:   Wed May 20 08:29:14 2020 +0200
> 
>     ethtool: provide UAPI for PHY Signal Quality Index (SQI)
> 
> Can you convert your MSE into SQI?

I'll take a look and try to understand the SQI spec.
It's neat that there's a common place where to put this.

Thanks
Alex

> 
>     Andrew
diff mbox series

Patch

diff --git a/drivers/net/phy/adin.c b/drivers/net/phy/adin.c
index 55a0b91816e2..e4441bba98c3 100644
--- a/drivers/net/phy/adin.c
+++ b/drivers/net/phy/adin.c
@@ -184,6 +184,7 @@  struct adin_hw_stat {
 	const char *string;
 	u16 reg1;
 	u16 reg2;
+	bool do_not_accumulate;
 };
 
 static const struct adin_hw_stat adin_hw_stats[] = {
@@ -197,6 +198,10 @@  static const struct adin_hw_stat adin_hw_stats[] = {
 	{ "odd_preamble_packet_count",		0x9412 },
 	{ "dribble_bits_frames_count",		0x9413 },
 	{ "false_carrier_events_count",		0x9414 },
+	{ "signal_mean_square_error_a",		0x8402,	0,	true },
+	{ "signal_mean_square_error_b",		0x8403,	0,	true },
+	{ "signal_mean_square_error_c",		0x8404,	0,	true },
+	{ "signal_mean_square_error_d",		0x8405,	0,	true },
 };
 
 /**
@@ -757,7 +762,10 @@  static u64 adin_get_stat(struct phy_device *phydev, int i)
 		val = (ret & 0xffff);
 	}
 
-	priv->stats[i] += val;
+	if (stat->do_not_accumulate)
+		priv->stats[i] = val;
+	else
+		priv->stats[i] += val;
 
 	return priv->stats[i];
 }