diff options
| -rw-r--r-- | drivers/cxl/core/port.c | 27 | ||||
| -rw-r--r-- | drivers/cxl/cxl.h | 2 | 
2 files changed, 29 insertions, 0 deletions
diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index 679226023f0c..43ffecebf1d8 100644 --- a/drivers/cxl/core/port.c +++ b/drivers/cxl/core/port.c @@ -688,6 +688,29 @@ err:  	return ERR_PTR(rc);  } +static int cxl_setup_comp_regs(struct device *dev, struct cxl_register_map *map, +			       resource_size_t component_reg_phys) +{ +	if (component_reg_phys == CXL_RESOURCE_NONE) +		return 0; + +	*map = (struct cxl_register_map) { +		.dev = dev, +		.reg_type = CXL_REGLOC_RBI_COMPONENT, +		.resource = component_reg_phys, +		.max_size = CXL_COMPONENT_REG_BLOCK_SIZE, +	}; + +	return cxl_setup_regs(map); +} + +static inline int cxl_port_setup_regs(struct cxl_port *port, +				      resource_size_t component_reg_phys) +{ +	return cxl_setup_comp_regs(&port->dev, &port->comp_map, +				   component_reg_phys); +} +  static struct cxl_port *__devm_cxl_add_port(struct device *host,  					    struct device *uport_dev,  					    resource_size_t component_reg_phys, @@ -711,6 +734,10 @@ static struct cxl_port *__devm_cxl_add_port(struct device *host,  	if (rc)  		goto err; +	rc = cxl_port_setup_regs(port, component_reg_phys); +	if (rc) +		goto err; +  	rc = device_add(dev);  	if (rc)  		goto err; diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h index fe95f08acb69..37fa5b565362 100644 --- a/drivers/cxl/cxl.h +++ b/drivers/cxl/cxl.h @@ -547,6 +547,7 @@ struct cxl_dax_region {   * @regions: cxl_region_ref instances, regions mapped by this port   * @parent_dport: dport that points to this port in the parent   * @decoder_ida: allocator for decoder ids + * @comp_map: component register capability mappings   * @nr_dports: number of entries in @dports   * @hdm_end: track last allocated HDM decoder instance for allocation ordering   * @commit_end: cursor to track highest committed decoder for commit ordering @@ -566,6 +567,7 @@ struct cxl_port {  	struct xarray regions;  	struct cxl_dport *parent_dport;  	struct ida decoder_ida; +	struct cxl_register_map comp_map;  	int nr_dports;  	int hdm_end;  	int commit_end;  | 
