Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp466380ybl; Tue, 28 Jan 2020 06:24:47 -0800 (PST) X-Google-Smtp-Source: APXvYqwXr/TvtRKWLECCV9NAP8nMq9t2hvz2MU0/FALh19kL3LWHOQWJ2T/inYtrEK6S9LkO/Bx7 X-Received: by 2002:aca:4c9:: with SMTP id 192mr3072662oie.105.1580221487208; Tue, 28 Jan 2020 06:24:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580221487; cv=none; d=google.com; s=arc-20160816; b=KseMSp6TDzeQPyRAIfWHlz2Yu2UPclKc99RlO9TVbwzB43JsTJDuMLogGNzM0iY90S venxwVxjuAxn28EUASQQWTc/INmXxEhSIByfaVKctvXw6OGGAkSOVNjP+K3oWpxnC8zX eLRmeRu91Iusst2c+1YijK6aatySBenxOOgGSY/QA0bjpVH3I0nlPKdMAG7gXuvZMKPa MY2QXTheiqseT1XSqq1zlR0LHnQUaDTnd672v2FnDSVNu/QBzHlOH6ezzWvavgquPlCb nTxWg8lijo5BpJn1GXSmt26IxXqF9aIOuklUCOcGZCFpr5ga1Ky0qcdaH9uVI1Y5pN7/ +S5Q== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=PGBXGvO6mGYVMBhyLeX9HZdtm5mTLcFBfbZRXQw8+WE=; b=o+LWQIQc6sg4MrMi5Km98hvzYzDXL26EtTUpg5EDtBhTcrUUsgtM9U9GvhHgp7MXP6 alG/a1vVlTBK1VCEnrtukHVp+Ul6hzvpYYbeX6lGj/AdiqVnPQ2Xu1DPoe07AD3M5w5W m0vBnjZ50bIJ0SFP39d91Iw/qcZVOT4OMWBOzxg9A/UUFvdCxvN2wwmsDXmjxKpQbgKl QQ4ldllfI30HZKaZ/BPbUZOcsWW+WcCS8PKM4qvADjC7q7250dqx2pr2oUCaX2g/bXkt gf2WMBcgoYcWy7LiWGCNRWFilqVxqXBclbQNdEwHbg8ZAElTOqKr03rdk537vyQS/rdh sLTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hWC56A4K; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s188si302307oia.277.2020.01.28.06.24.35; Tue, 28 Jan 2020 06:24:47 -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=hWC56A4K; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732397AbgA1OXn (ORCPT + 99 others); Tue, 28 Jan 2020 09:23:43 -0500 Received: from mail.kernel.org ([198.145.29.99]:49818 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728559AbgA1OXg (ORCPT ); Tue, 28 Jan 2020 09:23:36 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6B73224686; Tue, 28 Jan 2020 14:23:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1580221415; bh=5RI0BHXybSUsHLdcfZyRe5r8mC4ow8i5/53KYlleeUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hWC56A4K5iNmKjYkC/WCJ4gcVF7P72bCbDIK2Sp0LKLEkeapI6s/WcpBGaHj8bZ23 ddH21137ISKV5E1yN7/v+J3OIZcmEK7mCZzB/p1XS15sIWHu6w/fumCc6yq2NEZxKM 6UQuvrAKjLBkTKTXeCZfo2vaLD4hYT3cLo9M/XD0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hai Li , Rob Clark , Jeffrey Hugo , Sean Paul , Sean Paul , Sasha Levin Subject: [PATCH 4.9 215/271] drm/msm/dsi: Implement reset correctly Date: Tue, 28 Jan 2020 15:06:04 +0100 Message-Id: <20200128135908.532405202@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200128135852.449088278@linuxfoundation.org> References: <20200128135852.449088278@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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 6f240021705b0..e49b414c012c6 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