Received: by 2002:a05:7412:f584:b0:e2:908c:2ebd with SMTP id eh4csp1941267rdb; Tue, 5 Sep 2023 09:22:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGdMYaPGO77k7ZR67DTm+eq/F3D52hvewq3uU6I4fxkftBnl/t4BRqAFW4kRzdI83uj6ifm X-Received: by 2002:a05:6402:1a36:b0:525:7da7:af10 with SMTP id be22-20020a0564021a3600b005257da7af10mr293556edb.23.1693930828909; Tue, 05 Sep 2023 09:20:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693930828; cv=none; d=google.com; s=arc-20160816; b=C0Qig8B1t74FUxO3JO72yJKZSmOwh8GKwIDO/nFhu6QsASRRhqtZk/npKmvua1m5J2 8c/i1/T0uFGYppSOx0KrrM4ivSaGid/wG4p6UHevQIpbZGPjn0r+ZhNu70a8IoQVndnW cJeVnpF2ViOuo4IJNU+QbqR5u9zR0QA6MWKMRknL6kFb2WuiqqG7VFjR95auFS9rQALl lfZi1R/UEbB68urXqsRiQfAeh0Gpm5V8o3FJIdxOgQ5/1GY79I8fm7DqwRGm0nTVsgTq 70sSumacTnYB4/VFqwvI5BBpwl+Yp37Ko0AA/eNu38vsQXEny/y4bYTBOyQLcyr1cbY0 v1Og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=+pi957ZCPcj2zvwswcYdeiaBodilcj9qAKYPtJudNDU=; fh=KuuK+vpiiM4ow2DiKwIB1RKaOvia2Wfry7mgOu02E6k=; b=uxJDeUtLWwKCMmtQq/LHoqxrQ7BMSfHkvaY4w7r6quj1bPvJKgemwhtDb2DGCHkkZI ScQt8Lb24c608O7QYwROjRO7ou27CLkCz4afl/ZlBqevAPkkClbM0pAQq+i1RALYoUAx EAnbvyUO2pzxZEQapsgzyxvwGvr5JlF4om/BtDdW0oY5k9vdwKqXSBnhd42r1QqRRz4R 5fBElja6N1qy5m2rCD2cl+5vD1Y0ov54PvuxEWWs1OKWwyONcS1xxggxtGIeozz418m8 C2CH5xdfvHVP42pVPLqWeHJCEgCwDpFDT8+oFMbc7G65+RJYatdlbz9fYQu1jdaGZ/Qw O/vA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i19-20020a056402055300b00523384b2e83si8051639edx.56.2023.09.05.09.20.20; Tue, 05 Sep 2023 09:20:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350954AbjIDPXT (ORCPT + 20 others); Mon, 4 Sep 2023 11:23:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58188 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244726AbjIDPXS (ORCPT ); Mon, 4 Sep 2023 11:23:18 -0400 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [IPv6:2a0a:edc0:2:b01:1d::104]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6406610F2 for ; Mon, 4 Sep 2023 08:23:11 -0700 (PDT) Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qdBPB-00058K-P3; Mon, 04 Sep 2023 17:22:21 +0200 Received: from pengutronix.de (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: mkl-all@blackshift.org) by smtp.blackshift.org (Postfix) with ESMTPSA id 97AFF218726; Mon, 4 Sep 2023 15:22:20 +0000 (UTC) Date: Mon, 4 Sep 2023 17:22:20 +0200 From: Marc Kleine-Budde To: Srinivas Goud Cc: wg@grandegger.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, p.zabel@pengutronix.de, git@amd.com, michal.simek@amd.com, linux-can@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, appana.durga.rao@xilinx.com, naga.sureshkumar.relli@xilinx.com Subject: Re: [PATCH v4 3/3] can: xilinx_can: Add ethtool stats interface for ECC errors Message-ID: <20230904-unbiased-putt-a1a2919b02c7-mkl@pengutronix.de> References: <1693557645-2728466-1-git-send-email-srinivas.goud@amd.com> <1693557645-2728466-4-git-send-email-srinivas.goud@amd.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="f5dk3iq2kvsfzpmv" Content-Disposition: inline In-Reply-To: <1693557645-2728466-4-git-send-email-srinivas.goud@amd.com> X-SA-Exim-Connect-IP: 2a0a:edc0:0:b01:1d::7b X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --f5dk3iq2kvsfzpmv Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 01.09.2023 14:10:45, Srinivas Goud wrote: > Add ethtool stats interface for reading FIFO 1bit/2bit > ECC errors information. >=20 > Signed-off-by: Srinivas Goud > --- > Changes in v4: > None >=20 > Changes in v3: > None >=20 > Changes in v2: > Add ethtool stats interface >=20 > drivers/net/can/xilinx_can.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) >=20 > diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c > index 798b32b..50e0c9d 100644 > --- a/drivers/net/can/xilinx_can.c > +++ b/drivers/net/can/xilinx_can.c > @@ -219,6 +219,7 @@ struct xcan_devtype_data { > * @transceiver: Optional pointer to associated CAN transceiver > * @rstc: Pointer to reset control > * @ecc_enable: ECC enable flag > + * @stats_lock: Lock for synchronizing hardware stats To be precise: The lock is about the access of the 64 bit variables not about the hardware access: "Lock for accessing the "ecc_*bit_*fifo_cnt" stats" > * @ecc_2bit_rxfifo_cnt: RXFIFO 2bit ECC count > * @ecc_1bit_rxfifo_cnt: RXFIFO 1bit ECC count > * @ecc_2bit_txolfifo_cnt: TXOLFIFO 2bit ECC count > @@ -245,6 +246,7 @@ struct xcan_priv { > struct phy *transceiver; > struct reset_control *rstc; > bool ecc_enable; > + spinlock_t stats_lock; /* Lock for synchronizing hardware stats */ > u64 ecc_2bit_rxfifo_cnt; > u64 ecc_1bit_rxfifo_cnt; > u64 ecc_2bit_txolfifo_cnt; > @@ -1164,6 +1166,9 @@ static void xcan_err_interrupt(struct net_device *n= dev, u32 isr) > =20 > if (priv->ecc_enable) { > u32 reg_ecc; > + unsigned long flags; nitpick: move the flags before the reg_ecc. > + > + spin_lock_irqsave(&priv->stats_lock, flags); > =20 > reg_ecc =3D priv->read_reg(priv, XCAN_RXFIFO_ECC_OFFSET); > if (isr & XCAN_IXR_E2BERX_MASK) { > @@ -1212,6 +1217,8 @@ static void xcan_err_interrupt(struct net_device *n= dev, u32 isr) > */ > priv->write_reg(priv, XCAN_ECC_CFG_OFFSET, XCAN_ECC_CFG_REECRX_MASK | > XCAN_ECC_CFG_REECTXOL_MASK | XCAN_ECC_CFG_REECTXTL_MASK); > + > + spin_unlock_irqrestore(&priv->stats_lock, flags); > } > =20 > if (cf.can_id) { > @@ -1639,6 +1646,23 @@ static int xcan_get_auto_tdcv(const struct net_dev= ice *ndev, u32 *tdcv) > return 0; > } > =20 > +static void ethtool_get_ethtool_stats(struct net_device *ndev, > + struct ethtool_stats *stats, u64 *data) > +{ > + struct xcan_priv *priv =3D netdev_priv(ndev); > + unsigned long flags; > + int i =3D 0; > + > + spin_lock_irqsave(&priv->stats_lock, flags); > + data[i++] =3D priv->ecc_2bit_rxfifo_cnt; > + data[i++] =3D priv->ecc_1bit_rxfifo_cnt; > + data[i++] =3D priv->ecc_2bit_txolfifo_cnt; > + data[i++] =3D priv->ecc_1bit_txolfifo_cnt; > + data[i++] =3D priv->ecc_2bit_txtlfifo_cnt; > + data[i++] =3D priv->ecc_1bit_txtlfifo_cnt; > + spin_unlock_irqrestore(&priv->stats_lock, flags); > +} > + > static const struct net_device_ops xcan_netdev_ops =3D { > .ndo_open =3D xcan_open, > .ndo_stop =3D xcan_close, > @@ -1648,6 +1672,7 @@ static const struct net_device_ops xcan_netdev_ops = =3D { > =20 > static const struct ethtool_ops xcan_ethtool_ops =3D { > .get_ts_info =3D ethtool_op_get_ts_info, > + .get_ethtool_stats =3D ethtool_get_ethtool_stats, You also should implement .get_strings and .get_sset_count. Have you tested your patch with "ethtool -S can0"? > }; > =20 > /** > --=20 > 2.1.1 >=20 >=20 regards, Marc --=20 Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung N=C3=BCrnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 | --f5dk3iq2kvsfzpmv Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEDs2BvajyNKlf9TJQvlAcSiqKBOgFAmT19ikACgkQvlAcSiqK BOjKKwf/XqBeS89ieZVoVrZnmkm/eKWi/h6aE4Oueilc6bRGc0NImrOHvmfFNfad ZZ/uNxK8Na5EafNjeI/Blh4H1Pk1KsxuK3wrb8YmrrajrZZwbIhQF+/wRMHW+ops CY34A+HZN/dsMseSLORDKTrvexxI0iKqbdLfnBwvVh0gAfEIxsUPzqWp+/Qz9DeW b2CHj8te4m7Ovk/KMjlJuipZWwkgjSL6d5D++Z8uTjQWHm0yNvCeCA6CpRTDdkwY Ckbb6qDi1I5h37X9JCtOOOgl1TQBaDZeGl6eBGuJDtIUNawL5naLDcPe4BoKyul1 Xu4th/hAOGXGYrhclCMIjjT4rUAwfg== =FRQF -----END PGP SIGNATURE----- --f5dk3iq2kvsfzpmv--