aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-04-24 00:08:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-04-24 00:08:52 -0400
commitba25b50d582ff6c6021eee80824134aeb9ab8785 (patch)
treed6002f77ac65c936b489f21409c9b162acfc3c28
parent12a54b150fb5b6c2f3da932dc0e665355f8a5a48 (diff)
parenta0cecc23cfcbf2626497a8c8770856dd56b67917 (diff)
Merge tag 'drm-fixes-2019-04-24' of git://anongit.freedesktop.org/drm/drm
Pull drm regression fixes from Dave Airlie: "We interrupt your regularly scheduled drm fixes for a regression special. The first is for a fix in i915 that had unexpected side effects fallout in the userspace X.org modesetting driver where X would no longer start. I got tired of the nitpicking and issued a large hammer on it. The X.org driver is buggy, but blackscreen regressions are worse. The second was an oversight that myself and Gerd should have noticed better, Gerd is trying to fix this properly, but the regression is too large to leave, even if the original behaviour is bad in some cases, it's clearly bad to break a bunch of working use cases. I'll likely have a regular fixes pull later, but I really wanted to highlight these" * tag 'drm-fixes-2019-04-24' of git://anongit.freedesktop.org/drm/drm: Revert "drm/virtio: drop prime import/export callbacks" Revert "drm/i915/fbdev: Actually configure untiled displays"
-rw-r--r--drivers/gpu/drm/i915/intel_fbdev.c12
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.c4
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.h4
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_prime.c12
4 files changed, 25 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index e8f694b57b8a..376ffe842e26 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -338,8 +338,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
338 bool *enabled, int width, int height) 338 bool *enabled, int width, int height)
339{ 339{
340 struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); 340 struct drm_i915_private *dev_priv = to_i915(fb_helper->dev);
341 unsigned long conn_configured, conn_seq, mask;
341 unsigned int count = min(fb_helper->connector_count, BITS_PER_LONG); 342 unsigned int count = min(fb_helper->connector_count, BITS_PER_LONG);
342 unsigned long conn_configured, conn_seq;
343 int i, j; 343 int i, j;
344 bool *save_enabled; 344 bool *save_enabled;
345 bool fallback = true, ret = true; 345 bool fallback = true, ret = true;
@@ -357,9 +357,10 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
357 drm_modeset_backoff(&ctx); 357 drm_modeset_backoff(&ctx);
358 358
359 memcpy(save_enabled, enabled, count); 359 memcpy(save_enabled, enabled, count);
360 conn_seq = GENMASK(count - 1, 0); 360 mask = GENMASK(count - 1, 0);
361 conn_configured = 0; 361 conn_configured = 0;
362retry: 362retry:
363 conn_seq = conn_configured;
363 for (i = 0; i < count; i++) { 364 for (i = 0; i < count; i++) {
364 struct drm_fb_helper_connector *fb_conn; 365 struct drm_fb_helper_connector *fb_conn;
365 struct drm_connector *connector; 366 struct drm_connector *connector;
@@ -372,8 +373,7 @@ retry:
372 if (conn_configured & BIT(i)) 373 if (conn_configured & BIT(i))
373 continue; 374 continue;
374 375
375 /* First pass, only consider tiled connectors */ 376 if (conn_seq == 0 && !connector->has_tile)
376 if (conn_seq == GENMASK(count - 1, 0) && !connector->has_tile)
377 continue; 377 continue;
378 378
379 if (connector->status == connector_status_connected) 379 if (connector->status == connector_status_connected)
@@ -477,10 +477,8 @@ retry:
477 conn_configured |= BIT(i); 477 conn_configured |= BIT(i);
478 } 478 }
479 479
480 if (conn_configured != conn_seq) { /* repeat until no more are found */ 480 if ((conn_configured & mask) != mask && conn_configured != conn_seq)
481 conn_seq = conn_configured;
482 goto retry; 481 goto retry;
483 }
484 482
485 /* 483 /*
486 * If the BIOS didn't enable everything it could, fall back to have the 484 * If the BIOS didn't enable everything it could, fall back to have the
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index b996ac1d4fcc..af92964b6889 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -205,10 +205,14 @@ static struct drm_driver driver = {
205#if defined(CONFIG_DEBUG_FS) 205#if defined(CONFIG_DEBUG_FS)
206 .debugfs_init = virtio_gpu_debugfs_init, 206 .debugfs_init = virtio_gpu_debugfs_init,
207#endif 207#endif
208 .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
209 .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
208 .gem_prime_export = drm_gem_prime_export, 210 .gem_prime_export = drm_gem_prime_export,
209 .gem_prime_import = drm_gem_prime_import, 211 .gem_prime_import = drm_gem_prime_import,
210 .gem_prime_pin = virtgpu_gem_prime_pin, 212 .gem_prime_pin = virtgpu_gem_prime_pin,
211 .gem_prime_unpin = virtgpu_gem_prime_unpin, 213 .gem_prime_unpin = virtgpu_gem_prime_unpin,
214 .gem_prime_get_sg_table = virtgpu_gem_prime_get_sg_table,
215 .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
212 .gem_prime_vmap = virtgpu_gem_prime_vmap, 216 .gem_prime_vmap = virtgpu_gem_prime_vmap,
213 .gem_prime_vunmap = virtgpu_gem_prime_vunmap, 217 .gem_prime_vunmap = virtgpu_gem_prime_vunmap,
214 .gem_prime_mmap = virtgpu_gem_prime_mmap, 218 .gem_prime_mmap = virtgpu_gem_prime_mmap,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 3238fdf58eb4..d577cb76f5ad 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -354,6 +354,10 @@ int virtio_gpu_object_wait(struct virtio_gpu_object *bo, bool no_wait);
354/* virtgpu_prime.c */ 354/* virtgpu_prime.c */
355int virtgpu_gem_prime_pin(struct drm_gem_object *obj); 355int virtgpu_gem_prime_pin(struct drm_gem_object *obj);
356void virtgpu_gem_prime_unpin(struct drm_gem_object *obj); 356void virtgpu_gem_prime_unpin(struct drm_gem_object *obj);
357struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
358struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
359 struct drm_device *dev, struct dma_buf_attachment *attach,
360 struct sg_table *sgt);
357void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj); 361void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj);
358void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); 362void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
359int virtgpu_gem_prime_mmap(struct drm_gem_object *obj, 363int virtgpu_gem_prime_mmap(struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c
index c59ec34c80a5..eb51a78e1199 100644
--- a/drivers/gpu/drm/virtio/virtgpu_prime.c
+++ b/drivers/gpu/drm/virtio/virtgpu_prime.c
@@ -39,6 +39,18 @@ void virtgpu_gem_prime_unpin(struct drm_gem_object *obj)
39 WARN_ONCE(1, "not implemented"); 39 WARN_ONCE(1, "not implemented");
40} 40}
41 41
42struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
43{
44 return ERR_PTR(-ENODEV);
45}
46
47struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
48 struct drm_device *dev, struct dma_buf_attachment *attach,
49 struct sg_table *table)
50{
51 return ERR_PTR(-ENODEV);
52}
53
42void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj) 54void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj)
43{ 55{
44 struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); 56 struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);