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=-13.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED,USER_AGENT_GIT 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 11B8AC4320E for ; Thu, 29 Jul 2021 02:03:05 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D3DC26056C for ; Thu, 29 Jul 2021 02:03:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D3DC26056C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A9E2F6EC4D; Thu, 29 Jul 2021 02:02:51 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id E06016EC47; Thu, 29 Jul 2021 02:02:46 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="298370464" X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="298370464" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 19:02:46 -0700 X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="417468145" Received: from dceraolo-linux.fm.intel.com ([10.1.27.145]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 19:02:45 -0700 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Subject: [PATCH v6 14/15] drm/i915/pxp: black pixels on pxp disabled Date: Wed, 28 Jul 2021 19:01:05 -0700 Message-Id: <20210729020106.18346-15-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210729020106.18346-1-daniele.ceraolospurio@intel.com> References: <20210729020106.18346-1-daniele.ceraolospurio@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anshuman Gupta , Rodrigo Vivi , dri-devel@lists.freedesktop.org, Daniele Ceraolo Spurio , Gaurav Kumar , Shankar Uma Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Anshuman Gupta When protected sufaces has flipped and pxp session is disabled, display black pixels by using plane color CTM correction. v2: - Display black pixels in async flip too. v3: - Removed the black pixels logic for async flip. [Ville] - Used plane state to force black pixels. [Ville] v4 (Daniele): update pxp_is_borked check. Cc: Ville Syrjälä Cc: Gaurav Kumar Cc: Shankar Uma Signed-off-by: Anshuman Gupta Signed-off-by: Daniele Ceraolo Spurio Reviewed-by: Rodrigo Vivi --- .../gpu/drm/i915/display/intel_atomic_plane.c | 13 +++++- .../drm/i915/display/intel_display_types.h | 3 ++ .../drm/i915/display/skl_universal_plane.c | 36 ++++++++++++++- drivers/gpu/drm/i915/i915_reg.h | 46 +++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c index 3f605a666ea8..5dfb2b36d0f9 100644 --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c @@ -392,6 +392,11 @@ static int bo_has_valid_encryption(const struct drm_i915_gem_object *obj) intel_pxp_is_active(&i915->gt.pxp); } +static bool pxp_is_borked(const struct drm_i915_gem_object *obj) +{ + return i915_gem_object_is_protected(obj) && !bo_has_valid_encryption(obj); +} + int intel_plane_atomic_check(struct intel_atomic_state *state, struct intel_plane *plane) { @@ -424,10 +429,14 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, crtc); fb = new_plane_state->hw.fb; - if (fb) + if (fb) { new_plane_state->decrypt = bo_has_valid_encryption(intel_fb_obj(fb)); - else + new_plane_state->force_black = pxp_is_borked(intel_fb_obj(fb)); + + } else { new_plane_state->decrypt = old_plane_state->decrypt; + new_plane_state->force_black = old_plane_state->force_black; + } new_plane_state->uapi.visible = false; if (!new_crtc_state) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 24f06cdf3340..5481501cbc65 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -632,6 +632,9 @@ struct intel_plane_state { /* Plane pxp decryption state */ bool decrypt; + /* Plane state to display black pixels when pxp is borked */ + bool force_black; + /* plane control register */ u32 ctl; diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c index 06df634c216f..d6673c8fdcd8 100644 --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c @@ -1002,6 +1002,33 @@ static u32 skl_surf_address(const struct intel_plane_state *plane_state, } } +static void intel_load_plane_csc_black(struct intel_plane *intel_plane) +{ + struct drm_i915_private *dev_priv = to_i915(intel_plane->base.dev); + enum pipe pipe = intel_plane->pipe; + enum plane_id plane = intel_plane->id; + u16 postoff = 0; + + drm_dbg_kms(&dev_priv->drm, "plane color CTM to black %s:%d\n", + intel_plane->base.name, plane); + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 0), 0); + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 1), 0); + + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 2), 0); + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 3), 0); + + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 4), 0); + intel_de_write_fw(dev_priv, PLANE_CSC_COEFF(pipe, plane, 5), 0); + + intel_de_write_fw(dev_priv, PLANE_CSC_PREOFF(pipe, plane, 0), 0); + intel_de_write_fw(dev_priv, PLANE_CSC_PREOFF(pipe, plane, 1), 0); + intel_de_write_fw(dev_priv, PLANE_CSC_PREOFF(pipe, plane, 2), 0); + + intel_de_write_fw(dev_priv, PLANE_CSC_POSTOFF(pipe, plane, 0), postoff); + intel_de_write_fw(dev_priv, PLANE_CSC_POSTOFF(pipe, plane, 1), postoff); + intel_de_write_fw(dev_priv, PLANE_CSC_POSTOFF(pipe, plane, 2), postoff); +} + static void skl_program_plane(struct intel_plane *plane, const struct intel_crtc_state *crtc_state, @@ -1115,14 +1142,21 @@ skl_program_plane(struct intel_plane *plane, */ intel_de_write_fw(dev_priv, PLANE_CTL(pipe, plane_id), plane_ctl); plane_surf = intel_plane_ggtt_offset(plane_state) + surf_addr; + plane_color_ctl = intel_de_read_fw(dev_priv, PLANE_COLOR_CTL(pipe, plane_id)); /* * FIXME: pxp session invalidation can hit any time even at time of commit * or after the commit, display content will be garbage. */ - if (plane_state->decrypt) + if (plane_state->decrypt) { plane_surf |= PLANE_SURF_DECRYPT; + } else if (plane_state->force_black) { + intel_load_plane_csc_black(plane); + plane_color_ctl |= PLANE_COLOR_PLANE_CSC_ENABLE; + } + intel_de_write_fw(dev_priv, PLANE_COLOR_CTL(pipe, plane_id), + plane_color_ctl); intel_de_write_fw(dev_priv, PLANE_SURF(pipe, plane_id), plane_surf); spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 4f4fdd59ecfc..76ec947b163d 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -7222,6 +7222,7 @@ enum { #define _PLANE_COLOR_CTL_3_A 0x703CC /* GLK+ */ #define PLANE_COLOR_PIPE_GAMMA_ENABLE (1 << 30) /* Pre-ICL */ #define PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE (1 << 28) +#define PLANE_COLOR_PLANE_CSC_ENABLE REG_BIT(21) /* ICL+ */ #define PLANE_COLOR_INPUT_CSC_ENABLE (1 << 20) /* ICL+ */ #define PLANE_COLOR_PIPE_CSC_ENABLE (1 << 23) /* Pre-ICL */ #define PLANE_COLOR_CSC_MODE_BYPASS (0 << 17) @@ -11372,6 +11373,51 @@ enum skl_power_gate { _PAL_PREC_MULTI_SEG_DATA_A, \ _PAL_PREC_MULTI_SEG_DATA_B) +#define _MMIO_PLANE_GAMC(plane, i, a, b) _MMIO(_PIPE(plane, a, b) + (i) * 4) + +/* Plane CSC Registers */ +#define _PLANE_CSC_RY_GY_1_A 0x70210 +#define _PLANE_CSC_RY_GY_2_A 0x70310 + +#define _PLANE_CSC_RY_GY_1_B 0x71210 +#define _PLANE_CSC_RY_GY_2_B 0x71310 + +#define _PLANE_CSC_RY_GY_1(pipe) _PIPE(pipe, _PLANE_CSC_RY_GY_1_A, \ + _PLANE_CSC_RY_GY_1_B) +#define _PLANE_CSC_RY_GY_2(pipe) _PIPE(pipe, _PLANE_INPUT_CSC_RY_GY_2_A, \ + _PLANE_INPUT_CSC_RY_GY_2_B) +#define PLANE_CSC_COEFF(pipe, plane, index) _MMIO_PLANE(plane, \ + _PLANE_CSC_RY_GY_1(pipe) + (index) * 4, \ + _PLANE_CSC_RY_GY_2(pipe) + (index) * 4) + +#define _PLANE_CSC_PREOFF_HI_1_A 0x70228 +#define _PLANE_CSC_PREOFF_HI_2_A 0x70328 + +#define _PLANE_CSC_PREOFF_HI_1_B 0x71228 +#define _PLANE_CSC_PREOFF_HI_2_B 0x71328 + +#define _PLANE_CSC_PREOFF_HI_1(pipe) _PIPE(pipe, _PLANE_CSC_PREOFF_HI_1_A, \ + _PLANE_CSC_PREOFF_HI_1_B) +#define _PLANE_CSC_PREOFF_HI_2(pipe) _PIPE(pipe, _PLANE_CSC_PREOFF_HI_2_A, \ + _PLANE_CSC_PREOFF_HI_2_B) +#define PLANE_CSC_PREOFF(pipe, plane, index) _MMIO_PLANE(plane, _PLANE_CSC_PREOFF_HI_1(pipe) + \ + (index) * 4, _PLANE_CSC_PREOFF_HI_2(pipe) + \ + (index) * 4) + +#define _PLANE_CSC_POSTOFF_HI_1_A 0x70234 +#define _PLANE_CSC_POSTOFF_HI_2_A 0x70334 + +#define _PLANE_CSC_POSTOFF_HI_1_B 0x71234 +#define _PLANE_CSC_POSTOFF_HI_2_B 0x71334 + +#define _PLANE_CSC_POSTOFF_HI_1(pipe) _PIPE(pipe, _PLANE_CSC_POSTOFF_HI_1_A, \ + _PLANE_CSC_POSTOFF_HI_1_B) +#define _PLANE_CSC_POSTOFF_HI_2(pipe) _PIPE(pipe, _PLANE_CSC_POSTOFF_HI_2_A, \ + _PLANE_CSC_POSTOFF_HI_2_B) +#define PLANE_CSC_POSTOFF(pipe, plane, index) _MMIO_PLANE(plane, _PLANE_CSC_POSTOFF_HI_1(pipe) + \ + (index) * 4, _PLANE_CSC_POSTOFF_HI_2(pipe) + \ + (index) * 4) + /* pipe CSC & degamma/gamma LUTs on CHV */ #define _CGM_PIPE_A_CSC_COEFF01 (VLV_DISPLAY_BASE + 0x67900) #define _CGM_PIPE_A_CSC_COEFF23 (VLV_DISPLAY_BASE + 0x67904) -- 2.32.0 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=-13.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED,USER_AGENT_GIT 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 18965C4338F for ; Thu, 29 Jul 2021 02:03:04 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DEDCB6103B for ; Thu, 29 Jul 2021 02:03:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DEDCB6103B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 925CE6EC25; Thu, 29 Jul 2021 02:02:48 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id E06016EC47; Thu, 29 Jul 2021 02:02:46 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="298370464" X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="298370464" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 19:02:46 -0700 X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="417468145" Received: from dceraolo-linux.fm.intel.com ([10.1.27.145]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 19:02:45 -0700 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Date: Wed, 28 Jul 2021 19:01:05 -0700 Message-Id: <20210729020106.18346-15-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210729020106.18346-1-daniele.ceraolospurio@intel.com> References: <20210729020106.18346-1-daniele.ceraolospurio@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v6 14/15] drm/i915/pxp: black pixels on pxp disabled X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org, Gaurav Kumar Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogQW5zaHVtYW4gR3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT4KCldoZW4gcHJv dGVjdGVkIHN1ZmFjZXMgaGFzIGZsaXBwZWQgYW5kIHB4cCBzZXNzaW9uIGlzIGRpc2FibGVkLApk aXNwbGF5IGJsYWNrIHBpeGVscyBieSB1c2luZyBwbGFuZSBjb2xvciBDVE0gY29ycmVjdGlvbi4K CnYyOgotIERpc3BsYXkgYmxhY2sgcGl4ZWxzIGluIGFzeW5jIGZsaXAgdG9vLgoKdjM6Ci0gUmVt b3ZlZCB0aGUgYmxhY2sgcGl4ZWxzIGxvZ2ljIGZvciBhc3luYyBmbGlwLiBbVmlsbGVdCi0gVXNl ZCBwbGFuZSBzdGF0ZSB0byBmb3JjZSBibGFjayBwaXhlbHMuIFtWaWxsZV0KCnY0IChEYW5pZWxl KTogdXBkYXRlIHB4cF9pc19ib3JrZWQgY2hlY2suCgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxs ZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEdhdXJhdiBLdW1hciA8a3VtYXIuZ2F1cmF2 QGludGVsLmNvbT4KQ2M6IFNoYW5rYXIgVW1hIDx1bWEuc2hhbmthckBpbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IEFuc2h1bWFuIEd1cHRhIDxhbnNodW1hbi5ndXB0YUBpbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJpb0Bp bnRlbC5jb20+ClJldmlld2VkLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5j b20+Ci0tLQogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21pY19wbGFuZS5jIHwg MTMgKysrKystCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAg fCAgMyArKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jICAgIHwg MzYgKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAg ICAgICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDk1IGlu c2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfYXRvbWljX3BsYW5lLmMKaW5kZXggM2Y2MDVhNjY2ZWE4Li41ZGZiMmIz NmQwZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRv bWljX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9t aWNfcGxhbmUuYwpAQCAtMzkyLDYgKzM5MiwxMSBAQCBzdGF0aWMgaW50IGJvX2hhc192YWxpZF9l bmNyeXB0aW9uKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJICAgICAg IGludGVsX3B4cF9pc19hY3RpdmUoJmk5MTUtPmd0LnB4cCk7CiB9CiAKK3N0YXRpYyBib29sIHB4 cF9pc19ib3JrZWQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwly ZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2lzX3Byb3RlY3RlZChvYmopICYmICFib19oYXNfdmFsaWRf ZW5jcnlwdGlvbihvYmopOworfQorCiBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lKQogewpAQCAtNDI0LDEwICs0MjksMTQgQEAgaW50IGludGVsX3BsYW5lX2F0b21pY19j aGVjayhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCQkJICBjcnRjKTsKIAog CWZiID0gbmV3X3BsYW5lX3N0YXRlLT5ody5mYjsKLQlpZiAoZmIpCisJaWYgKGZiKSB7CiAJCW5l d19wbGFuZV9zdGF0ZS0+ZGVjcnlwdCA9IGJvX2hhc192YWxpZF9lbmNyeXB0aW9uKGludGVsX2Zi X29iaihmYikpOwotCWVsc2UKKwkJbmV3X3BsYW5lX3N0YXRlLT5mb3JjZV9ibGFjayA9IHB4cF9p c19ib3JrZWQoaW50ZWxfZmJfb2JqKGZiKSk7CisKKwl9IGVsc2UgewogCQluZXdfcGxhbmVfc3Rh dGUtPmRlY3J5cHQgPSBvbGRfcGxhbmVfc3RhdGUtPmRlY3J5cHQ7CisJCW5ld19wbGFuZV9zdGF0 ZS0+Zm9yY2VfYmxhY2sgPSBvbGRfcGxhbmVfc3RhdGUtPmZvcmNlX2JsYWNrOworCX0KIAogCW5l d19wbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7CiAJaWYgKCFuZXdfY3J0Y19zdGF0 ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5 cGVzLmgKaW5kZXggMjRmMDZjZGYzMzQwLi41NDgxNTAxY2JjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC02MzIsNiAr NjMyLDkgQEAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlIHsKIAkvKiBQbGFuZSBweHAgZGVjcnlw dGlvbiBzdGF0ZSAqLwogCWJvb2wgZGVjcnlwdDsKIAorCS8qIFBsYW5lIHN0YXRlIHRvIGRpc3Bs YXkgYmxhY2sgcGl4ZWxzIHdoZW4gcHhwIGlzIGJvcmtlZCAqLworCWJvb2wgZm9yY2VfYmxhY2s7 CisKIAkvKiBwbGFuZSBjb250cm9sIHJlZ2lzdGVyICovCiAJdTMyIGN0bDsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYwppbmRleCAw NmRmNjM0YzIxNmYuLmQ2NjczYzhmZGNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKQEAgLTEwMDIsNiArMTAwMiwzMyBAQCBz dGF0aWMgdTMyIHNrbF9zdXJmX2FkZHJlc3MoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSwKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2xvYWRfcGxhbmVfY3Nj X2JsYWNrKHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwor CWVudW0gcGlwZSBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7CisJZW51bSBwbGFuZV9pZCBwbGFu ZSA9IGludGVsX3BsYW5lLT5pZDsKKwl1MTYgcG9zdG9mZiA9IDA7CisKKwlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwgInBsYW5lIGNvbG9yIENUTSB0byBibGFjayAgJXM6JWRcbiIsCisJCSAg ICBpbnRlbF9wbGFuZS0+YmFzZS5uYW1lLCBwbGFuZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0NTQ19DT0VGRihwaXBlLCBwbGFuZSwgMCksIDApOworCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DU0NfQ09FRkYocGlwZSwgcGxhbmUsIDEpLCAwKTsKKwor CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DU0NfQ09FRkYocGlwZSwgcGxhbmUs IDIpLCAwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX0NPRUZGKHBp cGUsIHBsYW5lLCAzKSwgMCk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf Q1NDX0NPRUZGKHBpcGUsIHBsYW5lLCA0KSwgMCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBMQU5FX0NTQ19DT0VGRihwaXBlLCBwbGFuZSwgNSksIDApOworCisJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIFBMQU5FX0NTQ19QUkVPRkYocGlwZSwgcGxhbmUsIDApLCAwKTsKKwlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZSwg MSksIDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DU0NfUFJFT0ZGKHBp cGUsIHBsYW5lLCAyKSwgMCk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVf Q1NDX1BPU1RPRkYocGlwZSwgcGxhbmUsIDApLCBwb3N0b2ZmKTsKKwlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmUsIDEpLCBwb3N0b2ZmKTsK KwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX1BPU1RPRkYocGlwZSwgcGxh bmUsIDIpLCBwb3N0b2ZmKTsKK30KKwogc3RhdGljIHZvaWQKIHNrbF9wcm9ncmFtX3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCkBAIC0xMTE1LDE0ICsxMTQyLDIxIEBAIHNrbF9wcm9ncmFtX3BsYW5l KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJICovCiAJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7CiAJcGxhbmVfc3Vy ZiA9IGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcjsKKwlw bGFuZV9jb2xvcl9jdGwgPSBpbnRlbF9kZV9yZWFkX2Z3KGRldl9wcml2LCBQTEFORV9DT0xPUl9D VEwocGlwZSwgcGxhbmVfaWQpKTsKIAogCS8qCiAJICogRklYTUU6IHB4cCBzZXNzaW9uIGludmFs aWRhdGlvbiBjYW4gaGl0IGFueSB0aW1lIGV2ZW4gYXQgdGltZSBvZiBjb21taXQKIAkgKiBvciBh ZnRlciB0aGUgY29tbWl0LCBkaXNwbGF5IGNvbnRlbnQgd2lsbCBiZSBnYXJiYWdlLgogCSAqLwot CWlmIChwbGFuZV9zdGF0ZS0+ZGVjcnlwdCkKKwlpZiAocGxhbmVfc3RhdGUtPmRlY3J5cHQpIHsK IAkJcGxhbmVfc3VyZiB8PSBQTEFORV9TVVJGX0RFQ1JZUFQ7CisJfSBlbHNlIGlmIChwbGFuZV9z dGF0ZS0+Zm9yY2VfYmxhY2spIHsKKwkJaW50ZWxfbG9hZF9wbGFuZV9jc2NfYmxhY2socGxhbmUp OworCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUExBTkVfQ1NDX0VOQUJMRTsKKwl9 CiAKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBs YW5lX2lkKSwKKwkJCSAgcGxhbmVfY29sb3JfY3RsKTsKIAlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCksIHBsYW5lX3N1cmYpOwogCiAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaAppbmRleCA0ZjRmZGQ1OWVjZmMuLjc2ZWM5NDdiMTYzZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oCkBAIC03MjIyLDYgKzcyMjIsNyBAQCBlbnVtIHsKICNkZWZpbmUg X1BMQU5FX0NPTE9SX0NUTF8zX0EJCQkweDcwM0NDIC8qIEdMSysgKi8KICNkZWZpbmUgICBQTEFO RV9DT0xPUl9QSVBFX0dBTU1BX0VOQUJMRQkJKDEgPDwgMzApIC8qIFByZS1JQ0wgKi8KICNkZWZp bmUgICBQTEFORV9DT0xPUl9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFCSgxIDw8IDI4KQor I2RlZmluZSAgIFBMQU5FX0NPTE9SX1BMQU5FX0NTQ19FTkFCTEUJCQlSRUdfQklUKDIxKSAvKiBJ Q0wrICovCiAjZGVmaW5lICAgUExBTkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRQkJKDEgPDwgMjAp IC8qIElDTCsgKi8KICNkZWZpbmUgICBQTEFORV9DT0xPUl9QSVBFX0NTQ19FTkFCTEUJCSgxIDw8 IDIzKSAvKiBQcmUtSUNMICovCiAjZGVmaW5lICAgUExBTkVfQ09MT1JfQ1NDX01PREVfQllQQVNT CQkJKDAgPDwgMTcpCkBAIC0xMTM3Miw2ICsxMTM3Myw1MSBAQCBlbnVtIHNrbF9wb3dlcl9nYXRl IHsKIAkJCQkJX1BBTF9QUkVDX01VTFRJX1NFR19EQVRBX0EsIFwKIAkJCQkJX1BBTF9QUkVDX01V TFRJX1NFR19EQVRBX0IpCiAKKyNkZWZpbmUgX01NSU9fUExBTkVfR0FNQyhwbGFuZSwgaSwgYSwg YikgIF9NTUlPKF9QSVBFKHBsYW5lLCBhLCBiKSArIChpKSAqIDQpCisKKy8qIFBsYW5lIENTQyBS ZWdpc3RlcnMgKi8KKyNkZWZpbmUgX1BMQU5FX0NTQ19SWV9HWV8xX0EJMHg3MDIxMAorI2RlZmlu ZSBfUExBTkVfQ1NDX1JZX0dZXzJfQQkweDcwMzEwCisKKyNkZWZpbmUgX1BMQU5FX0NTQ19SWV9H WV8xX0IJMHg3MTIxMAorI2RlZmluZSBfUExBTkVfQ1NDX1JZX0dZXzJfQgkweDcxMzEwCisKKyNk ZWZpbmUgX1BMQU5FX0NTQ19SWV9HWV8xKHBpcGUpCV9QSVBFKHBpcGUsIF9QTEFORV9DU0NfUllf R1lfMV9BLCBcCisJCQkJCSAgICAgIF9QTEFORV9DU0NfUllfR1lfMV9CKQorI2RlZmluZSBfUExB TkVfQ1NDX1JZX0dZXzIocGlwZSkJX1BJUEUocGlwZSwgX1BMQU5FX0lOUFVUX0NTQ19SWV9HWV8y X0EsIFwKKwkJCQkJICAgICAgX1BMQU5FX0lOUFVUX0NTQ19SWV9HWV8yX0IpCisjZGVmaW5lIFBM QU5FX0NTQ19DT0VGRihwaXBlLCBwbGFuZSwgaW5kZXgpCV9NTUlPX1BMQU5FKHBsYW5lLCBcCisJ CQkJCQkJICAgIF9QTEFORV9DU0NfUllfR1lfMShwaXBlKSArICAoaW5kZXgpICogNCwgXAorCQkJ CQkJCSAgICBfUExBTkVfQ1NDX1JZX0dZXzIocGlwZSkgKyAoaW5kZXgpICogNCkKKworI2RlZmlu ZSBfUExBTkVfQ1NDX1BSRU9GRl9ISV8xX0EJCTB4NzAyMjgKKyNkZWZpbmUgX1BMQU5FX0NTQ19Q UkVPRkZfSElfMl9BCQkweDcwMzI4CisKKyNkZWZpbmUgX1BMQU5FX0NTQ19QUkVPRkZfSElfMV9C CQkweDcxMjI4CisjZGVmaW5lIF9QTEFORV9DU0NfUFJFT0ZGX0hJXzJfQgkJMHg3MTMyOAorCisj ZGVmaW5lIF9QTEFORV9DU0NfUFJFT0ZGX0hJXzEocGlwZSkJX1BJUEUocGlwZSwgX1BMQU5FX0NT Q19QUkVPRkZfSElfMV9BLCBcCisJCQkJCSAgICAgIF9QTEFORV9DU0NfUFJFT0ZGX0hJXzFfQikK KyNkZWZpbmUgX1BMQU5FX0NTQ19QUkVPRkZfSElfMihwaXBlKQlfUElQRShwaXBlLCBfUExBTkVf Q1NDX1BSRU9GRl9ISV8yX0EsIFwKKwkJCQkJICAgICAgX1BMQU5FX0NTQ19QUkVPRkZfSElfMl9C KQorI2RlZmluZSBQTEFORV9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lLCBpbmRleCkJX01NSU9fUExB TkUocGxhbmUsIF9QTEFORV9DU0NfUFJFT0ZGX0hJXzEocGlwZSkgKyBcCisJCQkJCQkJICAgIChp bmRleCkgKiA0LCBfUExBTkVfQ1NDX1BSRU9GRl9ISV8yKHBpcGUpICsgXAorCQkJCQkJCSAgICAo aW5kZXgpICogNCkKKworI2RlZmluZSBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMV9BCQkweDcwMjM0 CisjZGVmaW5lIF9QTEFORV9DU0NfUE9TVE9GRl9ISV8yX0EJCTB4NzAzMzQKKworI2RlZmluZSBf UExBTkVfQ1NDX1BPU1RPRkZfSElfMV9CCQkweDcxMjM0CisjZGVmaW5lIF9QTEFORV9DU0NfUE9T VE9GRl9ISV8yX0IJCTB4NzEzMzQKKworI2RlZmluZSBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMShw aXBlKQlfUElQRShwaXBlLCBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMV9BLCBcCisJCQkJCSAgICAg IF9QTEFORV9DU0NfUE9TVE9GRl9ISV8xX0IpCisjZGVmaW5lIF9QTEFORV9DU0NfUE9TVE9GRl9I SV8yKHBpcGUpCV9QSVBFKHBpcGUsIF9QTEFORV9DU0NfUE9TVE9GRl9ISV8yX0EsIFwKKwkJCQkJ ICAgICAgX1BMQU5FX0NTQ19QT1NUT0ZGX0hJXzJfQikKKyNkZWZpbmUgUExBTkVfQ1NDX1BPU1RP RkYocGlwZSwgcGxhbmUsIGluZGV4KQlfTU1JT19QTEFORShwbGFuZSwgX1BMQU5FX0NTQ19QT1NU T0ZGX0hJXzEocGlwZSkgKyBcCisJCQkJCQkJICAgIChpbmRleCkgKiA0LCBfUExBTkVfQ1NDX1BP U1RPRkZfSElfMihwaXBlKSArIFwKKwkJCQkJCQkgICAgKGluZGV4KSAqIDQpCisKIC8qIHBpcGUg Q1NDICYgZGVnYW1tYS9nYW1tYSBMVVRzIG9uIENIViAqLwogI2RlZmluZSBfQ0dNX1BJUEVfQV9D U0NfQ09FRkYwMQkoVkxWX0RJU1BMQVlfQkFTRSArIDB4Njc5MDApCiAjZGVmaW5lIF9DR01fUElQ RV9BX0NTQ19DT0VGRjIzCShWTFZfRElTUExBWV9CQVNFICsgMHg2NzkwNCkKLS0gCjIuMzIuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==