Merge tag 'edac_urgent_for_v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras

Pull EDAC fixes from Borislav Petkov:

- Relax the condition under which the DIMM label in ghes_edac is set in
order to accomodate an HPE BIOS which sets only the device but not
the bank

- Two forgotten fixes to synopsys_edac when handling error interrupts

* tag 'edac_urgent_for_v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras:
EDAC/ghes: Set the DIMM label unconditionally
EDAC/synopsys: Re-enable the error interrupts on v3 hw
EDAC/synopsys: Use the correct register to disable the error interrupt on v3 hw

Changed files
+33 -22
drivers
+8 -3
drivers/edac/ghes_edac.c
··· 103 103 104 104 dmi_memdev_name(handle, &bank, &device); 105 105 106 - /* both strings must be non-zero */ 107 - if (bank && *bank && device && *device) 108 - snprintf(dimm->label, sizeof(dimm->label), "%s %s", bank, device); 106 + /* 107 + * Set to a NULL string when both bank and device are zero. In this case, 108 + * the label assigned by default will be preserved. 109 + */ 110 + snprintf(dimm->label, sizeof(dimm->label), "%s%s%s", 111 + (bank && *bank) ? bank : "", 112 + (bank && *bank && device && *device) ? " " : "", 113 + (device && *device) ? device : ""); 109 114 } 110 115 111 116 static void assign_dmi_dimm_info(struct dimm_info *dimm, struct memdev_dmi_entry *entry)
+25 -19
drivers/edac/synopsys_edac.c
··· 514 514 memset(p, 0, sizeof(*p)); 515 515 } 516 516 517 + static void enable_intr(struct synps_edac_priv *priv) 518 + { 519 + /* Enable UE/CE Interrupts */ 520 + if (priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR) 521 + writel(DDR_UE_MASK | DDR_CE_MASK, 522 + priv->baseaddr + ECC_CLR_OFST); 523 + else 524 + writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, 525 + priv->baseaddr + DDR_QOS_IRQ_EN_OFST); 526 + 527 + } 528 + 529 + static void disable_intr(struct synps_edac_priv *priv) 530 + { 531 + /* Disable UE/CE Interrupts */ 532 + if (priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR) 533 + writel(0x0, priv->baseaddr + ECC_CLR_OFST); 534 + else 535 + writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, 536 + priv->baseaddr + DDR_QOS_IRQ_DB_OFST); 537 + } 538 + 517 539 /** 518 540 * intr_handler - Interrupt Handler for ECC interrupts. 519 541 * @irq: IRQ number. ··· 577 555 /* v3.0 of the controller does not have this register */ 578 556 if (!(priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR)) 579 557 writel(regval, priv->baseaddr + DDR_QOS_IRQ_STAT_OFST); 558 + else 559 + enable_intr(priv); 560 + 580 561 return IRQ_HANDLED; 581 562 } 582 563 ··· 860 835 mci->ctl_page_to_phys = NULL; 861 836 862 837 init_csrows(mci); 863 - } 864 - 865 - static void enable_intr(struct synps_edac_priv *priv) 866 - { 867 - /* Enable UE/CE Interrupts */ 868 - if (priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR) 869 - writel(DDR_UE_MASK | DDR_CE_MASK, 870 - priv->baseaddr + ECC_CLR_OFST); 871 - else 872 - writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, 873 - priv->baseaddr + DDR_QOS_IRQ_EN_OFST); 874 - 875 - } 876 - 877 - static void disable_intr(struct synps_edac_priv *priv) 878 - { 879 - /* Disable UE/CE Interrupts */ 880 - writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, 881 - priv->baseaddr + DDR_QOS_IRQ_DB_OFST); 882 838 } 883 839 884 840 static int setup_irq(struct mem_ctl_info *mci,