From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: Re: [PATCH v3 2/4] drm/rockchip: add an common abstracted PSR driver Date: Fri, 8 Jul 2016 10:12:34 +0800 Message-ID: <577F0C12.60208@rock-chips.com> References: <1467364685-21390-1-git-send-email-ykk@rock-chips.com> <1467364754-21674-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: 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: Sean Paul Cc: Krzysztof Kozlowski , linux-samsung-soc , linux-rockchip@lists.infradead.org, Mark Yao , Daniel Vetter , Emil Velikov , Doug Anderson , dri-devel , Tomasz Figa , Javier Martinez Canillas , Jingoo Han , =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Thierry Reding , Linux Kernel Mailing List List-Id: linux-rockchip.vger.kernel.org U2VhbiwKCk9uIDA3LzAyLzIwMTYgMDI6MDAgQU0sIFNlYW4gUGF1bCB3cm90ZToKPiBPbiBGcmks IEp1bCAxLCAyMDE2IGF0IDU6MTkgQU0sIFlha2lyIFlhbmcgPHlra0Byb2NrLWNoaXBzLmNvbT4g d3JvdGU6Cj4+IFRoZSBQU1IgZHJpdmVyIGhhdmUgZXhwb3J0ZWQgZm91ciBzeW1ib2xzIGZvciBz cGVjaWZpYyBkZXZpY2UgZHJpdmVyOgo+PiAtIHJvY2tjaGlwX2RybV9wc3JfcmVnaXN0ZXIoKQo+ PiAtIHJvY2tjaGlwX2RybV9wc3JfdW5yZWdpc3RlcigpCj4+IC0gcm9ja2NoaXBfZHJtX3Bzcl9l bmFibGUoKQo+PiAtIHJvY2tjaGlwX2RybV9wc3JfZGlzYWJsZSgpCj4+IC0gcm9ja2NoaXBfZHJt X3Bzcl9mbHVzaCgpCj4+Cj4+IEVuY29kZXIgZHJpdmVyIHNob3VsZCBjYWxsIHRoZSByZWdpc3Rl ci91bnJlZ2lzdGVyIGludGVyZmFjZXMgdG8gaG9vawo+PiBpdHNlbGYgaW50byBjb21tb24gUFNS IGRyaXZlciwgZW5jb2RlciBoYXZlIGltcGxlbWVudCB0aGUgJ3Bzcl9zZXQnCj4+IGNhbGxiYWNr IHdoaWNoIHVzZSB0aGUgc2V0IFBTUiBzdGF0ZSBpbiBoYXJkd2FyZSBzaWRlLgo+Pgo+PiBDcnRj IGRyaXZlciB3b3VsZCBjYWxsIHRoZSBlbmFibGUvZGlzYWJsZSBpbnRlcmZhY2VzIHdoZW4gdmJs YW5rIGlzCj4+IGVuYWJsZS9kaXNhYmxlLCBhZnRlciB0aGF0IHRoZSBjb21tb24gUFNSIGRyaXZl ciB3b3VsZCBjYWxsIHRoZSBlbmNvZGVyCj4+IHJlZ2lzdGVyZWQgY2FsbGJhY2sgdG8gc2V0IHRo ZSBQU1Igc3RhdGUuCj4+Cj4gVGhpcyBmZWVscyBvdmVybHkgY29tcGxpY2F0ZWQuIEl0IHNlZW1z IGxpa2UgeW91IGNvdWxkIGN1dCBvdXQgYSBidW5jaAo+IG9mIGNvZGUgYnkganVzdCBjb2Rpbmcg dGhlIHBzciBmdW5jdGlvbnMgaW50byB2b3AgYW5kCj4gYW5hbG9naXhfZHAtcm9ja2NoaXAuIEkg c3VwcG9zZSB0aGUgb25seSByZWFzb24gdG8ga2VlcCBpdCBhYnN0cmFjdGVkCj4gd291bGQgYmUg aWYgeW91IHBsYW4gb24gc3VwcG9ydGluZyBwc3IgaW4gYSBkaWZmZXJlbnQgZW5jb2RlciBvciBj cnRjCj4gaW4gcm9ja2NoaXAsIG9yIGlmIHlvdSdyZSBwbGFubmluZyBvbiBtb3ZpbmcgdGhpcyBp bnRvIGRybSBjb3JlLgoKSSBzcGxpdCB0aGUgcHNyIGNvZGUgaW50byBhIHNlcGFyYXRlIGRyaXZl ciwgY2F1c2UgaXQgc2VlbXMgbWFrZSB0aGluZ3MgCm1vcmUgY2xlYXJseS4KCidyb2NrY2hpcF9k cm1fdm9wLmMnIG5lZWQgdG8gY2FsbCB0aGUgUFNSIGVuYWJsZS9kaXNhYmxlIGludGVyZmFjZXMs IGFuZCAKJ3JvY2tjaGlwX2RybV9kcnYuYycgbmVlZCB0byBjYWxsIHRoZSBQU1IgZmx1c2ggaW50 ZXJmYWNlLiBJZiBJIHB1dCB0aGUgCndob2xlIHBzciBjb2RlIGludG8gYW5hbG9naXhfZHAtcm9j a2NoaXAgZHJpdmVyLCB0aGVuIHRoZSBSb2NrY2hpcCBkcm0gCmNvcmUgZHJpdmVyIHdvdWxkIHRp ZSB0byBhbmFsb2dpeF9kcC1yb2NrY2hpcCBkcml2ZXIgdmVyeSBkZWVwbHksIGFuZCAKaGFyZCB0 byBleHBhbmQgaWYgdGhlcmUgYXJlIHR3byBQU1IgZGV2aWNlIGluIGZ1cnRoZXIuCgo+IFBlcmhh cHMgb3RoZXJzIHdpbGwgZGlzYWdyZWUgd2l0aCB0aGlzIHNlbnRpbWVudCBhbmQgdGhpcyBpcyB0 aGUgcmlnaHQKPiB0aGluZyB0byBkby4KPgo+PiBGYiBkcml2ZXIgd291bGQgY2FsbCB0aGUgZmx1 c2ggaW50ZXJmYWNlIGluICdmYi0+ZGlydHknIGNhbGxiYWNrLCB0aGlzCj4+IGhlbHBlciBmdW5j dGlvbiB3b3VsZCBmb3JjZSBhbGwgUFNSIGVuYWJsZWQgZW5jb2RlcnMgdG8gZXhpdCBmcm9tIFBT Ugo+PiBmb3IgMyBzZWNvbmRzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBZYWtpciBZYW5nIDx5a2tA cm9jay1jaGlwcy5jb20+Cj4+IC0tLQo+PiBDaGFuZ2VzIGluIHYzOgo+PiAtIHNwbGl0IHRoZSBw c3IgZmxvdyBpbnRvIGFuIGNvbW1vbiBhYnN0cmFjdGVkIFBTUiBkcml2ZXIKPj4gLSBpbXBsZW1l bnQgdGhlICdmYi0+ZGlydHknIGNhbGxiYWNrIGZ1bmN0aW9uIChEYW5pZWwpCj4+IC0gYXZvaWQg dG8gdXNlIG5vdGlmeSB0byBhY3FpdXJlIGZvciB2YWN0IGV2ZW50IChEYW5pZWwpCj4+IC0gcmVt b3ZlIHBzcl9hY3RpdmUoKSBjYWxsYmFjayB3aGljaCBpbnRyb2R1Y2UgaW4gdjIKPj4KPj4gQ2hh bmdlcyBpbiB2MjogTm9uZQo+Pgo+PiAgIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmls ZSAgICAgICAgICAgfCAgIDIgKy0KPj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX2ZiLmMgIHwgIDEyICsrCj4+ICAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9wc3IuYyB8IDIwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3IuaCB8ICAxMiArKwo+PiAgIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgMjQgKysrKwo+PiAg IDUgZmlsZXMgY2hhbmdlZCwgMjQ5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9w c3IuYwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3Bzci5oCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPj4gaW5kZXgg MDVkMDcxMy4uOTc0NjM2NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZQo+PiBA QCAtMyw3ICszLDcgQEAKPj4gICAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERS SSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgo+Pgo+PiAgIHJvY2tjaGlwZHJtLXkgOj0g cm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIFwKPj4gLSAgICAgICAgICAgICAg IHJvY2tjaGlwX2RybV9nZW0ubyByb2NrY2hpcF9kcm1fdm9wLm8KPj4gKyAgICAgICAgICAgICAg IHJvY2tjaGlwX2RybV9nZW0ubyByb2NrY2hpcF9kcm1fcHNyLm8gcm9ja2NoaXBfZHJtX3ZvcC5v Cj4+ICAgcm9ja2NoaXBkcm0tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gcm9ja2No aXBfZHJtX2ZiZGV2Lm8KPj4KPj4gICBvYmotJChDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFAp ICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZmIuYwo+PiBpbmRleCAyMGYxMmJjLi4wZmVjMThmIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9mYi5jCj4+IEBAIC0yMSw2ICsyMSw3 IEBACj4+Cj4+ICAgI2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKPj4gICAjaW5jbHVkZSAi cm9ja2NoaXBfZHJtX2dlbS5oIgo+PiArI2luY2x1ZGUgInJvY2tjaGlwX2RybV9wc3IuaCIKPj4K Pj4gICAjZGVmaW5lIHRvX3JvY2tjaGlwX2ZiKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgcm9j a2NoaXBfZHJtX2ZiLCBmYikKPj4KPj4gQEAgLTY2LDkgKzY3LDIwIEBAIHN0YXRpYyBpbnQgcm9j a2NoaXBfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9ja2NoaXBfZmItPm9ialsw XSwgaGFuZGxlKTsKPj4gICB9Cj4+Cj4+ICtzdGF0aWMgaW50IHJvY2tjaGlwX2RybV9mYl9kaXJ0 eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjb2xvciwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBz LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2Ns aXBzKQo+PiArewo+PiArICAgICAgIHJvY2tjaGlwX2RybV9wc3JfZmx1c2goKTsKPj4gKyAgICAg ICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyX2Z1bmNzIHJvY2tjaGlwX2RybV9mYl9mdW5jcyA9IHsKPj4gICAgICAgICAgLmRlc3Ry b3kgICAgICAgID0gcm9ja2NoaXBfZHJtX2ZiX2Rlc3Ryb3ksCj4+ICAgICAgICAgIC5jcmVhdGVf aGFuZGxlICA9IHJvY2tjaGlwX2RybV9mYl9jcmVhdGVfaGFuZGxlLAo+PiArICAgICAgIC5kaXJ0 eSAgICAgICAgICA9IHJvY2tjaGlwX2RybV9mYl9kaXJ0eSwKPj4gICB9Owo+Pgo+PiAgIHN0YXRp YyBzdHJ1Y3Qgcm9ja2NoaXBfZHJtX2ZiICoKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fcHNyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3Bzci5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAuLmMwNDQ0NDMKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5jCj4+IEBAIC0wLDAgKzEsMjAwIEBACj4+ICsjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArCj4+ICsjaW5jbHVkZSAicm9ja2NoaXBfZHJt X3Bzci5oIgo+PiArCj4+ICsjZGVmaW5lIFBTUl9GTFVTSF9USU1FT1VUICAgICAgbXNlY3NfdG9f amlmZmllcygzMDAwKSAvKiAzIHNlY29uZHMgKi8KPj4gKwo+PiArc3RhdGljIExJU1RfSEVBRChw c3JfbGlzdCk7Cj4+ICtzdGF0aWMgREVGSU5FX01VVEVYKHBzcl9saXN0X211dGV4KTsKPiBJJ20g bm90IGNyYXp5IGFib3V0IHRoZXNlIGdsb2JhbHMuIFBlcmhhcHMgeW91IGNhbiBpbml0aWFsaXpl IHRoZW0KPiB3aXRoIHRoZSByb2NrY2hpcCBkcml2ZXIgYW5kIHR1Y2sgdGhlbSBpbiBhIGRyaXZl ci1sZXZlbCBzdHJ1Y3QKPiAocm9ja2NoaXBfZHJtX3ByaXZhdGUgb3Igc29tZXRoaW5nKS4KCk9r YXksIGRvbmUuCgo+Cj4+ICsKPj4gK2VudW0gcHNyX3N0YXRlIHsKPj4gKyAgICAgICBQU1JfRkxV U0gsCj4+ICsgICAgICAgUFNSX0VOQUJMRSwKPj4gKyAgICAgICBQU1JfRElTQUJMRSwKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBwc3JfZHJ2IHsKPj4gKyAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxp c3Q7Cj4+ICsgICAgICAgZW51bSBwc3Jfc3RhdGUgc3RhdGU7Cj4+ICsgICAgICAgc3RydWN0IG11 dGV4IHN0YXRlX211dGV4Owo+PiArCj4+ICsgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgZmx1c2hf dGltZXI7Cj4+ICsKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4+ICsg ICAgICAgaW50ICgqc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgZW5hYmxl KTsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcHNyX2RydiAqZmluZF9wc3JfYnlfY3J0 YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IHBzcl9kcnYg KnBzcjsKPj4gKwo+PiArICAgICAgIG11dGV4X2xvY2soJnBzcl9saXN0X211dGV4KTsKPj4gKyAg ICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBzciwgJnBzcl9saXN0LCBsaXN0KSB7Cj4+ICsgICAg ICAgICAgICAgICBpZiAocHNyLT5lbmNvZGVyLT5jcnRjID09IGNydGMpIHsKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZwc3JfbGlzdF9tdXRleCk7Cj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBwc3I7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsgICAg ICAgfQo+PiArICAgICAgIG11dGV4X3VubG9jaygmcHNyX2xpc3RfbXV0ZXgpOwo+PiArCj4+ICsg ICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IHBzcl9lbmFibGUoc3RydWN0IHBzcl9kcnYgKnBzcikKPj4gK3sKPj4gKyAgICAgICBpZiAocHNy LT5zdGF0ZSA9PSBQU1JfRU5BQkxFKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+IFNob3Vs ZCB5b3UgYmUgd29ycmllZCBhYm91dCByYWNlcyBieSBhY2Nlc3NpbmcgdGhpcyBvdXRzaWRlIG9m IHRoZSBzdGF0ZSBtdXRleD8KPgoKWWVzLCB0aGlzIHNob3VsZCB1bmRlciB0aGUgcHJvdGVjdCBv ZiBzdGF0ZV9tdXRleC4KCj4+ICsKPj4gKyAgICAgICBtdXRleF9sb2NrKCZwc3ItPnN0YXRlX211 dGV4KTsKPj4gKyAgICAgICBwc3ItPnN0YXRlID0gUFNSX0VOQUJMRTsKPj4gKyAgICAgICBwc3It PnNldChwc3ItPmVuY29kZXIsIHRydWUpOwo+PiArICAgICAgIG11dGV4X3VubG9jaygmcHNyLT5z dGF0ZV9tdXRleCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHBzcl9kaXNhYmxlKHN0cnVj dCBwc3JfZHJ2ICpwc3IpCj4+ICt7Cj4+ICsgICAgICAgaWYgKHBzci0+c3RhdGUgPT0gUFNSX0RJ U0FCTEUpCj4+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4+ICsKPj4gKyAgICAgICBtdXRleF9s b2NrKCZwc3ItPnN0YXRlX211dGV4KTsKPj4gKyAgICAgICBwc3ItPnN0YXRlID0gUFNSX0RJU0FC TEU7Cj4+ICsgICAgICAgcHNyLT5zZXQocHNyLT5lbmNvZGVyLCBmYWxzZSk7Cj4+ICsgICAgICAg bXV0ZXhfdW5sb2NrKCZwc3ItPnN0YXRlX211dGV4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgcHNyX2ZsdXNoX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQo+PiArewo+PiArICAgICAg IHN0cnVjdCBwc3JfZHJ2ICpwc3IgPSAoc3RydWN0IHBzcl9kcnYgKilkYXRhOwo+PiArCj4+ICsg ICAgICAgaWYgKCFwc3IgfHwgcHNyLT5zdGF0ZSAhPSBQU1JfRkxVU0gpCj4+ICsgICAgICAgICAg ICAgICByZXR1cm47Cj4+ICsKPj4gKyAgICAgICBwc3JfZW5hYmxlKHBzcik7Cj4+ICt9Cj4+ICsK Pj4gKy8qKgo+PiArICogcm9ja2NoaXBfZHJtX3Bzcl9lbmFibGUgLSBlbmFibGUgdGhlIGVuY29k ZXIgUFNSIHdoaWNoIGJpbmQgdG8gZ2l2ZW4gQ1JUQwo+PiArICogQGNydGM6IENSVEMgdG8gb2J0 YWluIHRoZSBQU1IgZW5jb2Rlcgo+PiArICoKPj4gKyAqIFJldHVybnM6Cj4+ICsgKiBaZXJvIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4+ICsgKi8KPj4gK2ludCByb2Nr Y2hpcF9kcm1fcHNyX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICt7Cj4+ICsgICAg ICAgc3RydWN0IHBzcl9kcnYgKnBzciA9IGZpbmRfcHNyX2J5X2NydGMoY3J0Yyk7Cj4+ICsKPj4g KyAgICAgICBpZiAoSVNfRVJSKHBzcikpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VS Uihwc3IpOwo+PiArCj4+ICsgICAgICAgcHNyX2VuYWJsZShwc3IpOwo+PiArICAgICAgIHJldHVy biAwOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTChyb2NrY2hpcF9kcm1fcHNyX2VuYWJsZSk7Cj4+ ICsKPj4gKy8qKgo+PiArICogcm9ja2NoaXBfZHJtX3Bzcl9kaXNhYmxlIC0gZGlzYWJsZSB0aGUg ZW5jb2RlciBQU1Igd2hpY2ggYmluZCB0byBnaXZlbiBDUlRDCj4+ICsgKiBAY3J0YzogQ1JUQyB0 byBvYnRhaW4gdGhlIFBTUiBlbmNvZGVyCj4+ICsgKgo+PiArICogUmV0dXJuczoKPj4gKyAqIFpl cm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPj4gKyAqLwo+PiAraW50 IHJvY2tjaGlwX2RybV9wc3JfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICt7Cj4+ ICsgICAgICAgc3RydWN0IHBzcl9kcnYgKnBzciA9IGZpbmRfcHNyX2J5X2NydGMoY3J0Yyk7Cj4+ ICsKPj4gKyAgICAgICBpZiAoSVNfRVJSKHBzcikpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4g UFRSX0VSUihwc3IpOwo+PiArCj4+ICsgICAgICAgcHNyX2Rpc2FibGUocHNyKTsKPj4gKyAgICAg ICByZXR1cm4gMDsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0wocm9ja2NoaXBfZHJtX3Bzcl9kaXNh YmxlKTsKPj4gKwo+PiArLyoqCj4+ICsgKiByb2NrY2hpcF9kcm1fcHNyX2ZsdXNoIC0gZm9yY2Ug dG8gZmx1c2ggYWxsIHJlZ2lzdGVyZWQgUFNSIGVuY29kZXJzCj4+ICsgKgo+PiArICogRGlzYWJs ZSB0aGUgUFNSIGZ1bmN0aW9uIGZvciBhbGwgcmVnaXN0ZXJlZCBlbmNvZGVycywgYW5kIHRoZW4g ZW5hYmxlIHRoZQo+PiArICogUFNSIGZ1bmN0aW9uIGJhY2sgYWZ0ZXIgNSBzZWNvbmQuIElmIGVu Y29kZXIgUFNSIHN0YXRlIGhhdmUgYmVlbiBjaGFuZ2VkCj4gcy81IHNlY29uZC9QU1JfRkxVU0hf VElNRU9VVC8KCkRvbmUKCj4KPj4gKyAqIGR1cmluZyBmbHVzaCB0aW1lLCB0aGVuIGtlZXAgdGhl IHN0YXRlIG5vIGNoYW5nZSBhZnRlciBmbHVzaCB0aW1lb3V0Lgo+PiArICoKPj4gKyAqIFJldHVy bnM6Cj4+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4+ ICsgKi8KPj4gK3ZvaWQgcm9ja2NoaXBfZHJtX3Bzcl9mbHVzaCh2b2lkKQo+PiArewo+PiArICAg ICAgIHN0cnVjdCBwc3JfZHJ2ICpwc3I7Cj4+ICsKPj4gKyAgICAgICBtdXRleF9sb2NrKCZwc3Jf bGlzdF9tdXRleCk7Cj4+ICsgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShwc3IsICZwc3JfbGlz dCwgbGlzdCkgewo+PiArICAgICAgICAgICAgICAgaWYgKHBzci0+c3RhdGUgPT0gUFNSX0RJU0FC TEUpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArCj4+ICsgICAgICAg ICAgICAgICBtb2RfdGltZXIoJnBzci0+Zmx1c2hfdGltZXIsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgcm91bmRfamlmZmllc191cChqaWZmaWVzICsgUFNSX0ZMVVNIX1RJTUVPVVQpKTsK Pj4gKwo+PiArICAgICAgICAgICAgICAgcHNyX2Rpc2FibGUocHNyKTsKPj4gKyAgICAgICAgICAg ICAgIHBzci0+c3RhdGUgPSBQU1JfRkxVU0g7Cj4gVGhpcyBpcyBzZXQgb3V0c2lkZSBvZiBzdGF0 ZV9tdXRleCwgaXMgdGhhdCBpbnRlbnRpb25hbD8KCk5vLCBJIGp1c3QgZG9uJ3Qgd2FudCB0byBj cmVhdGUgYW5vdGhlciBpbnRlcmZhY2UgbGlrZSBwc3JfZmx1c2goKS4gQnV0IAppdCdzIGEgYmFk IGlkZWEgdG8gbGV0ICdzdGF0ZScgY2hhbmdlIG91dHNpZGUgdGhlIHByb3RlY3Qgb2YgJ3N0YXRl X211dGV4Jy4KClRoYW5rcywKLSBZYWtpcgoKPj4gKyAgICAgICB9Cj4+ICsgICAgICAgbXV0ZXhf dW5sb2NrKCZwc3JfbGlzdF9tdXRleCk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MKHJvY2tjaGlw X2RybV9wc3JfZmx1c2gpOwo+PiArCj4+ICsvKioKPj4gKyAqIHJvY2tjaGlwX2RybV9wc3JfcmVn aXN0ZXIgLSByZWdpc3RlciBlbmNvZGVyIHRvIHBzciBkcml2ZXIKPj4gKyAqIEBlbmNvZGVyOiBl bmNvZGVyIHRoYXQgb2J0YWluIHRoZSBQU1IgZnVuY3Rpb24KPj4gKyAqIEBwc3Jfc2V0OiBjYWxs IGJhY2sgdG8gc2V0IFBTUiBzdGF0ZQo+PiArICoKPj4gKyAqIFJldHVybnM6Cj4+ICsgKiBaZXJv IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4+ICsgKi8KPj4gK2ludCBy b2NrY2hpcF9kcm1fcHNyX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqcHNyX3NldCkoc3RydWN0IGRybV9l bmNvZGVyICosIGJvb2wgZW5hYmxlKSkKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgcHNyX2RydiAq cHNyOwo+PiArCj4+ICsgICAgICAgaWYgKCFlbmNvZGVyIHx8ICFwc3Jfc2V0KQo+PiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKyAgICAgICBwc3IgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgcHNyX2RydiksIEdGUF9LRVJORUwpOwo+PiArICAgICAgIGlmICghcHNyKQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAgICBzZXR1cF90 aW1lcigmcHNyLT5mbHVzaF90aW1lciwgcHNyX2ZsdXNoX2hhbmRsZXIsICh1bnNpZ25lZCBsb25n KXBzcik7Cj4+ICsKPj4gKyAgICAgICBtdXRleF9pbml0KCZwc3ItPnN0YXRlX211dGV4KTsKPj4g Kwo+PiArICAgICAgIHBzci0+c3RhdGUgPSBQU1JfRElTQUJMRTsKPj4gKyAgICAgICBwc3ItPmVu Y29kZXIgPSBlbmNvZGVyOwo+PiArICAgICAgIHBzci0+c2V0ID0gcHNyX3NldDsKPj4gKwo+PiAr ICAgICAgIG11dGV4X2xvY2soJnBzcl9saXN0X211dGV4KTsKPj4gKyAgICAgICBsaXN0X2FkZF90 YWlsKCZwc3ItPmxpc3QsICZwc3JfbGlzdCk7Cj4+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZwc3Jf bGlzdF9tdXRleCk7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gMDsKPj4gK30KPj4gK0VYUE9SVF9T WU1CT0wocm9ja2NoaXBfZHJtX3Bzcl9yZWdpc3Rlcik7Cj4+ICsKPj4gKy8qKgo+PiArICogcm9j a2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBlbmNvZGVyIHRvIHBzciBkcml2 ZXIKPj4gKyAqIEBlbmNvZGVyOiBlbmNvZGVyIHRoYXQgb2J0YWluIHRoZSBQU1IgZnVuY3Rpb24K Pj4gKyAqIEBwc3Jfc2V0OiBjYWxsIGJhY2sgdG8gc2V0IFBTUiBzdGF0ZQo+PiArICoKPj4gKyAq IFJldHVybnM6Cj4+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1 cmUuCj4+ICsgKi8KPj4gK3ZvaWQgcm9ja2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgcHNyX2RydiAqcHNy Owo+PiArCj4+ICsgICAgICAgbXV0ZXhfbG9jaygmcHNyX2xpc3RfbXV0ZXgpOwo+PiArICAgICAg IGxpc3RfZm9yX2VhY2hfZW50cnkocHNyLCAmcHNyX2xpc3QsIGxpc3QpIHsKPj4gKyAgICAgICAg ICAgICAgIGlmIChwc3ItPmVuY29kZXIgPT0gZW5jb2Rlcikgewo+PiArICAgICAgICAgICAgICAg ICAgICAgICBkZWxfdGltZXIoJnBzci0+Zmx1c2hfdGltZXIpOwo+PiArICAgICAgICAgICAgICAg ICAgICAgICBsaXN0X2RlbCgmcHNyLT5saXN0KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg a2ZyZWUocHNyKTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICB9Cj4+ICsgICAgICAg bXV0ZXhfdW5sb2NrKCZwc3JfbGlzdF9tdXRleCk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MKHJv Y2tjaGlwX2RybV9wc3JfdW5yZWdpc3Rlcik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV9wc3IuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAw MDAwLi42MjJmNjA1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV9wc3IuaAo+PiBAQCAtMCwwICsxLDEyIEBACj4+ICsjaWZuZGVm IF9fUk9DS0NISVBfRFJNX1BTUl9fXwo+PiArI2RlZmluZSBfX1JPQ0tDSElQX0RSTV9QU1JfX18K Pj4gKwo+PiArdm9pZCByb2NrY2hpcF9kcm1fcHNyX2ZsdXNoKHZvaWQpOwo+PiAraW50IHJvY2tj aGlwX2RybV9wc3JfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4+ICtpbnQgcm9ja2No aXBfZHJtX3Bzcl9kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4+ICsKPj4gK2ludCBy b2NrY2hpcF9kcm1fcHNyX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnBzcl9zZXQpKHN0cnVjdCBkcm1fZW5j b2RlciAqLCBib29sIGVuYWJsZSkpOwo+PiArdm9pZCByb2NrY2hpcF9kcm1fcHNyX3VucmVnaXN0 ZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPj4gKwo+PiArI2VuZGlmIC8qIF9fUk9D S0NISVBfRFJNX1BTUl9fICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX3ZvcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuYwo+PiBpbmRleCBjZDNjYWM1Li4zYzZkZmM1IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKPj4gQEAgLTM0LDYgKzM0LDcgQEAK Pj4gICAjaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgo+PiAgICNpbmNsdWRlICJyb2NrY2hp cF9kcm1fZ2VtLmgiCj4+ICAgI2luY2x1ZGUgInJvY2tjaGlwX2RybV9mYi5oIgo+PiArI2luY2x1 ZGUgInJvY2tjaGlwX2RybV9wc3IuaCIKPj4gICAjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5o Igo+Pgo+PiAgICNkZWZpbmUgX19SRUdfU0VUX1JFTEFYRUQoeCwgb2ZmLCBtYXNrLCBzaGlmdCwg diwgd3JpdGVfbWFzaykgXAo+PiBAQCAtMTIxLDYgKzEyMiw5IEBAIHN0cnVjdCB2b3Agewo+PiAg ICAgICAgICAvKiBwcm90ZWN0ZWQgYnkgZGV2LT5ldmVudF9sb2NrICovCj4+ICAgICAgICAgIHN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50Owo+Pgo+PiArICAgICAgIGJvb2wg cHNyX2VuYWJsZWQ7Cj4+ICsgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayBwc3Jfd29yazsKPj4g Kwo+PiAgICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBsaW5lX2ZsYWdfY29tcGxldGlvbjsKPj4K Pj4gICAgICAgICAgY29uc3Qgc3RydWN0IHZvcF9kYXRhICpkYXRhOwo+PiBAQCAtOTExLDYgKzkx NSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB2b3BfcGxhbmVfZnVu Y3MgPSB7Cj4+ICAgICAgICAgIC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IHZvcF9hdG9taWNfcGxh bmVfZGVzdHJveV9zdGF0ZSwKPj4gICB9Owo+Pgo+PiArc3RhdGljIHZvaWQgdm9wX3Bzcl93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3Qgdm9wICp2 b3AgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp2b3ApLCBwc3Jfd29yay53b3JrKTsKPj4g Kwo+PiArICAgICAgIGlmICh2b3AtPnBzcl9lbmFibGVkKQo+PiArICAgICAgICAgICAgICAgcm9j a2NoaXBfZHJtX3Bzcl9lbmFibGUoJnZvcC0+Y3J0Yyk7Cj4+ICsgICAgICAgZWxzZQo+PiArICAg ICAgICAgICAgICAgcm9ja2NoaXBfZHJtX3Bzcl9kaXNhYmxlKCZ2b3AtPmNydGMpOwo+PiArfQo+ PiArCj4+ICAgc3RhdGljIGludCB2b3BfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPj4gICB7Cj4+ICAgICAgICAgIHN0cnVjdCB2b3AgKnZvcCA9IHRvX3ZvcChjcnRj KTsKPj4gQEAgLTkyNSw2ICs5MzksOSBAQCBzdGF0aWMgaW50IHZvcF9jcnRjX2VuYWJsZV92Ymxh bmsoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+Pgo+PiAgICAgICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ2b3AtPmlycV9sb2NrLCBmbGFncyk7Cj4+Cj4+ICsgICAgICAgdm9wLT5wc3JfZW5h YmxlZCA9IGZhbHNlOwo+PiArICAgICAgIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdm9wLT5wc3Jf d29yaywgbXNlY3NfdG9famlmZmllcygxMCkpOwo+PiArCj4+ICAgICAgICAgIHJldHVybiAwOwo+ PiAgIH0KPj4KPj4gQEAgLTk0MSw2ICs5NTgsOSBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19kaXNh YmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICAgICAgICAgIFZPUF9JTlRSX1NF VF9UWVBFKHZvcCwgZW5hYmxlLCBGU19JTlRSLCAwKTsKPj4KPj4gICAgICAgICAgc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmdm9wLT5pcnFfbG9jaywgZmxhZ3MpOwo+PiArCj4+ICsgICAgICAgdm9w LT5wc3JfZW5hYmxlZCA9IHRydWU7Cj4+ICsgICAgICAgc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2 b3AtPnBzcl93b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7Cj4+ICAgfQo+Pgo+PiAgIHN0YXRp YyB2b2lkIHZvcF9jcnRjX3dhaXRfZm9yX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ IEBAIC0xNTgyLDYgKzE2MDIsMTAgQEAgc3RhdGljIGludCB2b3BfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKPj4gICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Owo+Pgo+PiAgICAgICAgICBwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ ZGV2KTsKPj4gKwo+PiArICAgICAgIHZvcC0+cHNyX2VuYWJsZWQgPSBmYWxzZTsKPj4gKyAgICAg ICBJTklUX0RFTEFZRURfV09SSygmdm9wLT5wc3Jfd29yaywgdm9wX3Bzcl93b3JrKTsKPj4gKwo+ PiAgICAgICAgICByZXR1cm4gMDsKPj4gICB9Cj4+Cj4+IC0tCj4+IDEuOS4xCj4+Cj4+Cj4KPgoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753951AbcGHCMz (ORCPT ); Thu, 7 Jul 2016 22:12:55 -0400 Received: from lucky1.263xmail.com ([211.157.147.134]:33238 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753538AbcGHCMr (ORCPT ); Thu, 7 Jul 2016 22:12:47 -0400 X-263anti-spam: KSV:0; X-MAIL-GRAY: 1 X-MAIL-DELIVERY: 0 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-ADDR-CHECKED: 0 X-RL-SENDER: ykk@rock-chips.com X-FST-TO: linux-rockchip@lists.infradead.org X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: ykk@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Subject: Re: [PATCH v3 2/4] drm/rockchip: add an common abstracted PSR driver To: Sean Paul References: <1467364685-21390-1-git-send-email-ykk@rock-chips.com> <1467364754-21674-1-git-send-email-ykk@rock-chips.com> Cc: Mark Yao , Inki Dae , Jingoo Han , Heiko Stuebner , Daniel Vetter , =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Tomasz Figa , Doug Anderson , Thierry Reding , Krzysztof Kozlowski , Javier Martinez Canillas , David Airlie , Emil Velikov , Linux Kernel Mailing List , dri-devel , linux-samsung-soc , linux-rockchip@lists.infradead.org From: Yakir Yang Message-ID: <577F0C12.60208@rock-chips.com> Date: Fri, 8 Jul 2016 10:12:34 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sean, On 07/02/2016 02:00 AM, Sean Paul wrote: > On Fri, Jul 1, 2016 at 5:19 AM, Yakir Yang wrote: >> The PSR driver have exported four symbols for specific device driver: >> - rockchip_drm_psr_register() >> - rockchip_drm_psr_unregister() >> - rockchip_drm_psr_enable() >> - rockchip_drm_psr_disable() >> - rockchip_drm_psr_flush() >> >> Encoder driver should call the register/unregister interfaces to hook >> itself into common PSR driver, encoder have implement the 'psr_set' >> callback which use the set PSR state in hardware side. >> >> Crtc driver would call the enable/disable interfaces when vblank is >> enable/disable, after that the common PSR driver would call the encoder >> registered callback to set the PSR state. >> > This feels overly complicated. It seems like you could cut out a bunch > of code by just coding the psr functions into vop and > analogix_dp-rockchip. I suppose the only reason to keep it abstracted > would be if you plan on supporting psr in a different encoder or crtc > in rockchip, or if you're planning on moving this into drm core. I split the psr code into a separate driver, cause it seems make things more clearly. 'rockchip_drm_vop.c' need to call the PSR enable/disable interfaces, and 'rockchip_drm_drv.c' need to call the PSR flush interface. If I put the whole psr code into analogix_dp-rockchip driver, then the Rockchip drm core driver would tie to analogix_dp-rockchip driver very deeply, and hard to expand if there are two PSR device in further. > Perhaps others will disagree with this sentiment and this is the right > thing to do. > >> Fb driver would call the flush interface in 'fb->dirty' callback, this >> helper function would force all PSR enabled encoders to exit from PSR >> for 3 seconds. >> >> Signed-off-by: Yakir Yang >> --- >> Changes in v3: >> - split the psr flow into an common abstracted PSR driver >> - implement the 'fb->dirty' callback function (Daniel) >> - avoid to use notify to acqiure for vact event (Daniel) >> - remove psr_active() callback which introduce in v2 >> >> Changes in v2: None >> >> drivers/gpu/drm/rockchip/Makefile | 2 +- >> drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 12 ++ >> drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 200 ++++++++++++++++++++++++++++ >> drivers/gpu/drm/rockchip/rockchip_drm_psr.h | 12 ++ >> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 24 ++++ >> 5 files changed, 249 insertions(+), 1 deletion(-) >> create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_psr.c >> create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_psr.h >> >> diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile >> index 05d0713..9746365 100644 >> --- a/drivers/gpu/drm/rockchip/Makefile >> +++ b/drivers/gpu/drm/rockchip/Makefile >> @@ -3,7 +3,7 @@ >> # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. >> >> rockchipdrm-y := rockchip_drm_drv.o rockchip_drm_fb.o \ >> - rockchip_drm_gem.o rockchip_drm_vop.o >> + rockchip_drm_gem.o rockchip_drm_psr.o rockchip_drm_vop.o >> rockchipdrm-$(CONFIG_DRM_FBDEV_EMULATION) += rockchip_drm_fbdev.o >> >> obj-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> index 20f12bc..0fec18f 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> @@ -21,6 +21,7 @@ >> >> #include "rockchip_drm_drv.h" >> #include "rockchip_drm_gem.h" >> +#include "rockchip_drm_psr.h" >> >> #define to_rockchip_fb(x) container_of(x, struct rockchip_drm_fb, fb) >> >> @@ -66,9 +67,20 @@ static int rockchip_drm_fb_create_handle(struct drm_framebuffer *fb, >> rockchip_fb->obj[0], handle); >> } >> >> +static int rockchip_drm_fb_dirty(struct drm_framebuffer *fb, >> + struct drm_file *file, >> + unsigned int flags, unsigned int color, >> + struct drm_clip_rect *clips, >> + unsigned int num_clips) >> +{ >> + rockchip_drm_psr_flush(); >> + return 0; >> +} >> + >> static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs = { >> .destroy = rockchip_drm_fb_destroy, >> .create_handle = rockchip_drm_fb_create_handle, >> + .dirty = rockchip_drm_fb_dirty, >> }; >> >> static struct rockchip_drm_fb * >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c >> new file mode 100644 >> index 0000000..c044443 >> --- /dev/null >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c >> @@ -0,0 +1,200 @@ >> +#include >> + >> +#include "rockchip_drm_psr.h" >> + >> +#define PSR_FLUSH_TIMEOUT msecs_to_jiffies(3000) /* 3 seconds */ >> + >> +static LIST_HEAD(psr_list); >> +static DEFINE_MUTEX(psr_list_mutex); > I'm not crazy about these globals. Perhaps you can initialize them > with the rockchip driver and tuck them in a driver-level struct > (rockchip_drm_private or something). Okay, done. > >> + >> +enum psr_state { >> + PSR_FLUSH, >> + PSR_ENABLE, >> + PSR_DISABLE, >> +}; >> + >> +struct psr_drv { >> + struct list_head list; >> + enum psr_state state; >> + struct mutex state_mutex; >> + >> + struct timer_list flush_timer; >> + >> + struct drm_encoder *encoder; >> + int (*set)(struct drm_encoder *encoder, bool enable); >> +}; >> + >> +static struct psr_drv *find_psr_by_crtc(struct drm_crtc *crtc) >> +{ >> + struct psr_drv *psr; >> + >> + mutex_lock(&psr_list_mutex); >> + list_for_each_entry(psr, &psr_list, list) { >> + if (psr->encoder->crtc == crtc) { >> + mutex_unlock(&psr_list_mutex); >> + return psr; >> + } >> + } >> + mutex_unlock(&psr_list_mutex); >> + >> + return ERR_PTR(-ENODEV); >> +} >> + >> +static void psr_enable(struct psr_drv *psr) >> +{ >> + if (psr->state == PSR_ENABLE) >> + return; > Should you be worried about races by accessing this outside of the state mutex? > Yes, this should under the protect of state_mutex. >> + >> + mutex_lock(&psr->state_mutex); >> + psr->state = PSR_ENABLE; >> + psr->set(psr->encoder, true); >> + mutex_unlock(&psr->state_mutex); >> +} >> + >> +static void psr_disable(struct psr_drv *psr) >> +{ >> + if (psr->state == PSR_DISABLE) >> + return; >> + >> + mutex_lock(&psr->state_mutex); >> + psr->state = PSR_DISABLE; >> + psr->set(psr->encoder, false); >> + mutex_unlock(&psr->state_mutex); >> +} >> + >> +static void psr_flush_handler(unsigned long data) >> +{ >> + struct psr_drv *psr = (struct psr_drv *)data; >> + >> + if (!psr || psr->state != PSR_FLUSH) >> + return; >> + >> + psr_enable(psr); >> +} >> + >> +/** >> + * rockchip_drm_psr_enable - enable the encoder PSR which bind to given CRTC >> + * @crtc: CRTC to obtain the PSR encoder >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int rockchip_drm_psr_enable(struct drm_crtc *crtc) >> +{ >> + struct psr_drv *psr = find_psr_by_crtc(crtc); >> + >> + if (IS_ERR(psr)) >> + return PTR_ERR(psr); >> + >> + psr_enable(psr); >> + return 0; >> +} >> +EXPORT_SYMBOL(rockchip_drm_psr_enable); >> + >> +/** >> + * rockchip_drm_psr_disable - disable the encoder PSR which bind to given CRTC >> + * @crtc: CRTC to obtain the PSR encoder >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int rockchip_drm_psr_disable(struct drm_crtc *crtc) >> +{ >> + struct psr_drv *psr = find_psr_by_crtc(crtc); >> + >> + if (IS_ERR(psr)) >> + return PTR_ERR(psr); >> + >> + psr_disable(psr); >> + return 0; >> +} >> +EXPORT_SYMBOL(rockchip_drm_psr_disable); >> + >> +/** >> + * rockchip_drm_psr_flush - force to flush all registered PSR encoders >> + * >> + * Disable the PSR function for all registered encoders, and then enable the >> + * PSR function back after 5 second. If encoder PSR state have been changed > s/5 second/PSR_FLUSH_TIMEOUT/ Done > >> + * during flush time, then keep the state no change after flush timeout. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +void rockchip_drm_psr_flush(void) >> +{ >> + struct psr_drv *psr; >> + >> + mutex_lock(&psr_list_mutex); >> + list_for_each_entry(psr, &psr_list, list) { >> + if (psr->state == PSR_DISABLE) >> + continue; >> + >> + mod_timer(&psr->flush_timer, >> + round_jiffies_up(jiffies + PSR_FLUSH_TIMEOUT)); >> + >> + psr_disable(psr); >> + psr->state = PSR_FLUSH; > This is set outside of state_mutex, is that intentional? No, I just don't want to create another interface like psr_flush(). But it's a bad idea to let 'state' change outside the protect of 'state_mutex'. Thanks, - Yakir >> + } >> + mutex_unlock(&psr_list_mutex); >> +} >> +EXPORT_SYMBOL(rockchip_drm_psr_flush); >> + >> +/** >> + * rockchip_drm_psr_register - register encoder to psr driver >> + * @encoder: encoder that obtain the PSR function >> + * @psr_set: call back to set PSR state >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int rockchip_drm_psr_register(struct drm_encoder *encoder, >> + int (*psr_set)(struct drm_encoder *, bool enable)) >> +{ >> + struct psr_drv *psr; >> + >> + if (!encoder || !psr_set) >> + return -EINVAL; >> + >> + psr = kzalloc(sizeof(struct psr_drv), GFP_KERNEL); >> + if (!psr) >> + return -ENOMEM; >> + >> + setup_timer(&psr->flush_timer, psr_flush_handler, (unsigned long)psr); >> + >> + mutex_init(&psr->state_mutex); >> + >> + psr->state = PSR_DISABLE; >> + psr->encoder = encoder; >> + psr->set = psr_set; >> + >> + mutex_lock(&psr_list_mutex); >> + list_add_tail(&psr->list, &psr_list); >> + mutex_unlock(&psr_list_mutex); >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(rockchip_drm_psr_register); >> + >> +/** >> + * rockchip_drm_psr_unregister - unregister encoder to psr driver >> + * @encoder: encoder that obtain the PSR function >> + * @psr_set: call back to set PSR state >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +void rockchip_drm_psr_unregister(struct drm_encoder *encoder) >> +{ >> + struct psr_drv *psr; >> + >> + mutex_lock(&psr_list_mutex); >> + list_for_each_entry(psr, &psr_list, list) { >> + if (psr->encoder == encoder) { >> + del_timer(&psr->flush_timer); >> + list_del(&psr->list); >> + kfree(psr); >> + } >> + } >> + mutex_unlock(&psr_list_mutex); >> +} >> +EXPORT_SYMBOL(rockchip_drm_psr_unregister); >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.h b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h >> new file mode 100644 >> index 0000000..622f605 >> --- /dev/null >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h >> @@ -0,0 +1,12 @@ >> +#ifndef __ROCKCHIP_DRM_PSR___ >> +#define __ROCKCHIP_DRM_PSR___ >> + >> +void rockchip_drm_psr_flush(void); >> +int rockchip_drm_psr_enable(struct drm_crtc *crtc); >> +int rockchip_drm_psr_disable(struct drm_crtc *crtc); >> + >> +int rockchip_drm_psr_register(struct drm_encoder *encoder, >> + int (*psr_set)(struct drm_encoder *, bool enable)); >> +void rockchip_drm_psr_unregister(struct drm_encoder *encoder); >> + >> +#endif /* __ROCKCHIP_DRM_PSR__ */ >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> index cd3cac5..3c6dfc5 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> @@ -34,6 +34,7 @@ >> #include "rockchip_drm_drv.h" >> #include "rockchip_drm_gem.h" >> #include "rockchip_drm_fb.h" >> +#include "rockchip_drm_psr.h" >> #include "rockchip_drm_vop.h" >> >> #define __REG_SET_RELAXED(x, off, mask, shift, v, write_mask) \ >> @@ -121,6 +122,9 @@ struct vop { >> /* protected by dev->event_lock */ >> struct drm_pending_vblank_event *event; >> >> + bool psr_enabled; >> + struct delayed_work psr_work; >> + >> struct completion line_flag_completion; >> >> const struct vop_data *data; >> @@ -911,6 +915,16 @@ static const struct drm_plane_funcs vop_plane_funcs = { >> .atomic_destroy_state = vop_atomic_plane_destroy_state, >> }; >> >> +static void vop_psr_work(struct work_struct *work) >> +{ >> + struct vop *vop = container_of(work, typeof(*vop), psr_work.work); >> + >> + if (vop->psr_enabled) >> + rockchip_drm_psr_enable(&vop->crtc); >> + else >> + rockchip_drm_psr_disable(&vop->crtc); >> +} >> + >> static int vop_crtc_enable_vblank(struct drm_crtc *crtc) >> { >> struct vop *vop = to_vop(crtc); >> @@ -925,6 +939,9 @@ static int vop_crtc_enable_vblank(struct drm_crtc *crtc) >> >> spin_unlock_irqrestore(&vop->irq_lock, flags); >> >> + vop->psr_enabled = false; >> + schedule_delayed_work(&vop->psr_work, msecs_to_jiffies(10)); >> + >> return 0; >> } >> >> @@ -941,6 +958,9 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc) >> VOP_INTR_SET_TYPE(vop, enable, FS_INTR, 0); >> >> spin_unlock_irqrestore(&vop->irq_lock, flags); >> + >> + vop->psr_enabled = true; >> + schedule_delayed_work(&vop->psr_work, msecs_to_jiffies(10)); >> } >> >> static void vop_crtc_wait_for_update(struct drm_crtc *crtc) >> @@ -1582,6 +1602,10 @@ static int vop_bind(struct device *dev, struct device *master, void *data) >> return ret; >> >> pm_runtime_enable(&pdev->dev); >> + >> + vop->psr_enabled = false; >> + INIT_DELAYED_WORK(&vop->psr_work, vop_psr_work); >> + >> return 0; >> } >> >> -- >> 1.9.1 >> >> > >