From: Richard Cheng <icheng@nvidia.com>
To: dave@stgolabs.net, jic23@kernel.org, dave.jiang@intel.com,
alison.schofield@intel.com, vishal.l.verma@intel.com
Cc: iweiny@kernel.org, ming.li@zohomail.com, icheng@nvidia.com,
linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org,
kaihengf@nvidia.com, kobak@nvidia.com, newtonl@nvidia.com,
kristinc@nvidia.com
Subject: [PATCH v2] cxl/port: Fix endpoint RAS error unmasking
Date: Tue, 3 Nov 2026 14:34:09 +0800 [thread overview]
Message-ID: <20261103063409.18275-1-icheng@nvidia.com> (raw)
Moving endpoint RAS handling from cxl_pci to cxl_port left
cxl_ras_unmask() checking whether port->uport_dev is a PCI device.
Endpoint ports always use a cxl_memdev as uport_dev, so this check
returns early and leaves the CXL RAS error masks unchanged.
Resolve the PCI device directly through the memdev's parent. Rename
helper to cxl_endpoint_ras_unmask() and its param to endpoint to make
its endpoint-only scope explicit.
Fixes: dab7162d0ae7 ("cxl/port: Move endpoint component register management to cxl_port")
Signed-off-by: Richard Cheng <icheng@nvidia.com>
---
Changelog:
v1 -> v2:
- Clarify that endpoint ports always use a cxl_memdev as uport_dev, so
the PCI device check always skips endpoint RAS unmasking
- Simplify the PCI device lookup to use the memdev's parent directly
- Rename cxl_ras_unmask() to cxl_endpoint_ras_unmask() and its param to
endpoint to make the endpoint-only scope explicitly
- Rephrase commit messages.
Reproducer is a QEMU Type-3 guest
1. Ensure no CXL region is active and PCIe AER is enabled.
2. Restore the emulated RAS registers to their reset masks.
3. Reprobe cxl_pci and read the masks again.
```
BDF=$(basename "$(dirname "$(readlink -f /sys/bus/cxl/devices/mem0)")")
BAR0=$(awk 'NR == 1 { print $1 }' /sys/bus/pci/devices/$BDF/resource)
UNC_MASK=$(printf '0x%x' $((BAR0 + 0x1084)))
COR_MASK=$(printf '0x%x' $((BAR0 + 0x1090)))
busybox devmem "$UNC_MASK" 32 0x1cfff
busybox devmem "$COR_MASK" 32 0x7f
echo "$BDF" > /sys/bus/pci/drivers/cxl_pci/unbind
echo "$BDF" > /sys/bus/pci/drivers/cxl_pci/bind
udevadm settle
busybox devmem "$UNC_MASK" 32
busybox devmem "$COR_MASK" 32
```
Before the fix, the masks remain 0x1cfff and 0x7f. After the fix,
both masks read as zero.
Best regards,
Richard Cheng.
---
drivers/cxl/port.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
index c12fd0b89883..7b4726c7276d 100644
--- a/drivers/cxl/port.c
+++ b/drivers/cxl/port.c
@@ -72,19 +72,21 @@ static int cxl_switch_port_probe(struct cxl_port *port)
return 0;
}
-static int cxl_ras_unmask(struct cxl_port *port)
+static int cxl_endpoint_ras_unmask(struct cxl_port *endpoint)
{
+ struct cxl_memdev *cxlmd = to_cxl_memdev(endpoint->uport_dev);
+ struct device *parent = cxlmd->dev.parent;
struct pci_dev *pdev;
void __iomem *addr;
u32 orig_val, val, mask;
u16 cap;
int rc;
- if (!dev_is_pci(port->uport_dev))
+ if (!dev_is_pci(parent))
return 0;
- pdev = to_pci_dev(port->uport_dev);
+ pdev = to_pci_dev(parent);
- if (!port->regs.ras) {
+ if (!endpoint->regs.ras) {
pci_dbg(pdev, "No RAS registers.\n");
return 0;
}
@@ -98,7 +100,7 @@ static int cxl_ras_unmask(struct cxl_port *port)
return rc;
if (cap & PCI_EXP_DEVCTL_URRE) {
- addr = port->regs.ras + CXL_RAS_UNCORRECTABLE_MASK_OFFSET;
+ addr = endpoint->regs.ras + CXL_RAS_UNCORRECTABLE_MASK_OFFSET;
orig_val = readl(addr);
mask = CXL_RAS_UNCORRECTABLE_MASK_MASK |
@@ -110,7 +112,7 @@ static int cxl_ras_unmask(struct cxl_port *port)
}
if (cap & PCI_EXP_DEVCTL_CERE) {
- addr = port->regs.ras + CXL_RAS_CORRECTABLE_MASK_OFFSET;
+ addr = endpoint->regs.ras + CXL_RAS_CORRECTABLE_MASK_OFFSET;
orig_val = readl(addr);
val = orig_val & ~CXL_RAS_CORRECTABLE_MASK_MASK;
writel(val, addr);
@@ -152,7 +154,7 @@ static int cxl_endpoint_port_probe(struct cxl_port *port)
devm_cxl_dport_rch_ras_setup(dport);
devm_cxl_port_ras_setup(port);
- if (cxl_ras_unmask(port))
+ if (cxl_endpoint_ras_unmask(port))
dev_dbg(&port->dev, "failed to unmask RAS interrupts\n");
/*
base-commit: d135ab453a7400a34930bdda1ef4bdc8acfac80e
--
2.43.0
next reply other threads:[~2026-11-03 6:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 6:34 Richard Cheng [this message]
2026-11-03 18:35 ` [PATCH v2] cxl/port: Fix endpoint RAS error unmasking Cheatham, Benjamin
2026-11-03 23:15 ` Dave Jiang
2026-11-04 14:08 ` Cheatham, Benjamin
2026-11-10 20:07 ` Dave Jiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103063409.18275-1-icheng@nvidia.com \
--to=icheng@nvidia.com \
--cc=alison.schofield@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=iweiny@kernel.org \
--cc=jic23@kernel.org \
--cc=kaihengf@nvidia.com \
--cc=kobak@nvidia.com \
--cc=kristinc@nvidia.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.li@zohomail.com \
--cc=newtonl@nvidia.com \
--cc=vishal.l.verma@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.