diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch | 252 |
1 files changed, 0 insertions, 252 deletions
diff --git a/target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch b/target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch deleted file mode 100644 index c752b963a8..0000000000 --- a/target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch +++ /dev/null @@ -1,252 +0,0 @@ -From 8b9efd00727523c56eb9d17ad42338b6090b4b8e Mon Sep 17 00:00:00 2001 -From: Bharat Bhushan <Bharat.Bhushan@nxp.com> -Date: Fri, 12 May 2017 10:27:07 +0530 -Subject: [PATCH] vfio/fsl-mc: Add VFIO framework skeleton for fsl-mc devices - -This patch adds the infrastructure for VFIO support for fsl-mc -devices. Subsequent patches will add support for binding and secure -assigning these devices using VFIO. - -FSL-MC is a new bus (driver/bus/fsl-mc/) which is different -from PCI and Platform bus. - -Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com> -Signed-off-by: Diana Craciun <diana.craciun@nxp.com> ---- - drivers/vfio/Kconfig | 1 + - drivers/vfio/Makefile | 1 + - drivers/vfio/fsl-mc/Kconfig | 9 ++ - drivers/vfio/fsl-mc/Makefile | 2 + - drivers/vfio/fsl-mc/vfio_fsl_mc.c | 162 ++++++++++++++++++++++++++++++ - drivers/vfio/fsl-mc/vfio_fsl_mc_private.h | 14 +++ - include/uapi/linux/vfio.h | 1 + - 7 files changed, 190 insertions(+) - create mode 100644 drivers/vfio/fsl-mc/Kconfig - create mode 100644 drivers/vfio/fsl-mc/Makefile - create mode 100644 drivers/vfio/fsl-mc/vfio_fsl_mc.c - create mode 100644 drivers/vfio/fsl-mc/vfio_fsl_mc_private.h - ---- a/drivers/vfio/Kconfig -+++ b/drivers/vfio/Kconfig -@@ -47,4 +47,5 @@ config VFIO_NOIOMMU - source "drivers/vfio/pci/Kconfig" - source "drivers/vfio/platform/Kconfig" - source "drivers/vfio/mdev/Kconfig" -+source "drivers/vfio/fsl-mc/Kconfig" - source "virt/lib/Kconfig" ---- a/drivers/vfio/Makefile -+++ b/drivers/vfio/Makefile -@@ -9,3 +9,4 @@ obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spa - obj-$(CONFIG_VFIO_PCI) += pci/ - obj-$(CONFIG_VFIO_PLATFORM) += platform/ - obj-$(CONFIG_VFIO_MDEV) += mdev/ -+obj-$(CONFIG_VFIO_FSL_MC) += fsl-mc/ ---- /dev/null -+++ b/drivers/vfio/fsl-mc/Kconfig -@@ -0,0 +1,9 @@ -+config VFIO_FSL_MC -+ tristate "VFIO support for QorIQ DPAA2 fsl-mc bus devices" -+ depends on VFIO && FSL_MC_BUS && EVENTFD -+ help -+ Driver to enable support for the VFIO QorIQ DPAA2 fsl-mc -+ (Management Complex) devices. This is required to passthrough -+ fsl-mc bus devices using the VFIO framework. -+ -+ If you don't know what to do here, say N. ---- /dev/null -+++ b/drivers/vfio/fsl-mc/Makefile -@@ -0,0 +1,2 @@ -+vfio-fsl_mc-y := vfio_fsl_mc.o -+obj-$(CONFIG_VFIO_FSL_MC) += vfio_fsl_mc.o ---- /dev/null -+++ b/drivers/vfio/fsl-mc/vfio_fsl_mc.c -@@ -0,0 +1,162 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) -+/* -+ * Copyright 2013-2016 Freescale Semiconductor Inc. -+ * Copyright 2016-2017,2019 NXP -+ */ -+ -+#include <linux/device.h> -+#include <linux/iommu.h> -+#include <linux/module.h> -+#include <linux/mutex.h> -+#include <linux/slab.h> -+#include <linux/types.h> -+#include <linux/vfio.h> -+#include <linux/fsl/mc.h> -+ -+#include "vfio_fsl_mc_private.h" -+ -+ -+static int vfio_fsl_mc_open(void *device_data) -+{ -+ if (!try_module_get(THIS_MODULE)) -+ return -ENODEV; -+ -+ return 0; -+} -+ -+static void vfio_fsl_mc_release(void *device_data) -+{ -+ module_put(THIS_MODULE); -+} -+ -+static long vfio_fsl_mc_ioctl(void *device_data, unsigned int cmd, -+ unsigned long arg) -+{ -+ switch (cmd) { -+ case VFIO_DEVICE_GET_INFO: -+ { -+ return -EINVAL; -+ } -+ case VFIO_DEVICE_GET_REGION_INFO: -+ { -+ return -EINVAL; -+ } -+ case VFIO_DEVICE_GET_IRQ_INFO: -+ { -+ return -EINVAL; -+ } -+ case VFIO_DEVICE_SET_IRQS: -+ { -+ return -EINVAL; -+ } -+ case VFIO_DEVICE_RESET: -+ { -+ return -EINVAL; -+ } -+ default: -+ return -EINVAL; -+ } -+} -+ -+static ssize_t vfio_fsl_mc_read(void *device_data, char __user *buf, -+ size_t count, loff_t *ppos) -+{ -+ return -EINVAL; -+} -+ -+static ssize_t vfio_fsl_mc_write(void *device_data, const char __user *buf, -+ size_t count, loff_t *ppos) -+{ -+ return -EINVAL; -+} -+ -+static int vfio_fsl_mc_mmap(void *device_data, struct vm_area_struct *vma) -+{ -+ return -EINVAL; -+} -+ -+static const struct vfio_device_ops vfio_fsl_mc_ops = { -+ .name = "vfio-fsl-mc", -+ .open = vfio_fsl_mc_open, -+ .release = vfio_fsl_mc_release, -+ .ioctl = vfio_fsl_mc_ioctl, -+ .read = vfio_fsl_mc_read, -+ .write = vfio_fsl_mc_write, -+ .mmap = vfio_fsl_mc_mmap, -+}; -+ -+static int vfio_fsl_mc_probe(struct fsl_mc_device *mc_dev) -+{ -+ struct iommu_group *group; -+ struct vfio_fsl_mc_device *vdev; -+ struct device *dev = &mc_dev->dev; -+ int ret; -+ -+ group = vfio_iommu_group_get(dev); -+ if (!group) { -+ dev_err(dev, "%s: VFIO: No IOMMU group\n", __func__); -+ return -EINVAL; -+ } -+ -+ vdev = devm_kzalloc(dev, sizeof(*vdev), GFP_KERNEL); -+ if (!vdev) { -+ vfio_iommu_group_put(group, dev); -+ return -ENOMEM; -+ } -+ -+ vdev->mc_dev = mc_dev; -+ -+ ret = vfio_add_group_dev(dev, &vfio_fsl_mc_ops, vdev); -+ if (ret) { -+ dev_err(dev, "%s: Failed to add to vfio group\n", __func__); -+ vfio_iommu_group_put(group, dev); -+ return ret; -+ } -+ -+ return ret; -+} -+ -+static int vfio_fsl_mc_remove(struct fsl_mc_device *mc_dev) -+{ -+ struct vfio_fsl_mc_device *vdev; -+ struct device *dev = &mc_dev->dev; -+ -+ vdev = vfio_del_group_dev(dev); -+ if (!vdev) -+ return -EINVAL; -+ -+ vfio_iommu_group_put(mc_dev->dev.iommu_group, dev); -+ devm_kfree(dev, vdev); -+ -+ return 0; -+} -+ -+/* -+ * vfio-fsl_mc is a meta-driver, so use driver_override interface to -+ * bind a fsl_mc container with this driver and match_id_table is NULL. -+ */ -+static struct fsl_mc_driver vfio_fsl_mc_driver = { -+ .probe = vfio_fsl_mc_probe, -+ .remove = vfio_fsl_mc_remove, -+ .match_id_table = NULL, -+ .driver = { -+ .name = "vfio-fsl-mc", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init vfio_fsl_mc_driver_init(void) -+{ -+ return fsl_mc_driver_register(&vfio_fsl_mc_driver); -+} -+ -+static void __exit vfio_fsl_mc_driver_exit(void) -+{ -+ fsl_mc_driver_unregister(&vfio_fsl_mc_driver); -+} -+ -+module_init(vfio_fsl_mc_driver_init); -+module_exit(vfio_fsl_mc_driver_exit); -+ -+MODULE_LICENSE("GPL v2"); -+MODULE_DESCRIPTION("VFIO for FSL-MC devices - User Level meta-driver"); ---- /dev/null -+++ b/drivers/vfio/fsl-mc/vfio_fsl_mc_private.h -@@ -0,0 +1,14 @@ -+/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ -+/* -+ * Copyright 2013-2016 Freescale Semiconductor Inc. -+ * Copyright 2016,2019 NXP -+ */ -+ -+#ifndef VFIO_FSL_MC_PRIVATE_H -+#define VFIO_FSL_MC_PRIVATE_H -+ -+struct vfio_fsl_mc_device { -+ struct fsl_mc_device *mc_dev; -+}; -+ -+#endif /* VFIO_PCI_PRIVATE_H */ ---- a/include/uapi/linux/vfio.h -+++ b/include/uapi/linux/vfio.h -@@ -201,6 +201,7 @@ struct vfio_device_info { - #define VFIO_DEVICE_FLAGS_AMBA (1 << 3) /* vfio-amba device */ - #define VFIO_DEVICE_FLAGS_CCW (1 << 4) /* vfio-ccw device */ - #define VFIO_DEVICE_FLAGS_AP (1 << 5) /* vfio-ap device */ -+#define VFIO_DEVICE_FLAGS_FSL_MC (1 << 6) /* vfio-fsl-mc device */ - __u32 num_regions; /* Max region index + 1 */ - __u32 num_irqs; /* Max IRQ index + 1 */ - }; |