Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2509909pxj; Mon, 10 May 2021 04:51:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyBlADLe0zLsUctc1wOiLCRlNW2dR70+wV0hmK1VQ+p9HaNe+mGHVG9/eOoPF+Em+dC3p4u X-Received: by 2002:aa7:d594:: with SMTP id r20mr28404273edq.242.1620647504910; Mon, 10 May 2021 04:51:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620647504; cv=none; d=google.com; s=arc-20160816; b=Q1fWjmGGgqqVtcqPohoTyqZRTZVSa7Q4Ttyfp3aIui6hY2PFB8nhoa1fOOZeDpXfuy x2pIKiOQN/5UFEYkE68aaJDbcxetikA2bk6kTetJD+xvsj/dYIOivOenY2y7OwlMqxVU Zp0Nc6b+7seNxLOxZFTeNieMaXCZIXmHV+SiX7TOweHDh1GXA+xfo3XDgX9oFhP7eMtR tj97xK3cW5XKibkNQInIlTrv9XhzFZkdJQAUTlu5HgFtkohDoZqPAgTt5FnZwtj0qoPL 8SZFv0ikV8zAw1vt7drGLDqKsNKjWKpvUhJiZpeut2jvMgGdwILCi/JfexVSb4JVReVi sZ2Q== 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=BGlpac2O/ADblC0MyYOukaTdSH88p45O00QRn2nBClc=; b=aBGkwv4Y0QvxfjjysNU1GK2y21wNBvDarb6y3oi66yXparoeOhqqZxKCgfzOTKXMcq Sp66mBzqUh3CGefbJVI1RcNBdDB3HWS5cs9+yFbA9QTOHaOfj07TNEWDGjZWEt+/o8KM Vki6NdjAtc8jTrpBnav3nbfIJ9OL6O7ziQIrqVIWroWyE2LOH9P+GwMJZHfH0Ve041sc XmlwJj8tffkm+oRVMk/tBRWdMDNzYR3pNlIGPb5+gABeP7V2TVJNoeWGbEOzdtMdM6+5 YmQcErRlyfgBicAqNbXgd8Xc6h8Zc2AI2I8rKN0PcHBjNmerPJpyn0xupx5SsNAmFC0Q /94A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=AfQyuoDj; 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 bx14si14269801edb.119.2021.05.10.04.51.20; Mon, 10 May 2021 04:51:44 -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=AfQyuoDj; 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 S242981AbhEJLsB (ORCPT + 99 others); Mon, 10 May 2021 07:48:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:34818 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235379AbhEJLAu (ORCPT ); Mon, 10 May 2021 07:00:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 55C3061A46; Mon, 10 May 2021 10:53:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620644005; bh=iP8Xl5cIV0qr7oBh+yfEjl1AhKiBKCLTrvuWfKZd+bY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AfQyuoDjqDScyL6jgxaKnNegYaLI9rrqAIkiAB5g+ZE5pKMdhvGZAJGH6IM7eQ65Z l87iGGj4UolauNFaME+ndpWTXLQnJlpy9Op/ZqhRfCRgDL3xYm/Rlh0/zKvBCKt/xV xZsYY1oXdJe6sNK47TZvaehnBE39oxNISYuLK7+U= 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.11 214/342] drm/msm/mdp5: Do not multiply vclk line count by 100 Date: Mon, 10 May 2021 12:20:04 +0200 Message-Id: <20210510102017.161905828@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102010.096403571@linuxfoundation.org> References: <20210510102010.096403571@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 f6df4d3b1406..0392d4dfe270 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c @@ -20,7 +20,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; @@ -30,8 +30,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; @@ -43,7 +43,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