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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 B877CC47080 for ; Mon, 31 May 2021 20:47:23 +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 7B5C3611CB for ; Mon, 31 May 2021 20:47:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7B5C3611CB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=astier.eu 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 8EE376E461; Mon, 31 May 2021 20:47:16 +0000 (UTC) Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by gabe.freedesktop.org (Postfix) with ESMTPS id CE6FD6E077 for ; Mon, 31 May 2021 20:47:15 +0000 (UTC) Received: by mail-wr1-x42e.google.com with SMTP id j14so12026741wrq.5 for ; Mon, 31 May 2021 13:47:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=astier-eu.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CY9SEtpjOosPn7y/KYqbLFK4fiHB7OI6n/R3eOJ0cQg=; b=lP0tSTkGnLEslCQBr7S3iTpz9oV4TCtqF6+Os58w2/h/nU/haDb6XvuXSK3QdyO5qS QpG9va/LN3E2TZfFPizXK9dOEY1oGELpof5skqboYf7ERsFbrT3hUFTkdvf43rpu1ctP 8y43ccVFbhuZDDVwRnbg+rB7N3DhfPDiM8u6WGWSAN/zq2A3buvinNvG8THfe2fglxNq tW1XeMBrWpfrWn4KpeML2mt7JjZZFQ6pZyz+lHhb2qQz9pC0BHw6J2Z6o8denLdNhtxU frp329pFG1HusDRM3O2JdLEQE+9nM3NlAIgz32nKU78KdYzkeC5WPwySFPmOacSsRlhk dEsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CY9SEtpjOosPn7y/KYqbLFK4fiHB7OI6n/R3eOJ0cQg=; b=p2W4bOvAtjBsKzCQ3QijcOxDXSWNRs6CyB7CnDK1pYVJMpfrnGH/EMmO09zarVKl/K 6Gmjo3ZzF1FnFsl8wTwhB5O92wpeca3BksXeuWOqBT1KDkU7L7p3gKkx94t6AhRUqXXm LRMP1gjbLx3iWbYWh/QR59lGAGhW3P38dYt7CaCCysrJO4LlTXaskEGZojDYY66Dle6X imqKIx0LxPfiZEFtEZ+zYIrb23UR0d93GBjs2mkg62q1rENEbTCvSvwDlYfP9D7avXfi DUF95HY0GygnZoUKAsJ2KcE3aL+F29oU7RpRnFbLwvn2XxqSX9KdxoOg8eXGCXBC+aEL 05aw== X-Gm-Message-State: AOAM532dgaXXkWmynX5sJCTq+NlXpN4bsO6vZKgekiQ23F8sAhS0h+YA oJS2d/SkFH1i5ZBtfoiJMrm3QA== X-Google-Smtp-Source: ABdhPJzfPMnhez+DHDeQqhR2GHz2ItUCJvdVTMipQkXdR/OIa+P0BQGCLqNt9zTIZALR+tc84QOLXA== X-Received: by 2002:adf:e54f:: with SMTP id z15mr6708368wrm.141.1622494034479; Mon, 31 May 2021 13:47:14 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:806:8950:61f0:1b3d:bc7a:1d60]) by smtp.gmail.com with ESMTPSA id m7sm874240wrv.35.2021.05.31.13.47.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 May 2021 13:47:13 -0700 (PDT) From: Anisse Astier To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2 1/2] drm/i915/opregion: add support for mailbox #5 EDID Date: Mon, 31 May 2021 22:46:41 +0200 Message-Id: <20210531204642.4907-2-anisse@astier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210531204642.4907-1-anisse@astier.eu> References: <20210531204642.4907-1-anisse@astier.eu> 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: Jani Nikula , Hans de Goede , Uma Shankar , Anisse Astier Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The ACPI OpRegion Mailbox #5 ASLE extension may contain an EDID to be used for the embedded display. Add support for using it via by adding the EDID to the list of available modes on the connector, and use it for eDP when available. If a panel's EDID is broken, there may be an override EDID set in the ACPI OpRegion mailbox #5. Use it if available. Fixes the GPD Win Max display. Based on original patch series by: Jani Nikula https://patchwork.kernel.org/project/intel-gfx/patch/20200828061941.17051-1-jani.nikula@intel.com/ Changes: - EDID is copied and validated with drm_edid_is_valid - Mode is now added via drm_add_edid_modes instead of using override mechanism - squashed the two patches Cc: Jani Nikula Cc: Uma Shankar Cc: Ville Syrjälä Signed-off-by: Anisse Astier --- drivers/gpu/drm/i915/display/intel_dp.c | 3 + drivers/gpu/drm/i915/display/intel_opregion.c | 69 ++++++++++++++++++- drivers/gpu/drm/i915/display/intel_opregion.h | 8 +++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 5c9222283044..43fb485c0e02 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -5191,6 +5191,9 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, goto out_vdd_off; } + /* Set up override EDID, if any, from ACPI OpRegion */ + intel_opregion_edid_probe(intel_connector); + mutex_lock(&dev->mode_config.mutex); edid = drm_get_edid(connector, &intel_dp->aux.ddc); if (edid) { diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c index dfd724e506b5..ef8d38f041eb 100644 --- a/drivers/gpu/drm/i915/display/intel_opregion.c +++ b/drivers/gpu/drm/i915/display/intel_opregion.c @@ -196,6 +196,8 @@ struct opregion_asle_ext { #define ASLE_IUER_WINDOWS_BTN (1 << 1) #define ASLE_IUER_POWER_BTN (1 << 0) +#define ASLE_PHED_EDID_VALID_MASK 0x3 + /* Software System Control Interrupt (SWSCI) */ #define SWSCI_SCIC_INDICATOR (1 << 0) #define SWSCI_SCIC_MAIN_FUNCTION_SHIFT 1 @@ -909,8 +911,10 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) opregion->asle->ardy = ASLE_ARDY_NOT_READY; } - if (mboxes & MBOX_ASLE_EXT) + if (mboxes & MBOX_ASLE_EXT) { drm_dbg(&dev_priv->drm, "ASLE extension supported\n"); + opregion->asle_ext = base + OPREGION_ASLE_EXT_OFFSET; + } if (intel_load_vbt_firmware(dev_priv) == 0) goto out; @@ -1037,6 +1041,68 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv) return ret - 1; } +/** + * intel_opregion_edid_probe - Add EDID from ACPI OpRegion mailbox #5 + * @intel_connector: eDP connector + * + * This reads the ACPI Opregion mailbox #5 to extract the EDID that is passed + * to it. + * + * Will take a lock on the DRM mode_config to add the EDID; make sure it isn't + * called with lock taken. + * + */ +void intel_opregion_edid_probe(struct intel_connector *intel_connector) +{ + struct drm_connector *connector = &intel_connector->base; + struct drm_i915_private *i915 = to_i915(connector->dev); + struct intel_opregion *opregion = &i915->opregion; + const void *in_edid; + const struct edid *edid; + struct edid *new_edid; + int len, ret, num; + + if (!opregion->asle_ext || connector->override_edid) + return; + + in_edid = opregion->asle_ext->bddc; + + /* Validity corresponds to number of 128-byte blocks */ + len = (opregion->asle_ext->phed & ASLE_PHED_EDID_VALID_MASK) * 128; + if (!len || !memchr_inv(in_edid, 0, len)) + return; + + edid = in_edid; + + if (len < EDID_LENGTH * (1 + edid->extensions)) { + drm_dbg_kms(&i915->drm, "Invalid EDID in ACPI OpRegion (Mailbox #5)\n"); + return; + } + new_edid = drm_edid_duplicate(edid); + if (!new_edid) { + drm_err(&i915->drm, "Cannot duplicate EDID\n"); + return; + } + if (!drm_edid_is_valid(new_edid)) { + kfree(new_edid); + drm_dbg_kms(&i915->drm, "Cannot validate EDID in ACPI OpRegion (Mailbox #5)\n"); + return; + } + + ret = drm_connector_update_edid_property(connector, new_edid); + if (ret) { + kfree(new_edid); + return; + } + + mutex_lock(&connector->dev->mode_config.mutex); + num = drm_add_edid_modes(connector, new_edid); + mutex_unlock(&connector->dev->mode_config.mutex); + + drm_dbg_kms(&i915->drm, "Using OpRegion EDID for [CONNECTOR:%d:%s], added %d mode(s)\n", + connector->base.id, connector->name, num); +} + void intel_opregion_register(struct drm_i915_private *i915) { struct intel_opregion *opregion = &i915->opregion; @@ -1127,6 +1193,7 @@ void intel_opregion_unregister(struct drm_i915_private *i915) opregion->acpi = NULL; opregion->swsci = NULL; opregion->asle = NULL; + opregion->asle_ext = NULL; opregion->vbt = NULL; opregion->lid_state = NULL; } diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h index 4aa68ffbd30e..c1ecfcbb6f55 100644 --- a/drivers/gpu/drm/i915/display/intel_opregion.h +++ b/drivers/gpu/drm/i915/display/intel_opregion.h @@ -29,12 +29,14 @@ #include struct drm_i915_private; +struct intel_connector; struct intel_encoder; struct opregion_header; struct opregion_acpi; struct opregion_swsci; struct opregion_asle; +struct opregion_asle_ext; struct intel_opregion { struct opregion_header *header; @@ -43,6 +45,7 @@ struct intel_opregion { u32 swsci_gbda_sub_functions; u32 swsci_sbcb_sub_functions; struct opregion_asle *asle; + struct opregion_asle_ext *asle_ext; void *rvda; void *vbt_firmware; const void *vbt; @@ -71,6 +74,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv, pci_power_t state); int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv); +void intel_opregion_edid_probe(struct intel_connector *connector); #else /* CONFIG_ACPI*/ @@ -117,6 +121,10 @@ static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev) return -ENODEV; } +void intel_opregion_edid_probe(struct intel_connector *connector) +{ +} + #endif /* CONFIG_ACPI */ #endif -- 2.31.1 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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 498E5C47082 for ; Mon, 31 May 2021 20:47:26 +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 B740C6127C for ; Mon, 31 May 2021 20:47:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B740C6127C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=astier.eu 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 5DF5F6E1B6; Mon, 31 May 2021 20:47:17 +0000 (UTC) Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E5A46E1B6 for ; Mon, 31 May 2021 20:47:16 +0000 (UTC) Received: by mail-wr1-x434.google.com with SMTP id z17so12044619wrq.7 for ; Mon, 31 May 2021 13:47:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=astier-eu.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CY9SEtpjOosPn7y/KYqbLFK4fiHB7OI6n/R3eOJ0cQg=; b=lP0tSTkGnLEslCQBr7S3iTpz9oV4TCtqF6+Os58w2/h/nU/haDb6XvuXSK3QdyO5qS QpG9va/LN3E2TZfFPizXK9dOEY1oGELpof5skqboYf7ERsFbrT3hUFTkdvf43rpu1ctP 8y43ccVFbhuZDDVwRnbg+rB7N3DhfPDiM8u6WGWSAN/zq2A3buvinNvG8THfe2fglxNq tW1XeMBrWpfrWn4KpeML2mt7JjZZFQ6pZyz+lHhb2qQz9pC0BHw6J2Z6o8denLdNhtxU frp329pFG1HusDRM3O2JdLEQE+9nM3NlAIgz32nKU78KdYzkeC5WPwySFPmOacSsRlhk dEsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CY9SEtpjOosPn7y/KYqbLFK4fiHB7OI6n/R3eOJ0cQg=; b=NTls5zxgNYmoiP6G7+Pe11+PXOkOcAan8XtsvBo8kCoeKTsmIs5SJR65r5piPSUQSH stvDVtBoxACEB5aCmk/q7fQh/kTI8Ukb8KzDfjz1xd1ct/WNSqOyj9WWT7QJTyDEtycB Ft9n3MogHPo23LUPoFkFZFbSxxjk16IEbv/pI8vmcDW+L4ihR1T8cWeoMVwAF4+pSyAI JCme2i+UwVa81ZQrdDPtCjJffW3gc4phrN0l4ZFh2BspsWMUnJnrZU7jkgri99ZKLHly a5/PXKfUbn1dVhPyccpCj8BpT+8wDw3s2iQpYWZ0mDfJKueMrjBFAeJqpJBgFjNa2sUE VUjw== X-Gm-Message-State: AOAM533romD6eMeOh3cjQYkYkdkdGcP8drsKcpwZQWzT9AayfecvC4+K ys/6OaPXAPYxJI+6q5Rll0BEqLd+1lyFoA== X-Google-Smtp-Source: ABdhPJzfPMnhez+DHDeQqhR2GHz2ItUCJvdVTMipQkXdR/OIa+P0BQGCLqNt9zTIZALR+tc84QOLXA== X-Received: by 2002:adf:e54f:: with SMTP id z15mr6708368wrm.141.1622494034479; Mon, 31 May 2021 13:47:14 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:806:8950:61f0:1b3d:bc7a:1d60]) by smtp.gmail.com with ESMTPSA id m7sm874240wrv.35.2021.05.31.13.47.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 May 2021 13:47:13 -0700 (PDT) From: Anisse Astier To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Mon, 31 May 2021 22:46:41 +0200 Message-Id: <20210531204642.4907-2-anisse@astier.eu> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210531204642.4907-1-anisse@astier.eu> References: <20210531204642.4907-1-anisse@astier.eu> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 1/2] drm/i915/opregion: add support for mailbox #5 EDID 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: Jani Nikula Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIEFDUEkgT3BSZWdpb24gTWFpbGJveCAjNSBBU0xFIGV4dGVuc2lvbiBtYXkgY29udGFpbiBh biBFRElEIHRvIGJlCnVzZWQgZm9yIHRoZSBlbWJlZGRlZCBkaXNwbGF5LiBBZGQgc3VwcG9ydCBm b3IgdXNpbmcgaXQgdmlhIGJ5IGFkZGluZwp0aGUgRURJRCB0byB0aGUgbGlzdCBvZiBhdmFpbGFi bGUgbW9kZXMgb24gdGhlIGNvbm5lY3RvciwgYW5kIHVzZSBpdCBmb3IKZURQIHdoZW4gYXZhaWxh YmxlLgoKSWYgYSBwYW5lbCdzIEVESUQgaXMgYnJva2VuLCB0aGVyZSBtYXkgYmUgYW4gb3ZlcnJp ZGUgRURJRCBzZXQgaW4gdGhlCkFDUEkgT3BSZWdpb24gbWFpbGJveCAjNS4gVXNlIGl0IGlmIGF2 YWlsYWJsZS4KCkZpeGVzIHRoZSBHUEQgV2luIE1heCBkaXNwbGF5LgoKQmFzZWQgb24gb3JpZ2lu YWwgcGF0Y2ggc2VyaWVzIGJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpo dHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvaW50ZWwtZ2Z4L3BhdGNoLzIwMjAw ODI4MDYxOTQxLjE3MDUxLTEtamFuaS5uaWt1bGFAaW50ZWwuY29tLwoKQ2hhbmdlczoKIC0gRURJ RCBpcyBjb3BpZWQgYW5kIHZhbGlkYXRlZCB3aXRoIGRybV9lZGlkX2lzX3ZhbGlkCiAtIE1vZGUg aXMgbm93IGFkZGVkIHZpYSBkcm1fYWRkX2VkaWRfbW9kZXMgaW5zdGVhZCBvZiB1c2luZyBvdmVy cmlkZQogICBtZWNoYW5pc20KIC0gc3F1YXNoZWQgdGhlIHR3byBwYXRjaGVzCgpDYzogSmFuaSBO aWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KQ2M6IFVtYSBTaGFua2FyIDx1bWEuc2hhbmth ckBpbnRlbC5jb20+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbmlzc2UgQXN0aWVyIDxhbmlzc2VAYXN0aWVyLmV1Pgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8ICAzICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfb3ByZWdpb24uYyB8IDY5ICsrKysr KysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfb3ByZWdp b24uaCB8ICA4ICsrKwogMyBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k cC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4IDVjOTIy MjI4MzA0NC4uNDNmYjQ4NWMwZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcC5jCkBAIC01MTkxLDYgKzUxOTEsOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9lZHBfaW5pdF9j b25uZWN0b3Ioc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAkJZ290byBvdXRfdmRkX29mZjsK IAl9CiAKKwkvKiBTZXQgdXAgb3ZlcnJpZGUgRURJRCwgaWYgYW55LCBmcm9tIEFDUEkgT3BSZWdp b24gKi8KKwlpbnRlbF9vcHJlZ2lvbl9lZGlkX3Byb2JlKGludGVsX2Nvbm5lY3Rvcik7CisKIAlt dXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAllZGlkID0gZHJtX2dldF9lZGlk KGNvbm5lY3RvciwgJmludGVsX2RwLT5hdXguZGRjKTsKIAlpZiAoZWRpZCkgewpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5jCmluZGV4IGRmZDcyNGU1MDZi NS4uZWY4ZDM4ZjA0MWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX29wcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9vcHJlZ2lvbi5jCkBAIC0xOTYsNiArMTk2LDggQEAgc3RydWN0IG9wcmVnaW9uX2FzbGVfZXh0 IHsKICNkZWZpbmUgQVNMRV9JVUVSX1dJTkRPV1NfQlROCQkoMSA8PCAxKQogI2RlZmluZSBBU0xF X0lVRVJfUE9XRVJfQlROCQkoMSA8PCAwKQogCisjZGVmaW5lIEFTTEVfUEhFRF9FRElEX1ZBTElE X01BU0sJMHgzCisKIC8qIFNvZnR3YXJlIFN5c3RlbSBDb250cm9sIEludGVycnVwdCAoU1dTQ0kp ICovCiAjZGVmaW5lIFNXU0NJX1NDSUNfSU5ESUNBVE9SCQkoMSA8PCAwKQogI2RlZmluZSBTV1ND SV9TQ0lDX01BSU5fRlVOQ1RJT05fU0hJRlQJMQpAQCAtOTA5LDggKzkxMSwxMCBAQCBpbnQgaW50 ZWxfb3ByZWdpb25fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlv cHJlZ2lvbi0+YXNsZS0+YXJkeSA9IEFTTEVfQVJEWV9OT1RfUkVBRFk7CiAJfQogCi0JaWYgKG1i b3hlcyAmIE1CT1hfQVNMRV9FWFQpCisJaWYgKG1ib3hlcyAmIE1CT1hfQVNMRV9FWFQpIHsKIAkJ ZHJtX2RiZygmZGV2X3ByaXYtPmRybSwgIkFTTEUgZXh0ZW5zaW9uIHN1cHBvcnRlZFxuIik7CisJ CW9wcmVnaW9uLT5hc2xlX2V4dCA9IGJhc2UgKyBPUFJFR0lPTl9BU0xFX0VYVF9PRkZTRVQ7CisJ fQogCiAJaWYgKGludGVsX2xvYWRfdmJ0X2Zpcm13YXJlKGRldl9wcml2KSA9PSAwKQogCQlnb3Rv IG91dDsKQEAgLTEwMzcsNiArMTA0MSw2OCBAQCBpbnRlbF9vcHJlZ2lvbl9nZXRfcGFuZWxfdHlw ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIHJldCAtIDE7CiB9 CiAKKy8qKgorICogaW50ZWxfb3ByZWdpb25fZWRpZF9wcm9iZSAtIEFkZCBFRElEIGZyb20gQUNQ SSBPcFJlZ2lvbiBtYWlsYm94ICM1CisgKiBAaW50ZWxfY29ubmVjdG9yOiBlRFAgY29ubmVjdG9y CisgKgorICogVGhpcyByZWFkcyB0aGUgQUNQSSBPcHJlZ2lvbiBtYWlsYm94ICM1IHRvIGV4dHJh Y3QgdGhlIEVESUQgdGhhdCBpcyBwYXNzZWQKKyAqIHRvIGl0LgorICoKKyAqIFdpbGwgdGFrZSBh IGxvY2sgb24gdGhlIERSTSBtb2RlX2NvbmZpZyB0byBhZGQgdGhlIEVESUQ7IG1ha2Ugc3VyZSBp dCBpc24ndAorICogY2FsbGVkIHdpdGggbG9jayB0YWtlbi4KKyAqCisgKi8KK3ZvaWQgaW50ZWxf b3ByZWdpb25fZWRpZF9wcm9iZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0 b3IpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0 b3ItPmJhc2U7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNvbm5l Y3Rvci0+ZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmk5MTUtPm9w cmVnaW9uOworCWNvbnN0IHZvaWQgKmluX2VkaWQ7CisJY29uc3Qgc3RydWN0IGVkaWQgKmVkaWQ7 CisJc3RydWN0IGVkaWQgKm5ld19lZGlkOworCWludCBsZW4sIHJldCwgbnVtOworCisJaWYgKCFv cHJlZ2lvbi0+YXNsZV9leHQgfHwgY29ubmVjdG9yLT5vdmVycmlkZV9lZGlkKQorCQlyZXR1cm47 CisKKwlpbl9lZGlkID0gb3ByZWdpb24tPmFzbGVfZXh0LT5iZGRjOworCisJLyogVmFsaWRpdHkg Y29ycmVzcG9uZHMgdG8gbnVtYmVyIG9mIDEyOC1ieXRlIGJsb2NrcyAqLworCWxlbiA9IChvcHJl Z2lvbi0+YXNsZV9leHQtPnBoZWQgJiBBU0xFX1BIRURfRURJRF9WQUxJRF9NQVNLKSAqIDEyODsK KwlpZiAoIWxlbiB8fCAhbWVtY2hyX2ludihpbl9lZGlkLCAwLCBsZW4pKQorCQlyZXR1cm47CisK KwllZGlkID0gaW5fZWRpZDsKKworCWlmIChsZW4gPCBFRElEX0xFTkdUSCAqICgxICsgZWRpZC0+ ZXh0ZW5zaW9ucykpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgRURJRCBp biBBQ1BJIE9wUmVnaW9uIChNYWlsYm94ICM1KVxuIik7CisJCXJldHVybjsKKwl9CisJbmV3X2Vk aWQgPSBkcm1fZWRpZF9kdXBsaWNhdGUoZWRpZCk7CisJaWYgKCFuZXdfZWRpZCkgeworCQlkcm1f ZXJyKCZpOTE1LT5kcm0sICJDYW5ub3QgZHVwbGljYXRlIEVESURcbiIpOworCQlyZXR1cm47CisJ fQorCWlmICghZHJtX2VkaWRfaXNfdmFsaWQobmV3X2VkaWQpKSB7CisJCWtmcmVlKG5ld19lZGlk KTsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkNhbm5vdCB2YWxpZGF0ZSBFRElEIGluIEFD UEkgT3BSZWdpb24gKE1haWxib3ggIzUpXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGRy bV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBuZXdfZWRpZCk7CisJ aWYgKHJldCkgeworCQlrZnJlZShuZXdfZWRpZCk7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9s b2NrKCZjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCW51bSA9IGRybV9hZGRf ZWRpZF9tb2Rlcyhjb25uZWN0b3IsIG5ld19lZGlkKTsKKwltdXRleF91bmxvY2soJmNvbm5lY3Rv ci0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAi VXNpbmcgT3BSZWdpb24gRURJRCBmb3IgW0NPTk5FQ1RPUjolZDolc10sIGFkZGVkICVkIG1vZGUo cylcbiIsCisJCSAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwgbnVtKTsK K30KKwogdm9pZCBpbnRlbF9vcHJlZ2lvbl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKIHsKIAlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmk5MTUtPm9w cmVnaW9uOwpAQCAtMTEyNyw2ICsxMTkzLDcgQEAgdm9pZCBpbnRlbF9vcHJlZ2lvbl91bnJlZ2lz dGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCW9wcmVnaW9uLT5hY3BpID0gTlVM TDsKIAlvcHJlZ2lvbi0+c3dzY2kgPSBOVUxMOwogCW9wcmVnaW9uLT5hc2xlID0gTlVMTDsKKwlv cHJlZ2lvbi0+YXNsZV9leHQgPSBOVUxMOwogCW9wcmVnaW9uLT52YnQgPSBOVUxMOwogCW9wcmVn aW9uLT5saWRfc3RhdGUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9vcHJlZ2lvbi5oCmluZGV4IDRhYTY4ZmZiZDMwZS4uYzFlY2ZjYmI2ZjU1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX29wcmVnaW9uLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9vcHJlZ2lvbi5oCkBAIC0yOSwx MiArMjksMTQgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogc3RydWN0IGRybV9pOTE1X3By aXZhdGU7CitzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yOwogc3RydWN0IGludGVsX2VuY29kZXI7CiAK IHN0cnVjdCBvcHJlZ2lvbl9oZWFkZXI7CiBzdHJ1Y3Qgb3ByZWdpb25fYWNwaTsKIHN0cnVjdCBv cHJlZ2lvbl9zd3NjaTsKIHN0cnVjdCBvcHJlZ2lvbl9hc2xlOworc3RydWN0IG9wcmVnaW9uX2Fz bGVfZXh0OwogCiBzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gewogCXN0cnVjdCBvcHJlZ2lvbl9oZWFk ZXIgKmhlYWRlcjsKQEAgLTQzLDYgKzQ1LDcgQEAgc3RydWN0IGludGVsX29wcmVnaW9uIHsKIAl1 MzIgc3dzY2lfZ2JkYV9zdWJfZnVuY3Rpb25zOwogCXUzMiBzd3NjaV9zYmNiX3N1Yl9mdW5jdGlv bnM7CiAJc3RydWN0IG9wcmVnaW9uX2FzbGUgKmFzbGU7CisJc3RydWN0IG9wcmVnaW9uX2FzbGVf ZXh0ICphc2xlX2V4dDsKIAl2b2lkICpydmRhOwogCXZvaWQgKnZidF9maXJtd2FyZTsKIAljb25z dCB2b2lkICp2YnQ7CkBAIC03MSw2ICs3NCw3IEBAIGludCBpbnRlbF9vcHJlZ2lvbl9ub3RpZnlf ZW5jb2RlcihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciwKIGludCBpbnRlbF9v cHJlZ2lvbl9ub3RpZnlfYWRhcHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCQkJICBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBpbnQgaW50ZWxfb3ByZWdpb25fZ2V0X3BhbmVs X3R5cGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaW50ZWxfb3By ZWdpb25fZWRpZF9wcm9iZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiAj ZWxzZSAvKiBDT05GSUdfQUNQSSovCiAKQEAgLTExNyw2ICsxMjEsMTAgQEAgc3RhdGljIGlubGlu ZSBpbnQgaW50ZWxfb3ByZWdpb25fZ2V0X3BhbmVsX3R5cGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldikKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAordm9pZCBpbnRlbF9vcHJlZ2lvbl9lZGlk X3Byb2JlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKK30KKwogI2VuZGlm IC8qIENPTkZJR19BQ1BJICovCiAKICNlbmRpZgotLSAKMi4zMS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK