From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark yao Subject: Re: [PATCH] drm/rockchip: vop: power off until vop standby take effect Date: Mon, 02 Feb 2015 10:30:09 +0800 Message-ID: <54CEE131.1020600@rock-chips.com> References: <1422693698-21944-1-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: Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.99.139]) by gabe.freedesktop.org (Postfix) with ESMTP id 6A12D6E275 for ; Sun, 1 Feb 2015 18:30:14 -0800 (PST) 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 Kurtz Cc: "linux-kernel@vger.kernel.org" , dri-devel , "open list:ARM/Rockchip SoC..." List-Id: dri-devel@lists.freedesktop.org T24gMjAxNeW5tDAy5pyIMDLml6UgMTA6MDcsIERhbmllbCBLdXJ0eiB3cm90ZToKPiBIaSBNYXJr LCBIZWlrbywKPgo+IE9uIFNhdCwgSmFuIDMxLCAyMDE1IGF0IDQ6NDEgUE0sIE1hcmsgWWFvIDxt YXJrLnlhb0Byb2NrLWNoaXBzLmNvbT4gd3JvdGU6Cj4+IFZvcCBzdGFuZGJ5IHdpbGwgdGFrZSBl ZmZlY3QgZW5kIG9mIGN1cnJlbnQgZnJhbWUsCj4+IGlmIGRzcF9ob2xkX3ZhbGlkX2lycSBoYXBw ZW4sIGl0IG1lYW5zIHZvcCBzdGFuZGJ5IGNvbXBsZXRlLgo+Pgo+PiB3ZSBtdXN0IHdhaXQgc3Rh bmRieSBjb21wbGV0ZSB3aGVuIHdlIHdhbnQgdG8gZGlzYWJsZSBhY2xrLAo+PiBpZiBub3QsIG1l bW9yeSBidXMgbWF5YmUgZGVhZC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogTWFyayBZYW8gPG1hcmsu eWFvQHJvY2stY2hpcHMuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3ZvcC5jIHwgICA3NiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPj4g ICAxIGZpbGUgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCj4+Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+PiBpbmRleCBm YjI1ODM2Li40N2VhNjFmIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3ZvcC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmMKPj4gQEAgLTg5LDYgKzg5LDcgQEAgc3RydWN0IHZvcCB7Cj4+ICAgICAg ICAgIC8qIG11dGV4IHZzeW5jXyB3b3JrICovCj4+ICAgICAgICAgIHN0cnVjdCBtdXRleCB2c3lu Y19tdXRleDsKPj4gICAgICAgICAgYm9vbCB2c3luY193b3JrX3BlbmRpbmc7Cj4+ICsgICAgICAg c3RydWN0IGNvbXBsZXRpb24gZHNwX2hvbGRfY29tcGxldGlvbjsKPj4KPj4gICAgICAgICAgY29u c3Qgc3RydWN0IHZvcF9kYXRhICpkYXRhOwo+Pgo+PiBAQCAtMzgyLDYgKzM4MywzNCBAQCBzdGF0 aWMgYm9vbCBpc19hbHBoYV9zdXBwb3J0KHVpbnQzMl90IGZvcm1hdCkKPj4gICAgICAgICAgfQo+ PiAgIH0KPj4KPj4gK3N0YXRpYyB2b2lkIHZvcF9kc3BfaG9sZF92YWxpZF9pcnFfZW5hYmxlKHN0 cnVjdCB2b3AgKnZvcCkKPj4gK3sKPj4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiAr Cj4+ICsgICAgICAgQlVHX09OKCF2b3AtPmlzX2VuYWJsZWQpOwo+IFJlOiBIZWlrbyAidXNlIGEg V0FSTl9PTiI6Cj4KPiBJZiB0aGUgVk9QIGNsb2NrIGlzIG9mZiwgdGhlbiB0aGUgc3lzdGVtIHdp bGwganVzdCBoYW5nIHdoZW4gdHJ5aW5nIHRvCj4gd3JpdGUgdGhlIFZPUCByZWdpc3RlciBzbyBp biB0aGlzIGNhc2UsIEJVR19PTiBnaXZlcyBhIG1vcmUgcmVsaWFibGUKPiBjcmFzaCBkdW1wIHRo YW4gdGhlIGhhbmcuCiAgIEluIHRoaXMgd2F5LCB5b3UgYXJlIHJpZ2h0LCBpZiB2b3AgY2xvY2tz IGlzIGRpc2FibGVkLCB3cml0ZSB2b3AgCnJlZ2lzdGVyIHdpbGwgaGFuZyBzeXN0ZW0sIGFuZCB0 aGUgV0FSTl9PTgpjcmFzaCBkdW1wIG1heSBiZSBoYXZlIG5vIGNoYW5jZSB0byBwcmludC4KPiAg ICAKPj4gKwo+PiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ2b3AtPmlycV9sb2NrLCBmbGFn cyk7Cj4+ICsKPj4gKyAgICAgICB2b3BfbWFza193cml0ZSh2b3AsIElOVFJfQ1RSTDAsIERTUF9I T0xEX1ZBTElEX0lOVFJfTUFTSywKPj4gKyAgICAgICAgICAgICAgICAgICAgICBEU1BfSE9MRF9W QUxJRF9JTlRSX0VOKDEpKTsKPj4gKwo+PiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnZvcC0+aXJxX2xvY2ssIGZsYWdzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdm9wX2Rz cF9ob2xkX3ZhbGlkX2lycV9kaXNhYmxlKHN0cnVjdCB2b3AgKnZvcCkKPj4gK3sKPj4gKyAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCj4+ICsgICAgICAgQlVHX09OKCF2b3AtPmlzX2Vu YWJsZWQpOwo+PiArCj4+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnZvcC0+aXJxX2xvY2ss IGZsYWdzKTsKPj4gKwo+PiArICAgICAgIHZvcF9tYXNrX3dyaXRlKHZvcCwgSU5UUl9DVFJMMCwg RFNQX0hPTERfVkFMSURfSU5UUl9NQVNLLAo+PiArICAgICAgICAgICAgICAgICAgICAgIERTUF9I T0xEX1ZBTElEX0lOVFJfRU4oMCkpOwo+PiArCj4+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdm9wLT5pcnFfbG9jaywgZmxhZ3MpOwo+PiArfQo+PiArCj4+ICAgc3RhdGljIHZvaWQg dm9wX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICAgewo+PiAgICAgICAgICBzdHJ1 Y3Qgdm9wICp2b3AgPSB0b192b3AoY3J0Yyk7Cj4+IEBAIC00NTQsMjYgKzQ4MywzNiBAQCBzdGF0 aWMgdm9pZCB2b3BfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+Cj4+ICAgICAgICAg IGRybV92Ymxhbmtfb2ZmKGNydGMtPmRldiwgdm9wLT5waXBlKTsKPj4KPj4gLSAgICAgICBkaXNh YmxlX2lycSh2b3AtPmlycSk7Cj4+IC0KPj4gICAgICAgICAgLyoKPj4gLSAgICAgICAgKiBUT0RP OiBTaW5jZSBzdGFuZGJ5IGRvZXNuJ3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgdmJsYW5r LAo+PiAtICAgICAgICAqIHdoZW4gd2UgdHVybiBvZmYgZGNsayBiZWxvdywgdGhlIHZvcCBpcyBw cm9iYWJseSBzdGlsbCBhY3RpdmUuCj4+ICsgICAgICAgICogVm9wIHN0YW5kYnkgd2lsbCB0YWtl IGVmZmVjdCB1bnRpbCBlbmQgb2YgY3VycmVudCBmcmFtZSwKPiAiVm9wIHN0YW5kYnkgd2lsbCB0 YWtlIGVmZmVjdCBhdCBlbmQgb2YgY3VycmVudCBmcmFtZSIKT0sKPj4gKyAgICAgICAgKiBpZiBk c3AgaG9sZCB2YWxpZCBpcnEgaGFwcGVuLCBpdCBtZWFucyBzdGFuZGJ5IGNvbXBsZXRlLgo+PiAr ICAgICAgICAqCj4+ICsgICAgICAgICogd2UgbXVzdCB3YWl0IHN0YW5kYnkgY29tcGxldGUgd2hl biB3ZSB3YW50IHRvIGRpc2FibGUgYWNsaywKPj4gKyAgICAgICAgKiBpZiBub3QsIG1lbW9yeSBi dXMgbWF5YmUgZGVhZC4KPj4gICAgICAgICAgICovCj4+ICsgICAgICAgcmVpbml0X2NvbXBsZXRp b24oJnZvcC0+ZHNwX2hvbGRfY29tcGxldGlvbik7Cj4+ICsgICAgICAgdm9wX2RzcF9ob2xkX3Zh bGlkX2lycV9lbmFibGUodm9wKTsKPj4gKwo+PiAgICAgICAgICBzcGluX2xvY2soJnZvcC0+cmVn X2xvY2spOwo+Pgo+PiAgICAgICAgICBWT1BfQ1RSTF9TRVQodm9wLCBzdGFuZGJ5LCAxKTsKPj4K Pj4gICAgICAgICAgc3Bpbl91bmxvY2soJnZvcC0+cmVnX2xvY2spOwo+Pgo+PiArICAgICAgIHdh aXRfZm9yX2NvbXBsZXRpb24oJnZvcC0+ZHNwX2hvbGRfY29tcGxldGlvbik7Cj4+ICsKPj4gKyAg ICAgICB2b3BfZHNwX2hvbGRfdmFsaWRfaXJxX2Rpc2FibGUodm9wKTsKPj4gKwo+PiArICAgICAg IGRpc2FibGVfaXJxKHZvcC0+aXJxKTsKPj4gKwo+PiAgICAgICAgICB2b3AtPmlzX2VuYWJsZWQg PSBmYWxzZTsKPj4gKwo+PiAgICAgICAgICAvKgo+PiAtICAgICAgICAqIGRpc2FibGUgZGNsayB0 byBzdG9wIGZyYW1lIHNjYW4sIHNvIHdlIGNhbiBzYWZlbHkgZGV0YWNoIGlvbW11LAo+PiArICAg ICAgICAqIHZvcCBzdGFuZGJ5IGNvbXBsZXRlLCBzbyBpb21tdSBkZXRhY2ggaXMgc2FmZS4KPj4g ICAgICAgICAgICovCj4+IC0gICAgICAgY2xrX2Rpc2FibGUodm9wLT5kY2xrKTsKPj4gLQo+PiAg ICAgICAgICByb2NrY2hpcF9kcm1fZG1hX2RldGFjaF9kZXZpY2Uodm9wLT5kcm1fZGV2LCB2b3At PmRldik7Cj4+Cj4+ICsgICAgICAgY2xrX2Rpc2FibGUodm9wLT5kY2xrKTsKPj4gICAgICAgICAg Y2xrX2Rpc2FibGUodm9wLT5hY2xrKTsKPj4gICAgICAgICAgY2xrX2Rpc2FibGUodm9wLT5oY2xr KTsKPj4gICB9Cj4+IEBAIC0xMDg2LDYgKzExMjUsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdm9w X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQo+PiAgICAgICAgICBzdHJ1Y3Qgdm9wICp2b3AgPSBk YXRhOwo+PiAgICAgICAgICB1aW50MzJfdCBpbnRyMF9yZWcsIGFjdGl2ZV9pcnFzOwo+PiAgICAg ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArICAgICAgIGludCByZXQgPSBJUlFfTk9ORTsK Pj4KPj4gICAgICAgICAgLyoKPj4gICAgICAgICAgICogSU5UUl9DVFJMMCByZWdpc3RlciBoYXMg aW50ZXJydXB0IHN0YXR1cywgZW5hYmxlIGFuZCBjbGVhciBiaXRzLCB3ZQo+PiBAQCAtMTEwNCwx NSArMTE0NCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgdm9wX2lzcihpbnQgaXJxLCB2b2lkICpk YXRhKQo+PiAgICAgICAgICBpZiAoIWFjdGl2ZV9pcnFzKQo+PiAgICAgICAgICAgICAgICAgIHJl dHVybiBJUlFfTk9ORTsKPj4KPj4gLSAgICAgICAvKiBPbmx5IEZyYW1lIFN0YXJ0IEludGVycnVw dCBpcyBlbmFibGVkOyBvdGhlciBpcnFzIGFyZSBzcHVyaW91cy4gKi8KPj4gLSAgICAgICBpZiAo IShhY3RpdmVfaXJxcyAmIEZTX0lOVFIpKSB7Cj4+IC0gICAgICAgICAgICAgICBEUk1fRVJST1Io IlVua25vd24gVk9QIElSUXM6ICUjMDJ4XG4iLCBhY3RpdmVfaXJxcyk7Cj4+IC0gICAgICAgICAg ICAgICByZXR1cm4gSVJRX05PTkU7Cj4+ICsgICAgICAgaWYgKGFjdGl2ZV9pcnFzICYgRFNQX0hP TERfVkFMSURfSU5UUikgewo+PiArICAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW9uX2RvbmUo JnZvcC0+ZHNwX2hvbGRfY29tcGxldGlvbikpCj4gV2h5IGlzIHRoaXMgImNvbXBsZXRpb25fZG9u ZSIgY2hlY2sgbmVlZGVkPwo+IEkgZ3Vlc3MgaXQgZG9lc24ndCBoZWxwLCBidXQgaXNuJ3Qgc3Ry aWN0bHkgbmVlZGVkLCBzaW5jZSB0aGUKPiBkc3BfaG9sZF9jb21wbGV0aW9uIGlzIGEgb25lIHNo b3QsIHJpZ2h0PwpSaWdodCwgdGhlIERTUF9IT0xEX1ZBTElEX0lOVFIgb25seSBoYXBwZW4gd2hl biBzdGFuZGJ5IGNvbXBsZXRlLCBvbmUgCnN0YW5kYnkgb25lIGlycS4KCk1hcmsKPiBJbiBhbnkg Y2FzZSwgdGhpcyBzaG91bGQgd29yayBhcyBpdCBpcywgc286Cj4KPiBSZXZpZXdlZC1ieTogRGFu aWVsIEt1cnR6IDxkamt1cnR6QGNocm9taXVtLm9yZz4KPgo+PiArICAgICAgICAgICAgICAgICAg ICAgICBjb21wbGV0ZSgmdm9wLT5kc3BfaG9sZF9jb21wbGV0aW9uKTsKPj4gKyAgICAgICAgICAg ICAgIGFjdGl2ZV9pcnFzICY9IH5EU1BfSE9MRF9WQUxJRF9JTlRSOwo+PiArICAgICAgICAgICAg ICAgcmV0ID0gSVJRX0hBTkRMRUQ7Cj4+ICAgICAgICAgIH0KPj4KPj4gLSAgICAgICBkcm1faGFu ZGxlX3ZibGFuayh2b3AtPmRybV9kZXYsIHZvcC0+cGlwZSk7Cj4+ICsgICAgICAgaWYgKGFjdGl2 ZV9pcnFzICYgRlNfSU5UUikgewo+PiArICAgICAgICAgICAgICAgZHJtX2hhbmRsZV92Ymxhbmso dm9wLT5kcm1fZGV2LCB2b3AtPnBpcGUpOwo+PiArICAgICAgICAgICAgICAgYWN0aXZlX2lycXMg Jj0gfkZTX0lOVFI7Cj4+ICsgICAgICAgICAgICAgICByZXQgPSAodm9wLT52c3luY193b3JrX3Bl bmRpbmcpID8gSVJRX1dBS0VfVEhSRUFEIDogSVJRX0hBTkRMRUQ7Cj4+ICsgICAgICAgfQo+Pgo+ PiAtICAgICAgIHJldHVybiAodm9wLT52c3luY193b3JrX3BlbmRpbmcpID8gSVJRX1dBS0VfVEhS RUFEIDogSVJRX0hBTkRMRUQ7Cj4+ICsgICAgICAgLyogVW5oYW5kbGVkIGlycXMgYXJlIHNwdXJp b3VzLiAqLwo+PiArICAgICAgIGlmIChhY3RpdmVfaXJxcykKPj4gKyAgICAgICAgICAgICAgIERS TV9FUlJPUigiVW5rbm93biBWT1AgSVJRczogJSMwMnhcbiIsIGFjdGl2ZV9pcnFzKTsKPj4gKwo+ PiArICAgICAgIHJldHVybiByZXQ7Cj4+ICAgfQo+Pgo+PiAgIHN0YXRpYyBpbnQgdm9wX2NyZWF0 ZV9jcnRjKHN0cnVjdCB2b3AgKnZvcCkKPj4gQEAgLTExOTQsNiArMTI0Myw3IEBAIHN0YXRpYyBp bnQgdm9wX2NyZWF0ZV9jcnRjKHN0cnVjdCB2b3AgKnZvcCkKPj4gICAgICAgICAgICAgICAgICBn b3RvIGVycl9jbGVhbnVwX2NydGM7Cj4+ICAgICAgICAgIH0KPj4KPj4gKyAgICAgICBpbml0X2Nv bXBsZXRpb24oJnZvcC0+ZHNwX2hvbGRfY29tcGxldGlvbik7Cj4+ICAgICAgICAgIGNydGMtPnBv cnQgPSBwb3J0Owo+PiAgICAgICAgICB2b3AtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsK Pj4gICAgICAgICAgcm9ja2NoaXBfcmVnaXN0ZXJfY3J0Y19mdW5jcyhkcm1fZGV2LCAmcHJpdmF0 ZV9jcnRjX2Z1bmNzLCB2b3AtPnBpcGUpOwo+PiAtLQo+PiAxLjcuOS41Cj4+Cj4+Cj4KPgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754634AbbBBCaW (ORCPT ); Sun, 1 Feb 2015 21:30:22 -0500 Received: from regular1.263xmail.com ([211.150.99.139]:54765 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752423AbbBBCaU (ORCPT ); Sun, 1 Feb 2015 21:30:20 -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: djkurtz@chromium.org X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: <14f53be52e91c167d1bbfb5c42da5722> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Message-ID: <54CEE131.1020600@rock-chips.com> Date: Mon, 02 Feb 2015 10:30:09 +0800 From: Mark yao User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Daniel Kurtz CC: David Airlie , Daniel Vetter , Rob Clark , Philipp Zabel , dri-devel , "linux-kernel@vger.kernel.org" , "open list:ARM/Rockchip SoC..." Subject: Re: [PATCH] drm/rockchip: vop: power off until vop standby take effect References: <1422693698-21944-1-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年02月02日 10:07, Daniel Kurtz wrote: > Hi Mark, Heiko, > > On Sat, Jan 31, 2015 at 4:41 PM, Mark Yao wrote: >> Vop standby will take effect end of current frame, >> if dsp_hold_valid_irq happen, it means vop standby complete. >> >> we must wait standby complete when we want to disable aclk, >> if not, memory bus maybe dead. >> >> Signed-off-by: Mark Yao >> --- >> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 76 ++++++++++++++++++++++----- >> 1 file changed, 63 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> index fb25836..47ea61f 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> @@ -89,6 +89,7 @@ struct vop { >> /* mutex vsync_ work */ >> struct mutex vsync_mutex; >> bool vsync_work_pending; >> + struct completion dsp_hold_completion; >> >> const struct vop_data *data; >> >> @@ -382,6 +383,34 @@ static bool is_alpha_support(uint32_t format) >> } >> } >> >> +static void vop_dsp_hold_valid_irq_enable(struct vop *vop) >> +{ >> + unsigned long flags; >> + >> + BUG_ON(!vop->is_enabled); > Re: Heiko "use a WARN_ON": > > If the VOP clock is off, then the system will just hang when trying to > write the VOP register so in this case, BUG_ON gives a more reliable > crash dump than the hang. In this way, you are right, if vop clocks is disabled, write vop register will hang system, and the WARN_ON crash dump may be have no chance to print. > >> + >> + spin_lock_irqsave(&vop->irq_lock, flags); >> + >> + vop_mask_write(vop, INTR_CTRL0, DSP_HOLD_VALID_INTR_MASK, >> + DSP_HOLD_VALID_INTR_EN(1)); >> + >> + spin_unlock_irqrestore(&vop->irq_lock, flags); >> +} >> + >> +static void vop_dsp_hold_valid_irq_disable(struct vop *vop) >> +{ >> + unsigned long flags; >> + >> + BUG_ON(!vop->is_enabled); >> + >> + spin_lock_irqsave(&vop->irq_lock, flags); >> + >> + vop_mask_write(vop, INTR_CTRL0, DSP_HOLD_VALID_INTR_MASK, >> + DSP_HOLD_VALID_INTR_EN(0)); >> + >> + spin_unlock_irqrestore(&vop->irq_lock, flags); >> +} >> + >> static void vop_enable(struct drm_crtc *crtc) >> { >> struct vop *vop = to_vop(crtc); >> @@ -454,26 +483,36 @@ static void vop_disable(struct drm_crtc *crtc) >> >> drm_vblank_off(crtc->dev, vop->pipe); >> >> - disable_irq(vop->irq); >> - >> /* >> - * TODO: Since standby doesn't take effect until the next vblank, >> - * when we turn off dclk below, the vop is probably still active. >> + * Vop standby will take effect until end of current frame, > "Vop standby will take effect at end of current frame" OK >> + * if dsp hold valid irq happen, it means standby complete. >> + * >> + * we must wait standby complete when we want to disable aclk, >> + * if not, memory bus maybe dead. >> */ >> + reinit_completion(&vop->dsp_hold_completion); >> + vop_dsp_hold_valid_irq_enable(vop); >> + >> spin_lock(&vop->reg_lock); >> >> VOP_CTRL_SET(vop, standby, 1); >> >> spin_unlock(&vop->reg_lock); >> >> + wait_for_completion(&vop->dsp_hold_completion); >> + >> + vop_dsp_hold_valid_irq_disable(vop); >> + >> + disable_irq(vop->irq); >> + >> vop->is_enabled = false; >> + >> /* >> - * disable dclk to stop frame scan, so we can safely detach iommu, >> + * vop standby complete, so iommu detach is safe. >> */ >> - clk_disable(vop->dclk); >> - >> rockchip_drm_dma_detach_device(vop->drm_dev, vop->dev); >> >> + clk_disable(vop->dclk); >> clk_disable(vop->aclk); >> clk_disable(vop->hclk); >> } >> @@ -1086,6 +1125,7 @@ static irqreturn_t vop_isr(int irq, void *data) >> struct vop *vop = data; >> uint32_t intr0_reg, active_irqs; >> unsigned long flags; >> + int ret = IRQ_NONE; >> >> /* >> * INTR_CTRL0 register has interrupt status, enable and clear bits, we >> @@ -1104,15 +1144,24 @@ static irqreturn_t vop_isr(int irq, void *data) >> if (!active_irqs) >> return IRQ_NONE; >> >> - /* Only Frame Start Interrupt is enabled; other irqs are spurious. */ >> - if (!(active_irqs & FS_INTR)) { >> - DRM_ERROR("Unknown VOP IRQs: %#02x\n", active_irqs); >> - return IRQ_NONE; >> + if (active_irqs & DSP_HOLD_VALID_INTR) { >> + if (!completion_done(&vop->dsp_hold_completion)) > Why is this "completion_done" check needed? > I guess it doesn't help, but isn't strictly needed, since the > dsp_hold_completion is a one shot, right? Right, the DSP_HOLD_VALID_INTR only happen when standby complete, one standby one irq. Mark > In any case, this should work as it is, so: > > Reviewed-by: Daniel Kurtz > >> + complete(&vop->dsp_hold_completion); >> + active_irqs &= ~DSP_HOLD_VALID_INTR; >> + ret = IRQ_HANDLED; >> } >> >> - drm_handle_vblank(vop->drm_dev, vop->pipe); >> + if (active_irqs & FS_INTR) { >> + drm_handle_vblank(vop->drm_dev, vop->pipe); >> + active_irqs &= ~FS_INTR; >> + ret = (vop->vsync_work_pending) ? IRQ_WAKE_THREAD : IRQ_HANDLED; >> + } >> >> - return (vop->vsync_work_pending) ? IRQ_WAKE_THREAD : IRQ_HANDLED; >> + /* Unhandled irqs are spurious. */ >> + if (active_irqs) >> + DRM_ERROR("Unknown VOP IRQs: %#02x\n", active_irqs); >> + >> + return ret; >> } >> >> static int vop_create_crtc(struct vop *vop) >> @@ -1194,6 +1243,7 @@ static int vop_create_crtc(struct vop *vop) >> goto err_cleanup_crtc; >> } >> >> + init_completion(&vop->dsp_hold_completion); >> crtc->port = port; >> vop->pipe = drm_crtc_index(crtc); >> rockchip_register_crtc_funcs(drm_dev, &private_crtc_funcs, vop->pipe); >> -- >> 1.7.9.5 >> >> > >