From mboxrd@z Thu Jan 1 00:00:00 1970 From: boris.brezillon@free-electrons.com (Boris Brezillon) Date: Tue, 9 Jan 2018 13:31:54 +0100 Subject: [PATCH 07/19] drm/atmel-hclcdc: Convert to the new generic alpha property In-Reply-To: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> References: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> Message-ID: <20180109133154.321e0f66@bbrezillon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, 9 Jan 2018 11:56:26 +0100 Maxime Ripard wrote: > Now that we have support for per-plane alpha in the core, let's use it. > > Cc: Boris Brezillon Acked-by: Boris Brezillon > Signed-off-by: Maxime Ripard > --- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 13 +--- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 89 ++---------------- > 2 files changed, 14 insertions(+), 88 deletions(-) > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > index 6833ee253cfa..704cac6399eb 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > @@ -298,7 +298,6 @@ struct atmel_hlcdc_layer { > struct atmel_hlcdc_plane { > struct drm_plane base; > struct atmel_hlcdc_layer layer; > - struct atmel_hlcdc_plane_properties *properties; > }; > > static inline struct atmel_hlcdc_plane * > @@ -345,18 +344,6 @@ struct atmel_hlcdc_dc_desc { > }; > > /** > - * Atmel HLCDC Plane properties. > - * > - * This structure stores plane property definitions. > - * > - * @alpha: alpha blending (or transparency) property > - * @rotation: rotation property > - */ > -struct atmel_hlcdc_plane_properties { > - struct drm_property *alpha; > -}; > - > -/** > * Atmel HLCDC Display Controller. > * > * @desc: HLCDC Display Controller description > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > index 1a9318810a29..dbc508889e87 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > @@ -31,7 +31,6 @@ > * @src_y: y buffer position > * @src_w: buffer width > * @src_h: buffer height > - * @alpha: alpha blending of the plane > * @disc_x: x discard position > * @disc_y: y discard position > * @disc_w: discard width > @@ -54,8 +53,6 @@ struct atmel_hlcdc_plane_state { > uint32_t src_w; > uint32_t src_h; > > - u8 alpha; > - > int disc_x; > int disc_y; > int disc_w; > @@ -385,7 +382,7 @@ atmel_hlcdc_plane_update_general_settings(struct atmel_hlcdc_plane *plane, > cfg |= ATMEL_HLCDC_LAYER_LAEN; > else > cfg |= ATMEL_HLCDC_LAYER_GAEN | > - ATMEL_HLCDC_LAYER_GA(state->alpha); > + ATMEL_HLCDC_LAYER_GA(state->base.alpha); > } > > if (state->disc_h && state->disc_w) > @@ -553,7 +550,7 @@ atmel_hlcdc_plane_prepare_disc_area(struct drm_crtc_state *c_state) > > if (!ovl_s->fb || > drm_format_has_alpha(ovl_s->fb->format->format) || > - ovl_state->alpha != 255) > + ovl_s->alpha != 255) > continue; > > /* TODO: implement a smarter hidden area detection */ > @@ -829,51 +826,18 @@ static void atmel_hlcdc_plane_destroy(struct drm_plane *p) > drm_plane_cleanup(p); > } > > -static int atmel_hlcdc_plane_atomic_set_property(struct drm_plane *p, > - struct drm_plane_state *s, > - struct drm_property *property, > - uint64_t val) > -{ > - struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p); > - struct atmel_hlcdc_plane_properties *props = plane->properties; > - struct atmel_hlcdc_plane_state *state = > - drm_plane_state_to_atmel_hlcdc_plane_state(s); > - > - if (property == props->alpha) > - state->alpha = val; > - else > - return -EINVAL; > - > - return 0; > -} > - > -static int atmel_hlcdc_plane_atomic_get_property(struct drm_plane *p, > - const struct drm_plane_state *s, > - struct drm_property *property, > - uint64_t *val) > -{ > - struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p); > - struct atmel_hlcdc_plane_properties *props = plane->properties; > - const struct atmel_hlcdc_plane_state *state = > - container_of(s, const struct atmel_hlcdc_plane_state, base); > - > - if (property == props->alpha) > - *val = state->alpha; > - else > - return -EINVAL; > - > - return 0; > -} > - > -static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane, > - struct atmel_hlcdc_plane_properties *props) > +static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane) > { > const struct atmel_hlcdc_layer_desc *desc = plane->layer.desc; > > if (desc->type == ATMEL_HLCDC_OVERLAY_LAYER || > - desc->type == ATMEL_HLCDC_CURSOR_LAYER) > - drm_object_attach_property(&plane->base.base, > - props->alpha, 255); > + desc->type == ATMEL_HLCDC_CURSOR_LAYER) { > + int ret; > + > + ret = drm_plane_create_alpha_property(&plane->base, 255); > + if (ret) > + return ret; > + } > > if (desc->layout.xstride && desc->layout.pstride) { > int ret; > @@ -988,8 +952,8 @@ static void atmel_hlcdc_plane_reset(struct drm_plane *p) > return; > } > > - state->alpha = 255; > p->state = &state->base; > + p->state->alpha = 255; > p->state->plane = p; > } > } > @@ -1042,13 +1006,10 @@ static const struct drm_plane_funcs layer_plane_funcs = { > .reset = atmel_hlcdc_plane_reset, > .atomic_duplicate_state = atmel_hlcdc_plane_atomic_duplicate_state, > .atomic_destroy_state = atmel_hlcdc_plane_atomic_destroy_state, > - .atomic_set_property = atmel_hlcdc_plane_atomic_set_property, > - .atomic_get_property = atmel_hlcdc_plane_atomic_get_property, > }; > > static int atmel_hlcdc_plane_create(struct drm_device *dev, > - const struct atmel_hlcdc_layer_desc *desc, > - struct atmel_hlcdc_plane_properties *props) > + const struct atmel_hlcdc_layer_desc *desc) > { > struct atmel_hlcdc_dc *dc = dev->dev_private; > struct atmel_hlcdc_plane *plane; > @@ -1060,7 +1021,6 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > return -ENOMEM; > > atmel_hlcdc_layer_init(&plane->layer, desc, dc->hlcdc->regmap); > - plane->properties = props; > > if (desc->type == ATMEL_HLCDC_BASE_LAYER) > type = DRM_PLANE_TYPE_PRIMARY; > @@ -1081,7 +1041,7 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > &atmel_hlcdc_layer_plane_helper_funcs); > > /* Set default property values*/ > - ret = atmel_hlcdc_plane_init_properties(plane, props); > + ret = atmel_hlcdc_plane_init_properties(plane); > if (ret) > return ret; > > @@ -1090,34 +1050,13 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > return 0; > } > > -static struct atmel_hlcdc_plane_properties * > -atmel_hlcdc_plane_create_properties(struct drm_device *dev) > -{ > - struct atmel_hlcdc_plane_properties *props; > - > - props = devm_kzalloc(dev->dev, sizeof(*props), GFP_KERNEL); > - if (!props) > - return ERR_PTR(-ENOMEM); > - > - props->alpha = drm_property_create_range(dev, 0, "alpha", 0, 255); > - if (!props->alpha) > - return ERR_PTR(-ENOMEM); > - > - return props; > -} > - > int atmel_hlcdc_create_planes(struct drm_device *dev) > { > struct atmel_hlcdc_dc *dc = dev->dev_private; > - struct atmel_hlcdc_plane_properties *props; > const struct atmel_hlcdc_layer_desc *descs = dc->desc->layers; > int nlayers = dc->desc->nlayers; > int i, ret; > > - props = atmel_hlcdc_plane_create_properties(dev); > - if (IS_ERR(props)) > - return PTR_ERR(props); > - > dc->dscrpool = dmam_pool_create("atmel-hlcdc-dscr", dev->dev, > sizeof(struct atmel_hlcdc_dma_channel_dscr), > sizeof(u64), 0); > @@ -1130,7 +1069,7 @@ int atmel_hlcdc_create_planes(struct drm_device *dev) > descs[i].type != ATMEL_HLCDC_CURSOR_LAYER) > continue; > > - ret = atmel_hlcdc_plane_create(dev, &descs[i], props); > + ret = atmel_hlcdc_plane_create(dev, &descs[i]); > if (ret) > return ret; > } From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH 07/19] drm/atmel-hclcdc: Convert to the new generic alpha property Date: Tue, 9 Jan 2018 13:31:54 +0100 Message-ID: <20180109133154.321e0f66@bbrezillon> References: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> 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 1DF126E0A8 for ; Tue, 9 Jan 2018 12:32:06 +0000 (UTC) In-Reply-To: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard Cc: Thomas Petazzoni , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Chen-Yu Tsai , Daniel Vetter , linux-arm-kernel@lists.infradead.org, thomas@vitsch.nl List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAgOSBKYW4gMjAxOCAxMTo1NjoyNiArMDEwMApNYXhpbWUgUmlwYXJkIDxtYXhpbWUu cmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4gd3JvdGU6Cgo+IE5vdyB0aGF0IHdlIGhhdmUgc3Vw cG9ydCBmb3IgcGVyLXBsYW5lIGFscGhhIGluIHRoZSBjb3JlLCBsZXQncyB1c2UgaXQuCj4gCj4g Q2M6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4K CkFja2VkLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9u cy5jb20+Cgo+IFNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJl ZS1lbGVjdHJvbnMuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRt ZWxfaGxjZGNfZGMuaCAgICB8IDEzICstLS0KPiAgZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2Rj L2F0bWVsX2hsY2RjX3BsYW5lLmMgfCA4OSArKy0tLS0tLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBj aGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2RjLmggYi9kcml2ZXJz L2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuaAo+IGluZGV4IDY4MzNlZTI1M2Nm YS4uNzA0Y2FjNjM5OWViIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNk Yy9hdG1lbF9obGNkY19kYy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0 bWVsX2hsY2RjX2RjLmgKPiBAQCAtMjk4LDcgKzI5OCw2IEBAIHN0cnVjdCBhdG1lbF9obGNkY19s YXllciB7Cj4gIHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSB7Cj4gIAlzdHJ1Y3QgZHJtX3BsYW5l IGJhc2U7Cj4gIAlzdHJ1Y3QgYXRtZWxfaGxjZGNfbGF5ZXIgbGF5ZXI7Cj4gLQlzdHJ1Y3QgYXRt ZWxfaGxjZGNfcGxhbmVfcHJvcGVydGllcyAqcHJvcGVydGllczsKPiAgfTsKPiAgCj4gIHN0YXRp YyBpbmxpbmUgc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lICoKPiBAQCAtMzQ1LDE4ICszNDQsNiBA QCBzdHJ1Y3QgYXRtZWxfaGxjZGNfZGNfZGVzYyB7Cj4gIH07Cj4gIAo+ICAvKioKPiAtICogQXRt ZWwgSExDREMgUGxhbmUgcHJvcGVydGllcy4KPiAtICoKPiAtICogVGhpcyBzdHJ1Y3R1cmUgc3Rv cmVzIHBsYW5lIHByb3BlcnR5IGRlZmluaXRpb25zLgo+IC0gKgo+IC0gKiBAYWxwaGE6IGFscGhh IGJsZW5kaW5nIChvciB0cmFuc3BhcmVuY3kpIHByb3BlcnR5Cj4gLSAqIEByb3RhdGlvbjogcm90 YXRpb24gcHJvcGVydHkKPiAtICovCj4gLXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9wcm9wZXJ0 aWVzIHsKPiAtCXN0cnVjdCBkcm1fcHJvcGVydHkgKmFscGhhOwo+IC19Owo+IC0KPiAtLyoqCj4g ICAqIEF0bWVsIEhMQ0RDIERpc3BsYXkgQ29udHJvbGxlci4KPiAgICoKPiAgICogQGRlc2M6IEhM Q0RDIERpc3BsYXkgQ29udHJvbGxlciBkZXNjcmlwdGlvbgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19wbGFuZS5jCj4gaW5kZXggMWE5MzE4ODEwYTI5Li5k YmM1MDg4ODllODcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0 bWVsX2hsY2RjX3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRt ZWxfaGxjZGNfcGxhbmUuYwo+IEBAIC0zMSw3ICszMSw2IEBACj4gICAqIEBzcmNfeTogeSBidWZm ZXIgcG9zaXRpb24KPiAgICogQHNyY193OiBidWZmZXIgd2lkdGgKPiAgICogQHNyY19oOiBidWZm ZXIgaGVpZ2h0Cj4gLSAqIEBhbHBoYTogYWxwaGEgYmxlbmRpbmcgb2YgdGhlIHBsYW5lCj4gICAq IEBkaXNjX3g6IHggZGlzY2FyZCBwb3NpdGlvbgo+ICAgKiBAZGlzY195OiB5IGRpc2NhcmQgcG9z aXRpb24KPiAgICogQGRpc2NfdzogZGlzY2FyZCB3aWR0aAo+IEBAIC01NCw4ICs1Myw2IEBAIHN0 cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSB7Cj4gIAl1aW50MzJfdCBzcmNfdzsKPiAgCXVp bnQzMl90IHNyY19oOwo+ICAKPiAtCXU4IGFscGhhOwo+IC0KPiAgCWludCBkaXNjX3g7Cj4gIAlp bnQgZGlzY195Owo+ICAJaW50IGRpc2NfdzsKPiBAQCAtMzg1LDcgKzM4Miw3IEBAIGF0bWVsX2hs Y2RjX3BsYW5lX3VwZGF0ZV9nZW5lcmFsX3NldHRpbmdzKHN0cnVjdCBhdG1lbF9obGNkY19wbGFu ZSAqcGxhbmUsCj4gIAkJCWNmZyB8PSBBVE1FTF9ITENEQ19MQVlFUl9MQUVOOwo+ICAJCWVsc2UK PiAgCQkJY2ZnIHw9IEFUTUVMX0hMQ0RDX0xBWUVSX0dBRU4gfAo+IC0JCQkgICAgICAgQVRNRUxf SExDRENfTEFZRVJfR0Eoc3RhdGUtPmFscGhhKTsKPiArCQkJICAgICAgIEFUTUVMX0hMQ0RDX0xB WUVSX0dBKHN0YXRlLT5iYXNlLmFscGhhKTsKPiAgCX0KPiAgCj4gIAlpZiAoc3RhdGUtPmRpc2Nf aCAmJiBzdGF0ZS0+ZGlzY193KQo+IEBAIC01NTMsNyArNTUwLDcgQEAgYXRtZWxfaGxjZGNfcGxh bmVfcHJlcGFyZV9kaXNjX2FyZWEoc3RydWN0IGRybV9jcnRjX3N0YXRlICpjX3N0YXRlKQo+ICAK PiAgCQlpZiAoIW92bF9zLT5mYiB8fAo+ICAJCSAgICBkcm1fZm9ybWF0X2hhc19hbHBoYShvdmxf cy0+ZmItPmZvcm1hdC0+Zm9ybWF0KSB8fAo+IC0JCSAgICBvdmxfc3RhdGUtPmFscGhhICE9IDI1 NSkKPiArCQkgICAgb3ZsX3MtPmFscGhhICE9IDI1NSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJ CS8qIFRPRE86IGltcGxlbWVudCBhIHNtYXJ0ZXIgaGlkZGVuIGFyZWEgZGV0ZWN0aW9uICovCj4g QEAgLTgyOSw1MSArODI2LDE4IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5lX2Rlc3Ry b3koc3RydWN0IGRybV9wbGFuZSAqcCkKPiAgCWRybV9wbGFuZV9jbGVhbnVwKHApOwo+ICB9Cj4g IAo+IC1zdGF0aWMgaW50IGF0bWVsX2hsY2RjX3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3Ry dWN0IGRybV9wbGFuZSAqcCwKPiAtCQkJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnMsCj4g LQkJCQkJCSBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiAtCQkJCQkJIHVpbnQ2NF90 IHZhbCkKPiAtewo+IC0Jc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFuZSA9IGRybV9wbGFu ZV90b19hdG1lbF9obGNkY19wbGFuZShwKTsKPiAtCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9w cm9wZXJ0aWVzICpwcm9wcyA9IHBsYW5lLT5wcm9wZXJ0aWVzOwo+IC0Jc3RydWN0IGF0bWVsX2hs Y2RjX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gLQkJCWRybV9wbGFuZV9zdGF0ZV90b19hdG1lbF9o bGNkY19wbGFuZV9zdGF0ZShzKTsKPiAtCj4gLQlpZiAocHJvcGVydHkgPT0gcHJvcHMtPmFscGhh KQo+IC0JCXN0YXRlLT5hbHBoYSA9IHZhbDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBhdG1lbF9obGNkY19wbGFu ZV9hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gLQkJCQkJY29uc3Qg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcywKPiAtCQkJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwKPiAtCQkJCQl1aW50NjRfdCAqdmFsKQo+IC17Cj4gLQlzdHJ1Y3QgYXRtZWxfaGxj ZGNfcGxhbmUgKnBsYW5lID0gZHJtX3BsYW5lX3RvX2F0bWVsX2hsY2RjX3BsYW5lKHApOwo+IC0J c3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3Byb3BlcnRpZXMgKnByb3BzID0gcGxhbmUtPnByb3Bl cnRpZXM7Cj4gLQljb25zdCBzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUgKnN0YXRlID0K PiAtCQljb250YWluZXJfb2YocywgY29uc3Qgc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3N0YXRl LCBiYXNlKTsKPiAtCj4gLQlpZiAocHJvcGVydHkgPT0gcHJvcHMtPmFscGhhKQo+IC0JCSp2YWwg PSBzdGF0ZS0+YWxwaGE7Cj4gLQllbHNlCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfaW5pdF9wcm9w ZXJ0aWVzKHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gLQkJCQlzdHJ1Y3QgYXRt ZWxfaGxjZGNfcGxhbmVfcHJvcGVydGllcyAqcHJvcHMpCj4gK3N0YXRpYyBpbnQgYXRtZWxfaGxj ZGNfcGxhbmVfaW5pdF9wcm9wZXJ0aWVzKHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUp Cj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBhdG1lbF9obGNkY19sYXllcl9kZXNjICpkZXNjID0gcGxh bmUtPmxheWVyLmRlc2M7Cj4gIAo+ICAJaWYgKGRlc2MtPnR5cGUgPT0gQVRNRUxfSExDRENfT1ZF UkxBWV9MQVlFUiB8fAo+IC0JICAgIGRlc2MtPnR5cGUgPT0gQVRNRUxfSExDRENfQ1VSU09SX0xB WUVSKQo+IC0JCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+YmFzZS5iYXNlLAo+ IC0JCQkJCSAgIHByb3BzLT5hbHBoYSwgMjU1KTsKPiArCSAgICBkZXNjLT50eXBlID09IEFUTUVM X0hMQ0RDX0NVUlNPUl9MQVlFUikgewo+ICsJCWludCByZXQ7Cj4gKwo+ICsJCXJldCA9IGRybV9w bGFuZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCAyNTUpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gIAo+ICAJaWYgKGRlc2MtPmxheW91dC54c3Ry aWRlICYmIGRlc2MtPmxheW91dC5wc3RyaWRlKSB7Cj4gIAkJaW50IHJldDsKPiBAQCAtOTg4LDgg Kzk1Miw4IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1f cGxhbmUgKnApCj4gIAkJCXJldHVybjsKPiAgCQl9Cj4gIAo+IC0JCXN0YXRlLT5hbHBoYSA9IDI1 NTsKPiAgCQlwLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKPiArCQlwLT5zdGF0ZS0+YWxwaGEgPSAy NTU7Cj4gIAkJcC0+c3RhdGUtPnBsYW5lID0gcDsKPiAgCX0KPiAgfQo+IEBAIC0xMDQyLDEzICsx MDA2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGxheWVyX3BsYW5l X2Z1bmNzID0gewo+ICAJLnJlc2V0ID0gYXRtZWxfaGxjZGNfcGxhbmVfcmVzZXQsCj4gIAkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGF0bWVsX2hsY2RjX3BsYW5lX2F0b21pY19kdXBsaWNhdGVf c3RhdGUsCj4gIAkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBhdG1lbF9obGNkY19wbGFuZV9hdG9t aWNfZGVzdHJveV9zdGF0ZSwKPiAtCS5hdG9taWNfc2V0X3Byb3BlcnR5ID0gYXRtZWxfaGxjZGNf cGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eSwKPiAtCS5hdG9taWNfZ2V0X3Byb3BlcnR5ID0gYXRt ZWxfaGxjZGNfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eSwKPiAgfTsKPiAgCj4gIHN0YXRpYyBp bnQgYXRtZWxfaGxjZGNfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJ CQkgICAgY29uc3Qgc3RydWN0IGF0bWVsX2hsY2RjX2xheWVyX2Rlc2MgKmRlc2MsCj4gLQkJCQkg ICAgc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3Byb3BlcnRpZXMgKnByb3BzKQo+ICsJCQkJICAg IGNvbnN0IHN0cnVjdCBhdG1lbF9obGNkY19sYXllcl9kZXNjICpkZXNjKQo+ICB7Cj4gIAlzdHJ1 Y3QgYXRtZWxfaGxjZGNfZGMgKmRjID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXN0cnVjdCBhdG1l bF9obGNkY19wbGFuZSAqcGxhbmU7Cj4gQEAgLTEwNjAsNyArMTAyMSw2IEBAIHN0YXRpYyBpbnQg YXRtZWxfaGxjZGNfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJcmV0 dXJuIC1FTk9NRU07Cj4gIAo+ICAJYXRtZWxfaGxjZGNfbGF5ZXJfaW5pdCgmcGxhbmUtPmxheWVy LCBkZXNjLCBkYy0+aGxjZGMtPnJlZ21hcCk7Cj4gLQlwbGFuZS0+cHJvcGVydGllcyA9IHByb3Bz Owo+ICAKPiAgCWlmIChkZXNjLT50eXBlID09IEFUTUVMX0hMQ0RDX0JBU0VfTEFZRVIpCj4gIAkJ dHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7Cj4gQEAgLTEwODEsNyArMTA0MSw3IEBAIHN0 YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gIAkJCSAgICAgJmF0bWVsX2hsY2RjX2xheWVyX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gIAo+ ICAJLyogU2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzKi8KPiAtCXJldCA9IGF0bWVsX2hsY2Rj X3BsYW5lX2luaXRfcHJvcGVydGllcyhwbGFuZSwgcHJvcHMpOwo+ICsJcmV0ID0gYXRtZWxfaGxj ZGNfcGxhbmVfaW5pdF9wcm9wZXJ0aWVzKHBsYW5lKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJu IHJldDsKPiAgCj4gQEAgLTEwOTAsMzQgKzEwNTAsMTMgQEAgc3RhdGljIGludCBhdG1lbF9obGNk Y19wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCXJldHVybiAwOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3Byb3BlcnRpZXMgKgo+IC1h dG1lbF9obGNkY19wbGFuZV9jcmVhdGVfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+IC17Cj4gLQlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfcHJvcGVydGllcyAqcHJvcHM7Cj4g LQo+IC0JcHJvcHMgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsIHNpemVvZigqcHJvcHMpLCBHRlBf S0VSTkVMKTsKPiAtCWlmICghcHJvcHMpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g LQo+IC0JcHJvcHMtPmFscGhhID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShkZXYsIDAsICJh bHBoYSIsIDAsIDI1NSk7Cj4gLQlpZiAoIXByb3BzLT5hbHBoYSkKPiAtCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKPiAtCj4gLQlyZXR1cm4gcHJvcHM7Cj4gLX0KPiAtCj4gIGludCBhdG1lbF9o bGNkY19jcmVhdGVfcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAgCXN0cnVj dCBhdG1lbF9obGNkY19kYyAqZGMgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGF0bWVs X2hsY2RjX3BsYW5lX3Byb3BlcnRpZXMgKnByb3BzOwo+ICAJY29uc3Qgc3RydWN0IGF0bWVsX2hs Y2RjX2xheWVyX2Rlc2MgKmRlc2NzID0gZGMtPmRlc2MtPmxheWVyczsKPiAgCWludCBubGF5ZXJz ID0gZGMtPmRlc2MtPm5sYXllcnM7Cj4gIAlpbnQgaSwgcmV0Owo+ICAKPiAtCXByb3BzID0gYXRt ZWxfaGxjZGNfcGxhbmVfY3JlYXRlX3Byb3BlcnRpZXMoZGV2KTsKPiAtCWlmIChJU19FUlIocHJv cHMpKQo+IC0JCXJldHVybiBQVFJfRVJSKHByb3BzKTsKPiAtCj4gIAlkYy0+ZHNjcnBvb2wgPSBk bWFtX3Bvb2xfY3JlYXRlKCJhdG1lbC1obGNkYy1kc2NyIiwgZGV2LT5kZXYsCj4gIAkJCQlzaXpl b2Yoc3RydWN0IGF0bWVsX2hsY2RjX2RtYV9jaGFubmVsX2RzY3IpLAo+ICAJCQkJc2l6ZW9mKHU2 NCksIDApOwo+IEBAIC0xMTMwLDcgKzEwNjksNyBAQCBpbnQgYXRtZWxfaGxjZGNfY3JlYXRlX3Bs YW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJCSAgICBkZXNjc1tpXS50eXBlICE9IEFU TUVMX0hMQ0RDX0NVUlNPUl9MQVlFUikKPiAgCQkJY29udGludWU7Cj4gIAo+IC0JCXJldCA9IGF0 bWVsX2hsY2RjX3BsYW5lX2NyZWF0ZShkZXYsICZkZXNjc1tpXSwgcHJvcHMpOwo+ICsJCXJldCA9 IGF0bWVsX2hsY2RjX3BsYW5lX2NyZWF0ZShkZXYsICZkZXNjc1tpXSk7Cj4gIAkJaWYgKHJldCkK PiAgCQkJcmV0dXJuIHJldDsKPiAgCX0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753176AbeAIMcH (ORCPT + 1 other); Tue, 9 Jan 2018 07:32:07 -0500 Received: from mail.free-electrons.com ([62.4.15.54]:54599 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752692AbeAIMcG (ORCPT ); Tue, 9 Jan 2018 07:32:06 -0500 Date: Tue, 9 Jan 2018 13:31:54 +0100 From: Boris Brezillon To: Maxime Ripard Cc: Chen-Yu Tsai , Daniel Vetter , Jani Nikula , Sean Paul , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Thomas Petazzoni , thomas@vitsch.nl Subject: Re: [PATCH 07/19] drm/atmel-hclcdc: Convert to the new generic alpha property Message-ID: <20180109133154.321e0f66@bbrezillon> In-Reply-To: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> References: <87b4f265eaade03c5afdbd55a46851bbe4d8d2fe.1515494838.git-series.maxime.ripard@free-electrons.com> X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Tue, 9 Jan 2018 11:56:26 +0100 Maxime Ripard wrote: > Now that we have support for per-plane alpha in the core, let's use it. > > Cc: Boris Brezillon Acked-by: Boris Brezillon > Signed-off-by: Maxime Ripard > --- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 13 +--- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 89 ++---------------- > 2 files changed, 14 insertions(+), 88 deletions(-) > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > index 6833ee253cfa..704cac6399eb 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h > @@ -298,7 +298,6 @@ struct atmel_hlcdc_layer { > struct atmel_hlcdc_plane { > struct drm_plane base; > struct atmel_hlcdc_layer layer; > - struct atmel_hlcdc_plane_properties *properties; > }; > > static inline struct atmel_hlcdc_plane * > @@ -345,18 +344,6 @@ struct atmel_hlcdc_dc_desc { > }; > > /** > - * Atmel HLCDC Plane properties. > - * > - * This structure stores plane property definitions. > - * > - * @alpha: alpha blending (or transparency) property > - * @rotation: rotation property > - */ > -struct atmel_hlcdc_plane_properties { > - struct drm_property *alpha; > -}; > - > -/** > * Atmel HLCDC Display Controller. > * > * @desc: HLCDC Display Controller description > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > index 1a9318810a29..dbc508889e87 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c > @@ -31,7 +31,6 @@ > * @src_y: y buffer position > * @src_w: buffer width > * @src_h: buffer height > - * @alpha: alpha blending of the plane > * @disc_x: x discard position > * @disc_y: y discard position > * @disc_w: discard width > @@ -54,8 +53,6 @@ struct atmel_hlcdc_plane_state { > uint32_t src_w; > uint32_t src_h; > > - u8 alpha; > - > int disc_x; > int disc_y; > int disc_w; > @@ -385,7 +382,7 @@ atmel_hlcdc_plane_update_general_settings(struct atmel_hlcdc_plane *plane, > cfg |= ATMEL_HLCDC_LAYER_LAEN; > else > cfg |= ATMEL_HLCDC_LAYER_GAEN | > - ATMEL_HLCDC_LAYER_GA(state->alpha); > + ATMEL_HLCDC_LAYER_GA(state->base.alpha); > } > > if (state->disc_h && state->disc_w) > @@ -553,7 +550,7 @@ atmel_hlcdc_plane_prepare_disc_area(struct drm_crtc_state *c_state) > > if (!ovl_s->fb || > drm_format_has_alpha(ovl_s->fb->format->format) || > - ovl_state->alpha != 255) > + ovl_s->alpha != 255) > continue; > > /* TODO: implement a smarter hidden area detection */ > @@ -829,51 +826,18 @@ static void atmel_hlcdc_plane_destroy(struct drm_plane *p) > drm_plane_cleanup(p); > } > > -static int atmel_hlcdc_plane_atomic_set_property(struct drm_plane *p, > - struct drm_plane_state *s, > - struct drm_property *property, > - uint64_t val) > -{ > - struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p); > - struct atmel_hlcdc_plane_properties *props = plane->properties; > - struct atmel_hlcdc_plane_state *state = > - drm_plane_state_to_atmel_hlcdc_plane_state(s); > - > - if (property == props->alpha) > - state->alpha = val; > - else > - return -EINVAL; > - > - return 0; > -} > - > -static int atmel_hlcdc_plane_atomic_get_property(struct drm_plane *p, > - const struct drm_plane_state *s, > - struct drm_property *property, > - uint64_t *val) > -{ > - struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p); > - struct atmel_hlcdc_plane_properties *props = plane->properties; > - const struct atmel_hlcdc_plane_state *state = > - container_of(s, const struct atmel_hlcdc_plane_state, base); > - > - if (property == props->alpha) > - *val = state->alpha; > - else > - return -EINVAL; > - > - return 0; > -} > - > -static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane, > - struct atmel_hlcdc_plane_properties *props) > +static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane) > { > const struct atmel_hlcdc_layer_desc *desc = plane->layer.desc; > > if (desc->type == ATMEL_HLCDC_OVERLAY_LAYER || > - desc->type == ATMEL_HLCDC_CURSOR_LAYER) > - drm_object_attach_property(&plane->base.base, > - props->alpha, 255); > + desc->type == ATMEL_HLCDC_CURSOR_LAYER) { > + int ret; > + > + ret = drm_plane_create_alpha_property(&plane->base, 255); > + if (ret) > + return ret; > + } > > if (desc->layout.xstride && desc->layout.pstride) { > int ret; > @@ -988,8 +952,8 @@ static void atmel_hlcdc_plane_reset(struct drm_plane *p) > return; > } > > - state->alpha = 255; > p->state = &state->base; > + p->state->alpha = 255; > p->state->plane = p; > } > } > @@ -1042,13 +1006,10 @@ static const struct drm_plane_funcs layer_plane_funcs = { > .reset = atmel_hlcdc_plane_reset, > .atomic_duplicate_state = atmel_hlcdc_plane_atomic_duplicate_state, > .atomic_destroy_state = atmel_hlcdc_plane_atomic_destroy_state, > - .atomic_set_property = atmel_hlcdc_plane_atomic_set_property, > - .atomic_get_property = atmel_hlcdc_plane_atomic_get_property, > }; > > static int atmel_hlcdc_plane_create(struct drm_device *dev, > - const struct atmel_hlcdc_layer_desc *desc, > - struct atmel_hlcdc_plane_properties *props) > + const struct atmel_hlcdc_layer_desc *desc) > { > struct atmel_hlcdc_dc *dc = dev->dev_private; > struct atmel_hlcdc_plane *plane; > @@ -1060,7 +1021,6 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > return -ENOMEM; > > atmel_hlcdc_layer_init(&plane->layer, desc, dc->hlcdc->regmap); > - plane->properties = props; > > if (desc->type == ATMEL_HLCDC_BASE_LAYER) > type = DRM_PLANE_TYPE_PRIMARY; > @@ -1081,7 +1041,7 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > &atmel_hlcdc_layer_plane_helper_funcs); > > /* Set default property values*/ > - ret = atmel_hlcdc_plane_init_properties(plane, props); > + ret = atmel_hlcdc_plane_init_properties(plane); > if (ret) > return ret; > > @@ -1090,34 +1050,13 @@ static int atmel_hlcdc_plane_create(struct drm_device *dev, > return 0; > } > > -static struct atmel_hlcdc_plane_properties * > -atmel_hlcdc_plane_create_properties(struct drm_device *dev) > -{ > - struct atmel_hlcdc_plane_properties *props; > - > - props = devm_kzalloc(dev->dev, sizeof(*props), GFP_KERNEL); > - if (!props) > - return ERR_PTR(-ENOMEM); > - > - props->alpha = drm_property_create_range(dev, 0, "alpha", 0, 255); > - if (!props->alpha) > - return ERR_PTR(-ENOMEM); > - > - return props; > -} > - > int atmel_hlcdc_create_planes(struct drm_device *dev) > { > struct atmel_hlcdc_dc *dc = dev->dev_private; > - struct atmel_hlcdc_plane_properties *props; > const struct atmel_hlcdc_layer_desc *descs = dc->desc->layers; > int nlayers = dc->desc->nlayers; > int i, ret; > > - props = atmel_hlcdc_plane_create_properties(dev); > - if (IS_ERR(props)) > - return PTR_ERR(props); > - > dc->dscrpool = dmam_pool_create("atmel-hlcdc-dscr", dev->dev, > sizeof(struct atmel_hlcdc_dma_channel_dscr), > sizeof(u64), 0); > @@ -1130,7 +1069,7 @@ int atmel_hlcdc_create_planes(struct drm_device *dev) > descs[i].type != ATMEL_HLCDC_CURSOR_LAYER) > continue; > > - ret = atmel_hlcdc_plane_create(dev, &descs[i], props); > + ret = atmel_hlcdc_plane_create(dev, &descs[i]); > if (ret) > return ret; > }