From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 3/3] drm: Add helper for simple display pipeline Date: Tue, 17 May 2016 15:04:52 +0200 Message-ID: <20160517130452.GL27098@phenom.ffwll.local> References: <1463077523-23959-1-git-send-email-noralf@tronnes.org> <1463077523-23959-4-git-send-email-noralf@tronnes.org> <20160512183614.GU4329@intel.com> <20160517070501.GJ27098@phenom.ffwll.local> <20160517074651.GM4329@intel.com> <20160517075945.GQ27098@phenom.ffwll.local> <20160517121208.GO4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 41E406E6D4 for ; Tue, 17 May 2016 13:04:54 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id r12so4666362wme.0 for ; Tue, 17 May 2016 06:04:54 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: dri-devel@lists.freedesktop.org, jsarha@ti.com, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMTcsIDIwMTYgYXQgMDI6MjI6MjZQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IAo+IERlbiAxNy4wNS4yMDE2IDE0OjEyLCBza3JldiBWaWxsZSBTeXJqw6Rs w6Q6Cj4gPk9uIFR1ZSwgTWF5IDE3LCAyMDE2IGF0IDAyOjAwOjQ1UE0gKzAyMDAsIE5vcmFsZiBU csO4bm5lcyB3cm90ZToKPiA+PkRlbiAxNy4wNS4yMDE2IDA5OjU5LCBza3JldiBEYW5pZWwgVmV0 dGVyOgo+ID4+Pk9uIFR1ZSwgTWF5IDE3LCAyMDE2IGF0IDEwOjQ2OjUxQU0gKzAzMDAsIFZpbGxl IFN5cmrDpGzDpCB3cm90ZToKPiA+Pj4+T24gVHVlLCBNYXkgMTcsIDIwMTYgYXQgMDk6MDU6MDFB TSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+Pk9uIFRodSwgTWF5IDEyLCAyMDE2 IGF0IDA5OjM2OjE0UE0gKzAzMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+Pj4+Pj5PbiBU aHUsIE1heSAxMiwgMjAxNiBhdCAwODoyNToyM1BNICswMjAwLCBOb3JhbGYgVHLDuG5uZXMgd3Jv dGU6Cj4gPj4+Pj4+PlByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIGRyaXZlcnMgdGhhdCBo YXZlIGEgc2ltcGxlIGRpc3BsYXkKPiA+Pj4+Pj4+cGlwZWxpbmUuIFBsYW5lLCBjcnRjIGFuZCBl bmNvZGVyIGFyZSBjb2xsYXBzZWQgaW50byBvbmUgZW50aXR5Lgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+ Q2M6IGpzYXJoYUB0aS5jb20KPiA+Pj4+Pj4+U2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVz IDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gPj4+Pj4+Pi0tLQo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+Q2hh bmdlcyBzaW5jZSB2MzoKPiA+Pj4+Pj4+LSAoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBl ICopLT5mdW5jcyBzaG91bGQgYmUgY29uc3QKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PkNoYW5nZXMgc2lu Y2UgdjI6Cj4gPj4+Pj4+Pi0gRHJvcCBLY29uZmlnIGtub2IgRFJNX0tNU19IRUxQRVIKPiA+Pj4+ Pj4+LSBFeHBhbmQgZG9jdW1lbnRhdGlvbgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+Q2hhbmdlcyBzaW5j ZSB2MToKPiA+Pj4+Pj4+LSBBZGQgRE9DIGhlYWRlciBhbmQgYWRkIHRvIGdwdS50bXBsCj4gPj4+ Pj4+Pi0gRml4IGRvY3M6IEBmdW5jcyBpcyBvcHRpb25hbCwgIm5lZ2F0aXZlIGVycm9yIGNvZGUi LAo+ID4+Pj4+Pj4gICAgIlRoaXMgaG9vayBpcyBvcHRpb25hbC4iCj4gPj4+Pj4+Pi0gQWRkIGNo ZWNrcyB0byBkcm1fc2ltcGxlX2ttc19wbGFuZV9hdG9taWNfY2hlY2soKQo+ID4+Pj4+Pj4KPiA+ Pj4+Pj4+ICAgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsICAgICAgICAgIHwgICA2ICsK PiA+Pj4+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAy ICstCj4gPj4+Pj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuYyB8 IDIwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4+Pj4+Pj4gICBpbmNsdWRl L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaCAgICAgfCAgOTQgKysrKysrKysrKysrKysrCj4g Pj4+Pj4+PiAgIDQgZmlsZXMgY2hhbmdlZCwgMzA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKPiA+Pj4+Pj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fc2lt cGxlX2ttc19oZWxwZXIuYwo+ID4+Pj4+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9k cm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmgKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PmRpZmYgLS1naXQg YS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sv Z3B1LnRtcGwKPiA+Pj4+Pj4+aW5kZXggNGEwYzU5OS4uY2YzZjVhOCAxMDA2NDQKPiA+Pj4+Pj4+ LS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCj4gPj4+Pj4+PisrKyBiL0RvY3Vt ZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAo+ID4+Pj4+Pj5AQCAtMTY5Myw2ICsxNjkzLDEyIEBA IHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+Pj4+Pj4+ICAg IUVkcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMKPiA+Pj4+Pj4+ICAgIVBkcml2ZXJzL2dwdS9k cm0vZHJtX3BhbmVsLmMgZHJtIHBhbmVsCj4gPj4+Pj4+PiAgICAgICA8L3NlY3QyPgo+ID4+Pj4+ Pj4rICAgIDxzZWN0Mj4KPiA+Pj4+Pj4+KyAgICAgIDx0aXRsZT5TaW1wbGUgS01TIEhlbHBlciBS ZWZlcmVuY2U8L3RpdGxlPgo+ID4+Pj4+Pj4rIUlpbmNsdWRlL2RybS9kcm1fc2ltcGxlX2ttc19o ZWxwZXIuaAo+ID4+Pj4+Pj4rIUVkcml2ZXJzL2dwdS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVy LmMKPiA+Pj4+Pj4+KyFQZHJpdmVycy9ncHUvZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5jIG92 ZXJ2aWV3Cj4gPj4+Pj4+PisgICAgPC9zZWN0Mj4KPiA+Pj4+Pj4+ICAgICA8L3NlY3QxPgo+ID4+ Pj4+Pj4KPiA+Pj4+Pj4+ICAgICA8IS0tIEludGVybmFsczoga21zIHByb3BlcnRpZXMgLS0+Cj4g Pj4+Pj4+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKPiA+Pj4+Pj4+aW5kZXggMmJkM2U1YS4uMzFiODVkZjUgMTAwNjQ0Cj4g Pj4+Pj4+Pi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4+Pj4+Pj4rKysgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+Pj4+Pj4+QEAgLTIzLDcgKzIzLDcgQEAgZHJtLSQoQ09O RklHX0FHUCkgKz0gZHJtX2FncHN1cHBvcnQubwo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+ICAgZHJtX2tt c19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX3Byb2Jl X2hlbHBlci5vIFwKPiA+Pj4+Pj4+ICAgCQlkcm1fcGxhbmVfaGVscGVyLm8gZHJtX2RwX21zdF90 b3BvbG9neS5vIGRybV9hdG9taWNfaGVscGVyLm8gXAo+ID4+Pj4+Pj4tCQlkcm1fa21zX2hlbHBl cl9jb21tb24ubwo+ID4+Pj4+Pj4rCQlkcm1fa21zX2hlbHBlcl9jb21tb24ubyBkcm1fc2ltcGxl X2ttc19oZWxwZXIubwo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+ICAgZHJtX2ttc19oZWxwZXItJChDT05G SUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gPj4+Pj4+PiAg IGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IGRybV9mYl9o ZWxwZXIubwo+ID4+Pj4+Pj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zaW1wbGVf a21zX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5jCj4g Pj4+Pj4+Pm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+Pj4+PmluZGV4IDAwMDAwMDAuLmQ0NTQx N2EKPiA+Pj4+Pj4+LS0tIC9kZXYvbnVsbAo+ID4+Pj4+Pj4rKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMKPiA+Pj4+Pj4+QEAgLTAsMCArMSwyMDggQEAKPiA+Pj4+ Pj4+Ky8qCj4gPj4+Pj4+PisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCj4g Pj4+Pj4+PisgKgo+ID4+Pj4+Pj4rICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiA+Pj4+Pj4+KyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Cj4gPj4+Pj4+PisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ID4+Pj4+Pj4rICogKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KPiA+Pj4+Pj4+KyAqLwo+ID4+Pj4+Pj4rCj4gPj4+Pj4+PisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiA+Pj4+Pj4+KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ ID4+Pj4+Pj4rI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4+Pj4+Pj4rI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiA+Pj4+Pj4+KyNpbmNsdWRlIDxkcm0vZHJt X3BsYW5lX2hlbHBlci5oPgo+ID4+Pj4+Pj4rI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19o ZWxwZXIuaD4KPiA+Pj4+Pj4+KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPj4+Pj4+PisKPiA+ Pj4+Pj4+Ky8qKgo+ID4+Pj4+Pj4rICogRE9DOiBvdmVydmlldwo+ID4+Pj4+Pj4rICoKPiA+Pj4+ Pj4+KyAqIFRoaXMgaGVscGVyIGxpYnJhcnkgcHJvdmlkZXMgaGVscGVycyBmb3IgZHJpdmVycyBm b3Igc2ltcGxlIGRpc3BsYXkKPiA+Pj4+Pj4+KyAqIGhhcmR3YXJlLgo+ID4+Pj4+Pj4rICoKPiA+ Pj4+Pj4+KyAqIGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoKSBpbml0aWFsaXplcyBhIHNp bXBsZSBkaXNwbGF5IHBpcGVsaW5lCj4gPj4+Pj4+PisgKiB3aGljaCBoYXMgb25seSBvbmUgZnVs bC1zY3JlZW4gc2Nhbm91dCBidWZmZXIgZmVlZGluZyBvbmUgb3V0cHV0LiBUaGUKPiA+Pj4+Pj4+ KyAqIHBpcGVsaW5lIGlzIHJlcHJlc2VudGVkIGJ5IHN0cnVjdCAmZHJtX3NpbXBsZV9kaXNwbGF5 X3BpcGUgYW5kIGJpbmRzCj4gPj4+Pj4+PisgKiB0b2dldGhlciAmZHJtX3BsYW5lLCAmZHJtX2Ny dGMgYW5kICZkcm1fZW5jb2RlciBzdHJ1Y3R1cmVzIGludG8gb25lIGZpeGVkCj4gPj4+Pj4+Pisg KiBlbnRpdHkuIFNvbWUgZmxleGliaWxpdHkgZm9yIGNvZGUgcmV1c2UgaXMgcHJvdmlkZWQgdGhy b3VnaCBhIHNlcGFyYXRlbHkKPiA+Pj4+Pj4+KyAqIGFsbG9jYXRlZCAmZHJtX2Nvbm5lY3RvciBv YmplY3QgYW5kIHN1cHBvcnRpbmcgb3B0aW9uYWwgJmRybV9icmlkZ2UKPiA+Pj4+Pj4+KyAqIGVu Y29kZXIgZHJpdmVycy4KPiA+Pj4+Pj4+KyAqLwo+ID4+Pj4+Pj4rCj4gPj4+Pj4+PitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGRybV9zaW1wbGVfa21zX2VuY29kZXJfZnVu Y3MgPSB7Cj4gPj4+Pj4+PisJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+ID4+Pj4+ Pj4rfTsKPiA+Pj4+Pj4+Kwo+ID4+Pj4+Pj4rc3RhdGljIHZvaWQgZHJtX3NpbXBsZV9rbXNfY3J0 Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4+Pj4+Pj4rewo+ID4+Pj4+Pj4rCXN0 cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZTsKPiA+Pj4+Pj4+Kwo+ID4+Pj4+Pj4r CXBpcGUgPSBjb250YWluZXJfb2YoY3J0Yywgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBl LCBjcnRjKTsKPiA+Pj4+Pj4+KwlpZiAoIXBpcGUtPmZ1bmNzIHx8ICFwaXBlLT5mdW5jcy0+ZW5h YmxlKQo+ID4+Pj4+Pj4rCQlyZXR1cm47Cj4gPj4+Pj4+PisKPiA+Pj4+Pj4+KwlwaXBlLT5mdW5j cy0+ZW5hYmxlKHBpcGUsIGNydGMtPnN0YXRlKTsKPiA+Pj4+Pj4+K30KPiA+Pj4+Pj4+Kwo+ID4+ Pj4+Pj4rc3RhdGljIHZvaWQgZHJtX3NpbXBsZV9rbXNfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiA+Pj4+Pj4+K3sKPiA+Pj4+Pj4+KwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGUgKnBpcGU7Cj4gPj4+Pj4+PisKPiA+Pj4+Pj4+KwlwaXBlID0gY29udGFpbmVyX29m KGNydGMsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSwgY3J0Yyk7Cj4gPj4+Pj4+PisJ aWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVuY3MtPmRpc2FibGUpCj4gPj4+Pj4+PisJCXJl dHVybjsKPiA+Pj4+Pj4+Kwo+ID4+Pj4+Pj4rCXBpcGUtPmZ1bmNzLT5kaXNhYmxlKHBpcGUpOwo+ ID4+Pj4+Pj4rfQo+ID4+Pj4+Pj4rCj4gPj4+Pj4+PitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j cnRjX2hlbHBlcl9mdW5jcyBkcm1fc2ltcGxlX2ttc19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiA+ Pj4+Pj4+KwkuZGlzYWJsZSA9IGRybV9zaW1wbGVfa21zX2NydGNfZGlzYWJsZSwKPiA+Pj4+Pj4+ KwkuZW5hYmxlID0gZHJtX3NpbXBsZV9rbXNfY3J0Y19lbmFibGUsCj4gPj4+Pj4+Pit9Owo+ID4+ Pj4+Pj4rCj4gPj4+Pj4+PitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGRybV9z aW1wbGVfa21zX2NydGNfZnVuY3MgPSB7Cj4gPj4+Pj4+PisJLnJlc2V0ID0gZHJtX2F0b21pY19o ZWxwZXJfY3J0Y19yZXNldCwKPiA+Pj4+Pj4+KwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAs Cj4gPj4+Pj4+PisJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAo+ ID4+Pj4+Pj4rCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gPj4+ Pj4+PisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZSwKPiA+Pj4+Pj4+KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4gPj4+Pj4+Pit9Owo+ID4+Pj4+Pj4rCj4g Pj4+Pj4+PitzdGF0aWMgaW50IGRybV9zaW1wbGVfa21zX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+Pj4+Pj4+KwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCj4gPj4+Pj4+Pit7Cj4gPj4+Pj4+PisJc3RydWN0IGRybV9yZWN0IHNy YyA9IHsKPiA+Pj4+Pj4+KwkJLngxID0gcGxhbmVfc3RhdGUtPnNyY194LAo+ID4+Pj4+Pj4rCQku eTEgPSBwbGFuZV9zdGF0ZS0+c3JjX3ksCj4gPj4+Pj4+PisJCS54MiA9IHBsYW5lX3N0YXRlLT5z cmNfeCArIHBsYW5lX3N0YXRlLT5zcmNfdywKPiA+Pj4+Pj4+KwkJLnkyID0gcGxhbmVfc3RhdGUt PnNyY195ICsgcGxhbmVfc3RhdGUtPnNyY19oLAo+ID4+Pj4+Pj4rCX07Cj4gPj4+Pj4+PisJc3Ry dWN0IGRybV9yZWN0IGRlc3QgPSB7Cj4gPj4+Pj4+PisJCS54MSA9IHBsYW5lX3N0YXRlLT5jcnRj X3gsCj4gPj4+Pj4+PisJCS55MSA9IHBsYW5lX3N0YXRlLT5jcnRjX3ksCj4gPj4+Pj4+PisJCS54 MiA9IHBsYW5lX3N0YXRlLT5jcnRjX3ggKyBwbGFuZV9zdGF0ZS0+Y3J0Y193LAo+ID4+Pj4+Pj4r CQkueTIgPSBwbGFuZV9zdGF0ZS0+Y3J0Y195ICsgcGxhbmVfc3RhdGUtPmNydGNfaCwKPiA+Pj4+ Pj4+Kwl9Owo+ID4+Pj4+Pj4rCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwIH07Cj4gPj4+Pj4+ PisJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlOwo+ID4+Pj4+Pj4rCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+Pj4+Pj4+Kwlib29sIHZpc2libGU7Cj4g Pj4+Pj4+PisJaW50IHJldDsKPiA+Pj4+Pj4+Kwo+ID4+Pj4+Pj4rCXBpcGUgPSBjb250YWluZXJf b2YocGxhbmUsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSwgcGxhbmUpOwo+ID4+Pj4+ Pj4rCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHBsYW5l X3N0YXRlLT5zdGF0ZSwKPiA+Pj4+Pj4+KwkJCQkJCQkmcGlwZS0+Y3J0Yyk7Cj4gPj4+Pj4+PisJ aWYgKGNydGNfc3RhdGUtPmVuYWJsZSAhPSAhIXBsYW5lX3N0YXRlLT5jcnRjKQo+ID4+Pj4+Pj4r CQlyZXR1cm4gLUVJTlZBTDsgLyogcGxhbmUgbXVzdCBtYXRjaCBjcnRjIGVuYWJsZSBzdGF0ZSAq Lwo+ID4+Pj4+Pj4rCj4gPj4+Pj4+PisJaWYgKCFjcnRjX3N0YXRlLT5lbmFibGUpCj4gPj4+Pj4+ PisJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGNoZWNrIHdoZW4gZGlzYWJsaW5nIG9yIGRpc2Fi bGVkICovCj4gPj4+Pj4+PisKPiA+Pj4+Pj4+KwljbGlwLngyID0gY3J0Y19zdGF0ZS0+YWRqdXN0 ZWRfbW9kZS5oZGlzcGxheTsKPiA+Pj4+Pj4+KwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+YWRqdXN0 ZWRfbW9kZS52ZGlzcGxheTsKPiA+Pj4+Pj4+KwlyZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNr X3VwZGF0ZShwbGFuZSwgJnBpcGUtPmNydGMsCj4gPj4+Pj4+PisJCQkJCSAgICBwbGFuZV9zdGF0 ZS0+ZmIsCj4gPj4+Pj4+PisJCQkJCSAgICAmc3JjLCAmZGVzdCwgJmNsaXAsCj4gPj4+Pj4+PisJ CQkJCSAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gPj4+Pj4+PisJCQkJCSAgICBE Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gPj4+Pj4+PisJCQkJCSAgICBmYWxzZSwgdHJ1 ZSwgJnZpc2libGUpOwo+ID4+Pj4+Pj4rCWlmIChyZXQpCj4gPj4+Pj4+PisJCXJldHVybiByZXQ7 Cj4gPj4+Pj4+PisKPiA+Pj4+Pj4+KwlpZiAoIXZpc2libGUpCj4gPj4+Pj4+PisJCXJldHVybiAt RUlOVkFMOwo+ID4+Pj4+Pj4rCj4gPj4+Pj4+PisJaWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ ZnVuY3MtPmNoZWNrKQo+ID4+Pj4+Pj4rCQlyZXR1cm4gMDsKPiA+Pj4+Pj4+Kwo+ID4+Pj4+Pj4r CXJldHVybiBwaXBlLT5mdW5jcy0+Y2hlY2socGlwZSwgcGxhbmVfc3RhdGUsIGNydGNfc3RhdGUp Owo+ID4+Pj4+Pj4rfQo+ID4+Pj4+PldoYXQncyBhbnlvbmUgc3VwcG9zZWQgdG8gZG8gd2l0aCB0 aGlzIHdoZW4gdGhlIGNsaXBwZWQgY29vcmRpbmF0ZXMKPiA+Pj4+Pj5hcmVuJ3QgZXZlbiBwYXNz ZWQvc3RvcmVkIGFueXdoZXJlPwo+ID4+Pj4+SXQgZGlzYWxsb3dzIHBvc2l0aW9uaW5nIGFuZCBz Y2FsaW5nLCBzbyBzaG91bGRuJ3QgZXZlciBuZWVkIHRvIGhhdmUgdGhlCj4gPj4+Pj5jbGlwcGVk IGFyZWE/Cj4gPj4+PllvdSBjYW4gc3RpbGwgY29uZmlndXJlIGEgbGFyZ2VyIGFyZWEgdGhhdCBn ZXRzIGNsaXBwZWQgdG8gdGhlCj4gPj4+PmZ1bGxzY3JlZW4gZGltZW5zaW9ucy4KPiA+Pj5PaCBy aWdodC4gTm9yYWxmLCBzb3VuZHMgbGlrZSB3ZSBuZWVkIHRvIGZlZWQgYmFjayB0aGUgY2xpcHBl ZCByZWN0YW5nbGUuCj4gPj4+UHJvYmFibHkgYmVzdCBpZiB3ZSBhZGQgY2xpcHBlZCBwbGFuZSBj b29yZGluYXRlcyB0byBkcm1fcGxhbmVfc3RhdGUuCj4gPj5Cb3RoIHNyYyBhbmQgY3J0YyBvciBv bmx5IHNyYz8KPiA+Pgo+ID4+ICAgICAgIGlmICghdmlzaWJsZSkKPiA+PiAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPj4rCj4gPj4rICAgIHBsYW5lX3N0YXRlLT5zcmNfeCA9IHNyYy54MTsK PiA+PisgICAgcGxhbmVfc3RhdGUtPnNyY195ID0gc3JjLnkxOwo+ID4+KyAgICBwbGFuZV9zdGF0 ZS0+c3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmc3JjKTsKPiA+PisgICAgcGxhbmVfc3RhdGUtPnNy Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZzcmMpOwo+ID4+Kwo+ID4+KyAgICBwbGFuZV9zdGF0ZS0+ Y3J0Y194ID0gZGVzdC54MTsKPiA+PisgICAgcGxhbmVfc3RhdGUtPmNydGNfeSA9IGRlc3QueTE7 Cj4gPj4rICAgIHBsYW5lX3N0YXRlLT5jcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmZGVzdCk7Cj4g Pj4rICAgIHBsYW5lX3N0YXRlLT5jcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJmRlc3QpOwo+ID5Z b3UgYXJlbid0IGFsbG93ZWQgY2xvYmJlciB0aGUgdXNlciBwcm92aWRlZCBjb29yZGluYXRlcyBs aWtlIHRoaXMuCj4gPldoYXQgeW91IG5lZWQgdG8gZG8gaXMgc3RvcmUgdGhlIGNsaXBwZWQgY29v cmRpbmF0ZXMgaW4gdGhlIHBsYW5lCj4gPnN0YXRlIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyIGNv b3JkaW5hdGVzLgo+IAo+IEhvdyBkbyBJIGRvIHRoYXQ/CgpBZGQgbmV3IHNldCBvZiBwbGFuZV9z dGF0ZS0+Y2xpcHBlZF9zcmMvZHN0X3gveS9oL3cgSSB0aGluaywgYW5kIHN1Z2dlc3QKdG8gZHJp dmVycyB0byB1c2UgdGhhdCBpZiB0aGV5IG5lZWQgY2xpcHBlZCBjb29yZGluYXRlcy4gSSB0aGlu ayBhdCBsZWFzdCwKYWxsIHRoZXNlIGNsaXAgcmVjdHMgYXJlIGEgYml0IHRvbyBjb25mdXNpbmcg dG8gbWUuIFZpbGxlPwotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f 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 S1754699AbcEQNEz (ORCPT ); Tue, 17 May 2016 09:04:55 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:36483 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754594AbcEQNEy (ORCPT ); Tue, 17 May 2016 09:04:54 -0400 Date: Tue, 17 May 2016 15:04:52 +0200 From: Daniel Vetter To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= , Daniel Vetter , jsarha@ti.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 3/3] drm: Add helper for simple display pipeline Message-ID: <20160517130452.GL27098@phenom.ffwll.local> Mail-Followup-To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= , Ville =?iso-8859-1?Q?Syrj=E4l=E4?= , jsarha@ti.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <1463077523-23959-1-git-send-email-noralf@tronnes.org> <1463077523-23959-4-git-send-email-noralf@tronnes.org> <20160512183614.GU4329@intel.com> <20160517070501.GJ27098@phenom.ffwll.local> <20160517074651.GM4329@intel.com> <20160517075945.GQ27098@phenom.ffwll.local> <20160517121208.GO4329@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Operating-System: Linux phenom 4.6.0-rc5+ User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 17, 2016 at 02:22:26PM +0200, Noralf Trønnes wrote: > > > Den 17.05.2016 14:12, skrev Ville Syrjälä: > >On Tue, May 17, 2016 at 02:00:45PM +0200, Noralf Trønnes wrote: > >>Den 17.05.2016 09:59, skrev Daniel Vetter: > >>>On Tue, May 17, 2016 at 10:46:51AM +0300, Ville Syrjälä wrote: > >>>>On Tue, May 17, 2016 at 09:05:01AM +0200, Daniel Vetter wrote: > >>>>>On Thu, May 12, 2016 at 09:36:14PM +0300, Ville Syrjälä wrote: > >>>>>>On Thu, May 12, 2016 at 08:25:23PM +0200, Noralf Trønnes wrote: > >>>>>>>Provides helper functions for drivers that have a simple display > >>>>>>>pipeline. Plane, crtc and encoder are collapsed into one entity. > >>>>>>> > >>>>>>>Cc: jsarha@ti.com > >>>>>>>Signed-off-by: Noralf Trønnes > >>>>>>>--- > >>>>>>> > >>>>>>>Changes since v3: > >>>>>>>- (struct drm_simple_display_pipe *)->funcs should be const > >>>>>>> > >>>>>>>Changes since v2: > >>>>>>>- Drop Kconfig knob DRM_KMS_HELPER > >>>>>>>- Expand documentation > >>>>>>> > >>>>>>>Changes since v1: > >>>>>>>- Add DOC header and add to gpu.tmpl > >>>>>>>- Fix docs: @funcs is optional, "negative error code", > >>>>>>> "This hook is optional." > >>>>>>>- Add checks to drm_simple_kms_plane_atomic_check() > >>>>>>> > >>>>>>> Documentation/DocBook/gpu.tmpl | 6 + > >>>>>>> drivers/gpu/drm/Makefile | 2 +- > >>>>>>> drivers/gpu/drm/drm_simple_kms_helper.c | 208 ++++++++++++++++++++++++++++++++ > >>>>>>> include/drm/drm_simple_kms_helper.h | 94 +++++++++++++++ > >>>>>>> 4 files changed, 309 insertions(+), 1 deletion(-) > >>>>>>> create mode 100644 drivers/gpu/drm/drm_simple_kms_helper.c > >>>>>>> create mode 100644 include/drm/drm_simple_kms_helper.h > >>>>>>> > >>>>>>>diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl > >>>>>>>index 4a0c599..cf3f5a8 100644 > >>>>>>>--- a/Documentation/DocBook/gpu.tmpl > >>>>>>>+++ b/Documentation/DocBook/gpu.tmpl > >>>>>>>@@ -1693,6 +1693,12 @@ void intel_crt_init(struct drm_device *dev) > >>>>>>> !Edrivers/gpu/drm/drm_panel.c > >>>>>>> !Pdrivers/gpu/drm/drm_panel.c drm panel > >>>>>>> > >>>>>>>+ > >>>>>>>+ Simple KMS Helper Reference > >>>>>>>+!Iinclude/drm/drm_simple_kms_helper.h > >>>>>>>+!Edrivers/gpu/drm/drm_simple_kms_helper.c > >>>>>>>+!Pdrivers/gpu/drm/drm_simple_kms_helper.c overview > >>>>>>>+ > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > >>>>>>>index 2bd3e5a..31b85df5 100644 > >>>>>>>--- a/drivers/gpu/drm/Makefile > >>>>>>>+++ b/drivers/gpu/drm/Makefile > >>>>>>>@@ -23,7 +23,7 @@ drm-$(CONFIG_AGP) += drm_agpsupport.o > >>>>>>> > >>>>>>> drm_kms_helper-y := drm_crtc_helper.o drm_dp_helper.o drm_probe_helper.o \ > >>>>>>> drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ > >>>>>>>- drm_kms_helper_common.o > >>>>>>>+ drm_kms_helper_common.o drm_simple_kms_helper.o > >>>>>>> > >>>>>>> drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o > >>>>>>> drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o > >>>>>>>diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c > >>>>>>>new file mode 100644 > >>>>>>>index 0000000..d45417a > >>>>>>>--- /dev/null > >>>>>>>+++ b/drivers/gpu/drm/drm_simple_kms_helper.c > >>>>>>>@@ -0,0 +1,208 @@ > >>>>>>>+/* > >>>>>>>+ * Copyright (C) 2016 Noralf Trønnes > >>>>>>>+ * > >>>>>>>+ * This program is free software; you can redistribute it and/or modify > >>>>>>>+ * it under the terms of the GNU General Public License as published by > >>>>>>>+ * the Free Software Foundation; either version 2 of the License, or > >>>>>>>+ * (at your option) any later version. > >>>>>>>+ */ > >>>>>>>+ > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+#include > >>>>>>>+ > >>>>>>>+/** > >>>>>>>+ * DOC: overview > >>>>>>>+ * > >>>>>>>+ * This helper library provides helpers for drivers for simple display > >>>>>>>+ * hardware. > >>>>>>>+ * > >>>>>>>+ * drm_simple_display_pipe_init() initializes a simple display pipeline > >>>>>>>+ * which has only one full-screen scanout buffer feeding one output. The > >>>>>>>+ * pipeline is represented by struct &drm_simple_display_pipe and binds > >>>>>>>+ * together &drm_plane, &drm_crtc and &drm_encoder structures into one fixed > >>>>>>>+ * entity. Some flexibility for code reuse is provided through a separately > >>>>>>>+ * allocated &drm_connector object and supporting optional &drm_bridge > >>>>>>>+ * encoder drivers. > >>>>>>>+ */ > >>>>>>>+ > >>>>>>>+static const struct drm_encoder_funcs drm_simple_kms_encoder_funcs = { > >>>>>>>+ .destroy = drm_encoder_cleanup, > >>>>>>>+}; > >>>>>>>+ > >>>>>>>+static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc) > >>>>>>>+{ > >>>>>>>+ struct drm_simple_display_pipe *pipe; > >>>>>>>+ > >>>>>>>+ pipe = container_of(crtc, struct drm_simple_display_pipe, crtc); > >>>>>>>+ if (!pipe->funcs || !pipe->funcs->enable) > >>>>>>>+ return; > >>>>>>>+ > >>>>>>>+ pipe->funcs->enable(pipe, crtc->state); > >>>>>>>+} > >>>>>>>+ > >>>>>>>+static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc) > >>>>>>>+{ > >>>>>>>+ struct drm_simple_display_pipe *pipe; > >>>>>>>+ > >>>>>>>+ pipe = container_of(crtc, struct drm_simple_display_pipe, crtc); > >>>>>>>+ if (!pipe->funcs || !pipe->funcs->disable) > >>>>>>>+ return; > >>>>>>>+ > >>>>>>>+ pipe->funcs->disable(pipe); > >>>>>>>+} > >>>>>>>+ > >>>>>>>+static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = { > >>>>>>>+ .disable = drm_simple_kms_crtc_disable, > >>>>>>>+ .enable = drm_simple_kms_crtc_enable, > >>>>>>>+}; > >>>>>>>+ > >>>>>>>+static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = { > >>>>>>>+ .reset = drm_atomic_helper_crtc_reset, > >>>>>>>+ .destroy = drm_crtc_cleanup, > >>>>>>>+ .set_config = drm_atomic_helper_set_config, > >>>>>>>+ .page_flip = drm_atomic_helper_page_flip, > >>>>>>>+ .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, > >>>>>>>+ .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, > >>>>>>>+}; > >>>>>>>+ > >>>>>>>+static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane, > >>>>>>>+ struct drm_plane_state *plane_state) > >>>>>>>+{ > >>>>>>>+ struct drm_rect src = { > >>>>>>>+ .x1 = plane_state->src_x, > >>>>>>>+ .y1 = plane_state->src_y, > >>>>>>>+ .x2 = plane_state->src_x + plane_state->src_w, > >>>>>>>+ .y2 = plane_state->src_y + plane_state->src_h, > >>>>>>>+ }; > >>>>>>>+ struct drm_rect dest = { > >>>>>>>+ .x1 = plane_state->crtc_x, > >>>>>>>+ .y1 = plane_state->crtc_y, > >>>>>>>+ .x2 = plane_state->crtc_x + plane_state->crtc_w, > >>>>>>>+ .y2 = plane_state->crtc_y + plane_state->crtc_h, > >>>>>>>+ }; > >>>>>>>+ struct drm_rect clip = { 0 }; > >>>>>>>+ struct drm_simple_display_pipe *pipe; > >>>>>>>+ struct drm_crtc_state *crtc_state; > >>>>>>>+ bool visible; > >>>>>>>+ int ret; > >>>>>>>+ > >>>>>>>+ pipe = container_of(plane, struct drm_simple_display_pipe, plane); > >>>>>>>+ crtc_state = drm_atomic_get_existing_crtc_state(plane_state->state, > >>>>>>>+ &pipe->crtc); > >>>>>>>+ if (crtc_state->enable != !!plane_state->crtc) > >>>>>>>+ return -EINVAL; /* plane must match crtc enable state */ > >>>>>>>+ > >>>>>>>+ if (!crtc_state->enable) > >>>>>>>+ return 0; /* nothing to check when disabling or disabled */ > >>>>>>>+ > >>>>>>>+ clip.x2 = crtc_state->adjusted_mode.hdisplay; > >>>>>>>+ clip.y2 = crtc_state->adjusted_mode.vdisplay; > >>>>>>>+ ret = drm_plane_helper_check_update(plane, &pipe->crtc, > >>>>>>>+ plane_state->fb, > >>>>>>>+ &src, &dest, &clip, > >>>>>>>+ DRM_PLANE_HELPER_NO_SCALING, > >>>>>>>+ DRM_PLANE_HELPER_NO_SCALING, > >>>>>>>+ false, true, &visible); > >>>>>>>+ if (ret) > >>>>>>>+ return ret; > >>>>>>>+ > >>>>>>>+ if (!visible) > >>>>>>>+ return -EINVAL; > >>>>>>>+ > >>>>>>>+ if (!pipe->funcs || !pipe->funcs->check) > >>>>>>>+ return 0; > >>>>>>>+ > >>>>>>>+ return pipe->funcs->check(pipe, plane_state, crtc_state); > >>>>>>>+} > >>>>>>What's anyone supposed to do with this when the clipped coordinates > >>>>>>aren't even passed/stored anywhere? > >>>>>It disallows positioning and scaling, so shouldn't ever need to have the > >>>>>clipped area? > >>>>You can still configure a larger area that gets clipped to the > >>>>fullscreen dimensions. > >>>Oh right. Noralf, sounds like we need to feed back the clipped rectangle. > >>>Probably best if we add clipped plane coordinates to drm_plane_state. > >>Both src and crtc or only src? > >> > >> if (!visible) > >> return -EINVAL; > >>+ > >>+ plane_state->src_x = src.x1; > >>+ plane_state->src_y = src.y1; > >>+ plane_state->src_w = drm_rect_width(&src); > >>+ plane_state->src_h = drm_rect_height(&src); > >>+ > >>+ plane_state->crtc_x = dest.x1; > >>+ plane_state->crtc_y = dest.y1; > >>+ plane_state->crtc_w = drm_rect_width(&dest); > >>+ plane_state->crtc_h = drm_rect_height(&dest); > >You aren't allowed clobber the user provided coordinates like this. > >What you need to do is store the clipped coordinates in the plane > >state in addition to the user coordinates. > > How do I do that? Add new set of plane_state->clipped_src/dst_x/y/h/w I think, and suggest to drivers to use that if they need clipped coordinates. I think at least, all these clip rects are a bit too confusing to me. Ville? -Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch