From mboxrd@z Thu Jan 1 00:00:00 1970 From: maxime.ripard@bootlin.com (Maxime Ripard) Date: Wed, 11 Apr 2018 09:39:27 +0200 Subject: [PATCH v6 3/5] drm/rcar-du: Convert to the new generic alpha property In-Reply-To: References: Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Now that we have support for per-plane alpha in the core, let's use it. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/rcar-du/rcar_du_drv.h | 1 +- drivers/gpu/drm/rcar-du/rcar_du_kms.c | 5 +--- drivers/gpu/drm/rcar-du/rcar_du_plane.c | 15 +++------ drivers/gpu/drm/rcar-du/rcar_du_plane.h | 2 +- drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 42 ++------------------------ drivers/gpu/drm/rcar-du/rcar_du_vsp.h | 3 +-- 6 files changed, 9 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h b/drivers/gpu/drm/rcar-du/rcar_du_drv.h index 5c7ec15818c7..131d8e88b06c 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h @@ -87,7 +87,6 @@ struct rcar_du_device { struct rcar_du_vsp vsps[RCAR_DU_MAX_VSPS]; struct { - struct drm_property *alpha; struct drm_property *colorkey; } props; diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index ab59d2061e06..f4ac0f884f00 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c @@ -407,11 +407,6 @@ static int rcar_du_encoders_init(struct rcar_du_device *rcdu) static int rcar_du_properties_init(struct rcar_du_device *rcdu) { - rcdu->props.alpha = - drm_property_create_range(rcdu->ddev, 0, "alpha", 0, 255); - if (rcdu->props.alpha == NULL) - return -ENOMEM; - /* * The color key is expressed as an RGB888 triplet stored in a 32-bit * integer in XRGB8888 format. Bit 24 is used as a flag to disable (0) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index 68556bd9dad2..c20f7ed48c8d 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c @@ -423,7 +423,7 @@ static void rcar_du_plane_setup_mode(struct rcar_du_group *rgrp, rcar_du_plane_write(rgrp, index, PnALPHAR, PnALPHAR_ABIT_0); else rcar_du_plane_write(rgrp, index, PnALPHAR, - PnALPHAR_ABIT_X | state->alpha); + PnALPHAR_ABIT_X | state->state.alpha >> 8); pnmr = PnMR_BM_MD | state->format->pnmr; @@ -692,11 +692,11 @@ static void rcar_du_plane_reset(struct drm_plane *plane) state->hwindex = -1; state->source = RCAR_DU_PLANE_MEMORY; - state->alpha = 255; state->colorkey = RCAR_DU_COLORKEY_NONE; state->state.zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1; plane->state = &state->state; + plane->state->alpha = DRM_BLEND_ALPHA_OPAQUE; plane->state->plane = plane; } @@ -708,9 +708,7 @@ static int rcar_du_plane_atomic_set_property(struct drm_plane *plane, struct rcar_du_plane_state *rstate = to_rcar_plane_state(state); struct rcar_du_device *rcdu = to_rcar_plane(plane)->group->dev; - if (property == rcdu->props.alpha) - rstate->alpha = val; - else if (property == rcdu->props.colorkey) + if (property == rcdu->props.colorkey) rstate->colorkey = val; else return -EINVAL; @@ -726,9 +724,7 @@ static int rcar_du_plane_atomic_get_property(struct drm_plane *plane, container_of(state, const struct rcar_du_plane_state, state); struct rcar_du_device *rcdu = to_rcar_plane(plane)->group->dev; - if (property == rcdu->props.alpha) - *val = rstate->alpha; - else if (property == rcdu->props.colorkey) + if (property == rcdu->props.colorkey) *val = rstate->colorkey; else return -EINVAL; @@ -797,10 +793,9 @@ int rcar_du_planes_init(struct rcar_du_group *rgrp) continue; drm_object_attach_property(&plane->plane.base, - rcdu->props.alpha, 255); - drm_object_attach_property(&plane->plane.base, rcdu->props.colorkey, RCAR_DU_COLORKEY_NONE); + drm_plane_create_alpha_property(&plane->plane); drm_plane_create_zpos_property(&plane->plane, 1, 1, 7); } diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.h b/drivers/gpu/drm/rcar-du/rcar_du_plane.h index 890321b4665d..5c19c69e4691 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.h @@ -50,7 +50,6 @@ static inline struct rcar_du_plane *to_rcar_plane(struct drm_plane *plane) * @state: base DRM plane state * @format: information about the pixel format used by the plane * @hwindex: 0-based hardware plane index, -1 means unused - * @alpha: value of the plane alpha property * @colorkey: value of the plane colorkey property */ struct rcar_du_plane_state { @@ -60,7 +59,6 @@ struct rcar_du_plane_state { int hwindex; enum rcar_du_plane_source source; - unsigned int alpha; unsigned int colorkey; }; diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c index 2c260c33840b..b3bec0125696 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c @@ -54,6 +54,7 @@ void rcar_du_vsp_enable(struct rcar_du_crtc *crtc) }; struct rcar_du_plane_state state = { .state = { + .alpha = DRM_BLEND_ALPHA_OPAQUE, .crtc = &crtc->crtc, .dst.x1 = 0, .dst.y1 = 0, @@ -67,7 +68,6 @@ void rcar_du_vsp_enable(struct rcar_du_crtc *crtc) }, .format = rcar_du_format_info(DRM_FORMAT_ARGB8888), .source = RCAR_DU_PLANE_VSPD1, - .alpha = 255, .colorkey = 0, }; @@ -173,7 +173,7 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane) struct vsp1_du_atomic_config cfg = { .pixelformat = 0, .pitch = fb->pitches[0], - .alpha = state->alpha, + .alpha = state->state.alpha >> 8, .zpos = state->state.zpos, }; unsigned int i; @@ -335,44 +335,13 @@ static void rcar_du_vsp_plane_reset(struct drm_plane *plane) if (state == NULL) return; - state->alpha = 255; + state->state.alpha = DRM_BLEND_ALPHA_OPAQUE; state->state.zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1; plane->state = &state->state; plane->state->plane = plane; } -static int rcar_du_vsp_plane_atomic_set_property(struct drm_plane *plane, - struct drm_plane_state *state, struct drm_property *property, - uint64_t val) -{ - struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(state); - struct rcar_du_device *rcdu = to_rcar_vsp_plane(plane)->vsp->dev; - - if (property == rcdu->props.alpha) - rstate->alpha = val; - else - return -EINVAL; - - return 0; -} - -static int rcar_du_vsp_plane_atomic_get_property(struct drm_plane *plane, - const struct drm_plane_state *state, struct drm_property *property, - uint64_t *val) -{ - const struct rcar_du_vsp_plane_state *rstate = - container_of(state, const struct rcar_du_vsp_plane_state, state); - struct rcar_du_device *rcdu = to_rcar_vsp_plane(plane)->vsp->dev; - - if (property == rcdu->props.alpha) - *val = rstate->alpha; - else - return -EINVAL; - - return 0; -} - static const struct drm_plane_funcs rcar_du_vsp_plane_funcs = { .update_plane = drm_atomic_helper_update_plane, .disable_plane = drm_atomic_helper_disable_plane, @@ -380,8 +349,6 @@ static const struct drm_plane_funcs rcar_du_vsp_plane_funcs = { .destroy = drm_plane_cleanup, .atomic_duplicate_state = rcar_du_vsp_plane_atomic_duplicate_state, .atomic_destroy_state = rcar_du_vsp_plane_atomic_destroy_state, - .atomic_set_property = rcar_du_vsp_plane_atomic_set_property, - .atomic_get_property = rcar_du_vsp_plane_atomic_get_property, }; int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np, @@ -438,8 +405,7 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np, if (type == DRM_PLANE_TYPE_PRIMARY) continue; - drm_object_attach_property(&plane->plane.base, - rcdu->props.alpha, 255); + drm_plane_create_alpha_property(&plane->plane); drm_plane_create_zpos_property(&plane->plane, 1, 1, vsp->num_planes - 1); } diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.h b/drivers/gpu/drm/rcar-du/rcar_du_vsp.h index 4c5d7bbce6aa..8a8a25c8c8e8 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.h +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.h @@ -44,15 +44,12 @@ static inline struct rcar_du_vsp_plane *to_rcar_vsp_plane(struct drm_plane *p) * @state: base DRM plane state * @format: information about the pixel format used by the plane * @sg_tables: scatter-gather tables for the frame buffer memory - * @alpha: value of the plane alpha property */ struct rcar_du_vsp_plane_state { struct drm_plane_state state; const struct rcar_du_format_info *format; struct sg_table sg_tables[3]; - - unsigned int alpha; }; static inline struct rcar_du_vsp_plane_state * -- git-series 0.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH v6 3/5] drm/rcar-du: Convert to the new generic alpha property Date: Wed, 11 Apr 2018 09:39:27 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A2CF6E54D for ; Wed, 11 Apr 2018 07:39:44 +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: Gustavo Padovan , Daniel Vetter , Maarten Lankhorst , Sean Paul Cc: Maxime Ripard , dri-devel@lists.freedesktop.org, Stefan Schake , Boris Brezillon , Chen-Yu Tsai , Laurent Pinchart , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org Tm93IHRoYXQgd2UgaGF2ZSBzdXBwb3J0IGZvciBwZXItcGxhbmUgYWxwaGEgaW4gdGhlIGNvcmUs IGxldCdzIHVzZSBpdC4KClJldmlld2VkLWJ5OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBp bmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+ClNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1h eGltZS5yaXBhcmRAYm9vdGxpbi5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNh cl9kdV9kcnYuaCAgIHwgIDEgKy0KIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfa21z LmMgICB8ICA1ICstLS0KIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfcGxhbmUuYyB8 IDE1ICsrKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9wbGFuZS5oIHwg IDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfdnNwLmMgICB8IDQyICsrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3Zz cC5oICAgfCAgMyArLS0KIDYgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA1OSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuaAppbmRleCA1YzdlYzE1 ODE4YzcuLjEzMWQ4ZTg4YjA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUv cmNhcl9kdV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5o CkBAIC04Nyw3ICs4Nyw2IEBAIHN0cnVjdCByY2FyX2R1X2RldmljZSB7CiAJc3RydWN0IHJjYXJf ZHVfdnNwIHZzcHNbUkNBUl9EVV9NQVhfVlNQU107CiAKIAlzdHJ1Y3QgewotCQlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICphbHBoYTsKIAkJc3RydWN0IGRybV9wcm9wZXJ0eSAqY29sb3JrZXk7CiAJfSBw cm9wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9rbXMu YyBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfa21zLmMKaW5kZXggYWI1OWQyMDYx ZTA2Li5mNGFjMGY4ODRmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3Jj YXJfZHVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9rbXMuYwpA QCAtNDA3LDExICs0MDcsNiBAQCBzdGF0aWMgaW50IHJjYXJfZHVfZW5jb2RlcnNfaW5pdChzdHJ1 Y3QgcmNhcl9kdV9kZXZpY2UgKnJjZHUpCiAKIHN0YXRpYyBpbnQgcmNhcl9kdV9wcm9wZXJ0aWVz X2luaXQoc3RydWN0IHJjYXJfZHVfZGV2aWNlICpyY2R1KQogewotCXJjZHUtPnByb3BzLmFscGhh ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShyY2R1LT5kZGV2LCAwLCAiYWxwaGEiLCAw LCAyNTUpOwotCWlmIChyY2R1LT5wcm9wcy5hbHBoYSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01F TTsKLQogCS8qCiAJICogVGhlIGNvbG9yIGtleSBpcyBleHByZXNzZWQgYXMgYW4gUkdCODg4IHRy aXBsZXQgc3RvcmVkIGluIGEgMzItYml0CiAJICogaW50ZWdlciBpbiBYUkdCODg4OCBmb3JtYXQu IEJpdCAyNCBpcyB1c2VkIGFzIGEgZmxhZyB0byBkaXNhYmxlICgwKQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Jj YXItZHUvcmNhcl9kdV9wbGFuZS5jCmluZGV4IDY4NTU2YmQ5ZGFkMi4uYzIwZjdlZDQ4YzhkIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3BsYW5lLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9wbGFuZS5jCkBAIC00MjMsNyArNDIzLDcg QEAgc3RhdGljIHZvaWQgcmNhcl9kdV9wbGFuZV9zZXR1cF9tb2RlKHN0cnVjdCByY2FyX2R1X2dy b3VwICpyZ3JwLAogCQlyY2FyX2R1X3BsYW5lX3dyaXRlKHJncnAsIGluZGV4LCBQbkFMUEhBUiwg UG5BTFBIQVJfQUJJVF8wKTsKIAllbHNlCiAJCXJjYXJfZHVfcGxhbmVfd3JpdGUocmdycCwgaW5k ZXgsIFBuQUxQSEFSLAotCQkJCSAgICBQbkFMUEhBUl9BQklUX1ggfCBzdGF0ZS0+YWxwaGEpOwor CQkJCSAgICBQbkFMUEhBUl9BQklUX1ggfCBzdGF0ZS0+c3RhdGUuYWxwaGEgPj4gOCk7CiAKIAlw bm1yID0gUG5NUl9CTV9NRCB8IHN0YXRlLT5mb3JtYXQtPnBubXI7CiAKQEAgLTY5MiwxMSArNjky LDExIEBAIHN0YXRpYyB2b2lkIHJjYXJfZHVfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCiAKIAlzdGF0ZS0+aHdpbmRleCA9IC0xOwogCXN0YXRlLT5zb3VyY2UgPSBSQ0FSX0RV X1BMQU5FX01FTU9SWTsKLQlzdGF0ZS0+YWxwaGEgPSAyNTU7CiAJc3RhdGUtPmNvbG9ya2V5ID0g UkNBUl9EVV9DT0xPUktFWV9OT05FOwogCXN0YXRlLT5zdGF0ZS56cG9zID0gcGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA/IDAgOiAxOwogCiAJcGxhbmUtPnN0YXRlID0gJnN0 YXRlLT5zdGF0ZTsKKwlwbGFuZS0+c3RhdGUtPmFscGhhID0gRFJNX0JMRU5EX0FMUEhBX09QQVFV RTsKIAlwbGFuZS0+c3RhdGUtPnBsYW5lID0gcGxhbmU7CiB9CiAKQEAgLTcwOCw5ICs3MDgsNyBA QCBzdGF0aWMgaW50IHJjYXJfZHVfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgcmNhcl9kdV9wbGFuZV9zdGF0ZSAqcnN0YXRlID0gdG9f cmNhcl9wbGFuZV9zdGF0ZShzdGF0ZSk7CiAJc3RydWN0IHJjYXJfZHVfZGV2aWNlICpyY2R1ID0g dG9fcmNhcl9wbGFuZShwbGFuZSktPmdyb3VwLT5kZXY7CiAKLQlpZiAocHJvcGVydHkgPT0gcmNk dS0+cHJvcHMuYWxwaGEpCi0JCXJzdGF0ZS0+YWxwaGEgPSB2YWw7Ci0JZWxzZSBpZiAocHJvcGVy dHkgPT0gcmNkdS0+cHJvcHMuY29sb3JrZXkpCisJaWYgKHByb3BlcnR5ID09IHJjZHUtPnByb3Bz LmNvbG9ya2V5KQogCQlyc3RhdGUtPmNvbG9ya2V5ID0gdmFsOwogCWVsc2UKIAkJcmV0dXJuIC1F SU5WQUw7CkBAIC03MjYsOSArNzI0LDcgQEAgc3RhdGljIGludCByY2FyX2R1X3BsYW5lX2F0b21p Y19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCWNvbnRhaW5lcl9vZihz dGF0ZSwgY29uc3Qgc3RydWN0IHJjYXJfZHVfcGxhbmVfc3RhdGUsIHN0YXRlKTsKIAlzdHJ1Y3Qg cmNhcl9kdV9kZXZpY2UgKnJjZHUgPSB0b19yY2FyX3BsYW5lKHBsYW5lKS0+Z3JvdXAtPmRldjsK IAotCWlmIChwcm9wZXJ0eSA9PSByY2R1LT5wcm9wcy5hbHBoYSkKLQkJKnZhbCA9IHJzdGF0ZS0+ YWxwaGE7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gcmNkdS0+cHJvcHMuY29sb3JrZXkpCisJaWYg KHByb3BlcnR5ID09IHJjZHUtPnByb3BzLmNvbG9ya2V5KQogCQkqdmFsID0gcnN0YXRlLT5jb2xv cmtleTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzk3LDEwICs3OTMsOSBAQCBpbnQg cmNhcl9kdV9wbGFuZXNfaW5pdChzdHJ1Y3QgcmNhcl9kdV9ncm91cCAqcmdycCkKIAkJCWNvbnRp bnVlOwogCiAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+cGxhbmUuYmFzZSwK LQkJCQkJICAgcmNkdS0+cHJvcHMuYWxwaGEsIDI1NSk7Ci0JCWRybV9vYmplY3RfYXR0YWNoX3By b3BlcnR5KCZwbGFuZS0+cGxhbmUuYmFzZSwKIAkJCQkJICAgcmNkdS0+cHJvcHMuY29sb3JrZXks CiAJCQkJCSAgIFJDQVJfRFVfQ09MT1JLRVlfTk9ORSk7CisJCWRybV9wbGFuZV9jcmVhdGVfYWxw aGFfcHJvcGVydHkoJnBsYW5lLT5wbGFuZSk7CiAJCWRybV9wbGFuZV9jcmVhdGVfenBvc19wcm9w ZXJ0eSgmcGxhbmUtPnBsYW5lLCAxLCAxLCA3KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1 L3JjYXJfZHVfcGxhbmUuaAppbmRleCA4OTAzMjFiNDY2NWQuLjVjMTljNjllNDY5MSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9wbGFuZS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfcGxhbmUuaApAQCAtNTAsNyArNTAsNiBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCByY2FyX2R1X3BsYW5lICp0b19yY2FyX3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lKQogICogQHN0YXRlOiBiYXNlIERSTSBwbGFuZSBzdGF0ZQogICogQGZvcm1h dDogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBpeGVsIGZvcm1hdCB1c2VkIGJ5IHRoZSBwbGFuZQog ICogQGh3aW5kZXg6IDAtYmFzZWQgaGFyZHdhcmUgcGxhbmUgaW5kZXgsIC0xIG1lYW5zIHVudXNl ZAotICogQGFscGhhOiB2YWx1ZSBvZiB0aGUgcGxhbmUgYWxwaGEgcHJvcGVydHkKICAqIEBjb2xv cmtleTogdmFsdWUgb2YgdGhlIHBsYW5lIGNvbG9ya2V5IHByb3BlcnR5CiAgKi8KIHN0cnVjdCBy Y2FyX2R1X3BsYW5lX3N0YXRlIHsKQEAgLTYwLDcgKzU5LDYgQEAgc3RydWN0IHJjYXJfZHVfcGxh bmVfc3RhdGUgewogCWludCBod2luZGV4OwogCWVudW0gcmNhcl9kdV9wbGFuZV9zb3VyY2Ugc291 cmNlOwogCi0JdW5zaWduZWQgaW50IGFscGhhOwogCXVuc2lnbmVkIGludCBjb2xvcmtleTsKIH07 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfdnNwLmMgYi9k cml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3ZzcC5jCmluZGV4IDJjMjYwYzMzODQwYi4u YjNiZWMwMTI1Njk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1 X3ZzcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfdnNwLmMKQEAgLTU0 LDYgKzU0LDcgQEAgdm9pZCByY2FyX2R1X3ZzcF9lbmFibGUoc3RydWN0IHJjYXJfZHVfY3J0YyAq Y3J0YykKIAl9OwogCXN0cnVjdCByY2FyX2R1X3BsYW5lX3N0YXRlIHN0YXRlID0gewogCQkuc3Rh dGUgPSB7CisJCQkuYWxwaGEgPSBEUk1fQkxFTkRfQUxQSEFfT1BBUVVFLAogCQkJLmNydGMgPSAm Y3J0Yy0+Y3J0YywKIAkJCS5kc3QueDEgPSAwLAogCQkJLmRzdC55MSA9IDAsCkBAIC02Nyw3ICs2 OCw2IEBAIHZvaWQgcmNhcl9kdV92c3BfZW5hYmxlKHN0cnVjdCByY2FyX2R1X2NydGMgKmNydGMp CiAJCX0sCiAJCS5mb3JtYXQgPSByY2FyX2R1X2Zvcm1hdF9pbmZvKERSTV9GT1JNQVRfQVJHQjg4 ODgpLAogCQkuc291cmNlID0gUkNBUl9EVV9QTEFORV9WU1BEMSwKLQkJLmFscGhhID0gMjU1LAog CQkuY29sb3JrZXkgPSAwLAogCX07CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCBy Y2FyX2R1X3ZzcF9wbGFuZV9zZXR1cChzdHJ1Y3QgcmNhcl9kdV92c3BfcGxhbmUgKnBsYW5lKQog CXN0cnVjdCB2c3AxX2R1X2F0b21pY19jb25maWcgY2ZnID0gewogCQkucGl4ZWxmb3JtYXQgPSAw LAogCQkucGl0Y2ggPSBmYi0+cGl0Y2hlc1swXSwKLQkJLmFscGhhID0gc3RhdGUtPmFscGhhLAor CQkuYWxwaGEgPSBzdGF0ZS0+c3RhdGUuYWxwaGEgPj4gOCwKIAkJLnpwb3MgPSBzdGF0ZS0+c3Rh dGUuenBvcywKIAl9OwogCXVuc2lnbmVkIGludCBpOwpAQCAtMzM1LDQ0ICszMzUsMTMgQEAgc3Rh dGljIHZvaWQgcmNhcl9kdV92c3BfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUp CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybjsKIAotCXN0YXRlLT5hbHBoYSA9IDI1NTsK KwlzdGF0ZS0+c3RhdGUuYWxwaGEgPSBEUk1fQkxFTkRfQUxQSEFfT1BBUVVFOwogCXN0YXRlLT5z dGF0ZS56cG9zID0gcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA/IDAgOiAx OwogCiAJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5zdGF0ZTsKIAlwbGFuZS0+c3RhdGUtPnBsYW5l ID0gcGxhbmU7CiB9CiAKLXN0YXRpYyBpbnQgcmNhcl9kdV92c3BfcGxhbmVfYXRvbWljX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JdWludDY0X3QgdmFsKQot ewotCXN0cnVjdCByY2FyX2R1X3ZzcF9wbGFuZV9zdGF0ZSAqcnN0YXRlID0gdG9fcmNhcl92c3Bf cGxhbmVfc3RhdGUoc3RhdGUpOwotCXN0cnVjdCByY2FyX2R1X2RldmljZSAqcmNkdSA9IHRvX3Jj YXJfdnNwX3BsYW5lKHBsYW5lKS0+dnNwLT5kZXY7Ci0KLQlpZiAocHJvcGVydHkgPT0gcmNkdS0+ cHJvcHMuYWxwaGEpCi0JCXJzdGF0ZS0+YWxwaGEgPSB2YWw7Ci0JZWxzZQotCQlyZXR1cm4gLUVJ TlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJjYXJfZHVfdnNwX3BsYW5lX2F0 b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAot CXVpbnQ2NF90ICp2YWwpCi17Ci0JY29uc3Qgc3RydWN0IHJjYXJfZHVfdnNwX3BsYW5lX3N0YXRl ICpyc3RhdGUgPQotCQljb250YWluZXJfb2Yoc3RhdGUsIGNvbnN0IHN0cnVjdCByY2FyX2R1X3Zz cF9wbGFuZV9zdGF0ZSwgc3RhdGUpOwotCXN0cnVjdCByY2FyX2R1X2RldmljZSAqcmNkdSA9IHRv X3JjYXJfdnNwX3BsYW5lKHBsYW5lKS0+dnNwLT5kZXY7Ci0KLQlpZiAocHJvcGVydHkgPT0gcmNk dS0+cHJvcHMuYWxwaGEpCi0JCSp2YWwgPSByc3RhdGUtPmFscGhhOwotCWVsc2UKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgcmNhcl9kdV92c3BfcGxhbmVfZnVuY3MgPSB7CiAJLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKIAkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCkBAIC0zODAsOCArMzQ5LDYgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgcmNhcl9kdV92c3BfcGxhbmVfZnVuY3MgPSB7CiAJLmRl c3Ryb3kgPSBkcm1fcGxhbmVfY2xlYW51cCwKIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IHJj YXJfZHVfdnNwX3BsYW5lX2F0b21pY19kdXBsaWNhdGVfc3RhdGUsCiAJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gcmNhcl9kdV92c3BfcGxhbmVfYXRvbWljX2Rlc3Ryb3lfc3RhdGUsCi0JLmF0b21p Y19zZXRfcHJvcGVydHkgPSByY2FyX2R1X3ZzcF9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5LAot CS5hdG9taWNfZ2V0X3Byb3BlcnR5ID0gcmNhcl9kdV92c3BfcGxhbmVfYXRvbWljX2dldF9wcm9w ZXJ0eSwKIH07CiAKIGludCByY2FyX2R1X3ZzcF9pbml0KHN0cnVjdCByY2FyX2R1X3ZzcCAqdnNw LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLApAQCAtNDM4LDggKzQwNSw3IEBAIGludCByY2FyX2R1 X3ZzcF9pbml0KHN0cnVjdCByY2FyX2R1X3ZzcCAqdnNwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LAogCQlpZiAodHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQogCQkJY29udGludWU7CiAK LQkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5wbGFuZS5iYXNlLAotCQkJCQkg ICByY2R1LT5wcm9wcy5hbHBoYSwgMjU1KTsKKwkJZHJtX3BsYW5lX2NyZWF0ZV9hbHBoYV9wcm9w ZXJ0eSgmcGxhbmUtPnBsYW5lKTsKIAkJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX3Byb3BlcnR5KCZw bGFuZS0+cGxhbmUsIDEsIDEsCiAJCQkJCSAgICAgICB2c3AtPm51bV9wbGFuZXMgLSAxKTsKIAl9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3ZzcC5oIGIvZHJp dmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV92c3AuaAppbmRleCA0YzVkN2JiY2U2YWEuLjhh OGEyNWM4YzhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV92 c3AuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3ZzcC5oCkBAIC00NCwx NSArNDQsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcmNhcl9kdV92c3BfcGxhbmUgKnRvX3Jj YXJfdnNwX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnApCiAgKiBAc3RhdGU6IGJhc2UgRFJNIHBs YW5lIHN0YXRlCiAgKiBAZm9ybWF0OiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGl4ZWwgZm9ybWF0 IHVzZWQgYnkgdGhlIHBsYW5lCiAgKiBAc2dfdGFibGVzOiBzY2F0dGVyLWdhdGhlciB0YWJsZXMg Zm9yIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5Ci0gKiBAYWxwaGE6IHZhbHVlIG9mIHRoZSBwbGFu ZSBhbHBoYSBwcm9wZXJ0eQogICovCiBzdHJ1Y3QgcmNhcl9kdV92c3BfcGxhbmVfc3RhdGUgewog CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGU7CiAKIAljb25zdCBzdHJ1Y3QgcmNhcl9kdV9m b3JtYXRfaW5mbyAqZm9ybWF0OwogCXN0cnVjdCBzZ190YWJsZSBzZ190YWJsZXNbM107Ci0KLQl1 bnNpZ25lZCBpbnQgYWxwaGE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByY2FyX2R1X3Zz cF9wbGFuZV9zdGF0ZSAqCi0tIApnaXQtc2VyaWVzIDAuOS4xCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=