From patchwork Mon Jan 15 17:16:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Escande X-Patchwork-Id: 10165071 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EB58760245 for ; Mon, 15 Jan 2018 17:33:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D1AD9205A9 for ; Mon, 15 Jan 2018 17:33:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C597D205AF; Mon, 15 Jan 2018 17:33:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6F3BC205A9 for ; Mon, 15 Jan 2018 17:33:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7Oglp7yAgHYSoW/jAJi1FwtgOoc9EbTFYDek3tpIbvA=; b=jpo5aVrf3s9vIh fQ1UdFnwFAaQR7Sp9FUtwxRmOss+dGwSc6EkjX/RE24Kl+2EVoW/IGNmirkrnl1d04n1PLSTprqdN CFR5Yo12SlUCxP5fwXxqzRLT0jYjCJyB+JI3qvnnah+COinZSyrH/1LDdz0tyA6CHeQlaAcofinU4 /jRp3LVFJzWGCa9Gl29cqSdNIce4zjeFsd2kuq/7zMPlDhVa5sFMF3latS3EEhF1SMarw5rzFJeD1 FvnGqTFS8byriCOSKYke6+T5tfdj7VXg/LD18fzN+fMY6f6AWI3KFEaWw69U6ivy8e09ExyaGBTls obeCjSBan64S/u/2HebA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eb8di-0002NH-Ed; Mon, 15 Jan 2018 17:33:42 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eb8dU-00022I-Hw for linux-rockchip@bombadil.infradead.org; Mon, 15 Jan 2018 17:33:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=UtVuIr1M/ek81ofvDYfOZ7JbMt8veKCUOnYubyL49vw=; b=n7ZHksAdfyvF/6A08CBZE6uW0 pj5o2edlf1/Y1gIDSp1Tb/ZzBnnckU/WX24eGtOdzGMkK/gdGXCWiKMyFRSLbwvtyVqQZbBu0+xL2 nGDmuHI46QWtXTl9HmzR3vwZEPI0eBrPvG/BLtBw/4a5xTBRTZW7OATTcI+Ga/wIswXV4N/LHSYEU phgYH0gk6SeBDEh+2D2Ufek6JTQ0Tl33bX5sBGvYgJ3B3jYhXoPPMM0SN1wEgE6apk5qgULOMeRF7 SZx/8MxEuiXOjrMGPnXrz7C1J4ktz+b9TQoc0+Mn348mdV1xOZxQDXypcA8gmRpU5U2nwhg/k91vS u0aG7D3HQ==; Received: from bhuna.collabora.co.uk ([46.235.227.227]) by casper.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eb8OB-0006JA-BE for linux-rockchip@lists.infradead.org; Mon, 15 Jan 2018 17:17:42 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e35:8a7e:4790:5118:57f7:752d:6fb0]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tescande) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 8234A270B58; Mon, 15 Jan 2018 17:17:13 +0000 (GMT) From: Thierry Escande To: Archit Taneja , Inki Dae , Thierry Reding , Sandy Huang , Sean Paul , David Airlie Subject: [PATCH 30/40] drm/rockchip: Flush PSR before committing modeset disables/enables Date: Mon, 15 Jan 2018 18:16:04 +0100 Message-Id: <20180115171614.14474-31-thierry.escande@collabora.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180115171614.14474-1-thierry.escande@collabora.com> References: <20180115171614.14474-1-thierry.escande@collabora.com> MIME-Version: 1.0 Content-Transfert-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180115_171739_456112_49353EBE X-CRM114-Status: UNSURE ( 9.99 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: zain wang , Lin Huang , linux-kernel@vger.kernel.org, Douglas Anderson , dri-devel@lists.freedesktop.org, Tomasz Figa , linux-rockchip@lists.infradead.org, Yakir Yang , =?UTF-8?q?=C3=98rjan=20Eide?= , Mark Yao , Haixia Shi Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tomasz Figa Currently PSR flush is triggered from CRTC's .atomic_begin() callback, which is executed after modeset disables and enables and before plane updates are committed. Since PSR flush and re-enable can be triggered asynchronously by external sources (input event, delayed work), it can race with hardware programming done in the aforementioned stages. To avoid the race, we can trigger PSR flush before committing modeset disables/enables. This also has the advantage of removing some PSR-specific knowledge from the VOP driver. Cc: Kristian H. Kristensen Signed-off-by: Tomasz Figa Signed-off-by: Sean Paul Signed-off-by: Thierry Escande --- drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 21 ++++++++++++++++++++- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 ------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c index e266539e04e5..aaeb38ada2ba 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -167,8 +167,27 @@ rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, return ERR_PTR(ret); } +static void +rockchip_drm_psr_flush_state(struct drm_atomic_state *state) +{ + struct drm_crtc_state *crtc_state; + struct drm_crtc *crtc; + int i; + + for_each_new_crtc_in_state(state, crtc, crtc_state, i) + rockchip_drm_psr_flush(crtc); +} + +static void +rockchip_atomic_helper_commit_tail_rpm(struct drm_atomic_state *old_state) +{ + rockchip_drm_psr_flush_state(old_state); + + drm_atomic_helper_commit_tail_rpm(old_state); +} + static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = { - .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, + .atomic_commit_tail = rockchip_atomic_helper_commit_tail_rpm, }; static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = { diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index bf4b1a2f3fa4..ba9913961273 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1035,16 +1035,9 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc, } } -static void vop_crtc_atomic_begin(struct drm_crtc *crtc, - struct drm_crtc_state *old_crtc_state) -{ - rockchip_drm_psr_flush(crtc); -} - static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = { .mode_fixup = vop_crtc_mode_fixup, .atomic_flush = vop_crtc_atomic_flush, - .atomic_begin = vop_crtc_atomic_begin, .atomic_enable = vop_crtc_atomic_enable, .atomic_disable = vop_crtc_atomic_disable, };