From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753983AbcGUTYq (ORCPT ); Thu, 21 Jul 2016 15:24:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44588 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753682AbcGUTYO (ORCPT ); Thu, 21 Jul 2016 15:24:14 -0400 From: Lyude To: intel-gfx@lists.freedesktop.org, Matt Roper Cc: Lyude , stable@vger.kernel.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Daniel Vetter , Radhakrishna Sripada , Hans de Goede , Jani Nikula , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/4] drm/i915/skl: Only flush pipes when we change the ddb allocation Date: Thu, 21 Jul 2016 15:23:38 -0400 Message-Id: <1469129020-2680-3-git-send-email-cpaul@redhat.com> In-Reply-To: <1469129020-2680-1-git-send-email-cpaul@redhat.com> References: <1469129020-2680-1-git-send-email-cpaul@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 21 Jul 2016 19:24:14 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Manual pipe flushes are only necessary in order to make sure that we prevent pipes with changed ddb allocations from overlapping from one another at any point in time. Additionally, forcing us to wait for the next vblank every time we have to update the watermark values because the cursor was moving between screens will introduce a rather noticable lag for users. Signed-off-by: Lyude Cc: stable@vger.kernel.org Cc: Ville Syrjälä Cc: Daniel Vetter Cc: Radhakrishna Sripada Cc: Hans de Goede Cc: Matt Roper --- drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/intel_pm.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index c97724d..9e1e045 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1597,6 +1597,7 @@ struct skl_ddb_allocation { struct skl_wm_values { unsigned dirty_pipes; + bool ddb_changed; struct skl_ddb_allocation ddb; uint32_t wm_linetime[I915_MAX_PIPES]; uint32_t plane[I915_MAX_PIPES][I915_MAX_PLANES][8]; diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 56ddd71..55237ea 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -3789,6 +3789,12 @@ static void skl_flush_wm_values(struct drm_i915_private *dev_priv, new_ddb = &new_values->ddb; cur_ddb = &dev_priv->wm.skl_hw.ddb; + /* We only ever need to flush when the ddb allocations change */ + if (!new_values->ddb_changed) + return; + + new_values->ddb_changed = false; + /* * First pass: flush the pipes with the new allocation contained into * the old space. @@ -3893,6 +3899,22 @@ pipes_modified(struct drm_atomic_state *state) return ret; } +static bool +skl_pipe_ddb_changed(struct skl_ddb_allocation *old, + struct skl_ddb_allocation *new, + enum pipe pipe) +{ + if (memcmp(&old->pipe[pipe], &new->pipe[pipe], + sizeof(old->pipe[pipe])) != 0 || + memcmp(&old->plane[pipe], &new->plane[pipe], + sizeof(old->plane[pipe])) != 0 || + memcmp(&old->y_plane[pipe], &new->y_plane[pipe], + sizeof(old->y_plane[pipe])) != 0) + return true; + + return false; +} + static int skl_compute_ddb(struct drm_atomic_state *state) { @@ -3900,7 +3922,8 @@ skl_compute_ddb(struct drm_atomic_state *state) struct drm_i915_private *dev_priv = to_i915(dev); struct intel_atomic_state *intel_state = to_intel_atomic_state(state); struct intel_crtc *intel_crtc; - struct skl_ddb_allocation *ddb = &intel_state->wm_results.ddb; + struct skl_ddb_allocation *new_ddb = &intel_state->wm_results.ddb; + struct skl_ddb_allocation *old_ddb = &dev_priv->wm.skl_hw.ddb; uint32_t realloc_pipes = pipes_modified(state); int ret; @@ -3938,9 +3961,13 @@ skl_compute_ddb(struct drm_atomic_state *state) if (IS_ERR(cstate)) return PTR_ERR(cstate); - ret = skl_allocate_pipe_ddb(cstate, ddb); + ret = skl_allocate_pipe_ddb(cstate, new_ddb); if (ret) return ret; + + if (!intel_state->wm_results.ddb_changed && + skl_pipe_ddb_changed(old_ddb, new_ddb, intel_crtc->pipe)) + intel_state->wm_results.ddb_changed = true; } return 0; -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v2 2/4] drm/i915/skl: Only flush pipes when we change the ddb allocation Date: Thu, 21 Jul 2016 15:23:38 -0400 Message-ID: <1469129020-2680-3-git-send-email-cpaul@redhat.com> References: <1469129020-2680-1-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469129020-2680-1-git-send-email-cpaul@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, Matt Roper Cc: David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Hans de Goede , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org TWFudWFsIHBpcGUgZmx1c2hlcyBhcmUgb25seSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gbWFrZSBz dXJlIHRoYXQgd2UgcHJldmVudApwaXBlcyB3aXRoIGNoYW5nZWQgZGRiIGFsbG9jYXRpb25zIGZy b20gb3ZlcmxhcHBpbmcgZnJvbSBvbmUgYW5vdGhlciBhdAphbnkgcG9pbnQgaW4gdGltZS4gQWRk aXRpb25hbGx5LCBmb3JjaW5nIHVzIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuawpldmVyeSB0 aW1lIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSB3YXRlcm1hcmsgdmFsdWVzIGJlY2F1c2UgdGhlIGN1 cnNvciB3YXMKbW92aW5nIGJldHdlZW4gc2NyZWVucyB3aWxsIGludHJvZHVjZSBhIHJhdGhlciBu b3RpY2FibGUgbGFnIGZvciB1c2Vycy4KClNpZ25lZC1vZmYtYnk6IEx5dWRlIDxjcGF1bEByZWRo YXQuY29tPgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwpDYzogVmlsbGUgU3lyasOkbMOkIDx2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52 ZXR0ZXJAaW50ZWwuY29tPgpDYzogUmFkaGFrcmlzaG5hIFNyaXBhZGEgPHJhZGhha3Jpc2huYS5z cmlwYWRhQGludGVsLmNvbT4KQ2M6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ CkNjOiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfCAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFu Z2VkLCAzMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCmluZGV4IGM5NzcyNGQuLjllMWUwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAt MTU5Nyw2ICsxNTk3LDcgQEAgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiB7CiAKIHN0cnVjdCBz a2xfd21fdmFsdWVzIHsKIAl1bnNpZ25lZCBkaXJ0eV9waXBlczsKKwlib29sIGRkYl9jaGFuZ2Vk OwogCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gZGRiOwogCXVpbnQzMl90IHdtX2xpbmV0aW1l W0k5MTVfTUFYX1BJUEVTXTsKIAl1aW50MzJfdCBwbGFuZVtJOTE1X01BWF9QSVBFU11bSTkxNV9N QVhfUExBTkVTXVs4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Bt LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IDU2ZGRkNzEuLjU1MjM3 ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMzc4OSw2ICszNzg5LDEyIEBAIHN0YXRp YyB2b2lkIHNrbF9mbHVzaF93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCW5ld19kZGIgPSAmbmV3X3ZhbHVlcy0+ZGRiOwogCWN1cl9kZGIgPSAmZGV2X3ByaXYt PndtLnNrbF9ody5kZGI7CiAKKwkvKiBXZSBvbmx5IGV2ZXIgbmVlZCB0byBmbHVzaCB3aGVuIHRo ZSBkZGIgYWxsb2NhdGlvbnMgY2hhbmdlICovCisJaWYgKCFuZXdfdmFsdWVzLT5kZGJfY2hhbmdl ZCkKKwkJcmV0dXJuOworCisJbmV3X3ZhbHVlcy0+ZGRiX2NoYW5nZWQgPSBmYWxzZTsKKwogCS8q CiAJICogRmlyc3QgcGFzczogZmx1c2ggdGhlIHBpcGVzIHdpdGggdGhlIG5ldyBhbGxvY2F0aW9u IGNvbnRhaW5lZCBpbnRvCiAJICogdGhlIG9sZCBzcGFjZS4KQEAgLTM4OTMsNiArMzg5OSwyMiBA QCBwaXBlc19tb2RpZmllZChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJcmV0dXJu IHJldDsKIH0KIAorc3RhdGljIGJvb2wKK3NrbF9waXBlX2RkYl9jaGFuZ2VkKHN0cnVjdCBza2xf ZGRiX2FsbG9jYXRpb24gKm9sZCwKKwkJICAgICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpu ZXcsCisJCSAgICAgZW51bSBwaXBlIHBpcGUpCit7CisJaWYgKG1lbWNtcCgmb2xkLT5waXBlW3Bp cGVdLCAmbmV3LT5waXBlW3BpcGVdLAorCQkgICBzaXplb2Yob2xkLT5waXBlW3BpcGVdKSkgIT0g MCB8fAorCSAgICBtZW1jbXAoJm9sZC0+cGxhbmVbcGlwZV0sICZuZXctPnBsYW5lW3BpcGVdLAor CQkgICBzaXplb2Yob2xkLT5wbGFuZVtwaXBlXSkpICE9IDAgfHwKKwkgICAgbWVtY21wKCZvbGQt PnlfcGxhbmVbcGlwZV0sICZuZXctPnlfcGxhbmVbcGlwZV0sCisJCSAgIHNpemVvZihvbGQtPnlf cGxhbmVbcGlwZV0pKSAhPSAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30K Kwogc3RhdGljIGludAogc2tsX2NvbXB1dGVfZGRiKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSkKIHsKQEAgLTM5MDAsNyArMzkyMiw4IEBAIHNrbF9jb21wdXRlX2RkYihzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwogCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRl ID0gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YzsKLQlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIgPSAmaW50ZWxfc3RhdGUt PndtX3Jlc3VsdHMuZGRiOworCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKm5ld19kZGIgPSAm aW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMuZGRiOworCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24g Km9sZF9kZGIgPSAmZGV2X3ByaXYtPndtLnNrbF9ody5kZGI7CiAJdWludDMyX3QgcmVhbGxvY19w aXBlcyA9IHBpcGVzX21vZGlmaWVkKHN0YXRlKTsKIAlpbnQgcmV0OwogCkBAIC0zOTM4LDkgKzM5 NjEsMTMgQEAgc2tsX2NvbXB1dGVfZGRiKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK IAkJaWYgKElTX0VSUihjc3RhdGUpKQogCQkJcmV0dXJuIFBUUl9FUlIoY3N0YXRlKTsKIAotCQly ZXQgPSBza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0YXRlLCBkZGIpOworCQlyZXQgPSBza2xfYWxs b2NhdGVfcGlwZV9kZGIoY3N0YXRlLCBuZXdfZGRiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiBy ZXQ7CisKKwkJaWYgKCFpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGJfY2hhbmdlZCAmJgorCQkg ICAgc2tsX3BpcGVfZGRiX2NoYW5nZWQob2xkX2RkYiwgbmV3X2RkYiwgaW50ZWxfY3J0Yy0+cGlw ZSkpCisJCQlpbnRlbF9zdGF0ZS0+d21fcmVzdWx0cy5kZGJfY2hhbmdlZCA9IHRydWU7CiAJfQog CiAJcmV0dXJuIDA7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==