summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
diff options
context:
space:
mode:
authorYongqiang Sun <yongqiang.sun@amd.com>2017-10-10 14:01:33 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-10-21 16:51:25 -0400
commit62c933f9c6bf287b5b911a1eb838bc942eaa7202 (patch)
tree9a40510fedf91338570fe0b88d35c6128aa6846c /drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
parent4e527c01aa7a31b7aad98fa5493944891b69238d (diff)
downloadtalos-op-linux-62c933f9c6bf287b5b911a1eb838bc942eaa7202.tar.gz
talos-op-linux-62c933f9c6bf287b5b911a1eb838bc942eaa7202.zip
drm/amd/display: WA for 3 display play video hot plug.
Three monitor connected and playing a video will occupy all 4 pipes, if hot plug forth display, commit streams will be failed due to no free pipe can be found. Work around: When forth monitor connected, mark video plane as a fake plane, remove it in dc, keep it in dm and report address to OS, until OS turn off MPO. Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c')
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 60587d6f81d7..0d1b41298990 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -2794,7 +2794,7 @@ int amdgpu_dm_connector_mode_valid(struct drm_connector *connector,
stream->src.height = mode->vdisplay;
stream->dst = stream->src;
- if (dc_validate_stream(adev->dm.dc, stream))
+ if (dc_validate_stream(adev->dm.dc, stream) == DC_OK)
result = MODE_OK;
dc_stream_release(stream);
@@ -2839,7 +2839,7 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc,
if (!dm_crtc_state->stream)
return 0;
- if (dc_validate_stream(dc, dm_crtc_state->stream))
+ if (dc_validate_stream(dc, dm_crtc_state->stream) == DC_OK)
return 0;
return ret;
@@ -3034,7 +3034,7 @@ static int dm_plane_atomic_check(struct drm_plane *plane,
if (!dm_plane_state->dc_state)
return 0;
- if (dc_validate_plane(dc, dm_plane_state->dc_state))
+ if (dc_validate_plane(dc, dm_plane_state->dc_state) == DC_OK)
return 0;
return -EINVAL;
@@ -4464,10 +4464,10 @@ static int dm_update_crtcs_state(struct dc *dc,
crtc->base.id);
/* i.e. reset mode */
- if (!dc_remove_stream_from_ctx(
+ if (dc_remove_stream_from_ctx(
dc,
dm_state->context,
- dm_old_crtc_state->stream)) {
+ dm_old_crtc_state->stream) != DC_OK) {
ret = -EINVAL;
goto fail;
}
OpenPOWER on IntegriCloud