aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c12
-rw-r--r--drivers/gpu/drm/drm_atomic_uapi.c2
-rw-r--r--drivers/gpu/drm/drm_bufs.c32
-rw-r--r--drivers/gpu/drm/drm_client.c2
-rw-r--r--drivers/gpu/drm/drm_color_mgmt.c4
-rw-r--r--drivers/gpu/drm/drm_connector.c2
-rw-r--r--drivers/gpu/drm/drm_context.c16
-rw-r--r--drivers/gpu/drm/drm_crtc.c4
-rw-r--r--drivers/gpu/drm/drm_dp_helper.c17
-rw-r--r--drivers/gpu/drm/drm_drv.c3
-rw-r--r--drivers/gpu/drm/drm_encoder.c2
-rw-r--r--drivers/gpu/drm/drm_framebuffer.c13
-rw-r--r--drivers/gpu/drm/drm_gem.c6
-rw-r--r--drivers/gpu/drm/drm_ioctl.c4
-rw-r--r--drivers/gpu/drm/drm_irq.c4
-rw-r--r--drivers/gpu/drm/drm_lease.c8
-rw-r--r--drivers/gpu/drm/drm_lock.c4
-rw-r--r--drivers/gpu/drm/drm_mode_config.c3
-rw-r--r--drivers/gpu/drm/drm_mode_object.c4
-rw-r--r--drivers/gpu/drm/drm_pci.c4
-rw-r--r--drivers/gpu/drm/drm_plane.c10
-rw-r--r--drivers/gpu/drm/drm_prime.c4
-rw-r--r--drivers/gpu/drm/drm_property.c8
-rw-r--r--drivers/gpu/drm/drm_scatter.c8
-rw-r--r--drivers/gpu/drm/drm_syncobj.c14
-rw-r--r--drivers/gpu/drm/drm_vblank.c4
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c8
-rw-r--r--drivers/gpu/drm/i915/intel_display.c28
-rw-r--r--drivers/gpu/drm/i915/intel_display.h2
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c8
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c6
-rw-r--r--drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c12
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.h8
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_fb.c7
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_vq.c18
35 files changed, 168 insertions, 123 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 6870909da926..8c1db96be070 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -816,17 +816,13 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
816 if (ret) 816 if (ret)
817 return ret; 817 return ret;
818 818
819 /* warn the user if they mix atomic and non-atomic capable GPUs */
820 if ((kms_driver.driver_features & DRIVER_ATOMIC) && !supports_atomic)
821 DRM_ERROR("Mixing atomic and non-atomic capable GPUs!\n");
822 /* support atomic early so the atomic debugfs stuff gets created */
823 if (supports_atomic)
824 kms_driver.driver_features |= DRIVER_ATOMIC;
825
826 dev = drm_dev_alloc(&kms_driver, &pdev->dev); 819 dev = drm_dev_alloc(&kms_driver, &pdev->dev);
827 if (IS_ERR(dev)) 820 if (IS_ERR(dev))
828 return PTR_ERR(dev); 821 return PTR_ERR(dev);
829 822
823 if (!supports_atomic)
824 dev->driver_features &= ~DRIVER_ATOMIC;
825
830 ret = pci_enable_device(pdev); 826 ret = pci_enable_device(pdev);
831 if (ret) 827 if (ret)
832 goto err_free; 828 goto err_free;
@@ -1078,7 +1074,7 @@ amdgpu_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe,
1078 1074
1079static struct drm_driver kms_driver = { 1075static struct drm_driver kms_driver = {
1080 .driver_features = 1076 .driver_features =
1081 DRIVER_USE_AGP | 1077 DRIVER_USE_AGP | DRIVER_ATOMIC |
1082 DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | 1078 DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
1083 DRIVER_PRIME | DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ, 1079 DRIVER_PRIME | DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ,
1084 .load = amdgpu_driver_load_kms, 1080 .load = amdgpu_driver_load_kms,
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 26690a664ec6..d5b7f315098c 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -1251,7 +1251,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
1251 1251
1252 /* disallow for drivers not supporting atomic: */ 1252 /* disallow for drivers not supporting atomic: */
1253 if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) 1253 if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
1254 return -EINVAL; 1254 return -EOPNOTSUPP;
1255 1255
1256 /* disallow for userspace that has not enabled atomic cap (even 1256 /* disallow for userspace that has not enabled atomic cap (even
1257 * though this may be a bit overkill, since legacy userspace 1257 * though this may be a bit overkill, since legacy userspace
diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
index ba8cfe65c65b..7412acaf3cde 100644
--- a/drivers/gpu/drm/drm_bufs.c
+++ b/drivers/gpu/drm/drm_bufs.c
@@ -398,7 +398,7 @@ int drm_legacy_addmap_ioctl(struct drm_device *dev, void *data,
398 398
399 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 399 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
400 !drm_core_check_feature(dev, DRIVER_LEGACY)) 400 !drm_core_check_feature(dev, DRIVER_LEGACY))
401 return -EINVAL; 401 return -EOPNOTSUPP;
402 402
403 err = drm_addmap_core(dev, map->offset, map->size, map->type, 403 err = drm_addmap_core(dev, map->offset, map->size, map->type,
404 map->flags, &maplist); 404 map->flags, &maplist);
@@ -444,7 +444,7 @@ int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
444 444
445 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 445 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
446 !drm_core_check_feature(dev, DRIVER_LEGACY)) 446 !drm_core_check_feature(dev, DRIVER_LEGACY))
447 return -EINVAL; 447 return -EOPNOTSUPP;
448 448
449 idx = map->offset; 449 idx = map->offset;
450 if (idx < 0) 450 if (idx < 0)
@@ -596,7 +596,7 @@ int drm_legacy_rmmap_ioctl(struct drm_device *dev, void *data,
596 596
597 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 597 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
598 !drm_core_check_feature(dev, DRIVER_LEGACY)) 598 !drm_core_check_feature(dev, DRIVER_LEGACY))
599 return -EINVAL; 599 return -EOPNOTSUPP;
600 600
601 mutex_lock(&dev->struct_mutex); 601 mutex_lock(&dev->struct_mutex);
602 list_for_each_entry(r_list, &dev->maplist, head) { 602 list_for_each_entry(r_list, &dev->maplist, head) {
@@ -860,7 +860,7 @@ int drm_legacy_addbufs_pci(struct drm_device *dev,
860 struct drm_buf **temp_buflist; 860 struct drm_buf **temp_buflist;
861 861
862 if (!drm_core_check_feature(dev, DRIVER_PCI_DMA)) 862 if (!drm_core_check_feature(dev, DRIVER_PCI_DMA))
863 return -EINVAL; 863 return -EOPNOTSUPP;
864 864
865 if (!dma) 865 if (!dma)
866 return -EINVAL; 866 return -EINVAL;
@@ -1064,7 +1064,7 @@ static int drm_legacy_addbufs_sg(struct drm_device *dev,
1064 struct drm_buf **temp_buflist; 1064 struct drm_buf **temp_buflist;
1065 1065
1066 if (!drm_core_check_feature(dev, DRIVER_SG)) 1066 if (!drm_core_check_feature(dev, DRIVER_SG))
1067 return -EINVAL; 1067 return -EOPNOTSUPP;
1068 1068
1069 if (!dma) 1069 if (!dma)
1070 return -EINVAL; 1070 return -EINVAL;
@@ -1221,10 +1221,10 @@ int drm_legacy_addbufs(struct drm_device *dev, void *data,
1221 int ret; 1221 int ret;
1222 1222
1223 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1223 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1224 return -EINVAL; 1224 return -EOPNOTSUPP;
1225 1225
1226 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 1226 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
1227 return -EINVAL; 1227 return -EOPNOTSUPP;
1228 1228
1229#if IS_ENABLED(CONFIG_AGP) 1229#if IS_ENABLED(CONFIG_AGP)
1230 if (request->flags & _DRM_AGP_BUFFER) 1230 if (request->flags & _DRM_AGP_BUFFER)
@@ -1267,10 +1267,10 @@ int __drm_legacy_infobufs(struct drm_device *dev,
1267 int count; 1267 int count;
1268 1268
1269 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1269 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1270 return -EINVAL; 1270 return -EOPNOTSUPP;
1271 1271
1272 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 1272 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
1273 return -EINVAL; 1273 return -EOPNOTSUPP;
1274 1274
1275 if (!dma) 1275 if (!dma)
1276 return -EINVAL; 1276 return -EINVAL;
@@ -1352,10 +1352,10 @@ int drm_legacy_markbufs(struct drm_device *dev, void *data,
1352 struct drm_buf_entry *entry; 1352 struct drm_buf_entry *entry;
1353 1353
1354 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1354 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1355 return -EINVAL; 1355 return -EOPNOTSUPP;
1356 1356
1357 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 1357 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
1358 return -EINVAL; 1358 return -EOPNOTSUPP;
1359 1359
1360 if (!dma) 1360 if (!dma)
1361 return -EINVAL; 1361 return -EINVAL;
@@ -1400,10 +1400,10 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data,
1400 struct drm_buf *buf; 1400 struct drm_buf *buf;
1401 1401
1402 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1402 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1403 return -EINVAL; 1403 return -EOPNOTSUPP;
1404 1404
1405 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 1405 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
1406 return -EINVAL; 1406 return -EOPNOTSUPP;
1407 1407
1408 if (!dma) 1408 if (!dma)
1409 return -EINVAL; 1409 return -EINVAL;
@@ -1455,10 +1455,10 @@ int __drm_legacy_mapbufs(struct drm_device *dev, void *data, int *p,
1455 int i; 1455 int i;
1456 1456
1457 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1457 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1458 return -EINVAL; 1458 return -EOPNOTSUPP;
1459 1459
1460 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) 1460 if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
1461 return -EINVAL; 1461 return -EOPNOTSUPP;
1462 1462
1463 if (!dma) 1463 if (!dma)
1464 return -EINVAL; 1464 return -EINVAL;
@@ -1545,7 +1545,7 @@ int drm_legacy_dma_ioctl(struct drm_device *dev, void *data,
1545 struct drm_file *file_priv) 1545 struct drm_file *file_priv)
1546{ 1546{
1547 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 1547 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1548 return -EINVAL; 1548 return -EOPNOTSUPP;
1549 1549
1550 if (dev->driver->dma_ioctl) 1550 if (dev->driver->dma_ioctl)
1551 return dev->driver->dma_ioctl(dev, data, file_priv); 1551 return dev->driver->dma_ioctl(dev, data, file_priv);
diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
index baff50a4c234..17d9a64e885e 100644
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -82,7 +82,7 @@ int drm_client_new(struct drm_device *dev, struct drm_client_dev *client,
82 82
83 if (!drm_core_check_feature(dev, DRIVER_MODESET) || 83 if (!drm_core_check_feature(dev, DRIVER_MODESET) ||
84 !dev->driver->dumb_create || !dev->driver->gem_prime_vmap) 84 !dev->driver->dumb_create || !dev->driver->gem_prime_vmap)
85 return -ENOTSUPP; 85 return -EOPNOTSUPP;
86 86
87 if (funcs && !try_module_get(funcs->owner)) 87 if (funcs && !try_module_get(funcs->owner))
88 return -ENODEV; 88 return -ENODEV;
diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c
index b97e2de2c029..581cc3788223 100644
--- a/drivers/gpu/drm/drm_color_mgmt.c
+++ b/drivers/gpu/drm/drm_color_mgmt.c
@@ -242,7 +242,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
242 int ret = 0; 242 int ret = 0;
243 243
244 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 244 if (!drm_core_check_feature(dev, DRIVER_MODESET))
245 return -EINVAL; 245 return -EOPNOTSUPP;
246 246
247 crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id); 247 crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
248 if (!crtc) 248 if (!crtc)
@@ -320,7 +320,7 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
320 int ret = 0; 320 int ret = 0;
321 321
322 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 322 if (!drm_core_check_feature(dev, DRIVER_MODESET))
323 return -EINVAL; 323 return -EOPNOTSUPP;
324 324
325 crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id); 325 crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
326 if (!crtc) 326 if (!crtc)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 526619f963e5..1e40e5decbe9 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1725,7 +1725,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1725 LIST_HEAD(export_list); 1725 LIST_HEAD(export_list);
1726 1726
1727 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 1727 if (!drm_core_check_feature(dev, DRIVER_MODESET))
1728 return -EINVAL; 1728 return -EOPNOTSUPP;
1729 1729
1730 memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo)); 1730 memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
1731 1731
diff --git a/drivers/gpu/drm/drm_context.c b/drivers/gpu/drm/drm_context.c
index f973d287696a..506663c69b0a 100644
--- a/drivers/gpu/drm/drm_context.c
+++ b/drivers/gpu/drm/drm_context.c
@@ -178,7 +178,7 @@ int drm_legacy_getsareactx(struct drm_device *dev, void *data,
178 178
179 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 179 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
180 !drm_core_check_feature(dev, DRIVER_LEGACY)) 180 !drm_core_check_feature(dev, DRIVER_LEGACY))
181 return -EINVAL; 181 return -EOPNOTSUPP;
182 182
183 mutex_lock(&dev->struct_mutex); 183 mutex_lock(&dev->struct_mutex);
184 184
@@ -226,7 +226,7 @@ int drm_legacy_setsareactx(struct drm_device *dev, void *data,
226 226
227 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 227 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
228 !drm_core_check_feature(dev, DRIVER_LEGACY)) 228 !drm_core_check_feature(dev, DRIVER_LEGACY))
229 return -EINVAL; 229 return -EOPNOTSUPP;
230 230
231 mutex_lock(&dev->struct_mutex); 231 mutex_lock(&dev->struct_mutex);
232 list_for_each_entry(r_list, &dev->maplist, head) { 232 list_for_each_entry(r_list, &dev->maplist, head) {
@@ -330,7 +330,7 @@ int drm_legacy_resctx(struct drm_device *dev, void *data,
330 330
331 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 331 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
332 !drm_core_check_feature(dev, DRIVER_LEGACY)) 332 !drm_core_check_feature(dev, DRIVER_LEGACY))
333 return -EINVAL; 333 return -EOPNOTSUPP;
334 334
335 if (res->count >= DRM_RESERVED_CONTEXTS) { 335 if (res->count >= DRM_RESERVED_CONTEXTS) {
336 memset(&ctx, 0, sizeof(ctx)); 336 memset(&ctx, 0, sizeof(ctx));
@@ -364,7 +364,7 @@ int drm_legacy_addctx(struct drm_device *dev, void *data,
364 364
365 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 365 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
366 !drm_core_check_feature(dev, DRIVER_LEGACY)) 366 !drm_core_check_feature(dev, DRIVER_LEGACY))
367 return -EINVAL; 367 return -EOPNOTSUPP;
368 368
369 ctx->handle = drm_legacy_ctxbitmap_next(dev); 369 ctx->handle = drm_legacy_ctxbitmap_next(dev);
370 if (ctx->handle == DRM_KERNEL_CONTEXT) { 370 if (ctx->handle == DRM_KERNEL_CONTEXT) {
@@ -411,7 +411,7 @@ int drm_legacy_getctx(struct drm_device *dev, void *data,
411 411
412 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 412 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
413 !drm_core_check_feature(dev, DRIVER_LEGACY)) 413 !drm_core_check_feature(dev, DRIVER_LEGACY))
414 return -EINVAL; 414 return -EOPNOTSUPP;
415 415
416 /* This is 0, because we don't handle any context flags */ 416 /* This is 0, because we don't handle any context flags */
417 ctx->flags = 0; 417 ctx->flags = 0;
@@ -437,7 +437,7 @@ int drm_legacy_switchctx(struct drm_device *dev, void *data,
437 437
438 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 438 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
439 !drm_core_check_feature(dev, DRIVER_LEGACY)) 439 !drm_core_check_feature(dev, DRIVER_LEGACY))
440 return -EINVAL; 440 return -EOPNOTSUPP;
441 441
442 DRM_DEBUG("%d\n", ctx->handle); 442 DRM_DEBUG("%d\n", ctx->handle);
443 return drm_context_switch(dev, dev->last_context, ctx->handle); 443 return drm_context_switch(dev, dev->last_context, ctx->handle);
@@ -461,7 +461,7 @@ int drm_legacy_newctx(struct drm_device *dev, void *data,
461 461
462 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 462 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
463 !drm_core_check_feature(dev, DRIVER_LEGACY)) 463 !drm_core_check_feature(dev, DRIVER_LEGACY))
464 return -EINVAL; 464 return -EOPNOTSUPP;
465 465
466 DRM_DEBUG("%d\n", ctx->handle); 466 DRM_DEBUG("%d\n", ctx->handle);
467 drm_context_switch_complete(dev, file_priv, ctx->handle); 467 drm_context_switch_complete(dev, file_priv, ctx->handle);
@@ -487,7 +487,7 @@ int drm_legacy_rmctx(struct drm_device *dev, void *data,
487 487
488 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) && 488 if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
489 !drm_core_check_feature(dev, DRIVER_LEGACY)) 489 !drm_core_check_feature(dev, DRIVER_LEGACY))
490 return -EINVAL; 490 return -EOPNOTSUPP;
491 491
492 DRM_DEBUG("%d\n", ctx->handle); 492 DRM_DEBUG("%d\n", ctx->handle);
493 if (ctx->handle != DRM_KERNEL_CONTEXT) { 493 if (ctx->handle != DRM_KERNEL_CONTEXT) {
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 2f6c877299e4..5f488aa80bcd 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -405,7 +405,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
405 struct drm_plane *plane; 405 struct drm_plane *plane;
406 406
407 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 407 if (!drm_core_check_feature(dev, DRIVER_MODESET))
408 return -EINVAL; 408 return -EOPNOTSUPP;
409 409
410 crtc = drm_crtc_find(dev, file_priv, crtc_resp->crtc_id); 410 crtc = drm_crtc_find(dev, file_priv, crtc_resp->crtc_id);
411 if (!crtc) 411 if (!crtc)
@@ -580,7 +580,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
580 int i; 580 int i;
581 581
582 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 582 if (!drm_core_check_feature(dev, DRIVER_MODESET))
583 return -EINVAL; 583 return -EOPNOTSUPP;
584 584
585 /* 585 /*
586 * Universal plane src offsets are only 16.16, prevent havoc for 586 * Universal plane src offsets are only 16.16, prevent havoc for
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index 8c6b9fd89f8a..37c01b6076ec 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -1257,15 +1257,22 @@ EXPORT_SYMBOL(drm_dp_stop_crc);
1257 1257
1258struct dpcd_quirk { 1258struct dpcd_quirk {
1259 u8 oui[3]; 1259 u8 oui[3];
1260 u8 device_id[6];
1260 bool is_branch; 1261 bool is_branch;
1261 u32 quirks; 1262 u32 quirks;
1262}; 1263};
1263 1264
1264#define OUI(first, second, third) { (first), (second), (third) } 1265#define OUI(first, second, third) { (first), (second), (third) }
1266#define DEVICE_ID(first, second, third, fourth, fifth, sixth) \
1267 { (first), (second), (third), (fourth), (fifth), (sixth) }
1268
1269#define DEVICE_ID_ANY DEVICE_ID(0, 0, 0, 0, 0, 0)
1265 1270
1266static const struct dpcd_quirk dpcd_quirk_list[] = { 1271static const struct dpcd_quirk dpcd_quirk_list[] = {
1267 /* Analogix 7737 needs reduced M and N at HBR2 link rates */ 1272 /* Analogix 7737 needs reduced M and N at HBR2 link rates */
1268 { OUI(0x00, 0x22, 0xb9), true, BIT(DP_DPCD_QUIRK_LIMITED_M_N) }, 1273 { OUI(0x00, 0x22, 0xb9), DEVICE_ID_ANY, true, BIT(DP_DPCD_QUIRK_CONSTANT_N) },
1274 /* LG LP140WF6-SPM1 eDP panel */
1275 { OUI(0x00, 0x22, 0xb9), DEVICE_ID('s', 'i', 'v', 'a', 'r', 'T'), false, BIT(DP_DPCD_QUIRK_CONSTANT_N) },
1269}; 1276};
1270 1277
1271#undef OUI 1278#undef OUI
@@ -1284,6 +1291,7 @@ drm_dp_get_quirks(const struct drm_dp_dpcd_ident *ident, bool is_branch)
1284 const struct dpcd_quirk *quirk; 1291 const struct dpcd_quirk *quirk;
1285 u32 quirks = 0; 1292 u32 quirks = 0;
1286 int i; 1293 int i;
1294 u8 any_device[] = DEVICE_ID_ANY;
1287 1295
1288 for (i = 0; i < ARRAY_SIZE(dpcd_quirk_list); i++) { 1296 for (i = 0; i < ARRAY_SIZE(dpcd_quirk_list); i++) {
1289 quirk = &dpcd_quirk_list[i]; 1297 quirk = &dpcd_quirk_list[i];
@@ -1294,12 +1302,19 @@ drm_dp_get_quirks(const struct drm_dp_dpcd_ident *ident, bool is_branch)
1294 if (memcmp(quirk->oui, ident->oui, sizeof(ident->oui)) != 0) 1302 if (memcmp(quirk->oui, ident->oui, sizeof(ident->oui)) != 0)
1295 continue; 1303 continue;
1296 1304
1305 if (memcmp(quirk->device_id, any_device, sizeof(any_device)) != 0 &&
1306 memcmp(quirk->device_id, ident->device_id, sizeof(ident->device_id)) != 0)
1307 continue;
1308
1297 quirks |= quirk->quirks; 1309 quirks |= quirk->quirks;
1298 } 1310 }
1299 1311
1300 return quirks; 1312 return quirks;
1301} 1313}
1302 1314
1315#undef DEVICE_ID_ANY
1316#undef DEVICE_ID
1317
1303/** 1318/**
1304 * drm_dp_read_desc - read sink/branch descriptor from DPCD 1319 * drm_dp_read_desc - read sink/branch descriptor from DPCD
1305 * @aux: DisplayPort AUX channel 1320 * @aux: DisplayPort AUX channel
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index ea4941da9b27..36e8e9cbec52 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -506,6 +506,9 @@ int drm_dev_init(struct drm_device *dev,
506 dev->dev = parent; 506 dev->dev = parent;
507 dev->driver = driver; 507 dev->driver = driver;
508 508
509 /* no per-device feature limits by default */
510 dev->driver_features = ~0u;
511
509 INIT_LIST_HEAD(&dev->filelist); 512 INIT_LIST_HEAD(&dev->filelist);
510 INIT_LIST_HEAD(&dev->filelist_internal); 513 INIT_LIST_HEAD(&dev->filelist_internal);
511 INIT_LIST_HEAD(&dev->clientlist); 514 INIT_LIST_HEAD(&dev->clientlist);
diff --git a/drivers/gpu/drm/drm_encoder.c b/drivers/gpu/drm/drm_encoder.c
index 273e1c59c54a..b694fb57eaa4 100644
--- a/drivers/gpu/drm/drm_encoder.c
+++ b/drivers/gpu/drm/drm_encoder.c
@@ -222,7 +222,7 @@ int drm_mode_getencoder(struct drm_device *dev, void *data,
222 struct drm_crtc *crtc; 222 struct drm_crtc *crtc;
223 223
224 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 224 if (!drm_core_check_feature(dev, DRIVER_MODESET))
225 return -EINVAL; 225 return -EOPNOTSUPP;
226 226
227 encoder = drm_encoder_find(dev, file_priv, enc_resp->encoder_id); 227 encoder = drm_encoder_find(dev, file_priv, enc_resp->encoder_id);
228 if (!encoder) 228 if (!encoder)
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 6eaacd4eb8cc..1ee3d6b44280 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -113,6 +113,9 @@ int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or,
113 struct drm_mode_fb_cmd2 r = {}; 113 struct drm_mode_fb_cmd2 r = {};
114 int ret; 114 int ret;
115 115
116 if (!drm_core_check_feature(dev, DRIVER_MODESET))
117 return -EOPNOTSUPP;
118
116 r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth); 119 r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
117 if (r.pixel_format == DRM_FORMAT_INVALID) { 120 if (r.pixel_format == DRM_FORMAT_INVALID) {
118 DRM_DEBUG("bad {bpp:%d, depth:%d}\n", or->bpp, or->depth); 121 DRM_DEBUG("bad {bpp:%d, depth:%d}\n", or->bpp, or->depth);
@@ -352,7 +355,7 @@ int drm_mode_addfb2(struct drm_device *dev,
352 struct drm_framebuffer *fb; 355 struct drm_framebuffer *fb;
353 356
354 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 357 if (!drm_core_check_feature(dev, DRIVER_MODESET))
355 return -EINVAL; 358 return -EOPNOTSUPP;
356 359
357 fb = drm_internal_framebuffer_create(dev, r, file_priv); 360 fb = drm_internal_framebuffer_create(dev, r, file_priv);
358 if (IS_ERR(fb)) 361 if (IS_ERR(fb))
@@ -387,7 +390,7 @@ int drm_mode_addfb2_ioctl(struct drm_device *dev,
387 * ADDFB. 390 * ADDFB.
388 */ 391 */
389 DRM_DEBUG_KMS("addfb2 broken on bigendian"); 392 DRM_DEBUG_KMS("addfb2 broken on bigendian");
390 return -EINVAL; 393 return -EOPNOTSUPP;
391 } 394 }
392#endif 395#endif
393 return drm_mode_addfb2(dev, data, file_priv); 396 return drm_mode_addfb2(dev, data, file_priv);
@@ -432,7 +435,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
432 int found = 0; 435 int found = 0;
433 436
434 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 437 if (!drm_core_check_feature(dev, DRIVER_MODESET))
435 return -EINVAL; 438 return -EOPNOTSUPP;
436 439
437 fb = drm_framebuffer_lookup(dev, file_priv, fb_id); 440 fb = drm_framebuffer_lookup(dev, file_priv, fb_id);
438 if (!fb) 441 if (!fb)
@@ -509,7 +512,7 @@ int drm_mode_getfb(struct drm_device *dev,
509 int ret; 512 int ret;
510 513
511 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 514 if (!drm_core_check_feature(dev, DRIVER_MODESET))
512 return -EINVAL; 515 return -EOPNOTSUPP;
513 516
514 fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id); 517 fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
515 if (!fb) 518 if (!fb)
@@ -582,7 +585,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
582 int ret; 585 int ret;
583 586
584 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 587 if (!drm_core_check_feature(dev, DRIVER_MODESET))
585 return -EINVAL; 588 return -EOPNOTSUPP;
586 589
587 fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id); 590 fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
588 if (!fb) 591 if (!fb)
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index bf90625df3c5..512078ebd97b 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -667,7 +667,7 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data,
667 int ret; 667 int ret;
668 668
669 if (!drm_core_check_feature(dev, DRIVER_GEM)) 669 if (!drm_core_check_feature(dev, DRIVER_GEM))
670 return -ENODEV; 670 return -EOPNOTSUPP;
671 671
672 ret = drm_gem_handle_delete(file_priv, args->handle); 672 ret = drm_gem_handle_delete(file_priv, args->handle);
673 673
@@ -694,7 +694,7 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data,
694 int ret; 694 int ret;
695 695
696 if (!drm_core_check_feature(dev, DRIVER_GEM)) 696 if (!drm_core_check_feature(dev, DRIVER_GEM))
697 return -ENODEV; 697 return -EOPNOTSUPP;
698 698
699 obj = drm_gem_object_lookup(file_priv, args->handle); 699 obj = drm_gem_object_lookup(file_priv, args->handle);
700 if (obj == NULL) 700 if (obj == NULL)
@@ -745,7 +745,7 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data,
745 u32 handle; 745 u32 handle;
746 746
747 if (!drm_core_check_feature(dev, DRIVER_GEM)) 747 if (!drm_core_check_feature(dev, DRIVER_GEM))
748 return -ENODEV; 748 return -EOPNOTSUPP;
749 749
750 mutex_lock(&dev->object_name_lock); 750 mutex_lock(&dev->object_name_lock);
751 obj = idr_find(&dev->object_name_idr, (int) args->name); 751 obj = idr_find(&dev->object_name_idr, (int) args->name);
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 6b4a633b4240..60dfbfae6a02 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -248,7 +248,7 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_
248 248
249 /* Other caps only work with KMS drivers */ 249 /* Other caps only work with KMS drivers */
250 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 250 if (!drm_core_check_feature(dev, DRIVER_MODESET))
251 return -ENOTSUPP; 251 return -EOPNOTSUPP;
252 252
253 switch (req->capability) { 253 switch (req->capability) {
254 case DRM_CAP_DUMB_BUFFER: 254 case DRM_CAP_DUMB_BUFFER:
@@ -319,7 +319,7 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
319 break; 319 break;
320 case DRM_CLIENT_CAP_ATOMIC: 320 case DRM_CLIENT_CAP_ATOMIC:
321 if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) 321 if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
322 return -EINVAL; 322 return -EOPNOTSUPP;
323 if (req->value > 1) 323 if (req->value > 1)
324 return -EINVAL; 324 return -EINVAL;
325 file_priv->atomic = req->value; 325 file_priv->atomic = req->value;
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 3b04c25100ae..45a07652fa00 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -104,7 +104,7 @@ int drm_irq_install(struct drm_device *dev, int irq)
104 unsigned long sh_flags = 0; 104 unsigned long sh_flags = 0;
105 105
106 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) 106 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
107 return -EINVAL; 107 return -EOPNOTSUPP;
108 108
109 if (irq == 0) 109 if (irq == 0)
110 return -EINVAL; 110 return -EINVAL;
@@ -175,7 +175,7 @@ int drm_irq_uninstall(struct drm_device *dev)
175 int i; 175 int i;
176 176
177 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) 177 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
178 return -EINVAL; 178 return -EOPNOTSUPP;
179 179
180 irq_enabled = dev->irq_enabled; 180 irq_enabled = dev->irq_enabled;
181 dev->irq_enabled = false; 181 dev->irq_enabled = false;
diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c
index b54fb78a283c..5894b4e144d7 100644
--- a/drivers/gpu/drm/drm_lease.c
+++ b/drivers/gpu/drm/drm_lease.c
@@ -506,7 +506,7 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev,
506 506
507 /* Can't lease without MODESET */ 507 /* Can't lease without MODESET */
508 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 508 if (!drm_core_check_feature(dev, DRIVER_MODESET))
509 return -EINVAL; 509 return -EOPNOTSUPP;
510 510
511 /* Do not allow sub-leases */ 511 /* Do not allow sub-leases */
512 if (lessor->lessor) 512 if (lessor->lessor)
@@ -615,7 +615,7 @@ int drm_mode_list_lessees_ioctl(struct drm_device *dev,
615 615
616 /* Can't lease without MODESET */ 616 /* Can't lease without MODESET */
617 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 617 if (!drm_core_check_feature(dev, DRIVER_MODESET))
618 return -EINVAL; 618 return -EOPNOTSUPP;
619 619
620 DRM_DEBUG_LEASE("List lessees for %d\n", lessor->lessee_id); 620 DRM_DEBUG_LEASE("List lessees for %d\n", lessor->lessee_id);
621 621
@@ -671,7 +671,7 @@ int drm_mode_get_lease_ioctl(struct drm_device *dev,
671 671
672 /* Can't lease without MODESET */ 672 /* Can't lease without MODESET */
673 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 673 if (!drm_core_check_feature(dev, DRIVER_MODESET))
674 return -EINVAL; 674 return -EOPNOTSUPP;
675 675
676 DRM_DEBUG_LEASE("get lease for %d\n", lessee->lessee_id); 676 DRM_DEBUG_LEASE("get lease for %d\n", lessee->lessee_id);
677 677
@@ -726,7 +726,7 @@ int drm_mode_revoke_lease_ioctl(struct drm_device *dev,
726 726
727 /* Can't lease without MODESET */ 727 /* Can't lease without MODESET */
728 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 728 if (!drm_core_check_feature(dev, DRIVER_MODESET))
729 return -EINVAL; 729 return -EOPNOTSUPP;
730 730
731 mutex_lock(&dev->mode_config.idr_mutex); 731 mutex_lock(&dev->mode_config.idr_mutex);
732 732
diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c
index 96bb6badb818..67a1a2ca7174 100644
--- a/drivers/gpu/drm/drm_lock.c
+++ b/drivers/gpu/drm/drm_lock.c
@@ -166,7 +166,7 @@ int drm_legacy_lock(struct drm_device *dev, void *data,
166 int ret = 0; 166 int ret = 0;
167 167
168 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 168 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
169 return -EINVAL; 169 return -EOPNOTSUPP;
170 170
171 ++file_priv->lock_count; 171 ++file_priv->lock_count;
172 172
@@ -256,7 +256,7 @@ int drm_legacy_unlock(struct drm_device *dev, void *data, struct drm_file *file_
256 struct drm_master *master = file_priv->master; 256 struct drm_master *master = file_priv->master;
257 257
258 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 258 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
259 return -EINVAL; 259 return -EOPNOTSUPP;
260 260
261 if (lock->context == DRM_KERNEL_CONTEXT) { 261 if (lock->context == DRM_KERNEL_CONTEXT) {
262 DRM_ERROR("Process %d using kernel context %d\n", 262 DRM_ERROR("Process %d using kernel context %d\n",
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 21e353bd3948..ee80788f2c40 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -97,8 +97,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
97 struct drm_connector_list_iter conn_iter; 97 struct drm_connector_list_iter conn_iter;
98 98
99 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 99 if (!drm_core_check_feature(dev, DRIVER_MODESET))
100 return -EINVAL; 100 return -EOPNOTSUPP;
101
102 101
103 mutex_lock(&file_priv->fbs_lock); 102 mutex_lock(&file_priv->fbs_lock);
104 count = 0; 103 count = 0;
diff --git a/drivers/gpu/drm/drm_mode_object.c b/drivers/gpu/drm/drm_mode_object.c
index fcb0ab0abb75..be8b754eaf60 100644
--- a/drivers/gpu/drm/drm_mode_object.c
+++ b/drivers/gpu/drm/drm_mode_object.c
@@ -381,7 +381,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
381 int ret = 0; 381 int ret = 0;
382 382
383 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 383 if (!drm_core_check_feature(dev, DRIVER_MODESET))
384 return -EINVAL; 384 return -EOPNOTSUPP;
385 385
386 drm_modeset_lock_all(dev); 386 drm_modeset_lock_all(dev);
387 387
@@ -504,7 +504,7 @@ int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
504 int ret = -EINVAL; 504 int ret = -EINVAL;
505 505
506 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 506 if (!drm_core_check_feature(dev, DRIVER_MODESET))
507 return -EINVAL; 507 return -EOPNOTSUPP;
508 508
509 arg_obj = drm_mode_object_find(dev, file_priv, arg->obj_id, arg->obj_type); 509 arg_obj = drm_mode_object_find(dev, file_priv, arg->obj_id, arg->obj_type);
510 if (!arg_obj) 510 if (!arg_obj)
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
index 896e42a34895..48f615d38931 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -182,14 +182,14 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
182 struct drm_irq_busid *p = data; 182 struct drm_irq_busid *p = data;
183 183
184 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 184 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
185 return -EINVAL; 185 return -EOPNOTSUPP;
186 186
187 /* UMS was only ever support on PCI devices. */ 187 /* UMS was only ever support on PCI devices. */
188 if (WARN_ON(!dev->pdev)) 188 if (WARN_ON(!dev->pdev))
189 return -EINVAL; 189 return -EINVAL;
190 190
191 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) 191 if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
192 return -EINVAL; 192 return -EOPNOTSUPP;
193 193
194 return drm_pci_irq_by_busid(dev, p); 194 return drm_pci_irq_by_busid(dev, p);
195} 195}
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 4a72c6829d73..1fa98bd12003 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -477,7 +477,7 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
477 int count = 0; 477 int count = 0;
478 478
479 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 479 if (!drm_core_check_feature(dev, DRIVER_MODESET))
480 return -EINVAL; 480 return -EOPNOTSUPP;
481 481
482 plane_ptr = u64_to_user_ptr(plane_resp->plane_id_ptr); 482 plane_ptr = u64_to_user_ptr(plane_resp->plane_id_ptr);
483 483
@@ -514,7 +514,7 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
514 uint32_t __user *format_ptr; 514 uint32_t __user *format_ptr;
515 515
516 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 516 if (!drm_core_check_feature(dev, DRIVER_MODESET))
517 return -EINVAL; 517 return -EOPNOTSUPP;
518 518
519 plane = drm_plane_find(dev, file_priv, plane_resp->plane_id); 519 plane = drm_plane_find(dev, file_priv, plane_resp->plane_id);
520 if (!plane) 520 if (!plane)
@@ -781,7 +781,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
781 int ret; 781 int ret;
782 782
783 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 783 if (!drm_core_check_feature(dev, DRIVER_MODESET))
784 return -EINVAL; 784 return -EOPNOTSUPP;
785 785
786 /* 786 /*
787 * First, find the plane, crtc, and fb objects. If not available, 787 * First, find the plane, crtc, and fb objects. If not available,
@@ -919,7 +919,7 @@ static int drm_mode_cursor_common(struct drm_device *dev,
919 int ret = 0; 919 int ret = 0;
920 920
921 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 921 if (!drm_core_check_feature(dev, DRIVER_MODESET))
922 return -EINVAL; 922 return -EOPNOTSUPP;
923 923
924 if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags)) 924 if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
925 return -EINVAL; 925 return -EINVAL;
@@ -1023,7 +1023,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
1023 int ret = -EINVAL; 1023 int ret = -EINVAL;
1024 1024
1025 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 1025 if (!drm_core_check_feature(dev, DRIVER_MODESET))
1026 return -EINVAL; 1026 return -EOPNOTSUPP;
1027 1027
1028 if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS) 1028 if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS)
1029 return -EINVAL; 1029 return -EINVAL;
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 186db2e4c57a..3f0205fc0a1a 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -844,7 +844,7 @@ int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
844 struct drm_prime_handle *args = data; 844 struct drm_prime_handle *args = data;
845 845
846 if (!drm_core_check_feature(dev, DRIVER_PRIME)) 846 if (!drm_core_check_feature(dev, DRIVER_PRIME))
847 return -EINVAL; 847 return -EOPNOTSUPP;
848 848
849 if (!dev->driver->prime_handle_to_fd) 849 if (!dev->driver->prime_handle_to_fd)
850 return -ENOSYS; 850 return -ENOSYS;
@@ -863,7 +863,7 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
863 struct drm_prime_handle *args = data; 863 struct drm_prime_handle *args = data;
864 864
865 if (!drm_core_check_feature(dev, DRIVER_PRIME)) 865 if (!drm_core_check_feature(dev, DRIVER_PRIME))
866 return -EINVAL; 866 return -EOPNOTSUPP;
867 867
868 if (!dev->driver->prime_fd_to_handle) 868 if (!dev->driver->prime_fd_to_handle)
869 return -ENOSYS; 869 return -ENOSYS;
diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
index cdb10f885a4f..79c77c3cad86 100644
--- a/drivers/gpu/drm/drm_property.c
+++ b/drivers/gpu/drm/drm_property.c
@@ -464,7 +464,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
464 uint64_t __user *values_ptr; 464 uint64_t __user *values_ptr;
465 465
466 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 466 if (!drm_core_check_feature(dev, DRIVER_MODESET))
467 return -EINVAL; 467 return -EOPNOTSUPP;
468 468
469 property = drm_property_find(dev, file_priv, out_resp->prop_id); 469 property = drm_property_find(dev, file_priv, out_resp->prop_id);
470 if (!property) 470 if (!property)
@@ -757,7 +757,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
757 int ret = 0; 757 int ret = 0;
758 758
759 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 759 if (!drm_core_check_feature(dev, DRIVER_MODESET))
760 return -EINVAL; 760 return -EOPNOTSUPP;
761 761
762 blob = drm_property_lookup_blob(dev, out_resp->blob_id); 762 blob = drm_property_lookup_blob(dev, out_resp->blob_id);
763 if (!blob) 763 if (!blob)
@@ -786,7 +786,7 @@ int drm_mode_createblob_ioctl(struct drm_device *dev,
786 int ret = 0; 786 int ret = 0;
787 787
788 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 788 if (!drm_core_check_feature(dev, DRIVER_MODESET))
789 return -EINVAL; 789 return -EOPNOTSUPP;
790 790
791 blob = drm_property_create_blob(dev, out_resp->length, NULL); 791 blob = drm_property_create_blob(dev, out_resp->length, NULL);
792 if (IS_ERR(blob)) 792 if (IS_ERR(blob))
@@ -823,7 +823,7 @@ int drm_mode_destroyblob_ioctl(struct drm_device *dev,
823 int ret = 0; 823 int ret = 0;
824 824
825 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 825 if (!drm_core_check_feature(dev, DRIVER_MODESET))
826 return -EINVAL; 826 return -EOPNOTSUPP;
827 827
828 blob = drm_property_lookup_blob(dev, out_resp->blob_id); 828 blob = drm_property_lookup_blob(dev, out_resp->blob_id);
829 if (!blob) 829 if (!blob)
diff --git a/drivers/gpu/drm/drm_scatter.c b/drivers/gpu/drm/drm_scatter.c
index 275bca44f38c..bb829a115fc6 100644
--- a/drivers/gpu/drm/drm_scatter.c
+++ b/drivers/gpu/drm/drm_scatter.c
@@ -89,10 +89,10 @@ int drm_legacy_sg_alloc(struct drm_device *dev, void *data,
89 DRM_DEBUG("\n"); 89 DRM_DEBUG("\n");
90 90
91 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 91 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
92 return -EINVAL; 92 return -EOPNOTSUPP;
93 93
94 if (!drm_core_check_feature(dev, DRIVER_SG)) 94 if (!drm_core_check_feature(dev, DRIVER_SG))
95 return -EINVAL; 95 return -EOPNOTSUPP;
96 96
97 if (dev->sg) 97 if (dev->sg)
98 return -EINVAL; 98 return -EINVAL;
@@ -202,10 +202,10 @@ int drm_legacy_sg_free(struct drm_device *dev, void *data,
202 struct drm_sg_mem *entry; 202 struct drm_sg_mem *entry;
203 203
204 if (!drm_core_check_feature(dev, DRIVER_LEGACY)) 204 if (!drm_core_check_feature(dev, DRIVER_LEGACY))
205 return -EINVAL; 205 return -EOPNOTSUPP;
206 206
207 if (!drm_core_check_feature(dev, DRIVER_SG)) 207 if (!drm_core_check_feature(dev, DRIVER_SG))
208 return -EINVAL; 208 return -EOPNOTSUPP;
209 209
210 entry = dev->sg; 210 entry = dev->sg;
211 dev->sg = NULL; 211 dev->sg = NULL;
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index e9ce623d049e..497729202bfe 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -573,7 +573,7 @@ drm_syncobj_create_ioctl(struct drm_device *dev, void *data,
573 struct drm_syncobj_create *args = data; 573 struct drm_syncobj_create *args = data;
574 574
575 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 575 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
576 return -ENODEV; 576 return -EOPNOTSUPP;
577 577
578 /* no valid flags yet */ 578 /* no valid flags yet */
579 if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED) 579 if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED)
@@ -590,7 +590,7 @@ drm_syncobj_destroy_ioctl(struct drm_device *dev, void *data,
590 struct drm_syncobj_destroy *args = data; 590 struct drm_syncobj_destroy *args = data;
591 591
592 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 592 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
593 return -ENODEV; 593 return -EOPNOTSUPP;
594 594
595 /* make sure padding is empty */ 595 /* make sure padding is empty */
596 if (args->pad) 596 if (args->pad)
@@ -605,7 +605,7 @@ drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data,
605 struct drm_syncobj_handle *args = data; 605 struct drm_syncobj_handle *args = data;
606 606
607 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 607 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
608 return -ENODEV; 608 return -EOPNOTSUPP;
609 609
610 if (args->pad) 610 if (args->pad)
611 return -EINVAL; 611 return -EINVAL;
@@ -629,7 +629,7 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data,
629 struct drm_syncobj_handle *args = data; 629 struct drm_syncobj_handle *args = data;
630 630
631 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 631 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
632 return -ENODEV; 632 return -EOPNOTSUPP;
633 633
634 if (args->pad) 634 if (args->pad)
635 return -EINVAL; 635 return -EINVAL;
@@ -921,7 +921,7 @@ drm_syncobj_wait_ioctl(struct drm_device *dev, void *data,
921 int ret = 0; 921 int ret = 0;
922 922
923 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 923 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
924 return -ENODEV; 924 return -EOPNOTSUPP;
925 925
926 if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | 926 if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL |
927 DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) 927 DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
@@ -955,7 +955,7 @@ drm_syncobj_reset_ioctl(struct drm_device *dev, void *data,
955 int ret; 955 int ret;
956 956
957 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 957 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
958 return -ENODEV; 958 return -EOPNOTSUPP;
959 959
960 if (args->pad != 0) 960 if (args->pad != 0)
961 return -EINVAL; 961 return -EINVAL;
@@ -988,7 +988,7 @@ drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,
988 int ret; 988 int ret;
989 989
990 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) 990 if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
991 return -ENODEV; 991 return -EOPNOTSUPP;
992 992
993 if (args->pad != 0) 993 if (args->pad != 0)
994 return -EINVAL; 994 return -EINVAL;
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index ec2dcfdac8ef..98e091175921 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1771,7 +1771,7 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
1771 int ret; 1771 int ret;
1772 1772
1773 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 1773 if (!drm_core_check_feature(dev, DRIVER_MODESET))
1774 return -EINVAL; 1774 return -EOPNOTSUPP;
1775 1775
1776 if (!dev->irq_enabled) 1776 if (!dev->irq_enabled)
1777 return -EINVAL; 1777 return -EINVAL;
@@ -1829,7 +1829,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
1829 unsigned long spin_flags; 1829 unsigned long spin_flags;
1830 1830
1831 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 1831 if (!drm_core_check_feature(dev, DRIVER_MODESET))
1832 return -EINVAL; 1832 return -EOPNOTSUPP;
1833 1833
1834 if (!dev->irq_enabled) 1834 if (!dev->irq_enabled)
1835 return -EINVAL; 1835 return -EINVAL;
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 5dd7fc582e6f..2ddf8538cb47 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1384,14 +1384,14 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
1384 struct drm_i915_private *dev_priv; 1384 struct drm_i915_private *dev_priv;
1385 int ret; 1385 int ret;
1386 1386
1387 /* Enable nuclear pageflip on ILK+ */
1388 if (!i915_modparams.nuclear_pageflip && match_info->gen < 5)
1389 driver.driver_features &= ~DRIVER_ATOMIC;
1390
1391 dev_priv = i915_driver_create(pdev, ent); 1387 dev_priv = i915_driver_create(pdev, ent);
1392 if (!dev_priv) 1388 if (!dev_priv)
1393 return -ENOMEM; 1389 return -ENOMEM;
1394 1390
1391 /* Disable nuclear pageflip by default on pre-ILK */
1392 if (!i915_modparams.nuclear_pageflip && match_info->gen < 5)
1393 dev_priv->drm.driver_features &= ~DRIVER_ATOMIC;
1394
1395 ret = pci_enable_device(pdev); 1395 ret = pci_enable_device(pdev);
1396 if (ret) 1396 if (ret)
1397 goto out_fini; 1397 goto out_fini;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b2bab57cd113..5711cb701760 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6685,22 +6685,20 @@ intel_reduce_m_n_ratio(uint32_t *num, uint32_t *den)
6685 6685
6686static void compute_m_n(unsigned int m, unsigned int n, 6686static void compute_m_n(unsigned int m, unsigned int n,
6687 uint32_t *ret_m, uint32_t *ret_n, 6687 uint32_t *ret_m, uint32_t *ret_n,
6688 bool reduce_m_n) 6688 bool constant_n)
6689{ 6689{
6690 /* 6690 /*
6691 * Reduce M/N as much as possible without loss in precision. Several DP 6691 * Several DP dongles in particular seem to be fussy about
6692 * dongles in particular seem to be fussy about too large *link* M/N 6692 * too large link M/N values. Give N value as 0x8000 that
6693 * values. The passed in values are more likely to have the least 6693 * should be acceptable by specific devices. 0x8000 is the
6694 * significant bits zero than M after rounding below, so do this first. 6694 * specified fixed N value for asynchronous clock mode,
6695 * which the devices expect also in synchronous clock mode.
6695 */ 6696 */
6696 if (reduce_m_n) { 6697 if (constant_n)
6697 while ((m & 1) == 0 && (n & 1) == 0) { 6698 *ret_n = 0x8000;
6698 m >>= 1; 6699 else
6699 n >>= 1; 6700 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
6700 }
6701 }
6702 6701
6703 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
6704 *ret_m = div_u64((uint64_t) m * *ret_n, n); 6702 *ret_m = div_u64((uint64_t) m * *ret_n, n);
6705 intel_reduce_m_n_ratio(ret_m, ret_n); 6703 intel_reduce_m_n_ratio(ret_m, ret_n);
6706} 6704}
@@ -6709,18 +6707,18 @@ void
6709intel_link_compute_m_n(int bits_per_pixel, int nlanes, 6707intel_link_compute_m_n(int bits_per_pixel, int nlanes,
6710 int pixel_clock, int link_clock, 6708 int pixel_clock, int link_clock,
6711 struct intel_link_m_n *m_n, 6709 struct intel_link_m_n *m_n,
6712 bool reduce_m_n) 6710 bool constant_n)
6713{ 6711{
6714 m_n->tu = 64; 6712 m_n->tu = 64;
6715 6713
6716 compute_m_n(bits_per_pixel * pixel_clock, 6714 compute_m_n(bits_per_pixel * pixel_clock,
6717 link_clock * nlanes * 8, 6715 link_clock * nlanes * 8,
6718 &m_n->gmch_m, &m_n->gmch_n, 6716 &m_n->gmch_m, &m_n->gmch_n,
6719 reduce_m_n); 6717 constant_n);
6720 6718
6721 compute_m_n(pixel_clock, link_clock, 6719 compute_m_n(pixel_clock, link_clock,
6722 &m_n->link_m, &m_n->link_n, 6720 &m_n->link_m, &m_n->link_n,
6723 reduce_m_n); 6721 constant_n);
6724} 6722}
6725 6723
6726static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) 6724static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/intel_display.h b/drivers/gpu/drm/i915/intel_display.h
index ed474da6c200..9fac67e31205 100644
--- a/drivers/gpu/drm/i915/intel_display.h
+++ b/drivers/gpu/drm/i915/intel_display.h
@@ -405,7 +405,7 @@ struct intel_link_m_n {
405void intel_link_compute_m_n(int bpp, int nlanes, 405void intel_link_compute_m_n(int bpp, int nlanes,
406 int pixel_clock, int link_clock, 406 int pixel_clock, int link_clock,
407 struct intel_link_m_n *m_n, 407 struct intel_link_m_n *m_n,
408 bool reduce_m_n); 408 bool constant_n);
409 409
410bool is_ccs_modifier(u64 modifier); 410bool is_ccs_modifier(u64 modifier);
411#endif 411#endif
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 436c22de33b6..6b4c19123f2a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1998,8 +1998,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1998 struct intel_connector *intel_connector = intel_dp->attached_connector; 1998 struct intel_connector *intel_connector = intel_dp->attached_connector;
1999 struct intel_digital_connector_state *intel_conn_state = 1999 struct intel_digital_connector_state *intel_conn_state =
2000 to_intel_digital_connector_state(conn_state); 2000 to_intel_digital_connector_state(conn_state);
2001 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc, 2001 bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
2002 DP_DPCD_QUIRK_LIMITED_M_N); 2002 DP_DPCD_QUIRK_CONSTANT_N);
2003 2003
2004 if (HAS_PCH_SPLIT(dev_priv) && !HAS_DDI(dev_priv) && port != PORT_A) 2004 if (HAS_PCH_SPLIT(dev_priv) && !HAS_DDI(dev_priv) && port != PORT_A)
2005 pipe_config->has_pch_encoder = true; 2005 pipe_config->has_pch_encoder = true;
@@ -2064,7 +2064,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
2064 adjusted_mode->crtc_clock, 2064 adjusted_mode->crtc_clock,
2065 pipe_config->port_clock, 2065 pipe_config->port_clock,
2066 &pipe_config->dp_m_n, 2066 &pipe_config->dp_m_n,
2067 reduce_m_n); 2067 constant_n);
2068 2068
2069 if (intel_connector->panel.downclock_mode != NULL && 2069 if (intel_connector->panel.downclock_mode != NULL &&
2070 dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) { 2070 dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
@@ -2074,7 +2074,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
2074 intel_connector->panel.downclock_mode->clock, 2074 intel_connector->panel.downclock_mode->clock,
2075 pipe_config->port_clock, 2075 pipe_config->port_clock,
2076 &pipe_config->dp_m2_n2, 2076 &pipe_config->dp_m2_n2,
2077 reduce_m_n); 2077 constant_n);
2078 } 2078 }
2079 2079
2080 if (!HAS_DDI(dev_priv)) 2080 if (!HAS_DDI(dev_priv))
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 77920f1a3da1..43db2e9ac575 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -45,8 +45,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
45 int lane_count, slots; 45 int lane_count, slots;
46 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 46 const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
47 int mst_pbn; 47 int mst_pbn;
48 bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc, 48 bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
49 DP_DPCD_QUIRK_LIMITED_M_N); 49 DP_DPCD_QUIRK_CONSTANT_N);
50 50
51 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) 51 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
52 return false; 52 return false;
@@ -87,7 +87,7 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
87 adjusted_mode->crtc_clock, 87 adjusted_mode->crtc_clock,
88 pipe_config->port_clock, 88 pipe_config->port_clock,
89 &pipe_config->dp_m_n, 89 &pipe_config->dp_m_n,
90 reduce_m_n); 90 constant_n);
91 91
92 pipe_config->dp_m_n.tu = slots; 92 pipe_config->dp_m_n.tu = slots;
93 93
diff --git a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c b/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
index 82502b351aec..856124806353 100644
--- a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
+++ b/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
@@ -417,6 +417,14 @@ static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = {
417 .phy_config = &sun8i_hdmi_phy_config_h3, 417 .phy_config = &sun8i_hdmi_phy_config_h3,
418}; 418};
419 419
420static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = {
421 .has_phy_clk = true,
422 .has_second_pll = true,
423 .phy_init = &sun8i_hdmi_phy_init_h3,
424 .phy_disable = &sun8i_hdmi_phy_disable_h3,
425 .phy_config = &sun8i_hdmi_phy_config_h3,
426};
427
420static const struct of_device_id sun8i_hdmi_phy_of_table[] = { 428static const struct of_device_id sun8i_hdmi_phy_of_table[] = {
421 { 429 {
422 .compatible = "allwinner,sun50i-a64-hdmi-phy", 430 .compatible = "allwinner,sun50i-a64-hdmi-phy",
@@ -430,6 +438,10 @@ static const struct of_device_id sun8i_hdmi_phy_of_table[] = {
430 .compatible = "allwinner,sun8i-h3-hdmi-phy", 438 .compatible = "allwinner,sun8i-h3-hdmi-phy",
431 .data = &sun8i_h3_hdmi_phy, 439 .data = &sun8i_h3_hdmi_phy,
432 }, 440 },
441 {
442 .compatible = "allwinner,sun8i-r40-hdmi-phy",
443 .data = &sun8i_r40_hdmi_phy,
444 },
433 { /* sentinel */ } 445 { /* sentinel */ }
434}; 446};
435 447
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index f8f4a40dd1b8..a2d79e18bda7 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -36,6 +36,7 @@
36#include <drm/drm_atomic.h> 36#include <drm/drm_atomic.h>
37#include <drm/drm_crtc_helper.h> 37#include <drm/drm_crtc_helper.h>
38#include <drm/drm_encoder.h> 38#include <drm/drm_encoder.h>
39#include <drm/drm_fb_helper.h>
39#include <drm/ttm/ttm_bo_api.h> 40#include <drm/ttm/ttm_bo_api.h>
40#include <drm/ttm/ttm_bo_driver.h> 41#include <drm/ttm/ttm_bo_driver.h>
41#include <drm/ttm/ttm_placement.h> 42#include <drm/ttm/ttm_placement.h>
@@ -133,6 +134,13 @@ struct virtio_gpu_framebuffer {
133#define to_virtio_gpu_framebuffer(x) \ 134#define to_virtio_gpu_framebuffer(x) \
134 container_of(x, struct virtio_gpu_framebuffer, base) 135 container_of(x, struct virtio_gpu_framebuffer, base)
135 136
137struct virtio_gpu_fbdev {
138 struct drm_fb_helper helper;
139 struct virtio_gpu_framebuffer vgfb;
140 struct virtio_gpu_device *vgdev;
141 struct delayed_work work;
142};
143
136struct virtio_gpu_mman { 144struct virtio_gpu_mman {
137 struct ttm_bo_global_ref bo_global_ref; 145 struct ttm_bo_global_ref bo_global_ref;
138 struct drm_global_reference mem_global_ref; 146 struct drm_global_reference mem_global_ref;
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
index b5cebc9a179a..b9678c4082ac 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -29,13 +29,6 @@
29 29
30#define VIRTIO_GPU_FBCON_POLL_PERIOD (HZ / 60) 30#define VIRTIO_GPU_FBCON_POLL_PERIOD (HZ / 60)
31 31
32struct virtio_gpu_fbdev {
33 struct drm_fb_helper helper;
34 struct virtio_gpu_framebuffer vgfb;
35 struct virtio_gpu_device *vgdev;
36 struct delayed_work work;
37};
38
39static int virtio_gpu_dirty_update(struct virtio_gpu_framebuffer *fb, 32static int virtio_gpu_dirty_update(struct virtio_gpu_framebuffer *fb,
40 bool store, int x, int y, 33 bool store, int x, int y,
41 int width, int height) 34 int width, int height)
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 5784c3ea8767..df32811f2c3e 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -490,6 +490,15 @@ void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
490{ 490{
491 struct virtio_gpu_transfer_to_host_2d *cmd_p; 491 struct virtio_gpu_transfer_to_host_2d *cmd_p;
492 struct virtio_gpu_vbuffer *vbuf; 492 struct virtio_gpu_vbuffer *vbuf;
493 struct virtio_gpu_fbdev *vgfbdev = vgdev->vgfbdev;
494 struct virtio_gpu_framebuffer *fb = &vgfbdev->vgfb;
495 struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->base.obj[0]);
496 bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
497
498 if (use_dma_api)
499 dma_sync_sg_for_device(vgdev->vdev->dev.parent,
500 obj->pages->sgl, obj->pages->nents,
501 DMA_TO_DEVICE);
493 502
494 cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); 503 cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
495 memset(cmd_p, 0, sizeof(*cmd_p)); 504 memset(cmd_p, 0, sizeof(*cmd_p));
@@ -789,6 +798,15 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
789{ 798{
790 struct virtio_gpu_transfer_host_3d *cmd_p; 799 struct virtio_gpu_transfer_host_3d *cmd_p;
791 struct virtio_gpu_vbuffer *vbuf; 800 struct virtio_gpu_vbuffer *vbuf;
801 struct virtio_gpu_fbdev *vgfbdev = vgdev->vgfbdev;
802 struct virtio_gpu_framebuffer *fb = &vgfbdev->vgfb;
803 struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->base.obj[0]);
804 bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
805
806 if (use_dma_api)
807 dma_sync_sg_for_device(vgdev->vdev->dev.parent,
808 obj->pages->sgl, obj->pages->nents,
809 DMA_TO_DEVICE);
792 810
793 cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); 811 cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
794 memset(cmd_p, 0, sizeof(*cmd_p)); 812 memset(cmd_p, 0, sizeof(*cmd_p));