From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark yao Subject: Re: [RFC PATCH 3/9] drm/rockchip: Convert to support atomic API Date: Tue, 01 Dec 2015 17:21:37 +0800 Message-ID: <565D66A1.7030900@rock-chips.com> References: <1448940391-23333-1-git-send-email-mark.yao@rock-chips.com> <1448940391-23333-4-git-send-email-mark.yao@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: Daniel Stone Cc: Linux Kernel Mailing List , dri-devel , Tomasz Figa , linux-rockchip , "linux-arm-kernel@lists.infradead.org" List-Id: linux-rockchip.vger.kernel.org T24gMjAxNeW5tDEy5pyIMDHml6UgMTY6MTgsIERhbmllbCBTdG9uZSB3cm90ZToKPiBIaSBNYXJr LAo+Cj4gT24gMSBEZWNlbWJlciAyMDE1IGF0IDAzOjI2LCBNYXJrIFlhbyA8bWFyay55YW9Acm9j ay1jaGlwcy5jb20+IHdyb3RlOgo+PiArc3RhdGljIHZvaWQgcm9ja2NoaXBfYXRvbWljX3dhaXRf Zm9yX2NvbXBsZXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPj4gK3sKPj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4+ICsgICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjOwo+PiArICAgICAgIGludCBpOwo+PiArCj4+ICsgICAgICAgZm9yX2Vh Y2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+PiArICAgICAg ICAgICAgICAgaWYgKCFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICAgICAgICAgV0FSTl9PTihkcm1fY3J0Y192 YmxhbmtfZ2V0KGNydGMpKTsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICBmb3JfZWFjaF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4+ICsgICAgICAgICAg ICAgICBpZiAoIWNydGMtPnN0YXRlLT5hY3RpdmUpCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+PiArCj4+ICsgICAgICAgICAgICAgICByb2NrY2hpcF9jcnRjX3dhaXRfZm9y X3VwZGF0ZShjcnRjKTsKPj4gKyAgICAgICB9Cj4gSSdkIGJlIG11Y2ggbW9yZSBjb21mb3J0YWJs ZSBpZiB0aGlzIHBhc3NlZCBpbiBhbiBleHBsaWNpdCBwb2ludGVyIHRvCj4gc3RhdGUsIG9yIGFu IGFkZHJlc3MgdG8gd2FpdCBmb3IsIHJhdGhlciB0aGFuIGhhdmUgd2FpdF9mb3JfY29tcGxldGUK PiBkaWcgb3V0IHN0YXRlIHdpdGggbm8gbG9ja2luZy4gVGhlIGxhdHRlciBpcyBwb3RlbnRpYWxs eSByYWN5IGZvcgo+IGFzeW5jIG9wZXJhdGlvbnMuCj4KPj4gK3N0cnVjdCB2b3BfcGxhbmVfc3Rh dGUgewo+PiArICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgYmFzZTsKPj4gKyAgICAgICBk bWFfYWRkcl90IGRtYV9hZGRyW1JPQ0tDSElQX01BWF9GQl9CVUZGRVJdOwo+IENhbiB5b3UgZ2V0 IHJpZCBvZiB0aGlzIGJ5IGp1c3QgdXNpbmcgdGhlIHBvaW50ZXIgdG8gYQo+IHJvY2tjaGlwX2dl bV9vYmplY3QgYWxyZWFkeSBwcm92aWRlZD8KCkdvb2QgaWRlYSwgSSB3aWxsIGRvIHRoYXQuCgo+ PiAtc3RhdGljIGludCB2b3BfdXBkYXRlX3BsYW5lX2V2ZW50KHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjcnRjX3gsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgY3J0Y195LCB1bnNpZ25lZCBpbnQgY3J0Y193LAo+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNydGNfaCwgdWludDMyX3Qgc3JjX3gs Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNfeSwgdWlu dDMyX3Qgc3JjX3csCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBzcmNfaCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50KQo+PiArc3RhdGljIGludCB2b3BfcGxhbmVfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPj4gICB7Cj4+ICsgICAgICAg c3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNydGM7Cj4+ICsgICAgICAgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7Cj4+ICAgICAgICAgIHN0cnVjdCB2b3Bfd2lu ICp2b3Bfd2luID0gdG9fdm9wX3dpbihwbGFuZSk7Cj4+ICsgICAgICAgc3RydWN0IHZvcF9wbGFu ZV9zdGF0ZSAqdm9wX3BsYW5lX3N0YXRlID0gdG9fdm9wX3BsYW5lX3N0YXRlKHN0YXRlKTsKPj4g ICAgICAgICAgY29uc3Qgc3RydWN0IHZvcF93aW5fZGF0YSAqd2luID0gdm9wX3dpbi0+ZGF0YTsK Pj4gLSAgICAgICBzdHJ1Y3Qgdm9wICp2b3AgPSB0b192b3AoY3J0Yyk7Cj4+ICAgICAgICAgIHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+PiAgICAgICAgICBzdHJ1Y3Qgcm9ja2NoaXBfZ2Vt X29iamVjdCAqcmtfb2JqOwo+PiAtICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqdXZfb2Jq Owo+PiAtICAgICAgIHN0cnVjdCByb2NrY2hpcF9nZW1fb2JqZWN0ICpya191dl9vYmo7Cj4+ICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+PiAtICAgICAgIHVuc2lnbmVkIGludCBhY3R1 YWxfdzsKPj4gLSAgICAgICB1bnNpZ25lZCBpbnQgYWN0dWFsX2g7Cj4+IC0gICAgICAgdW5zaWdu ZWQgaW50IGRzcF9zdHg7Cj4+IC0gICAgICAgdW5zaWduZWQgaW50IGRzcF9zdHk7Cj4+IC0gICAg ICAgdW5zaWduZWQgaW50IHlfdmlyX3N0cmlkZTsKPj4gLSAgICAgICB1bnNpZ25lZCBpbnQgdXZf dmlyX3N0cmlkZSA9IDA7Cj4+IC0gICAgICAgZG1hX2FkZHJfdCB5cmdiX21zdDsKPj4gLSAgICAg ICBkbWFfYWRkcl90IHV2X21zdCA9IDA7Cj4+IC0gICAgICAgZW51bSB2b3BfZGF0YV9mb3JtYXQg Zm9ybWF0Owo+PiAtICAgICAgIHVpbnQzMl90IHZhbDsKPj4gLSAgICAgICBib29sIGlzX2FscGhh Owo+PiAtICAgICAgIGJvb2wgcmJfc3dhcDsKPj4gICAgICAgICAgYm9vbCBpc195dXY7Cj4+ICAg ICAgICAgIGJvb2wgdmlzaWJsZTsKPj4gICAgICAgICAgaW50IHJldDsKPj4gLSAgICAgICBzdHJ1 Y3QgZHJtX3JlY3QgZGVzdCA9IHsKPj4gLSAgICAgICAgICAgICAgIC54MSA9IGNydGNfeCwKPj4g LSAgICAgICAgICAgICAgIC55MSA9IGNydGNfeSwKPj4gLSAgICAgICAgICAgICAgIC54MiA9IGNy dGNfeCArIGNydGNfdywKPj4gLSAgICAgICAgICAgICAgIC55MiA9IGNydGNfeSArIGNydGNfaCwK Pj4gLSAgICAgICB9Owo+PiAtICAgICAgIHN0cnVjdCBkcm1fcmVjdCBzcmMgPSB7Cj4+IC0gICAg ICAgICAgICAgICAvKiAxNi4xNiBmaXhlZCBwb2ludCAqLwo+PiAtICAgICAgICAgICAgICAgLngx ID0gc3JjX3gsCj4+IC0gICAgICAgICAgICAgICAueTEgPSBzcmNfeSwKPj4gLSAgICAgICAgICAg ICAgIC54MiA9IHNyY194ICsgc3JjX3csCj4+IC0gICAgICAgICAgICAgICAueTIgPSBzcmNfeSAr IHNyY19oLAo+PiAtICAgICAgIH07Cj4+IC0gICAgICAgY29uc3Qgc3RydWN0IGRybV9yZWN0IGNs aXAgPSB7Cj4+IC0gICAgICAgICAgICAgICAueDIgPSBjcnRjLT5tb2RlLmhkaXNwbGF5LAo+PiAt ICAgICAgICAgICAgICAgLnkyID0gY3J0Yy0+bW9kZS52ZGlzcGxheSwKPj4gLSAgICAgICB9Owo+ PiAtICAgICAgIGJvb2wgY2FuX3Bvc2l0aW9uID0gcGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWTsKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QgPSAmdm9wX3BsYW5l X3N0YXRlLT5kZXN0Owo+PiArICAgICAgIHN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJnZvcF9wbGFu ZV9zdGF0ZS0+c3JjOwo+PiArICAgICAgIHN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+PiAgICAgICAg ICBpbnQgbWluX3NjYWxlID0gd2luLT5waHktPnNjbCA/IEZSQUNfMTZfMTYoMSwgOCkgOgo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9QTEFORV9IRUxQRVJf Tk9fU0NBTElORzsKPj4gICAgICAgICAgaW50IG1heF9zY2FsZSA9IHdpbi0+cGh5LT5zY2wgPyBG UkFDXzE2XzE2KDgsIDEpIDoKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4+Cj4+IC0gICAgICAgcmV0ID0gZHJt X3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNydGMsIGZiLAo+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKPj4g KyAgICAgICBjcnRjID0gY3J0YyA/IGNydGMgOiBwbGFuZS0+c3RhdGUtPmNydGM7Cj4+ICsgICAg ICAgLyoKPj4gKyAgICAgICAgKiBCb3RoIGNydGMgb3IgcGxhbmUtPnN0YXRlLT5jcnRjIGNhbiBi ZSBudWxsLgo+PiArICAgICAgICAqLwo+PiArICAgICAgIGlmICghY3J0YyB8fCAhZmIpCj4+ICsg ICAgICAgICAgICAgICBnb3RvIG91dF9kaXNhYmxlOwo+PiArICAgICAgIHNyYy0+eDEgPSBzdGF0 ZS0+c3JjX3g7Cj4+ICsgICAgICAgc3JjLT55MSA9IHN0YXRlLT5zcmNfeTsKPj4gKyAgICAgICBz cmMtPngyID0gc3RhdGUtPnNyY194ICsgc3RhdGUtPnNyY193Owo+PiArICAgICAgIHNyYy0+eTIg PSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3JjX2g7Cj4+ICsgICAgICAgZGVzdC0+eDEgPSBzdGF0 ZS0+Y3J0Y194Owo+PiArICAgICAgIGRlc3QtPnkxID0gc3RhdGUtPmNydGNfeTsKPj4gKyAgICAg ICBkZXN0LT54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0Y193Owo+PiArICAgICAgIGRl c3QtPnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2g7Cj4+ICsKPj4gKyAgICAgICBj bGlwLngxID0gMDsKPj4gKyAgICAgICBjbGlwLnkxID0gMDsKPj4gKyAgICAgICBjbGlwLngyID0g Y3J0Yy0+bW9kZS5oZGlzcGxheTsKPj4gKyAgICAgICBjbGlwLnkyID0gY3J0Yy0+bW9kZS52ZGlz cGxheTsKPj4gKwo+PiArICAgICAgIHJldCA9IGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRl KHBsYW5lLCBjcnRjLCBzdGF0ZS0+ZmIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3JjLCBkZXN0LCAmY2xpcCwKPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWluX3NjYWxlLAo+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2NhbGUsCj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3Bvc2l0aW9uLCBmYWxzZSwgJnZpc2libGUp Owo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRy dWUsICZ2aXNpYmxlKTsKPj4gICAgICAgICAgaWYgKHJldCkKPj4gICAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+Pgo+PiAgICAgICAgICBpZiAoIXZpc2libGUpCj4+IC0gICAgICAgICAgICAg ICByZXR1cm4gMDsKPj4gLQo+PiAtICAgICAgIGlzX2FscGhhID0gaXNfYWxwaGFfc3VwcG9ydChm Yi0+cGl4ZWxfZm9ybWF0KTsKPj4gLSAgICAgICByYl9zd2FwID0gaGFzX3JiX3N3YXBwZWQoZmIt PnBpeGVsX2Zvcm1hdCk7Cj4+IC0gICAgICAgaXNfeXV2ID0gaXNfeXV2X3N1cHBvcnQoZmItPnBp eGVsX2Zvcm1hdCk7Cj4+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9kaXNhYmxlOwo+Pgo+PiAt ICAgICAgIGZvcm1hdCA9IHZvcF9jb252ZXJ0X2Zvcm1hdChmYi0+cGl4ZWxfZm9ybWF0KTsKPj4g LSAgICAgICBpZiAoZm9ybWF0IDwgMCkKPj4gLSAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7 Cj4+ICsgICAgICAgdm9wX3BsYW5lX3N0YXRlLT5mb3JtYXQgPSB2b3BfY29udmVydF9mb3JtYXQo ZmItPnBpeGVsX2Zvcm1hdCk7Cj4+ICsgICAgICAgaWYgKHZvcF9wbGFuZV9zdGF0ZS0+Zm9ybWF0 IDwgMCkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiB2b3BfcGxhbmVfc3RhdGUtPmZvcm1hdDsK Pj4KPj4gLSAgICAgICBvYmogPSByb2NrY2hpcF9mYl9nZXRfZ2VtX29iaihmYiwgMCk7Cj4+IC0g ICAgICAgaWYgKCFvYmopIHsKPj4gLSAgICAgICAgICAgICAgIERSTV9FUlJPUigiZmFpbCB0byBn ZXQgcm9ja2NoaXAgZ2VtIG9iamVjdCBmcm9tIGZyYW1lYnVmZmVyXG4iKTsKPj4gLSAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiAtICAgICAgIH0KPj4gLQo+PiAtICAgICAgIHJrX29i aiA9IHRvX3JvY2tjaGlwX29iaihvYmopOwo+PiArICAgICAgIGlzX3l1diA9IGlzX3l1dl9zdXBw b3J0KGZiLT5waXhlbF9mb3JtYXQpOwo+Pgo+PiAgICAgICAgICBpZiAoaXNfeXV2KSB7Cj4+ICAg ICAgICAgICAgICAgICAgLyoKPj4gICAgICAgICAgICAgICAgICAgKiBTcmMueDEgY2FuIGJlIG9k ZCB3aGVuIGRvIGNsaXAsIGJ1dCB5dXYgcGxhbmUgc3RhcnQgcG9pbnQKPj4gICAgICAgICAgICAg ICAgICAgKiBuZWVkIGFsaWduIHdpdGggMiBwaXhlbC4KPj4gICAgICAgICAgICAgICAgICAgKi8K Pj4gLSAgICAgICAgICAgICAgIHZhbCA9IChzcmMueDEgPj4gMTYpICUgMjsKPj4gLSAgICAgICAg ICAgICAgIHNyYy54MSArPSB2YWwgPDwgMTY7Cj4+IC0gICAgICAgICAgICAgICBzcmMueDIgKz0g dmFsIDw8IDE2Owo+PiArICAgICAgICAgICAgICAgdWludDMyX3QgdGVtcCA9IChzcmMtPngxID4+ IDE2KSAlIDI7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIHNyYy0+eDEgKz0gdGVtcCA8PCAxNjsK Pj4gKyAgICAgICAgICAgICAgIHNyYy0+eDIgKz0gdGVtcCA8PCAxNjsKPj4gICAgICAgICAgfQo+ IEkga25vdyB0aGlzIGlzbid0IG5ldywgYnV0IG1vdmluZyB0aGUgcGxhbmUgYXJvdW5kIGlzIGJh ZC4gSWYgdGhlIHVzZXIKPiBnaXZlcyB5b3UgYSBwaXhlbCBib3VuZGFyeSB0aGF0IHlvdSBjYW4n dCBhY3R1YWxseSB1c2UsIHBsZWFzZSByZWplY3QKPiB0aGUgY29uZmlndXJhdGlvbiByYXRoZXIg dGhhbiBzaWxlbnRseSB0cnlpbmcgdG8gZml4IGl0IHVwLgoKdGhlIG9yaWdpbiBzcmMueDEgd291 bGQgYWxpZ24gd2l0aCAyIHBpeGVsLCBidXQgd2hlbiB3ZSBtb3ZlIHRoZSBkZXN0IAp3aW5kb3cs IGFuZCBkbyBjbGlwIGJ5IG91dHB1dCwgdGhlIHNyYy54MSBtYXkgYmUgY2xpcHBlZCB0byBvZGQu CnJlZ2VjdCB0aGlzIGNvbmZpZ3VyYXRpb24gbWF5IGxldCB1c2VyIGNvbmZ1c2UsIHNvbWV0aW1l cyBnb29kLCAKc29tZXRpbWVzIGJhZC4KCj4+IC1zdGF0aWMgdm9pZCB2b3BfcGxhbmVfZGVzdHJv eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gK3N0YXRpYyB2b2lkIHZvcF9hdG9taWNfcGxh bmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0 YXRlKQo+PiAgIHsKPj4gLSAgICAgICB2b3BfZGlzYWJsZV9wbGFuZShwbGFuZSk7Cj4+IC0gICAg ICAgZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOwo+PiArICAgICAgIHN0cnVjdCB2b3BfcGxhbmVf c3RhdGUgKnZvcF9zdGF0ZSA9IHRvX3ZvcF9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4+ICsKPj4gKyAg ICAgICBpZiAoc3RhdGUtPmZiKQo+PiArICAgICAgICAgICAgICAgZHJtX2ZyYW1lYnVmZmVyX3Vu cmVmZXJlbmNlKHN0YXRlLT5mYik7Cj4+ICsKPj4gKyAgICAgICBrZnJlZSh2b3Bfc3RhdGUpOwo+ PiAgIH0KPiBZb3UgY2FuIHJlcGxhY2UgdGhpcyBob29rIHdpdGggZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZGVzdHJveV9zdGF0ZS4KCkhtbSwgb25seSBjYW4gaG9vayB3aXRoIF9fZHJtX2F0b21p Y19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZS4KCj4+IC1zdGF0aWMgdm9pZCB2b3Bfd2luX3N0 YXRlX2NvbXBsZXRlKHN0cnVjdCB2b3Bfd2luICp2b3Bfd2luLAo+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2b3Bfd2luX3N0YXRlICpzdGF0ZSkKPj4gLXsKPj4g LSAgICAgICBzdHJ1Y3Qgdm9wICp2b3AgPSB2b3Bfd2luLT52b3A7Cj4+IC0gICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjID0gJnZvcC0+Y3J0YzsKPj4gLSAgICAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gY3J0Yy0+ZGV2Owo+PiAtICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+IC0K Pj4gLSAgICAgICBpZiAoc3RhdGUtPmV2ZW50KSB7Cj4+IC0gICAgICAgICAgICAgICBzcGluX2xv Y2tfaXJxc2F2ZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7Cj4+IC0gICAgICAgICAgICAgICBk cm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBzdGF0ZS0+ZXZlbnQpOwo+PiAtICAgICAg ICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7 Cj4+IC0gICAgICAgfQo+IEFoLCBJIHNlZSB0aGlzIGlzIGJhc2VkIG9uIHRvcCBvZiB0aGUgcGF0 Y2hlcyBJIHNlbnQgdG8gZml4IHBhZ2VmbGlwcz8KPiBJZiB0aGV5IGhhdmUgYmVlbiBtZXJnZWQs IEkgd291bGQgbGlrZSB0byBzZW5kIHlvdSBzb21lIG90aGVycyB0bwo+IG1lcmdlIGFzIHdlbGws IHdoaWNoIGZpeCBhbiBPT1BTIHdoZW4geW91IGNsb3NlIFdlc3Rvbi4gSSBkaWRuJ3Qgc2VuZAo+ IHRoZW0geWV0IGFzIEkgZGlkbid0IGdldCBhIHJlc3BvbnNlIHRvIHRoZSBwcmV2aW91cyBwYXRj aHNldCwgc28gZGlkCj4gbm90IGtub3cgeW91IGhhZCBtZXJnZWQgaXQuIFRoZXJlIGFyZSBhIGxv dCBvZiBvdGhlciBjb3JyZWN0bmVzcyBmaXhlcwo+IEkgaGFkIGluIHRoZXJlIChlLmcuIHVzaW5n IHRoZSBDUlRDIHZibGFuayBmdW5jdGlvbnMsIHNvbWUgbG9ja2luZwo+IGZpeGVzKSwgYnV0IGlm IHRoaXMgY29kZSBpcyBnb2luZyB0byBiZSB0aHJvd24gYXdheSB0aGVuIEkgd2lsbCBqdXN0Cj4g ZGlzY2FyZCBtb3N0IG9mIHRoZW0gYXMgd2VsbC4KPgo+IFN0aWxsLCBJIHdvdWxkIGxpa2UgdG8g cHJlcGFyZSBhbm90aGVyIHNlcmllcyBmb3IgeW91IHRvIG1lcmdlIHRocm91Z2gKPiBkcm0tZml4 ZXMsIHRvIGJlIGFibGUgdG8gcnVuIFdlc3RvbiAodGhlIHNhbWUtZmItZmxpcCBwYXRjaCBJIHNl bnQKPiBhbG9uZyB3aXRoIHRoZSBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCBjb252ZXJzaW9u LCBhbHNvIGFkZGluZyBhCj4gcHJlY2xvc2UgaG9vayB0byBkaXNjYXJkIGV2ZW50cyB3aGVuIGNs aWVudHMgZXhpdCkuCj4KPiBDaGVlcnMsCj4gRGFuaWVsCj4KPgo+CkhpIERhbmllbAogICAgIENh biB5b3Ugc2hhcmUgeW91ciBXZXN0b24gZW52aXJvbm1lbnQgdG8gbWUsIEknbSBpbnRlcmVzdGlu ZyB0byAKdGVzdCBkcm0gcm9ja2NoaXAgb24gd2VzdG9uLgoKLS0gCu+8rWFyayBZYW8KCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: mark.yao@rock-chips.com (Mark yao) Date: Tue, 01 Dec 2015 17:21:37 +0800 Subject: [RFC PATCH 3/9] drm/rockchip: Convert to support atomic API In-Reply-To: References: <1448940391-23333-1-git-send-email-mark.yao@rock-chips.com> <1448940391-23333-4-git-send-email-mark.yao@rock-chips.com> Message-ID: <565D66A1.7030900@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 2015?12?01? 16:18, Daniel Stone wrote: > Hi Mark, > > On 1 December 2015 at 03:26, Mark Yao wrote: >> +static void rockchip_atomic_wait_for_complete(struct drm_atomic_state *state) >> +{ >> + struct drm_crtc_state *crtc_state; >> + struct drm_crtc *crtc; >> + int i; >> + >> + for_each_crtc_in_state(state, crtc, crtc_state, i) { >> + if (!crtc->state->active) >> + continue; >> + >> + WARN_ON(drm_crtc_vblank_get(crtc)); >> + } >> + >> + for_each_crtc_in_state(state, crtc, crtc_state, i) { >> + if (!crtc->state->active) >> + continue; >> + >> + rockchip_crtc_wait_for_update(crtc); >> + } > I'd be much more comfortable if this passed in an explicit pointer to > state, or an address to wait for, rather than have wait_for_complete > dig out state with no locking. The latter is potentially racy for > async operations. > >> +struct vop_plane_state { >> + struct drm_plane_state base; >> + dma_addr_t dma_addr[ROCKCHIP_MAX_FB_BUFFER]; > Can you get rid of this by just using the pointer to a > rockchip_gem_object already provided? Good idea, I will do that. >> -static int vop_update_plane_event(struct drm_plane *plane, >> - struct drm_crtc *crtc, >> - struct drm_framebuffer *fb, int crtc_x, >> - int crtc_y, unsigned int crtc_w, >> - unsigned int crtc_h, uint32_t src_x, >> - uint32_t src_y, uint32_t src_w, >> - uint32_t src_h, >> - struct drm_pending_vblank_event *event) >> +static int vop_plane_atomic_check(struct drm_plane *plane, >> + struct drm_plane_state *state) >> { >> + struct drm_crtc *crtc = state->crtc; >> + struct drm_framebuffer *fb = state->fb; >> struct vop_win *vop_win = to_vop_win(plane); >> + struct vop_plane_state *vop_plane_state = to_vop_plane_state(state); >> const struct vop_win_data *win = vop_win->data; >> - struct vop *vop = to_vop(crtc); >> struct drm_gem_object *obj; >> struct rockchip_gem_object *rk_obj; >> - struct drm_gem_object *uv_obj; >> - struct rockchip_gem_object *rk_uv_obj; >> unsigned long offset; >> - unsigned int actual_w; >> - unsigned int actual_h; >> - unsigned int dsp_stx; >> - unsigned int dsp_sty; >> - unsigned int y_vir_stride; >> - unsigned int uv_vir_stride = 0; >> - dma_addr_t yrgb_mst; >> - dma_addr_t uv_mst = 0; >> - enum vop_data_format format; >> - uint32_t val; >> - bool is_alpha; >> - bool rb_swap; >> bool is_yuv; >> bool visible; >> int ret; >> - struct drm_rect dest = { >> - .x1 = crtc_x, >> - .y1 = crtc_y, >> - .x2 = crtc_x + crtc_w, >> - .y2 = crtc_y + crtc_h, >> - }; >> - struct drm_rect src = { >> - /* 16.16 fixed point */ >> - .x1 = src_x, >> - .y1 = src_y, >> - .x2 = src_x + src_w, >> - .y2 = src_y + src_h, >> - }; >> - const struct drm_rect clip = { >> - .x2 = crtc->mode.hdisplay, >> - .y2 = crtc->mode.vdisplay, >> - }; >> - bool can_position = plane->type != DRM_PLANE_TYPE_PRIMARY; >> + struct drm_rect *dest = &vop_plane_state->dest; >> + struct drm_rect *src = &vop_plane_state->src; >> + struct drm_rect clip; >> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) : >> DRM_PLANE_HELPER_NO_SCALING; >> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) : >> DRM_PLANE_HELPER_NO_SCALING; >> >> - ret = drm_plane_helper_check_update(plane, crtc, fb, >> - &src, &dest, &clip, >> + crtc = crtc ? crtc : plane->state->crtc; >> + /* >> + * Both crtc or plane->state->crtc can be null. >> + */ >> + if (!crtc || !fb) >> + goto out_disable; >> + src->x1 = state->src_x; >> + src->y1 = state->src_y; >> + src->x2 = state->src_x + state->src_w; >> + src->y2 = state->src_y + state->src_h; >> + dest->x1 = state->crtc_x; >> + dest->y1 = state->crtc_y; >> + dest->x2 = state->crtc_x + state->crtc_w; >> + dest->y2 = state->crtc_y + state->crtc_h; >> + >> + clip.x1 = 0; >> + clip.y1 = 0; >> + clip.x2 = crtc->mode.hdisplay; >> + clip.y2 = crtc->mode.vdisplay; >> + >> + ret = drm_plane_helper_check_update(plane, crtc, state->fb, >> + src, dest, &clip, >> min_scale, >> max_scale, >> - can_position, false, &visible); >> + true, true, &visible); >> if (ret) >> return ret; >> >> if (!visible) >> - return 0; >> - >> - is_alpha = is_alpha_support(fb->pixel_format); >> - rb_swap = has_rb_swapped(fb->pixel_format); >> - is_yuv = is_yuv_support(fb->pixel_format); >> + goto out_disable; >> >> - format = vop_convert_format(fb->pixel_format); >> - if (format < 0) >> - return format; >> + vop_plane_state->format = vop_convert_format(fb->pixel_format); >> + if (vop_plane_state->format < 0) >> + return vop_plane_state->format; >> >> - obj = rockchip_fb_get_gem_obj(fb, 0); >> - if (!obj) { >> - DRM_ERROR("fail to get rockchip gem object from framebuffer\n"); >> - return -EINVAL; >> - } >> - >> - rk_obj = to_rockchip_obj(obj); >> + is_yuv = is_yuv_support(fb->pixel_format); >> >> if (is_yuv) { >> /* >> * Src.x1 can be odd when do clip, but yuv plane start point >> * need align with 2 pixel. >> */ >> - val = (src.x1 >> 16) % 2; >> - src.x1 += val << 16; >> - src.x2 += val << 16; >> + uint32_t temp = (src->x1 >> 16) % 2; >> + >> + src->x1 += temp << 16; >> + src->x2 += temp << 16; >> } > I know this isn't new, but moving the plane around is bad. If the user > gives you a pixel boundary that you can't actually use, please reject > the configuration rather than silently trying to fix it up. the origin src.x1 would align with 2 pixel, but when we move the dest window, and do clip by output, the src.x1 may be clipped to odd. regect this configuration may let user confuse, sometimes good, sometimes bad. >> -static void vop_plane_destroy(struct drm_plane *plane) >> +static void vop_atomic_plane_destroy_state(struct drm_plane *plane, >> + struct drm_plane_state *state) >> { >> - vop_disable_plane(plane); >> - drm_plane_cleanup(plane); >> + struct vop_plane_state *vop_state = to_vop_plane_state(state); >> + >> + if (state->fb) >> + drm_framebuffer_unreference(state->fb); >> + >> + kfree(vop_state); >> } > You can replace this hook with drm_atomic_helper_plane_destroy_state. Hmm, only can hook with __drm_atomic_helper_plane_destroy_state. >> -static void vop_win_state_complete(struct vop_win *vop_win, >> - struct vop_win_state *state) >> -{ >> - struct vop *vop = vop_win->vop; >> - struct drm_crtc *crtc = &vop->crtc; >> - struct drm_device *drm = crtc->dev; >> - unsigned long flags; >> - >> - if (state->event) { >> - spin_lock_irqsave(&drm->event_lock, flags); >> - drm_crtc_send_vblank_event(crtc, state->event); >> - spin_unlock_irqrestore(&drm->event_lock, flags); >> - } > Ah, I see this is based on top of the patches I sent to fix pageflips? > If they have been merged, I would like to send you some others to > merge as well, which fix an OOPS when you close Weston. I didn't send > them yet as I didn't get a response to the previous patchset, so did > not know you had merged it. There are a lot of other correctness fixes > I had in there (e.g. using the CRTC vblank functions, some locking > fixes), but if this code is going to be thrown away then I will just > discard most of them as well. > > Still, I would like to prepare another series for you to merge through > drm-fixes, to be able to run Weston (the same-fb-flip patch I sent > along with the drm_crtc_send_vblank_event conversion, also adding a > preclose hook to discard events when clients exit). > > Cheers, > Daniel > > > Hi Daniel Can you share your Weston environment to me, I'm interesting to test drm rockchip on weston. -- ?ark Yao From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755837AbbLAJWH (ORCPT ); Tue, 1 Dec 2015 04:22:07 -0500 Received: from regular1.263xmail.com ([211.150.99.137]:37718 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755589AbbLAJWB (ORCPT ); Tue, 1 Dec 2015 04:22:01 -0500 X-263anti-spam: KSV:0;BIG:0;ABS:1;DNS:0;ATT:0;SPF:S; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-ADDR-CHECKED: 0 X-RL-SENDER: mark.yao@rock-chips.com X-FST-TO: tfiga@chromium.org X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: <7bf294405a0a267e84df0354f97be14e> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Message-ID: <565D66A1.7030900@rock-chips.com> Date: Tue, 01 Dec 2015 17:21:37 +0800 From: Mark yao User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Daniel Stone CC: David Airlie , Heiko Stuebner , dri-devel , "linux-arm-kernel@lists.infradead.org" , linux-rockchip , Linux Kernel Mailing List , Tomasz Figa Subject: Re: [RFC PATCH 3/9] drm/rockchip: Convert to support atomic API References: <1448940391-23333-1-git-send-email-mark.yao@rock-chips.com> <1448940391-23333-4-git-send-email-mark.yao@rock-chips.com> In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015年12月01日 16:18, Daniel Stone wrote: > Hi Mark, > > On 1 December 2015 at 03:26, Mark Yao wrote: >> +static void rockchip_atomic_wait_for_complete(struct drm_atomic_state *state) >> +{ >> + struct drm_crtc_state *crtc_state; >> + struct drm_crtc *crtc; >> + int i; >> + >> + for_each_crtc_in_state(state, crtc, crtc_state, i) { >> + if (!crtc->state->active) >> + continue; >> + >> + WARN_ON(drm_crtc_vblank_get(crtc)); >> + } >> + >> + for_each_crtc_in_state(state, crtc, crtc_state, i) { >> + if (!crtc->state->active) >> + continue; >> + >> + rockchip_crtc_wait_for_update(crtc); >> + } > I'd be much more comfortable if this passed in an explicit pointer to > state, or an address to wait for, rather than have wait_for_complete > dig out state with no locking. The latter is potentially racy for > async operations. > >> +struct vop_plane_state { >> + struct drm_plane_state base; >> + dma_addr_t dma_addr[ROCKCHIP_MAX_FB_BUFFER]; > Can you get rid of this by just using the pointer to a > rockchip_gem_object already provided? Good idea, I will do that. >> -static int vop_update_plane_event(struct drm_plane *plane, >> - struct drm_crtc *crtc, >> - struct drm_framebuffer *fb, int crtc_x, >> - int crtc_y, unsigned int crtc_w, >> - unsigned int crtc_h, uint32_t src_x, >> - uint32_t src_y, uint32_t src_w, >> - uint32_t src_h, >> - struct drm_pending_vblank_event *event) >> +static int vop_plane_atomic_check(struct drm_plane *plane, >> + struct drm_plane_state *state) >> { >> + struct drm_crtc *crtc = state->crtc; >> + struct drm_framebuffer *fb = state->fb; >> struct vop_win *vop_win = to_vop_win(plane); >> + struct vop_plane_state *vop_plane_state = to_vop_plane_state(state); >> const struct vop_win_data *win = vop_win->data; >> - struct vop *vop = to_vop(crtc); >> struct drm_gem_object *obj; >> struct rockchip_gem_object *rk_obj; >> - struct drm_gem_object *uv_obj; >> - struct rockchip_gem_object *rk_uv_obj; >> unsigned long offset; >> - unsigned int actual_w; >> - unsigned int actual_h; >> - unsigned int dsp_stx; >> - unsigned int dsp_sty; >> - unsigned int y_vir_stride; >> - unsigned int uv_vir_stride = 0; >> - dma_addr_t yrgb_mst; >> - dma_addr_t uv_mst = 0; >> - enum vop_data_format format; >> - uint32_t val; >> - bool is_alpha; >> - bool rb_swap; >> bool is_yuv; >> bool visible; >> int ret; >> - struct drm_rect dest = { >> - .x1 = crtc_x, >> - .y1 = crtc_y, >> - .x2 = crtc_x + crtc_w, >> - .y2 = crtc_y + crtc_h, >> - }; >> - struct drm_rect src = { >> - /* 16.16 fixed point */ >> - .x1 = src_x, >> - .y1 = src_y, >> - .x2 = src_x + src_w, >> - .y2 = src_y + src_h, >> - }; >> - const struct drm_rect clip = { >> - .x2 = crtc->mode.hdisplay, >> - .y2 = crtc->mode.vdisplay, >> - }; >> - bool can_position = plane->type != DRM_PLANE_TYPE_PRIMARY; >> + struct drm_rect *dest = &vop_plane_state->dest; >> + struct drm_rect *src = &vop_plane_state->src; >> + struct drm_rect clip; >> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) : >> DRM_PLANE_HELPER_NO_SCALING; >> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) : >> DRM_PLANE_HELPER_NO_SCALING; >> >> - ret = drm_plane_helper_check_update(plane, crtc, fb, >> - &src, &dest, &clip, >> + crtc = crtc ? crtc : plane->state->crtc; >> + /* >> + * Both crtc or plane->state->crtc can be null. >> + */ >> + if (!crtc || !fb) >> + goto out_disable; >> + src->x1 = state->src_x; >> + src->y1 = state->src_y; >> + src->x2 = state->src_x + state->src_w; >> + src->y2 = state->src_y + state->src_h; >> + dest->x1 = state->crtc_x; >> + dest->y1 = state->crtc_y; >> + dest->x2 = state->crtc_x + state->crtc_w; >> + dest->y2 = state->crtc_y + state->crtc_h; >> + >> + clip.x1 = 0; >> + clip.y1 = 0; >> + clip.x2 = crtc->mode.hdisplay; >> + clip.y2 = crtc->mode.vdisplay; >> + >> + ret = drm_plane_helper_check_update(plane, crtc, state->fb, >> + src, dest, &clip, >> min_scale, >> max_scale, >> - can_position, false, &visible); >> + true, true, &visible); >> if (ret) >> return ret; >> >> if (!visible) >> - return 0; >> - >> - is_alpha = is_alpha_support(fb->pixel_format); >> - rb_swap = has_rb_swapped(fb->pixel_format); >> - is_yuv = is_yuv_support(fb->pixel_format); >> + goto out_disable; >> >> - format = vop_convert_format(fb->pixel_format); >> - if (format < 0) >> - return format; >> + vop_plane_state->format = vop_convert_format(fb->pixel_format); >> + if (vop_plane_state->format < 0) >> + return vop_plane_state->format; >> >> - obj = rockchip_fb_get_gem_obj(fb, 0); >> - if (!obj) { >> - DRM_ERROR("fail to get rockchip gem object from framebuffer\n"); >> - return -EINVAL; >> - } >> - >> - rk_obj = to_rockchip_obj(obj); >> + is_yuv = is_yuv_support(fb->pixel_format); >> >> if (is_yuv) { >> /* >> * Src.x1 can be odd when do clip, but yuv plane start point >> * need align with 2 pixel. >> */ >> - val = (src.x1 >> 16) % 2; >> - src.x1 += val << 16; >> - src.x2 += val << 16; >> + uint32_t temp = (src->x1 >> 16) % 2; >> + >> + src->x1 += temp << 16; >> + src->x2 += temp << 16; >> } > I know this isn't new, but moving the plane around is bad. If the user > gives you a pixel boundary that you can't actually use, please reject > the configuration rather than silently trying to fix it up. the origin src.x1 would align with 2 pixel, but when we move the dest window, and do clip by output, the src.x1 may be clipped to odd. regect this configuration may let user confuse, sometimes good, sometimes bad. >> -static void vop_plane_destroy(struct drm_plane *plane) >> +static void vop_atomic_plane_destroy_state(struct drm_plane *plane, >> + struct drm_plane_state *state) >> { >> - vop_disable_plane(plane); >> - drm_plane_cleanup(plane); >> + struct vop_plane_state *vop_state = to_vop_plane_state(state); >> + >> + if (state->fb) >> + drm_framebuffer_unreference(state->fb); >> + >> + kfree(vop_state); >> } > You can replace this hook with drm_atomic_helper_plane_destroy_state. Hmm, only can hook with __drm_atomic_helper_plane_destroy_state. >> -static void vop_win_state_complete(struct vop_win *vop_win, >> - struct vop_win_state *state) >> -{ >> - struct vop *vop = vop_win->vop; >> - struct drm_crtc *crtc = &vop->crtc; >> - struct drm_device *drm = crtc->dev; >> - unsigned long flags; >> - >> - if (state->event) { >> - spin_lock_irqsave(&drm->event_lock, flags); >> - drm_crtc_send_vblank_event(crtc, state->event); >> - spin_unlock_irqrestore(&drm->event_lock, flags); >> - } > Ah, I see this is based on top of the patches I sent to fix pageflips? > If they have been merged, I would like to send you some others to > merge as well, which fix an OOPS when you close Weston. I didn't send > them yet as I didn't get a response to the previous patchset, so did > not know you had merged it. There are a lot of other correctness fixes > I had in there (e.g. using the CRTC vblank functions, some locking > fixes), but if this code is going to be thrown away then I will just > discard most of them as well. > > Still, I would like to prepare another series for you to merge through > drm-fixes, to be able to run Weston (the same-fb-flip patch I sent > along with the drm_crtc_send_vblank_event conversion, also adding a > preclose hook to discard events when clients exit). > > Cheers, > Daniel > > > Hi Daniel Can you share your Weston environment to me, I'm interesting to test drm rockchip on weston. -- Mark Yao