aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/821-vfio-0001-vfio-fsl-mc-Add-VFIO-framework-skeleton-for-fsl-mc-d.patch
diff options
context:
space:
mode:
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.patch252
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 */
- };