Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2463621pxj; Mon, 10 May 2021 03:42:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxnnC8W9iBrb9HvQDE4O5oDCIW6ScmkWmo4JdrtkHhpZuuCwiCrHTs83NEqhIqfITn8SnFJ X-Received: by 2002:a17:906:11d5:: with SMTP id o21mr21069509eja.176.1620643343964; Mon, 10 May 2021 03:42:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620643343; cv=none; d=google.com; s=arc-20160816; b=XUn7+BdvwQvgDgP7DOmn331vDgFUsAQJNOadGa2Bn+3E3qg6sFxv5wHYrd/8BF0cJi uZXcTzyTNgp9d6NxB9Jkg9/OIv7I4Nabk624Y8J+cB8ahq83GJB5NY0BmUXBPvCqGmc5 8Ya3RCM9/Ki5ldxL8b4Hh5M5V8juxC1sOaBDwB1wIpjQoQmJzCdlCO4JBpr3ZGK2xTIQ U25K8BfHcU9jUcqOzEckinZV2axuEQQdD4bW3SJpnIWwdY7wm4fKoBq36eEYwjqNJFLF yQj9DrSDD0KEc/VXN+3kAf9ATgDow/Ajvg15al30rldhXkSIGUoe9ZJ9/sSbu14o0/5J kO5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=i9yMwhAAws1DBvzXXfUMTnAax9k00IDfOG2ISlneiBU=; b=iZQQbgkpV5j5TmAQxEgu9LHX/NLiDcZkBIIwyj/P9mMm9XZFBVNySC9cBxtphQDxco HuCu+NR6mTXDPcEAk5QsBgNNRS7EBrP6D3TH5ZijGf8vNNseWhTkRXK6BYQj84hJUNr8 SSVGoLya2dfdFVHy78YG7kvkAMI7hG6WtJ7wQuUn0OuJq48S9W3h6o4qiriAGVBuziuc x0l5Ow57jRQ/7dpmAxifisFPyLurHx13Gv9oB2pE/G5Qj1eQq+XqbpmZzm/gjSMSSF3T RV2pswI1O2S1p2bmZB1T6wpFMkG2spXLUI4liJQORiOimd779oUdkYHyV8oRE+lpzi8B RiOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eOWFpIiN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v29si12729093eda.308.2021.05.10.03.42.00; Mon, 10 May 2021 03:42:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eOWFpIiN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232072AbhEJKmH (ORCPT + 99 others); Mon, 10 May 2021 06:42:07 -0400 Received: from mail.kernel.org ([198.145.29.99]:41804 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232389AbhEJKea (ORCPT ); Mon, 10 May 2021 06:34:30 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C3F5761075; Mon, 10 May 2021 10:28:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620642492; bh=BCOE47gw0we5L3WlvPJTxVG0irZDJI/+FHR8ebkLFQc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eOWFpIiN1byhjLWpkVxHL6gRtlcMIj16u3syf21+gXhYEPw2sjVFOG5TMw8zwtnlf Q+zzjxR13iNl+WJ4kVaTmvLdF1PJoTGSYhIEtahJqsVgLa5BM9fIZp+aOS9xECdEch iqZZoAhzrspde/6xVDo80NRLAbNhRJvfafB13HJo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, AngeloGioacchino Del Regno , Marijn Suijten , Rob Clark , Sasha Levin Subject: [PATCH 5.4 115/184] drm/msm/mdp5: Do not multiply vclk line count by 100 Date: Mon, 10 May 2021 12:20:09 +0200 Message-Id: <20210510101953.954823470@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510101950.200777181@linuxfoundation.org> References: <20210510101950.200777181@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marijn Suijten [ Upstream commit 377569f82ea8228c421cef4da33e056a900b58ca ] Neither vtotal nor drm_mode_vrefresh contain a value that is premultiplied by 100 making the x100 variable name incorrect and resulting in vclks_line to become 100 times larger than it is supposed to be. The hardware counts 100 clockticks too many before tearcheck, leading to severe panel issues on at least the Sony Xperia lineup. This is likely an artifact from the original MDSS DSI panel driver where the calculation [1] corrected for a premultiplied reference framerate by 100 [2]. It does not appear that the above values were ever premultiplied in the history of the DRM MDP5 driver. With this change applied the value written to the SYNC_CONFIG_VSYNC register is now identical to downstream kernels. [1]: https://source.codeaurora.org/quic/la/kernel/msm-3.18/tree/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c?h=LA.UM.8.6.c26-02400-89xx.0#n288 [2]: https://source.codeaurora.org/quic/la/kernel/msm-3.18/tree/drivers/video/msm/mdss/mdss_dsi_panel.c?h=LA.UM.8.6.c26-02400-89xx.0#n1648 Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Marijn Suijten Link: https://lore.kernel.org/r/20210406214726.131534-3-marijn.suijten@somainline.org Signed-off-by: Rob Clark Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c index 288f18cbf62d..0425400f44db 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c @@ -41,7 +41,7 @@ static int pingpong_tearcheck_setup(struct drm_encoder *encoder, { struct mdp5_kms *mdp5_kms = get_kms(encoder); struct device *dev = encoder->dev->dev; - u32 total_lines_x100, vclks_line, cfg; + u32 total_lines, vclks_line, cfg; long vsync_clk_speed; struct mdp5_hw_mixer *mixer = mdp5_crtc_get_mixer(encoder->crtc); int pp_id = mixer->pp; @@ -51,8 +51,8 @@ static int pingpong_tearcheck_setup(struct drm_encoder *encoder, return -EINVAL; } - total_lines_x100 = mode->vtotal * drm_mode_vrefresh(mode); - if (!total_lines_x100) { + total_lines = mode->vtotal * drm_mode_vrefresh(mode); + if (!total_lines) { DRM_DEV_ERROR(dev, "%s: vtotal(%d) or vrefresh(%d) is 0\n", __func__, mode->vtotal, drm_mode_vrefresh(mode)); return -EINVAL; @@ -64,7 +64,7 @@ static int pingpong_tearcheck_setup(struct drm_encoder *encoder, vsync_clk_speed); return -EINVAL; } - vclks_line = vsync_clk_speed * 100 / total_lines_x100; + vclks_line = vsync_clk_speed / total_lines; cfg = MDP5_PP_SYNC_CONFIG_VSYNC_COUNTER_EN | MDP5_PP_SYNC_CONFIG_VSYNC_IN_EN; -- 2.30.2