From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 4.19 153/192] drm/amd/display: Enable vblank interrupt during CRC capture Date: Wed, 27 Mar 2019 14:09:45 -0400 Message-ID: <20190327181025.13507-153-sashal@kernel.org> References: <20190327181025.13507-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190327181025.13507-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Alex Deucher , Sasha Levin , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Nicholas Kazlauskas , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogTmljaG9sYXMgS2F6bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPgoK WyBVcHN0cmVhbSBjb21taXQgNDI4ZGEyYmRiMDVkNzZjNDhkMGJkOGZiZmEyZTRjMTAyNjg1YmUw OCBdCgpbV2h5XQpJbiBvcmRlciB0byByZWFkIENSQyBldmVudHMgd2hlbiBDUkMgY2FwdHVyZSBp cyBlbmFibGVkIHRoZSB2YmxhbmsKaW50ZXJycHV0IGhhbmRsZXIgbmVlZHMgdG8gYmUgcnVubmlu ZyBmb3IgdGhlIENSVEMuIFRoZSBoYW5kbGVyIGlzCmVuYWJsZWQgd2hpbGUgdGhlcmUgaXMgYW4g YWN0aXZlIHZibGFuayByZWZlcmVuY2UuCgpXaGVuIHJ1bm5pbmcgSUdUIHRlc3RzIHRoZXJlIHdp bGwgb2Z0ZW4gYmUgbm8gYWN0aXZlIHZibGFuayByZWZlcmVuY2UKYnV0IHRoZSB0ZXN0IGV4cGVj dHMgdG8gcmVhZCBhIENSQyB2YWx1ZS4gVGhpcyBpcyB2YWxpZCB1c2FnZSAoYW5kCndvcmtzIG9u IGk5MTUgc2luY2UgdGhleSBoYXZlIGEgQ1JDIGludGVycnVwdCBoYW5kbGVyKSBzbyB0aGUgcmVm ZXJlbmNlCnRvIHRoZSB2Ymxhbmsgc2hvdWxkIGJlIGdyYWJiZWQgd2hpbGUgY2FwdHVyZSBpcyBh Y3RpdmUuCgpUaGlzIGlzc3VlIHdhcyBmb3VuZCBydW5uaW5nOgoKaWd0QGttc19wbGFuZV9tdWx0 aXBsZUBhdG9taWMtcGlwZS1iLXRpbGluZy1ub25lCgpUaGUgcGlwZS1iIGlzIHRoZSBvbmx5IG9u ZSBpbiB0aGUgaW5pdGlhbCBjb21taXQgYW5kIHdhcyBub3QgcHJldmlvdXNseQphY3RpdmUgc28g bm8gdmJsYW5rIHJlZmVyZW5jZSBpcyBncmFiYmVkLiBUaGUgdmJsYW5rIGludGVycnVwdCBpcwpu b3QgZW5hYmxlZCBhbmQgdGhlIHRlc3QgdGltZXMgb3V0LgoKW0hvd10KS2VlcCBhIHJlZmVyZW5j ZSB0byB0aGUgdmJsYW5rIGFzIGxvbmcgYXMgQ1JDIGNhcHR1cmUgaXMgZW5hYmxlZC4KSWYgdXNl cnNwYWNlIG5ldmVyIGV4cGxpY2l0bHkgZGlzYWJsZXMgaXQgdGhlbiB0aGUgcmVmZXJlbmNlIGlz CmFsc28gZHJvcHBlZCB3aGVuIHJlbW92aW5nIHRoZSBDUlRDIGZyb20gdGhlIGNvbnRleHQgKHN0 cmVhbSA9IE5VTEwpLgoKU2lnbmVkLW9mZi1ieTogTmljaG9sYXMgS2F6bGF1c2thcyA8bmljaG9s YXMua2F6bGF1c2thc0BhbWQuY29tPgpSZXZpZXdlZC1ieTogSGFycnkgV2VudGxhbmQgPEhhcnJ5 LldlbnRsYW5kQGFtZC5jb20+ClJldmlld2VkLWJ5OiBTdW4gcGVuZyBMaSA8U3VucGVuZy5MaUBh bWQuY29tPgpBY2tlZC1ieTogTGVvIExpIDxzdW5wZW5nLmxpQGFtZC5jb20+ClNpZ25lZC1vZmYt Ynk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KU2lnbmVkLW9mZi1i eTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KIC4uLi9ncHUvZHJtL2FtZC9k aXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYyB8IDE0ICsrKysrKy0KIC4uLi9kcm0vYW1kL2Rp c3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9jcmMuYyB8IDQyICsrKysrKysrKy0tLS0tLS0tLS0K IDIgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0u YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKaW5k ZXggYzU3ZTg1ZjA4ZTIzLi4yYjhiODkyZWI4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwpAQCAtNDM5MCwxMCArNDM5MCwyMiBA QCBzdGF0aWMgaW50IGFtZGdwdV9kbV9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJICovCiAJZm9yX2VhY2hfb2xkbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIG9s ZF9jcnRjX3N0YXRlLCBuZXdfY3J0Y19zdGF0ZSwgaSkgewogCQlzdHJ1Y3QgZG1fY3J0Y19zdGF0 ZSAqZG1fb2xkX2NydGNfc3RhdGUgPSB0b19kbV9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKTsK KwkJc3RydWN0IGRtX2NydGNfc3RhdGUgKmRtX25ld19jcnRjX3N0YXRlID0gdG9fZG1fY3J0Y19z dGF0ZShuZXdfY3J0Y19zdGF0ZSk7CiAJCXN0cnVjdCBhbWRncHVfY3J0YyAqYWNydGMgPSB0b19h bWRncHVfY3J0YyhjcnRjKTsKIAotCQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQo bmV3X2NydGNfc3RhdGUpICYmIGRtX29sZF9jcnRjX3N0YXRlLT5zdHJlYW0pCisJCWlmIChkcm1f YXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChuZXdfY3J0Y19zdGF0ZSkKKwkJICAgICYmIGRtX29s ZF9jcnRjX3N0YXRlLT5zdHJlYW0pIHsKKwkJCS8qCisJCQkgKiBDUkMgY2FwdHVyZSB3YXMgZW5h YmxlZCBidXQgbm90IGRpc2FibGVkLgorCQkJICogUmVsZWFzZSB0aGUgdmJsYW5rIHJlZmVyZW5j ZS4KKwkJCSAqLworCQkJaWYgKGRtX25ld19jcnRjX3N0YXRlLT5jcmNfZW5hYmxlZCkgeworCQkJ CWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJCQkJZG1fbmV3X2NydGNfc3RhdGUtPmNyY19l bmFibGVkID0gZmFsc2U7CisJCQl9CisKIAkJCW1hbmFnZV9kbV9pbnRlcnJ1cHRzKGFkZXYsIGFj cnRjLCBmYWxzZSk7CisJCX0KIAl9CiAJLyogQWRkIGNoZWNrIGhlcmUgZm9yIFNvQydzIHRoYXQg c3VwcG9ydCBoYXJkd2FyZSBjdXJzb3IgcGxhbmUsIHRvCiAJICogdW5zZXQgbGVnYWN5X2N1cnNv cl91cGRhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRn cHVfZG0vYW1kZ3B1X2RtX2NyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdw dV9kbS9hbWRncHVfZG1fY3JjLmMKaW5kZXggNmE2ZDk3N2RkZDdhLi4zNmEwYmVkOWFmMDcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt X2NyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtX2NyYy5jCkBAIC01MSw2ICs1MSw3IEBAIGludCBhbWRncHVfZG1fY3J0Y19zZXRfY3JjX3Nv dXJjZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGNvbnN0IGNoYXIgKnNyY19uYW1lLAogewogCXN0 cnVjdCBkbV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gdG9fZG1fY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CiAJc3RydWN0IGRjX3N0cmVhbV9zdGF0ZSAqc3RyZWFtX3N0YXRlID0gY3J0Y19zdGF0 ZS0+c3RyZWFtOworCWJvb2wgZW5hYmxlOwogCiAJZW51bSBhbWRncHVfZG1fcGlwZV9jcmNfc291 cmNlIHNvdXJjZSA9IGRtX3BhcnNlX2NyY19zb3VyY2Uoc3JjX25hbWUpOwogCkBAIC02NSwyOCAr NjYsMjcgQEAgaW50IGFtZGdwdV9kbV9jcnRjX3NldF9jcmNfc291cmNlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywgY29uc3QgY2hhciAqc3JjX25hbWUsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAor CWVuYWJsZSA9IChzb3VyY2UgPT0gQU1ER1BVX0RNX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKKwor CWlmICghZGNfc3RyZWFtX2NvbmZpZ3VyZV9jcmMoc3RyZWFtX3N0YXRlLT5jdHgtPmRjLCBzdHJl YW1fc3RhdGUsCisJCQkJICAgICBlbmFibGUsIGVuYWJsZSkpCisJCXJldHVybiAtRUlOVkFMOwor CiAJLyogV2hlbiBlbmFibGluZyBDUkMsIHdlIHNob3VsZCBhbHNvIGRpc2FibGUgZGl0aGVyaW5n LiAqLwotCWlmIChzb3VyY2UgPT0gQU1ER1BVX0RNX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKSB7Ci0J CWlmIChkY19zdHJlYW1fY29uZmlndXJlX2NyYyhzdHJlYW1fc3RhdGUtPmN0eC0+ZGMsCi0JCQkJ CSAgICBzdHJlYW1fc3RhdGUsCi0JCQkJCSAgICB0cnVlLCB0cnVlKSkgewotCQkJY3J0Y19zdGF0 ZS0+Y3JjX2VuYWJsZWQgPSB0cnVlOwotCQkJZGNfc3RyZWFtX3NldF9kaXRoZXJfb3B0aW9uKHN0 cmVhbV9zdGF0ZSwKLQkJCQkJCSAgICBESVRIRVJfT1BUSU9OX1RSVU44KTsKLQkJfQotCQllbHNl Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQlpZiAoZGNfc3RyZWFtX2NvbmZpZ3Vy ZV9jcmMoc3RyZWFtX3N0YXRlLT5jdHgtPmRjLAotCQkJCQkgICAgc3RyZWFtX3N0YXRlLAotCQkJ CQkgICAgZmFsc2UsIGZhbHNlKSkgewotCQkJY3J0Y19zdGF0ZS0+Y3JjX2VuYWJsZWQgPSBmYWxz ZTsKLQkJCWRjX3N0cmVhbV9zZXRfZGl0aGVyX29wdGlvbihzdHJlYW1fc3RhdGUsCi0JCQkJCQkg ICAgRElUSEVSX09QVElPTl9ERUZBVUxUKTsKLQkJfQotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZB TDsKLQl9CisJZGNfc3RyZWFtX3NldF9kaXRoZXJfb3B0aW9uKHN0cmVhbV9zdGF0ZSwKKwkJCQkg ICAgZW5hYmxlID8gRElUSEVSX09QVElPTl9UUlVOOAorCQkJCQkgICA6IERJVEhFUl9PUFRJT05f REVGQVVMVCk7CisKKwkvKgorCSAqIFJlYWRpbmcgdGhlIENSQyByZXF1aXJlcyB0aGUgdmJsYW5r IGludGVycnVwdCBoYW5kbGVyIHRvIGJlCisJICogZW5hYmxlZC4gS2VlcCBhIHJlZmVyZW5jZSB1 bnRpbCBDUkMgY2FwdHVyZSBzdG9wcy4KKwkgKi8KKwlpZiAoIWNydGNfc3RhdGUtPmNyY19lbmFi bGVkICYmIGVuYWJsZSkKKwkJZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKTsKKwllbHNlIGlmIChj cnRjX3N0YXRlLT5jcmNfZW5hYmxlZCAmJiAhZW5hYmxlKQorCQlkcm1fY3J0Y192YmxhbmtfcHV0 KGNydGMpOworCisJY3J0Y19zdGF0ZS0+Y3JjX2VuYWJsZWQgPSBlbmFibGU7CiAKIAkqdmFsdWVz X2NudCA9IDM7CiAJLyogUmVzZXQgY3JjX3NraXBwZWQgb24gZG0gc3RhdGUgKi8KLS0gCjIuMTku MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdm eCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BAD9EC43381 for ; Wed, 27 Mar 2019 18:59:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 85D2F206B7 for ; Wed, 27 Mar 2019 18:59:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553713143; bh=kNxeRssS15Mu3XzNbNieKFZGtWnkMtZdrUFNMnw2dTA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=olz25wIqPigtYsiOgfKRl8wmPtwJBYAZ4E0ez86g6hkeNJxApWQysxsITWkNeIVWG sxCarjPNu8nxFt3qvErCDet/TbZ3co9FnVwsfca9rgilqX7c3KYjTREmSGRPU0n6w7 WO0RH1uHf1+QVqhofyliqbRwPr2KsPebQT/+2UtY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389819AbfC0SPW (ORCPT ); Wed, 27 Mar 2019 14:15:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:58826 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389266AbfC0SPS (ORCPT ); Wed, 27 Mar 2019 14:15:18 -0400 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 F1FF6217F9; Wed, 27 Mar 2019 18:15:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710516; bh=kNxeRssS15Mu3XzNbNieKFZGtWnkMtZdrUFNMnw2dTA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Mlh6LRvTRrF2SNIBiTfRyo7wCYibrGF5CRu2m6H2Gp6hYDEE/M0dC5HYfQMlV+MZE HGsMlKXoI9e0MP5aEmzE3zWeYGiRB1J4HGYg8O0wBAlLveO1WM0ccu1LQEIMe8pvH6 jPA6b6ZFviRQ+PwacLCHcuxE30Y/ADiip7Wq8MR8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Nicholas Kazlauskas , Alex Deucher , Sasha Levin , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.19 153/192] drm/amd/display: Enable vblank interrupt during CRC capture Date: Wed, 27 Mar 2019 14:09:45 -0400 Message-Id: <20190327181025.13507-153-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327181025.13507-1-sashal@kernel.org> References: <20190327181025.13507-1-sashal@kernel.org> MIME-Version: 1.0 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: Nicholas Kazlauskas [ Upstream commit 428da2bdb05d76c48d0bd8fbfa2e4c102685be08 ] [Why] In order to read CRC events when CRC capture is enabled the vblank interrput handler needs to be running for the CRTC. The handler is enabled while there is an active vblank reference. When running IGT tests there will often be no active vblank reference but the test expects to read a CRC value. This is valid usage (and works on i915 since they have a CRC interrupt handler) so the reference to the vblank should be grabbed while capture is active. This issue was found running: igt@kms_plane_multiple@atomic-pipe-b-tiling-none The pipe-b is the only one in the initial commit and was not previously active so no vblank reference is grabbed. The vblank interrupt is not enabled and the test times out. [How] Keep a reference to the vblank as long as CRC capture is enabled. If userspace never explicitly disables it then the reference is also dropped when removing the CRTC from the context (stream = NULL). Signed-off-by: Nicholas Kazlauskas Reviewed-by: Harry Wentland Reviewed-by: Sun peng Li Acked-by: Leo Li Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++- .../drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 42 +++++++++---------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index c57e85f08e23..2b8b892eb846 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4390,10 +4390,22 @@ static int amdgpu_dm_atomic_commit(struct drm_device *dev, */ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { struct dm_crtc_state *dm_old_crtc_state = to_dm_crtc_state(old_crtc_state); + struct dm_crtc_state *dm_new_crtc_state = to_dm_crtc_state(new_crtc_state); struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); - if (drm_atomic_crtc_needs_modeset(new_crtc_state) && dm_old_crtc_state->stream) + if (drm_atomic_crtc_needs_modeset(new_crtc_state) + && dm_old_crtc_state->stream) { + /* + * CRC capture was enabled but not disabled. + * Release the vblank reference. + */ + if (dm_new_crtc_state->crc_enabled) { + drm_crtc_vblank_put(crtc); + dm_new_crtc_state->crc_enabled = false; + } + manage_dm_interrupts(adev, acrtc, false); + } } /* Add check here for SoC's that support hardware cursor plane, to * unset legacy_cursor_update */ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c index 6a6d977ddd7a..36a0bed9af07 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c @@ -51,6 +51,7 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name, { struct dm_crtc_state *crtc_state = to_dm_crtc_state(crtc->state); struct dc_stream_state *stream_state = crtc_state->stream; + bool enable; enum amdgpu_dm_pipe_crc_source source = dm_parse_crc_source(src_name); @@ -65,28 +66,27 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name, return -EINVAL; } + enable = (source == AMDGPU_DM_PIPE_CRC_SOURCE_AUTO); + + if (!dc_stream_configure_crc(stream_state->ctx->dc, stream_state, + enable, enable)) + return -EINVAL; + /* When enabling CRC, we should also disable dithering. */ - if (source == AMDGPU_DM_PIPE_CRC_SOURCE_AUTO) { - if (dc_stream_configure_crc(stream_state->ctx->dc, - stream_state, - true, true)) { - crtc_state->crc_enabled = true; - dc_stream_set_dither_option(stream_state, - DITHER_OPTION_TRUN8); - } - else - return -EINVAL; - } else { - if (dc_stream_configure_crc(stream_state->ctx->dc, - stream_state, - false, false)) { - crtc_state->crc_enabled = false; - dc_stream_set_dither_option(stream_state, - DITHER_OPTION_DEFAULT); - } - else - return -EINVAL; - } + dc_stream_set_dither_option(stream_state, + enable ? DITHER_OPTION_TRUN8 + : DITHER_OPTION_DEFAULT); + + /* + * Reading the CRC requires the vblank interrupt handler to be + * enabled. Keep a reference until CRC capture stops. + */ + if (!crtc_state->crc_enabled && enable) + drm_crtc_vblank_get(crtc); + else if (crtc_state->crc_enabled && !enable) + drm_crtc_vblank_put(crtc); + + crtc_state->crc_enabled = enable; *values_cnt = 3; /* Reset crc_skipped on dm state */ -- 2.19.1