From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 1/8] drm: Add crtc/encoder/bridge->mode_valid() callbacks Date: Fri, 12 May 2017 11:24:12 +0300 Message-ID: <1674467.0VviZcclrD@avalon> References: <0187832f758eb489258212b0ec917d5013366fe5.1494347165.git.joabreu@synopsys.com> <20170510080337.iqesj4zqvaewpqk2@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 [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8D03B6E0B5 for ; Fri, 12 May 2017 08:24:13 +0000 (UTC) In-Reply-To: <20170510080337.iqesj4zqvaewpqk2@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 SGkgRGFuaWVsLAoKT24gV2VkbmVzZGF5IDEwIE1heSAyMDE3IDEwOjAzOjM3IERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4gT24gVHVlLCBNYXkgMDksIDIwMTcgYXQgMDY6MDA6MDhQTSArMDEwMCwgSm9z ZSBBYnJldSB3cm90ZToKPiA+IFRoaXMgYWRkcyBhIG5ldyBjYWxsYmFjayB0byBjcnRjLCBlbmNv ZGVyIGFuZCBicmlkZ2UgaGVscGVyIGZ1bmN0aW9ucwo+ID4gY2FsbGVkIG1vZGVfdmFsaWQoKS4g VGhpcyBjYWxsYmFjayBzaGFsbCBiZSBpbXBsZW1lbnRlZCBpZiB0aGUKPiA+IGNvcnJlc3BvbmRp bmcgY29tcG9uZW50IGhhcyBzb21lIHNvcnQgb2YgcmVzdHJpY3Rpb24gaW4gdGhlIG1vZGVzCj4g PiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQuIEEgTlVMTCBjYWxsYmFjayBpbXBsaWNhdGVzIHRoYXQg dGhlIGNvbXBvbmVudAo+ID4gY2FuIGRpc3BsYXkgYWxsIHRoZSBtb2Rlcy4KPiA+IAo+ID4gV2Ug YWxzbyBjaGFuZ2UgdGhlIGRlc2NyaXB0aW9uIG9mIGNvbm5lY3Rvci0+bW9kZV92YWxpZCgpIGNh bGxiYWNrCj4gPiBzbyB0aGF0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5nIGJlaGF2aW91cjogSXQg aXMgbmV2ZXIgY2FsbGVkIGluCj4gPiBhdG9taWMgY2hlY2sgcGhhc2UuCj4gPiAKPiA+IE9ubHkg dGhlIGNhbGxiYWNrcyB3ZXJlIGltcGxlbWVudGVkIHRvIHNpbXBsaWZ5IHJldmlldyBwcm9jZXNz LAo+ID4gZm9sbG93aW5nIHBhdGNoZXMgd2lsbCBtYWtlIHVzZSBvZiB0aGVtLgo+ID4gCj4gPiBT aWduZWQtb2ZmLWJ5OiBKb3NlIEFicmV1IDxqb2FicmV1QHN5bm9wc3lzLmNvbT4KPiA+IENjOiBD YXJsb3MgUGFsbWluaGEgPHBhbG1pbmhhQHN5bm9wc3lzLmNvbT4KPiA+IENjOiBBbGV4ZXkgQnJv ZGtpbiA8YWJyb2RraW5Ac3lub3BzeXMuY29tPgo+ID4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVs LnZldHRlckBmZndsbC5jaD4KPiA+IENjOiBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4K PiA+IENjOiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgo+ID4gQ2M6IEFyY2hp dCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gPiAtLS0KPiA+IAo+ID4gQ2hhbmdl cyB2MS0+djI6Cj4gPiAJLSBDaGFuZ2UgZGVzY3JpcHRpb24gb2YgY29ubmVjdG9yLT5tb2RlX3Zh bGlkKCkgKERhbmllbCkKPiA+IAkKPiA+ICBpbmNsdWRlL2RybS9kcm1fYnJpZGdlLmggICAgICAg ICAgICAgICAgIHwgMjAgKysrKysrKysrKysrKysKPiA+ICBpbmNsdWRlL2RybS9kcm1fbW9kZXNl dF9oZWxwZXJfdnRhYmxlcy5oIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAg MiBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fYnJpZGdlLmggYi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+IGlu ZGV4IGZkZDgyZmMuLjAwYzZjMzYgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYnJp ZGdlLmgKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaAo+ID4gQEAgLTU5LDYgKzU5 LDI2IEBAIHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHsKPiA+ICAJdm9pZCAoKmRldGFjaCkoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPiAgCQo+ID4gIAkvKioKPiA+ICsJICogQG1vZGVf dmFsaWQ6Cj4gPiArCSAqCj4gPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byBjaGVjayBp ZiBhIHNwZWNpZmljIG1vZGUgaXMgdmFsaWQgaW4gdGhpcwo+ID4gKwkgKiBicmlkZ2UuIFRoaXMg c2hvdWxkIGJlIGltcGxlbWVudGVkIGlmIHRoZSBicmlkZ2UgaGFzIHNvbWUgc29ydCBvZgo+ID4g KwkgKiByZXN0cmljdGlvbiBpbiB0aGUgbW9kZXMgaXQgY2FuIGRpc3BsYXkuIEZvciBleGFtcGxl LCBhIGdpdmVuIApicmlkZ2UKPiA+ICsJICogbWF5IGJlIHJlc3BvbnNpYmxlIHRvIHNldCBhIGNs b2NrIHZhbHVlLiBJZiB0aGUgY2xvY2sgY2FuIG5vdAo+ID4gKwkgKiBwcm9kdWNlIGFsbCB0aGUg dmFsdWVzIGZvciB0aGUgYXZhaWxhYmxlIG1vZGVzIHRoZW4gdGhpcyBjYWxsYmFjawo+ID4gKwkg KiBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIG1vZGVzIHRvIG9ubHkgdGhl IG9uZXMgdGhhdAo+ID4gKwkgKiBjYW4gYmUgZGlzcGxheWVkLgo+ID4gKwkgKgo+ID4gKwkgKiBU aGlzIGlzIGNhbGxlZCBhdCBtb2RlIHByb2JlIGFuZCBhdCBhdG9taWMgY2hlY2sgcGhhc2UuCj4g PiArCSAqCj4gPiArCSAqIFJFVFVSTlM6Cj4gPiArCSAqCj4gPiArCSAqIGRybV9tb2RlX3N0YXR1 cyBFbnVtCj4gPiArCSAqLwo+ID4gKwllbnVtIGRybV9tb2RlX3N0YXR1cyAoKm1vZGVfdmFsaWQp KHN0cnVjdCBkcm1fYnJpZGdlICpjcnRjLAo+ID4gKwkJCQkJICAgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgCiptb2RlKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiAgCSAqIEBtb2RlX2ZpeHVw Ogo+ID4gIAkgKgo+ID4gIAkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgYW5k IGFkanVzdCBhIG1vZGUuIFRoZSBwYXJhbWF0ZXIKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oCj4gPiBiL2luY2x1ZGUvZHJtL2RybV9tb2Rl c2V0X2hlbHBlcl92dGFibGVzLmggaW5kZXggYzAxYzMyOC4uZWVjMmM3MCAxMDA2NDQKPiA+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmgKPiA+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmgKPiA+IEBAIC0xMDYsNiArMTA2 LDI2IEBAIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3Mgewo+ID4gIAl2b2lkICgqY29tbWl0 KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4gIAkKPiA+ICAJLyoqCj4gPiArCSAqIEBtb2Rl X3ZhbGlkOgo+ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gY2hlY2sg aWYgYSBzcGVjaWZpYyBtb2RlIGlzIHZhbGlkIGluIHRoaXMKPiA+ICsJICogY3J0Yy4gVGhpcyBz aG91bGQgYmUgaW1wbGVtZW50ZWQgaWYgdGhlIGNydGMgaGFzIHNvbWUgc29ydCBvZgo+ID4gKwkg KiByZXN0cmljdGlvbiBpbiB0aGUgbW9kZXMgaXQgY2FuIGRpc3BsYXkuIEZvciBleGFtcGxlLCBh IGdpdmVuIGNydGMKPiA+ICsJICogbWF5IGJlIHJlc3BvbnNpYmxlIHRvIHNldCBhIGNsb2NrIHZh bHVlLiBJZiB0aGUgY2xvY2sgY2FuIG5vdAo+ID4gKwkgKiBwcm9kdWNlIGFsbCB0aGUgdmFsdWVz IGZvciB0aGUgYXZhaWxhYmxlIG1vZGVzIHRoZW4gdGhpcyBjYWxsYmFjawo+ID4gKwkgKiBjYW4g YmUgdXNlZCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIG1vZGVzIHRvIG9ubHkgdGhlIG9uZXMg dGhhdAo+ID4gKwkgKiBjYW4gYmUgZGlzcGxheWVkLgo+ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGlz IGNhbGxlZCBhdCBtb2RlIHByb2JlIGFuZCBhdCBhdG9taWMgY2hlY2sgcGhhc2UuCj4gPiArCSAq Cj4gPiArCSAqIFJFVFVSTlM6Cj4gPiArCSAqCj4gPiArCSAqIGRybV9tb2RlX3N0YXR1cyBFbnVt Cj4gPiArCSAqLwo+ID4gKwllbnVtIGRybV9tb2RlX3N0YXR1cyAoKm1vZGVfdmFsaWQpKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlIAoqbW9kZSk7Cj4gPiArCj4gPiArCS8qKgo+ID4gIAkgKiBAbW9kZV9maXh1cDoKPiA+ICAJ ICoKPiA+ICAJICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIHZhbGlkYXRlIGEgbW9kZS4gVGhl IHBhcmFtZXRlciBtb2RlIGlzIHRoZQo+ID4gQEAgLTQ1Nyw2ICs0NzcsMjYgQEAgc3RydWN0IGRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB7Cj4gPiAgCXZvaWQgKCpkcG1zKShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsIGludCBtb2RlKTsKPiA+ICAJCj4gPiAgCS8qKgo+ID4gKwkgKiBAbW9k ZV92YWxpZDoKPiA+ICsJICoKPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIGNoZWNr IGlmIGEgc3BlY2lmaWMgbW9kZSBpcyB2YWxpZCBpbiB0aGlzCj4gPiArCSAqIGVuY29kZXIuIFRo aXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGlmIHRoZSBlbmNvZGVyIGhhcyBzb21lIHNvcnQKPiA+ ICsJICogb2YgcmVzdHJpY3Rpb24gaW4gdGhlIG1vZGVzIGl0IGNhbiBkaXNwbGF5LiBGb3IgZXhh bXBsZSwgYSBnaXZlbgo+ID4gKwkgKiBlbmNvZGVyIG1heSBiZSByZXNwb25zaWJsZSB0byBzZXQg YSBjbG9jayB2YWx1ZS4gSWYgdGhlIGNsb2NrIGNhbgo+ID4gKwkgKiBub3QgcHJvZHVjZSBhbGwg dGhlIHZhbHVlcyBmb3IgdGhlIGF2YWlsYWJsZSBtb2RlcyB0aGVuIHRoaXMgCmNhbGxiYWNrCj4g PiArCSAqIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgbW9kZXMgdG8gb25s eSB0aGUgb25lcyB0aGF0Cj4gPiArCSAqIGNhbiBiZSBkaXNwbGF5ZWQuCj4gPiArCSAqCj4gPiAr CSAqIFRoaXMgaXMgY2FsbGVkIGF0IG1vZGUgcHJvYmUgYW5kIGF0IGF0b21pYyBjaGVjayBwaGFz ZS4KPiA+ICsJICoKPiA+ICsJICogUkVUVVJOUzoKPiA+ICsJICoKPiA+ICsJICogZHJtX21vZGVf c3RhdHVzIEVudW0KPiA+ICsJICovCj4gPiArCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92 YWxpZCkoc3RydWN0IGRybV9lbmNvZGVyICpjcnRjLAo+ID4gKwkJCQkJICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgCiptb2RlKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiAgCSAqIEBtb2Rl X2ZpeHVwOgo+ID4gIAkgKgo+ID4gIAkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gdmFsaWRh dGUgYW5kIGFkanVzdCBhIG1vZGUuIFRoZSBwYXJhbWV0ZXIKPiA+IEBAIC03OTUsNiArODM1LDEx IEBAIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB7Cj4gPiAgCSAqICh3aGljaCBp cyB1c3VhbGx5IGRlcml2ZWQgZnJvbSB0aGUgRURJRCBkYXRhIGJsb2NrIGZyb20gdGhlIHNpbmsp Lgo+ID4gIAkgKiBTZWUgZS5nLiBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9k ZXMoKS4KPiA+ICAJICoKPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBuZXZlciBjYWxsZWQgaW4g YXRvbWljIGNoZWNrIHBoYXNlIHNvIHRoYXQgCnVzZXJzcGFjZQo+ID4gKwkgKiBjYW4gb3ZlcnJp ZGUga2VybmVsIHNpbmsgY2hlY2tzIGluIGNhc2Ugb2YgYnJva2VuIEVESUQgd2l0aCB3cm9uZwo+ ID4gKwkgKiBsaW1pdHMgZnJvbSB0aGUgc2luay4gWW91IGNhbiB1c2UgdGhlIHJlbWFpbmluZyBt b2RlX3ZhbGlkKCkKPiA+ICsJICogY2FsbGJhY2tzIHRvIHZhbGlkYXRlIHRoZSBtb2RlIGFnYWlu c3QgeW91ciB2aWRlbyBwYXRoLgo+ID4gKwkgKgo+ID4gIAkgKiBOT1RFOgo+ID4gIAkgKgo+ID4g IAkgKiBUaGlzIG9ubHkgZmlsdGVycyB0aGUgbW9kZSBsaXN0IHN1cHBsaWVkIHRvIHVzZXJzcGFj ZSBpbiB0aGUKPiAKPiBLZXJuZWxkb2MgcmV2aWV3IHNlZW1zIHRvIHN0aWxsIGJlIG1pc3Npbmcu IE9uZSBjYXNlIHRoYXQgbmVlZHMgdG8gYmUKPiB1cGRhdGVkIGlzIHRoaXMgbm90ZSBoZXJlLiBC dXQgdGhlcmUncyBhIHBpbGUgb2Ygb3RoZXIgcGxhY2VzIHdoZXJlIHdlCj4gcmVmZXJlbmNlIG9u ZSBvZiB0aGUgbW9kZV92YWxpZCBvciBtb2RlX2ZpeHVwIGZ1bmN0aW9ucywgYW5kIHRoZXkgc2hv dWxkCj4gYWxsIGJlIHVwZGF0ZWQuCj4gCj4gQWxzbywgaXQnZCBiZSBnb29kIHRvIGV4cGxhaW4g d2hhdCB0byBwdXQgaW50byBtb2RlX3ZhbGlkIGFuZCB3aGF0IHRvIHB1dAo+IGludG8gbW9kZV9m aXh1cCwgZm9yIG9iamVjdHMgd2hpY2ggaGF2ZSBib3RoLiBJIGNhbiBoZWxwIHdpdGggdGhpcywg YnV0IEkKPiB0aGluayBpdCdkIGJlIGdvb2QgaWYgeW91IG1ha2UgYSBmaXJzdCByb3VuZCwgc2lu Y2UgdGhhdCBtaWdodCBjYXRjaCBzb21lCj4gaW50ZXJhY3Rpb25zIHdlJ3ZlIG1pc3NlZC4KCkkg d2FzIGdvaW5nIHRvIG1lbnRpb24gdGhhdC4gSW50ZXJhY3Rpb25zIGJldHdlZW4gbW9kZV92YWxp ZCBhbmQgbW9kZV9maXh1cCAKYXJlIG5vdCBkZWZpbmVkIGNsZWFybHkuIEFkZGl0aW9uYWxseSwg ZXZlbiB0aG91Z2ggaXQgbWlnaHQgYmUgYSBiaXQgb3V0IG9mIApzY29wZSBmb3IgdGhpcyBwYXRj aCBzZXJpZXMsIEkgdGhpbmsgd2Ugc2hvdWxkIGFsc28gZGVmaW5lIHdoYXQgbW9kZV9maXh1cCBp cyAKYWxsb3dlZCB0byBmaXggYW5kIHdoYXQgaXQgc2hvdWxkIHJlamVjdCBzdHJhaWdodCBhd2F5 LgoKVGhpbmtpbmcgYWJvdXQgaXQsIGRvIHdlIHJlYWxseSBuZWVkIHR3byBzZXBhcmF0ZSBvcGVy YXRpb25zID8gQXMgSSB1bmRlcnN0YW5kIAppdCwgbW9kZV9maXh1cCBpcyBtb3N0bHkgKG9ubHkg PyAtIHRoaXMgaXMgd2hlcmUgd2UgbmVlZCBkb2N1bWVudGF0aW9uKSB1c2VkIAp0byBmaXh1cCB0 aGUgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5IGFzIGNsb2NrIGdlbmVyYXRvcnMgdXN1YWxseSBoYXZl IApsaW1pdGF0aW9ucyBpbiB0aGVpciBkaXZpZGVycy4gV2UgYXNzdW1lIHRoYXQgdGhlIHN5bmMg d29uJ3QgY2FyZSB0b28gbXVjaCwgCmFuZCBoYXBwaWx5IGZlZWQgaXQgd2l0aCBhIG1vZGUgdGhh dCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB3aGF0IHVzZXJzcGFjZSAKcmVxdWVzdGVkLiBH aXZlbiB0aGF0IG1vZGVfdmFsaWQgc2hvdWxkIGFjY2VwdHMgbW9kZSBmb3Igd2hpY2ggdGhlIGV4 YWN0IHBpeGVsIApjbG9jayBmcmVxdWVuY3kgY2FuJ3QgYmVlIGFjaGlldmVkLCBhbmQgdGhhdCB0 aGUgYXRvbWljIGNvbW1pdCB3aWxsIGZpeHVwIHRoYXQgCmZyZXF1ZW5jeSBhbnl3YXksIGNhbid0 IHdlIGFwcGx5IHRoZSBzYW1lIHByb2Nlc3NpbmcgdG8gbW9kZXMgZW51bWVyYXRlZCBieSAKdGhl IGNvbm5lY3RvciwgYW5kIG1lcmdlIHRoZSBtb2RlX3ZhbGlkIGFuZCBtb2RlX2ZpeHVwIG9wZXJh dGlvbnMgPwoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932297AbdELIYY (ORCPT ); Fri, 12 May 2017 04:24:24 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:36281 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757209AbdELIYS (ORCPT ); Fri, 12 May 2017 04:24:18 -0400 From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha Subject: Re: [PATCH v2 1/8] drm: Add crtc/encoder/bridge->mode_valid() callbacks Date: Fri, 12 May 2017 11:24:12 +0300 Message-ID: <1674467.0VviZcclrD@avalon> User-Agent: KMail/4.14.10 (Linux/4.9.16-gentoo; KDE/4.14.29; x86_64; ; ) In-Reply-To: <20170510080337.iqesj4zqvaewpqk2@phenom.ffwll.local> References: <0187832f758eb489258212b0ec917d5013366fe5.1494347165.git.joabreu@synopsys.com> <20170510080337.iqesj4zqvaewpqk2@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 v4C8Og0Z015435 Hi Daniel, On Wednesday 10 May 2017 10:03:37 Daniel Vetter wrote: > On Tue, May 09, 2017 at 06:00:08PM +0100, Jose Abreu wrote: > > This adds a new callback to crtc, encoder and bridge helper functions > > called mode_valid(). This callback shall be implemented if the > > corresponding component has some sort of restriction in the modes > > that can be displayed. A NULL callback implicates that the component > > can display all the modes. > > > > We also change the description of connector->mode_valid() callback > > so that it matches the existing behaviour: It is never called in > > atomic check phase. > > > > Only the callbacks were implemented to simplify review process, > > following patches will make use of them. > > > > 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: > > - Change description of connector->mode_valid() (Daniel) > > > > include/drm/drm_bridge.h | 20 ++++++++++++++ > > include/drm/drm_modeset_helper_vtables.h | 45 +++++++++++++++++++++++++++ > > 2 files changed, 65 insertions(+) > > > > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > > index fdd82fc..00c6c36 100644 > > --- a/include/drm/drm_bridge.h > > +++ b/include/drm/drm_bridge.h > > @@ -59,6 +59,26 @@ struct drm_bridge_funcs { > > void (*detach)(struct drm_bridge *bridge); > > > > /** > > + * @mode_valid: > > + * > > + * This callback is used to check if a specific mode is valid in this > > + * bridge. This should be implemented if the bridge has some sort of > > + * restriction in the modes it can display. For example, a given bridge > > + * may be responsible to set a clock value. If the clock can not > > + * produce all the values for the available modes then this callback > > + * can be used to restrict the number of modes to only the ones that > > + * can be displayed. > > + * > > + * This is called at mode probe and at atomic check phase. > > + * > > + * RETURNS: > > + * > > + * drm_mode_status Enum > > + */ > > + enum drm_mode_status (*mode_valid)(struct drm_bridge *crtc, > > + const struct drm_display_mode *mode); > > + > > + /** > > * @mode_fixup: > > * > > * This callback is used to validate and adjust a mode. The paramater > > diff --git a/include/drm/drm_modeset_helper_vtables.h > > b/include/drm/drm_modeset_helper_vtables.h index c01c328..eec2c70 100644 > > --- a/include/drm/drm_modeset_helper_vtables.h > > +++ b/include/drm/drm_modeset_helper_vtables.h > > @@ -106,6 +106,26 @@ struct drm_crtc_helper_funcs { > > void (*commit)(struct drm_crtc *crtc); > > > > /** > > + * @mode_valid: > > + * > > + * This callback is used to check if a specific mode is valid in this > > + * crtc. This should be implemented if the crtc has some sort of > > + * restriction in the modes it can display. For example, a given crtc > > + * may be responsible to set a clock value. If the clock can not > > + * produce all the values for the available modes then this callback > > + * can be used to restrict the number of modes to only the ones that > > + * can be displayed. > > + * > > + * This is called at mode probe and at atomic check phase. > > + * > > + * RETURNS: > > + * > > + * drm_mode_status Enum > > + */ > > + enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, > > + const struct drm_display_mode *mode); > > + > > + /** > > * @mode_fixup: > > * > > * This callback is used to validate a mode. The parameter mode is the > > @@ -457,6 +477,26 @@ struct drm_encoder_helper_funcs { > > void (*dpms)(struct drm_encoder *encoder, int mode); > > > > /** > > + * @mode_valid: > > + * > > + * This callback is used to check if a specific mode is valid in this > > + * encoder. This should be implemented if the encoder has some sort > > + * of restriction in the modes it can display. For example, a given > > + * encoder may be responsible to set a clock value. If the clock can > > + * not produce all the values for the available modes then this callback > > + * can be used to restrict the number of modes to only the ones that > > + * can be displayed. > > + * > > + * This is called at mode probe and at atomic check phase. > > + * > > + * RETURNS: > > + * > > + * drm_mode_status Enum > > + */ > > + enum drm_mode_status (*mode_valid)(struct drm_encoder *crtc, > > + const struct drm_display_mode *mode); > > + > > + /** > > * @mode_fixup: > > * > > * This callback is used to validate and adjust a mode. The parameter > > @@ -795,6 +835,11 @@ struct drm_connector_helper_funcs { > > * (which is usually derived from the EDID data block from the sink). > > * See e.g. drm_helper_probe_single_connector_modes(). > > * > > + * This callback is never called in atomic check phase so that userspace > > + * can override kernel sink checks in case of broken EDID with wrong > > + * limits from the sink. You can use the remaining mode_valid() > > + * callbacks to validate the mode against your video path. > > + * > > * NOTE: > > * > > * This only filters the mode list supplied to userspace in the > > Kerneldoc review seems to still be missing. One case that needs to be > updated is this note here. But there's a pile of other places where we > reference one of the mode_valid or mode_fixup functions, and they should > all be updated. > > Also, it'd be good to explain what to put into mode_valid and what to put > into mode_fixup, for objects which have both. I can help with this, but I > think it'd be good if you make a first round, since that might catch some > interactions we've missed. I was going to mention that. Interactions between mode_valid and mode_fixup are not defined clearly. Additionally, even though it might be a bit out of scope for this patch series, I think we should also define what mode_fixup is allowed to fix and what it should reject straight away. Thinking about it, do we really need two separate operations ? As I understand it, mode_fixup is mostly (only ? - this is where we need documentation) used to fixup the pixel clock frequency as clock generators usually have limitations in their dividers. We assume that the sync won't care too much, and happily feed it with a mode that is slightly different from what userspace requested. Given that mode_valid should accepts mode for which the exact pixel clock frequency can't bee achieved, and that the atomic commit will fixup that frequency anyway, can't we apply the same processing to modes enumerated by the connector, and merge the mode_valid and mode_fixup operations ? -- Regards, Laurent Pinchart