netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Ardelean, Alexandru" <alexandru.Ardelean@analog.com>
To: "andrew@lunn.ch" <andrew@lunn.ch>
Cc: "davem@davemloft.net" <davem@davemloft.net>,
	"hkallweit1@gmail.com" <hkallweit1@gmail.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"f.fainelli@gmail.com" <f.fainelli@gmail.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>
Subject: Re: [PATCH v4 13/14] net: phy: adin: add ethtool get_stats support
Date: Wed, 14 Aug 2019 09:08:00 +0000	[thread overview]
Message-ID: <2175a95d818172153e839f6bcf6d3d61a3e23dd8.camel@analog.com> (raw)
In-Reply-To: <c3fdb21c40900dae0e52b02b98fe27924a76c256.camel@analog.com>

On Tue, 2019-08-13 at 08:48 +0300, Alexandru Ardelean wrote:
> On Mon, 2019-08-12 at 16:33 +0200, Andrew Lunn wrote:
> > [External]
> > 
> > > +static int adin_read_mmd_stat_regs(struct phy_device *phydev,
> > > +				   struct adin_hw_stat *stat,
> > > +				   u32 *val)
> > > +{
> > > +	int ret;
> > > +
> > > +	ret = phy_read_mmd(phydev, MDIO_MMD_VEND1, stat->reg1);
> > > +	if (ret < 0)
> > > +		return ret;
> > > +
> > > +	*val = (ret & 0xffff);
> > > +
> > > +	if (stat->reg2 == 0)
> > > +		return 0;
> > > +
> > > +	ret = phy_read_mmd(phydev, MDIO_MMD_VEND1, stat->reg2);
> > > +	if (ret < 0)
> > > +		return ret;
> > > +
> > > +	*val <<= 16;
> > > +	*val |= (ret & 0xffff);
> > > +
> > > +	return 0;
> > > +}
> > 
> > It still looks like you have not dealt with overflow from the LSB into
> > the MSB between the two reads.
> 
> Apologies for forgetting to address this.
> I did not intentionally leave it out; this item got lost after V1 [which had the most remarks].
> Changelog V1 -> V2 was quite bulky, and I did not look at V1 remarks after I finished V2.
> 
> Thanks for snippet.

So, I have to apologize again here.
I guess I was an idiot/n00b about this.

The PHY stats do support snapshot, and I sync-ed with someone from the chip-team to confirm.

Also, from the datasheet[1] (page 29 - FRAME GENERATOR AND CHECKER - 5th paragraph):
--------------------------------------------------------------
The frame checker counts the number of CRC errors and these 
are reported in the receive error counter register (RxErrCnt 
register,  address 0x0014). To ensure synchronization between 
the frame checker error counter and frame checker frame counters,
all of the counters are latched once the receive error counter
register is read. Hence when using the frame checker, the
receive error counter should be read first and then all the other
frame counters and error counters should be read. A latched copy
of the receive frame counter register is available in the
FcFrmCntH and FcFrmCntL registers (register addresses 0x1E.0x940A
and 0x1E.0x940B).
-------------------------------------------------------------

Then in the description of these regs, it mentions (repeteadly):
-------------------------------------------------------------
This register is a latched copy of bits 31:16 of the 32-bit
receive frame counter register. When the receive error counter
(RxErrCnt register address 0x0014) is read, the receive
frame
counter register is latched. A copy of the receive frame counter
register is latched when RxErrCnt is read so that
the error count
and receive frame count are synchronized
-------------------------------------------------------------

I'll re-spin this with the rename of the strings, and maybe do a minor polish of the code.

Thanks & sorry for the noise/trouble
Alex

[1] https://www.analog.com/media/en/technical-documentation/data-sheets/ADIN1300.pdf


> 
> > 	do {
> > 		hi1 = phy_read_mmd(phydev, MDIO_MMD_VEND1, stat->reg2);
> > 		if (hi1 < 0)
> > 			return hi1;
> > 		
> > 		low = phy_read_mmd(phydev, MDIO_MMD_VEND1, stat->reg1);
> > 		if (low < 0)
> > 			return low;
> > 
> > 		hi2 = phy_read_mmd(phydev, MDIO_MMD_VEND1, stat->reg2);
> > 		if (hi2 < 0)
> > 			return hi1;
> > 	} while (hi1 != hi2)
> > 
> > 	return low | (hi << 16);
> > 
> > 	Andrew

  reply	other threads:[~2019-08-14  9:08 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-12 11:23 [PATCH v4 00/14] net: phy: adin: add support for Analog Devices PHYs Alexandru Ardelean
2019-08-12 11:23 ` [PATCH v4 01/14] " Alexandru Ardelean
2019-08-14 17:47   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 02/14] net: phy: adin: hook genphy_{suspend,resume} into the driver Alexandru Ardelean
2019-08-14 17:47   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 03/14] net: phy: adin: add support for interrupts Alexandru Ardelean
2019-08-14 17:48   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 04/14] net: phy: adin: add {write,read}_mmd hooks Alexandru Ardelean
2019-08-12 14:06   ` Andrew Lunn
2019-08-14 17:49   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 05/14] net: phy: adin: configure RGMII/RMII/MII modes on config Alexandru Ardelean
2019-08-14 17:50   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 06/14] net: phy: adin: make RGMII internal delays configurable Alexandru Ardelean
2019-08-14 17:52   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 07/14] net: phy: adin: make RMII fifo depth configurable Alexandru Ardelean
2019-08-14 17:53   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 08/14] net: phy: adin: add support MDI/MDIX/Auto-MDI selection Alexandru Ardelean
2019-08-14 17:54   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 09/14] net: phy: adin: add EEE translation layer from Clause 45 to Clause 22 Alexandru Ardelean
2019-08-12 14:08   ` Andrew Lunn
2019-08-14 17:55   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 10/14] net: phy: adin: implement PHY subsystem software reset Alexandru Ardelean
2019-08-12 14:19   ` Andrew Lunn
2019-08-13  5:42     ` Ardelean, Alexandru
2019-08-12 11:23 ` [PATCH v4 11/14] net: phy: adin: implement Energy Detect Powerdown mode Alexandru Ardelean
2019-08-14 17:57   ` Florian Fainelli
2019-08-16  6:09     ` Ardelean, Alexandru
2019-08-12 11:23 ` [PATCH v4 12/14] net: phy: adin: implement downshift configuration via phy-tunable Alexandru Ardelean
2019-08-12 14:21   ` Andrew Lunn
2019-08-14 17:58   ` Florian Fainelli
2019-08-12 11:23 ` [PATCH v4 13/14] net: phy: adin: add ethtool get_stats support Alexandru Ardelean
2019-08-12 14:26   ` Andrew Lunn
2019-08-13  6:07     ` Ardelean, Alexandru
2019-08-12 14:33   ` Andrew Lunn
2019-08-13  5:48     ` Ardelean, Alexandru
2019-08-14  9:08       ` Ardelean, Alexandru [this message]
2019-08-14 14:04         ` Andrew Lunn
2019-08-12 11:23 ` [PATCH v4 14/14] dt-bindings: net: add bindings for ADIN PHY driver Alexandru Ardelean
2019-08-12 14:34   ` Andrew Lunn
2019-08-12 19:02   ` Rob Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2175a95d818172153e839f6bcf6d3d61a3e23dd8.camel@analog.com \
    --to=alexandru.ardelean@analog.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=f.fainelli@gmail.com \
    --cc=hkallweit1@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=netdev@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).