diff options
author | Eric Auger <eric.auger@linaro.org> | 2015-11-03 13:12:16 -0500 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2015-11-03 14:55:02 -0500 |
commit | 0628c4dfd3a781c09aed983cc79b3c43c5c568bd (patch) | |
tree | a38b740d72ef4488772cdd618c74483cc957a2e7 /drivers/vfio | |
parent | 680742f644be61657f82d43a2c2fff0489d4a579 (diff) |
vfio: platform: add compat in vfio_platform_device
Let's retrieve the compatibility string on probe and store it
in the vfio_platform_device struct
Signed-off-by: Eric Auger <eric.auger@linaro.org>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r-- | drivers/vfio/platform/vfio_platform_common.c | 15 | ||||
-rw-r--r-- | drivers/vfio/platform/vfio_platform_private.h | 1 |
2 files changed, 9 insertions, 7 deletions
diff --git a/drivers/vfio/platform/vfio_platform_common.c b/drivers/vfio/platform/vfio_platform_common.c index 7decc50ccf30..d8df8a4318da 100644 --- a/drivers/vfio/platform/vfio_platform_common.c +++ b/drivers/vfio/platform/vfio_platform_common.c | |||
@@ -41,16 +41,11 @@ static const struct vfio_platform_reset_combo reset_lookup_table[] = { | |||
41 | static void vfio_platform_get_reset(struct vfio_platform_device *vdev, | 41 | static void vfio_platform_get_reset(struct vfio_platform_device *vdev, |
42 | struct device *dev) | 42 | struct device *dev) |
43 | { | 43 | { |
44 | const char *compat; | ||
45 | int (*reset)(struct vfio_platform_device *); | 44 | int (*reset)(struct vfio_platform_device *); |
46 | int ret, i; | 45 | int i; |
47 | |||
48 | ret = device_property_read_string(dev, "compatible", &compat); | ||
49 | if (ret) | ||
50 | return; | ||
51 | 46 | ||
52 | for (i = 0 ; i < ARRAY_SIZE(reset_lookup_table); i++) { | 47 | for (i = 0 ; i < ARRAY_SIZE(reset_lookup_table); i++) { |
53 | if (!strcmp(reset_lookup_table[i].compat, compat)) { | 48 | if (!strcmp(reset_lookup_table[i].compat, vdev->compat)) { |
54 | request_module(reset_lookup_table[i].module_name); | 49 | request_module(reset_lookup_table[i].module_name); |
55 | reset = __symbol_get( | 50 | reset = __symbol_get( |
56 | reset_lookup_table[i].reset_function_name); | 51 | reset_lookup_table[i].reset_function_name); |
@@ -544,6 +539,12 @@ int vfio_platform_probe_common(struct vfio_platform_device *vdev, | |||
544 | if (!vdev) | 539 | if (!vdev) |
545 | return -EINVAL; | 540 | return -EINVAL; |
546 | 541 | ||
542 | ret = device_property_read_string(dev, "compatible", &vdev->compat); | ||
543 | if (ret) { | ||
544 | pr_err("VFIO: cannot retrieve compat for %s\n", vdev->name); | ||
545 | return -EINVAL; | ||
546 | } | ||
547 | |||
547 | group = iommu_group_get(dev); | 548 | group = iommu_group_get(dev); |
548 | if (!group) { | 549 | if (!group) { |
549 | pr_err("VFIO: No IOMMU group for device %s\n", vdev->name); | 550 | pr_err("VFIO: No IOMMU group for device %s\n", vdev->name); |
diff --git a/drivers/vfio/platform/vfio_platform_private.h b/drivers/vfio/platform/vfio_platform_private.h index fd262be2a443..415310f62b06 100644 --- a/drivers/vfio/platform/vfio_platform_private.h +++ b/drivers/vfio/platform/vfio_platform_private.h | |||
@@ -57,6 +57,7 @@ struct vfio_platform_device { | |||
57 | int refcnt; | 57 | int refcnt; |
58 | struct mutex igate; | 58 | struct mutex igate; |
59 | struct module *parent_module; | 59 | struct module *parent_module; |
60 | const char *compat; | ||
60 | 61 | ||
61 | /* | 62 | /* |
62 | * These fields should be filled by the bus specific binder | 63 | * These fields should be filled by the bus specific binder |