From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH v5 5/6] drm/i915: Move CRTC updating in atomic_commit into it's own hook Date: Tue, 2 Aug 2016 15:11:10 -0700 Message-ID: <20160802221110.GB32025@intel.com> References: <1470163975-30467-1-git-send-email-cpaul@redhat.com> <1470163975-30467-6-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1470163975-30467-6-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: Lyude Cc: Radhakrishna Sripada , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Hans de Goede , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBBdWcgMDIsIDIwMTYgYXQgMDI6NTI6NTNQTSAtMDQwMCwgTHl1ZGUgd3JvdGU6Cj4g U2luY2Ugd2UgaGF2ZSB0byB3cml0ZSBkZGIgYWxsb2NhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBh cyB3ZSBkbyBvdGhlcgo+IHBsYW5lIHVwZGF0ZXMsIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gYmUg YWJsZSB0byBjb250cm9sIHRoZSBvcmRlciBpbgo+IHdoaWNoIHdlIGV4ZWN1dGUgbW9kZXNldHMg b24gZWFjaCBwaXBlLiBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0bwo+IGp1c3QgZmFj dG9yIHRoaXMgc2VjdGlvbiBvZiBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoKQo+IChpbnRlbF9h dG9taWNfY29tbWl0KCkgZm9yIHN0YWJsZSBicmFuY2hlcykgaW50byBpdCdzIG93biBmdW5jdGlv biwgYW5kCj4gYWRkIGFuIGFwcHJvcHJpYXRlIGRpc3BsYXkgZnVuY3Rpb24gaG9vayBmb3IgaXQu Cj4gCj4gQmFzZWQgb2ZmIG9mIE1hdHQgUm9wZSdzIHN1Z2dlc3Rpb25zCj4gCj4gU2lnbmVkLW9m Zi1ieTogTHl1ZGUgPGNwYXVsQHJlZGhhdC5jb20+Cj4gW29taXR0aW5nIENDIGZvciBzdGFibGUs IHNpbmNlIHRoaXMgcGF0Y2ggd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgZm9yCj4gc3VjaCBiYWNr cG9ydHMgZmlyc3RdCj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgo+ IENjOiBSYWRoYWtyaXNobmEgU3JpcGFkYSA8cmFkaGFrcmlzaG5hLnNyaXBhZGFAaW50ZWwuY29t Pgo+IENjOiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgo+IENjOiBNYXR0IFJv cGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgfCAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYyB8IDc0ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ICAy IGZpbGVzIGNoYW5nZWQsIDU0IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDg3MDE4ZDMuLjQ5NjRlM2YgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNjMyLDYgKzYzMiw4IEBAIHN0cnVjdCBkcm1faTkxNV9k aXNwbGF5X2Z1bmNzIHsKPiAgCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpOwo+ICAJdm9pZCAoKmNydGNfZW5hYmxlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICAJ dm9pZCAoKmNydGNfZGlzYWJsZSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArCXZvaWQgKCp1 cGRhdGVfY3J0Y3MpKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJICAgICB1 bnNpZ25lZCBpbnQgKmNydGNfdmJsYW5rX21hc2spOwo+ICAJdm9pZCAoKmF1ZGlvX2NvZGVjX2Vu YWJsZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQkJCSAgIHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkJICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK PiBpbmRleCA3OWQxNDZjLi5kOTg1YjViIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+IEBAIC0xMzYyNCw2ICsxMzYyNCw1MiBAQCBzdGF0aWMgYm9vbCBuZWVkc192Ymxh bmtfd2FpdChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgCXJldHVybiBm YWxzZTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2NydGMoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCj4gKwkJ CSAgICAgIHVuc2lnbmVkIGludCAqY3J0Y192YmxhbmtfbWFzaykKPiArewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj ID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICsJYm9vbCBtb2Rl c2V0ID0gbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSk7Cj4gKwo+ICsJaWYgKG1vZGVzZXQpIHsK PiArCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KGludGVsX2NydGMpOwo+ICsJCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZW5hYmxlKGNydGMpOwo+ICsJfSBlbHNlIHsKPiArCQlpbnRlbF9wcmVfcGxh bmVfdXBkYXRlKHRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpKTsKPiArCX0KPiAr Cj4gKwlpZiAoZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGMt PnByaW1hcnkpKSB7Cj4gKwkJaW50ZWxfZmJjX2VuYWJsZSgKPiArCQkgICAgaW50ZWxfY3J0Yywg cGlwZV9jb25maWcsCj4gKwkJICAgIHRvX2ludGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnkt PnN0YXRlKSk7Cj4gKwl9Cj4gKwo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lc19v bl9jcnRjKG9sZF9jcnRjX3N0YXRlKTsKPiArCj4gKwlpZiAocGlwZV9jb25maWctPmJhc2UuYWN0 aXZlICYmIG5lZWRzX3ZibGFua193YWl0KHBpcGVfY29uZmlnKSkKCllvdSBjYW4gZHJvcCB0aGUg cGlwZV9jb25maWctPmJhc2UuYWN0aXZlIHNpbmNlIHBpcGVfY29uZmlnLT5iYXNlLmFjdGl2ZQpp cyBqdXN0IGFub3RoZXIgd2F5IG9mIHdyaXRpbmcgY3J0Yy0+c3RhdGUtPmFjdGl2ZSwgd2hpY2gg eW91IHRlc3RlZApiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgoKT3RoZXIgdGhhbiB0aGF0 LAoKUmV2aWV3ZWQtYnk6IE1hdHQgUm9wZXIgPG1hdHRoZXcuZC5yb3BlckBpbnRlbC5jb20+Cgo+ ICsJCSpjcnRjX3ZibGFua19tYXNrIHw9IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jcnRjcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmNydGNfdmJsYW5rX21hc2spCj4gK3sK PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGU7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0 YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkgewo+ICsJCWlmICghY3J0Yy0+c3RhdGUtPmFj dGl2ZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWludGVsX3VwZGF0ZV9jcnRjKGNydGMsIHN0 YXRlLCBvbGRfY3J0Y19zdGF0ZSwKPiArCQkJCSAgY3J0Y192YmxhbmtfbWFzayk7Cj4gKwl9Cj4g K30KPiArCj4gIHN0YXRpYyB2b2lkIGludGVsX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBz dGF0ZS0+ZGV2Owo+IEBAIC0xMzcxNSwxNyArMTM3NjEsOSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9h dG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICAJCWlu dGVsX21vZGVzZXRfdmVyaWZ5X2Rpc2FibGVkKGRldik7Cj4gIAl9Cj4gIAo+IC0JLyogTm93IGVu YWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQg dXAuICovCj4gKwkvKiBDb21wbGV0ZSB0aGUgZXZlbnRzIGZvciBwaXBlcyB0aGF0IGhhdmUgbm93 IGJlZW4gZGlzYWJsZWQgKi8KPiAgCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMs IG9sZF9jcnRjX3N0YXRlLCBpKSB7Cj4gLQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJCWJvb2wgbW9kZXNldCA9IG5lZWRzX21vZGVzZXQo Y3J0Yy0+c3RhdGUpOwo+IC0JCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9 Cj4gLQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+IC0KPiAtCQlpZiAobW9k ZXNldCAmJiBjcnRjLT5zdGF0ZS0+YWN0aXZlKSB7Cj4gLQkJCXVwZGF0ZV9zY2FubGluZV9vZmZz ZXQodG9faW50ZWxfY3J0YyhjcnRjKSk7Cj4gLQkJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5h YmxlKGNydGMpOwo+IC0JCX0KPiAgCj4gIAkJLyogQ29tcGxldGUgZXZlbnRzIGZvciBub3cgZGlz YWJsZSBwaXBlcyBoZXJlLiAqLwo+ICAJCWlmIChtb2Rlc2V0ICYmICFjcnRjLT5zdGF0ZS0+YWN0 aXZlICYmIGNydGMtPnN0YXRlLT5ldmVudCkgewo+IEBAIC0xMzczNSwyMSArMTM3NzMsMTEgQEAg c3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKPiAgCj4gIAkJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gIAkJfQo+ IC0KPiAtCQlpZiAoIW1vZGVzZXQpCj4gLQkJCWludGVsX3ByZV9wbGFuZV91cGRhdGUodG9faW50 ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSkpOwo+IC0KPiAtCQlpZiAoY3J0Yy0+c3RhdGUt PmFjdGl2ZSAmJgo+IC0JCSAgICBkcm1fYXRvbWljX2dldF9leGlzdGluZ19wbGFuZV9zdGF0ZShz dGF0ZSwgY3J0Yy0+cHJpbWFyeSkpCj4gLQkJCWludGVsX2ZiY19lbmFibGUoaW50ZWxfY3J0Yywg cGlwZV9jb25maWcsIHRvX2ludGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKSk7 Cj4gLQo+IC0JCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+IC0JCQlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfcGxhbmVzX29uX2NydGMob2xkX2NydGNfc3RhdGUpOwo+IC0KPiAtCQlpZiAocGlw ZV9jb25maWctPmJhc2UuYWN0aXZlICYmIG5lZWRzX3ZibGFua193YWl0KHBpcGVfY29uZmlnKSkK PiAtCQkJY3J0Y192YmxhbmtfbWFzayB8PSAxIDw8IGk7Cj4gIAl9Cj4gIAo+ICsJLyogTm93IGVu YWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQg dXAuICovCj4gKwlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3Moc3RhdGUsICZjcnRjX3Zi bGFua19tYXNrKTsKPiArCj4gIAkvKiBGSVhNRTogV2Ugc2hvdWxkIGNhbGwgZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0X2h3X2RvbmUoKSBoZXJlCj4gIAkgKiBhbHJlYWR5LCBidXQgc3RpbGwgbmVl ZCB0aGUgc3RhdGUgZm9yIHRoZSBkZWxheWVkIG9wdGltaXphdGlvbi4gVG8KPiAgCSAqIGZpeCB0 aGlzOgo+IEBAIC0xNTIwMiw2ICsxNTIzMCw4IEBAIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hv b2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQlkZXZfcHJpdi0+ZGlz cGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKPiAgCX0KPiAgCj4gKwlkZXZf cHJpdi0+ZGlzcGxheS51cGRhdGVfY3J0Y3MgPSBpbnRlbF91cGRhdGVfY3J0Y3M7Cj4gKwo+ICAJ LyogUmV0dXJucyB0aGUgY29yZSBkaXNwbGF5IGNsb2NrIHNwZWVkICovCj4gIAlpZiAoSVNfU0tZ TEFLRShkZXZfcHJpdikgfHwgSVNfS0FCWUxBS0UoZGV2X3ByaXYpKQo+ICAJCWRldl9wcml2LT5k aXNwbGF5LmdldF9kaXNwbGF5X2Nsb2NrX3NwZWVkID0KPiAtLSAKPiAyLjcuNAo+IAoKLS0gCk1h dHQgUm9wZXIKR3JhcGhpY3MgU29mdHdhcmUgRW5naW5lZXIKSW9URyBQbGF0Zm9ybSBFbmFibGlu ZyAmIERldmVsb3BtZW50CkludGVsIENvcnBvcmF0aW9uCig5MTYpIDM1Ni0yNzk1Cl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755426AbcHBWMa (ORCPT ); Tue, 2 Aug 2016 18:12:30 -0400 Received: from mga02.intel.com ([134.134.136.20]:48363 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753780AbcHBWMW (ORCPT ); Tue, 2 Aug 2016 18:12:22 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,462,1464678000"; d="scan'208";a="1033929291" Date: Tue, 2 Aug 2016 15:11:10 -0700 From: Matt Roper To: Lyude Cc: intel-gfx@lists.freedesktop.org, Ville =?iso-8859-1?Q?Syrj=E4l=E4?= , Maarten Lankhorst , Daniel Vetter , Radhakrishna Sripada , Hans de Goede , Jani Nikula , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v5 5/6] drm/i915: Move CRTC updating in atomic_commit into it's own hook Message-ID: <20160802221110.GB32025@intel.com> References: <1470163975-30467-1-git-send-email-cpaul@redhat.com> <1470163975-30467-6-git-send-email-cpaul@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1470163975-30467-6-git-send-email-cpaul@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 02, 2016 at 02:52:53PM -0400, Lyude wrote: > 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 > > Signed-off-by: Lyude > [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 > Cc: Matt Roper > --- > 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 79d146c..d985b5b 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -13624,6 +13624,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 (pipe_config->base.active && needs_vblank_wait(pipe_config)) You can drop the pipe_config->base.active since pipe_config->base.active is just another way of writing crtc->state->active, which you tested before calling this function. Other than that, Reviewed-by: Matt Roper > + *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; > @@ -13715,17 +13761,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) { > @@ -13735,21 +13773,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: > @@ -15202,6 +15230,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 > -- Matt Roper Graphics Software Engineer IoTG Platform Enabling & Development Intel Corporation (916) 356-2795