From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753585AbdLMPe6 (ORCPT ); Wed, 13 Dec 2017 10:34:58 -0500 Received: from mail.free-electrons.com ([62.4.15.54]:37713 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753427AbdLMPdk (ORCPT ); Wed, 13 Dec 2017 10:33:40 -0500 From: Maxime Ripard To: Daniel Vetter , David Airlie , Chen-Yu Tsai , Maxime Ripard Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Thomas Petazzoni , thomas@vitsch.nl Subject: [PATCH 4/8] drm/sun4i: crtc: Add a custom crtc atomic_check Date: Wed, 13 Dec 2017 16:33:28 +0100 Message-Id: X-Mailer: git-send-email 2.14.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We have some restrictions on what the planes and CRTC can provide that are tied to only one generation of display engines. For example, on the first generation, we can only have one YUV plane or one plane that uses the frontend output. Let's allow our engines to provide an atomic_check callback to validate the current configuration. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_crtc.c | 14 ++++++++++++++ drivers/gpu/drm/sun4i/sunxi_engine.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c index 5decae0069d0..2a565325714f 100644 --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c @@ -46,6 +46,19 @@ static struct drm_encoder *sun4i_crtc_get_encoder(struct drm_crtc *crtc) return NULL; } +static int sun4i_crtc_atomic_check(struct drm_crtc *crtc, + struct drm_crtc_state *state) +{ + struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc); + struct sunxi_engine *engine = scrtc->engine; + int ret = 0; + + if (engine && engine->ops && engine->ops->atomic_check) + ret = engine->ops->atomic_check(engine, state); + + return ret; +} + static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { @@ -125,6 +138,7 @@ static void sun4i_crtc_mode_set_nofb(struct drm_crtc *crtc) } static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = { + .atomic_check = sun4i_crtc_atomic_check, .atomic_begin = sun4i_crtc_atomic_begin, .atomic_flush = sun4i_crtc_atomic_flush, .atomic_enable = sun4i_crtc_atomic_enable, diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h index 4cb70ae65c79..42655230aeba 100644 --- a/drivers/gpu/drm/sun4i/sunxi_engine.h +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h @@ -16,6 +16,8 @@ struct drm_device; struct sunxi_engine; struct sunxi_engine_ops { + int (*atomic_check)(struct sunxi_engine *engine, + struct drm_crtc_state *state); void (*commit)(struct sunxi_engine *engine); struct drm_plane **(*layers_init)(struct drm_device *drm, struct sunxi_engine *engine); -- git-series 0.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: maxime.ripard@free-electrons.com (Maxime Ripard) Date: Wed, 13 Dec 2017 16:33:28 +0100 Subject: [PATCH 4/8] drm/sun4i: crtc: Add a custom crtc atomic_check In-Reply-To: References: Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org We have some restrictions on what the planes and CRTC can provide that are tied to only one generation of display engines. For example, on the first generation, we can only have one YUV plane or one plane that uses the frontend output. Let's allow our engines to provide an atomic_check callback to validate the current configuration. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_crtc.c | 14 ++++++++++++++ drivers/gpu/drm/sun4i/sunxi_engine.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c index 5decae0069d0..2a565325714f 100644 --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c @@ -46,6 +46,19 @@ static struct drm_encoder *sun4i_crtc_get_encoder(struct drm_crtc *crtc) return NULL; } +static int sun4i_crtc_atomic_check(struct drm_crtc *crtc, + struct drm_crtc_state *state) +{ + struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc); + struct sunxi_engine *engine = scrtc->engine; + int ret = 0; + + if (engine && engine->ops && engine->ops->atomic_check) + ret = engine->ops->atomic_check(engine, state); + + return ret; +} + static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { @@ -125,6 +138,7 @@ static void sun4i_crtc_mode_set_nofb(struct drm_crtc *crtc) } static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = { + .atomic_check = sun4i_crtc_atomic_check, .atomic_begin = sun4i_crtc_atomic_begin, .atomic_flush = sun4i_crtc_atomic_flush, .atomic_enable = sun4i_crtc_atomic_enable, diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h index 4cb70ae65c79..42655230aeba 100644 --- a/drivers/gpu/drm/sun4i/sunxi_engine.h +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h @@ -16,6 +16,8 @@ struct drm_device; struct sunxi_engine; struct sunxi_engine_ops { + int (*atomic_check)(struct sunxi_engine *engine, + struct drm_crtc_state *state); void (*commit)(struct sunxi_engine *engine); struct drm_plane **(*layers_init)(struct drm_device *drm, struct sunxi_engine *engine); -- git-series 0.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH 4/8] drm/sun4i: crtc: Add a custom crtc atomic_check Date: Wed, 13 Dec 2017 16:33:28 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.free-electrons.com (mail.free-electrons.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 4EE406E513 for ; Wed, 13 Dec 2017 15:33:40 +0000 (UTC) In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , David Airlie , Chen-Yu Tsai , Maxime Ripard Cc: linux-arm-kernel@lists.infradead.org, Thomas Petazzoni , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, thomas@vitsch.nl List-Id: dri-devel@lists.freedesktop.org V2UgaGF2ZSBzb21lIHJlc3RyaWN0aW9ucyBvbiB3aGF0IHRoZSBwbGFuZXMgYW5kIENSVEMgY2Fu IHByb3ZpZGUgdGhhdCBhcmUKdGllZCB0byBvbmx5IG9uZSBnZW5lcmF0aW9uIG9mIGRpc3BsYXkg ZW5naW5lcy4KCkZvciBleGFtcGxlLCBvbiB0aGUgZmlyc3QgZ2VuZXJhdGlvbiwgd2UgY2FuIG9u bHkgaGF2ZSBvbmUgWVVWIHBsYW5lIG9yIG9uZQpwbGFuZSB0aGF0IHVzZXMgdGhlIGZyb250ZW5k IG91dHB1dC4KCkxldCdzIGFsbG93IG91ciBlbmdpbmVzIHRvIHByb3ZpZGUgYW4gYXRvbWljX2No ZWNrIGNhbGxiYWNrIHRvIHZhbGlkYXRlIHRoZQpjdXJyZW50IGNvbmZpZ3VyYXRpb24uCgpTaWdu ZWQtb2ZmLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jICAgfCAxNCArKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2VuZ2luZS5oIHwgIDIgKysKIDIg ZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9zdW40aS9zdW40aV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0 Yy5jCmluZGV4IDVkZWNhZTAwNjlkMC4uMmE1NjUzMjU3MTRmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9z dW40aV9jcnRjLmMKQEAgLTQ2LDYgKzQ2LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIg KnN1bjRpX2NydGNfZ2V0X2VuY29kZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCXJldHVybiBO VUxMOwogfQogCitzdGF0aWMgaW50IHN1bjRpX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3Qgc3VuNGlfY3J0YyAqc2NydGMgPSBkcm1fY3J0Y190b19zdW40aV9jcnRjKGNydGMpOwor CXN0cnVjdCBzdW54aV9lbmdpbmUgKmVuZ2luZSA9IHNjcnRjLT5lbmdpbmU7CisJaW50IHJldCA9 IDA7CisKKwlpZiAoZW5naW5lICYmIGVuZ2luZS0+b3BzICYmIGVuZ2luZS0+b3BzLT5hdG9taWNf Y2hlY2spCisJCXJldCA9IGVuZ2luZS0+b3BzLT5hdG9taWNfY2hlY2soZW5naW5lLCBzdGF0ZSk7 CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBzdW40aV9jcnRjX2F0b21pY19iZWdp bihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq b2xkX3N0YXRlKQogewpAQCAtMTI1LDYgKzEzOCw3IEBAIHN0YXRpYyB2b2lkIHN1bjRpX2NydGNf bW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB9CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHN1bjRpX2NydGNfaGVscGVyX2Z1bmNzID0gewor CS5hdG9taWNfY2hlY2sJPSBzdW40aV9jcnRjX2F0b21pY19jaGVjaywKIAkuYXRvbWljX2JlZ2lu CT0gc3VuNGlfY3J0Y19hdG9taWNfYmVnaW4sCiAJLmF0b21pY19mbHVzaAk9IHN1bjRpX2NydGNf YXRvbWljX2ZsdXNoLAogCS5hdG9taWNfZW5hYmxlCT0gc3VuNGlfY3J0Y19hdG9taWNfZW5hYmxl LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2VuZ2luZS5oIGIvZHJp dmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2VuZ2luZS5oCmluZGV4IDRjYjcwYWU2NWM3OS4uNDI2 NTUyMzBhZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VueGlfZW5naW5l LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2VuZ2luZS5oCkBAIC0xNiw2ICsx Niw4IEBAIHN0cnVjdCBkcm1fZGV2aWNlOwogc3RydWN0IHN1bnhpX2VuZ2luZTsKIAogc3RydWN0 IHN1bnhpX2VuZ2luZV9vcHMgeworCWludCAoKmF0b21pY19jaGVjaykoc3RydWN0IHN1bnhpX2Vu Z2luZSAqZW5naW5lLAorCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwogCXZv aWQgKCpjb21taXQpKHN0cnVjdCBzdW54aV9lbmdpbmUgKmVuZ2luZSk7CiAJc3RydWN0IGRybV9w bGFuZSAqKigqbGF5ZXJzX2luaXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCiAJCQkJCSAgc3Ry dWN0IHN1bnhpX2VuZ2luZSAqZW5naW5lKTsKLS0gCmdpdC1zZXJpZXMgMC45LjEKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==