From patchwork Fri Apr 26 21:40:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Kleiner X-Patchwork-Id: 10919747 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A545992A for ; Fri, 26 Apr 2019 21:40:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93E2B2818E for ; Fri, 26 Apr 2019 21:40:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8573028DD5; Fri, 26 Apr 2019 21:40:37 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 468142818E for ; Fri, 26 Apr 2019 21:40:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1924789230; Fri, 26 Apr 2019 21:40:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3118289230; Fri, 26 Apr 2019 21:40:35 +0000 (UTC) Received: by mail-wm1-x341.google.com with SMTP id n25so6227119wmk.4; Fri, 26 Apr 2019 14:40:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8UYZB4FXzLEMZ4nLNMup+ABlWt/sOs7nMPhx300ztGc=; b=OekTb4b5pTeIg6Ej34tUoXQZ1VxCnS4gxi2xgPhqtFoI1AxrZS8TrFnRYtnz4Y+deM 97u8aOY72d8EY2bi+hyL8wwItYLK3vUs7i6dDiv1wFBQbS/VFfy/+3IRGmYoDJzau2PW CqAytNfJnFNnoG4+16pN8HfE0mXI9iDP3WVc3Di18Qdfaloy9bFhi1fzG1vaD0ff2DYq 9c5CYF1k4icpnDeRHflDBlYzwn018kgG1QI/oyjIv+ulEts9TSnLKXTVFpY1OrvDfSxj BLk9xcfl3C1bKu9qgN5GJBfYBvj1JiBiRRh7cptHoLXaAvFvfae4AEooR+lFuQxgGy7q nafg== X-Gm-Message-State: APjAAAXXnK5MWbx4UsyjQPXal67Rmd6Nznq0WVueVmzK5SdODI8eN6/u wfQKec3ADDsZOyqGmNok3D6xNE/A X-Google-Smtp-Source: APXvYqym7EN4gaKOUe2029rot82KKSKZoVmUTY+2ORYF7vvJ1W+AY5qIzJ4U2TlMWcDy/qG8rSE2gw== X-Received: by 2002:a7b:cd93:: with SMTP id y19mr9015843wmj.113.1556314833690; Fri, 26 Apr 2019 14:40:33 -0700 (PDT) Received: from twisty.localdomain ([2a01:c22:c870:100:55b4:804e:196c:cde9]) by smtp.gmail.com with ESMTPSA id p18sm14091408wrp.38.2019.04.26.14.40.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Apr 2019 14:40:33 -0700 (PDT) From: Mario Kleiner To: amd-gfx@lists.freedesktop.org Subject: [PATCH 1/3] drm/amd/display: Fix and simplify apply_below_the_range() Date: Fri, 26 Apr 2019 23:40:14 +0200 Message-Id: <20190426214016.24667-2-mario.kleiner.de@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190426214016.24667-1-mario.kleiner.de@gmail.com> References: <20190426214016.24667-1-mario.kleiner.de@gmail.com> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8UYZB4FXzLEMZ4nLNMup+ABlWt/sOs7nMPhx300ztGc=; b=kh3wK+WM4y2zSYYzmeMvKs+b+k444iplYOC+EyBl/ZHL4bZSBdbQgTQUsN1kfAlpdj ldEoWEoB7+8bgRQM5JDLr8mdSl5v4FtTHXv17PZzhw3eyxeQqtcuGuGlQg7pPf/xdKpf HGtAUu/cwdqMpObD6pHmIADGI/450yzqBfMKb6dVBHsihOum1YXjtxRUjG5uYNyxHhNP akPifjJUXSPsV2JjlK3iC/y4njiCmqV0YwvWcTrhPbowLDNFcDonJr/tAtpcPPwoHJHE JY3mdUXLXXWO1iEdwqcfYzE+b49Wl3Zq49ln02jAkw25B/0gnbOrlYgGr8sf5np1cpM6 XMvg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nicholas.kazlauskas@amd.com, dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP The comparison of inserted_frame_duration_in_us against a duration calculated from max_refresh_in_uhz is both wrong in its math and not needed, as the min_duration_in_us value is already cached in in_out_vrr for reuse. No need to recalculate it wrongly at each invocation. Signed-off-by: Mario Kleiner Reviewed-by: Nicholas Kazlauskas --- drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c index 71274683da04..e56543c36eba 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c @@ -437,10 +437,8 @@ static void apply_below_the_range(struct core_freesync *core_freesync, inserted_frame_duration_in_us = last_render_time_in_us / frames_to_insert; - if (inserted_frame_duration_in_us < - (1000000 / in_out_vrr->max_refresh_in_uhz)) - inserted_frame_duration_in_us = - (1000000 / in_out_vrr->max_refresh_in_uhz); + if (inserted_frame_duration_in_us < in_out_vrr->min_duration_in_us) + inserted_frame_duration_in_us = in_out_vrr->min_duration_in_us; /* Cache the calculated variables */ in_out_vrr->btr.inserted_duration_in_us = From patchwork Fri Apr 26 21:40:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Kleiner X-Patchwork-Id: 10919749 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6FF1292A for ; Fri, 26 Apr 2019 21:40:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 60B262818E for ; Fri, 26 Apr 2019 21:40:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5569828DD5; Fri, 26 Apr 2019 21:40:45 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 147EB2818E for ; Fri, 26 Apr 2019 21:40:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8CD7C89237; Fri, 26 Apr 2019 21:40:43 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75A6889237; Fri, 26 Apr 2019 21:40:42 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id t17so6211860wrw.13; Fri, 26 Apr 2019 14:40:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=BESZkc6wbEkzEo4EMB8XfajzL1iBb9J7EwpQt4g0Ino=; b=CaUxVHxch8Xm4kRsZDkv9rT4gwN+QkdkhM6fQCBvN6XVHL3eAw5LnBTagxV0EXE/Fc BgfznTaEBmXOQPZQWojs3BIQWc6so/ZDjOOl64ECwg9vW37gjnEQpoTCNZhLz3xdvPBh 2t2QwF1BHRfXJC7JXYWKRMVbTR7sVyKwmjuhkW6r4tJ2woQLI9Cd6VEoSZBTS7xCW4r7 a/oV8ZePkqHOREQKqx4OCqwSQ5F8x+sqz9JMMD6RDOAjebG+SARBvoQDxBl8m3bSrVFy 2VWj+drl2LWsqGn6lLLLxpWeCarf2G+8qAdHLE46eA+JC5F9RcIXr0Z3vPp6T5PCe3EZ /lkw== X-Gm-Message-State: APjAAAUe509u+rjk1fZ0xPFnbOXB9bPSrk+w7efA7guk2UrPMct6QQbj rIl9h0za5b0xub0CDdoyGO5VJBNw X-Google-Smtp-Source: APXvYqzKsjSNUHOgNRJ9epJYXL0FCaCmsHadMWHl2/qUOWmpZv1O2MRrXUNrJ3jJutL+0EtDUCvXQQ== X-Received: by 2002:adf:ebd0:: with SMTP id v16mr3897747wrn.175.1556314841023; Fri, 26 Apr 2019 14:40:41 -0700 (PDT) Received: from twisty.localdomain ([2a01:c22:c870:100:55b4:804e:196c:cde9]) by smtp.gmail.com with ESMTPSA id p18sm14091408wrp.38.2019.04.26.14.40.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Apr 2019 14:40:40 -0700 (PDT) From: Mario Kleiner To: amd-gfx@lists.freedesktop.org Subject: [PATCH 2/3] drm/amd/display: Enter VRR BTR earlier. Date: Fri, 26 Apr 2019 23:40:15 +0200 Message-Id: <20190426214016.24667-3-mario.kleiner.de@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190426214016.24667-1-mario.kleiner.de@gmail.com> References: <20190426214016.24667-1-mario.kleiner.de@gmail.com> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BESZkc6wbEkzEo4EMB8XfajzL1iBb9J7EwpQt4g0Ino=; b=hf2i4ui1ngv9zpAKrP/f2bV1o5m2HmEodT8611xyKhkI8HmdxQtoj6cP0pK6V6yCE7 sJDBXqLTqgn+7DLUHusRZiPDnpt0rfSeHFob1BdG3zph80xhBOXiPbS9dJqV+w7ZjoUi pHA893jjG+TgA2fYxTKcE3FFDcLVhrDe52OE4ZkOzy9D0achjM9Ms1xn3Y6m0P/sTvbf 76jFOeaU0hFFETpPhkj6UR6bb/9oNv3dgw/C11Fk7y4326FC1QMFhiQmJbnGmR8oqWbi iS7DYO3vSeplFc5LtK4WcpSHdq53UZPIObO9UY/N4uTQkzMh4mx9+s/5/9DCUjphxmV/ EPLw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nicholas.kazlauskas@amd.com, dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Use a 2 msecs switching headroom not only for slightly delayed exiting of BTR mode, but now also for entering it a bit before the max frame duration is exceeded. With slowly changing time delay between successive flips or with a bit of jitter in arrival of flips, this adapts vblank early and prevents missed vblanks at the border between non-BTR and BTR. Testing on DCE-8, DCE-11 and DCN-1.0 shows that this more often avoids skipped frames when moving across the BTR boundary, especially on DCE-8 and DCE-11 with the followup commit for dealing with pre-DCE-12 hw. Signed-off-by: Mario Kleiner --- drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c index e56543c36eba..a965ab5466dc 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c @@ -350,7 +350,7 @@ static void apply_below_the_range(struct core_freesync *core_freesync, in_out_vrr->btr.frame_counter = 0; in_out_vrr->btr.btr_active = false; } - } else if (last_render_time_in_us > max_render_time_in_us) { + } else if (last_render_time_in_us + BTR_EXIT_MARGIN > max_render_time_in_us) { /* Enter Below the Range */ in_out_vrr->btr.btr_active = true; } From patchwork Fri Apr 26 21:40:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mario Kleiner X-Patchwork-Id: 10919751 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 45B071515 for ; Fri, 26 Apr 2019 21:40:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 340422818E for ; Fri, 26 Apr 2019 21:40:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2885628DD5; Fri, 26 Apr 2019 21:40:53 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A82FC2818E for ; Fri, 26 Apr 2019 21:40:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D745D89244; Fri, 26 Apr 2019 21:40:51 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by gabe.freedesktop.org (Postfix) with ESMTPS id C698E89244; Fri, 26 Apr 2019 21:40:50 +0000 (UTC) Received: by mail-wr1-x444.google.com with SMTP id a9so6282746wrp.6; Fri, 26 Apr 2019 14:40:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1sw9zndItX7bEtXPuJKcYhIEqBDmWLmgPEC1l4FaroI=; b=rNnYERRCDqI2mu4jUQWxYfGpJDP3aqr1gS9FcvonKBj7MkqNpWrP/b89wPyj96/E37 sbDGOa/+f8eozjwGx77wyNlCCIi2wQ+LlPB0op2Ae4jY32jPM5eIN0L5KPh1NuoxejHS 2sFWEQgGUGhETvtoOmNKLnlIrb04mZjtdUSUspFW4nJI8zdZUM3U+oaimR+xPY0X999A lJ9TScTN5Zyv68LBLSJSZAqTcmaiE0BSmBIB2AOVwP81BtFdSi2w49WAjYITvbtSyjh4 R8U09jGYpkY888ojuDj4b5fv9tCQV2FCv5dSmWt0/5e7Z3/GgajpbJSZ7f6gp8nJgHJA sMig== X-Gm-Message-State: APjAAAWrbbc5SwbyHg3b6OTj34qsgvit0KNw4r3h6xsv9Io2VEcBvKll aOjrWvhALVPQbJc4YwsSuVao8YRt X-Google-Smtp-Source: APXvYqyPoPnTpUheDBc/wzpkSc01R74d5uyqbSIdG4dgZDcQp4pw2BOfqLkFHKf2hUe5VD/dWdB6uw== X-Received: by 2002:adf:dd8f:: with SMTP id x15mr1010777wrl.238.1556314849331; Fri, 26 Apr 2019 14:40:49 -0700 (PDT) Received: from twisty.localdomain ([2a01:c22:c870:100:55b4:804e:196c:cde9]) by smtp.gmail.com with ESMTPSA id p18sm14091408wrp.38.2019.04.26.14.40.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Apr 2019 14:40:48 -0700 (PDT) From: Mario Kleiner To: amd-gfx@lists.freedesktop.org Subject: [PATCH 3/3] drm/amd/display: Compensate for pre-DCE12 BTR-VRR hw limitations. (v3) Date: Fri, 26 Apr 2019 23:40:16 +0200 Message-Id: <20190426214016.24667-4-mario.kleiner.de@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190426214016.24667-1-mario.kleiner.de@gmail.com> References: <20190426214016.24667-1-mario.kleiner.de@gmail.com> X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1sw9zndItX7bEtXPuJKcYhIEqBDmWLmgPEC1l4FaroI=; b=Gu+2k5rjVJ/beqUEAsZLD25hJFY8Sfp5HvjqibFKS3/7BXtfDiZRJ5sr4+lUZXilxA l47EnVpeJTFA0BQEerz4+TIGy4WlNNQeZf3ecAGdx/heVbGctiHabbPbXMaNluruKNsD ovRpiGLb8Wa8RBz8ZxtiIp7BJqBfurDAWPny3/e3PpN3zjwutNUiyF6Hwbu6phxwo1vn pnTG0dh200vdDxqMP2TyZUWavcBnuiVkmHy3yX3Ayeb1vA9fMM+JhZLOPVr5CsPiJ/NJ j4aENEaikI69y7nv/BeFtVasIKFt1UbFLA3Ls522xjDSXXv0mNfCXQGXIVdyY7TL/O80 E8HQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nicholas.kazlauskas@amd.com, dri-devel@lists.freedesktop.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Pre-DCE12 needs special treatment for BTR / low framerate compensation for more stable behaviour: According to comments in the code and some testing on DCE-8 and DCE-11, DCE-11 and earlier only apply VTOTAL_MIN/MAX programming with a lag of one frame, so the special BTR hw programming for intermediate fixed duration frames must be done inside the current frame at flip submission in atomic commit tail, ie. one vblank earlier, and the fixed refresh intermediate frame mode must be also terminated one vblank earlier on pre-DCE12 display engines. To achieve proper termination on < DCE-12 shift the point when the switch-back from fixed vblank duration to variable vblank duration happens from the start of VBLANK (vblank irq, as done on DCE-12+) to back-porch or end of VBLANK (handled by vupdate irq handler). We must leave the switch-back code inside VBLANK irq for DCE12+, as before. Doing this, we get much better behaviour of BTR for up-sweeps, ie. going from short to long frame durations (~high to low fps) and for constant framerate flips, as tested on DCE-8 and DCE-11. Behaviour is still not quite as good as on DCN-1 though. On down-sweeps, going from long to short frame durations (low fps to high fps) < DCE-12 is a little bit improved, although by far not as much as for up-sweeps and constant fps. v2: Fix some wrong locking, as pointed out by Nicholas. v3: Simplify if-condition in vupdate-irq - nit by Nicholas. Signed-off-by: Mario Kleiner Reviewed-by: Nicholas Kazlauskas --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 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 76b6e621793f..92b3c2cec7dd 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -364,6 +364,7 @@ static void dm_vupdate_high_irq(void *interrupt_params) struct amdgpu_device *adev = irq_params->adev; struct amdgpu_crtc *acrtc; struct dm_crtc_state *acrtc_state; + unsigned long flags; acrtc = get_crtc_by_otg_inst(adev, irq_params->irq_src - IRQ_TYPE_VUPDATE); @@ -379,8 +380,25 @@ static void dm_vupdate_high_irq(void *interrupt_params) * page-flip completion events that have been queued to us * if a pageflip happened inside front-porch. */ - if (amdgpu_dm_vrr_active(acrtc_state)) + if (amdgpu_dm_vrr_active(acrtc_state)) { drm_crtc_handle_vblank(&acrtc->base); + + /* BTR processing for pre-DCE12 ASICs */ + if (acrtc_state->stream && + adev->family < AMDGPU_FAMILY_AI) { + spin_lock_irqsave(&adev->ddev->event_lock, flags); + mod_freesync_handle_v_update( + adev->dm.freesync_module, + acrtc_state->stream, + &acrtc_state->vrr_params); + + dc_stream_adjust_vmin_vmax( + adev->dm.dc, + acrtc_state->stream, + &acrtc_state->vrr_params.adjust); + spin_unlock_irqrestore(&adev->ddev->event_lock, flags); + } + } } } @@ -390,6 +408,7 @@ static void dm_crtc_high_irq(void *interrupt_params) struct amdgpu_device *adev = irq_params->adev; struct amdgpu_crtc *acrtc; struct dm_crtc_state *acrtc_state; + unsigned long flags; acrtc = get_crtc_by_otg_inst(adev, irq_params->irq_src - IRQ_TYPE_VBLANK); @@ -412,9 +431,10 @@ static void dm_crtc_high_irq(void *interrupt_params) */ amdgpu_dm_crtc_handle_crc_irq(&acrtc->base); - if (acrtc_state->stream && + if (acrtc_state->stream && adev->family >= AMDGPU_FAMILY_AI && acrtc_state->vrr_params.supported && acrtc_state->freesync_config.state == VRR_STATE_ACTIVE_VARIABLE) { + spin_lock_irqsave(&adev->ddev->event_lock, flags); mod_freesync_handle_v_update( adev->dm.freesync_module, acrtc_state->stream, @@ -424,6 +444,7 @@ static void dm_crtc_high_irq(void *interrupt_params) adev->dm.dc, acrtc_state->stream, &acrtc_state->vrr_params.adjust); + spin_unlock_irqrestore(&adev->ddev->event_lock, flags); } } } @@ -4878,8 +4899,10 @@ static void update_freesync_state_on_stream( struct dc_plane_state *surface, u32 flip_timestamp_in_us) { - struct mod_vrr_params vrr_params = new_crtc_state->vrr_params; + struct mod_vrr_params vrr_params; struct dc_info_packet vrr_infopacket = {0}; + struct amdgpu_device *adev = dm->adev; + unsigned long flags; if (!new_stream) return; @@ -4892,6 +4915,9 @@ static void update_freesync_state_on_stream( if (!new_stream->timing.h_total || !new_stream->timing.v_total) return; + spin_lock_irqsave(&adev->ddev->event_lock, flags); + vrr_params = new_crtc_state->vrr_params; + if (surface) { mod_freesync_handle_preflip( dm->freesync_module, @@ -4899,6 +4925,12 @@ static void update_freesync_state_on_stream( new_stream, flip_timestamp_in_us, &vrr_params); + + if (adev->family < AMDGPU_FAMILY_AI && + amdgpu_dm_vrr_active(new_crtc_state)) { + mod_freesync_handle_v_update(dm->freesync_module, + new_stream, &vrr_params); + } } mod_freesync_build_vrr_infopacket( @@ -4930,6 +4962,8 @@ static void update_freesync_state_on_stream( new_crtc_state->base.crtc->base.id, (int)new_crtc_state->base.vrr_enabled, (int)vrr_params.state); + + spin_unlock_irqrestore(&adev->ddev->event_lock, flags); } static void pre_update_freesync_state_on_stream( @@ -4937,8 +4971,10 @@ static void pre_update_freesync_state_on_stream( struct dm_crtc_state *new_crtc_state) { struct dc_stream_state *new_stream = new_crtc_state->stream; - struct mod_vrr_params vrr_params = new_crtc_state->vrr_params; + struct mod_vrr_params vrr_params; struct mod_freesync_config config = new_crtc_state->freesync_config; + struct amdgpu_device *adev = dm->adev; + unsigned long flags; if (!new_stream) return; @@ -4950,6 +4986,9 @@ static void pre_update_freesync_state_on_stream( if (!new_stream->timing.h_total || !new_stream->timing.v_total) return; + spin_lock_irqsave(&adev->ddev->event_lock, flags); + vrr_params = new_crtc_state->vrr_params; + if (new_crtc_state->vrr_supported && config.min_refresh_in_uhz && config.max_refresh_in_uhz) { @@ -4970,6 +5009,7 @@ static void pre_update_freesync_state_on_stream( sizeof(vrr_params.adjust)) != 0); new_crtc_state->vrr_params = vrr_params; + spin_unlock_irqrestore(&adev->ddev->event_lock, flags); } static void amdgpu_dm_handle_vrr_transition(struct dm_crtc_state *old_state,