Driver to bind to Linux platform devices, and callbacks to discover their
resources to be used by the main VFIO PLATFORM code.
Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/platform/vfio_platform.c | 96 +++++++++++++++++++++++++++++++++++
include/uapi/linux/vfio.h | 1 +
2 files changed, 97 insertions(+)
create mode 100644 drivers/vfio/platform/vfio_platform.c
@@ -0,0 +1,96 @@+/*+*Copyright(C)2013-VirtualOpenSystems+*Author:AntoniosMotakis<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>+*+*Thisprogramisfreesoftware;youcanredistributeitand/ormodify+*itunderthetermsoftheGNUGeneralPublicLicense,version2,as+*publishedbytheFreeSoftwareFoundation.+*+*Thisprogramisdistributedinthehopethatitwillbeuseful,+*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof+*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe+*GNUGeneralPublicLicenseformoredetails.+*/++#include<linux/device.h>+#include<linux/eventfd.h>+#include<linux/interrupt.h>+#include<linux/iommu.h>+#include<linux/module.h>+#include<linux/mutex.h>+#include<linux/notifier.h>+#include<linux/pm_runtime.h>+#include<linux/slab.h>+#include<linux/types.h>+#include<linux/uaccess.h>+#include<linux/vfio.h>+#include<linux/io.h>+#include<linux/platform_device.h>+#include<linux/irq.h>++#include"vfio_platform_private.h"++#define DRIVER_VERSION "0.7"+#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"+#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"++/* probing devices from the linux platform bus */++staticstructresource*get_platform_resource(structvfio_platform_device*vdev,+inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_resource(pdev,IORESOURCE_MEM,i);+}++staticintget_platform_irq(structvfio_platform_device*vdev,inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_irq(pdev,i);+}+++staticintvfio_platform_probe(structplatform_device*pdev)+{+structvfio_platform_device*vdev;+intret;++vdev=kzalloc(sizeof(*vdev),GFP_KERNEL);+if(!vdev)+return-ENOMEM;++vdev->opaque=(void*)pdev;+vdev->name=pdev->name;+vdev->flags=VFIO_DEVICE_FLAGS_PLATFORM;+vdev->get_resource=get_platform_resource;+vdev->get_irq=get_platform_irq;++ret=vfio_platform_probe_common(vdev,&pdev->dev);+if(ret)+kfree(vdev);++returnret;+}++staticintvfio_platform_remove(structplatform_device*pdev)+{+returnvfio_platform_remove_common(&pdev->dev);+}++staticstructplatform_drivervfio_platform_driver={+.probe=vfio_platform_probe,+.remove=vfio_platform_remove,+.driver={+.name="vfio-platform",+.owner=THIS_MODULE,+},+};++module_platform_driver(vfio_platform_driver);++MODULE_VERSION(DRIVER_VERSION);+MODULE_LICENSE("GPL v2");+MODULE_AUTHOR(DRIVER_AUTHOR);+MODULE_DESCRIPTION(DRIVER_DESC);
From: Alex Williamson <hidden> Date: 2014-09-23 23:01:38
On Tue, 2014-09-23 at 16:46 +0200, Antonios Motakis wrote:
quoted hunk
Driver to bind to Linux platform devices, and callbacks to discover their
resources to be used by the main VFIO PLATFORM code.
Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/platform/vfio_platform.c | 96 +++++++++++++++++++++++++++++++++++
include/uapi/linux/vfio.h | 1 +
2 files changed, 97 insertions(+)
create mode 100644 drivers/vfio/platform/vfio_platform.c
@@ -0,0 +1,96 @@+/*+*Copyright(C)2013-VirtualOpenSystems+*Author:AntoniosMotakis<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>+*+*Thisprogramisfreesoftware;youcanredistributeitand/ormodify+*itunderthetermsoftheGNUGeneralPublicLicense,version2,as+*publishedbytheFreeSoftwareFoundation.+*+*Thisprogramisdistributedinthehopethatitwillbeuseful,+*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof+*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe+*GNUGeneralPublicLicenseformoredetails.+*/++#include<linux/device.h>+#include<linux/eventfd.h>+#include<linux/interrupt.h>+#include<linux/iommu.h>+#include<linux/module.h>+#include<linux/mutex.h>+#include<linux/notifier.h>+#include<linux/pm_runtime.h>+#include<linux/slab.h>+#include<linux/types.h>+#include<linux/uaccess.h>+#include<linux/vfio.h>+#include<linux/io.h>+#include<linux/platform_device.h>+#include<linux/irq.h>++#include"vfio_platform_private.h"++#define DRIVER_VERSION "0.7"+#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"+#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"++/* probing devices from the linux platform bus */++staticstructresource*get_platform_resource(structvfio_platform_device*vdev,+inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_resource(pdev,IORESOURCE_MEM,i);
ARM may only support IORESOURCE_MEM, but I don't think platform devices
are limited to MMIO, right? vfio-platform shouldn't be either.
On Wed, Sep 24, 2014 at 1:01 AM, Alex Williamson
[off-list ref] wrote:
On Tue, 2014-09-23 at 16:46 +0200, Antonios Motakis wrote:
quoted
Driver to bind to Linux platform devices, and callbacks to discover their
resources to be used by the main VFIO PLATFORM code.
Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/platform/vfio_platform.c | 96 +++++++++++++++++++++++++++++++++++
include/uapi/linux/vfio.h | 1 +
2 files changed, 97 insertions(+)
create mode 100644 drivers/vfio/platform/vfio_platform.c
@@ -0,0 +1,96 @@+/*+*Copyright(C)2013-VirtualOpenSystems+*Author:AntoniosMotakis<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>+*+*Thisprogramisfreesoftware;youcanredistributeitand/ormodify+*itunderthetermsoftheGNUGeneralPublicLicense,version2,as+*publishedbytheFreeSoftwareFoundation.+*+*Thisprogramisdistributedinthehopethatitwillbeuseful,+*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof+*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe+*GNUGeneralPublicLicenseformoredetails.+*/++#include<linux/device.h>+#include<linux/eventfd.h>+#include<linux/interrupt.h>+#include<linux/iommu.h>+#include<linux/module.h>+#include<linux/mutex.h>+#include<linux/notifier.h>+#include<linux/pm_runtime.h>+#include<linux/slab.h>+#include<linux/types.h>+#include<linux/uaccess.h>+#include<linux/vfio.h>+#include<linux/io.h>+#include<linux/platform_device.h>+#include<linux/irq.h>++#include"vfio_platform_private.h"++#define DRIVER_VERSION "0.7"+#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"+#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"++/* probing devices from the linux platform bus */++staticstructresource*get_platform_resource(structvfio_platform_device*vdev,+inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_resource(pdev,IORESOURCE_MEM,i);
ARM may only support IORESOURCE_MEM, but I don't think platform devices
are limited to MMIO, right? vfio-platform shouldn't be either.
Indeed. Should we however implement this lacking a target to verify it
is working correctly?
Leaving it out would mean PIO resources for those devices would not be
exposed before an update to VFIO, but we wouldn't have to break
backward compatibility I think.
Would you prefer to have it implemented regardless?
From: Alex Williamson <hidden> Date: 2014-09-26 20:19:15
On Fri, 2014-09-26 at 17:30 +0200, Antonios Motakis wrote:
On Wed, Sep 24, 2014 at 1:01 AM, Alex Williamson
[off-list ref] wrote:
quoted
On Tue, 2014-09-23 at 16:46 +0200, Antonios Motakis wrote:
quoted
Driver to bind to Linux platform devices, and callbacks to discover their
resources to be used by the main VFIO PLATFORM code.
Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/platform/vfio_platform.c | 96 +++++++++++++++++++++++++++++++++++
include/uapi/linux/vfio.h | 1 +
2 files changed, 97 insertions(+)
create mode 100644 drivers/vfio/platform/vfio_platform.c
@@ -0,0 +1,96 @@+/*+*Copyright(C)2013-VirtualOpenSystems+*Author:AntoniosMotakis<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>+*+*Thisprogramisfreesoftware;youcanredistributeitand/ormodify+*itunderthetermsoftheGNUGeneralPublicLicense,version2,as+*publishedbytheFreeSoftwareFoundation.+*+*Thisprogramisdistributedinthehopethatitwillbeuseful,+*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof+*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe+*GNUGeneralPublicLicenseformoredetails.+*/++#include<linux/device.h>+#include<linux/eventfd.h>+#include<linux/interrupt.h>+#include<linux/iommu.h>+#include<linux/module.h>+#include<linux/mutex.h>+#include<linux/notifier.h>+#include<linux/pm_runtime.h>+#include<linux/slab.h>+#include<linux/types.h>+#include<linux/uaccess.h>+#include<linux/vfio.h>+#include<linux/io.h>+#include<linux/platform_device.h>+#include<linux/irq.h>++#include"vfio_platform_private.h"++#define DRIVER_VERSION "0.7"+#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"+#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"++/* probing devices from the linux platform bus */++staticstructresource*get_platform_resource(structvfio_platform_device*vdev,+inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_resource(pdev,IORESOURCE_MEM,i);
ARM may only support IORESOURCE_MEM, but I don't think platform devices
are limited to MMIO, right? vfio-platform shouldn't be either.
Indeed. Should we however implement this lacking a target to verify it
is working correctly?
Leaving it out would mean PIO resources for those devices would not be
exposed before an update to VFIO, but we wouldn't have to break
backward compatibility I think.
Would you prefer to have it implemented regardless?
I think we need to have PIO figured out at least enough to have stubbed
read/write handlers that could be filled in by someone with test
hardware. I'm not sure I fully understand how a user associates a
region index to a device tree description, whether it's ordering or
something more complicated, so I'm not sure if simply listing all the
PIO resources after the MMIO resources is sufficient and compatible.
Maybe you have some thoughts on that. Thanks,
Alex
On Fri, Sep 26, 2014 at 10:18 PM, Alex Williamson
[off-list ref] wrote:
On Fri, 2014-09-26 at 17:30 +0200, Antonios Motakis wrote:
quoted
On Wed, Sep 24, 2014 at 1:01 AM, Alex Williamson
[off-list ref] wrote:
quoted
On Tue, 2014-09-23 at 16:46 +0200, Antonios Motakis wrote:
quoted
Driver to bind to Linux platform devices, and callbacks to discover their
resources to be used by the main VFIO PLATFORM code.
Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
---
drivers/vfio/platform/vfio_platform.c | 96 +++++++++++++++++++++++++++++++++++
include/uapi/linux/vfio.h | 1 +
2 files changed, 97 insertions(+)
create mode 100644 drivers/vfio/platform/vfio_platform.c
@@ -0,0 +1,96 @@+/*+*Copyright(C)2013-VirtualOpenSystems+*Author:AntoniosMotakis<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>+*+*Thisprogramisfreesoftware;youcanredistributeitand/ormodify+*itunderthetermsoftheGNUGeneralPublicLicense,version2,as+*publishedbytheFreeSoftwareFoundation.+*+*Thisprogramisdistributedinthehopethatitwillbeuseful,+*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof+*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe+*GNUGeneralPublicLicenseformoredetails.+*/++#include<linux/device.h>+#include<linux/eventfd.h>+#include<linux/interrupt.h>+#include<linux/iommu.h>+#include<linux/module.h>+#include<linux/mutex.h>+#include<linux/notifier.h>+#include<linux/pm_runtime.h>+#include<linux/slab.h>+#include<linux/types.h>+#include<linux/uaccess.h>+#include<linux/vfio.h>+#include<linux/io.h>+#include<linux/platform_device.h>+#include<linux/irq.h>++#include"vfio_platform_private.h"++#define DRIVER_VERSION "0.7"+#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"+#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"++/* probing devices from the linux platform bus */++staticstructresource*get_platform_resource(structvfio_platform_device*vdev,+inti)+{+structplatform_device*pdev=(structplatform_device*)vdev->opaque;++returnplatform_get_resource(pdev,IORESOURCE_MEM,i);
ARM may only support IORESOURCE_MEM, but I don't think platform devices
are limited to MMIO, right? vfio-platform shouldn't be either.
Indeed. Should we however implement this lacking a target to verify it
is working correctly?
Leaving it out would mean PIO resources for those devices would not be
exposed before an update to VFIO, but we wouldn't have to break
backward compatibility I think.
Would you prefer to have it implemented regardless?
I think we need to have PIO figured out at least enough to have stubbed
read/write handlers that could be filled in by someone with test
hardware. I'm not sure I fully understand how a user associates a
region index to a device tree description, whether it's ordering or
something more complicated, so I'm not sure if simply listing all the
PIO resources after the MMIO resources is sufficient and compatible.
Maybe you have some thoughts on that. Thanks,
You are right. I'm not aware if the Linux calls used are guaranteed to
preserve ordering of PIO/MMIO resources, I will investigate a bit on
that.