BACKPORT: FROMGIT: drm/evdi: Port evdi_painter_connect ioctl api change
(cherry picked from commit 09f7798e1ac8afbe669014f53bac1a0c5610a123
https://github.com/DisplayLink/evdi devel)
BUG=none
TEST=various boards including sarien, trogdor
Cq-Depend: chromium:4454870
Change-Id: I8dca339fbaeee87079c64b7611725dc728027a6e
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/4454868
Reviewed-by: Dominik Behr <dbehr@chromium.org>
diff --git a/drivers/gpu/drm/evdi/evdi_connector.c b/drivers/gpu/drm/evdi/evdi_connector.c
index 0a3a271..a4b391e 100644
--- a/drivers/gpu/drm/evdi/evdi_connector.c
+++ b/drivers/gpu/drm/evdi/evdi_connector.c
@@ -49,12 +49,14 @@
struct drm_display_mode *mode)
{
struct evdi_device *evdi = connector->dev->dev_private;
- uint32_t mode_area = mode->hdisplay * mode->vdisplay;
+ uint32_t area_limit = mode->hdisplay * mode->vdisplay;
+ uint32_t mode_limit = area_limit * drm_mode_vrefresh(mode);
- if (evdi->sku_area_limit == 0)
+ if (evdi->pixel_per_second_limit == 0)
return MODE_OK;
- if (mode_area > evdi->sku_area_limit) {
+ if (area_limit > evdi->pixel_area_limit ||
+ mode_limit > evdi->pixel_per_second_limit) {
EVDI_WARN("(dev=%d) Mode %dx%d@%d rejected\n",
evdi->dev_index,
mode->hdisplay,
diff --git a/drivers/gpu/drm/evdi/evdi_drv.h b/drivers/gpu/drm/evdi/evdi_drv.h
index 436497a..edd9896 100644
--- a/drivers/gpu/drm/evdi/evdi_drv.h
+++ b/drivers/gpu/drm/evdi/evdi_drv.h
@@ -41,7 +41,8 @@
struct evdi_cursor *cursor;
bool cursor_events_enabled;
- uint32_t sku_area_limit;
+ uint32_t pixel_area_limit;
+ uint32_t pixel_per_second_limit;
struct evdi_fbdev *fbdev;
struct evdi_painter *painter;
@@ -167,4 +168,3 @@
struct i2c_msg *msg);
int evdi_fb_get_bpp(uint32_t format);
#endif
-
diff --git a/drivers/gpu/drm/evdi/evdi_ioc32.c b/drivers/gpu/drm/evdi/evdi_ioc32.c
index 8b97f65..d16b4cc 100644
--- a/drivers/gpu/drm/evdi/evdi_ioc32.c
+++ b/drivers/gpu/drm/evdi/evdi_ioc32.c
@@ -31,7 +31,8 @@
int32_t dev_index;
uint32_t edid_ptr32;
uint32_t edid_length;
- uint32_t sku_area_limit;
+ uint32_t pixel_area_limit;
+ uint32_t pixel_per_second_limit;
};
struct drm_evdi_grabpix32 {
@@ -61,7 +62,8 @@
|| __put_user((void __user *)(unsigned long)req32.edid_ptr32,
&request->edid)
|| __put_user(req32.edid_length, &request->edid_length)
- || __put_user(req32.sku_area_limit, &request->sku_area_limit))
+ || __put_user(req32.pixel_area_limit, &request->pixel_area_limit)
+ || __put_user(req32.pixel_per_second_limit, &request->pixel_per_second_limit))
return -EFAULT;
return drm_ioctl(file, DRM_IOCTL_EVDI_CONNECT,
diff --git a/drivers/gpu/drm/evdi/evdi_painter.c b/drivers/gpu/drm/evdi/evdi_painter.c
index f9aafe1..01e8ac8 100644
--- a/drivers/gpu/drm/evdi/evdi_painter.c
+++ b/drivers/gpu/drm/evdi/evdi_painter.c
@@ -720,7 +720,8 @@
static int
evdi_painter_connect(struct evdi_device *evdi,
void const __user *edid_data, unsigned int edid_length,
- uint32_t sku_area_limit,
+ uint32_t pixel_area_limit,
+ uint32_t pixel_per_second_limit,
struct drm_file *file, int dev_index)
{
struct evdi_painter *painter = evdi->painter;
@@ -769,7 +770,8 @@
painter_lock(painter);
evdi->dev_index = dev_index;
- evdi->sku_area_limit = sku_area_limit;
+ evdi->pixel_area_limit = pixel_area_limit;
+ evdi->pixel_per_second_limit = pixel_per_second_limit;
painter->drm_filp = file;
kfree(painter->edid);
painter->edid_length = edid_length;
@@ -864,7 +866,8 @@
ret = evdi_painter_connect(evdi,
cmd->edid,
cmd->edid_length,
- cmd->sku_area_limit,
+ cmd->pixel_area_limit,
+ cmd->pixel_per_second_limit,
file,
cmd->dev_index);
else
diff --git a/include/uapi/drm/evdi_drm.h b/include/uapi/drm/evdi_drm.h
index c43e5fb..37345f9 100644
--- a/include/uapi/drm/evdi_drm.h
+++ b/include/uapi/drm/evdi_drm.h
@@ -46,7 +46,8 @@
int32_t dev_index;
const unsigned char * __user edid;
uint32_t edid_length;
- uint32_t sku_area_limit;
+ uint32_t pixel_area_limit;
+ uint32_t pixel_per_second_limit;
};
struct drm_evdi_request_update {
@@ -128,4 +129,3 @@
DRM_EVDI_ENABLE_CURSOR_EVENTS, struct drm_evdi_enable_cursor_events)
#endif /* __EVDI_UAPI_DRM_H__ */
-