dev->driver ? "successful" : "failed");
 }
 
+static void cxl_cor_error_detected(struct pci_dev *pdev)
+{
+       struct cxl_dev_state *cxlds = pci_get_drvdata(pdev);
+       struct cxl_memdev *cxlmd = cxlds->cxlmd;
+       struct device *dev = &cxlmd->dev;
+       void __iomem *addr;
+       u32 status;
+
+       if (!cxlds->regs.ras)
+               return;
+
+       addr = cxlds->regs.ras + CXL_RAS_CORRECTABLE_STATUS_OFFSET;
+       status = le32_to_cpu(readl(addr));
+       if (status & CXL_RAS_CORRECTABLE_STATUS_MASK) {
+               writel(status & CXL_RAS_CORRECTABLE_STATUS_MASK, addr);
+               trace_cxl_aer_correctable_error(dev_name(dev), status);
+       }
+}
+
 static const struct pci_error_handlers cxl_error_handlers = {
        .error_detected = cxl_error_detected,
        .slot_reset     = cxl_slot_reset,
        .resume         = cxl_error_resume,
+       .cor_error_detected     = cxl_cor_error_detected,
 };
 
 static struct pci_driver cxl_pci_driver = {