aboutsummaryrefslogtreecommitdiff
path: root/drivers/cdx/cdx.c
diff options
context:
space:
mode:
authorGravatar Nipun Gupta <nipun.gupta@amd.com> 2023-09-15 10:24:21 +0530
committerGravatar Alex Williamson <alex.williamson@redhat.com> 2023-09-28 12:12:07 -0600
commita941b784b15ff65e1a3b6a259c6d6cf7fa0bb3c3 (patch)
tree10bcc48828fc5741e1cbce64efe13916ab971288 /drivers/cdx/cdx.c
parentMerge branch 'mlx5-vfio' of https://git.kernel.org/pub/scm/linux/kernel/git/m... (diff)
downloadlinux-a941b784b15ff65e1a3b6a259c6d6cf7fa0bb3c3.tar.gz
linux-a941b784b15ff65e1a3b6a259c6d6cf7fa0bb3c3.tar.bz2
linux-a941b784b15ff65e1a3b6a259c6d6cf7fa0bb3c3.zip
cdx: add support for bus mastering
Introduce cdx_set_master() and cdx_clear_master() APIs to support enable and disable of bus mastering. Drivers need to use these APIs to enable/disable DMAs from the CDX devices. Signed-off-by: Nipun Gupta <nipun.gupta@amd.com> Reviewed-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com> Link: https://lore.kernel.org/r/20230915045423.31630-1-nipun.gupta@amd.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/cdx/cdx.c')
-rw-r--r--drivers/cdx/cdx.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c
index d2cad4c670a0..9efb7584f952 100644
--- a/drivers/cdx/cdx.c
+++ b/drivers/cdx/cdx.c
@@ -182,6 +182,38 @@ cdx_match_id(const struct cdx_device_id *ids, struct cdx_device *dev)
return NULL;
}
+int cdx_set_master(struct cdx_device *cdx_dev)
+{
+ struct cdx_controller *cdx = cdx_dev->cdx;
+ struct cdx_device_config dev_config;
+ int ret = -EOPNOTSUPP;
+
+ dev_config.type = CDX_DEV_BUS_MASTER_CONF;
+ dev_config.bus_master_enable = true;
+ if (cdx->ops->dev_configure)
+ ret = cdx->ops->dev_configure(cdx, cdx_dev->bus_num,
+ cdx_dev->dev_num, &dev_config);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(cdx_set_master);
+
+int cdx_clear_master(struct cdx_device *cdx_dev)
+{
+ struct cdx_controller *cdx = cdx_dev->cdx;
+ struct cdx_device_config dev_config;
+ int ret = -EOPNOTSUPP;
+
+ dev_config.type = CDX_DEV_BUS_MASTER_CONF;
+ dev_config.bus_master_enable = false;
+ if (cdx->ops->dev_configure)
+ ret = cdx->ops->dev_configure(cdx, cdx_dev->bus_num,
+ cdx_dev->dev_num, &dev_config);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(cdx_clear_master);
+
/**
* cdx_bus_match - device to driver matching callback
* @dev: the cdx device to match against