Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8323521ybl; Thu, 16 Jan 2020 14:37:31 -0800 (PST) X-Google-Smtp-Source: APXvYqx+xYYqniG29ZTHpPhyduahSZBU76n3lShPUWE9QaPwgt6YKgVEYijrm0ulLPnPk/sNW7lp X-Received: by 2002:a9d:53c4:: with SMTP id i4mr4150848oth.48.1579214251750; Thu, 16 Jan 2020 14:37:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579214251; cv=none; d=google.com; s=arc-20160816; b=g31H4PrLik1dMfd5g/L5WLCBAFoHohL0MUAMbR8/+Y6kNoYTEEhVb+/4Ej1inpSvuy GA4PbQ8lPP26AtZaSP5NRltKtbk1ItOiDoMydOXy7DPtVOnJW3UDtHtVZo4hlAfEBycT 7of5ydOxvzNFlvglR7cbAYZO28ANFOPZqGl08eA7JaQipc1AaN5fh99RGpnZ4H9Fma84 6Q1vesxSeKoYfn5oDj5098v1n+wK4n0uuA6N29FA799p0cFLKX+/hFIZ7KvoPkWtG1OV uyZ2OOZrsn1sNaer48Mi/El2lrGrS51RVwrCHHbpPHmdpr8FE6RE0jj4tBoNXFnHELjA LxrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=H06VxYLxLiAaa4mozCSKTZPLeEiESKRgGHYBszT39PM=; b=s0USbtO6C8lfoTKjXE0GZ5FsXdZKud7pS2MaUteISTLq5N7tT1zFCeQhC2RFNV50xU D/cYAQhjJoySvtkLvH/fyAAvDP6P8HIcetKhoj9T7KJ3vYhNSRlAf0E1xWkzaRkcJFFh MZP5zN+gSgMSUpbsG3LNUFFqlbxkkM6PsLJohFX66LynumN9KII1KeQWc886BtrEffJS vj2Cd/c0TMg7kXqoqx8F0OQeAesLHK1UptkUE3hF9Kw2JEiuRB0tFwo0RnL5C+CdzG8/ MFoFCazCpAidrJGYNdJB23dKLvyI/MFR7QaSXicxPPrJNROVBCBBEoAhoPm434oV8qZZ lYag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dlQzgEDz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d6si12450923oic.274.2020.01.16.14.37.19; Thu, 16 Jan 2020 14:37:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dlQzgEDz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405779AbgAPSCl (ORCPT + 99 others); Thu, 16 Jan 2020 13:02:41 -0500 Received: from mail.kernel.org ([198.145.29.99]:58534 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405083AbgAPRlF (ORCPT ); Thu, 16 Jan 2020 12:41:05 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 23EA42467C; Thu, 16 Jan 2020 17:41:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196464; bh=mlxYd5cszeChQ7P+G40T2hUzaO7kh5hQ4w884GddtDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dlQzgEDzAxErlmX5rckjbCh1oqCCO6TtwIutbt5BH72z1FN8HlXQzl4GZiCf2kLEY pgSVD79NwHBIYBbRa975zQUoi7VPFWwBW19lJt5Q/YFqOdzoeqxHeT0ZzTJ6mPhH/2 oHpYPE2d/IJXMl5LyqKBgBLTPnBJlQRh7H95E1sE= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jeffrey Hugo , Hai Li , Rob Clark , Sean Paul , Sean Paul , Sasha Levin , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.9 217/251] drm/msm/dsi: Implement reset correctly Date: Thu, 16 Jan 2020 12:36:06 -0500 Message-Id: <20200116173641.22137-177-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jeffrey Hugo [ Upstream commit 78e31c42261779a01bc73472d0f65f15378e9de3 ] On msm8998, vblank timeouts are observed because the DSI controller is not reset properly, which ends up stalling the MDP. This is because the reset logic is not correct per the hardware documentation. The documentation states that after asserting reset, software should wait some time (no indication of how long), or poll the status register until it returns 0 before deasserting reset. wmb() is insufficient for this purpose since it just ensures ordering, not timing between writes. Since asserting and deasserting reset occurs on the same register, ordering is already guaranteed by the architecture, making the wmb extraneous. Since we would define a timeout for polling the status register to avoid a possible infinite loop, lets just use a static delay of 20 ms, since 16.666 ms is the time available to process one frame at 60 fps. Fixes: a689554ba6ed ("drm/msm: Initial add DSI connector support") Cc: Hai Li Cc: Rob Clark Signed-off-by: Jeffrey Hugo Reviewed-by: Sean Paul [seanpaul renamed RESET_DELAY to DSI_RESET_TOGGLE_DELAY_MS] Signed-off-by: Sean Paul Link: https://patchwork.freedesktop.org/patch/msgid/20191011133939.16551-1-jeffrey.l.hugo@gmail.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/dsi/dsi_host.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 6f240021705b..e49b414c012c 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -33,6 +33,8 @@ #include "sfpb.xml.h" #include "dsi_cfg.h" +#define DSI_RESET_TOGGLE_DELAY_MS 20 + static int dsi_get_version(const void __iomem *base, u32 *major, u32 *minor) { u32 ver; @@ -909,7 +911,7 @@ static void dsi_sw_reset(struct msm_dsi_host *msm_host) wmb(); /* clocks need to be enabled before reset */ dsi_write(msm_host, REG_DSI_RESET, 1); - wmb(); /* make sure reset happen */ + msleep(DSI_RESET_TOGGLE_DELAY_MS); /* make sure reset happen */ dsi_write(msm_host, REG_DSI_RESET, 0); } @@ -1288,7 +1290,7 @@ static void dsi_sw_reset_restore(struct msm_dsi_host *msm_host) /* dsi controller can only be reset while clocks are running */ dsi_write(msm_host, REG_DSI_RESET, 1); - wmb(); /* make sure reset happen */ + msleep(DSI_RESET_TOGGLE_DELAY_MS); /* make sure reset happen */ dsi_write(msm_host, REG_DSI_RESET, 0); wmb(); /* controller out of reset */ dsi_write(msm_host, REG_DSI_CTRL, data0); -- 2.20.1