From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [RFC RESEND PATCH] drm/rockchip: update cursors asynchronously through atomic. Date: Mon, 23 Jul 2018 10:36:34 -0400 Message-ID: <20180723143634.GJ20359@art_vandelay> References: <20180627211447.20927-1-enric.balletbo@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180627211447.20927-1-enric.balletbo@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Enric Balletbo i Serra Cc: kernel@collabora.com, Sean Paul , Gustavo Padovan , David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, =?iso-8859-1?Q?St=E9phane?= Marchesin , Tomasz Figa , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org T24gV2VkLCBKdW4gMjcsIDIwMTggYXQgMTE6MTQ6NDdQTSArMDIwMCwgRW5yaWMgQmFsbGV0Ym8g aSBTZXJyYSB3cm90ZToKPiBBZGQgc3VwcG9ydCB0byBhc3luYyB1cGRhdGVzIG9mIGN1cnNvcnMg YnkgdXNpbmcgdGhlIG5ldyBhdG9taWMKPiBpbnRlcmZhY2UgZm9yIHRoYXQuCj4gCj4gU2lnbmVk LW9mZi1ieTogRW5yaWMgQmFsbGV0Ym8gaSBTZXJyYSA8ZW5yaWMuYmFsbGV0Ym9AY29sbGFib3Jh LmNvbT4KCkxHVE0uIEdpdmVuIHJvY2tjaGlwIGhhc24ndCB3ZWlnaGVkIGluIG9uIHRoZSBwYXRj aCwgYW5kIHRoYXQgeW91J3ZlIHRlc3RlZCBpdApvbiByZWFsIGhhcmR3YXJlLCBsZXQncyBsYW5k IGl0LgoKUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgoKCj4g LS0tCj4gSSBhbSBzZW5kaW5nIHRoaXMgYXMgUkZDIGJlY2F1c2UgSSBzdGlsbCBkb24ndCBoYXZl IGEgZGVlcCBrbm93bGVkZ2Ugb2YKPiB0aGUgaHcgYW5kIEkgYW0gbm90IHN1cmUgaWYgdGhlIHZv cF9wbGFuZV91cGRhdGUgZnVuY3Rpb24gY2FuIGJlIHJldXNlZAo+IGluIGJvdGggY2FzZXMsIGF0 b21pY191cGRhdGVzIGFuZCBhdG9taWNfYXN5bmNfdXBkYXRlcy4gSSB0aGluayB0aGF0Cj4gc29t ZW9uZSB3aXRoIG1vcmUga25vd2xlZGdlIHNob3VsZCB0YWtlIGEgbG9vay4gVGhlIHBhdGNoIHdh cyB0ZXN0ZWQgb24KPiBhIFNhbXN1bmcgQ2hyb21lYm9vayBQbHVzIGluIHR3byB3YXlzLgo+IAo+ IDEuIFJ1bm5pbmcgYWxsIGlndCBrbXNfY3Vyc29yX2xlZ2FjeSBhbmQga21zX2F0b21pY0BwbGFu ZV9jdXJzb3JfbGVnYWN5Cj4gdGVzdHMgYW5kIHNlZSB0aGF0IHRoZXJlIGlzIG5vIHJlZ3Jlc3Np b24gYWZ0ZXIgdGhlIHBhdGNoLgo+IAo+IDIuIFJ1bm5pbmcgd2VzdG9uIHVzaW5nIHRoZSBhdG9t aWMgQVBJLgo+IAo+IEJlc3QgcmVnYXJkcywKPiAgIEVucmljCj4gCj4gIGRyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCA4MCArKysrKysrKysrKysrKysrLS0tLS0K PiAgMSBmaWxlIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+IGluZGV4IDUz ZDRhZmUxNTI3OC4uMWViNmJkYTkyNGFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX3ZvcC5jCj4gQEAgLTY4OCw4ICs2ODgsNyBAQCBzdGF0aWMgdm9pZCB2 b3BfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlzcGlu X3VubG9jaygmdm9wLT5yZWdfbG9jayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHZvcF9wbGFu ZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKPiArc3RhdGljIHZvaWQgdm9wX3BsYW5lX3VwZGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgewo+ICAJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq c3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+ Y3J0YzsKPiBAQCAtNzEwLDIwICs3MDksNiBAQCBzdGF0aWMgdm9pZCB2b3BfcGxhbmVfYXRvbWlj X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCWJvb2wgcmJfc3dhcDsKPiAgCWlu dCBmb3JtYXQ7Cj4gIAo+IC0JLyoKPiAtCSAqIGNhbid0IHVwZGF0ZSBwbGFuZSB3aGVuIHZvcCBp cyBkaXNhYmxlZC4KPiAtCSAqLwo+IC0JaWYgKFdBUk5fT04oIWNydGMpKQo+IC0JCXJldHVybjsK PiAtCj4gLQlpZiAoV0FSTl9PTighdm9wLT5pc19lbmFibGVkKSkKPiAtCQlyZXR1cm47Cj4gLQo+ IC0JaWYgKCFzdGF0ZS0+dmlzaWJsZSkgewo+IC0JCXZvcF9wbGFuZV9hdG9taWNfZGlzYWJsZShw bGFuZSwgb2xkX3N0YXRlKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+ICAJb2JqID0gcm9ja2No aXBfZmJfZ2V0X2dlbV9vYmooZmIsIDApOwo+ICAJcmtfb2JqID0gdG9fcm9ja2NoaXBfb2JqKG9i aik7Cj4gIAo+IEBAIC03OTQsMTAgKzc3OSw3MyBAQCBzdGF0aWMgdm9pZCB2b3BfcGxhbmVfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXNwaW5fdW5sb2NrKCZ2b3At PnJlZ19sb2NrKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgdm9wX3BsYW5lX2F0b21pY191cGRh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9 IHBsYW5lLT5zdGF0ZTsKPiArCXN0cnVjdCB2b3AgKnZvcCA9IHRvX3ZvcChzdGF0ZS0+Y3J0Yyk7 Cj4gKwo+ICsJLyoKPiArCSAqIGNhbid0IHVwZGF0ZSBwbGFuZSB3aGVuIHZvcCBpcyBkaXNhYmxl ZC4KPiArCSAqLwo+ICsJaWYgKFdBUk5fT04oIXN0YXRlLT5jcnRjKSkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJaWYgKFdBUk5fT04oIXZvcC0+aXNfZW5hYmxlZCkpCj4gKwkJcmV0dXJuOwo+ICsKPiAr CWlmICghc3RhdGUtPnZpc2libGUpIHsKPiArCQl2b3BfcGxhbmVfYXRvbWljX2Rpc2FibGUocGxh bmUsIG9sZF9zdGF0ZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXZvcF9wbGFuZV91cGRh dGUocGxhbmUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZvcF9wbGFuZV9hdG9taWNfYXN5bmNf Y2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsK PiArCj4gKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfY3J0Y19zdGF0ZShz dGF0ZS0+c3RhdGUsCj4gKwkJCQkJCQlzdGF0ZS0+Y3J0Yyk7Cj4gKwlpZiAoV0FSTl9PTighY3J0 Y19zdGF0ZSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKCFjcnRjX3N0YXRlLT5h Y3RpdmUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0 YyAhPSBzdGF0ZS0+Y3J0YyB8fAo+ICsJICAgIHBsYW5lLT5zdGF0ZS0+c3JjX3cgIT0gc3RhdGUt PnNyY193IHx8Cj4gKwkgICAgcGxhbmUtPnN0YXRlLT5zcmNfaCAhPSBzdGF0ZS0+c3JjX2ggfHwK PiArCSAgICBwbGFuZS0+c3RhdGUtPmNydGNfdyAhPSBzdGF0ZS0+Y3J0Y193IHx8Cj4gKwkgICAg cGxhbmUtPnN0YXRlLT5jcnRjX2ggIT0gc3RhdGUtPmNydGNfaCB8fAo+ICsJICAgICFwbGFuZS0+ c3RhdGUtPmZiIHx8Cj4gKwkgICAgcGxhbmUtPnN0YXRlLT5mYiAhPSBzdGF0ZS0+ZmIpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZvcF9wbGFuZV9hdG9taWNfYXN5bmNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICsJCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQo+ICt7Cj4gKwlwbGFu ZS0+c3RhdGUtPnNyY194ID0gbmV3X3N0YXRlLT5zcmNfeDsKPiArCXBsYW5lLT5zdGF0ZS0+c3Jj X3kgPSBuZXdfc3RhdGUtPnNyY195Owo+ICsJcGxhbmUtPnN0YXRlLT5jcnRjX3ggPSBuZXdfc3Rh dGUtPmNydGNfeDsKPiArCXBsYW5lLT5zdGF0ZS0+Y3J0Y195ID0gbmV3X3N0YXRlLT5jcnRjX3k7 Cj4gKwlwbGFuZS0+c3RhdGUtPmZiID0gbmV3X3N0YXRlLT5mYjsKPiArCSpwbGFuZS0+c3RhdGUg PSAqbmV3X3N0YXRlOwo+ICsKPiArCXZvcF9wbGFuZV91cGRhdGUocGxhbmUpOwo+ICt9Cj4gKwo+ ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgcGxhbmVfaGVscGVy X2Z1bmNzID0gewo+ICAJLmF0b21pY19jaGVjayA9IHZvcF9wbGFuZV9hdG9taWNfY2hlY2ssCj4g IAkuYXRvbWljX3VwZGF0ZSA9IHZvcF9wbGFuZV9hdG9taWNfdXBkYXRlLAo+ICAJLmF0b21pY19k aXNhYmxlID0gdm9wX3BsYW5lX2F0b21pY19kaXNhYmxlLAo+ICsJLmF0b21pY19hc3luY19jaGVj ayA9IHZvcF9wbGFuZV9hdG9taWNfYXN5bmNfY2hlY2ssCj4gKwkuYXRvbWljX2FzeW5jX3VwZGF0 ZSA9IHZvcF9wbGFuZV9hdG9taWNfYXN5bmNfdXBkYXRlLAo+ICB9Owo+ICAKPiAgc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mgdm9wX3BsYW5lX2Z1bmNzID0gewo+IC0tIAo+IDIu MTguMAo+IAoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9t aXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: seanpaul@chromium.org (Sean Paul) Date: Mon, 23 Jul 2018 10:36:34 -0400 Subject: [RFC RESEND PATCH] drm/rockchip: update cursors asynchronously through atomic. In-Reply-To: <20180627211447.20927-1-enric.balletbo@collabora.com> References: <20180627211447.20927-1-enric.balletbo@collabora.com> Message-ID: <20180723143634.GJ20359@art_vandelay> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Jun 27, 2018 at 11:14:47PM +0200, Enric Balletbo i Serra wrote: > Add support to async updates of cursors by using the new atomic > interface for that. > > Signed-off-by: Enric Balletbo i Serra LGTM. Given rockchip hasn't weighed in on the patch, and that you've tested it on real hardware, let's land it. Reviewed-by: Sean Paul > --- > I am sending this as RFC because I still don't have a deep knowledge of > the hw and I am not sure if the vop_plane_update function can be reused > in both cases, atomic_updates and atomic_async_updates. I think that > someone with more knowledge should take a look. The patch was tested on > a Samsung Chromebook Plus in two ways. > > 1. Running all igt kms_cursor_legacy and kms_atomic at plane_cursor_legacy > tests and see that there is no regression after the patch. > > 2. Running weston using the atomic API. > > Best regards, > Enric > > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 80 ++++++++++++++++----- > 1 file changed, 64 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 53d4afe15278..1eb6bda924af 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -688,8 +688,7 @@ static void vop_plane_atomic_disable(struct drm_plane *plane, > spin_unlock(&vop->reg_lock); > } > > -static void vop_plane_atomic_update(struct drm_plane *plane, > - struct drm_plane_state *old_state) > +static void vop_plane_update(struct drm_plane *plane) > { > struct drm_plane_state *state = plane->state; > struct drm_crtc *crtc = state->crtc; > @@ -710,20 +709,6 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > bool rb_swap; > int format; > > - /* > - * can't update plane when vop is disabled. > - */ > - if (WARN_ON(!crtc)) > - return; > - > - if (WARN_ON(!vop->is_enabled)) > - return; > - > - if (!state->visible) { > - vop_plane_atomic_disable(plane, old_state); > - return; > - } > - > obj = rockchip_fb_get_gem_obj(fb, 0); > rk_obj = to_rockchip_obj(obj); > > @@ -794,10 +779,73 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > spin_unlock(&vop->reg_lock); > } > > +static void vop_plane_atomic_update(struct drm_plane *plane, > + struct drm_plane_state *old_state) > +{ > + struct drm_plane_state *state = plane->state; > + struct vop *vop = to_vop(state->crtc); > + > + /* > + * can't update plane when vop is disabled. > + */ > + if (WARN_ON(!state->crtc)) > + return; > + > + if (WARN_ON(!vop->is_enabled)) > + return; > + > + if (!state->visible) { > + vop_plane_atomic_disable(plane, old_state); > + return; > + } > + > + vop_plane_update(plane); > +} > + > +static int vop_plane_atomic_async_check(struct drm_plane *plane, > + struct drm_plane_state *state) > +{ > + struct drm_crtc_state *crtc_state; > + > + crtc_state = drm_atomic_get_existing_crtc_state(state->state, > + state->crtc); > + if (WARN_ON(!crtc_state)) > + return -EINVAL; > + > + if (!crtc_state->active) > + return -EINVAL; > + > + if (plane->state->crtc != state->crtc || > + plane->state->src_w != state->src_w || > + plane->state->src_h != state->src_h || > + plane->state->crtc_w != state->crtc_w || > + plane->state->crtc_h != state->crtc_h || > + !plane->state->fb || > + plane->state->fb != state->fb) > + return -EINVAL; > + > + return 0; > +} > + > +static void vop_plane_atomic_async_update(struct drm_plane *plane, > + struct drm_plane_state *new_state) > +{ > + plane->state->src_x = new_state->src_x; > + plane->state->src_y = new_state->src_y; > + plane->state->crtc_x = new_state->crtc_x; > + plane->state->crtc_y = new_state->crtc_y; > + plane->state->fb = new_state->fb; > + *plane->state = *new_state; > + > + vop_plane_update(plane); > +} > + > static const struct drm_plane_helper_funcs plane_helper_funcs = { > .atomic_check = vop_plane_atomic_check, > .atomic_update = vop_plane_atomic_update, > .atomic_disable = vop_plane_atomic_disable, > + .atomic_async_check = vop_plane_atomic_async_check, > + .atomic_async_update = vop_plane_atomic_async_update, > }; > > static const struct drm_plane_funcs vop_plane_funcs = { > -- > 2.18.0 > -- Sean Paul, Software Engineer, Google / Chromium OS From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.4 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FCCAECDE5F for ; Mon, 23 Jul 2018 14:36:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3C4DE20779 for ; Mon, 23 Jul 2018 14:36:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="UCGef+kS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3C4DE20779 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388477AbeGWPiJ (ORCPT ); Mon, 23 Jul 2018 11:38:09 -0400 Received: from mail-yb0-f195.google.com ([209.85.213.195]:38253 "EHLO mail-yb0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387877AbeGWPiI (ORCPT ); Mon, 23 Jul 2018 11:38:08 -0400 Received: by mail-yb0-f195.google.com with SMTP id i9-v6so319320ybo.5 for ; Mon, 23 Jul 2018 07:36:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=DUf2r8EyJM/SRwqxersBzu6cymZcjLmFoB6gYIYzErA=; b=UCGef+kScFAw19A2Ek0QrjGh5rv7XKWjc7dP/QYEjMK6Ojo1Zn2nt/fnvo3aLRSR6K Y+aqMzEp25puUwQ0Bz9wSOyptXH4jAip7wB6UG/Oo05+ULK9X8gOAFiPH7DFQMUkyaM8 MDwY6zOLHir9zWzwXvLBWmg+hmssCOfH+Mi2E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=DUf2r8EyJM/SRwqxersBzu6cymZcjLmFoB6gYIYzErA=; b=EZ2FARqk9faUNcyDs733GLD09ywmlz4PtY7POfGBPbC/q6n5eabkiOewTrf1EjigSG pNb3HEvoF2uDZ+iUDIOXn9cpDHhjXdlt+QZTSMeN57yENLEdFgJuMdBYTwY5Ird0vHml FNtpe5S9OmOKxHqbhzg8KGSySZYrEn2JjB7EtPrD+6NkNKy1SXKg856/x+R0MtjPhYUC PqRfpowvVhJIa8mpJJx9Iot4cEQ6rnycJqOVGfPKALHqC5rwvYSm3+nFB3Gp7XPK6w2e yjESoP46NRY3aV2Ov/g9qYc8h6w/7ECVjSEtflBPJHYuE8QYuscV78qjQwTGC/iMiXuR 7Tmg== X-Gm-Message-State: AOUpUlGu93P/+0phSdD37EIxla8sycj8hH0eaUBP3wZqGpBkZIkZd3cg pMQOO1ae8rkyZgExBT1n9NBbzg== X-Google-Smtp-Source: AAOMgpcMygQRNZkZUCydor88AbxVyPuNwILZMYUUcWUkiaURxhE6sr0KH9YCvcNHDr0ZYeJqntWiwQ== X-Received: by 2002:a25:c4c6:: with SMTP id u189-v6mr7119395ybf.45.1532356595572; Mon, 23 Jul 2018 07:36:35 -0700 (PDT) Received: from localhost ([2620:0:1013:11:ad55:b1db:adfe:3b9f]) by smtp.gmail.com with ESMTPSA id d6-v6sm986507ywa.85.2018.07.23.07.36.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Jul 2018 07:36:34 -0700 (PDT) Date: Mon, 23 Jul 2018 10:36:34 -0400 From: Sean Paul To: Enric Balletbo i Serra Cc: Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , David Airlie , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Gustavo Padovan , Tomasz Figa , Sean Paul , kernel@collabora.com, =?iso-8859-1?Q?St=E9phane?= Marchesin Subject: Re: [RFC RESEND PATCH] drm/rockchip: update cursors asynchronously through atomic. Message-ID: <20180723143634.GJ20359@art_vandelay> References: <20180627211447.20927-1-enric.balletbo@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180627211447.20927-1-enric.balletbo@collabora.com> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jun 27, 2018 at 11:14:47PM +0200, Enric Balletbo i Serra wrote: > Add support to async updates of cursors by using the new atomic > interface for that. > > Signed-off-by: Enric Balletbo i Serra LGTM. Given rockchip hasn't weighed in on the patch, and that you've tested it on real hardware, let's land it. Reviewed-by: Sean Paul > --- > I am sending this as RFC because I still don't have a deep knowledge of > the hw and I am not sure if the vop_plane_update function can be reused > in both cases, atomic_updates and atomic_async_updates. I think that > someone with more knowledge should take a look. The patch was tested on > a Samsung Chromebook Plus in two ways. > > 1. Running all igt kms_cursor_legacy and kms_atomic@plane_cursor_legacy > tests and see that there is no regression after the patch. > > 2. Running weston using the atomic API. > > Best regards, > Enric > > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 80 ++++++++++++++++----- > 1 file changed, 64 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 53d4afe15278..1eb6bda924af 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -688,8 +688,7 @@ static void vop_plane_atomic_disable(struct drm_plane *plane, > spin_unlock(&vop->reg_lock); > } > > -static void vop_plane_atomic_update(struct drm_plane *plane, > - struct drm_plane_state *old_state) > +static void vop_plane_update(struct drm_plane *plane) > { > struct drm_plane_state *state = plane->state; > struct drm_crtc *crtc = state->crtc; > @@ -710,20 +709,6 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > bool rb_swap; > int format; > > - /* > - * can't update plane when vop is disabled. > - */ > - if (WARN_ON(!crtc)) > - return; > - > - if (WARN_ON(!vop->is_enabled)) > - return; > - > - if (!state->visible) { > - vop_plane_atomic_disable(plane, old_state); > - return; > - } > - > obj = rockchip_fb_get_gem_obj(fb, 0); > rk_obj = to_rockchip_obj(obj); > > @@ -794,10 +779,73 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > spin_unlock(&vop->reg_lock); > } > > +static void vop_plane_atomic_update(struct drm_plane *plane, > + struct drm_plane_state *old_state) > +{ > + struct drm_plane_state *state = plane->state; > + struct vop *vop = to_vop(state->crtc); > + > + /* > + * can't update plane when vop is disabled. > + */ > + if (WARN_ON(!state->crtc)) > + return; > + > + if (WARN_ON(!vop->is_enabled)) > + return; > + > + if (!state->visible) { > + vop_plane_atomic_disable(plane, old_state); > + return; > + } > + > + vop_plane_update(plane); > +} > + > +static int vop_plane_atomic_async_check(struct drm_plane *plane, > + struct drm_plane_state *state) > +{ > + struct drm_crtc_state *crtc_state; > + > + crtc_state = drm_atomic_get_existing_crtc_state(state->state, > + state->crtc); > + if (WARN_ON(!crtc_state)) > + return -EINVAL; > + > + if (!crtc_state->active) > + return -EINVAL; > + > + if (plane->state->crtc != state->crtc || > + plane->state->src_w != state->src_w || > + plane->state->src_h != state->src_h || > + plane->state->crtc_w != state->crtc_w || > + plane->state->crtc_h != state->crtc_h || > + !plane->state->fb || > + plane->state->fb != state->fb) > + return -EINVAL; > + > + return 0; > +} > + > +static void vop_plane_atomic_async_update(struct drm_plane *plane, > + struct drm_plane_state *new_state) > +{ > + plane->state->src_x = new_state->src_x; > + plane->state->src_y = new_state->src_y; > + plane->state->crtc_x = new_state->crtc_x; > + plane->state->crtc_y = new_state->crtc_y; > + plane->state->fb = new_state->fb; > + *plane->state = *new_state; > + > + vop_plane_update(plane); > +} > + > static const struct drm_plane_helper_funcs plane_helper_funcs = { > .atomic_check = vop_plane_atomic_check, > .atomic_update = vop_plane_atomic_update, > .atomic_disable = vop_plane_atomic_disable, > + .atomic_async_check = vop_plane_atomic_async_check, > + .atomic_async_update = vop_plane_atomic_async_update, > }; > > static const struct drm_plane_funcs vop_plane_funcs = { > -- > 2.18.0 > -- Sean Paul, Software Engineer, Google / Chromium OS