From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v6 2/6] drm/i915/gen9: Only copy WM results for changed pipes to skl_hw Date: Tue, 2 Aug 2016 18:37:33 -0400 Message-ID: <1470177458-31984-3-git-send-email-cpaul@redhat.com> References: <1470177458-31984-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: <1470177458-31984-1-git-send-email-cpaul@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Matt Roper Cc: Radhakrishna Sripada , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hans de Goede , stable@vger.kernel.org, Daniel Vetter , Lyude List-Id: dri-devel@lists.freedesktop.org RnJvbTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KCldoZW4gd2Ugd3Jp dGUgd2F0ZXJtYXJrIHZhbHVlcyB0byB0aGUgaGFyZHdhcmUsIHRob3NlIHZhbHVlcyBhcmUgc3Rv cmVkCmluIGRldl9wcml2LT53bS5za2xfaHcuICBIb3dldmVyIHdpdGggcmVjZW50IHdhdGVybWFy ayBjaGFuZ2VzLCB0aGUKcmVzdWx0cyBzdHJ1Y3R1cmUgd2UncmUgY29weWluZyBmcm9tIG9ubHkg Y29udGFpbnMgdmFsaWQgd2F0ZXJtYXJrIGFuZApEREIgdmFsdWVzIGZvciB0aGUgcGlwZXMgdGhh dCBhcmUgYWN0dWFsbHkgY2hhbmdpbmc7IHRoZSB2YWx1ZXMgZm9yCm90aGVyIHBpcGVzIHJlbWFp biAwLiAgVGh1cyBhIGJsaW5kIGNvcHkgb2YgdGhlIGVudGlyZSBza2xfd21fdmFsdWVzCnN0cnVj dHVyZSB3aWxsIGNsb2JiZXIgdGhlIHZhbHVlcyBmb3IgdW5jaGFuZ2VkIHBpcGVzLi4ud2UgbmVl ZCB0byBiZQptb3JlIHNlbGVjdGl2ZSBhbmQgb25seSBjb3B5IG92ZXIgdGhlIHZhbHVlcyBmb3Ig dGhlIGNoYW5naW5nIHBpcGVzLgoKVGhpcyBtaXN0YWtlIHdhcyBoaWRkZW4gdW50aWwgcmVjZW50 bHkgZHVlIHRvIGFub3RoZXIgYnVnIHRoYXQgY2F1c2VkIHVzCnRvIGVycm9uZW91c2x5IHJlLWNh bGN1bGF0ZSB3YXRlcm1hcmtzIGZvciBhbGwgYWN0aXZlIHBpcGVzIHJhdGhlciB0aGFuCmNoYW5n aW5nIHBpcGVzLiAgT25seSB3aGVuIHRoYXQgYnVnIHdhcyBmaXhlZCB3YXMgdGhlIGltcGFjdCBv ZiB0aGlzIGJ1ZwpkaXNjb3ZlcmVkIChlLmcuLCBtb2Rlc2V0cyBmYWlsaW5nIHdpdGggIlJlcXVl c3RlZCBkaXNwbGF5IGNvbmZpZ3VyYXRpb24KZXhjZWVkcyBzeXN0ZW0gd2F0ZXJtYXJrIGxpbWl0 YXRpb25zIiBtZXNzYWdlcyBhbmQgbGVhdmluZyB3YXRlcm1hcmtzCm5vbi1mdW5jdGlvbmFsLCBl dmVuIG9uZXMgaW5pdGlhdGVkIGJ5IGludGVsX2ZiZGV2X3Jlc3RvcmVfbW9kZSkuCgpDaGFuZ2Vz IHNpbmNlIHYxOgogLSBBZGQgYSBmdW5jdGlvbiBmb3IgY29weWluZyBhIHBpcGUncyB3bSB2YWx1 ZXMKICAgKHNrbF9jb3B5X3dtX2Zvcl9waXBlKCkpIHNvIHdlIGNhbiByZXVzZSB0aGlzIGxhdGVy CgpGaXhlczogNzM0ZmEwMWYzYTE3ICgiZHJtL2k5MTUvZ2VuOTogQ2FsY3VsYXRlIHdhdGVybWFy a3MgZHVyaW5nIGF0b21pYyAnY2hlY2snICh2MikiKQpGaXhlczogOWI2MTMwMjI3NDk1ICgiZHJt L2k5MTUvZ2VuOTogUmUtYWxsb2NhdGUgRERCIG9ubHkgZm9yIGNoYW5nZWQgcGlwZXMiKQpTaWdu ZWQtb2ZmLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBMeXVkZSA8Y3BhdWxAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IE1hdHQgUm9wZXIg PG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+CkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCkNj OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpD YzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IERh bmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgpDYzogUmFkaGFrcmlzaG5hIFNy aXBhZGEgPHJhZGhha3Jpc2huYS5zcmlwYWRhQGludGVsLmNvbT4KQ2M6IEhhbnMgZGUgR29lZGUg PGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u YyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNiBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4 IDY4NzIxYTUuLjdmZDI5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtNDA2NCw2ICs0 MDY0LDI0IEBAIHNrbF9jb21wdXRlX2RkYihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitza2xfY29weV93bV9mb3JfcGlwZShzdHJ1 Y3Qgc2tsX3dtX3ZhbHVlcyAqZHN0LAorCQkgICAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpzcmMs CisJCSAgICAgZW51bSBwaXBlIHBpcGUpCit7CisJZHN0LT53bV9saW5ldGltZVtwaXBlXSA9IHNy Yy0+d21fbGluZXRpbWVbcGlwZV07CisJbWVtY3B5KGRzdC0+cGxhbmVbcGlwZV0sIHNyYy0+cGxh bmVbcGlwZV0sCisJICAgICAgIHNpemVvZihkc3QtPnBsYW5lW3BpcGVdKSk7CisJbWVtY3B5KGRz dC0+cGxhbmVfdHJhbnNbcGlwZV0sIHNyYy0+cGxhbmVfdHJhbnNbcGlwZV0sCisJICAgICAgIHNp emVvZihkc3QtPnBsYW5lX3RyYW5zW3BpcGVdKSk7CisKKwlkc3QtPmRkYi5waXBlW3BpcGVdID0g c3JjLT5kZGIucGlwZVtwaXBlXTsKKwltZW1jcHkoZHN0LT5kZGIueV9wbGFuZVtwaXBlXSwgc3Jj LT5kZGIueV9wbGFuZVtwaXBlXSwKKwkgICAgICAgc2l6ZW9mKGRzdC0+ZGRiLnlfcGxhbmVbcGlw ZV0pKTsKKwltZW1jcHkoZHN0LT5kZGIucGxhbmVbcGlwZV0sIHNyYy0+ZGRiLnBsYW5lW3BpcGVd LAorCSAgICAgICBzaXplb2YoZHN0LT5kZGIucGxhbmVbcGlwZV0pKTsKK30KKwogc3RhdGljIGlu dAogc2tsX2NvbXB1dGVfd20oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogewpAQCAt NDEzNiw4ICs0MTU0LDEwIEBAIHN0YXRpYyB2b2lkIHNrbF91cGRhdGVfd20oc3RydWN0IGRybV9j cnRjICpjcnRjKQogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwogCXN0cnVjdCBza2xf d21fdmFsdWVzICpyZXN1bHRzID0gJmRldl9wcml2LT53bS5za2xfcmVzdWx0czsKKwlzdHJ1Y3Qg c2tsX3dtX3ZhbHVlcyAqaHdfdmFscyA9ICZkZXZfcHJpdi0+d20uc2tsX2h3OwogCXN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKIAlzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1h bDsKKwlpbnQgcGlwZTsKIAogCWlmICgocmVzdWx0cy0+ZGlydHlfcGlwZXMgJiBkcm1fY3J0Y19t YXNrKGNydGMpKSA9PSAwKQogCQlyZXR1cm47CkBAIC00MTQ5LDggKzQxNjksMTIgQEAgc3RhdGlj IHZvaWQgc2tsX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc2tsX3dyaXRlX3dt X3ZhbHVlcyhkZXZfcHJpdiwgcmVzdWx0cyk7CiAJc2tsX2ZsdXNoX3dtX3ZhbHVlcyhkZXZfcHJp diwgcmVzdWx0cyk7CiAKLQkvKiBzdG9yZSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQlkZXZf cHJpdi0+d20uc2tsX2h3ID0gKnJlc3VsdHM7CisJLyoKKwkgKiBTdG9yZSB0aGUgbmV3IGNvbmZp Z3VyYXRpb24gKGJ1dCBvbmx5IGZvciB0aGUgcGlwZXMgdGhhdCBoYXZlCisJICogY2hhbmdlZDsg dGhlIG90aGVyIHZhbHVlcyB3ZXJlbid0IHJlY29tcHV0ZWQpLgorCSAqLworCWZvcl9lYWNoX3Bp cGVfbWFza2VkKGRldl9wcml2LCBwaXBlLCByZXN1bHRzLT5kaXJ0eV9waXBlcykKKwkJc2tsX2Nv cHlfd21fZm9yX3BpcGUoaHdfdmFscywgcmVzdWx0cywgcGlwZSk7CiAKIAltdXRleF91bmxvY2so JmRldl9wcml2LT53bS53bV9tdXRleCk7CiB9Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756277AbcHBWkK (ORCPT ); Tue, 2 Aug 2016 18:40:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48126 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754146AbcHBWji (ORCPT ); Tue, 2 Aug 2016 18:39:38 -0400 From: Lyude To: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Matt Roper Cc: Lyude , stable@vger.kernel.org, Daniel Vetter , Radhakrishna Sripada , Hans de Goede , Jani Nikula , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 2/6] drm/i915/gen9: Only copy WM results for changed pipes to skl_hw Date: Tue, 2 Aug 2016 18:37:33 -0400 Message-Id: <1470177458-31984-3-git-send-email-cpaul@redhat.com> In-Reply-To: <1470177458-31984-1-git-send-email-cpaul@redhat.com> References: <1470177458-31984-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.38]); Tue, 02 Aug 2016 22:38:13 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Matt Roper When we write watermark values to the hardware, those values are stored in dev_priv->wm.skl_hw. However with recent watermark changes, the results structure we're copying from only contains valid watermark and DDB values for the pipes that are actually changing; the values for other pipes remain 0. Thus a blind copy of the entire skl_wm_values structure will clobber the values for unchanged pipes...we need to be more selective and only copy over the values for the changing pipes. This mistake was hidden until recently due to another bug that caused us to erroneously re-calculate watermarks for all active pipes rather than changing pipes. Only when that bug was fixed was the impact of this bug discovered (e.g., modesets failing with "Requested display configuration exceeds system watermark limitations" messages and leaving watermarks non-functional, even ones initiated by intel_fbdev_restore_mode). Changes since v1: - Add a function for copying a pipe's wm values (skl_copy_wm_for_pipe()) so we can reuse this later Fixes: 734fa01f3a17 ("drm/i915/gen9: Calculate watermarks during atomic 'check' (v2)") Fixes: 9b6130227495 ("drm/i915/gen9: Re-allocate DDB only for changed pipes") Signed-off-by: Matt Roper Signed-off-by: Lyude Reviewed-by: Matt Roper Cc: stable@vger.kernel.org Cc: Maarten Lankhorst Cc: Ville Syrjälä Cc: Daniel Vetter Cc: Radhakrishna Sripada Cc: Hans de Goede --- drivers/gpu/drm/i915/intel_pm.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 68721a5..7fd299e 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -4064,6 +4064,24 @@ skl_compute_ddb(struct drm_atomic_state *state) return 0; } +static void +skl_copy_wm_for_pipe(struct skl_wm_values *dst, + struct skl_wm_values *src, + enum pipe pipe) +{ + dst->wm_linetime[pipe] = src->wm_linetime[pipe]; + memcpy(dst->plane[pipe], src->plane[pipe], + sizeof(dst->plane[pipe])); + memcpy(dst->plane_trans[pipe], src->plane_trans[pipe], + sizeof(dst->plane_trans[pipe])); + + dst->ddb.pipe[pipe] = src->ddb.pipe[pipe]; + memcpy(dst->ddb.y_plane[pipe], src->ddb.y_plane[pipe], + sizeof(dst->ddb.y_plane[pipe])); + memcpy(dst->ddb.plane[pipe], src->ddb.plane[pipe], + sizeof(dst->ddb.plane[pipe])); +} + static int skl_compute_wm(struct drm_atomic_state *state) { @@ -4136,8 +4154,10 @@ static void skl_update_wm(struct drm_crtc *crtc) struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = to_i915(dev); struct skl_wm_values *results = &dev_priv->wm.skl_results; + struct skl_wm_values *hw_vals = &dev_priv->wm.skl_hw; struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; + int pipe; if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) return; @@ -4149,8 +4169,12 @@ static void skl_update_wm(struct drm_crtc *crtc) skl_write_wm_values(dev_priv, results); skl_flush_wm_values(dev_priv, results); - /* store the new configuration */ - dev_priv->wm.skl_hw = *results; + /* + * Store the new configuration (but only for the pipes that have + * changed; the other values weren't recomputed). + */ + for_each_pipe_masked(dev_priv, pipe, results->dirty_pipes) + skl_copy_wm_for_pipe(hw_vals, results, pipe); mutex_unlock(&dev_priv->wm.wm_mutex); } -- 2.7.4