diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c
index 432b7cfd12a8e10703f1513ba4553e8821369546..483482e4fcfbdd0eba688ccbddca3fadbdb78eef 100644
--- a/drivers/cxl/acpi.c
+++ b/drivers/cxl/acpi.c
@@ -340,20 +340,24 @@ static int add_or_reset_cxl_resource(struct resource *parent, struct resource *r
 DEFINE_FREE(put_cxlrd, struct cxl_root_decoder *,
 	    if (!IS_ERR_OR_NULL(_T)) put_device(&_T->cxlsd.cxld.dev))
 DEFINE_FREE(del_cxl_resource, struct resource *, if (_T) del_cxl_resource(_T))
-static int __cxl_parse_cfmws(struct acpi_cedt_cfmws *cfmws,
-			     struct cxl_cfmws_context *ctx)
+static int cxl_parse_cfmws(union acpi_subtable_headers *header, void *arg,
+			   const unsigned long end)
 {
 	int target_map[CXL_DECODER_MAX_INTERLEAVE];
+	struct cxl_cfmws_context *ctx = arg;
 	struct cxl_port *root_port = ctx->root_port;
 	struct cxl_cxims_context cxims_ctx;
 	struct device *dev = ctx->dev;
+	struct acpi_cedt_cfmws *cfmws;
 	struct cxl_decoder *cxld;
 	unsigned int ways, i, ig;
 	int rc;
 
+	cfmws = (struct acpi_cedt_cfmws *) header;
+
 	rc = cxl_acpi_cfmws_verify(dev, cfmws);
 	if (rc)
-		return rc;
+		return 0;
 
 	rc = eiw_to_ways(cfmws->interleave_ways, &ways);
 	if (rc)
@@ -378,7 +382,7 @@ static int __cxl_parse_cfmws(struct acpi_cedt_cfmws *cfmws,
 		cxl_root_decoder_alloc(root_port, ways);
 
 	if (IS_ERR(cxlrd))
-		return PTR_ERR(cxlrd);
+		return 0;
 
 	cxld = &cxlrd->cxlsd.cxld;
 	cxld->flags = cfmws_to_decoder_flags(cfmws->restrictions);
@@ -421,29 +425,16 @@ static int __cxl_parse_cfmws(struct acpi_cedt_cfmws *cfmws,
 	rc = cxl_decoder_add(cxld, target_map);
 	if (rc)
 		return rc;
-	return cxl_root_decoder_autoremove(dev, no_free_ptr(cxlrd));
-}
-
-static int cxl_parse_cfmws(union acpi_subtable_headers *header, void *arg,
-			   const unsigned long end)
-{
-	struct acpi_cedt_cfmws *cfmws = (struct acpi_cedt_cfmws *)header;
-	struct cxl_cfmws_context *ctx = arg;
-	struct device *dev = ctx->dev;
-	int rc;
-
-	rc = __cxl_parse_cfmws(cfmws, ctx);
-	if (rc)
-		dev_err(dev,
-			"Failed to add decode range: [%#llx - %#llx] (%d)\n",
-			cfmws->base_hpa,
-			cfmws->base_hpa + cfmws->window_size - 1, rc);
-	else
-		dev_dbg(dev, "decode range: node: %d range [%#llx - %#llx]\n",
-			phys_to_target_node(cfmws->base_hpa), cfmws->base_hpa,
-			cfmws->base_hpa + cfmws->window_size - 1);
+	rc = cxl_root_decoder_autoremove(dev, no_free_ptr(cxlrd));
+	if (rc) {
+		dev_err(dev, "Failed to add decode range: %pr", res);
+		return rc;
+	}
+	dev_dbg(dev, "add: %s node: %d range [%#llx - %#llx]\n",
+		dev_name(&cxld->dev),
+		phys_to_target_node(cxld->hpa_range.start),
+		cxld->hpa_range.start, cxld->hpa_range.end);
 
-	/* never fail cxl_acpi load for a single window failure */
 	return 0;
 }