[PATCH v2 05/19] EDAC/synopsys: Fix reading errors count before ECC status

Serge Semin posted 19 patches 3 years, 6 months ago
There is a newer version of this series
[PATCH v2 05/19] EDAC/synopsys: Fix reading errors count before ECC status
Posted by Serge Semin 3 years, 6 months ago
Aside with fixing the errors count CSR usage the commit e2932d1f6f05
("EDAC/synopsys: Read the error count from the correct register") all of
the sudden has also changed the order of the errors status check
procedure. So now the errors handler method first reads the number of CE
and UE and only then makes sure that any of these errors have actually
happened. It doesn't make much sense. Let's fix that by getting back the
procedures order: first check the ECC status, then read the number of
errors.

Fixes: e2932d1f6f05 ("EDAC/synopsys: Read the error count from the correct register")
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
---
 drivers/edac/synopsys_edac.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/edac/synopsys_edac.c b/drivers/edac/synopsys_edac.c
index da1d90a87778..558d3b3e6864 100644
--- a/drivers/edac/synopsys_edac.c
+++ b/drivers/edac/synopsys_edac.c
@@ -423,18 +423,18 @@ static int zynqmp_get_error_info(struct synps_edac_priv *priv)
 	base = priv->baseaddr;
 	p = &priv->stat;
 
-	regval = readl(base + ECC_ERRCNT_OFST);
-	p->ce_cnt = regval & ECC_ERRCNT_CECNT_MASK;
-	p->ue_cnt = (regval & ECC_ERRCNT_UECNT_MASK) >> ECC_ERRCNT_UECNT_SHIFT;
-	if (!p->ce_cnt)
-		goto ue_err;
-
 	regval = readl(base + ECC_STAT_OFST);
 	if (!regval)
 		return 1;
 
 	p->ceinfo.bitpos = (regval & ECC_STAT_BITNUM_MASK);
 
+	regval = readl(base + ECC_ERRCNT_OFST);
+	p->ce_cnt = regval & ECC_ERRCNT_CECNT_MASK;
+	p->ue_cnt = (regval & ECC_ERRCNT_UECNT_MASK) >> ECC_ERRCNT_UECNT_SHIFT;
+	if (!p->ce_cnt)
+		goto ue_err;
+
 	regval = readl(base + ECC_CEADDR0_OFST);
 	p->ceinfo.row = (regval & ECC_CEADDR0_RW_MASK);
 	regval = readl(base + ECC_CEADDR1_OFST);
-- 
2.37.2
RE: [PATCH v2 05/19] EDAC/synopsys: Fix reading errors count before ECC status
Posted by Datta, Shubhrajyoti 3 years, 6 months ago
[AMD Official Use Only - General]



> -----Original Message-----
> From: Serge Semin <Sergey.Semin@baikalelectronics.ru>
> Sent: Sunday, September 11, 2022 1:12 AM
> To: Rob Herring <robh+dt@kernel.org>; Krzysztof Kozlowski
> <krzysztof.kozlowski+dt@linaro.org>; Michal Simek
> <michal.simek@xilinx.com>; Borislav Petkov <bp@alien8.de>; Mauro
> Carvalho Chehab <mchehab@kernel.org>; Tony Luck
> <tony.luck@intel.com>; James Morse <james.morse@arm.com>; Robert
> Richter <rric@kernel.org>; Shubhrajyoti Datta
> <shubhrajyoti.datta@xilinx.com>
> Cc: Serge Semin <Sergey.Semin@baikalelectronics.ru>; Serge Semin
> <fancer.lancer@gmail.com>; Alexey Malahov
> <Alexey.Malahov@baikalelectronics.ru>; Michail Ivanov
> <Michail.Ivanov@baikalelectronics.ru>; Pavel Parkhomenko
> <Pavel.Parkhomenko@baikalelectronics.ru>; Punnaiah Choudary Kalluri
> <punnaiah.choudary.kalluri@xilinx.com>; Manish Narani
> <manish.narani@xilinx.com>; Dinh Nguyen <dinguyen@kernel.org>; Rob
> Herring <robh@kernel.org>; Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org>; devicetree@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-edac@vger.kernel.org; linux-
> kernel@vger.kernel.org; Borislav Petkov <bp@suse.de>
> Subject: [PATCH v2 05/19] EDAC/synopsys: Fix reading errors count before
> ECC status
> 
> CAUTION: This message has originated from an External Source. Please use
> proper judgment and caution when opening attachments, clicking links, or
> responding to this email.
> 
> 
> Aside with fixing the errors count CSR usage the commit e2932d1f6f05
> ("EDAC/synopsys: Read the error count from the correct register") all of the
> sudden has also changed the order of the errors status check procedure. So
> now the errors handler method first reads the number of CE and UE and only
> then makes sure that any of these errors have actually happened. It doesn't
> make much sense. Let's fix that by getting back the procedures order: first
> check the ECC status, then read the number of errors.
> 
> Fixes: e2932d1f6f05 ("EDAC/synopsys: Read the error count from the correct
> register")
> Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>


Reviewed-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>

> ---
>  drivers/edac/synopsys_edac.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/edac/synopsys_edac.c b/drivers/edac/synopsys_edac.c
> index da1d90a87778..558d3b3e6864 100644
> --- a/drivers/edac/synopsys_edac.c
> +++ b/drivers/edac/synopsys_edac.c
> @@ -423,18 +423,18 @@ static int zynqmp_get_error_info(struct
> synps_edac_priv *priv)
>         base = priv->baseaddr;
>         p = &priv->stat;
> 
> -       regval = readl(base + ECC_ERRCNT_OFST);
> -       p->ce_cnt = regval & ECC_ERRCNT_CECNT_MASK;
> -       p->ue_cnt = (regval & ECC_ERRCNT_UECNT_MASK) >>
> ECC_ERRCNT_UECNT_SHIFT;
> -       if (!p->ce_cnt)
> -               goto ue_err;
> -
>         regval = readl(base + ECC_STAT_OFST);
>         if (!regval)
>                 return 1;
> 
>         p->ceinfo.bitpos = (regval & ECC_STAT_BITNUM_MASK);
> 
> +       regval = readl(base + ECC_ERRCNT_OFST);
> +       p->ce_cnt = regval & ECC_ERRCNT_CECNT_MASK;
> +       p->ue_cnt = (regval & ECC_ERRCNT_UECNT_MASK) >>
> ECC_ERRCNT_UECNT_SHIFT;
> +       if (!p->ce_cnt)
> +               goto ue_err;
> +
>         regval = readl(base + ECC_CEADDR0_OFST);
>         p->ceinfo.row = (regval & ECC_CEADDR0_RW_MASK);
>         regval = readl(base + ECC_CEADDR1_OFST);
> --
> 2.37.2