@@ -100,18 +100,33 @@ int efx_cxl_init(struct efx_probe_data *probe_data)
pci_err(pci_dev, "%s: not enough free HPA space %pap < %u\n",
__func__, &max_size, EFX_CTPIO_BUFFER_SIZE);
cxl_put_root_decoder(cxl->cxlrd);
- return -ENOSPC;
+ rc = -ENOSPC;
+ goto sfc_put_decoder;
+ }
+
+ cxl->cxled = cxl_request_dpa(cxl->cxlmd, CXL_PARTMODE_RAM,
+ EFX_CTPIO_BUFFER_SIZE);
+ if (IS_ERR(cxl->cxled)) {
+ pci_err(pci_dev, "CXL accel request DPA failed");
+ rc = PTR_ERR(cxl->cxled);
+ goto sfc_put_decoder;
}
probe_data->cxl = cxl;
return 0;
+
+sfc_put_decoder:
+ cxl_put_root_decoder(cxl->cxlrd);
+ return rc;
}
void efx_cxl_exit(struct efx_probe_data *probe_data)
{
- if (probe_data->cxl)
+ if (probe_data->cxl) {
+ cxl_dpa_free(probe_data->cxl->cxled);
cxl_put_root_decoder(probe_data->cxl->cxlrd);
+ }
}
MODULE_IMPORT_NS("CXL");