From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 1/3] drm/atomic-helper: Export framebuffer_changed() Date: Tue, 19 Jan 2016 12:03:34 +0100 Message-ID: <20160119110334.GA19130@phenom.ffwll.local> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline 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: John Keeping Cc: Linux Kernel Mailing List , dri-devel , "open list:ARM/Rockchip SoC..." , "linux-arm-kernel@lists.infradead.org" List-Id: linux-rockchip.vger.kernel.org T24gVHVlLCBKYW4gMTksIDIwMTYgYXQgMTA6NDY6NThBTSArMDAwMCwgSm9obiBLZWVwaW5nIHdy b3RlOgo+IFRoZSBSb2NrY2hpcCBkcml2ZXIgY2Fubm90IHVzZSBkcm1fYXRvbWljX2hlbHBlcl93 YWl0X2Zvcl92YmxhbmtzKCkKPiBiZWNhdXNlIGl0IGhhcyBoYXJkd2FyZSBjb3VudGVycyBmb3Ig bmVpdGhlciB2YmxhbmtzIG5vciBzY2FubGluZXMuCj4gCj4gSW4gb3JkZXIgdG8gc2ltcGxpZnkg cmUtaW1wbGVtZW50aW5nIHRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIGRyaXZlciwKPiBleHBv cnQgdGhlIGZyYW1lYnVmZmVyX2NoYW5nZWQoKSBoZWxwZXIgc28gaXQgY2FuIGJlIHJldXNlZC4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBKb2huIEtlZXBpbmcgPGpvaG5AbWV0YW5hdGUuY29tPgo+IFJl dmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgoKQWxzbyBh Y2sgZm9yIG1lcmdpbmcgdGhyb3VnaCByb2NrY2hpcCBnaXQgdHJlZXMuIEkgZGlzY3Vzc2VkIHRo aXMgd2l0aApEYXZlIEFpcmxpZSwgaGUncyBvayB3aXRoIHRoYXQuCi1EYW5pZWwKCj4gLS0tCj4g VW5jaGFuZ2VkIHNpbmNlIHYxLgo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxw ZXIuYyB8IDI0ICsrKysrKysrKysrKysrKysrKysrLS0tLQo+ICBpbmNsdWRlL2RybS9kcm1fYXRv bWljX2hlbHBlci5oICAgICB8ICA0ICsrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRp b25zKCspLCA0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5j Cj4gaW5kZXggMjY4ZDM3Zi4uNzQ0OTI5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hl bHBlci5jCj4gQEAgLTk0OCw5ICs5NDgsMjMgQEAgc3RhdGljIHZvaWQgd2FpdF9mb3JfZmVuY2Vz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIGZy YW1lYnVmZmVyX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCXN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUsCj4gLQkJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9mcmFtZWJ1ZmZlcl9jaGFuZ2VkIC0gY2hl Y2sgaWYgZnJhbWVidWZmZXIgaGFzIGNoYW5nZWQKPiArICogQGRldjogRFJNIGRldmljZQo+ICsg KiBAb2xkX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IHdpdGggb2xkIHN0YXRlIHN0cnVjdHVy ZXMKPiArICogQGNydGM6IERSTSBjcnRjCj4gKyAqCj4gKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBm cmFtZWJ1ZmZlciB1c2VkIGZvciB0aGlzIENSVEMgY2hhbmdlcyBhcyBhIHJlc3VsdCBvZgo+ICsg KiB0aGUgYXRvbWljIHVwZGF0ZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHdoaWNoIGNh bm5vdCB1c2UKPiArICogZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcygpIGFuZCBu ZWVkIHRvIHJlaW1wbGVtZW50IGl0cwo+ICsgKiBmdW5jdGlvbmFsaXR5Lgo+ICsgKgo+ICsgKiBS ZXR1cm5zOgo+ICsgKiB0cnVlIGlmIHRoZSBmcmFtZWJ1ZmZlciBjaGFuZ2VkLgo+ICsgKi8KPiAr Ym9vbCBkcm1fYXRvbWljX2hlbHBlcl9mcmFtZWJ1ZmZlcl9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gKwkJCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSwK PiArCQkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwo+ICAJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlOwo+ IEBAIC05NjcsNiArOTgxLDcgQEAgc3RhdGljIGJvb2wgZnJhbWVidWZmZXJfY2hhbmdlZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAKPiAgCXJldHVybiBmYWxzZTsKPiAgfQo+ICtFWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2ZyYW1lYnVmZmVyX2NoYW5nZWQpOwo+ICAKPiAgLyoq Cj4gICAqIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MgLSB3YWl0IGZvciB2Ymxh bmsgb24gY3J0Y3MKPiBAQCAtMTAwMSw3ICsxMDE2LDggQEAgZHJtX2F0b21pY19oZWxwZXJfd2Fp dF9mb3JfdmJsYW5rcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCWlmIChvbGRfc3RhdGUt PmxlZ2FjeV9jdXJzb3JfdXBkYXRlKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJaWYgKCFmcmFt ZWJ1ZmZlcl9jaGFuZ2VkKGRldiwgb2xkX3N0YXRlLCBjcnRjKSkKPiArCQlpZiAoIWRybV9hdG9t aWNfaGVscGVyX2ZyYW1lYnVmZmVyX2NoYW5nZWQoZGV2LAo+ICsJCQkJb2xkX3N0YXRlLCBjcnRj KSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCXJldCA9IGRybV9jcnRjX3ZibGFua19nZXQoY3J0 Yyk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmggYi9pbmNs dWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gaW5kZXggYTI4NmNjZS4uNzRmY2U3OCAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAo+IEBAIC00Miw2ICs0MiwxMCBAQCBpbnQgZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCSAgICAgc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCQkgICAgIGJvb2wgYXN5bmMpOwo+ICAK PiArYm9vbCBkcm1fYXRvbWljX2hlbHBlcl9mcmFtZWJ1ZmZlcl9jaGFuZ2VkKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0 ZSwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICsKPiAgdm9pZCBkcm1fYXRv bWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJ CQkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSk7Cj4gIAo+IC0tIAo+IDIuNy4w LjIyNi5nZmU5ODZmZQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel@ffwll.ch (Daniel Vetter) Date: Tue, 19 Jan 2016 12:03:34 +0100 Subject: [PATCH v2 1/3] drm/atomic-helper: Export framebuffer_changed() In-Reply-To: References: Message-ID: <20160119110334.GA19130@phenom.ffwll.local> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, Jan 19, 2016 at 10:46:58AM +0000, John Keeping wrote: > The Rockchip driver cannot use drm_atomic_helper_wait_for_vblanks() > because it has hardware counters for neither vblanks nor scanlines. > > In order to simplify re-implementing the functionality for this driver, > export the framebuffer_changed() helper so it can be reused. > > Signed-off-by: John Keeping > Reviewed-by: Daniel Vetter Also ack for merging through rockchip git trees. I discussed this with Dave Airlie, he's ok with that. -Daniel > --- > Unchanged since v1. > > drivers/gpu/drm/drm_atomic_helper.c | 24 ++++++++++++++++++++---- > include/drm/drm_atomic_helper.h | 4 ++++ > 2 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 268d37f..7449293 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -948,9 +948,23 @@ static void wait_for_fences(struct drm_device *dev, > } > } > > -static bool framebuffer_changed(struct drm_device *dev, > - struct drm_atomic_state *old_state, > - struct drm_crtc *crtc) > +/** > + * drm_atomic_helper_framebuffer_changed - check if framebuffer has changed > + * @dev: DRM device > + * @old_state: atomic state object with old state structures > + * @crtc: DRM crtc > + * > + * Checks whether the framebuffer used for this CRTC changes as a result of > + * the atomic update. This is useful for drivers which cannot use > + * drm_atomic_helper_wait_for_vblanks() and need to reimplement its > + * functionality. > + * > + * Returns: > + * true if the framebuffer changed. > + */ > +bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, > + struct drm_atomic_state *old_state, > + struct drm_crtc *crtc) > { > struct drm_plane *plane; > struct drm_plane_state *old_plane_state; > @@ -967,6 +981,7 @@ static bool framebuffer_changed(struct drm_device *dev, > > return false; > } > +EXPORT_SYMBOL(drm_atomic_helper_framebuffer_changed); > > /** > * drm_atomic_helper_wait_for_vblanks - wait for vblank on crtcs > @@ -1001,7 +1016,8 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev, > if (old_state->legacy_cursor_update) > continue; > > - if (!framebuffer_changed(dev, old_state, crtc)) > + if (!drm_atomic_helper_framebuffer_changed(dev, > + old_state, crtc)) > continue; > > ret = drm_crtc_vblank_get(crtc); > diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h > index a286cce..74fce78 100644 > --- a/include/drm/drm_atomic_helper.h > +++ b/include/drm/drm_atomic_helper.h > @@ -42,6 +42,10 @@ int drm_atomic_helper_commit(struct drm_device *dev, > struct drm_atomic_state *state, > bool async); > > +bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, > + struct drm_atomic_state *old_state, > + struct drm_crtc *crtc); > + > void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev, > struct drm_atomic_state *old_state); > > -- > 2.7.0.226.gfe986fe > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752035AbcASLDi (ORCPT ); Tue, 19 Jan 2016 06:03:38 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:35602 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750862AbcASLDb (ORCPT ); Tue, 19 Jan 2016 06:03:31 -0500 Date: Tue, 19 Jan 2016 12:03:34 +0100 From: Daniel Vetter To: John Keeping Cc: Mark yao , Daniel Vetter , Linux Kernel Mailing List , dri-devel , "open list:ARM/Rockchip SoC..." , "linux-arm-kernel@lists.infradead.org" , Thierry Reding Subject: Re: [PATCH v2 1/3] drm/atomic-helper: Export framebuffer_changed() Message-ID: <20160119110334.GA19130@phenom.ffwll.local> Mail-Followup-To: John Keeping , Mark yao , Linux Kernel Mailing List , dri-devel , "open list:ARM/Rockchip SoC..." , "linux-arm-kernel@lists.infradead.org" , Thierry Reding References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 4.3.0-1-amd64 User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 19, 2016 at 10:46:58AM +0000, John Keeping wrote: > The Rockchip driver cannot use drm_atomic_helper_wait_for_vblanks() > because it has hardware counters for neither vblanks nor scanlines. > > In order to simplify re-implementing the functionality for this driver, > export the framebuffer_changed() helper so it can be reused. > > Signed-off-by: John Keeping > Reviewed-by: Daniel Vetter Also ack for merging through rockchip git trees. I discussed this with Dave Airlie, he's ok with that. -Daniel > --- > Unchanged since v1. > > drivers/gpu/drm/drm_atomic_helper.c | 24 ++++++++++++++++++++---- > include/drm/drm_atomic_helper.h | 4 ++++ > 2 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 268d37f..7449293 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -948,9 +948,23 @@ static void wait_for_fences(struct drm_device *dev, > } > } > > -static bool framebuffer_changed(struct drm_device *dev, > - struct drm_atomic_state *old_state, > - struct drm_crtc *crtc) > +/** > + * drm_atomic_helper_framebuffer_changed - check if framebuffer has changed > + * @dev: DRM device > + * @old_state: atomic state object with old state structures > + * @crtc: DRM crtc > + * > + * Checks whether the framebuffer used for this CRTC changes as a result of > + * the atomic update. This is useful for drivers which cannot use > + * drm_atomic_helper_wait_for_vblanks() and need to reimplement its > + * functionality. > + * > + * Returns: > + * true if the framebuffer changed. > + */ > +bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, > + struct drm_atomic_state *old_state, > + struct drm_crtc *crtc) > { > struct drm_plane *plane; > struct drm_plane_state *old_plane_state; > @@ -967,6 +981,7 @@ static bool framebuffer_changed(struct drm_device *dev, > > return false; > } > +EXPORT_SYMBOL(drm_atomic_helper_framebuffer_changed); > > /** > * drm_atomic_helper_wait_for_vblanks - wait for vblank on crtcs > @@ -1001,7 +1016,8 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev, > if (old_state->legacy_cursor_update) > continue; > > - if (!framebuffer_changed(dev, old_state, crtc)) > + if (!drm_atomic_helper_framebuffer_changed(dev, > + old_state, crtc)) > continue; > > ret = drm_crtc_vblank_get(crtc); > diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h > index a286cce..74fce78 100644 > --- a/include/drm/drm_atomic_helper.h > +++ b/include/drm/drm_atomic_helper.h > @@ -42,6 +42,10 @@ int drm_atomic_helper_commit(struct drm_device *dev, > struct drm_atomic_state *state, > bool async); > > +bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, > + struct drm_atomic_state *old_state, > + struct drm_crtc *crtc); > + > void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev, > struct drm_atomic_state *old_state); > > -- > 2.7.0.226.gfe986fe > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch