diff options
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 19 |
3 files changed, 23 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f0a1a56406eb..8bcdb981d540 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -9408,6 +9408,10 @@ static bool page_flip_finished(struct intel_crtc *crtc) | |||
| 9408 | struct drm_device *dev = crtc->base.dev; | 9408 | struct drm_device *dev = crtc->base.dev; |
| 9409 | struct drm_i915_private *dev_priv = dev->dev_private; | 9409 | struct drm_i915_private *dev_priv = dev->dev_private; |
| 9410 | 9410 | ||
| 9411 | if (i915_reset_in_progress(&dev_priv->gpu_error) || | ||
| 9412 | crtc->reset_counter != atomic_read(&dev_priv->gpu_error.reset_counter)) | ||
| 9413 | return true; | ||
| 9414 | |||
| 9411 | /* | 9415 | /* |
| 9412 | * The relevant registers doen't exist on pre-ctg. | 9416 | * The relevant registers doen't exist on pre-ctg. |
| 9413 | * As the flip done interrupt doesn't trigger for mmio | 9417 | * As the flip done interrupt doesn't trigger for mmio |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 5ad45bfff3fe..4bcd91757321 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -4450,6 +4450,7 @@ static void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder) | |||
| 4450 | * vdd might still be enabled do to the delayed vdd off. | 4450 | * vdd might still be enabled do to the delayed vdd off. |
| 4451 | * Make sure vdd is actually turned off here. | 4451 | * Make sure vdd is actually turned off here. |
| 4452 | */ | 4452 | */ |
| 4453 | cancel_delayed_work_sync(&intel_dp->panel_vdd_work); | ||
| 4453 | pps_lock(intel_dp); | 4454 | pps_lock(intel_dp); |
| 4454 | edp_panel_vdd_off_sync(intel_dp); | 4455 | edp_panel_vdd_off_sync(intel_dp); |
| 4455 | pps_unlock(intel_dp); | 4456 | pps_unlock(intel_dp); |
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 300c4b3d4669..26baa9c05f6c 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
| @@ -322,6 +322,12 @@ static void radeon_connector_get_edid(struct drm_connector *connector) | |||
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | if (!radeon_connector->edid) { | 324 | if (!radeon_connector->edid) { |
| 325 | /* don't fetch the edid from the vbios if ddc fails and runpm is | ||
| 326 | * enabled so we report disconnected. | ||
| 327 | */ | ||
| 328 | if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) | ||
| 329 | return; | ||
| 330 | |||
| 325 | if (rdev->is_atom_bios) { | 331 | if (rdev->is_atom_bios) { |
| 326 | /* some laptops provide a hardcoded edid in rom for LCDs */ | 332 | /* some laptops provide a hardcoded edid in rom for LCDs */ |
| 327 | if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) || | 333 | if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) || |
| @@ -826,6 +832,8 @@ static int radeon_lvds_mode_valid(struct drm_connector *connector, | |||
| 826 | static enum drm_connector_status | 832 | static enum drm_connector_status |
| 827 | radeon_lvds_detect(struct drm_connector *connector, bool force) | 833 | radeon_lvds_detect(struct drm_connector *connector, bool force) |
| 828 | { | 834 | { |
| 835 | struct drm_device *dev = connector->dev; | ||
| 836 | struct radeon_device *rdev = dev->dev_private; | ||
| 829 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 837 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
| 830 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); | 838 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
| 831 | enum drm_connector_status ret = connector_status_disconnected; | 839 | enum drm_connector_status ret = connector_status_disconnected; |
| @@ -842,7 +850,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force) | |||
| 842 | /* check if panel is valid */ | 850 | /* check if panel is valid */ |
| 843 | if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) | 851 | if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) |
| 844 | ret = connector_status_connected; | 852 | ret = connector_status_connected; |
| 845 | 853 | /* don't fetch the edid from the vbios if ddc fails and runpm is | |
| 854 | * enabled so we report disconnected. | ||
| 855 | */ | ||
| 856 | if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) | ||
| 857 | ret = connector_status_disconnected; | ||
| 846 | } | 858 | } |
| 847 | 859 | ||
| 848 | /* check for edid as well */ | 860 | /* check for edid as well */ |
| @@ -1589,6 +1601,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force) | |||
| 1589 | /* check if panel is valid */ | 1601 | /* check if panel is valid */ |
| 1590 | if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) | 1602 | if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) |
| 1591 | ret = connector_status_connected; | 1603 | ret = connector_status_connected; |
| 1604 | /* don't fetch the edid from the vbios if ddc fails and runpm is | ||
| 1605 | * enabled so we report disconnected. | ||
| 1606 | */ | ||
| 1607 | if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) | ||
| 1608 | ret = connector_status_disconnected; | ||
| 1592 | } | 1609 | } |
| 1593 | /* eDP is always DP */ | 1610 | /* eDP is always DP */ |
| 1594 | radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; | 1611 | radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; |
