From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v6 5/6] drm/i915: Move CRTC updating in atomic_commit into it's own hook Date: Tue, 2 Aug 2016 18:37:36 -0400 Message-ID: <1470177458-31984-6-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 , linux-kernel@vger.kernel.org, Hans de Goede , dri-devel@lists.freedesktop.org, Daniel Vetter , Lyude List-Id: dri-devel@lists.freedesktop.org U2luY2Ugd2UgaGF2ZSB0byB3cml0ZSBkZGIgYWxsb2NhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBh cyB3ZSBkbyBvdGhlcgpwbGFuZSB1cGRhdGVzLCB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGJlIGFi bGUgdG8gY29udHJvbCB0aGUgb3JkZXIgaW4Kd2hpY2ggd2UgZXhlY3V0ZSBtb2Rlc2V0cyBvbiBl YWNoIHBpcGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvCmp1c3QgZmFjdG9yIHRo aXMgc2VjdGlvbiBvZiBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoKQooaW50ZWxfYXRvbWljX2Nv bW1pdCgpIGZvciBzdGFibGUgYnJhbmNoZXMpIGludG8gaXQncyBvd24gZnVuY3Rpb24sIGFuZAph ZGQgYW4gYXBwcm9wcmlhdGUgZGlzcGxheSBmdW5jdGlvbiBob29rIGZvciBpdC4KCkJhc2VkIG9m ZiBvZiBNYXR0IFJvcGUncyBzdWdnZXN0aW9ucwoKQ2hhbmdlcyBzaW5jZSB2MToKIC0gRHJvcCBw aXBlX2NvbmZpZy0+YmFzZS5hY3RpdmUgY2hlY2sgaW4gaW50ZWxfdXBkYXRlX2NydGNzKCkgc2lu Y2Ugd2UKICAgY2hlY2sgdGhhdCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24KClNpZ25lZC1v ZmYtYnk6IEx5dWRlIDxjcGF1bEByZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogTWF0dCBSb3BlciA8 bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KW29taXR0aW5nIENDIGZvciBzdGFibGUsIHNpbmNl IHRoaXMgcGF0Y2ggd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgZm9yCnN1Y2ggYmFja3BvcnRzIGZp cnN0XQpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K Q2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgpDYzogUmFkaGFrcmlz aG5hIFNyaXBhZGEgPHJhZGhha3Jpc2huYS5zcmlwYWRhQGludGVsLmNvbT4KQ2M6IEhhbnMgZGUg R29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCAgICAgIHwgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5n ZWQsIDU0IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCmluZGV4IDg3MDE4ZDMuLjQ5NjRlM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAt NjMyLDYgKzYzMiw4IEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsKIAkJCQkgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIAl2b2lkICgqY3J0Y19lbmFibGUp KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAJdm9pZCAoKmNydGNfZGlzYWJsZSkoc3RydWN0IGRy bV9jcnRjICpjcnRjKTsKKwl2b2lkICgqdXBkYXRlX2NydGNzKShzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUsCisJCQkgICAgIHVuc2lnbmVkIGludCAqY3J0Y192YmxhbmtfbWFzayk7CiAJ dm9pZCAoKmF1ZGlvX2NvZGVjX2VuYWJsZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKIAkJCQkgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCQkgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kaXNwbGF5LmMKaW5kZXggNzZlZmU1My4uNTljZjUxMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTM2MTIsNiArMTM2MTIsNTIgQEAgc3RhdGljIGJvb2wgbmVl ZHNfdmJsYW5rX3dhaXQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJcmV0 dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfY3J0YyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJ CQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAorCQkJICAgICAg dW5zaWduZWQgaW50ICpjcnRjX3ZibGFua19tYXNrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkZXYpOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcgPSB0b19pbnRl bF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwlib29sIG1vZGVzZXQgPSBuZWVkc19tb2Rlc2V0 KGNydGMtPnN0YXRlKTsKKworCWlmIChtb2Rlc2V0KSB7CisJCXVwZGF0ZV9zY2FubGluZV9vZmZz ZXQoaW50ZWxfY3J0Yyk7CisJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlKGNydGMpOwor CX0gZWxzZSB7CisJCWludGVsX3ByZV9wbGFuZV91cGRhdGUodG9faW50ZWxfY3J0Y19zdGF0ZShv bGRfY3J0Y19zdGF0ZSkpOworCX0KKworCWlmIChkcm1fYXRvbWljX2dldF9leGlzdGluZ19wbGFu ZV9zdGF0ZShzdGF0ZSwgY3J0Yy0+cHJpbWFyeSkpIHsKKwkJaW50ZWxfZmJjX2VuYWJsZSgKKwkJ ICAgIGludGVsX2NydGMsIHBpcGVfY29uZmlnLAorCQkgICAgdG9faW50ZWxfcGxhbmVfc3RhdGUo Y3J0Yy0+cHJpbWFyeS0+c3RhdGUpKTsKKwl9CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRf cGxhbmVzX29uX2NydGMob2xkX2NydGNfc3RhdGUpOworCisJaWYgKG5lZWRzX3ZibGFua193YWl0 KHBpcGVfY29uZmlnKSkKKwkJKmNydGNfdmJsYW5rX21hc2sgfD0gZHJtX2NydGNfbWFzayhjcnRj KTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2NydGNzKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmNydGNfdmJsYW5rX21hc2sp Cit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBj cnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkgeworCQlpZiAoIWNydGMtPnN0YXRlLT5hY3RpdmUpCisJ CQljb250aW51ZTsKKworCQlpbnRlbF91cGRhdGVfY3J0YyhjcnRjLCBzdGF0ZSwgb2xkX2NydGNf c3RhdGUsCisJCQkJICBjcnRjX3ZibGFua19tYXNrKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGlu dGVsX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiB7 CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7CkBAIC0xMzcxMSwxNyArMTM3 NTcsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQogCQlpbnRlbF9tb2Rlc2V0X3ZlcmlmeV9kaXNhYmxlZChkZXYp OwogCX0KIAotCS8qIE5vdyBlbmFibGUgdGhlIGNsb2NrcywgcGxhbmUsIHBpcGUsIGFuZCBjb25u ZWN0b3JzIHRoYXQgd2Ugc2V0IHVwLiAqLworCS8qIENvbXBsZXRlIHRoZSBldmVudHMgZm9yIHBp cGVzIHRoYXQgaGF2ZSBub3cgYmVlbiBkaXNhYmxlZCAqLwogCWZvcl9lYWNoX2NydGNfaW5fc3Rh dGUoc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLCBpKSB7Ci0JCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAkJYm9vbCBtb2Rlc2V0ID0gbmVl ZHNfbW9kZXNldChjcnRjLT5zdGF0ZSk7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZyA9Ci0JCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQotCQlpZiAo bW9kZXNldCAmJiBjcnRjLT5zdGF0ZS0+YWN0aXZlKSB7Ci0JCQl1cGRhdGVfc2NhbmxpbmVfb2Zm c2V0KHRvX2ludGVsX2NydGMoY3J0YykpOwotCQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19lbmFi bGUoY3J0Yyk7Ci0JCX0KIAogCQkvKiBDb21wbGV0ZSBldmVudHMgZm9yIG5vdyBkaXNhYmxlIHBp cGVzIGhlcmUuICovCiAJCWlmIChtb2Rlc2V0ICYmICFjcnRjLT5zdGF0ZS0+YWN0aXZlICYmIGNy dGMtPnN0YXRlLT5ldmVudCkgewpAQCAtMTM3MzEsMjEgKzEzNzY5LDExIEBAIHN0YXRpYyB2b2lk IGludGVsX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp CiAKIAkJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CiAJCX0KLQotCQlpZiAoIW1vZGVzZXQp Ci0JCQlpbnRlbF9wcmVfcGxhbmVfdXBkYXRlKHRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNf c3RhdGUpKTsKLQotCQlpZiAoY3J0Yy0+c3RhdGUtPmFjdGl2ZSAmJgotCQkgICAgZHJtX2F0b21p Y19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGMtPnByaW1hcnkpKQotCQkJaW50 ZWxfZmJjX2VuYWJsZShpbnRlbF9jcnRjLCBwaXBlX2NvbmZpZywgdG9faW50ZWxfcGxhbmVfc3Rh dGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpKTsKLQotCQlpZiAoY3J0Yy0+c3RhdGUtPmFjdGl2ZSkK LQkJCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXNfb25fY3J0YyhvbGRfY3J0Y19zdGF0 ZSk7Ci0KLQkJaWYgKHBpcGVfY29uZmlnLT5iYXNlLmFjdGl2ZSAmJiBuZWVkc192Ymxhbmtfd2Fp dChwaXBlX2NvbmZpZykpCi0JCQljcnRjX3ZibGFua19tYXNrIHw9IDEgPDwgaTsKIAl9CiAKKwkv KiBOb3cgZW5hYmxlIHRoZSBjbG9ja3MsIHBsYW5lLCBwaXBlLCBhbmQgY29ubmVjdG9ycyB0aGF0 IHdlIHNldCB1cC4gKi8KKwlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3Moc3RhdGUsICZj cnRjX3ZibGFua19tYXNrKTsKKwogCS8qIEZJWE1FOiBXZSBzaG91bGQgY2FsbCBkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfaHdfZG9uZSgpIGhlcmUKIAkgKiBhbHJlYWR5LCBidXQgc3RpbGwgbmVl ZCB0aGUgc3RhdGUgZm9yIHRoZSBkZWxheWVkIG9wdGltaXphdGlvbi4gVG8KIAkgKiBmaXggdGhp czoKQEAgLTE1MjA3LDYgKzE1MjM1LDggQEAgdm9pZCBpbnRlbF9pbml0X2Rpc3BsYXlfaG9va3Mo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlkZXZfcHJpdi0+ZGlzcGxheS5j cnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKIAl9CiAKKwlkZXZfcHJpdi0+ZGlzcGxh eS51cGRhdGVfY3J0Y3MgPSBpbnRlbF91cGRhdGVfY3J0Y3M7CisKIAkvKiBSZXR1cm5zIHRoZSBj b3JlIGRpc3BsYXkgY2xvY2sgc3BlZWQgKi8KIAlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwg SVNfS0FCWUxBS0UoZGV2X3ByaXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfZGlzcGxheV9j bG9ja19zcGVlZCA9Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756744AbcHBWqu (ORCPT ); Tue, 2 Aug 2016 18:46:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56060 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756456AbcHBWql (ORCPT ); Tue, 2 Aug 2016 18:46:41 -0400 From: Lyude To: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Matt Roper Cc: Lyude , Daniel Vetter , Radhakrishna Sripada , Hans de Goede , Jani Nikula , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 5/6] drm/i915: Move CRTC updating in atomic_commit into it's own hook Date: Tue, 2 Aug 2016 18:37:36 -0400 Message-Id: <1470177458-31984-6-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.25]); Tue, 02 Aug 2016 22:38:24 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since we have to write ddb allocations at the same time as we do other plane updates, we're going to need to be able to control the order in which we execute modesets on each pipe. The easiest way to do this is to just factor this section of intel_atomic_commit_tail() (intel_atomic_commit() for stable branches) into it's own function, and add an appropriate display function hook for it. Based off of Matt Rope's suggestions Changes since v1: - Drop pipe_config->base.active check in intel_update_crtcs() since we check that before calling the function Signed-off-by: Lyude Reviewed-by: Matt Roper [omitting CC for stable, since this patch will need to be changed for such backports first] Cc: Ville Syrjälä Cc: Daniel Vetter Cc: Radhakrishna Sripada Cc: Hans de Goede --- drivers/gpu/drm/i915/i915_drv.h | 2 + drivers/gpu/drm/i915/intel_display.c | 74 +++++++++++++++++++++++++----------- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 87018d3..4964e3f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -632,6 +632,8 @@ struct drm_i915_display_funcs { struct intel_crtc_state *crtc_state); void (*crtc_enable)(struct drm_crtc *crtc); void (*crtc_disable)(struct drm_crtc *crtc); + void (*update_crtcs)(struct drm_atomic_state *state, + unsigned int *crtc_vblank_mask); void (*audio_codec_enable)(struct drm_connector *connector, struct intel_encoder *encoder, const struct drm_display_mode *adjusted_mode); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 76efe53..59cf513 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -13612,6 +13612,52 @@ static bool needs_vblank_wait(struct intel_crtc_state *crtc_state) return false; } +static void intel_update_crtc(struct drm_crtc *crtc, + struct drm_atomic_state *state, + struct drm_crtc_state *old_crtc_state, + unsigned int *crtc_vblank_mask) +{ + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *pipe_config = to_intel_crtc_state(crtc->state); + bool modeset = needs_modeset(crtc->state); + + if (modeset) { + update_scanline_offset(intel_crtc); + dev_priv->display.crtc_enable(crtc); + } else { + intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); + } + + if (drm_atomic_get_existing_plane_state(state, crtc->primary)) { + intel_fbc_enable( + intel_crtc, pipe_config, + to_intel_plane_state(crtc->primary->state)); + } + + drm_atomic_helper_commit_planes_on_crtc(old_crtc_state); + + if (needs_vblank_wait(pipe_config)) + *crtc_vblank_mask |= drm_crtc_mask(crtc); +} + +static void intel_update_crtcs(struct drm_atomic_state *state, + unsigned int *crtc_vblank_mask) +{ + struct drm_crtc *crtc; + struct drm_crtc_state *old_crtc_state; + int i; + + for_each_crtc_in_state(state, crtc, old_crtc_state, i) { + if (!crtc->state->active) + continue; + + intel_update_crtc(crtc, state, old_crtc_state, + crtc_vblank_mask); + } +} + static void intel_atomic_commit_tail(struct drm_atomic_state *state) { struct drm_device *dev = state->dev; @@ -13711,17 +13757,9 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) intel_modeset_verify_disabled(dev); } - /* Now enable the clocks, plane, pipe, and connectors that we set up. */ + /* Complete the events for pipes that have now been disabled */ for_each_crtc_in_state(state, crtc, old_crtc_state, i) { - struct intel_crtc *intel_crtc = to_intel_crtc(crtc); bool modeset = needs_modeset(crtc->state); - struct intel_crtc_state *pipe_config = - to_intel_crtc_state(crtc->state); - - if (modeset && crtc->state->active) { - update_scanline_offset(to_intel_crtc(crtc)); - dev_priv->display.crtc_enable(crtc); - } /* Complete events for now disable pipes here. */ if (modeset && !crtc->state->active && crtc->state->event) { @@ -13731,21 +13769,11 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) crtc->state->event = NULL; } - - if (!modeset) - intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); - - if (crtc->state->active && - drm_atomic_get_existing_plane_state(state, crtc->primary)) - intel_fbc_enable(intel_crtc, pipe_config, to_intel_plane_state(crtc->primary->state)); - - if (crtc->state->active) - drm_atomic_helper_commit_planes_on_crtc(old_crtc_state); - - if (pipe_config->base.active && needs_vblank_wait(pipe_config)) - crtc_vblank_mask |= 1 << i; } + /* Now enable the clocks, plane, pipe, and connectors that we set up. */ + dev_priv->display.update_crtcs(state, &crtc_vblank_mask); + /* FIXME: We should call drm_atomic_helper_commit_hw_done() here * already, but still need the state for the delayed optimization. To * fix this: @@ -15207,6 +15235,8 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv) dev_priv->display.crtc_disable = i9xx_crtc_disable; } + dev_priv->display.update_crtcs = intel_update_crtcs; + /* Returns the core display clock speed */ if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) dev_priv->display.get_display_clock_speed = -- 2.7.4