From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751367AbdBUCmF (ORCPT ); Mon, 20 Feb 2017 21:42:05 -0500 Received: from regular1.263xmail.com ([211.150.99.139]:46994 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751211AbdBUCmC (ORCPT ); Mon, 20 Feb 2017 21:42:02 -0500 X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-RL-SENDER: mark.yao@rock-chips.com X-FST-TO: airlied@linux.ie X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Mark Yao To: David Airlie , Heiko Stuebner , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Mark Yao Subject: [PATCH 2/2] drm/rockchip: vop: verify pixelclock for hdmi and displayport Date: Tue, 21 Feb 2017 10:41:25 +0800 Message-Id: <1487644885-22492-2-git-send-email-mark.yao@rock-chips.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1487644885-22492-1-git-send-email-mark.yao@rock-chips.com> References: <1487644885-22492-1-git-send-email-mark.yao@rock-chips.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hdmi or DisplayPort request a accurate clock, reject the display mode if clock is not good. Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 7ec5d7f..a7c118e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -868,14 +868,24 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc, { struct vop *vop = to_vop(crtc); const struct vop_data *vop_data = vop->data; + struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state); + int clock; if (mode->hdisplay > vop_data->max_output.width) return false; if (mode->vdisplay > vop_data->max_output.height) return false; - adjusted_mode->clock = - clk_round_rate(vop->dclk, mode->clock * 1000) / 1000; + clock = clk_round_rate(vop->dclk, mode->clock * 1000) / 1000; + /* + * Hdmi or DisplayPort request a Accurate clock. + */ + if (s->output_type == DRM_MODE_CONNECTOR_HDMIA || + s->output_type == DRM_MODE_CONNECTOR_DisplayPort) + if (clock != mode->clock) + return false; + + adjusted_mode->clock = clock; return true; } -- 1.9.1