[PATCH v5 01/27] cxl/regs: Split the BAR block request and ioremap helpers
From: mhonap
Date: Wed Sep 16 2026 - 14:43:36 EST
From: Manish Honap <mhonap@xxxxxxxxxx>
devm_cxl_iomap_block() claims a register block with
devm_request_mem_region() and then maps it with devm_ioremap().
A driver that already owns the parent BAR needs to skip the sub-block
request while still mapping it, so the request and the map must be
callable independently.
Split them into devm_cxl_request_block() and devm_cxl_ioremap_block().
devm_cxl_iomap_block() keeps calling both in turn, so there is no
functional change.
Assisted-by: LLM
Signed-off-by: Manish Honap <mhonap@xxxxxxxxxx>
---
drivers/cxl/core/regs.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/cxl/core/regs.c b/drivers/cxl/core/regs.c
index 989e79383b99..d79550dbb484 100644
--- a/drivers/cxl/core/regs.c
+++ b/drivers/cxl/core/regs.c
@@ -177,6 +177,20 @@ void cxl_probe_device_regs(struct device *dev, void __iomem *base,
}
EXPORT_SYMBOL_NS_GPL(cxl_probe_device_regs, "CXL");
+static struct resource *devm_cxl_request_block(struct device *dev,
+ resource_size_t addr,
+ resource_size_t length)
+{
+ return devm_request_mem_region(dev, addr, length, dev_name(dev));
+}
+
+static void __iomem *devm_cxl_ioremap_block(struct device *dev,
+ resource_size_t addr,
+ resource_size_t length)
+{
+ return devm_ioremap(dev, addr, length);
+}
+
void __iomem *devm_cxl_iomap_block(struct device *dev, resource_size_t addr,
resource_size_t length)
{
@@ -186,7 +200,7 @@ void __iomem *devm_cxl_iomap_block(struct device *dev, resource_size_t addr,
if (WARN_ON_ONCE(addr == CXL_RESOURCE_NONE))
return NULL;
- res = devm_request_mem_region(dev, addr, length, dev_name(dev));
+ res = devm_cxl_request_block(dev, addr, length);
if (!res) {
resource_size_t end = addr + length - 1;
@@ -194,7 +208,7 @@ void __iomem *devm_cxl_iomap_block(struct device *dev, resource_size_t addr,
return NULL;
}
- ret_val = devm_ioremap(dev, addr, length);
+ ret_val = devm_cxl_ioremap_block(dev, addr, length);
if (!ret_val)
dev_err(dev, "Failed to map region %pr\n", res);
--
2.25.1