Pull EDAC fix from Borislav Petkov: - Read the reported error count from the proper register on synopsys_edac * tag 'edac_urgent_for_v5.18_rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras: EDAC/synopsys: Read the error count from the correct register
Unified · Split
| @@ -164,6 +164,11 @@ · 163 unmodified lines | ||
| 164 | 164 | #define ECC_STAT_CECNT_SHIFT 8 |
| 165 | 165 | #define ECC_STAT_BITNUM_MASK 0x7F |
| 166 | 166 | |
| 167 | +/* ECC error count register definitions */ | |
| 168 | +#define ECC_ERRCNT_UECNT_MASK 0xFFFF0000 | |
| 169 | +#define ECC_ERRCNT_UECNT_SHIFT 16 | |
| 170 | +#define ECC_ERRCNT_CECNT_MASK 0xFFFF | |
| 171 | + | |
| 167 | 172 | /* DDR QOS Interrupt register definitions */ |
| 168 | 173 | #define DDR_QOS_IRQ_STAT_OFST 0x20200 |
| 169 | 174 | #define DDR_QOSUE_MASK 0x4 |
| @@ -423,15 +428,16 @@ static int zynqmp_get_error_info(struct synps_edac_priv *priv) · 253 unmodified lines | ||
| 423 | 428 | base = priv->baseaddr; |
| 424 | 429 | p = &priv->stat; |
| 425 | 430 | |
| 431 | + regval = readl(base + ECC_ERRCNT_OFST); | |
| 432 | + p->ce_cnt = regval & ECC_ERRCNT_CECNT_MASK; | |
| 433 | + p->ue_cnt = (regval & ECC_ERRCNT_UECNT_MASK) >> ECC_ERRCNT_UECNT_SHIFT; | |
| 434 | + if (!p->ce_cnt) | |
| 435 | + goto ue_err; | |
| 436 | + | |
| 426 | 437 | regval = readl(base + ECC_STAT_OFST); |
| 427 | 438 | if (!regval) |
| 428 | 439 | return 1; |
| 429 | 440 | |
| 430 | − p->ce_cnt = (regval & ECC_STAT_CECNT_MASK) >> ECC_STAT_CECNT_SHIFT; | |
| 431 | − p->ue_cnt = (regval & ECC_STAT_UECNT_MASK) >> ECC_STAT_UECNT_SHIFT; | |
| 432 | − if (!p->ce_cnt) | |
| 433 | − goto ue_err; | |
| 434 | − | |
| 435 | 441 | p->ceinfo.bitpos = (regval & ECC_STAT_BITNUM_MASK); |
| 436 | 442 | |
| 437 | 443 | regval = readl(base + ECC_CEADDR0_OFST); |