Commit 5e5f4ad5 authored by Dan Williams's avatar Dan Williams
Browse files

cxl/port: Move endpoint HDM Decoder Capability init to port driver



The responsibility for establishing HDM Decoder Capability based
operation is more closely tied to port enabling than memdev enabling
which is concerned with port enumeration. This later enables reusing
@cxlhdm for probing / controlling "global enable" for the HDM Decoder
Capability. For now, just do the nominal move.

Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/165291691167.1426646.7936109077255288258.stgit@dwillia2-xfh


Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 92804edb
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ static void enable_suspend(void *data)
static int cxl_mem_probe(struct device *dev)
{
	struct cxl_memdev *cxlmd = to_cxl_memdev(dev);
	struct cxl_dev_state *cxlds = cxlmd->cxlds;
	struct cxl_port *parent_port;
	int rc;

@@ -94,16 +93,6 @@ static int cxl_mem_probe(struct device *dev)
	if (rc)
		return rc;

	rc = cxl_hdm_decode_init(cxlds);
	if (rc)
		return rc;

	rc = cxl_await_media_ready(cxlds);
	if (rc) {
		dev_err(dev, "Media not active (%d)\n", rc);
		return rc;
	}

	/*
	 * The kernel may be operating out of CXL memory on this device,
	 * there is no spec defined way to determine whether this device
+11 −0
Original line number Diff line number Diff line
@@ -38,11 +38,22 @@ static int cxl_port_probe(struct device *dev)

	if (is_cxl_endpoint(port)) {
		struct cxl_memdev *cxlmd = to_cxl_memdev(port->uport);
		struct cxl_dev_state *cxlds = cxlmd->cxlds;

		get_device(&cxlmd->dev);
		rc = devm_add_action_or_reset(dev, schedule_detach, cxlmd);
		if (rc)
			return rc;

		rc = cxl_hdm_decode_init(cxlds);
		if (rc)
			return rc;

		rc = cxl_await_media_ready(cxlds);
		if (rc) {
			dev_err(dev, "Media not active (%d)\n", rc);
			return rc;
		}
	} else {
		rc = devm_cxl_port_enumerate_dports(port);
		if (rc < 0)