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 2DE81C47085 for ; Tue, 25 May 2021 05:48:58 +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 EDD1B613D8 for ; Tue, 25 May 2021 05:48:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EDD1B613D8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A0FE66E83B; Tue, 25 May 2021 05:48:48 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id DFADF6E953; Tue, 25 May 2021 05:48:45 +0000 (UTC) IronPort-SDR: vaHmKrYGa6vErdkza0EF1EyQzMVAOYKwNafbbz5lz3DlZLlKA0xhN/Qj5VUDEh83Oa5XXm/ZzF H1FC3l8sWCVg== X-IronPort-AV: E=McAfee;i="6200,9189,9994"; a="266005466" X-IronPort-AV: E=Sophos;i="5.82,327,1613462400"; d="scan'208";a="266005466" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2021 22:48:44 -0700 IronPort-SDR: 1opb8hGvRga9ELXmhQQlTMa2EdoUxweLWinqB3hdgaQib0Mz1J/NkeB3MMjBRAT7xU3isO9Fie o9IP43AmCi8g== X-IronPort-AV: E=Sophos;i="5.82,327,1613462400"; d="scan'208";a="397231818" 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; 24 May 2021 22:48:44 -0700 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Subject: [PATCH v4 16/17] drm/i915/pxp: black pixels on pxp disabled Date: Mon, 24 May 2021 22:48:02 -0700 Message-Id: <20210525054803.7387-17-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210525054803.7387-1-daniele.ceraolospurio@intel.com> References: <20210525054803.7387-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 , 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 --- .../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 88b3272c0b00..44d7a5072090 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 6b5dab9e1c40..88c0b882b844 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -624,6 +624,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 2c8e88e8ad83..d4eb43b96ffd 100644 --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c @@ -975,6 +975,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, @@ -1088,14 +1115,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 b3eaf45ae3ab..3ad6577b7fa4 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -7161,6 +7161,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) @@ -11276,6 +11277,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.29.2 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 85059C2B9F8 for ; Tue, 25 May 2021 05:49:01 +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 46A556140E for ; Tue, 25 May 2021 05:49:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 46A556140E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6809F6E833; Tue, 25 May 2021 05:48:51 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id DFADF6E953; Tue, 25 May 2021 05:48:45 +0000 (UTC) IronPort-SDR: vaHmKrYGa6vErdkza0EF1EyQzMVAOYKwNafbbz5lz3DlZLlKA0xhN/Qj5VUDEh83Oa5XXm/ZzF H1FC3l8sWCVg== X-IronPort-AV: E=McAfee;i="6200,9189,9994"; a="266005466" X-IronPort-AV: E=Sophos;i="5.82,327,1613462400"; d="scan'208";a="266005466" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2021 22:48:44 -0700 IronPort-SDR: 1opb8hGvRga9ELXmhQQlTMa2EdoUxweLWinqB3hdgaQib0Mz1J/NkeB3MMjBRAT7xU3isO9Fie o9IP43AmCi8g== X-IronPort-AV: E=Sophos;i="5.82,327,1613462400"; d="scan'208";a="397231818" 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; 24 May 2021 22:48:44 -0700 From: Daniele Ceraolo Spurio To: intel-gfx@lists.freedesktop.org Date: Mon, 24 May 2021 22:48:02 -0700 Message-Id: <20210525054803.7387-17-daniele.ceraolospurio@intel.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210525054803.7387-1-daniele.ceraolospurio@intel.com> References: <20210525054803.7387-1-daniele.ceraolospurio@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v4 16/17] 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+Ci0tLQogLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2F0b21pY19wbGFu ZS5jIHwgMTMgKysrKystCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggICAgfCAgMyArKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5j ICAgIHwgMzYgKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o ICAgICAgICAgICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQs IDk1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljX3BsYW5lLmMKaW5kZXggODhiMzI3MmMwYjAwLi40 NGQ3YTUwNzIwOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfYXRvbWljX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9hdG9taWNfcGxhbmUuYwpAQCAtMzkyLDYgKzM5MiwxMSBAQCBzdGF0aWMgaW50IGJvX2hhc192 YWxpZF9lbmNyeXB0aW9uKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJ ICAgICAgIGludGVsX3B4cF9pc19hY3RpdmUoJmk5MTUtPmd0LnB4cCk7CiB9CiAKK3N0YXRpYyBi b29sIHB4cF9pc19ib3JrZWQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK K3sKKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2lzX3Byb3RlY3RlZChvYmopICYmICFib19oYXNf dmFsaWRfZW5jcnlwdGlvbihvYmopOworfQorCiBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNr KHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJICAgICBzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lKQogewpAQCAtNDI0LDEwICs0MjksMTQgQEAgaW50IGludGVsX3BsYW5lX2F0 b21pY19jaGVjayhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJCQkJICBjcnRj KTsKIAogCWZiID0gbmV3X3BsYW5lX3N0YXRlLT5ody5mYjsKLQlpZiAoZmIpCisJaWYgKGZiKSB7 CiAJCW5ld19wbGFuZV9zdGF0ZS0+ZGVjcnlwdCA9IGJvX2hhc192YWxpZF9lbmNyeXB0aW9uKGlu dGVsX2ZiX29iaihmYikpOwotCWVsc2UKKwkJbmV3X3BsYW5lX3N0YXRlLT5mb3JjZV9ibGFjayA9 IHB4cF9pc19ib3JrZWQoaW50ZWxfZmJfb2JqKGZiKSk7CisKKwl9IGVsc2UgewogCQluZXdfcGxh bmVfc3RhdGUtPmRlY3J5cHQgPSBvbGRfcGxhbmVfc3RhdGUtPmRlY3J5cHQ7CisJCW5ld19wbGFu ZV9zdGF0ZS0+Zm9yY2VfYmxhY2sgPSBvbGRfcGxhbmVfc3RhdGUtPmZvcmNlX2JsYWNrOworCX0K IAogCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7CiAJaWYgKCFuZXdfY3J0 Y19zdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5X3R5cGVzLmgKaW5kZXggNmI1ZGFiOWUxYzQwLi44OGMwYjg4MmI4NDQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCkBAIC02 MjQsNiArNjI0LDkgQEAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlIHsKIAkvKiBQbGFuZSBweHAg ZGVjcnlwdGlvbiBzdGF0ZSAqLwogCWJvb2wgZGVjcnlwdDsKIAorCS8qIFBsYW5lIHN0YXRlIHRv IGRpc3BsYXkgYmxhY2sgcGl4ZWxzIHdoZW4gcHhwIGlzIGJvcmtlZCAqLworCWJvb2wgZm9yY2Vf YmxhY2s7CisKIAkvKiBwbGFuZSBjb250cm9sIHJlZ2lzdGVyICovCiAJdTMyIGN0bDsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5l LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYwpp bmRleCAyYzhlODhlOGFkODMuLmQ0ZWI0M2I5NmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKQEAgLTk3NSw2ICs5NzUsMzMg QEAgc3RhdGljIHUzMiBza2xfc3VyZl9hZGRyZXNzKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUsCiAJfQogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9sb2FkX3BsYW5l X2NzY19ibGFjayhzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2 KTsKKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX3BsYW5lLT5waXBlOworCWVudW0gcGxhbmVfaWQg cGxhbmUgPSBpbnRlbF9wbGFuZS0+aWQ7CisJdTE2IHBvc3RvZmYgPSAwOworCisJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJwbGFuZSBjb2xvciBDVE0gdG8gYmxhY2sgICVzOiVkXG4iLAor CQkgICAgaW50ZWxfcGxhbmUtPmJhc2UubmFtZSwgcGxhbmUpOworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9DU0NfQ09FRkYocGlwZSwgcGxhbmUsIDApLCAwKTsKKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lLCAxKSwgMCk7 CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX0NPRUZGKHBpcGUsIHBs YW5lLCAyKSwgMCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NTQ19DT0VG RihwaXBlLCBwbGFuZSwgMyksIDApOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX0NTQ19DT0VGRihwaXBlLCBwbGFuZSwgNCksIDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9DU0NfQ09FRkYocGlwZSwgcGxhbmUsIDUpLCAwKTsKKworCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lLCAwKSwgMCk7 CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NTQ19QUkVPRkYocGlwZSwgcGxh bmUsIDEpLCAwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1NDX1BSRU9G RihwaXBlLCBwbGFuZSwgMiksIDApOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lLCAwKSwgcG9zdG9mZik7CisJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIFBMQU5FX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lLCAxKSwgcG9zdG9m Zik7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NTQ19QT1NUT0ZGKHBpcGUs IHBsYW5lLCAyKSwgcG9zdG9mZik7Cit9CisKIHN0YXRpYyB2b2lkCiBza2xfcHJvZ3JhbV9wbGFu ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLApAQCAtMTA4OCwxNCArMTExNSwyMSBAQCBza2xfcHJvZ3JhbV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAogCSAqLwogCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOwogCXBsYW5l X3N1cmYgPSBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHI7 CisJcGxhbmVfY29sb3JfY3RsID0gaW50ZWxfZGVfcmVhZF9mdyhkZXZfcHJpdiwgUExBTkVfQ09M T1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7CiAKIAkvKgogCSAqIEZJWE1FOiBweHAgc2Vzc2lvbiBp bnZhbGlkYXRpb24gY2FuIGhpdCBhbnkgdGltZSBldmVuIGF0IHRpbWUgb2YgY29tbWl0CiAJICog b3IgYWZ0ZXIgdGhlIGNvbW1pdCwgZGlzcGxheSBjb250ZW50IHdpbGwgYmUgZ2FyYmFnZS4KIAkg Ki8KLQlpZiAocGxhbmVfc3RhdGUtPmRlY3J5cHQpCisJaWYgKHBsYW5lX3N0YXRlLT5kZWNyeXB0 KSB7CiAJCXBsYW5lX3N1cmYgfD0gUExBTkVfU1VSRl9ERUNSWVBUOworCX0gZWxzZSBpZiAocGxh bmVfc3RhdGUtPmZvcmNlX2JsYWNrKSB7CisJCWludGVsX2xvYWRfcGxhbmVfY3NjX2JsYWNrKHBs YW5lKTsKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BMQU5FX0NTQ19FTkFCTEU7 CisJfQogCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NPTE9SX0NUTChwaXBl LCBwbGFuZV9pZCksCisJCQkgIHBsYW5lX2NvbG9yX2N0bCk7CiAJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9zdXJmKTsKIAogCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggYjNlYWY0NWFlM2FiLi4zYWQ2NTc3YjdmYTQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNzE2MSw2ICs3MTYxLDcgQEAgZW51bSB7CiAjZGVm aW5lIF9QTEFORV9DT0xPUl9DVExfM19BCQkJMHg3MDNDQyAvKiBHTEsrICovCiAjZGVmaW5lICAg UExBTkVfQ09MT1JfUElQRV9HQU1NQV9FTkFCTEUJCSgxIDw8IDMwKSAvKiBQcmUtSUNMICovCiAj ZGVmaW5lICAgUExBTkVfQ09MT1JfWVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRQkoMSA8PCAy OCkKKyNkZWZpbmUgICBQTEFORV9DT0xPUl9QTEFORV9DU0NfRU5BQkxFCQkJUkVHX0JJVCgyMSkg LyogSUNMKyAqLwogI2RlZmluZSAgIFBMQU5FX0NPTE9SX0lOUFVUX0NTQ19FTkFCTEUJCSgxIDw8 IDIwKSAvKiBJQ0wrICovCiAjZGVmaW5lICAgUExBTkVfQ09MT1JfUElQRV9DU0NfRU5BQkxFCQko MSA8PCAyMykgLyogUHJlLUlDTCAqLwogI2RlZmluZSAgIFBMQU5FX0NPTE9SX0NTQ19NT0RFX0JZ UEFTUwkJCSgwIDw8IDE3KQpAQCAtMTEyNzYsNiArMTEyNzcsNTEgQEAgZW51bSBza2xfcG93ZXJf Z2F0ZSB7CiAJCQkJCV9QQUxfUFJFQ19NVUxUSV9TRUdfREFUQV9BLCBcCiAJCQkJCV9QQUxfUFJF Q19NVUxUSV9TRUdfREFUQV9CKQogCisjZGVmaW5lIF9NTUlPX1BMQU5FX0dBTUMocGxhbmUsIGks IGEsIGIpICBfTU1JTyhfUElQRShwbGFuZSwgYSwgYikgKyAoaSkgKiA0KQorCisvKiBQbGFuZSBD U0MgUmVnaXN0ZXJzICovCisjZGVmaW5lIF9QTEFORV9DU0NfUllfR1lfMV9BCTB4NzAyMTAKKyNk ZWZpbmUgX1BMQU5FX0NTQ19SWV9HWV8yX0EJMHg3MDMxMAorCisjZGVmaW5lIF9QTEFORV9DU0Nf UllfR1lfMV9CCTB4NzEyMTAKKyNkZWZpbmUgX1BMQU5FX0NTQ19SWV9HWV8yX0IJMHg3MTMxMAor CisjZGVmaW5lIF9QTEFORV9DU0NfUllfR1lfMShwaXBlKQlfUElQRShwaXBlLCBfUExBTkVfQ1ND X1JZX0dZXzFfQSwgXAorCQkJCQkgICAgICBfUExBTkVfQ1NDX1JZX0dZXzFfQikKKyNkZWZpbmUg X1BMQU5FX0NTQ19SWV9HWV8yKHBpcGUpCV9QSVBFKHBpcGUsIF9QTEFORV9JTlBVVF9DU0NfUllf R1lfMl9BLCBcCisJCQkJCSAgICAgIF9QTEFORV9JTlBVVF9DU0NfUllfR1lfMl9CKQorI2RlZmlu ZSBQTEFORV9DU0NfQ09FRkYocGlwZSwgcGxhbmUsIGluZGV4KQlfTU1JT19QTEFORShwbGFuZSwg XAorCQkJCQkJCSAgICBfUExBTkVfQ1NDX1JZX0dZXzEocGlwZSkgKyAgKGluZGV4KSAqIDQsIFwK KwkJCQkJCQkgICAgX1BMQU5FX0NTQ19SWV9HWV8yKHBpcGUpICsgKGluZGV4KSAqIDQpCisKKyNk ZWZpbmUgX1BMQU5FX0NTQ19QUkVPRkZfSElfMV9BCQkweDcwMjI4CisjZGVmaW5lIF9QTEFORV9D U0NfUFJFT0ZGX0hJXzJfQQkJMHg3MDMyOAorCisjZGVmaW5lIF9QTEFORV9DU0NfUFJFT0ZGX0hJ XzFfQgkJMHg3MTIyOAorI2RlZmluZSBfUExBTkVfQ1NDX1BSRU9GRl9ISV8yX0IJCTB4NzEzMjgK KworI2RlZmluZSBfUExBTkVfQ1NDX1BSRU9GRl9ISV8xKHBpcGUpCV9QSVBFKHBpcGUsIF9QTEFO RV9DU0NfUFJFT0ZGX0hJXzFfQSwgXAorCQkJCQkgICAgICBfUExBTkVfQ1NDX1BSRU9GRl9ISV8x X0IpCisjZGVmaW5lIF9QTEFORV9DU0NfUFJFT0ZGX0hJXzIocGlwZSkJX1BJUEUocGlwZSwgX1BM QU5FX0NTQ19QUkVPRkZfSElfMl9BLCBcCisJCQkJCSAgICAgIF9QTEFORV9DU0NfUFJFT0ZGX0hJ XzJfQikKKyNkZWZpbmUgUExBTkVfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZSwgaW5kZXgpCV9NTUlP X1BMQU5FKHBsYW5lLCBfUExBTkVfQ1NDX1BSRU9GRl9ISV8xKHBpcGUpICsgXAorCQkJCQkJCSAg ICAoaW5kZXgpICogNCwgX1BMQU5FX0NTQ19QUkVPRkZfSElfMihwaXBlKSArIFwKKwkJCQkJCQkg ICAgKGluZGV4KSAqIDQpCisKKyNkZWZpbmUgX1BMQU5FX0NTQ19QT1NUT0ZGX0hJXzFfQQkJMHg3 MDIzNAorI2RlZmluZSBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMl9BCQkweDcwMzM0CisKKyNkZWZp bmUgX1BMQU5FX0NTQ19QT1NUT0ZGX0hJXzFfQgkJMHg3MTIzNAorI2RlZmluZSBfUExBTkVfQ1ND X1BPU1RPRkZfSElfMl9CCQkweDcxMzM0CisKKyNkZWZpbmUgX1BMQU5FX0NTQ19QT1NUT0ZGX0hJ XzEocGlwZSkJX1BJUEUocGlwZSwgX1BMQU5FX0NTQ19QT1NUT0ZGX0hJXzFfQSwgXAorCQkJCQkg ICAgICBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMV9CKQorI2RlZmluZSBfUExBTkVfQ1NDX1BPU1RP RkZfSElfMihwaXBlKQlfUElQRShwaXBlLCBfUExBTkVfQ1NDX1BPU1RPRkZfSElfMl9BLCBcCisJ CQkJCSAgICAgIF9QTEFORV9DU0NfUE9TVE9GRl9ISV8yX0IpCisjZGVmaW5lIFBMQU5FX0NTQ19Q T1NUT0ZGKHBpcGUsIHBsYW5lLCBpbmRleCkJX01NSU9fUExBTkUocGxhbmUsIF9QTEFORV9DU0Nf UE9TVE9GRl9ISV8xKHBpcGUpICsgXAorCQkJCQkJCSAgICAoaW5kZXgpICogNCwgX1BMQU5FX0NT Q19QT1NUT0ZGX0hJXzIocGlwZSkgKyBcCisJCQkJCQkJICAgIChpbmRleCkgKiA0KQorCiAvKiBw aXBlIENTQyAmIGRlZ2FtbWEvZ2FtbWEgTFVUcyBvbiBDSFYgKi8KICNkZWZpbmUgX0NHTV9QSVBF X0FfQ1NDX0NPRUZGMDEJKFZMVl9ESVNQTEFZX0JBU0UgKyAweDY3OTAwKQogI2RlZmluZSBfQ0dN X1BJUEVfQV9DU0NfQ09FRkYyMwkoVkxWX0RJU1BMQVlfQkFTRSArIDB4Njc5MDQpCi0tIAoyLjI5 LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=