In the DP driver, check if VSC SDP is supported and propagate this value
to dp_panel. In dp_display's dp_mode, the out_fmt_is_yuv_420 parameter
must also utilize this value since YUV420 is only allowed when VSC SDP
is supported.

Changes in v2:
        - Move DP programming when VSC SDP is supported to this patch

Signed-off-by: Paloma Arellano <quic_parel...@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 drivers/gpu/drm/msm/dp/dp_display.c | 5 ++++-
 drivers/gpu/drm/msm/dp/dp_panel.c   | 1 +
 drivers/gpu/drm/msm/dp/dp_panel.h   | 1 +
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/dp/dp_display.c 
b/drivers/gpu/drm/msm/dp/dp_display.c
index 1a84f68e2b59a..4b1b79b74bc72 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -1596,8 +1596,10 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge,
        struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
        struct msm_dp *dp = dp_bridge->dp_display;
        struct dp_display_private *dp_display;
+       struct dp_panel *dp_panel;
 
        dp_display = container_of(dp, struct dp_display_private, dp_display);
+       dp_panel = dp_display->panel;
 
        memset(&dp_display->dp_mode, 0x0, sizeof(struct dp_display_mode));
 
@@ -1618,7 +1620,8 @@ void dp_bridge_mode_set(struct drm_bridge *drm_bridge,
                !!(dp_display->dp_mode.drm_mode.flags & DRM_MODE_FLAG_NHSYNC);
 
        dp_display->dp_mode.out_fmt_is_yuv_420 =
-               drm_mode_is_420_only(&dp->connector->display_info, 
adjusted_mode);
+               drm_mode_is_420_only(&dp->connector->display_info, 
adjusted_mode) &&
+               dp_panel->vsc_sdp_supported;
 
        /* populate wide_bus_support to different layers */
        dp_display->ctrl->wide_bus_en =
diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c 
b/drivers/gpu/drm/msm/dp/dp_panel.c
index 127f6af995cd1..db1942794f1a4 100644
--- a/drivers/gpu/drm/msm/dp/dp_panel.c
+++ b/drivers/gpu/drm/msm/dp/dp_panel.c
@@ -53,6 +53,7 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
        if (rc)
                return rc;
 
+       dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, 
dpcd);
        link_info = &dp_panel->link_info;
        link_info->revision = dpcd[DP_DPCD_REV];
        major = (link_info->revision >> 4) & 0x0f;
diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h 
b/drivers/gpu/drm/msm/dp/dp_panel.h
index 6ec68be9f2366..e843f5062d1f6 100644
--- a/drivers/gpu/drm/msm/dp/dp_panel.h
+++ b/drivers/gpu/drm/msm/dp/dp_panel.h
@@ -46,6 +46,7 @@ struct dp_panel {
        struct dp_display_mode dp_mode;
        struct dp_panel_psr psr_cap;
        bool video_test;
+       bool vsc_sdp_supported;
 
        u32 vic;
        u32 max_dp_lanes;
-- 
2.39.2

Reply via email to