From: Manish Honap <[email protected]> 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 <[email protected]> --- 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

