From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v4 3/3] drm: Add helper for simple display pipeline Date: Thu, 12 May 2016 21:36:14 +0300 Message-ID: <20160512183614.GU4329@intel.com> References: <1463077523-23959-1-git-send-email-noralf@tronnes.org> <1463077523-23959-4-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 39C476E939 for ; Thu, 12 May 2016 18:36:18 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1463077523-23959-4-git-send-email-noralf@tronnes.org> 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: jsarha@ti.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBNYXkgMTIsIDIwMTYgYXQgMDg6MjU6MjNQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIGRyaXZlcnMgdGhhdCBoYXZl IGEgc2ltcGxlIGRpc3BsYXkKPiBwaXBlbGluZS4gUGxhbmUsIGNydGMgYW5kIGVuY29kZXIgYXJl IGNvbGxhcHNlZCBpbnRvIG9uZSBlbnRpdHkuCj4gCj4gQ2M6IGpzYXJoYUB0aS5jb20KPiBTaWdu ZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiAtLS0KPiAK PiBDaGFuZ2VzIHNpbmNlIHYzOgo+IC0gKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq KS0+ZnVuY3Mgc2hvdWxkIGJlIGNvbnN0Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2MjoKPiAtIERyb3Ag S2NvbmZpZyBrbm9iIERSTV9LTVNfSEVMUEVSCj4gLSBFeHBhbmQgZG9jdW1lbnRhdGlvbgo+IAo+ IENoYW5nZXMgc2luY2UgdjE6Cj4gLSBBZGQgRE9DIGhlYWRlciBhbmQgYWRkIHRvIGdwdS50bXBs Cj4gLSBGaXggZG9jczogQGZ1bmNzIGlzIG9wdGlvbmFsLCAibmVnYXRpdmUgZXJyb3IgY29kZSIs Cj4gICAiVGhpcyBob29rIGlzIG9wdGlvbmFsLiIKPiAtIEFkZCBjaGVja3MgdG8gZHJtX3NpbXBs ZV9rbXNfcGxhbmVfYXRvbWljX2NoZWNrKCkKPiAKPiAgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dw dS50bXBsICAgICAgICAgIHwgICA2ICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxw ZXIuYyB8IDIwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2Ry bS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaCAgICAgfCAgOTQgKysrKysrKysrKysrKysrCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMzA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuYwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmgKPiAK PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsIGIvRG9jdW1lbnRh dGlvbi9Eb2NCb29rL2dwdS50bXBsCj4gaW5kZXggNGEwYzU5OS4uY2YzZjVhOCAxMDA2NDQKPiAt LS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwKPiArKysgYi9Eb2N1bWVudGF0aW9u L0RvY0Jvb2svZ3B1LnRtcGwKPiBAQCAtMTY5Myw2ICsxNjkzLDEyIEBAIHZvaWQgaW50ZWxfY3J0 X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIUVkcml2ZXJzL2dwdS9kcm0vZHJtX3Bh bmVsLmMKPiAgIVBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmVsLmMgZHJtIHBhbmVsCj4gICAgICA8 L3NlY3QyPgo+ICsgICAgPHNlY3QyPgo+ICsgICAgICA8dGl0bGU+U2ltcGxlIEtNUyBIZWxwZXIg UmVmZXJlbmNlPC90aXRsZT4KPiArIUlpbmNsdWRlL2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIu aAo+ICshRWRyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuYwo+ICshUGRyaXZl cnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuYyBvdmVydmlldwo+ICsgICAgPC9zZWN0 Mj4KPiAgICA8L3NlY3QxPgo+IAo+ICAgIDwhLS0gSW50ZXJuYWxzOiBrbXMgcHJvcGVydGllcyAt LT4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCj4gaW5kZXggMmJkM2U1YS4uMzFiODVkZjUgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4g QEAgLTIzLDcgKzIzLDcgQEAgZHJtLSQoQ09ORklHX0FHUCkgKz0gZHJtX2FncHN1cHBvcnQubwo+ IAo+ICBkcm1fa21zX2hlbHBlci15IDo9IGRybV9jcnRjX2hlbHBlci5vIGRybV9kcF9oZWxwZXIu byBkcm1fcHJvYmVfaGVscGVyLm8gXAo+ICAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0 X3RvcG9sb2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCj4gLQkJZHJtX2ttc19oZWxwZXJfY29t bW9uLm8KPiArCQlkcm1fa21zX2hlbHBlcl9jb21tb24ubyBkcm1fc2ltcGxlX2ttc19oZWxwZXIu bwo+IAo+ICBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFKSAr PSBkcm1fZWRpZF9sb2FkLm8KPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0ZCREVWX0VN VUxBVElPTikgKz0gZHJtX2ZiX2hlbHBlci5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2tt c19oZWxwZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDQ1NDE3 YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3NpbXBsZV9rbXNf aGVscGVyLmMKPiBAQCAtMCwwICsxLDIwOCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTYgTm9yYWxmIFRyw7hubmVzCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiArLyoqCj4gKyAqIERPQzogb3ZlcnZpZXcKPiAr ICoKPiArICogVGhpcyBoZWxwZXIgbGlicmFyeSBwcm92aWRlcyBoZWxwZXJzIGZvciBkcml2ZXJz IGZvciBzaW1wbGUgZGlzcGxheQo+ICsgKiBoYXJkd2FyZS4KPiArICoKPiArICogZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGVfaW5pdCgpIGluaXRpYWxpemVzIGEgc2ltcGxlIGRpc3BsYXkgcGlwZWxp bmUKPiArICogd2hpY2ggaGFzIG9ubHkgb25lIGZ1bGwtc2NyZWVuIHNjYW5vdXQgYnVmZmVyIGZl ZWRpbmcgb25lIG91dHB1dC4gVGhlCj4gKyAqIHBpcGVsaW5lIGlzIHJlcHJlc2VudGVkIGJ5IHN0 cnVjdCAmZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgYW5kIGJpbmRzCj4gKyAqIHRvZ2V0aGVyICZk cm1fcGxhbmUsICZkcm1fY3J0YyBhbmQgJmRybV9lbmNvZGVyIHN0cnVjdHVyZXMgaW50byBvbmUg Zml4ZWQKPiArICogZW50aXR5LiBTb21lIGZsZXhpYmlsaXR5IGZvciBjb2RlIHJldXNlIGlzIHBy b3ZpZGVkIHRocm91Z2ggYSBzZXBhcmF0ZWx5Cj4gKyAqIGFsbG9jYXRlZCAmZHJtX2Nvbm5lY3Rv ciBvYmplY3QgYW5kIHN1cHBvcnRpbmcgb3B0aW9uYWwgJmRybV9icmlkZ2UKPiArICogZW5jb2Rl ciBkcml2ZXJzLgo+ICsgKi8KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJf ZnVuY3MgZHJtX3NpbXBsZV9rbXNfZW5jb2Rlcl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJt X2VuY29kZXJfY2xlYW51cCwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGRybV9zaW1wbGVfa21z X2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9z aW1wbGVfZGlzcGxheV9waXBlICpwaXBlOwo+ICsKPiArCXBpcGUgPSBjb250YWluZXJfb2YoY3J0 Yywgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlLCBjcnRjKTsKPiArCWlmICghcGlwZS0+ ZnVuY3MgfHwgIXBpcGUtPmZ1bmNzLT5lbmFibGUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBpcGUt PmZ1bmNzLT5lbmFibGUocGlwZSwgY3J0Yy0+c3RhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkcm1fc2ltcGxlX2ttc19jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7Cj4gKwo+ICsJcGlwZSA9 IGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUsIGNydGMp Owo+ICsJaWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVuY3MtPmRpc2FibGUpCj4gKwkJcmV0 dXJuOwo+ICsKPiArCXBpcGUtPmZ1bmNzLT5kaXNhYmxlKHBpcGUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBkcm1fc2ltcGxlX2ttc19jcnRj X2hlbHBlcl9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gZHJtX3NpbXBsZV9rbXNfY3J0Y19kaXNh YmxlLAo+ICsJLmVuYWJsZSA9IGRybV9zaW1wbGVfa21zX2NydGNfZW5hYmxlLAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBkcm1fc2ltcGxlX2ttc19jcnRj X2Z1bmNzID0gewo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiAr CS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKPiArCS5zZXRfY29uZmlnID0gZHJtX2F0b21p Y19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9w YWdlX2ZsaXAsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBk cm1fc2ltcGxlX2ttc19wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCXN0 cnVjdCBkcm1fcmVjdCBzcmMgPSB7Cj4gKwkJLngxID0gcGxhbmVfc3RhdGUtPnNyY194LAo+ICsJ CS55MSA9IHBsYW5lX3N0YXRlLT5zcmNfeSwKPiArCQkueDIgPSBwbGFuZV9zdGF0ZS0+c3JjX3gg KyBwbGFuZV9zdGF0ZS0+c3JjX3csCj4gKwkJLnkyID0gcGxhbmVfc3RhdGUtPnNyY195ICsgcGxh bmVfc3RhdGUtPnNyY19oLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ICsJ CS54MSA9IHBsYW5lX3N0YXRlLT5jcnRjX3gsCj4gKwkJLnkxID0gcGxhbmVfc3RhdGUtPmNydGNf eSwKPiArCQkueDIgPSBwbGFuZV9zdGF0ZS0+Y3J0Y194ICsgcGxhbmVfc3RhdGUtPmNydGNfdywK PiArCQkueTIgPSBwbGFuZV9zdGF0ZS0+Y3J0Y195ICsgcGxhbmVfc3RhdGUtPmNydGNfaCwKPiAr CX07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9zaW1w bGVfZGlzcGxheV9waXBlICpwaXBlOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlOwo+ICsJYm9vbCB2aXNpYmxlOwo+ICsJaW50IHJldDsKPiArCj4gKwlwaXBlID0gY29udGFp bmVyX29mKHBsYW5lLCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUsIHBsYW5lKTsKPiAr CWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHBsYW5lX3N0 YXRlLT5zdGF0ZSwKPiArCQkJCQkJCSZwaXBlLT5jcnRjKTsKPiArCWlmIChjcnRjX3N0YXRlLT5l bmFibGUgIT0gISFwbGFuZV9zdGF0ZS0+Y3J0YykKPiArCQlyZXR1cm4gLUVJTlZBTDsgLyogcGxh bmUgbXVzdCBtYXRjaCBjcnRjIGVuYWJsZSBzdGF0ZSAqLwo+ICsKPiArCWlmICghY3J0Y19zdGF0 ZS0+ZW5hYmxlKQo+ICsJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGNoZWNrIHdoZW4gZGlzYWJs aW5nIG9yIGRpc2FibGVkICovCj4gKwo+ICsJY2xpcC54MiA9IGNydGNfc3RhdGUtPmFkanVzdGVk X21vZGUuaGRpc3BsYXk7Cj4gKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52 ZGlzcGxheTsKPiArCXJldCA9IGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCAm cGlwZS0+Y3J0YywKPiArCQkJCQkgICAgcGxhbmVfc3RhdGUtPmZiLAo+ICsJCQkJCSAgICAmc3Jj LCAmZGVzdCwgJmNsaXAsCj4gKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywK PiArCQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICsJCQkJCSAgICBmYWxz ZSwgdHJ1ZSwgJnZpc2libGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CWlmICghdmlzaWJsZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIXBpcGUtPmZ1 bmNzIHx8ICFwaXBlLT5mdW5jcy0+Y2hlY2spCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJu IHBpcGUtPmZ1bmNzLT5jaGVjayhwaXBlLCBwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSk7Cj4gK30K CldoYXQncyBhbnlvbmUgc3VwcG9zZWQgdG8gZG8gd2l0aCB0aGlzIHdoZW4gdGhlIGNsaXBwZWQg Y29vcmRpbmF0ZXMKYXJlbid0IGV2ZW4gcGFzc2VkL3N0b3JlZCBhbnl3aGVyZT8KCj4gKwo+ICtz dGF0aWMgdm9pZCBkcm1fc2ltcGxlX2ttc19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICsJCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSkKPiAr ewo+ICsJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlOwo+ICsKPiArCXBpcGUg PSBjb250YWluZXJfb2YocGxhbmUsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSwgcGxh bmUpOwo+ICsJaWYgKCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVuY3MtPnVwZGF0ZSkKPiArCQly ZXR1cm47Cj4gKwo+ICsJcGlwZS0+ZnVuY3MtPnVwZGF0ZShwaXBlLCBwc3RhdGUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgZHJtX3NpbXBs ZV9rbXNfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLmF0b21pY19jaGVjayA9IGRybV9zaW1w bGVfa21zX3BsYW5lX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfdXBkYXRlID0gZHJtX3NpbXBs ZV9rbXNfcGxhbmVfYXRvbWljX3VwZGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2Z1bmNzIGRybV9zaW1wbGVfa21zX3BsYW5lX2Z1bmNzID0gewo+ICsJLnVw ZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gKwkuZGlzYWJs ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+ICsJLmRlc3Ryb3kJ CT0gZHJtX3BsYW5lX2NsZWFudXAsCj4gKwkucmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX3Bs YW5lX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBl cl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAq IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQgLSBJbml0aWFsaXplIGEgc2ltcGxlIGRpc3Bs YXkgcGlwZWxpbmUKPiArICogQGRldjogRFJNIGRldmljZQo+ICsgKiBAcGlwZTogc2ltcGxlIGRp c3BsYXkgcGlwZSBvYmplY3QgdG8gaW5pdGlhbGl6ZQo+ICsgKiBAZnVuY3M6IGNhbGxiYWNrcyBm b3IgdGhlIGRpc3BsYXkgcGlwZSAob3B0aW9uYWwpCj4gKyAqIEBmb3JtYXRzOiBhcnJheSBvZiBz dXBwb3J0ZWQgZm9ybWF0cyAoJURSTV9GT1JNQVRfKikKPiArICogQGZvcm1hdF9jb3VudDogbnVt YmVyIG9mIGVsZW1lbnRzIGluIEBmb3JtYXRzCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0 byBhdHRhY2ggYW5kIHJlZ2lzdGVyCj4gKyAqCj4gKyAqIFNldHMgdXAgYSBkaXNwbGF5IHBpcGVs aW5lIHdoaWNoIGNvbnNpc3Qgb2YgYSByZWFsbHkgc2ltcGxlCj4gKyAqIHBsYW5lLWNydGMtZW5j b2RlciBwaXBlIGNvdXBsZWQgd2l0aCB0aGUgcHJvdmlkZWQgY29ubmVjdG9yLgo+ICsgKiBUZWFy ZG93biBvZiBhIHNpbXBsZSBkaXNwbGF5IHBpcGUgaXMgYWxsIGhhbmRsZWQgYXV0b21hdGljYWxs eSBieSB0aGUgZHJtCj4gKyAqIGNvcmUgdGhyb3VnaCBjYWxsaW5nIGRybV9tb2RlX2NvbmZpZ19j bGVhbnVwKCkuIERyaXZlcnMgYWZ0ZXJ3YXJkcyBuZWVkIHRvCj4gKyAqIHJlbGVhc2UgdGhlIG1l bW9yeSBmb3IgdGhlIHN0cnVjdHVyZSB0aGVtc2VsdmVzLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAr ICovCj4gK2ludCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gKwkJCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiArCQkJ Y29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzICpmdW5jcywKPiArCQkJ Y29uc3QgdWludDMyX3QgKmZvcm1hdHMsIHVuc2lnbmVkIGludCBmb3JtYXRfY291bnQsCj4gKwkJ CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciA9ICZwaXBlLT5lbmNvZGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxh bmUgPSAmcGlwZS0+cGxhbmU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0 YzsKPiArCWludCByZXQ7Cj4gKwo+ICsJcGlwZS0+ZnVuY3MgPSBmdW5jczsKPiArCj4gKwlkcm1f cGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmRybV9zaW1wbGVfa21zX3BsYW5lX2hlbHBlcl9mdW5j cyk7Cj4gKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgMCwKPiAr CQkJCSAgICAgICAmZHJtX3NpbXBsZV9rbXNfcGxhbmVfZnVuY3MsCj4gKwkJCQkgICAgICAgZm9y bWF0cywgZm9ybWF0X2NvdW50LAo+ICsJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlks IE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWRybV9jcnRjX2hl bHBlcl9hZGQoY3J0YywgJmRybV9zaW1wbGVfa21zX2NydGNfaGVscGVyX2Z1bmNzKTsKPiArCXJl dCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZGV2LCBjcnRjLCBwbGFuZSwgTlVMTCwKPiAr CQkJCQkmZHJtX3NpbXBsZV9rbXNfY3J0Y19mdW5jcywgTlVMTCk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAxIDw8IGRybV9j cnRjX2luZGV4KGNydGMpOwo+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIs ICZkcm1fc2ltcGxlX2ttc19lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAgICAgRFJNX01PREVfRU5D T0RFUl9OT05FLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwly ZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVy KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gZHJtX2Nvbm5l Y3Rvcl9yZWdpc3Rlcihjb25uZWN0b3IpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGVfaW5pdCk7Cj4gKwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5oIGIvaW5jbHVkZS9k cm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjI2OTAzOTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJt X3NpbXBsZV9rbXNfaGVscGVyLmgKPiBAQCAtMCwwICsxLDk0IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fTElOVVhfRFJNX1NJTVBMRV9L TVNfSEVMUEVSX0gKPiArI2RlZmluZSBfX0xJTlVYX0RSTV9TSU1QTEVfS01TX0hFTFBFUl9ICj4g Kwo+ICtzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGU7Cj4gKwo+ICsvKioKPiArICogc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIC0gaGVscGVyIG9wZXJhdGlvbnMgZm9y IGEgc2ltcGxlCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp c3BsYXkgcGlwZWxpbmUKPiArICovCj4gK3N0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9m dW5jcyB7Cj4gKwkvKioKPiArCSAqIEBlbmFibGU6Cj4gKwkgKgo+ICsJICogVGhpcyBmdW5jdGlv biBzaG91bGQgYmUgdXNlZCB0byBlbmFibGUgdGhlIHBpcGVsaW5lLgo+ICsJICogSXQgaXMgY2Fs bGVkIHdoZW4gdGhlIHVuZGVybHlpbmcgY3J0YyBpcyBlbmFibGVkLgo+ICsJICogVGhpcyBob29r IGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSk7Cj4gKwkvKioKPiArCSAqIEBkaXNhYmxlOgo+ICsJICoKPiArCSAqIFRoaXMg ZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgcGlwZWxpbmUuCj4gKwkgKiBJ dCBpcyBjYWxsZWQgd2hlbiB0aGUgdW5kZXJseWluZyBjcnRjIGlzIGRpc2FibGVkLgo+ICsJICog VGhpcyBob29rIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0 IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKTsKPiArCj4gKwkvKioKPiArCSAqIEBjaGVj azoKPiArCSAqCj4gKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgY2hlY2sgcGhh c2Ugb2YgYW4gYXRvbWljIHVwZGF0ZSwKPiArCSAqIHNwZWNpZmljYWxseSB3aGVuIHRoZSB1bmRl cmx5aW5nIHBsYW5lIGlzIGNoZWNrZWQuCj4gKwkgKiBUaGUgc2ltcGxlIGRpc3BsYXkgcGlwZWxp bmUgaGVscGVycyBhbHJlYWR5IGNoZWNrIHRoYXQgdGhlIHBsYW5lIGlzCj4gKwkgKiBub3Qgc2Nh bGVkLCBmaWxscyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBhbmQgaXMgYWx3YXlzIGVuYWJsZWQK PiArCSAqIHdoZW4gdGhlIGNydGMgaXMgYWxzbyBlbmFibGVkLgo+ICsJICogVGhpcyBob29rIGlz IG9wdGlvbmFsLgo+ICsJICoKPiArCSAqIFJFVFVSTlM6Cj4gKwkgKgo+ICsJICogMCBvbiBzdWNj ZXNzLCAtRUlOVkFMIGlmIHRoZSBzdGF0ZSBvciB0aGUgdHJhbnNpdGlvbiBjYW4ndCBiZQo+ICsJ ICogc3VwcG9ydGVkLCAtRU5PTUVNIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIC1F REVBRExLIGlmIGFuCj4gKwkgKiBhdHRlbXB0IHRvIG9idGFpbiBhbm90aGVyIHN0YXRlIG9iamVj dCByYW4gaW50byBhICZkcm1fbW9kZXNldF9sb2NrCj4gKwkgKiBkZWFkbG9jay4KPiArCSAqLwo+ ICsJaW50ICgqY2hlY2spKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiAr CQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ICsJCSAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiArCS8qKgo+ICsJICogQHVwZGF0ZToK PiArCSAqCj4gKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1bmRlcmx5aW5n IHBsYW5lIHN0YXRlIGlzIHVwZGF0ZWQuCj4gKwkgKiBUaGlzIGhvb2sgaXMgb3B0aW9uYWwuCj4g KwkgKi8KPiArCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSwKPiArCQkgICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAtIHNp bXBsZSBkaXNwbGF5IHBpcGVsaW5lCj4gKyAqIEBjcnRjOiBDUlRDIGNvbnRyb2wgc3RydWN0dXJl Cj4gKyAqIEBwbGFuZTogUGxhbmUgY29udHJvbCBzdHJ1Y3R1cmUKPiArICogQGVuY29kZXI6IEVu Y29kZXIgY29udHJvbCBzdHJ1Y3R1cmUKPiArICogQGNvbm5lY3RvcjogQ29ubmVjdG9yIGNvbnRy b2wgc3RydWN0dXJlCj4gKyAqIEBmdW5jczogUGlwZWxpbmUgY29udHJvbCBmdW5jdGlvbnMgKG9w dGlvbmFsKQo+ICsgKgo+ICsgKiBTaW1wbGUgZGlzcGxheSBwaXBlbGluZSB3aXRoIHBsYW5lLCBj cnRjIGFuZCBlbmNvZGVyIGNvbGxhcHNlZCBpbnRvIG9uZQo+ICsgKiBlbnRpdHkuIEl0IHNob3Vs ZCBiZSBpbml0aWFsaXplZCBieSBjYWxsaW5nIGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQo KS4KPiArICovCj4gK3N0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSB7Cj4gKwlzdHJ1Y3Qg ZHJtX2NydGMgY3J0YzsKPiArCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7Cj4gKwlzdHJ1Y3QgZHJt X2VuY29kZXIgZW5jb2RlcjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4g Kwo+ICsJY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzICpmdW5jczsK PiArfTsKPiArCj4gK2ludCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwkJCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwK PiArCQkJY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzICpmdW5jcywK PiArCQkJY29uc3QgdWludDMyX3QgKmZvcm1hdHMsIHVuc2lnbmVkIGludCBmb3JtYXRfY291bnQs Cj4gKwkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICsKPiArI2VuZGlmIC8q IF9fTElOVVhfRFJNX1NJTVBMRV9LTVNfSEVMUEVSX0ggKi8KPiAtLQo+IDIuOC4yCj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwg bWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKVmls bGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752796AbcELSgU (ORCPT ); Thu, 12 May 2016 14:36:20 -0400 Received: from mga01.intel.com ([192.55.52.88]:20850 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752556AbcELSgT (ORCPT ); Thu, 12 May 2016 14:36:19 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,610,1455004800"; d="scan'208";a="978584820" Date: Thu, 12 May 2016 21:36:14 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: dri-devel@lists.freedesktop.org, jsarha@ti.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 3/3] drm: Add helper for simple display pipeline Message-ID: <20160512183614.GU4329@intel.com> References: <1463077523-23959-1-git-send-email-noralf@tronnes.org> <1463077523-23959-4-git-send-email-noralf@tronnes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1463077523-23959-4-git-send-email-noralf@tronnes.org> 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 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? > + > +static void drm_simple_kms_plane_atomic_update(struct drm_plane *plane, > + struct drm_plane_state *pstate) > +{ > + struct drm_simple_display_pipe *pipe; > + > + pipe = container_of(plane, struct drm_simple_display_pipe, plane); > + if (!pipe->funcs || !pipe->funcs->update) > + return; > + > + pipe->funcs->update(pipe, pstate); > +} > + > +static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = { > + .atomic_check = drm_simple_kms_plane_atomic_check, > + .atomic_update = drm_simple_kms_plane_atomic_update, > +}; > + > +static const struct drm_plane_funcs drm_simple_kms_plane_funcs = { > + .update_plane = drm_atomic_helper_update_plane, > + .disable_plane = drm_atomic_helper_disable_plane, > + .destroy = drm_plane_cleanup, > + .reset = drm_atomic_helper_plane_reset, > + .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, > + .atomic_destroy_state = drm_atomic_helper_plane_destroy_state, > +}; > + > +/** > + * drm_simple_display_pipe_init - Initialize a simple display pipeline > + * @dev: DRM device > + * @pipe: simple display pipe object to initialize > + * @funcs: callbacks for the display pipe (optional) > + * @formats: array of supported formats (%DRM_FORMAT_*) > + * @format_count: number of elements in @formats > + * @connector: connector to attach and register > + * > + * Sets up a display pipeline which consist of a really simple > + * plane-crtc-encoder pipe coupled with the provided connector. > + * Teardown of a simple display pipe is all handled automatically by the drm > + * core through calling drm_mode_config_cleanup(). Drivers afterwards need to > + * release the memory for the structure themselves. > + * > + * Returns: > + * Zero on success, negative error code on failure. > + */ > +int drm_simple_display_pipe_init(struct drm_device *dev, > + struct drm_simple_display_pipe *pipe, > + const struct drm_simple_display_pipe_funcs *funcs, > + const uint32_t *formats, unsigned int format_count, > + struct drm_connector *connector) > +{ > + struct drm_encoder *encoder = &pipe->encoder; > + struct drm_plane *plane = &pipe->plane; > + struct drm_crtc *crtc = &pipe->crtc; > + int ret; > + > + pipe->funcs = funcs; > + > + drm_plane_helper_add(plane, &drm_simple_kms_plane_helper_funcs); > + ret = drm_universal_plane_init(dev, plane, 0, > + &drm_simple_kms_plane_funcs, > + formats, format_count, > + DRM_PLANE_TYPE_PRIMARY, NULL); > + if (ret) > + return ret; > + > + drm_crtc_helper_add(crtc, &drm_simple_kms_crtc_helper_funcs); > + ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL, > + &drm_simple_kms_crtc_funcs, NULL); > + if (ret) > + return ret; > + > + encoder->possible_crtcs = 1 << drm_crtc_index(crtc); > + ret = drm_encoder_init(dev, encoder, &drm_simple_kms_encoder_funcs, > + DRM_MODE_ENCODER_NONE, NULL); > + if (ret) > + return ret; > + > + ret = drm_mode_connector_attach_encoder(connector, encoder); > + if (ret) > + return ret; > + > + return drm_connector_register(connector); > +} > +EXPORT_SYMBOL(drm_simple_display_pipe_init); > + > +MODULE_LICENSE("GPL"); > diff --git a/include/drm/drm_simple_kms_helper.h b/include/drm/drm_simple_kms_helper.h > new file mode 100644 > index 0000000..2690397 > --- /dev/null > +++ b/include/drm/drm_simple_kms_helper.h > @@ -0,0 +1,94 @@ > +/* > + * 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. > + */ > + > +#ifndef __LINUX_DRM_SIMPLE_KMS_HELPER_H > +#define __LINUX_DRM_SIMPLE_KMS_HELPER_H > + > +struct drm_simple_display_pipe; > + > +/** > + * struct drm_simple_display_pipe_funcs - helper operations for a simple > + * display pipeline > + */ > +struct drm_simple_display_pipe_funcs { > + /** > + * @enable: > + * > + * This function should be used to enable the pipeline. > + * It is called when the underlying crtc is enabled. > + * This hook is optional. > + */ > + void (*enable)(struct drm_simple_display_pipe *pipe, > + struct drm_crtc_state *crtc_state); > + /** > + * @disable: > + * > + * This function should be used to disable the pipeline. > + * It is called when the underlying crtc is disabled. > + * This hook is optional. > + */ > + void (*disable)(struct drm_simple_display_pipe *pipe); > + > + /** > + * @check: > + * > + * This function is called in the check phase of an atomic update, > + * specifically when the underlying plane is checked. > + * The simple display pipeline helpers already check that the plane is > + * not scaled, fills the entire visible area and is always enabled > + * when the crtc is also enabled. > + * This hook is optional. > + * > + * RETURNS: > + * > + * 0 on success, -EINVAL if the state or the transition can't be > + * supported, -ENOMEM on memory allocation failure and -EDEADLK if an > + * attempt to obtain another state object ran into a &drm_modeset_lock > + * deadlock. > + */ > + int (*check)(struct drm_simple_display_pipe *pipe, > + struct drm_plane_state *plane_state, > + struct drm_crtc_state *crtc_state); > + /** > + * @update: > + * > + * This function is called when the underlying plane state is updated. > + * This hook is optional. > + */ > + void (*update)(struct drm_simple_display_pipe *pipe, > + struct drm_plane_state *plane_state); > +}; > + > +/** > + * struct drm_simple_display_pipe - simple display pipeline > + * @crtc: CRTC control structure > + * @plane: Plane control structure > + * @encoder: Encoder control structure > + * @connector: Connector control structure > + * @funcs: Pipeline control functions (optional) > + * > + * Simple display pipeline with plane, crtc and encoder collapsed into one > + * entity. It should be initialized by calling drm_simple_display_pipe_init(). > + */ > +struct drm_simple_display_pipe { > + struct drm_crtc crtc; > + struct drm_plane plane; > + struct drm_encoder encoder; > + struct drm_connector *connector; > + > + const struct drm_simple_display_pipe_funcs *funcs; > +}; > + > +int drm_simple_display_pipe_init(struct drm_device *dev, > + struct drm_simple_display_pipe *pipe, > + const struct drm_simple_display_pipe_funcs *funcs, > + const uint32_t *formats, unsigned int format_count, > + struct drm_connector *connector); > + > +#endif /* __LINUX_DRM_SIMPLE_KMS_HELPER_H */ > -- > 2.8.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrjälä Intel OTC