|
@@ -41,16 +41,11 @@ static const struct vfio_platform_reset_combo reset_lookup_table[] = {
|
|
|
static void vfio_platform_get_reset(struct vfio_platform_device *vdev,
|
|
|
struct device *dev)
|
|
|
{
|
|
|
- const char *compat;
|
|
|
int (*reset)(struct vfio_platform_device *);
|
|
|
- int ret, i;
|
|
|
-
|
|
|
- ret = device_property_read_string(dev, "compatible", &compat);
|
|
|
- if (ret)
|
|
|
- return;
|
|
|
+ int i;
|
|
|
|
|
|
for (i = 0 ; i < ARRAY_SIZE(reset_lookup_table); i++) {
|
|
|
- if (!strcmp(reset_lookup_table[i].compat, compat)) {
|
|
|
+ if (!strcmp(reset_lookup_table[i].compat, vdev->compat)) {
|
|
|
request_module(reset_lookup_table[i].module_name);
|
|
|
reset = __symbol_get(
|
|
|
reset_lookup_table[i].reset_function_name);
|
|
@@ -544,6 +539,12 @@ int vfio_platform_probe_common(struct vfio_platform_device *vdev,
|
|
|
if (!vdev)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ ret = device_property_read_string(dev, "compatible", &vdev->compat);
|
|
|
+ if (ret) {
|
|
|
+ pr_err("VFIO: cannot retrieve compat for %s\n", vdev->name);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
group = iommu_group_get(dev);
|
|
|
if (!group) {
|
|
|
pr_err("VFIO: No IOMMU group for device %s\n", vdev->name);
|