From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 7/8] drm: Use mode_valid() in atomic modeset Date: Fri, 12 May 2017 12:53:56 +0300 Message-ID: <2428951.QzsFL2NRhO@avalon> References: <089951fb-2d89-b874-1e48-5ffbf3a4288d@codeaurora.org> <20170510175556.wxdrgjzdxosdnbx2@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id 663936E68E for ; Fri, 12 May 2017 09:53:55 +0000 (UTC) In-Reply-To: <20170510175556.wxdrgjzdxosdnbx2@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKT24gV2VkbmVzZGF5IDEwIE1heSAyMDE3IDE5OjU1OjU2IERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4gT24gV2VkLCBNYXkgMTAsIDIwMTcgYXQgMDk6Mzg6MDBQTSArMDUzMCwgQXJj aGl0IFRhbmVqYSB3cm90ZToKPiA+IE9uIDUvOS8yMDE3IDEwOjMwIFBNLCBKb3NlIEFicmV1IHdy b3RlOgo+ID4gPiBUaGlzIHBhdGNoZXMgbWFrZXMgdXNlIG9mIHRoZSBuZXcgbW9kZV92YWxpZCgp IGNhbGxiYWNrcyBpbnRyb2R1Y2VkCj4gPiA+IHByZXZpb3VzbHkgdG8gdmFsaWRhdGUgdGhlIGZ1 bGwgdmlkZW8gcGlwZWxpbmUgd2hlbiBtb2Rlc2V0dGluZy4KPiA+ID4gCj4gPiA+IFRoaXMgY2Fs bHMgdGhlIGNvbm5lY3Rvci0+bW9kZV92YWxpZCgpLCBlbmNvZGVyLT5tb2RlX3ZhbGlkKCksCj4g PiA+IGJyaWRnZS0+bW9kZV92YWxpZCgpIGFuZCBjcnRjLT5tb2RlX3ZhbGlkKCkgc28gdGhhdCB3 ZSBjYW4KPiA+ID4gbWFrZSBzdXJlIHRoYXQgdGhlIG1vZGUgd2lsbCBiZSBhY2NlcHRlZCBpbiBl dmVyeSBjb21wb25lbnRzLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogSm9zZSBBYnJldSA8 am9hYnJldUBzeW5vcHN5cy5jb20+Cj4gPiA+IENjOiBDYXJsb3MgUGFsbWluaGEgPHBhbG1pbmhh QHN5bm9wc3lzLmNvbT4KPiA+ID4gQ2M6IEFsZXhleSBCcm9ka2luIDxhYnJvZGtpbkBzeW5vcHN5 cy5jb20+Cj4gPiA+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+ID4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4K PiA+ID4gQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgo+ID4gPiBDYzogQW5kcnpl aiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KPiA+ID4gQ2M6IEFyY2hpdCBUYW5lamEgPGFy Y2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gPiA+IC0tLQo+ID4gPiAKPiA+ID4gQ2hhbmdlcyB2MS0+ djI6Cj4gPiA+IAktIFJlbW92ZWQgY2FsbCB0byBjb25uZWN0b3ItPm1vZGVfdmFsaWQgKFZpbGxl LCBEYW5pZWwpCj4gPiA+IAktIENoYW5nZSBmdW5jdGlvbiBuYW1lIChWaWxsZSkKPiA+ID4gCS0g VXNlIGZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUgKFZpbGxlKQo+ID4gPiAJLSBEbyBu b3QgdmFsaWRhdGUgaWYgY29ubmVjdG9yIGFuZCBtb2RlIGRpZG4ndCBjaGFuZ2UgKFZpbGxlKQo+ ID4gPiAJLSBVc2UgbmV3IGhlbHBlcnMgdG8gY2FsbCBtb2RlX3ZhbGlkCj4gPiA+IAkKPiA+ID4g ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyB8IDc1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKy0tCj4gPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9hdG9taWNfaGVscGVyLmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19o ZWxwZXIuYyBpbmRleCA4YmU5NzE5Li4xOWQwZWExIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gPiBAQCAtNDUyLDYgKzQ1Miw2OSBAQCBzdGF0aWMgaW50 IGhhbmRsZV9jb25mbGljdGluZ19lbmNvZGVycyhzdHJ1Y3QKPiA+ID4gZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCj4gPiA+ICAgCXJldHVybiAwOwo+ID4gPiAgIH0KPiA+ID4gCj4gPiA+ICtzdGF0 aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgbW9kZV92YWxpZF9wYXRoKHN0cnVjdCBkcm1fY29ubmVj dG9yCj4gPiA+ICpjb25uZWN0b3IsCj4gPiA+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCj4gPiA+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiA+ICsJ CQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiA+ID4gK3sKPiA+ID4gKwll bnVtIGRybV9tb2RlX3N0YXR1cyByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1fZW5jb2Rl cl9tb2RlX3ZhbGlkKGVuY29kZXIsIG1vZGUpOwo+ID4gPiArCWlmIChyZXQgIT0gTU9ERV9PSykg ewo+ID4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbRU5DT0RFUjolZDolc10gbW9kZV92YWxpZCgp IGZhaWxlZFxuIiwKPiA+ID4gKwkJCQllbmNvZGVyLT5iYXNlLmlkLCBlbmNvZGVyLT5uYW1lKTsK PiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBkcm1f YnJpZGdlX21vZGVfdmFsaWQoZW5jb2Rlci0+YnJpZGdlLCBtb2RlKTsKPiA+ID4gKwlpZiAocmV0 ICE9IE1PREVfT0spIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0JSSURHRV0gbW9kZV92 YWxpZCgpIGZhaWxlZFxuIik7Cj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJcmV0ID0gZHJtX2NydGNfbW9kZV92YWxpZChjcnRjLCBtb2RlKTsKPiA+ID4gKwlp ZiAocmV0ICE9IE1PREVfT0spIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6 JXNdIG1vZGVfdmFsaWQoKSBmYWlsZWRcbiIsCj4gPiA+ICsJCQkJY3J0Yy0+YmFzZS5pZCwgY3J0 Yy0+bmFtZSk7Cj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ cmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludAo+ID4gPiArbW9k ZV92YWxpZChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiA+ICt7Cj4gPiA+ICsJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gPiA+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ID4gKwlpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWZv cl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm5lY3RvciwgY29ubl9zdGF0 ZSwgaSkgewo+ID4gPiArCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBjb25uX3N0YXRl LT5iZXN0X2VuY29kZXI7Cj4gPiA+ICsJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNvbm5fc3Rh dGUtPmNydGM7Cj4gPiA+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ ID4gKwkJZW51bSBkcm1fbW9kZV9zdGF0dXMgbW9kZV9zdGF0dXM7Cj4gPiA+ICsJCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlOwo+ID4gPiArCj4gPiA+ICsJCWlmICghY3J0YyB8fCAhZW5j b2RlcikKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJCWNydGNfc3RhdGUgPSBk cm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiA+ICsJCWlmICgh Y3J0Y19zdGF0ZSkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCQlpZiAoIWNydGNfc3RhdGUt Pm1vZGVfY2hhbmdlZCAmJiAhY3J0Y19zdGF0ZQo+ID4gPiAtPmNvbm5lY3RvcnNfY2hhbmdlZCkK PiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJCW1vZGUgPSAmY3J0Y19zdGF0ZS0+ bW9kZTsKPiA+ID4gKwo+ID4gPiArCQltb2RlX3N0YXR1cyA9IG1vZGVfdmFsaWRfcGF0aChjb25u ZWN0b3IsIGVuY29kZXIsIGNydGMsIG1vZGUpOwo+ID4gPiArCQlpZiAobW9kZV9zdGF0dXMgIT0g TU9ERV9PSykKPiA+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4g PiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICAgLyoqCj4gPiA+ICAgICogZHJt X2F0b21pY19oZWxwZXJfY2hlY2tfbW9kZXNldCAtIHZhbGlkYXRlIHN0YXRlIG9iamVjdCBmb3Ig bW9kZXNldAo+ID4gPiAgICBjaGFuZ2VzICogQGRldjogRFJNIGRldmljZQo+ID4gPiBAQCAtNDY2 LDEzICs1MjksMTUgQEAgc3RhdGljIGludCBoYW5kbGVfY29uZmxpY3RpbmdfZW5jb2RlcnMoc3Ry dWN0Cj4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgICogMi4gJmRybV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjayB0byB2YWxpZGF0ZSB0aGUKPiA+ID4gICBj b25uZWN0b3Igc3RhdGUuCj4gPiA+ICAgKiAzLiBJZiBpdCdzIGRldGVybWluZWQgYSBtb2Rlc2V0 IGlzIG5lZWRlZCB0aGVuIGFsbCBjb25uZWN0b3JzIG9uIHRoZQo+ID4gPiAgIGFmZmVjdGVkIGNy dGMKPiA+ID4gICAqICAgIGNydGMgYXJlIGFkZGVkIGFuZCAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MuYXRvbWljX2NoZWNrIGlzCj4gPiA+ICAgcnVuIG9uIHRoZW0uCj4gPiA+IC0gKiA0LiAm ZHJtX2JyaWRnZV9mdW5jcy5tb2RlX2ZpeHVwIGlzIGNhbGxlZCBvbiBhbGwgZW5jb2RlciBicmlk Z2VzLgo+ID4gPiAtICogNS4gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2sg aXMgY2FsbGVkIHRvIHZhbGlkYXRlIGFueQo+ID4gPiBlbmNvZGVyIHN0YXRlLgo+ID4gPiArICog NC4gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5tb2RlX3ZhbGlkLAo+ID4gPiAmZHJtX2JyaWRn ZV9mdW5jcy5tb2RlX3ZhbGlkIGFuZAo+ID4gPiArICogICAgJmRybV9jcnRjX2hlbHBlcl9mdW5j cy5tb2RlX3ZhbGlkIGFyZSBjYWxsZWQgb24gdGhlIGFmZmVjdGVkCj4gPiA+IGNvbXBvbmVudHMu Cj4gPiA+ICsgKiA1LiAmZHJtX2JyaWRnZV9mdW5jcy5tb2RlX2ZpeHVwIGlzIGNhbGxlZCBvbiBh bGwgZW5jb2RlciBicmlkZ2VzLgo+ID4gPiArICogNi4gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cy5hdG9taWNfY2hlY2sgaXMgY2FsbGVkIHRvIHZhbGlkYXRlIGFueQo+ID4gPiBlbmNvZGVyIHN0 YXRlLgo+ID4gPiAgICogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBl bmNvZGVyIHdpbGwgYmUgcGFydCBvZiBhCj4gPiA+ICAgY29uZmlndXJlZCBjcnRjLAo+ID4gPiAg ICogICAgaXQgbXVzdCBub3QgYmUgdXNlZCBmb3IgaW1wbGVtZW50aW5nIGNvbm5lY3RvciBwcm9w ZXJ0eQo+ID4gPiAgIHZhbGlkYXRpb24uCj4gPiA+ICAgKiAgICBJZiB0aGlzIGZ1bmN0aW9uIGlz IE5VTEwsCj4gPiA+ICAgJmRybV9hdG9taWNfZW5jb2Rlcl9oZWxwZXJfZnVuY3MubW9kZV9maXh1 cCBpcyBjYWxsZWQKPiA+ID4gICAqICAgIGluc3RlYWQuCj4gPiA+IC0gKiA2LiAmZHJtX2NydGNf aGVscGVyX2Z1bmNzLm1vZGVfZml4dXAgaXMgY2FsbGVkIGxhc3QsIHRvIGZpeCB1cCB0aGUKPiA+ ID4gbW9kZSB3aXRoIGNydGMgY29uc3RyYWludHMuCj4gPiA+ICsgKiA3LiAmZHJtX2NydGNfaGVs cGVyX2Z1bmNzLm1vZGVfZml4dXAgaXMgY2FsbGVkIGxhc3QsIHRvIGZpeCB1cCB0aGUKPiA+ID4g bW9kZSB3aXRoIGNydGMgY29uc3RyYWludHMuCj4gPiA+ICAgICoKPiA+ID4gICAgKiAmZHJtX2Ny dGNfc3RhdGUubW9kZV9jaGFuZ2VkIGlzIHNldCB3aGVuIHRoZSBpbnB1dCBtb2RlIGlzIGNoYW5n ZWQuCj4gPiA+ICAgICogJmRybV9jcnRjX3N0YXRlLmNvbm5lY3RvcnNfY2hhbmdlZCBpcyBzZXQg d2hlbiBhIGNvbm5lY3RvciBpcyBhZGRlZAo+ID4gPiAgICBvcgo+ID4gPiAKPiA+ID4gQEAgLTYx Nyw2ICs2ODIsMTAgQEAgc3RhdGljIGludCBoYW5kbGVfY29uZmxpY3RpbmdfZW5jb2RlcnMoc3Ry dWN0Cj4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiAgIAkJCXJldHVybiByZXQ7 Cj4gPiA+ICAgCX0KPiA+ID4gCj4gPiA+ICsJcmV0ID0gbW9kZV92YWxpZChzdGF0ZSk7Cj4gPiA+ ICsJaWYgKHJldCkKPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ID4gCj4gPiBTaW5jZSB3 ZSd2ZSBlbnN1cmVkIHRoYXQgdGhlIG1vZGVzIHdvbid0IGZhaWwsIGNhbiBtb2RlX2ZpeHVwKCkg YW5kCj4gPiB0aGUgbW9kZV9maXh1cCgpIG9wcyBmb3IgY3J0Yy9icmlkZ2UvZW5jb2RlcnMgYmUg YXNzdXJlZCB0byBub3QgZmFpbAo+ID4gdG9vPyBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgYWxsIGRy aXZlcnMgaGF2ZSBtb3ZlZCB0byB1c2luZyB0aGUgbmV3Cj4gPiBtb2RlX3ZhbGlkKCkgb3BzIGNv cnJlY3RseS4KPiAKPiBUaGUgZW50aXJlIHBvaW50IG9mIHJlLWNoZWNraW5nIGlzIHRoYXQgdXNl cnNwYWNlIGNhbiBjcmVhdGUgaXRzIG93biBtb2Rlcwo+IGFuZCBzdWJtaXQgdGhlbSB0byB0aGUg a2VybmVsLCBieXBhc3NpbmcgdGhlIGN1cnJlbnQKPiBjb25uZWN0b3ItPm1vZGVfdmFsaWQoKSBj aGVjay4gSSB0aGluayBhbG1vc3QgYWxsIGRyaXZlcnMgZ2V0IHRoaXMgd3JvbmcKPiB1bmZvcnR1 bmF0ZWx5IDooCgpIb3cgYWJvdXQgZG9jdW1lbnRpbmcgdGhlIGV4cGVjdGVkIGRyaXZlciBiZWhh dmlvdXIgaW4gZGV0YWlscyA/IEkgd29uJ3QgCnZvbHVudGVlciBhcyBJIGhhdmUgdG8gY29uZmVz cyBpdCdzIG5vdCBjbGVhciB0byBtZSB3aGF0IHdlIGV4cGVjdCBmcm9tIApkcml2ZXJzLgoKLS0g ClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757561AbdELJx5 (ORCPT ); Fri, 12 May 2017 05:53:57 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:36435 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751379AbdELJxz (ORCPT ); Fri, 12 May 2017 05:53:55 -0400 From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , Archit Taneja , Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha Subject: Re: [PATCH v2 7/8] drm: Use mode_valid() in atomic modeset Date: Fri, 12 May 2017 12:53:56 +0300 Message-ID: <2428951.QzsFL2NRhO@avalon> User-Agent: KMail/4.14.10 (Linux/4.9.16-gentoo; KDE/4.14.29; x86_64; ; ) In-Reply-To: <20170510175556.wxdrgjzdxosdnbx2@phenom.ffwll.local> References: <089951fb-2d89-b874-1e48-5ffbf3a4288d@codeaurora.org> <20170510175556.wxdrgjzdxosdnbx2@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v4C9s0g9031079 Hi Daniel, On Wednesday 10 May 2017 19:55:56 Daniel Vetter wrote: > On Wed, May 10, 2017 at 09:38:00PM +0530, Archit Taneja wrote: > > On 5/9/2017 10:30 PM, Jose Abreu wrote: > > > This patches makes use of the new mode_valid() callbacks introduced > > > previously to validate the full video pipeline when modesetting. > > > > > > This calls the connector->mode_valid(), encoder->mode_valid(), > > > bridge->mode_valid() and crtc->mode_valid() so that we can > > > make sure that the mode will be accepted in every components. > > > > > > Signed-off-by: Jose Abreu > > > Cc: Carlos Palminha > > > Cc: Alexey Brodkin > > > Cc: Ville Syrjälä > > > Cc: Daniel Vetter > > > Cc: Dave Airlie > > > Cc: Andrzej Hajda > > > Cc: Archit Taneja > > > --- > > > > > > Changes v1->v2: > > > - Removed call to connector->mode_valid (Ville, Daniel) > > > - Change function name (Ville) > > > - Use for_each_new_connector_in_state (Ville) > > > - Do not validate if connector and mode didn't change (Ville) > > > - Use new helpers to call mode_valid > > > > > > drivers/gpu/drm/drm_atomic_helper.c | 75 +++++++++++++++++++++++++++-- > > > 1 file changed, 72 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c > > > b/drivers/gpu/drm/drm_atomic_helper.c index 8be9719..19d0ea1 100644 > > > --- a/drivers/gpu/drm/drm_atomic_helper.c > > > +++ b/drivers/gpu/drm/drm_atomic_helper.c > > > @@ -452,6 +452,69 @@ static int handle_conflicting_encoders(struct > > > drm_atomic_state *state, > > > return 0; > > > } > > > > > > +static enum drm_mode_status mode_valid_path(struct drm_connector > > > *connector, > > > + struct drm_encoder *encoder, > > > + struct drm_crtc *crtc, > > > + struct drm_display_mode *mode) > > > +{ > > > + enum drm_mode_status ret; > > > + > > > + ret = drm_encoder_mode_valid(encoder, mode); > > > + if (ret != MODE_OK) { > > > + DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] mode_valid() failed\n", > > > + encoder->base.id, encoder->name); > > > + return ret; > > > + } > > > + > > > + ret = drm_bridge_mode_valid(encoder->bridge, mode); > > > + if (ret != MODE_OK) { > > > + DRM_DEBUG_ATOMIC("[BRIDGE] mode_valid() failed\n"); > > > + return ret; > > > + } > > > + > > > + ret = drm_crtc_mode_valid(crtc, mode); > > > + if (ret != MODE_OK) { > > > + DRM_DEBUG_ATOMIC("[CRTC:%d:%s] mode_valid() failed\n", > > > + crtc->base.id, crtc->name); > > > + return ret; > > > + } > > > + > > > + return ret; > > > +} > > > + > > > +static int > > > +mode_valid(struct drm_atomic_state *state) > > > +{ > > > + struct drm_connector_state *conn_state; > > > + struct drm_connector *connector; > > > + int i; > > > + > > > + for_each_new_connector_in_state(state, connector, conn_state, i) { > > > + struct drm_encoder *encoder = conn_state->best_encoder; > > > + struct drm_crtc *crtc = conn_state->crtc; > > > + struct drm_crtc_state *crtc_state; > > > + enum drm_mode_status mode_status; > > > + struct drm_display_mode *mode; > > > + > > > + if (!crtc || !encoder) > > > + continue; > > > + > > > + crtc_state = drm_atomic_get_new_crtc_state(state, crtc); > > > + if (!crtc_state) > > > + continue; > > > + if (!crtc_state->mode_changed && !crtc_state > > > ->connectors_changed) > > > + continue; > > > + > > > + mode = &crtc_state->mode; > > > + > > > + mode_status = mode_valid_path(connector, encoder, crtc, mode); > > > + if (mode_status != MODE_OK) > > > + return -EINVAL; > > > + } > > > + > > > + return 0; > > > +} > > > + > > > /** > > > * drm_atomic_helper_check_modeset - validate state object for modeset > > > changes * @dev: DRM device > > > @@ -466,13 +529,15 @@ static int handle_conflicting_encoders(struct > > > drm_atomic_state *state, > > > * 2. &drm_connector_helper_funcs.atomic_check to validate the > > > connector state. > > > * 3. If it's determined a modeset is needed then all connectors on the > > > affected crtc > > > * crtc are added and &drm_connector_helper_funcs.atomic_check is > > > run on them. > > > - * 4. &drm_bridge_funcs.mode_fixup is called on all encoder bridges. > > > - * 5. &drm_encoder_helper_funcs.atomic_check is called to validate any > > > encoder state. > > > + * 4. &drm_encoder_helper_funcs.mode_valid, > > > &drm_bridge_funcs.mode_valid and > > > + * &drm_crtc_helper_funcs.mode_valid are called on the affected > > > components. > > > + * 5. &drm_bridge_funcs.mode_fixup is called on all encoder bridges. > > > + * 6. &drm_encoder_helper_funcs.atomic_check is called to validate any > > > encoder state. > > > * This function is only called when the encoder will be part of a > > > configured crtc, > > > * it must not be used for implementing connector property > > > validation. > > > * If this function is NULL, > > > &drm_atomic_encoder_helper_funcs.mode_fixup is called > > > * instead. > > > - * 6. &drm_crtc_helper_funcs.mode_fixup is called last, to fix up the > > > mode with crtc constraints. > > > + * 7. &drm_crtc_helper_funcs.mode_fixup is called last, to fix up the > > > mode with crtc constraints. > > > * > > > * &drm_crtc_state.mode_changed is set when the input mode is changed. > > > * &drm_crtc_state.connectors_changed is set when a connector is added > > > or > > > > > > @@ -617,6 +682,10 @@ static int handle_conflicting_encoders(struct > > > drm_atomic_state *state, > > > return ret; > > > } > > > > > > + ret = mode_valid(state); > > > + if (ret) > > > + return ret; > > > + > > > > Since we've ensured that the modes won't fail, can mode_fixup() and > > the mode_fixup() ops for crtc/bridge/encoders be assured to not fail > > too? This is assuming that all drivers have moved to using the new > > mode_valid() ops correctly. > > The entire point of re-checking is that userspace can create its own modes > and submit them to the kernel, bypassing the current > connector->mode_valid() check. I think almost all drivers get this wrong > unfortunately :( How about documenting the expected driver behaviour in details ? I won't volunteer as I have to confess it's not clear to me what we expect from drivers. -- Regards, Laurent Pinchart