From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v2 7/8] drm: Use mode_valid() in atomic modeset Date: Wed, 10 May 2017 21:38:00 +0530 Message-ID: <089951fb-2d89-b874-1e48-5ffbf3a4288d@codeaurora.org> References: <61cee0404343a363c459a377d2ff53f5c13b1230.1494347165.git.joabreu@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id E08B589F6B for ; Wed, 10 May 2017 16:08:13 +0000 (UTC) In-Reply-To: <61cee0404343a363c459a377d2ff53f5c13b1230.1494347165.git.joabreu@synopsys.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu Cc: Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org CgpPbiA1LzkvMjAxNyAxMDozMCBQTSwgSm9zZSBBYnJldSB3cm90ZToKPiBUaGlzIHBhdGNoZXMg bWFrZXMgdXNlIG9mIHRoZSBuZXcgbW9kZV92YWxpZCgpIGNhbGxiYWNrcyBpbnRyb2R1Y2VkCj4g cHJldmlvdXNseSB0byB2YWxpZGF0ZSB0aGUgZnVsbCB2aWRlbyBwaXBlbGluZSB3aGVuIG1vZGVz ZXR0aW5nLgo+IAo+IFRoaXMgY2FsbHMgdGhlIGNvbm5lY3Rvci0+bW9kZV92YWxpZCgpLCBlbmNv ZGVyLT5tb2RlX3ZhbGlkKCksCj4gYnJpZGdlLT5tb2RlX3ZhbGlkKCkgYW5kIGNydGMtPm1vZGVf dmFsaWQoKSBzbyB0aGF0IHdlIGNhbgo+IG1ha2Ugc3VyZSB0aGF0IHRoZSBtb2RlIHdpbGwgYmUg YWNjZXB0ZWQgaW4gZXZlcnkgY29tcG9uZW50cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKb3NlIEFi cmV1IDxqb2FicmV1QHN5bm9wc3lzLmNvbT4KPiBDYzogQ2FybG9zIFBhbG1pbmhhIDxwYWxtaW5o YUBzeW5vcHN5cy5jb20+Cj4gQ2M6IEFsZXhleSBCcm9ka2luIDxhYnJvZGtpbkBzeW5vcHN5cy5j b20+Cj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gQ2M6IERhdmUg QWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgo+IENjOiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNh bXN1bmcuY29tPgo+IENjOiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+ IC0tLQo+IAo+IENoYW5nZXMgdjEtPnYyOgo+IAktIFJlbW92ZWQgY2FsbCB0byBjb25uZWN0b3It Pm1vZGVfdmFsaWQgKFZpbGxlLCBEYW5pZWwpCj4gCS0gQ2hhbmdlIGZ1bmN0aW9uIG5hbWUgKFZp bGxlKQo+IAktIFVzZSBmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlIChWaWxsZSkKPiAJ LSBEbyBub3QgdmFsaWRhdGUgaWYgY29ubmVjdG9yIGFuZCBtb2RlIGRpZG4ndCBjaGFuZ2UgKFZp bGxlKQo+IAktIFVzZSBuZXcgaGVscGVycyB0byBjYWxsIG1vZGVfdmFsaWQKPiAKPiAgIGRyaXZl cnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIHwgNzUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBpbmRleCA4 YmU5NzE5Li4xOWQwZWExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBA QCAtNDUyLDYgKzQ1Miw2OSBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb25mbGljdGluZ19lbmNvZGVy cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4g ICAKPiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfdmFsaWRfcGF0aChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCj4gKwkJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCQkgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCWVudW0gZHJtX21vZGVfc3Rh dHVzIHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZW5jb2Rlcl9tb2RlX3ZhbGlkKGVuY29kZXIsIG1v ZGUpOwo+ICsJaWYgKHJldCAhPSBNT0RFX09LKSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0VO Q09ERVI6JWQ6JXNdIG1vZGVfdmFsaWQoKSBmYWlsZWRcbiIsCj4gKwkJCQllbmNvZGVyLT5iYXNl LmlkLCBlbmNvZGVyLT5uYW1lKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9 IGRybV9icmlkZ2VfbW9kZV92YWxpZChlbmNvZGVyLT5icmlkZ2UsIG1vZGUpOwo+ICsJaWYgKHJl dCAhPSBNT0RFX09LKSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0JSSURHRV0gbW9kZV92YWxp ZCgpIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1f Y3J0Y19tb2RlX3ZhbGlkKGNydGMsIG1vZGUpOwo+ICsJaWYgKHJldCAhPSBNT0RFX09LKSB7Cj4g KwkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6JXNdIG1vZGVfdmFsaWQoKSBmYWlsZWRcbiIs Cj4gKwkJCQljcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArbW9kZV92YWxp ZChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiArCWludCBpOwo+ICsKPiArCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUo c3RhdGUsIGNvbm5lY3RvciwgY29ubl9zdGF0ZSwgaSkgewo+ICsJCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlciA9IGNvbm5fc3RhdGUtPmJlc3RfZW5jb2RlcjsKPiArCQlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSBjb25uX3N0YXRlLT5jcnRjOwo+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiArCQllbnVtIGRybV9tb2RlX3N0YXR1cyBtb2RlX3N0YXR1czsKPiArCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCj4gKwkJaWYgKCFjcnRjIHx8ICFlbmNv ZGVyKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X25ld19jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiArCQlpZiAoIWNydGNfc3RhdGUpCj4gKwkJ CWNvbnRpbnVlOwo+ICsJCWlmICghY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkICYmICFjcnRjX3N0 YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQltb2RlID0g JmNydGNfc3RhdGUtPm1vZGU7Cj4gKwo+ICsJCW1vZGVfc3RhdHVzID0gbW9kZV92YWxpZF9wYXRo KGNvbm5lY3RvciwgZW5jb2RlciwgY3J0YywgbW9kZSk7Cj4gKwkJaWYgKG1vZGVfc3RhdHVzICE9 IE1PREVfT0spCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19tb2Rlc2V0IC0g dmFsaWRhdGUgc3RhdGUgb2JqZWN0IGZvciBtb2Rlc2V0IGNoYW5nZXMKPiAgICAqIEBkZXY6IERS TSBkZXZpY2UKPiBAQCAtNDY2LDEzICs1MjksMTUgQEAgc3RhdGljIGludCBoYW5kbGVfY29uZmxp Y3RpbmdfZW5jb2RlcnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAgICogMi4g JmRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjayB0byB2YWxpZGF0ZSB0aGUg Y29ubmVjdG9yIHN0YXRlLgo+ICAgICogMy4gSWYgaXQncyBkZXRlcm1pbmVkIGEgbW9kZXNldCBp cyBuZWVkZWQgdGhlbiBhbGwgY29ubmVjdG9ycyBvbiB0aGUgYWZmZWN0ZWQgY3J0Ywo+ICAgICog ICAgY3J0YyBhcmUgYWRkZWQgYW5kICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNf Y2hlY2sgaXMgcnVuIG9uIHRoZW0uCj4gLSAqIDQuICZkcm1fYnJpZGdlX2Z1bmNzLm1vZGVfZml4 dXAgaXMgY2FsbGVkIG9uIGFsbCBlbmNvZGVyIGJyaWRnZXMuCj4gLSAqIDUuICZkcm1fZW5jb2Rl cl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrIGlzIGNhbGxlZCB0byB2YWxpZGF0ZSBhbnkgZW5j b2RlciBzdGF0ZS4KPiArICogNC4gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5tb2RlX3ZhbGlk LCAmZHJtX2JyaWRnZV9mdW5jcy5tb2RlX3ZhbGlkIGFuZAo+ICsgKiAgICAmZHJtX2NydGNfaGVs cGVyX2Z1bmNzLm1vZGVfdmFsaWQgYXJlIGNhbGxlZCBvbiB0aGUgYWZmZWN0ZWQgY29tcG9uZW50 cy4KPiArICogNS4gJmRybV9icmlkZ2VfZnVuY3MubW9kZV9maXh1cCBpcyBjYWxsZWQgb24gYWxs IGVuY29kZXIgYnJpZGdlcy4KPiArICogNi4gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9t aWNfY2hlY2sgaXMgY2FsbGVkIHRvIHZhbGlkYXRlIGFueSBlbmNvZGVyIHN0YXRlLgo+ICAgICog ICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBlbmNvZGVyIHdpbGwgYmUg cGFydCBvZiBhIGNvbmZpZ3VyZWQgY3J0YywKPiAgICAqICAgIGl0IG11c3Qgbm90IGJlIHVzZWQg Zm9yIGltcGxlbWVudGluZyBjb25uZWN0b3IgcHJvcGVydHkgdmFsaWRhdGlvbi4KPiAgICAqICAg IElmIHRoaXMgZnVuY3Rpb24gaXMgTlVMTCwgJmRybV9hdG9taWNfZW5jb2Rlcl9oZWxwZXJfZnVu Y3MubW9kZV9maXh1cCBpcyBjYWxsZWQKPiAgICAqICAgIGluc3RlYWQuCj4gLSAqIDYuICZkcm1f Y3J0Y19oZWxwZXJfZnVuY3MubW9kZV9maXh1cCBpcyBjYWxsZWQgbGFzdCwgdG8gZml4IHVwIHRo ZSBtb2RlIHdpdGggY3J0YyBjb25zdHJhaW50cy4KPiArICogNy4gJmRybV9jcnRjX2hlbHBlcl9m dW5jcy5tb2RlX2ZpeHVwIGlzIGNhbGxlZCBsYXN0LCB0byBmaXggdXAgdGhlIG1vZGUgd2l0aCBj cnRjIGNvbnN0cmFpbnRzLgo+ICAgICoKPiAgICAqICZkcm1fY3J0Y19zdGF0ZS5tb2RlX2NoYW5n ZWQgaXMgc2V0IHdoZW4gdGhlIGlucHV0IG1vZGUgaXMgY2hhbmdlZC4KPiAgICAqICZkcm1fY3J0 Y19zdGF0ZS5jb25uZWN0b3JzX2NoYW5nZWQgaXMgc2V0IHdoZW4gYSBjb25uZWN0b3IgaXMgYWRk ZWQgb3IKPiBAQCAtNjE3LDYgKzY4MiwxMCBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb25mbGljdGlu Z19lbmNvZGVycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gICAJCQlyZXR1cm4g cmV0Owo+ICAgCX0KPiAgIAo+ICsJcmV0ID0gbW9kZV92YWxpZChzdGF0ZSk7Cj4gKwlpZiAocmV0 KQo+ICsJCXJldHVybiByZXQ7Cj4gKwoKU2luY2Ugd2UndmUgZW5zdXJlZCB0aGF0IHRoZSBtb2Rl cyB3b24ndCBmYWlsLCBjYW4gbW9kZV9maXh1cCgpIGFuZAp0aGUgbW9kZV9maXh1cCgpIG9wcyBm b3IgY3J0Yy9icmlkZ2UvZW5jb2RlcnMgYmUgYXNzdXJlZCB0byBub3QgZmFpbAp0b28/IFRoaXMg aXMgYXNzdW1pbmcgdGhhdCBhbGwgZHJpdmVycyBoYXZlIG1vdmVkIHRvIHVzaW5nIHRoZSBuZXcK bW9kZV92YWxpZCgpIG9wcyBjb3JyZWN0bHkuCgpUaGFua3MsCkFyY2hpdAoKPiAgIAlyZXR1cm4g bW9kZV9maXh1cChzdGF0ZSk7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVs cGVyX2NoZWNrX21vZGVzZXQpOwo+IAoKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRl ciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmhvc3RlZCBieSBU aGUgTGludXggRm91bmRhdGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752929AbdEJQIP (ORCPT ); Wed, 10 May 2017 12:08:15 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:57520 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751123AbdEJQIO (ORCPT ); Wed, 10 May 2017 12:08:14 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 39E93607BD Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=architt@codeaurora.org Subject: Re: [PATCH v2 7/8] drm: Use mode_valid() in atomic modeset To: Jose Abreu Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Carlos Palminha , Alexey Brodkin , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , Daniel Vetter , Dave Airlie , Andrzej Hajda References: <61cee0404343a363c459a377d2ff53f5c13b1230.1494347165.git.joabreu@synopsys.com> From: Archit Taneja Message-ID: <089951fb-2d89-b874-1e48-5ffbf3a4288d@codeaurora.org> Date: Wed, 10 May 2017 21:38:00 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.0.1 MIME-Version: 1.0 In-Reply-To: <61cee0404343a363c459a377d2ff53f5c13b1230.1494347165.git.joabreu@synopsys.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Thanks, Archit > return mode_fixup(state); > } > EXPORT_SYMBOL(drm_atomic_helper_check_modeset); > -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation