From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajat Jain Subject: [PATCH v2 1/3] drm/i915: Move the code to populate ACPI device ID into intel_acpi Date: Mon, 4 Nov 2019 11:41:45 -0800 Message-ID: <20191104194147.185642-1-rajatja@google.com> References: <20191023001206.15741-1-rajatja@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: In-Reply-To: <20191023001206.15741-1-rajatja@google.com> Sender: linux-kernel-owner@vger.kernel.org To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Chris Wilson , Imre Deak , =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet Cc: Rajat Jain , rajatxjain@gmail.com List-Id: intel-gfx@lists.freedesktop.org Move the code that populates the ACPI device ID for devices, into more appripriate intel_acpi.c. This is done in preparation for more users of this code (in next patch). Signed-off-by: Rajat Jain Change-Id: Ifb3bd458734985c2a78ba682e6f0a2e63e0626ca --- v2: v1 doesn't exist. Found existing code in i915 driver to assign the ACPI ID which is what I plan to re-use. drivers/gpu/drm/i915/display/intel_acpi.c | 87 +++++++++++++++++++ drivers/gpu/drm/i915/display/intel_acpi.h | 6 ++ drivers/gpu/drm/i915/display/intel_opregion.c | 80 +---------------- 3 files changed, 97 insertions(+), 76 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_acpi.c b/drivers/gpu/drm/i915/display/intel_acpi.c index 3456d33feb46..748d9b3125dd 100644 --- a/drivers/gpu/drm/i915/display/intel_acpi.c +++ b/drivers/gpu/drm/i915/display/intel_acpi.c @@ -156,3 +156,90 @@ void intel_register_dsm_handler(void) void intel_unregister_dsm_handler(void) { } + +/* + * ACPI Specification, Revision 5.0, Appendix B.3.2 _DOD (Enumerate All Devices + * Attached to the Display Adapter). + */ +#define ACPI_DISPLAY_INDEX_SHIFT 0 +#define ACPI_DISPLAY_INDEX_MASK (0xf << 0) +#define ACPI_DISPLAY_PORT_ATTACHMENT_SHIFT 4 +#define ACPI_DISPLAY_PORT_ATTACHMENT_MASK (0xf << 4) +#define ACPI_DISPLAY_TYPE_SHIFT 8 +#define ACPI_DISPLAY_TYPE_MASK (0xf << 8) +#define ACPI_DISPLAY_TYPE_OTHER (0 << 8) +#define ACPI_DISPLAY_TYPE_VGA (1 << 8) +#define ACPI_DISPLAY_TYPE_TV (2 << 8) +#define ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL (3 << 8) +#define ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL (4 << 8) +#define ACPI_VENDOR_SPECIFIC_SHIFT 12 +#define ACPI_VENDOR_SPECIFIC_MASK (0xf << 12) +#define ACPI_BIOS_CAN_DETECT (1 << 16) +#define ACPI_DEPENDS_ON_VGA (1 << 17) +#define ACPI_PIPE_ID_SHIFT 18 +#define ACPI_PIPE_ID_MASK (7 << 18) +#define ACPI_DEVICE_ID_SCHEME (1ULL << 31) + +static u32 acpi_display_type(struct intel_connector *connector) +{ + u32 display_type; + + switch (connector->base.connector_type) { + case DRM_MODE_CONNECTOR_VGA: + case DRM_MODE_CONNECTOR_DVIA: + display_type = ACPI_DISPLAY_TYPE_VGA; + break; + case DRM_MODE_CONNECTOR_Composite: + case DRM_MODE_CONNECTOR_SVIDEO: + case DRM_MODE_CONNECTOR_Component: + case DRM_MODE_CONNECTOR_9PinDIN: + case DRM_MODE_CONNECTOR_TV: + display_type = ACPI_DISPLAY_TYPE_TV; + break; + case DRM_MODE_CONNECTOR_DVII: + case DRM_MODE_CONNECTOR_DVID: + case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_HDMIA: + case DRM_MODE_CONNECTOR_HDMIB: + display_type = ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL; + break; + case DRM_MODE_CONNECTOR_LVDS: + case DRM_MODE_CONNECTOR_eDP: + case DRM_MODE_CONNECTOR_DSI: + display_type = ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL; + break; + case DRM_MODE_CONNECTOR_Unknown: + case DRM_MODE_CONNECTOR_VIRTUAL: + display_type = ACPI_DISPLAY_TYPE_OTHER; + break; + default: + MISSING_CASE(connector->base.connector_type); + display_type = ACPI_DISPLAY_TYPE_OTHER; + break; + } + + return display_type; +} + +void intel_populate_acpi_ids_for_all_connectors(struct drm_device *drm_dev) +{ + struct intel_connector *connector; + struct drm_connector_list_iter conn_iter; + u8 display_index[16] = {}; + u32 device_id, type; + + /* Populate the ACPI IDs for all connectors for a given drm_device */ + drm_connector_list_iter_begin(drm_dev, &conn_iter); + for_each_intel_connector_iter(connector, &conn_iter) { + + device_id = acpi_display_type(connector); + + /* Use display type specific display index. */ + type = (device_id & ACPI_DISPLAY_TYPE_MASK) + >> ACPI_DISPLAY_TYPE_SHIFT; + device_id |= display_index[type]++ << ACPI_DISPLAY_INDEX_SHIFT; + + connector->acpi_device_id = device_id; + } + drm_connector_list_iter_end(&conn_iter); +} diff --git a/drivers/gpu/drm/i915/display/intel_acpi.h b/drivers/gpu/drm/i915/display/intel_acpi.h index 1c576b3fb712..8f6d850df6fa 100644 --- a/drivers/gpu/drm/i915/display/intel_acpi.h +++ b/drivers/gpu/drm/i915/display/intel_acpi.h @@ -6,12 +6,18 @@ #ifndef __INTEL_ACPI_H__ #define __INTEL_ACPI_H__ +#include "intel_display_types.h" + #ifdef CONFIG_ACPI void intel_register_dsm_handler(void); void intel_unregister_dsm_handler(void); +void intel_populate_acpi_ids_for_all_connectors(struct drm_device *drm_dev); #else static inline void intel_register_dsm_handler(void) { return; } static inline void intel_unregister_dsm_handler(void) { return; } +static inline void +static inline void +intel_populate_acpi_ids_for_all_connectors(struct drm_device *drm_dev) { } #endif /* CONFIG_ACPI */ #endif /* __INTEL_ACPI_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c index 969ade623691..f5976a6ab3c4 100644 --- a/drivers/gpu/drm/i915/display/intel_opregion.c +++ b/drivers/gpu/drm/i915/display/intel_opregion.c @@ -35,6 +35,7 @@ #include "display/intel_panel.h" #include "i915_drv.h" +#include "intel_acpi.h" #include "intel_display_types.h" #include "intel_opregion.h" @@ -242,29 +243,6 @@ struct opregion_asle_ext { #define SWSCI_SBCB_POST_VBE_PM SWSCI_FUNCTION_CODE(SWSCI_SBCB, 19) #define SWSCI_SBCB_ENABLE_DISABLE_AUDIO SWSCI_FUNCTION_CODE(SWSCI_SBCB, 21) -/* - * ACPI Specification, Revision 5.0, Appendix B.3.2 _DOD (Enumerate All Devices - * Attached to the Display Adapter). - */ -#define ACPI_DISPLAY_INDEX_SHIFT 0 -#define ACPI_DISPLAY_INDEX_MASK (0xf << 0) -#define ACPI_DISPLAY_PORT_ATTACHMENT_SHIFT 4 -#define ACPI_DISPLAY_PORT_ATTACHMENT_MASK (0xf << 4) -#define ACPI_DISPLAY_TYPE_SHIFT 8 -#define ACPI_DISPLAY_TYPE_MASK (0xf << 8) -#define ACPI_DISPLAY_TYPE_OTHER (0 << 8) -#define ACPI_DISPLAY_TYPE_VGA (1 << 8) -#define ACPI_DISPLAY_TYPE_TV (2 << 8) -#define ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL (3 << 8) -#define ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL (4 << 8) -#define ACPI_VENDOR_SPECIFIC_SHIFT 12 -#define ACPI_VENDOR_SPECIFIC_MASK (0xf << 12) -#define ACPI_BIOS_CAN_DETECT (1 << 16) -#define ACPI_DEPENDS_ON_VGA (1 << 17) -#define ACPI_PIPE_ID_SHIFT 18 -#define ACPI_PIPE_ID_MASK (7 << 18) -#define ACPI_DEVICE_ID_SCHEME (1 << 31) - #define MAX_DSLP 1500 static int swsci(struct drm_i915_private *dev_priv, @@ -662,54 +640,12 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val) } } -static u32 acpi_display_type(struct intel_connector *connector) -{ - u32 display_type; - - switch (connector->base.connector_type) { - case DRM_MODE_CONNECTOR_VGA: - case DRM_MODE_CONNECTOR_DVIA: - display_type = ACPI_DISPLAY_TYPE_VGA; - break; - case DRM_MODE_CONNECTOR_Composite: - case DRM_MODE_CONNECTOR_SVIDEO: - case DRM_MODE_CONNECTOR_Component: - case DRM_MODE_CONNECTOR_9PinDIN: - case DRM_MODE_CONNECTOR_TV: - display_type = ACPI_DISPLAY_TYPE_TV; - break; - case DRM_MODE_CONNECTOR_DVII: - case DRM_MODE_CONNECTOR_DVID: - case DRM_MODE_CONNECTOR_DisplayPort: - case DRM_MODE_CONNECTOR_HDMIA: - case DRM_MODE_CONNECTOR_HDMIB: - display_type = ACPI_DISPLAY_TYPE_EXTERNAL_DIGITAL; - break; - case DRM_MODE_CONNECTOR_LVDS: - case DRM_MODE_CONNECTOR_eDP: - case DRM_MODE_CONNECTOR_DSI: - display_type = ACPI_DISPLAY_TYPE_INTERNAL_DIGITAL; - break; - case DRM_MODE_CONNECTOR_Unknown: - case DRM_MODE_CONNECTOR_VIRTUAL: - display_type = ACPI_DISPLAY_TYPE_OTHER; - break; - default: - MISSING_CASE(connector->base.connector_type); - display_type = ACPI_DISPLAY_TYPE_OTHER; - break; - } - - return display_type; -} - static void intel_didl_outputs(struct drm_i915_private *dev_priv) { struct intel_opregion *opregion = &dev_priv->opregion; struct intel_connector *connector; struct drm_connector_list_iter conn_iter; int i = 0, max_outputs; - int display_index[16] = {}; /* * In theory, did2, the extended didl, gets added at opregion version @@ -721,20 +657,12 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv) max_outputs = ARRAY_SIZE(opregion->acpi->didl) + ARRAY_SIZE(opregion->acpi->did2); + intel_populate_acpi_ids_for_all_connectors(&dev_priv->drm); + drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter); for_each_intel_connector_iter(connector, &conn_iter) { - u32 device_id, type; - - device_id = acpi_display_type(connector); - - /* Use display type specific display index. */ - type = (device_id & ACPI_DISPLAY_TYPE_MASK) - >> ACPI_DISPLAY_TYPE_SHIFT; - device_id |= display_index[type]++ << ACPI_DISPLAY_INDEX_SHIFT; - - connector->acpi_device_id = device_id; if (i < max_outputs) - set_did(opregion, i, device_id); + set_did(opregion, i, connector->acpi_device_id); i++; } drm_connector_list_iter_end(&conn_iter); -- 2.24.0.rc1.363.gb1bccd3e3d-goog 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=-9.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 E60E8C5DF60 for ; Tue, 5 Nov 2019 17:53:48 +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 CC4B2217F5 for ; Tue, 5 Nov 2019 17:53:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CC4B2217F5 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.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 E56CF6EB36; Tue, 5 Nov 2019 17:53:46 +0000 (UTC) Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B430896AF for ; Mon, 4 Nov 2019 19:41:53 +0000 (UTC) Received: by mail-pl1-x649.google.com with SMTP id v2so11212670plp.14 for ; Mon, 04 Nov 2019 11:41:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=3VArYdzuhYZ5F7lzuhgwCdAuyaphVwUyvDoIU6FlqsQ=; b=V7EDxPWwPOVtjse+3JC+60miATGbj10tjn/FWCFRxrky8epm0lIra4a1b+lPZnt6IV gHk2BaqmmhC0oA5ezlxhauwwspUfSU3F73jeIBkypR29g8iJhfnD8IbpzBmqGmdgvLZz Uec/ioHTyeKkvKAs5GPb8GqYAoPhVzANNzIlenKcB/B9fWO/tChrke8OI6Ybm1geWnj8 3gvaOeYfgxoOs4fR+UeNeWW2nG631/1kdHMiKPoQ7Xs4Svvx/XEJhchnznGeCM/2JVBA 8W8Fh8oK+YZtkXp+iyJJHdt0YLOL0sW3TVQZg2h9228SUGDC0UyMAdnmAYohMYgsghoZ ifag== X-Gm-Message-State: APjAAAVCy/xx6zcUSjJImvecve2vzHe+Mmt+vpJsp1Zuq6T6WdpbjvHf Ry7Gka+kK2kA9WB+Hj4kTjmCBW0EclLK X-Google-Smtp-Source: APXvYqzgyJKX/aMK/PCesa/JZEFUnHC+1EnTiVopo5JDa033eb7ODBNtkyHZnqytRQQWMtuqBDosgK+6/LRl X-Received: by 2002:a63:1c10:: with SMTP id c16mr30979864pgc.183.1572896512467; Mon, 04 Nov 2019 11:41:52 -0800 (PST) Date: Mon, 4 Nov 2019 11:41:45 -0800 In-Reply-To: <20191023001206.15741-1-rajatja@google.com> Message-Id: <20191104194147.185642-1-rajatja@google.com> Mime-Version: 1.0 References: <20191023001206.15741-1-rajatja@google.com> X-Mailer: git-send-email 2.24.0.rc1.363.gb1bccd3e3d-goog From: Rajat Jain To: Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , "=?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?=" , Chris Wilson , Imre Deak , "=?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?=" , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, gregkh@linuxfoundation.org, mathewk@google.com, Daniel Thompson , Jonathan Corbet , Pavel Machek , seanpaul@google.com, Duncan Laurie , jsbarnes@google.com, Thierry Reding X-Mailman-Approved-At: Tue, 05 Nov 2019 17:53:45 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=3VArYdzuhYZ5F7lzuhgwCdAuyaphVwUyvDoIU6FlqsQ=; b=T5uKi/m7kOXDbQheqvsINWaygZIAlT7klsFKc8D9sd2E5YTaoR+mABMHRMkacGBYQk TEeJ3xc2lNA7+zQEWB2APhBk67PDsVThT/qB5bti/4GmYGPYBlYQgQ/YgSXT7FGeJ6jT zCIABfGkVqhvJXDyO9dHfXcqQj5qMqYgGshJ3CWrdRfFaRNrWgSwBaut6SaVN8hubDUC 6DQzIiA5sBYokHALDfa7gOnf+8hxTpdT1pqiueGDmIp5rA1AS5VB5k00iSFnsfFCE8gX MoKY+znZF0NNfaAqA2D9JReZ/spsiGyR0hBuXAPTegztfQT6fUAjlvfQf4E9ORdtoN8y rzmg== Subject: [Intel-gfx] [PATCH v2 1/3] drm/i915: Move the code to populate ACPI device ID into intel_acpi X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rajat Jain , rajatxjain@gmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191104194145.HbxSY_nFkG43KdJFyktliiTtcWiWkf4netKIpW7OTQo@z> TW92ZSB0aGUgY29kZSB0aGF0IHBvcHVsYXRlcyB0aGUgQUNQSSBkZXZpY2UgSUQgZm9yIGRldmlj ZXMsIGludG8KbW9yZSBhcHByaXByaWF0ZSBpbnRlbF9hY3BpLmMuIFRoaXMgaXMgZG9uZSBpbiBw cmVwYXJhdGlvbiBmb3IgbW9yZQp1c2VycyBvZiB0aGlzIGNvZGUgKGluIG5leHQgcGF0Y2gpLgoK U2lnbmVkLW9mZi1ieTogUmFqYXQgSmFpbiA8cmFqYXRqYUBnb29nbGUuY29tPgpDaGFuZ2UtSWQ6 IElmYjNiZDQ1ODczNDk4NWMyYTc4YmE2ODJlNmYwYTJlNjNlMDYyNmNhCi0tLQp2MjogdjEgZG9l c24ndCBleGlzdC4gRm91bmQgZXhpc3RpbmcgY29kZSBpbiBpOTE1IGRyaXZlciB0byBhc3NpZ24g dGhlIEFDUEkgSUQKICAgIHdoaWNoIGlzIHdoYXQgSSBwbGFuIHRvIHJlLXVzZS4KICAgIAoKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYWNwaS5jICAgICB8IDg3ICsrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYWNwaS5oICAg ICB8ICA2ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX29wcmVnaW9uLmMg fCA4MCArLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCsp LCA3NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2FjcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYWNw aS5jCmluZGV4IDM0NTZkMzNmZWI0Ni4uNzQ4ZDliMzEyNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2FjcGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2FjcGkuYwpAQCAtMTU2LDMgKzE1Niw5MCBAQCB2b2lkIGludGVs X3JlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQpCiB2b2lkIGludGVsX3VucmVnaXN0ZXJfZHNtX2hh bmRsZXIodm9pZCkKIHsKIH0KKworLyoKKyAqIEFDUEkgU3BlY2lmaWNhdGlvbiwgUmV2aXNpb24g NS4wLCBBcHBlbmRpeCBCLjMuMiBfRE9EIChFbnVtZXJhdGUgQWxsIERldmljZXMKKyAqIEF0dGFj aGVkIHRvIHRoZSBEaXNwbGF5IEFkYXB0ZXIpLgorICovCisjZGVmaW5lIEFDUElfRElTUExBWV9J TkRFWF9TSElGVAkJMAorI2RlZmluZSBBQ1BJX0RJU1BMQVlfSU5ERVhfTUFTSwkJCSgweGYgPDwg MCkKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX1BPUlRfQVRUQUNITUVOVF9TSElGVAk0CisjZGVmaW5l IEFDUElfRElTUExBWV9QT1JUX0FUVEFDSE1FTlRfTUFTSwkoMHhmIDw8IDQpCisjZGVmaW5lIEFD UElfRElTUExBWV9UWVBFX1NISUZUCQkJOAorI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9NQVNL CQkJKDB4ZiA8PCA4KQorI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9PVEhFUgkJCSgwIDw8IDgp CisjZGVmaW5lIEFDUElfRElTUExBWV9UWVBFX1ZHQQkJCSgxIDw8IDgpCisjZGVmaW5lIEFDUElf RElTUExBWV9UWVBFX1RWCQkJKDIgPDwgOCkKKyNkZWZpbmUgQUNQSV9ESVNQTEFZX1RZUEVfRVhU RVJOQUxfRElHSVRBTAkoMyA8PCA4KQorI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9JTlRFUk5B TF9ESUdJVEFMCSg0IDw8IDgpCisjZGVmaW5lIEFDUElfVkVORE9SX1NQRUNJRklDX1NISUZUCQkx MgorI2RlZmluZSBBQ1BJX1ZFTkRPUl9TUEVDSUZJQ19NQVNLCQkoMHhmIDw8IDEyKQorI2RlZmlu ZSBBQ1BJX0JJT1NfQ0FOX0RFVEVDVAkJCSgxIDw8IDE2KQorI2RlZmluZSBBQ1BJX0RFUEVORFNf T05fVkdBCQkJKDEgPDwgMTcpCisjZGVmaW5lIEFDUElfUElQRV9JRF9TSElGVAkJCTE4CisjZGVm aW5lIEFDUElfUElQRV9JRF9NQVNLCQkJKDcgPDwgMTgpCisjZGVmaW5lIEFDUElfREVWSUNFX0lE X1NDSEVNRQkJCSgxVUxMIDw8IDMxKQorCitzdGF0aWMgdTMyIGFjcGlfZGlzcGxheV90eXBlKHN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwl1MzIgZGlzcGxheV90eXBlOwor CisJc3dpdGNoIChjb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUpIHsKKwljYXNlIERSTV9N T0RFX0NPTk5FQ1RPUl9WR0E6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKKwkJZGlz cGxheV90eXBlID0gQUNQSV9ESVNQTEFZX1RZUEVfVkdBOworCQlicmVhazsKKwljYXNlIERSTV9N T0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVP OgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwljYXNlIERSTV9NT0RFX0NP Tk5FQ1RPUl85UGluRElOOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1RWOgorCQlkaXNwbGF5 X3R5cGUgPSBBQ1BJX0RJU1BMQVlfVFlQRV9UVjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9D T05ORUNUT1JfRFZJSToKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgorCWNhc2UgRFJN X01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hE TUlBOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOgorCQlkaXNwbGF5X3R5cGUgPSBB Q1BJX0RJU1BMQVlfVFlQRV9FWFRFUk5BTF9ESUdJVEFMOworCQlicmVhazsKKwljYXNlIERSTV9N T0RFX0NPTk5FQ1RPUl9MVkRTOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX2VEUDoKKwljYXNl IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k6CisJCWRpc3BsYXlfdHlwZSA9IEFDUElfRElTUExBWV9U WVBFX0lOVEVSTkFMX0RJR0lUQUw7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9S X1Vua25vd246CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTDoKKwkJZGlzcGxheV90 eXBlID0gQUNQSV9ESVNQTEFZX1RZUEVfT1RIRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1J U1NJTkdfQ0FTRShjb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUpOworCQlkaXNwbGF5X3R5 cGUgPSBBQ1BJX0RJU1BMQVlfVFlQRV9PVEhFUjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGRp c3BsYXlfdHlwZTsKK30KKwordm9pZCBpbnRlbF9wb3B1bGF0ZV9hY3BpX2lkc19mb3JfYWxsX2Nv bm5lY3RvcnMoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYpCit7CisJc3RydWN0IGludGVsX2Nv bm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25u X2l0ZXI7CisJdTggZGlzcGxheV9pbmRleFsxNl0gPSB7fTsKKwl1MzIgZGV2aWNlX2lkLCB0eXBl OworCisJLyogUG9wdWxhdGUgdGhlIEFDUEkgSURzIGZvciBhbGwgY29ubmVjdG9ycyBmb3IgYSBn aXZlbiBkcm1fZGV2aWNlICovCisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZHJtX2Rl diwgJmNvbm5faXRlcik7CisJZm9yX2VhY2hfaW50ZWxfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9y LCAmY29ubl9pdGVyKSB7CisKKwkJZGV2aWNlX2lkID0gYWNwaV9kaXNwbGF5X3R5cGUoY29ubmVj dG9yKTsKKworCQkvKiBVc2UgZGlzcGxheSB0eXBlIHNwZWNpZmljIGRpc3BsYXkgaW5kZXguICov CisJCXR5cGUgPSAoZGV2aWNlX2lkICYgQUNQSV9ESVNQTEFZX1RZUEVfTUFTSykKKwkJCT4+IEFD UElfRElTUExBWV9UWVBFX1NISUZUOworCQlkZXZpY2VfaWQgfD0gZGlzcGxheV9pbmRleFt0eXBl XSsrIDw8IEFDUElfRElTUExBWV9JTkRFWF9TSElGVDsKKworCQljb25uZWN0b3ItPmFjcGlfZGV2 aWNlX2lkID0gZGV2aWNlX2lkOworCX0KKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNv bm5faXRlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2FjcGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYWNwaS5oCmlu ZGV4IDFjNTc2YjNmYjcxMi4uOGY2ZDg1MGRmNmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2FjcGkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2FjcGkuaApAQCAtNiwxMiArNiwxOCBAQAogI2lmbmRlZiBfX0lOVEVMX0FD UElfSF9fCiAjZGVmaW5lIF9fSU5URUxfQUNQSV9IX18KIAorI2luY2x1ZGUgImludGVsX2Rpc3Bs YXlfdHlwZXMuaCIKKwogI2lmZGVmIENPTkZJR19BQ1BJCiB2b2lkIGludGVsX3JlZ2lzdGVyX2Rz bV9oYW5kbGVyKHZvaWQpOwogdm9pZCBpbnRlbF91bnJlZ2lzdGVyX2RzbV9oYW5kbGVyKHZvaWQp Owordm9pZCBpbnRlbF9wb3B1bGF0ZV9hY3BpX2lkc19mb3JfYWxsX2Nvbm5lY3RvcnMoc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9y ZWdpc3Rlcl9kc21faGFuZGxlcih2b2lkKSB7IHJldHVybjsgfQogc3RhdGljIGlubGluZSB2b2lk IGludGVsX3VucmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCkgeyByZXR1cm47IH0KK3N0YXRpYyBp bmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wb3B1bGF0ZV9hY3BpX2lkc19m b3JfYWxsX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYpIHsgfQogI2VuZGlm IC8qIENPTkZJR19BQ1BJICovCiAKICNlbmRpZiAvKiBfX0lOVEVMX0FDUElfSF9fICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX29wcmVnaW9uLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX29wcmVnaW9uLmMKaW5kZXggOTY5YWRl NjIzNjkxLi5mNTk3NmE2YWIzYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfb3ByZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX29wcmVnaW9uLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJkaXNwbGF5L2lu dGVsX3BhbmVsLmgiCiAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2Fj cGkuaCIKICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxf b3ByZWdpb24uaCIKIApAQCAtMjQyLDI5ICsyNDMsNiBAQCBzdHJ1Y3Qgb3ByZWdpb25fYXNsZV9l eHQgewogI2RlZmluZSBTV1NDSV9TQkNCX1BPU1RfVkJFX1BNCQlTV1NDSV9GVU5DVElPTl9DT0RF KFNXU0NJX1NCQ0IsIDE5KQogI2RlZmluZSBTV1NDSV9TQkNCX0VOQUJMRV9ESVNBQkxFX0FVRElP CVNXU0NJX0ZVTkNUSU9OX0NPREUoU1dTQ0lfU0JDQiwgMjEpCiAKLS8qCi0gKiBBQ1BJIFNwZWNp ZmljYXRpb24sIFJldmlzaW9uIDUuMCwgQXBwZW5kaXggQi4zLjIgX0RPRCAoRW51bWVyYXRlIEFs bCBEZXZpY2VzCi0gKiBBdHRhY2hlZCB0byB0aGUgRGlzcGxheSBBZGFwdGVyKS4KLSAqLwotI2Rl ZmluZSBBQ1BJX0RJU1BMQVlfSU5ERVhfU0hJRlQJCTAKLSNkZWZpbmUgQUNQSV9ESVNQTEFZX0lO REVYX01BU0sJCQkoMHhmIDw8IDApCi0jZGVmaW5lIEFDUElfRElTUExBWV9QT1JUX0FUVEFDSE1F TlRfU0hJRlQJNAotI2RlZmluZSBBQ1BJX0RJU1BMQVlfUE9SVF9BVFRBQ0hNRU5UX01BU0sJKDB4 ZiA8PCA0KQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9TSElGVAkJCTgKLSNkZWZpbmUgQUNQ SV9ESVNQTEFZX1RZUEVfTUFTSwkJCSgweGYgPDwgOCkKLSNkZWZpbmUgQUNQSV9ESVNQTEFZX1RZ UEVfT1RIRVIJCQkoMCA8PCA4KQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9WR0EJCQkoMSA8 PCA4KQotI2RlZmluZSBBQ1BJX0RJU1BMQVlfVFlQRV9UVgkJCSgyIDw8IDgpCi0jZGVmaW5lIEFD UElfRElTUExBWV9UWVBFX0VYVEVSTkFMX0RJR0lUQUwJKDMgPDwgOCkKLSNkZWZpbmUgQUNQSV9E SVNQTEFZX1RZUEVfSU5URVJOQUxfRElHSVRBTAkoNCA8PCA4KQotI2RlZmluZSBBQ1BJX1ZFTkRP Ul9TUEVDSUZJQ19TSElGVAkJMTIKLSNkZWZpbmUgQUNQSV9WRU5ET1JfU1BFQ0lGSUNfTUFTSwkJ KDB4ZiA8PCAxMikKLSNkZWZpbmUgQUNQSV9CSU9TX0NBTl9ERVRFQ1QJCQkoMSA8PCAxNikKLSNk ZWZpbmUgQUNQSV9ERVBFTkRTX09OX1ZHQQkJCSgxIDw8IDE3KQotI2RlZmluZSBBQ1BJX1BJUEVf SURfU0hJRlQJCQkxOAotI2RlZmluZSBBQ1BJX1BJUEVfSURfTUFTSwkJCSg3IDw8IDE4KQotI2Rl ZmluZSBBQ1BJX0RFVklDRV9JRF9TQ0hFTUUJCQkoMSA8PCAzMSkKLQogI2RlZmluZSBNQVhfRFNM UAkxNTAwCiAKIHN0YXRpYyBpbnQgc3dzY2koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LApAQCAtNjYyLDU0ICs2NDAsMTIgQEAgc3RhdGljIHZvaWQgc2V0X2RpZChzdHJ1Y3QgaW50 ZWxfb3ByZWdpb24gKm9wcmVnaW9uLCBpbnQgaSwgdTMyIHZhbCkKIAl9CiB9CiAKLXN0YXRpYyB1 MzIgYWNwaV9kaXNwbGF5X3R5cGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQot ewotCXUzMiBkaXNwbGF5X3R5cGU7Ci0KLQlzd2l0Y2ggKGNvbm5lY3Rvci0+YmFzZS5jb25uZWN0 b3JfdHlwZSkgewotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKLQljYXNlIERSTV9NT0RF X0NPTk5FQ1RPUl9EVklBOgotCQlkaXNwbGF5X3R5cGUgPSBBQ1BJX0RJU1BMQVlfVFlQRV9WR0E7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKLQljYXNlIERS TV9NT0RFX0NPTk5FQ1RPUl9TVklERU86Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9u ZW50OgotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46Ci0JY2FzZSBEUk1fTU9ERV9D T05ORUNUT1JfVFY6Ci0JCWRpc3BsYXlfdHlwZSA9IEFDUElfRElTUExBWV9UWVBFX1RWOwotCQli cmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgotCWNhc2UgRFJNX01PREVfQ09O TkVDVE9SX0RWSUQ6Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6Ci0JY2Fz ZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUI6Ci0JCWRpc3BsYXlfdHlwZSA9IEFDUElfRElTUExBWV9UWVBFX0VYVEVSTkFMX0RJR0lUQUw7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6Ci0JY2FzZSBEUk1fTU9E RV9DT05ORUNUT1JfZURQOgotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RTSToKLQkJZGlzcGxh eV90eXBlID0gQUNQSV9ESVNQTEFZX1RZUEVfSU5URVJOQUxfRElHSVRBTDsKLQkJYnJlYWs7Ci0J Y2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bjoKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RP Ul9WSVJUVUFMOgotCQlkaXNwbGF5X3R5cGUgPSBBQ1BJX0RJU1BMQVlfVFlQRV9PVEhFUjsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGNvbm5lY3Rvci0+YmFzZS5jb25uZWN0 b3JfdHlwZSk7Ci0JCWRpc3BsYXlfdHlwZSA9IEFDUElfRElTUExBWV9UWVBFX09USEVSOwotCQli cmVhazsKLQl9Ci0KLQlyZXR1cm4gZGlzcGxheV90eXBlOwotfQotCiBzdGF0aWMgdm9pZCBpbnRl bF9kaWRsX291dHB1dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0 cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmZGV2X3ByaXYtPm9wcmVnaW9uOwogCXN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXIgY29ubl9pdGVyOwogCWludCBpID0gMCwgbWF4X291dHB1dHM7Ci0JaW50IGRpc3Bs YXlfaW5kZXhbMTZdID0ge307CiAKIAkvKgogCSAqIEluIHRoZW9yeSwgZGlkMiwgdGhlIGV4dGVu ZGVkIGRpZGwsIGdldHMgYWRkZWQgYXQgb3ByZWdpb24gdmVyc2lvbgpAQCAtNzIxLDIwICs2NTcs MTIgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGlkbF9vdXRwdXRzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIAltYXhfb3V0cHV0cyA9IEFSUkFZX1NJWkUob3ByZWdpb24tPmFjcGkt PmRpZGwpICsKIAkJQVJSQVlfU0laRShvcHJlZ2lvbi0+YWNwaS0+ZGlkMik7CiAKKwlpbnRlbF9w b3B1bGF0ZV9hY3BpX2lkc19mb3JfYWxsX2Nvbm5lY3RvcnMoJmRldl9wcml2LT5kcm0pOworCiAJ ZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oJmRldl9wcml2LT5kcm0sICZjb25uX2l0ZXIp OwogCWZvcl9lYWNoX2ludGVsX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikg ewotCQl1MzIgZGV2aWNlX2lkLCB0eXBlOwotCi0JCWRldmljZV9pZCA9IGFjcGlfZGlzcGxheV90 eXBlKGNvbm5lY3Rvcik7Ci0KLQkJLyogVXNlIGRpc3BsYXkgdHlwZSBzcGVjaWZpYyBkaXNwbGF5 IGluZGV4LiAqLwotCQl0eXBlID0gKGRldmljZV9pZCAmIEFDUElfRElTUExBWV9UWVBFX01BU0sp Ci0JCQk+PiBBQ1BJX0RJU1BMQVlfVFlQRV9TSElGVDsKLQkJZGV2aWNlX2lkIHw9IGRpc3BsYXlf aW5kZXhbdHlwZV0rKyA8PCBBQ1BJX0RJU1BMQVlfSU5ERVhfU0hJRlQ7Ci0KLQkJY29ubmVjdG9y LT5hY3BpX2RldmljZV9pZCA9IGRldmljZV9pZDsKIAkJaWYgKGkgPCBtYXhfb3V0cHV0cykKLQkJ CXNldF9kaWQob3ByZWdpb24sIGksIGRldmljZV9pZCk7CisJCQlzZXRfZGlkKG9wcmVnaW9uLCBp LCBjb25uZWN0b3ItPmFjcGlfZGV2aWNlX2lkKTsKIAkJaSsrOwogCX0KIAlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Ci0tIAoyLjI0LjAucmMxLjM2My5nYjFiY2NkM2Uz ZC1nb29nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=