1 // SPDX-License-Identifier: GPL-2.0-only 2 // Copyright(c) 2026 Intel Corporation. All rights reserved. 3 4 #include <linux/platform_device.h> 5 #include <linux/mod_devicetable.h> 6 #include <linux/module.h> 7 #include <linux/sizes.h> 8 #include <cxl/mailbox.h> 9 #include <cxlmem.h> 10 11 struct mock_cxl_accel { 12 struct cxl_dev_state cxlds; 13 struct cxl_memdev *cxlmd; 14 }; 15 16 static int cxl_mock_accel_probe(struct platform_device *pdev) 17 { 18 struct mock_cxl_accel *cxl_accel; 19 struct device *dev = &pdev->dev; 20 struct cxl_dev_state *cxlds; 21 struct cxl_memdev *cxlmd; 22 struct range mock_range; 23 int rc; 24 25 cxl_accel = devm_cxl_dev_state_create(&pdev->dev, CXL_DEVTYPE_DEVMEM, 26 pdev->id + 1, 0, 27 struct mock_cxl_accel, cxlds, 28 false); 29 if (!cxl_accel) 30 return -ENOMEM; 31 32 cxlds = &cxl_accel->cxlds; 33 cxlds->media_ready = true; 34 rc = cxl_set_capacity(cxlds, SZ_512M); 35 if (rc) 36 return rc; 37 38 cxlmd = devm_cxl_probe_mem(cxlds, &mock_range); 39 if (IS_ERR(cxlmd)) 40 return PTR_ERR(cxlmd); 41 cxl_accel->cxlmd = cxlmd; 42 43 dev_dbg(dev, "Probed mock accelerator with range %pra\n", &mock_range); 44 45 return 0; 46 } 47 48 static const struct platform_device_id cxl_mock_accel_ids[] = { 49 { .name = "cxl_type2_accel" }, 50 { } 51 }; 52 MODULE_DEVICE_TABLE(platform, cxl_mock_accel_ids); 53 54 static struct platform_driver cxl_mock_accel_driver = { 55 .probe = cxl_mock_accel_probe, 56 .id_table = cxl_mock_accel_ids, 57 .driver = { 58 .name = KBUILD_MODNAME, 59 .probe_type = PROBE_PREFER_ASYNCHRONOUS, 60 }, 61 }; 62 63 module_platform_driver(cxl_mock_accel_driver); 64 MODULE_LICENSE("GPL"); 65 MODULE_DESCRIPTION("cxl_test: accelerator device mock module"); 66 MODULE_IMPORT_NS("CXL"); 67