hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/fpga/dfl-fme-pr.c
....@@ -74,6 +74,7 @@
7474 struct dfl_fme *fme;
7575 unsigned long minsz;
7676 void *buf = NULL;
77
+ size_t length;
7778 int ret = 0;
7879 u64 v;
7980
....@@ -83,9 +84,6 @@
8384 return -EFAULT;
8485
8586 if (port_pr.argsz < minsz || port_pr.flags)
86
- return -EINVAL;
87
-
88
- if (!IS_ALIGNED(port_pr.buffer_size, 4))
8987 return -EINVAL;
9088
9189 /* get fme header region */
....@@ -99,12 +97,13 @@
9997 return -EINVAL;
10098 }
10199
102
- if (!access_ok(VERIFY_READ,
103
- (void __user *)(unsigned long)port_pr.buffer_address,
104
- port_pr.buffer_size))
105
- return -EFAULT;
100
+ /*
101
+ * align PR buffer per PR bandwidth, as HW ignores the extra padding
102
+ * data automatically.
103
+ */
104
+ length = ALIGN(port_pr.buffer_size, 4);
106105
107
- buf = vmalloc(port_pr.buffer_size);
106
+ buf = vmalloc(length);
108107 if (!buf)
109108 return -ENOMEM;
110109
....@@ -141,7 +140,7 @@
141140 fpga_image_info_free(region->info);
142141
143142 info->buf = buf;
144
- info->count = port_pr.buffer_size;
143
+ info->count = length;
145144 info->region_id = port_pr.port_id;
146145 region->info = info;
147146
....@@ -160,9 +159,6 @@
160159 mutex_unlock(&pdata->lock);
161160 free_exit:
162161 vfree(buf);
163
- if (copy_to_user((void __user *)arg, &port_pr, minsz))
164
- return -EFAULT;
165
-
166162 return ret;
167163 }
168164
....@@ -444,10 +440,8 @@
444440 struct dfl_feature *feature)
445441 {
446442 struct dfl_feature_platform_data *pdata = dev_get_platdata(&pdev->dev);
447
- struct dfl_fme *priv;
448443
449444 mutex_lock(&pdata->lock);
450
- priv = dfl_fpga_pdata_get_private(pdata);
451445
452446 dfl_fme_destroy_regions(pdata);
453447 dfl_fme_destroy_bridges(pdata);
....@@ -472,7 +466,12 @@
472466 return ret;
473467 }
474468
475
-const struct dfl_feature_ops pr_mgmt_ops = {
469
+const struct dfl_feature_id fme_pr_mgmt_id_table[] = {
470
+ {.id = FME_FEATURE_ID_PR_MGMT,},
471
+ {0}
472
+};
473
+
474
+const struct dfl_feature_ops fme_pr_mgmt_ops = {
476475 .init = pr_mgmt_init,
477476 .uinit = pr_mgmt_uinit,
478477 .ioctl = fme_pr_ioctl,