| 1 | |
| 2 | |
| 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");
|