Signed-off-by: Jeff Smith <whydo...@gmail.com>
---
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c    | 32 ++++++++++++++++------
 .../display/dc/dce110/dce110_timing_generator.c    |  4 ---
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
index 3912dc8..eda813e 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -649,8 +649,7 @@ static void update_stream_scaling_settings(
                return;
 
        /* Full screen scaling by default */
-       src.width = mode->hdisplay;
-       src.height = mode->vdisplay;
+       drm_crtc_get_hv_timing(mode, &src.width, &src.height);
        dst.width = stream->timing.h_addressable;
        dst.height = stream->timing.v_addressable;
 
@@ -853,7 +852,22 @@ static void fill_stream_properties_from_drm_display_mode(
        else
                timing_out->pixel_encoding = PIXEL_ENCODING_RGB;
 
-       timing_out->timing_3d_format = TIMING_3D_FORMAT_NONE;
+       switch (mode_in->flags & DRM_MODE_FLAG_3D_MASK) {
+       case DRM_MODE_FLAG_3D_FRAME_PACKING:
+               timing_out->timing_3d_format = 
TIMING_3D_FORMAT_SW_FRAME_PACKING;
+               break;
+       case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM:
+               timing_out->timing_3d_format = TIMING_3D_FORMAT_TB_SW_PACKED;
+               break;
+       case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF:
+               timing_out->timing_3d_format = TIMING_3D_FORMAT_SBS_SW_PACKED;
+               break;
+       case DRM_MODE_FLAG_3D_NONE:
+       default:
+               timing_out->timing_3d_format = TIMING_3D_FORMAT_NONE;
+               break;
+       }
+
        timing_out->display_color_depth = convert_color_depth_from_display_info(
                        connector);
        timing_out->scan_type = SCANNING_TYPE_NODATA;
@@ -1028,6 +1042,7 @@ static struct dc_stream *create_stream_for_sink(
                                dm_state->scaling != RMX_OFF);
        }
 
+       drm_mode_set_crtcinfo(&mode, CRTC_STEREO_DOUBLE_ONLY);
        fill_stream_properties_from_drm_display_mode(stream,
                        &mode, &aconnector->base);
        update_stream_scaling_settings(&mode, dm_state, stream);
@@ -1558,13 +1573,12 @@ int amdgpu_dm_connector_mode_valid(
                goto stream_create_fail;
        }
 
-       drm_mode_set_crtcinfo(mode, 0);
+       drm_mode_set_crtcinfo(mode, CRTC_STEREO_DOUBLE);
        fill_stream_properties_from_drm_display_mode(stream, mode, connector);
 
        val_set.stream = stream;
        val_set.surface_count = 0;
-       stream->src.width = mode->hdisplay;
-       stream->src.height = mode->vdisplay;
+       drm_crtc_get_hv_timing(mode, &stream->src.width, &stream->src.height);
        stream->dst = stream->src;
 
        if (dc_validate_resources(adev->dm.dc, &val_set, 1))
@@ -1793,14 +1807,13 @@ int dm_create_validation_set_for_connector(struct 
drm_connector *connector,
                return result;
        }
 
-       drm_mode_set_crtcinfo(mode, 0);
+       drm_mode_set_crtcinfo(mode, CRTC_STEREO_DOUBLE);
 
        fill_stream_properties_from_drm_display_mode(stream, mode, connector);
 
        val_set->stream = stream;
 
-       stream->src.width = mode->hdisplay;
-       stream->src.height = mode->vdisplay;
+       drm_crtc_get_hv_timing(mode, &stream->src.width, &stream->src.height);
        stream->dst = stream->src;
 
        return MODE_OK;
@@ -2073,6 +2086,7 @@ void amdgpu_dm_connector_init_helper(
        aconnector->dc_link = link;
        aconnector->base.interlace_allowed = true;
        aconnector->base.doublescan_allowed = true;
+       aconnector->base.stereo_allowed = true;
        aconnector->base.dpms = DRM_MODE_DPMS_OFF;
        aconnector->hpd.hpd = AMDGPU_HPD_NONE; /* not used */
 
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c 
b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c
index f4b8576..fa06816 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c
@@ -1113,10 +1113,6 @@ bool dce110_timing_generator_validate_timing(
        if (!timing)
                return false;
 
-       /* Currently we don't support 3D, so block all 3D timings */
-       if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE)
-               return false;
-
        /* Temporarily blocking interlacing mode until it's supported */
        if (timing->flags.INTERLACE == 1)
                return false;
-- 
2.9.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to