Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp478741pxf; Wed, 7 Apr 2021 04:26:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwD3jzribAKZt/uBQSuRLzAkL9PWeumJ83udc9fbL2BuvReCzlEpw1dDvLvz80CyilR89+Q X-Received: by 2002:a02:6a09:: with SMTP id l9mr2951520jac.57.1617794805840; Wed, 07 Apr 2021 04:26:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617794805; cv=none; d=google.com; s=arc-20160816; b=uBH55rmlxNXdwjOHXMk+zNLo8fRWMjaf9cFzprQzj9PqUrw0i8TRjjVoyekga8SGL1 z2D/alpQDr+VaDSrwKg9HZ0ReQQktM13WWCymuo3NwCS+E92lUX+qVUCCXejAovLAJMJ CXYOgOBaRtYhA4+b20kU8dZn8bs9eH4BM1mQLkIpaJsRDWNOVaiv4dc55SmUbmYiHIZk jlbcdx1QKa0sW46m6Qp1NAHoyGmDQPsHmjYo/LbfxqU63YgyNJx38OOKtW2NeZ98sx8g 0iBytVLZheXzxuqBHtqRowCRG6M9qFmhxD7bK+5DxJSo+/IpFzG/iNMZ9vD8GpWM0lRA q1rg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Q/vtV28pbV/vKi5Trvm5K2Jee7RRB/9WA4NZMpTtV1k=; b=RT6tT7iEN9SYgIOdzeXQdRkIvyBNLGaEeUZMOEmtEzQVHIcbhdody2ne0Wva/pnSiS kuiqk7suvGDo6ZNshKvEromDpPF7Xv8ccrq2Fc/vHC6EjeJIdKYl2cb4u6KiK5jt6vtZ 799kn0LA3ISXk6D/HdZOxQeQLdq3PChC/giqJWWILrfm06Xx5dF4sT9pB8UjlFCMztRA IE/TxpExOBYyF7MPtfcoszQ7x6TWPPwIhLB+U8Vr2EOXMPYw50+tco78fp4/14Weq202 pcPnneJOYSKXteiPl301pVqePUSEKIOlnBfN0Z1u/iuQbPfvr+WU2rnX13BcvHgkqyvE tkbQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m16si20728668iln.75.2021.04.07.04.26.31; Wed, 07 Apr 2021 04:26:45 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343809AbhDFVr4 (ORCPT + 99 others); Tue, 6 Apr 2021 17:47:56 -0400 Received: from relay06.th.seeweb.it ([5.144.164.167]:53159 "EHLO relay06.th.seeweb.it" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343745AbhDFVry (ORCPT ); Tue, 6 Apr 2021 17:47:54 -0400 Received: from Marijn-Arch-PC.localdomain (94-209-165-62.cable.dynamic.v4.ziggo.nl [94.209.165.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by m-r2.th.seeweb.it (Postfix) with ESMTPSA id 3C8833F3F1; Tue, 6 Apr 2021 23:47:41 +0200 (CEST) From: Marijn Suijten To: phone-devel@vger.kernel.org Cc: ~postmarketos/upstreaming@lists.sr.ht, AngeloGioacchino Del Regno , Konrad Dybcio , Martin Botka , Marijn Suijten , Rob Clark , Sean Paul , David Airlie , Daniel Vetter , Sai Prakash Ranjan , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] drm/msm/mdp5: Do not multiply vclk line count by 100 Date: Tue, 6 Apr 2021 23:47:25 +0200 Message-Id: <20210406214726.131534-3-marijn.suijten@somainline.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210406214726.131534-1-marijn.suijten@somainline.org> References: <20210406214726.131534-1-marijn.suijten@somainline.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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 2d5ac03dbc17..0bda4257823a 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.31.1