cxl/mem: Validate port connectivity before dvsec ranges
authorDan Williams <dan.j.williams@intel.com>
Wed, 18 May 2022 23:34:37 +0000 (16:34 -0700)
committerDan Williams <dan.j.williams@intel.com>
Thu, 19 May 2022 15:50:41 +0000 (08:50 -0700)
In preparation for validating DVSEC ranges against the platform declared
CXL memory ranges (ACPI CFMWS) move port enumeration before the
endpoint's decoder validation. Ultimately this logic will move to the
port driver, but create a bisect point before that larger move.

Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/165291687749.1426646.18091538443879226995.stgit@dwillia2-xfh
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/mem.c

index 184549e5093fbd9d04a3db372e0fb30441d58552..80e75a4104993b7b51715420df0b37e008c0a8d7 100644 (file)
@@ -140,22 +140,6 @@ static int cxl_mem_probe(struct device *dev)
        if (work_pending(&cxlmd->detach_work))
                return -EBUSY;
 
-       rc = cxlds->wait_media_ready(cxlds);
-       if (rc) {
-               dev_err(dev, "Media not active (%d)\n", rc);
-               return rc;
-       }
-
-       /*
-        * If DVSEC ranges are being used instead of HDM decoder registers there
-        * is no use in trying to manage those.
-        */
-       if (!cxl_hdm_decode_init(cxlds)) {
-               dev_err(dev,
-                       "Legacy range registers configuration prevents HDM operation.\n");
-               return -EBUSY;
-       }
-
        rc = devm_cxl_enumerate_ports(cxlmd);
        if (rc)
                return rc;
@@ -181,6 +165,22 @@ unlock:
        if (rc)
                return rc;
 
+       rc = cxlds->wait_media_ready(cxlds);
+       if (rc) {
+               dev_err(dev, "Media not active (%d)\n", rc);
+               return rc;
+       }
+
+       /*
+        * If DVSEC ranges are being used instead of HDM decoder registers there
+        * is no use in trying to manage those.
+        */
+       if (!cxl_hdm_decode_init(cxlds)) {
+               dev_err(dev,
+                       "Legacy range registers configuration prevents HDM operation.\n");
+               return -EBUSY;
+       }
+
        /*
         * The kernel may be operating out of CXL memory on this device,
         * there is no spec defined way to determine whether this device