Commit 538fd19e authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-fixes-2017-05-25' of git://anongit.freedesktop.org/git/drm-misc into drm-fixes

Core Changes:
- Don't drop vblank reference more than once in cases of ww retry (Daniel)

Driver Changes:
- radeon: Fix oops during radeon probe trying to reference wrong device (Lukas)
- qxl: Avoid sleeping while in atomic context on cursor update (Gabriel)
- gma500: Use VBT mode instead of pre-programmed mode for LVDS (Patrik)

Cc: Lukas Wunner <lukas@wunner.de>
Cc: Gabriel Krisman Bertazi <krisman@collabora.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

* tag 'drm-misc-fixes-2017-05-25' of git://anongit.freedesktop.org/git/drm-misc:
  drm/gma500/psb: Actually use VBT mode when it is found
  drm: Fix deadlock retry loop in page_flip_ioctl
  drm: qxl: Delay entering atomic context during cursor update
  drm/radeon: Fix oops upon driver load on PowerXpress laptops
parents 08332893 82bc9a42
...@@ -948,8 +948,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, ...@@ -948,8 +948,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
} }
out: out:
if (ret && crtc->funcs->page_flip_target)
drm_crtc_vblank_put(crtc);
if (fb) if (fb)
drm_framebuffer_put(fb); drm_framebuffer_put(fb);
if (crtc->primary->old_fb) if (crtc->primary->old_fb)
...@@ -964,5 +962,8 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, ...@@ -964,5 +962,8 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
drm_modeset_drop_locks(&ctx); drm_modeset_drop_locks(&ctx);
drm_modeset_acquire_fini(&ctx); drm_modeset_acquire_fini(&ctx);
if (ret && crtc->funcs->page_flip_target)
drm_crtc_vblank_put(crtc);
return ret; return ret;
} }
...@@ -759,20 +759,23 @@ void psb_intel_lvds_init(struct drm_device *dev, ...@@ -759,20 +759,23 @@ void psb_intel_lvds_init(struct drm_device *dev,
if (scan->type & DRM_MODE_TYPE_PREFERRED) { if (scan->type & DRM_MODE_TYPE_PREFERRED) {
mode_dev->panel_fixed_mode = mode_dev->panel_fixed_mode =
drm_mode_duplicate(dev, scan); drm_mode_duplicate(dev, scan);
DRM_DEBUG_KMS("Using mode from DDC\n");
goto out; /* FIXME: check for quirks */ goto out; /* FIXME: check for quirks */
} }
} }
/* Failed to get EDID, what about VBT? do we need this? */ /* Failed to get EDID, what about VBT? do we need this? */
if (mode_dev->vbt_mode) if (dev_priv->lfp_lvds_vbt_mode) {
mode_dev->panel_fixed_mode = mode_dev->panel_fixed_mode =
drm_mode_duplicate(dev, mode_dev->vbt_mode); drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
if (!mode_dev->panel_fixed_mode) if (mode_dev->panel_fixed_mode) {
if (dev_priv->lfp_lvds_vbt_mode) mode_dev->panel_fixed_mode->type |=
mode_dev->panel_fixed_mode = DRM_MODE_TYPE_PREFERRED;
drm_mode_duplicate(dev, DRM_DEBUG_KMS("Using mode from VBT\n");
dev_priv->lfp_lvds_vbt_mode); goto out;
}
}
/* /*
* If we didn't get EDID, try checking if the panel is already turned * If we didn't get EDID, try checking if the panel is already turned
...@@ -789,6 +792,7 @@ void psb_intel_lvds_init(struct drm_device *dev, ...@@ -789,6 +792,7 @@ void psb_intel_lvds_init(struct drm_device *dev,
if (mode_dev->panel_fixed_mode) { if (mode_dev->panel_fixed_mode) {
mode_dev->panel_fixed_mode->type |= mode_dev->panel_fixed_mode->type |=
DRM_MODE_TYPE_PREFERRED; DRM_MODE_TYPE_PREFERRED;
DRM_DEBUG_KMS("Using pre-programmed mode\n");
goto out; /* FIXME: check for quirks */ goto out; /* FIXME: check for quirks */
} }
} }
......
...@@ -575,8 +575,6 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, ...@@ -575,8 +575,6 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
if (ret) if (ret)
return; return;
cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
if (fb != old_state->fb) { if (fb != old_state->fb) {
obj = to_qxl_framebuffer(fb)->obj; obj = to_qxl_framebuffer(fb)->obj;
user_bo = gem_to_qxl_bo(obj); user_bo = gem_to_qxl_bo(obj);
...@@ -614,6 +612,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, ...@@ -614,6 +612,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
qxl_bo_kunmap(cursor_bo); qxl_bo_kunmap(cursor_bo);
qxl_bo_kunmap(user_bo); qxl_bo_kunmap(user_bo);
cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
cmd->u.set.visible = 1; cmd->u.set.visible = 1;
cmd->u.set.shape = qxl_bo_physical_address(qdev, cmd->u.set.shape = qxl_bo_physical_address(qdev,
cursor_bo, 0); cursor_bo, 0);
...@@ -624,6 +623,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane, ...@@ -624,6 +623,7 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
if (ret) if (ret)
goto out_free_release; goto out_free_release;
cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release);
cmd->type = QXL_CURSOR_MOVE; cmd->type = QXL_CURSOR_MOVE;
} }
......
...@@ -116,7 +116,7 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) ...@@ -116,7 +116,7 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
if ((radeon_runtime_pm != 0) && if ((radeon_runtime_pm != 0) &&
radeon_has_atpx() && radeon_has_atpx() &&
((flags & RADEON_IS_IGP) == 0) && ((flags & RADEON_IS_IGP) == 0) &&
!pci_is_thunderbolt_attached(rdev->pdev)) !pci_is_thunderbolt_attached(dev->pdev))
flags |= RADEON_IS_PX; flags |= RADEON_IS_PX;
/* radeon_device_init should report only fatal error /* radeon_device_init should report only fatal error
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment