From mboxrd@z Thu Jan 1 00:00:00 1970 From: Inki Dae Subject: Re: [PATCH] drm/exynos: fix vblank handling during dpms off Date: Thu, 02 Oct 2014 19:52:44 +0900 Message-ID: <542D2E7C.1020904@samsung.com> References: <542B9A0E.7020206@samsung.com> <1412151287-12845-1-git-send-email-a.hajda@samsung.com> <542D13CC.5000304@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <542D13CC.5000304@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Joonyoung Shim Cc: Kukjin Kim , Seung-Woo Kim , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Andrzej Hajda , Kyungmin Park , linux-samsung-soc@vger.kernel.org List-Id: linux-samsung-soc@vger.kernel.org T24gMjAxNOuFhCAxMOyblCAwMuydvCAxNzo1OCwgSm9vbnlvdW5nIFNoaW0gd3JvdGU6Cj4gSGkg QW5kcnplaiwKPiAKPiBPbiAxMC8wMS8yMDE0IDA1OjE0IFBNLCBBbmRyemVqIEhhamRhIHdyb3Rl Ogo+PiBUaGUgcGF0Y2ggZGlzYWJsZXMgdmJsYW5rcyBkdXJpbmcgZHBtcyBvZmYgb25seSBpZiBw YWdlZmlscCBoYXMKPj4gbm90IGJlZW4gZmluaXNoZWQuIEl0IGFsc28gcmVwbGFjZXMgZHJtX3Zi bGFua19vZmYgd2l0aCBkcm1fY3J0Y192YmxhbmtfcHV0Lgo+PiBJdCBmaXhlcyBpc3N1ZSB3aXRo IHBhZ2VfZmxpcCBpb2N0bCBub3QgYmVpbmcgYWJsZSB0byBhY3F1aXJlIHZibGFuayBjb3VudGVy Lgo+IAo+IFRoaXMgcHJvYmxlbSBpc24ndCByZWxhdGVkIHdpdGggcGFnZWZsaXAsIGl0IGp1c3Qg Y2F1c2VzIGZyb20KPiA3ZmZkN2E2ODUxMWM3MTBiODRkYjM1NDhhMTk5N2ZkMjYyNWY1ODBhIGNv bW1pdCAoZHJtOiBBbHdheXMgcmVqZWN0Cj4gZHJtX3ZibGFua19nZXQoKSBhZnRlciBkcm1fdmJs YW5rX29mZigpKS4KPiAKPiBXZSBuZWVkIHRvIHVzZSBkcm1fdmJsYW5rX29uKCkgYXMgYSBjb3Vu dGVycGFydCB0byBkcm1fdmJsYW5rX29mZigpCj4gYWZ0ZXIgdGhlIGNvbW1pdCAuCj4gCj4gSG93 IGFib3V0IGJlbG93IHBhdGNoPwoKVGhhbmtzIHlvdSBKb29ueW91bmcgYW5kIEFuZHJ6ZWosCgpk cm1fdmJsYW5rX29uL29mZigpIGFyZSBsZWdhY3kgYXBpIHNvIGl0IHdvdWxkIGJlIGJldHRlciB0 byB1c2UKZHJtX3ZibGFua19jcnRjX29uL29mZiBmdW5jdGlvbnMgaW5zdGVhZC4KCkFuZCBkcm1f dmJsYW5rX2NydGNfb2ZmKCkgbWFrZXMgc3VyZSB0aGF0IHRoZSBsYXRlc3QgdmJsYW5rIGZyYW1l IGNvdW50CmlzIHN0b3JlZCBhbmQgcmVzdG9yZWQgYnkgZHJtX3ZibGFua19jcnRjX29uKCkgYWdh aW4uIFNvIG15IG9waW5pb24gaXMsCgpzdGF0aWMgdm9pZCBleHlub3NfZHJtX2NydGNfZHBtcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKQp7Cglbc25pcF0KCglpZiAobW9kZSA+IERS TV9NT0RFX0RQTVNfT04pIHsKCQkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBwYWdlIGZs aXAuICovCgkJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZXh5bm9zX2NydGMtPnBlbmRpbmdfZmxp cF9xdWV1ZSwKCQkJCSFhdG9taWNfcmVhZCgmZXh5bm9zX2NydGMtPnBlbmRpbmdfZmxpcCksCgkJ CQlIWi8yMCkpCgkJCWF0b21pY19zZXQoJmV4eW5vc19jcnRjLT5wZW5kaW5nX2ZsaXAsIDApOwoJ CWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CQkvLzwtIHN0b3JlIHRoZSBsYXRlc3QgdmJsYW5r IGZyYW1lIGNvdW50LgoJfSBlbHNlIHsKCQlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CQkvLzwt IHJlc3RvcmUgdGhlIHZibGFuayBmcmFtZSBjb3VudC4KCX0KCglbc25pcF0KfQoKClRlc3RlZCBh bmQgd29ya2VkIHdlbGwgd2l0aCBhYm92ZSBwYXRjaC4gSG93IGFib3V0IGl0PwoKVGhhbmtzLApJ bmtpIERhZQoKPiAKPj5Gcm9tIDZkZTAxNDczNzQ2YWYyMjVjNjg4ZWU0MzAxMjMwMDFkNTdkOWFm MmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCj4gRnJvbTogSm9vbnlvdW5nIFNoaW0gPGp5MDky Mi5zaGltQHNhbXN1bmcuY29tPgo+IERhdGU6IFRodSwgMiBPY3QgMjAxNCAxNzo0ODoyNyArMDkw MAo+IFN1YmplY3Q6IFtQQVRDSF0gZHJtL2V4eW5vczogdXNlIGRybV92Ymxhbmtfb24oKQo+IAo+ IFdlIG5lZWQgdG8gdXNlIGRybV92Ymxhbmtfb24oKSBhcyBhIGNvdW50ZXJwYXJ0IHRvIGRybV92 Ymxhbmtfb2ZmKCkKPiBhZnRlciB0aGUgY29tbWl0IDdmZmQ3YTY4NTExYyAoImRybTogQWx3YXlz IHJlamVjdCBkcm1fdmJsYW5rX2dldCgpCj4gYWZ0ZXIgZHJtX3ZibGFua19vZmYoKSIpLiBJZiBu b3QsIGRybV92YmxhbmtfZ2V0KCkgd2lsbCBiZSBmYWlsZWQKPiBhbHdheXMgYWZ0ZXIgZHJtX3Zi bGFua19vZmYoKS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNo aW1Ac2Ftc3VuZy5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9jcnRjLmMgfCA0ICsrKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2NydGMuYwo+ IGluZGV4IDhlMzhlOWYuLmRmYTIwOWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4 eW5vcy9leHlub3NfZHJtX2NydGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RybV9jcnRjLmMKPiBAQCAtNzEsNyArNzEsNiBAQCBzdGF0aWMgdm9pZCBleHlub3NfZHJt X2NydGNfZHBtcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKQo+ICAJCQkJIWF0b21p Y19yZWFkKCZleHlub3NfY3J0Yy0+cGVuZGluZ19mbGlwKSwKPiAgCQkJCUhaLzIwKSkKPiAgCQkJ YXRvbWljX3NldCgmZXh5bm9zX2NydGMtPnBlbmRpbmdfZmxpcCwgMCk7Cj4gLQkJZHJtX3ZibGFu a19vZmYoY3J0Yy0+ZGV2LCBleHlub3NfY3J0Yy0+cGlwZSk7Cj4gIAl9Cj4gIAo+ICAJaWYgKG1h bmFnZXItPm9wcy0+ZHBtcykKPiBAQCAtOTAsNiArODksNyBAQCBzdGF0aWMgdm9pZCBleHlub3Nf ZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgCXN0cnVjdCBleHlub3Nf ZHJtX2NydGMgKmV4eW5vc19jcnRjID0gdG9fZXh5bm9zX2NydGMoY3J0Yyk7Cj4gIAlzdHJ1Y3Qg ZXh5bm9zX2RybV9tYW5hZ2VyICptYW5hZ2VyID0gZXh5bm9zX2NydGMtPm1hbmFnZXI7Cj4gIAo+ ICsJZHJtX3ZibGFua19vbihjcnRjLT5kZXYsIGV4eW5vc19jcnRjLT5waXBlKTsKPiAgCWV4eW5v c19kcm1fY3J0Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOwo+ICAKPiAgCWV4eW5vc19w bGFuZV9jb21taXQoY3J0Yy0+cHJpbWFyeSk7Cj4gQEAgLTE3NywxMCArMTc3LDEyIEBAIHN0YXRp YyBpbnQgZXh5bm9zX2RybV9jcnRjX21vZGVfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpjcnRj LCBpbnQgeCwgaW50IHksCj4gIAo+ICBzdGF0aWMgdm9pZCBleHlub3NfZHJtX2NydGNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiArCXN0cnVjdCBleHlub3NfZHJtX2NydGMg KmV4eW5vc19jcnRjID0gdG9fZXh5bm9zX2NydGMoY3J0Yyk7Cj4gIAlzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZTsKPiAgCWludCByZXQ7Cj4gIAo+ICAJZXh5bm9zX2RybV9jcnRjX2RwbXMoY3J0Yywg RFJNX01PREVfRFBNU19PRkYpOwo+ICsJZHJtX3ZibGFua19vZmYoY3J0Yy0+ZGV2LCBleHlub3Nf Y3J0Yy0+cGlwZSk7Cj4gIAo+ICAJZHJtX2Zvcl9lYWNoX2xlZ2FjeV9wbGFuZShwbGFuZSwgJmNy dGMtPmRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCkgewo+ICAJCWlmIChwbGFuZS0+Y3J0YyAh PSBjcnRjKQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752215AbaJBKws (ORCPT ); Thu, 2 Oct 2014 06:52:48 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:43095 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752105AbaJBKwq convert rfc822-to-8bit (ORCPT ); Thu, 2 Oct 2014 06:52:46 -0400 X-AuditID: cbfee68f-f791c6d000004834-b4-542d2e7c3fc1 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: 8BIT Message-id: <542D2E7C.1020904@samsung.com> Date: Thu, 02 Oct 2014 19:52:44 +0900 From: Inki Dae User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130803 Thunderbird/17.0.8 To: Joonyoung Shim Cc: Andrzej Hajda , Seung-Woo Kim , Kyungmin Park , David Airlie , Kukjin Kim , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/exynos: fix vblank handling during dpms off References: <542B9A0E.7020206@samsung.com> <1412151287-12845-1-git-send-email-a.hajda@samsung.com> <542D13CC.5000304@samsung.com> In-reply-to: <542D13CC.5000304@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrEIsWRmVeSWpSXmKPExsWyRsSkRLdGTzfEYP9WZYtb686xWvSeO8lk ceXrezaLF/cuslj0LrjKZnG26Q27xeVdc9gsZpzfx2QxY/JLNgdOj+3fHrB63O8+zuTRt2UV o8fnTXIBLFFcNimpOZllqUX6dglcGUd27mIpWCxTsW7NIfYGxu3iXYycHBICJhJfvl1igrDF JC7cW8/WxcjFISSwlFHiX18nK0zR0scTWSASixglJj1pYwFJ8AoISvyYfA/MZhZQl5g0bxEz hC0isfj3fjYIW1ti2cLXzBDNrxgl+jb8Y4Vo1pJ4fW0uI4jNIqAqcfj5dLBmNiB74or7YM2i AmESL17tAopzcIgI6EhsOMkOModZYCWTRPeRfWC9wgIuElcnfGaCWNDKKLH0/BV2kAQn0OYn vV1gZ0sIXGOXONk7mwlim4DEt8mHWECmSgjISmw6wAzxpqTEwRU3WCYwis9C8twsJM/NQvLc LCTPLWBkWcUomlqQXFCclF5krFecmFtcmpeul5yfu4kRGLWn/z3r38F494D1IUYBDkYlHt6M Bp0QIdbEsuLK3EOMpkAXTWSWEk3OB6aGvJJ4Q2MzIwtTE1NjI3NLMyVx3oVSP4OFBNITS1Kz U1MLUovii0pzUosPMTJxcEo1MCbkvOe17IqQv3Rx7hyN7dKesQKb+l8z1L54/Knyfu7MSH7O a9KvGko/fnKvuFtb+8JH5n4D/40DK65OvJkTIdnzpNJszTu7GVuU5IMztJVsdmtJ1B8Peb3k zzfh4jyPG+92r3MTuGz4NCOxxk/18a0T0ik5Sdo3L+jt2ci47Y/Jdf877+o/liqxFGckGmox FxUnAgAKFLZr1QIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrIIsWRmVeSWpSXmKPExsVy+t9jAd0aPd0Qg72npS1urTvHatF77iST xZWv79ksXty7yGLRu+Aqm8XZpjfsFpd3zWGzmHF+H5PFjMkv2Rw4PbZ/e8Dqcb/7OJNH35ZV jB6fN8kFsEQ1MNpkpCampBYppOYl56dk5qXbKnkHxzvHm5oZGOoaWlqYKynkJeam2iq5+ATo umXmAB2jpFCWmFMKFApILC5W0rfDNCE0xE3XAqYxQtc3JAiux8gADSSsYcz49OwIc0GrTMWf 1Y4NjDPFuxg5OSQETCSWPp7IAmGLSVy4t56ti5GLQ0hgEaPEpCdtYAleAUGJH5PvAdkcHMwC 8hJHLmWDhJkF1CUmzVvEDFH/ilGib8M/Voh6LYnX1+YygtgsAqoSh59PZwax2YDsiSvus4HY ogJhEi9e7WIGmSkioCOx4SQ7yBxmgZVMEt1H9oH1Cgu4SFyd8JkJYkEro8TS81fYQRKcAtoS T3q7WCYwCsxCct8shPtmIblvASPzKkbR1ILkguKk9FxDveLE3OLSvHS95PzcTYzg6H4mtYNx ZYPFIUYBDkYlHt6MBp0QIdbEsuLK3EOMEhzMSiK8TOq6IUK8KYmVValF+fFFpTmpxYcYTYG+ m8gsJZqcD0w8eSXxhsYmZkaWRuaGFkbG5krivAdarQOFBNITS1KzU1MLUotg+pg4OKUaGA9x CbWd84t8J39yDqP1RfuGs20GS4r88kyubHYzYf+sdiZz4mmHWbdsJ1/aeuW8zIPqjA1zTNzD Ht6oPnA11HFZb/ia9G9ZLumORl3q3dfPSNwyel9R+9mHV8X3xqNLc70bg/QWu97hMl5y0LLs 1ra/3jcnCpvXyt/91c0W8jVV7hLvrjtlFUosxRmJhlrMRcWJADHKdYEEAwAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2014년 10월 02일 17:58, Joonyoung Shim wrote: > Hi Andrzej, > > On 10/01/2014 05:14 PM, Andrzej Hajda wrote: >> The patch disables vblanks during dpms off only if pagefilp has >> not been finished. It also replaces drm_vblank_off with drm_crtc_vblank_put. >> It fixes issue with page_flip ioctl not being able to acquire vblank counter. > > This problem isn't related with pageflip, it just causes from > 7ffd7a68511c710b84db3548a1997fd2625f580a commit (drm: Always reject > drm_vblank_get() after drm_vblank_off()). > > We need to use drm_vblank_on() as a counterpart to drm_vblank_off() > after the commit . > > How about below patch? Thanks you Joonyoung and Andrzej, drm_vblank_on/off() are legacy api so it would be better to use drm_vblank_crtc_on/off functions instead. And drm_vblank_crtc_off() makes sure that the latest vblank frame count is stored and restored by drm_vblank_crtc_on() again. So my opinion is, static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) { [snip] if (mode > DRM_MODE_DPMS_ON) { /* wait for the completion of page flip. */ if (!wait_event_timeout(exynos_crtc->pending_flip_queue, !atomic_read(&exynos_crtc->pending_flip), HZ/20)) atomic_set(&exynos_crtc->pending_flip, 0); drm_crtc_vblank_off(crtc); //<- store the latest vblank frame count. } else { drm_crtc_vblank_on(crtc); //<- restore the vblank frame count. } [snip] } Tested and worked well with above patch. How about it? Thanks, Inki Dae > >>>From 6de01473746af225c688ee430123001d57d9af2a Mon Sep 17 00:00:00 2001 > From: Joonyoung Shim > Date: Thu, 2 Oct 2014 17:48:27 +0900 > Subject: [PATCH] drm/exynos: use drm_vblank_on() > > We need to use drm_vblank_on() as a counterpart to drm_vblank_off() > after the commit 7ffd7a68511c ("drm: Always reject drm_vblank_get() > after drm_vblank_off()"). If not, drm_vblank_get() will be failed > always after drm_vblank_off(). > > Signed-off-by: Joonyoung Shim > --- > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > index 8e38e9f..dfa209a 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > @@ -71,7 +71,6 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) > !atomic_read(&exynos_crtc->pending_flip), > HZ/20)) > atomic_set(&exynos_crtc->pending_flip, 0); > - drm_vblank_off(crtc->dev, exynos_crtc->pipe); > } > > if (manager->ops->dpms) > @@ -90,6 +89,7 @@ static void exynos_drm_crtc_commit(struct drm_crtc *crtc) > struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc); > struct exynos_drm_manager *manager = exynos_crtc->manager; > > + drm_vblank_on(crtc->dev, exynos_crtc->pipe); > exynos_drm_crtc_dpms(crtc, DRM_MODE_DPMS_ON); > > exynos_plane_commit(crtc->primary); > @@ -177,10 +177,12 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, > > static void exynos_drm_crtc_disable(struct drm_crtc *crtc) > { > + struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc); > struct drm_plane *plane; > int ret; > > exynos_drm_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); > + drm_vblank_off(crtc->dev, exynos_crtc->pipe); > > drm_for_each_legacy_plane(plane, &crtc->dev->mode_config.plane_list) { > if (plane->crtc != crtc) >