@@ -178,6 +178,8 @@ struct cxl_endpoint_dvsec_info {
struct range dvsec_range[2];
};
+#define CXL_DEV_ID_LEN 32
+
/**
* struct cxl_dev_state - The driver device state
*
@@ -244,6 +246,7 @@ struct cxl_dev_state {
resource_size_t component_reg_phys;
u64 serial;
+ u8 dev_id[CXL_DEV_ID_LEN]; /* for nvdimm, string of 'serial' */
struct xarray doe_mbs;
@@ -456,6 +456,10 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return PTR_ERR(cxlds);
cxlds->serial = pci_get_dsn(pdev);
+ rc = snprintf(cxlds->dev_id, CXL_DEV_ID_LEN, "%llu", cxlds->serial);
+ if (rc <= 0)
+ return -ENXIO;
+
cxlds->cxl_dvsec = pci_find_dvsec_capability(
pdev, PCI_DVSEC_VENDOR_ID_CXL, CXL_DVSEC_PCIE_DEVICE);
if (!cxlds->cxl_dvsec)
@@ -112,9 +112,11 @@ static int cxl_nvdimm_probe(struct device *dev)
set_bit(ND_CMD_GET_CONFIG_SIZE, &cmd_mask);
set_bit(ND_CMD_GET_CONFIG_DATA, &cmd_mask);
set_bit(ND_CMD_SET_CONFIG_DATA, &cmd_mask);
+
nvdimm = __nvdimm_create(cxl_nvb->nvdimm_bus, cxl_nvd,
cxl_dimm_attribute_groups, flags,
- cmd_mask, 0, NULL, NULL, cxl_security_ops, NULL);
+ cmd_mask, 0, NULL, cxlds->dev_id,
+ cxl_security_ops, NULL);
if (!nvdimm) {
rc = -ENOMEM;
goto out;
@@ -571,6 +571,10 @@ static int cxl_mock_mem_probe(struct platform_device *pdev)
return PTR_ERR(cxlds);
cxlds->serial = pdev->id;
+ rc = snprintf(cxlds->dev_id, CXL_DEV_ID_LEN, "%llu", cxlds->serial);
+ if (rc <= 0)
+ return -ENXIO;
+
cxlds->mbox_send = cxl_mock_mbox_send;
cxlds->payload_size = SZ_4K;