Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next] net: phy: smsc: Implement PHY statistics
@ 2017-06-02 21:24 Andrew Lunn
  2017-06-02 23:35 ` Woojung.Huh
  2017-06-02 23:44 ` Florian Fainelli
  0 siblings, 2 replies; 5+ messages in thread
From: Andrew Lunn @ 2017-06-02 21:24 UTC (permalink / raw)
  To: David Miller
  Cc: Vivien Didelot, Chris Healy, Nikita Yushchenko, netdev,
	Andrew Lunn

Most of the PHYs supported by the SMSC driver have a counter of symbol
errors. This is 16 bit wide and wraps around when it reaches its
maximum value.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
 drivers/net/phy/smsc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
index 67c9f2b26c8e..d78b0cd3a435 100644
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -25,6 +25,16 @@
 #include <linux/netdevice.h>
 #include <linux/smscphy.h>
 
+struct smsc_hw_stat {
+	const char *string;
+	u8 reg;
+	u8 bits;
+};
+
+static struct smsc_hw_stat smsc_hw_stats[] = {
+	{ "phy_symbol_errors", 26, 16},
+};
+
 struct smsc_phy_priv {
 	bool energy_enable;
 };
@@ -143,6 +153,48 @@ static int lan87xx_read_status(struct phy_device *phydev)
 	return err;
 }
 
+static int smsc_get_sset_count(struct phy_device *phydev)
+{
+	return ARRAY_SIZE(smsc_hw_stats);
+}
+
+static void smsc_get_strings(struct phy_device *phydev, u8 *data)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(smsc_hw_stats); i++) {
+		memcpy(data + i * ETH_GSTRING_LEN,
+		       smsc_hw_stats[i].string, ETH_GSTRING_LEN);
+	}
+}
+
+#ifndef UINT64_MAX
+#define UINT64_MAX              (u64)(~((u64)0))
+#endif
+static u64 smsc_get_stat(struct phy_device *phydev, int i)
+{
+	struct smsc_hw_stat stat = smsc_hw_stats[i];
+	int val;
+	u64 ret;
+
+	val = phy_read(phydev, stat.reg);
+	if (val < 0)
+		ret = UINT64_MAX;
+	else
+		ret = val;
+
+	return ret;
+}
+
+static void smsc_get_stats(struct phy_device *phydev,
+			   struct ethtool_stats *stats, u64 *data)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(smsc_hw_stats); i++)
+		data[i] = smsc_get_stat(phydev, i);
+}
+
 static int smsc_phy_probe(struct phy_device *phydev)
 {
 	struct device *dev = &phydev->mdio.dev;
@@ -206,6 +258,11 @@ static struct phy_driver smsc_phy_driver[] = {
 	.ack_interrupt	= smsc_phy_ack_interrupt,
 	.config_intr	= smsc_phy_config_intr,
 
+	/* Statistics */
+	.get_sset_count = smsc_get_sset_count,
+	.get_strings = smsc_get_strings,
+	.get_stats = smsc_get_stats,
+
 	.suspend	= genphy_suspend,
 	.resume		= genphy_resume,
 }, {
@@ -228,6 +285,11 @@ static struct phy_driver smsc_phy_driver[] = {
 	.ack_interrupt	= smsc_phy_ack_interrupt,
 	.config_intr	= smsc_phy_config_intr,
 
+	/* Statistics */
+	.get_sset_count = smsc_get_sset_count,
+	.get_strings = smsc_get_strings,
+	.get_stats = smsc_get_stats,
+
 	.suspend	= genphy_suspend,
 	.resume		= genphy_resume,
 }, {
@@ -271,6 +333,11 @@ static struct phy_driver smsc_phy_driver[] = {
 	.ack_interrupt	= smsc_phy_ack_interrupt,
 	.config_intr	= smsc_phy_config_intr,
 
+	/* Statistics */
+	.get_sset_count = smsc_get_sset_count,
+	.get_strings = smsc_get_strings,
+	.get_stats = smsc_get_stats,
+
 	.suspend	= genphy_suspend,
 	.resume		= genphy_resume,
 }, {
@@ -293,6 +360,11 @@ static struct phy_driver smsc_phy_driver[] = {
 	.ack_interrupt	= smsc_phy_ack_interrupt,
 	.config_intr	= smsc_phy_config_intr,
 
+	/* Statistics */
+	.get_sset_count = smsc_get_sset_count,
+	.get_strings = smsc_get_strings,
+	.get_stats = smsc_get_stats,
+
 	.suspend	= genphy_suspend,
 	.resume		= genphy_resume,
 } };
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH net-next] net: phy: smsc: Implement PHY statistics
  2017-06-02 21:24 [PATCH net-next] net: phy: smsc: Implement PHY statistics Andrew Lunn
@ 2017-06-02 23:35 ` Woojung.Huh
  2017-06-03  0:52   ` Andrew Lunn
  2017-06-02 23:44 ` Florian Fainelli
  1 sibling, 1 reply; 5+ messages in thread
From: Woojung.Huh @ 2017-06-02 23:35 UTC (permalink / raw)
  To: andrew, davem; +Cc: vivien.didelot, cphealy, nikita.yoush, netdev

Andrew,

>  static int smsc_phy_probe(struct phy_device *phydev)
>  {
>  	struct device *dev = &phydev->mdio.dev;
> @@ -206,6 +258,11 @@ static struct phy_driver smsc_phy_driver[] = {
>  	.ack_interrupt	= smsc_phy_ack_interrupt,
>  	.config_intr	= smsc_phy_config_intr,
> 
> +	/* Statistics */
> +	.get_sset_count = smsc_get_sset_count,
> +	.get_strings = smsc_get_strings,
> +	.get_stats = smsc_get_stats,
> +
...
> 
> +	/* Statistics */
> +	.get_sset_count = smsc_get_sset_count,
> +	.get_strings = smsc_get_strings,
> +	.get_stats = smsc_get_stats,
> +
...
> +	/* Statistics */
> +	.get_sset_count = smsc_get_sset_count,
> +	.get_strings = smsc_get_strings,
> +	.get_stats = smsc_get_stats,
> +
...
> +	/* Statistics */
> +	.get_sset_count = smsc_get_sset_count,
> +	.get_strings = smsc_get_strings,
> +	.get_stats = smsc_get_stats,
> +
Just cosmetic thing.
How about aligning with other members in structure like
> +	.get_sset_count = smsc_get_sset_count,
> +	.get_strings     = smsc_get_strings,
> +	.get_stats        = smsc_get_stats,

Reviewed-By: Woojung Huh <Woojung.Huh@microchip.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next] net: phy: smsc: Implement PHY statistics
  2017-06-02 21:24 [PATCH net-next] net: phy: smsc: Implement PHY statistics Andrew Lunn
  2017-06-02 23:35 ` Woojung.Huh
@ 2017-06-02 23:44 ` Florian Fainelli
  1 sibling, 0 replies; 5+ messages in thread
From: Florian Fainelli @ 2017-06-02 23:44 UTC (permalink / raw)
  To: Andrew Lunn, David Miller
  Cc: Vivien Didelot, Chris Healy, Nikita Yushchenko, netdev

On 06/02/2017 02:24 PM, Andrew Lunn wrote:
> Most of the PHYs supported by the SMSC driver have a counter of symbol
> errors. This is 16 bit wide and wraps around when it reaches its
> maximum value.
> 
> Signed-off-by: Andrew Lunn <andrew@lunn.ch>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next] net: phy: smsc: Implement PHY statistics
  2017-06-02 23:35 ` Woojung.Huh
@ 2017-06-03  0:52   ` Andrew Lunn
  2017-06-03  2:27     ` Woojung.Huh
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Lunn @ 2017-06-03  0:52 UTC (permalink / raw)
  To: Woojung.Huh; +Cc: davem, vivien.didelot, cphealy, nikita.yoush, netdev

Hi Woojung

> Just cosmetic thing.
> How about aligning with other members in structure like

Yes, i can do that. v2 tomorrow sometime.

> > +	.get_sset_count = smsc_get_sset_count,
> > +	.get_strings     = smsc_get_strings,
> > +	.get_stats        = smsc_get_stats,
> 
> Reviewed-By: Woojung Huh <Woojung.Huh@microchip.com>

Thanks.

Can you confirm the LAN911x Internal PHY don't have this. The register
is not listed in the switch datasheet.

Thanks
	Andrew

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH net-next] net: phy: smsc: Implement PHY statistics
  2017-06-03  0:52   ` Andrew Lunn
@ 2017-06-03  2:27     ` Woojung.Huh
  0 siblings, 0 replies; 5+ messages in thread
From: Woojung.Huh @ 2017-06-03  2:27 UTC (permalink / raw)
  To: andrew; +Cc: davem, vivien.didelot, cphealy, nikita.yoush, netdev

>> Just cosmetic thing.
>> How about aligning with other members in structure like
>
>Yes, i can do that. v2 tomorrow sometime.
Thanks.

>
>Can you confirm the LAN911x Internal PHY don't have this. The register
>is not listed in the switch datasheet.
>
This register is NOT in LAN911x internal phy.
http://ww1.microchip.com/downloads/en/DeviceDoc/00002266A.pdf

- Woojung

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-06-03  2:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-02 21:24 [PATCH net-next] net: phy: smsc: Implement PHY statistics Andrew Lunn
2017-06-02 23:35 ` Woojung.Huh
2017-06-03  0:52   ` Andrew Lunn
2017-06-03  2:27     ` Woojung.Huh
2017-06-02 23:44 ` Florian Fainelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox