Skip to content

Commit 078d3ee

Browse files
skoralahdavejiang
authored andcommitted
cxl/core/regs.c: Skip Memory Space Enable check for RCD and RCH Ports
According to CXL r3.2 section 8.2.1.2, the PCI_COMMAND register fields, including Memory Space Enable bit, have no effect on the behavior of an RCD Upstream Port. Retaining this check may incorrectly cause cxl_pci_probe() to fail on a valid RCD upstream Port. While the specification is explicit only for RCD Upstream Ports, this check is solely for accessing the RCRB, which is always mapped through memory space. Therefore, its safe to remove the check entirely. In practice, firmware reliably enables the Memory Space Enable bit for RCH Downstream Ports and no failures have been observed. Removing the check simplifies the code and avoids unnecessary special-casing, while relying on BIOS/firmware to configure devices correctly. Moreover, any failures due to inaccessible RCRB regions will still be caught either in __rcrb_to_component() or while parsing the component register block. The following failure was observed in dmesg when the check was present: cxl_pci 0000:7f:00.0: No component registers (-6) Fixes: d5b1a27 ("cxl/acpi: Extract component registers of restricted hosts from RCRB") Signed-off-by: Smita Koralahalli <Smita.KoralahalliChannabasappa@amd.com> Cc: <stable@vger.kernel.org> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Terry Bowman <terry.bowman@amd.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Robert Richter <rrichter@amd.com> Link: https://patch.msgid.link/20250407192734.70631-1-Smita.KoralahalliChannabasappa@amd.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
1 parent 25174d5 commit 078d3ee

File tree

1 file changed

+0
-4
lines changed

1 file changed

+0
-4
lines changed

drivers/cxl/core/regs.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,6 @@ resource_size_t __rcrb_to_component(struct device *dev, struct cxl_rcrb_info *ri
581581
resource_size_t rcrb = ri->base;
582582
void __iomem *addr;
583583
u32 bar0, bar1;
584-
u16 cmd;
585584
u32 id;
586585

587586
if (which == CXL_RCRB_UPSTREAM)
@@ -603,7 +602,6 @@ resource_size_t __rcrb_to_component(struct device *dev, struct cxl_rcrb_info *ri
603602
}
604603

605604
id = readl(addr + PCI_VENDOR_ID);
606-
cmd = readw(addr + PCI_COMMAND);
607605
bar0 = readl(addr + PCI_BASE_ADDRESS_0);
608606
bar1 = readl(addr + PCI_BASE_ADDRESS_1);
609607
iounmap(addr);
@@ -618,8 +616,6 @@ resource_size_t __rcrb_to_component(struct device *dev, struct cxl_rcrb_info *ri
618616
dev_err(dev, "Failed to access Downstream Port RCRB\n");
619617
return CXL_RESOURCE_NONE;
620618
}
621-
if (!(cmd & PCI_COMMAND_MEMORY))
622-
return CXL_RESOURCE_NONE;
623619
/* The RCRB is a Memory Window, and the MEM_TYPE_1M bit is obsolete */
624620
if (bar0 & (PCI_BASE_ADDRESS_MEM_TYPE_1M | PCI_BASE_ADDRESS_SPACE_IO))
625621
return CXL_RESOURCE_NONE;

0 commit comments

Comments
 (0)