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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91D06C433FE for ; Mon, 11 Apr 2022 19:01:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349305AbiDKTDi (ORCPT ); Mon, 11 Apr 2022 15:03:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58736 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349268AbiDKTDh (ORCPT ); Mon, 11 Apr 2022 15:03:37 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 270913205F; Mon, 11 Apr 2022 12:01:22 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 8D3596144B; Mon, 11 Apr 2022 19:01:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03D7BC385A9; Mon, 11 Apr 2022 19:01:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1649703681; bh=VmyOGDFwXHb+w1t6LNTfW65lcqPUottzbY1nKtknM4A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hOa/XhhgPlnq7F7Fbojac1Lxir9hWQMnJG29uaZ/8wo0zlEYTtPwtwZN8PameTRxf uxFgtNIGIV4nn9oD5SlICTvOPKJco3Fy+5rBug/h1gfKFK2g1W7I1keOltRbVZevAB wctNn48KqdCSD75df2zJiHXaSirBiwoZODFx9qeVLA7K3tdvuWVb4TLJy/MUG4Rngj U6rOVp+ZzoBYB3unxVj1nJS+pf0DHW6NMJ2gck1lDkVDCsNezm18KVR1pCOee7H23P AFNjen7UV72mCT5ApTGH11bBiEOxJyfHNZQlYfhHsW920SQ1e6xe6h2RbqyL4XtYwC T9HaQLcGv87rQ== Received: by pali.im (Postfix) id 667A021B4; Mon, 11 Apr 2022 21:01:18 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Bjorn Helgaas , Rob Herring , Andrew Lunn , Thomas Petazzoni , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Russell King Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/4] PCI: Add function for parsing 'slot-power-limit-milliwatt' DT property Date: Mon, 11 Apr 2022 20:58:58 +0200 Message-Id: <20220411185859.32722-4-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220411185859.32722-1-pali@kernel.org> References: <20220411185859.32722-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Add function of_pci_get_slot_power_limit(), which parses the 'slot-power-limit-milliwatt' DT property, returning the value in milliwatts and in format ready for the PCIe Slot Capabilities Register. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún Reviewed-by: Rob Herring --- Changes in v4: * Set 239 W when DT slot-power-limit-milliwatt is between 239 W and 250 W * Fix returning power limit value Changes in v3: * Set 600 W when DT slot-power-limit-milliwatt > 600 W Changes in v2: * Added support for PCIe 6.0 slot power limit encodings * Round down slot power limit value --- drivers/pci/of.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/pci/pci.h | 15 ++++++++++ 2 files changed, 85 insertions(+) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index cb2e8351c2cc..6c1b81304665 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -633,3 +633,73 @@ int of_pci_get_max_link_speed(struct device_node *node) return max_link_speed; } EXPORT_SYMBOL_GPL(of_pci_get_max_link_speed); + +/** + * of_pci_get_slot_power_limit - Parses the "slot-power-limit-milliwatt" + * property. + * + * @node: device tree node with the slot power limit information + * @slot_power_limit_value: pointer where the value should be stored in PCIe + * Slot Capabilities Register format + * @slot_power_limit_scale: pointer where the scale should be stored in PCIe + * Slot Capabilities Register format + * + * Returns the slot power limit in milliwatts and if @slot_power_limit_value + * and @slot_power_limit_scale pointers are non-NULL, fills in the value and + * scale in format used by PCIe Slot Capabilities Register. + * + * If the property is not found or is invalid, returns 0. + */ +u32 of_pci_get_slot_power_limit(struct device_node *node, + u8 *slot_power_limit_value, + u8 *slot_power_limit_scale) +{ + u32 slot_power_limit_mw; + u8 value, scale; + + if (of_property_read_u32(node, "slot-power-limit-milliwatt", + &slot_power_limit_mw)) + slot_power_limit_mw = 0; + + /* Calculate Slot Power Limit Value and Slot Power Limit Scale */ + if (slot_power_limit_mw == 0) { + value = 0x00; + scale = 0; + } else if (slot_power_limit_mw <= 255) { + value = slot_power_limit_mw; + scale = 3; + } else if (slot_power_limit_mw <= 255*10) { + value = slot_power_limit_mw / 10; + scale = 2; + slot_power_limit_mw = slot_power_limit_mw / 10 * 10; + } else if (slot_power_limit_mw <= 255*100) { + value = slot_power_limit_mw / 100; + scale = 1; + slot_power_limit_mw = slot_power_limit_mw / 100 * 100; + } else if (slot_power_limit_mw <= 239*1000) { + value = slot_power_limit_mw / 1000; + scale = 0; + slot_power_limit_mw = slot_power_limit_mw / 1000 * 1000; + } else if (slot_power_limit_mw < 250*1000) { + value = 0xEF; + scale = 0; + slot_power_limit_mw = 239*1000; + } else if (slot_power_limit_mw <= 600*1000) { + value = 0xF0 + (slot_power_limit_mw / 1000 - 250) / 25; + scale = 0; + slot_power_limit_mw = slot_power_limit_mw / (1000*25) * (1000*25); + } else { + value = 0xFE; + scale = 0; + slot_power_limit_mw = 600*1000; + } + + if (slot_power_limit_value) + *slot_power_limit_value = value; + + if (slot_power_limit_scale) + *slot_power_limit_scale = scale; + + return slot_power_limit_mw; +} +EXPORT_SYMBOL_GPL(of_pci_get_slot_power_limit); diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 3d60cabde1a1..e10cdec6c56e 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -627,6 +627,9 @@ struct device_node; int of_pci_parse_bus_range(struct device_node *node, struct resource *res); int of_get_pci_domain_nr(struct device_node *node); int of_pci_get_max_link_speed(struct device_node *node); +u32 of_pci_get_slot_power_limit(struct device_node *node, + u8 *slot_power_limit_value, + u8 *slot_power_limit_scale); void pci_set_of_node(struct pci_dev *dev); void pci_release_of_node(struct pci_dev *dev); void pci_set_bus_of_node(struct pci_bus *bus); @@ -653,6 +656,18 @@ of_pci_get_max_link_speed(struct device_node *node) return -EINVAL; } +static inline u32 +of_pci_get_slot_power_limit(struct device_node *node, + u8 *slot_power_limit_value, + u8 *slot_power_limit_scale) +{ + if (slot_power_limit_value) + *slot_power_limit_value = 0; + if (slot_power_limit_scale) + *slot_power_limit_scale = 0; + return 0; +} + static inline void pci_set_of_node(struct pci_dev *dev) { } static inline void pci_release_of_node(struct pci_dev *dev) { } static inline void pci_set_bus_of_node(struct pci_bus *bus) { } -- 2.20.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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ADC15C433F5 for ; Mon, 11 Apr 2022 19:02:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NhpFHbcObGtQY5Duzhm8Gpps1HRDY3Ug8C77sW1xKWI=; b=gWN1Nz7y5BeneH gPaTjnSsqBXNh0SoGPFzDjkI6kSCDOm57YcN9mfeaC0TXd2Wjug55obJK3gxhN9/kO1nLSVo67TVc Cy47duzy6p8elZC6vl7V5fp0feN5V6blE/cwqH5G/r/KUGClMM7YUvmOMqlta1LRwX/bmiVoSQAmY i5ulZO659PraI+tUITco7EvD7xYjRwNacMicT74XjmAF3iHf+7i5AqQ+xMYfg/3fNOwwn0LQcNfCG wCLrX/sjWx03aWs+u/DKzoKOp7W4ffxWVMY+oraQZAnRb22CBea4kKZT5W/DQJCZ8jB5JwOTVrycC 1oroTM16a9pDpfKJSg3w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ndzIE-00AGXk-4g; Mon, 11 Apr 2022 19:01:42 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ndzHt-00AGPo-VK for linux-arm-kernel@lists.infradead.org; Mon, 11 Apr 2022 19:01:23 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 8BB0D61426; Mon, 11 Apr 2022 19:01:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03D7BC385A9; Mon, 11 Apr 2022 19:01:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1649703681; bh=VmyOGDFwXHb+w1t6LNTfW65lcqPUottzbY1nKtknM4A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hOa/XhhgPlnq7F7Fbojac1Lxir9hWQMnJG29uaZ/8wo0zlEYTtPwtwZN8PameTRxf uxFgtNIGIV4nn9oD5SlICTvOPKJco3Fy+5rBug/h1gfKFK2g1W7I1keOltRbVZevAB wctNn48KqdCSD75df2zJiHXaSirBiwoZODFx9qeVLA7K3tdvuWVb4TLJy/MUG4Rngj U6rOVp+ZzoBYB3unxVj1nJS+pf0DHW6NMJ2gck1lDkVDCsNezm18KVR1pCOee7H23P AFNjen7UV72mCT5ApTGH11bBiEOxJyfHNZQlYfhHsW920SQ1e6xe6h2RbqyL4XtYwC T9HaQLcGv87rQ== Received: by pali.im (Postfix) id 667A021B4; Mon, 11 Apr 2022 21:01:18 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Bjorn Helgaas , Rob Herring , Andrew Lunn , Thomas Petazzoni , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Russell King Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/4] PCI: Add function for parsing 'slot-power-limit-milliwatt' DT property Date: Mon, 11 Apr 2022 20:58:58 +0200 Message-Id: <20220411185859.32722-4-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220411185859.32722-1-pali@kernel.org> References: <20220411185859.32722-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220411_120122_128182_FD75E2E5 X-CRM114-Status: GOOD ( 18.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIGZ1bmN0aW9uIG9mX3BjaV9nZXRfc2xvdF9wb3dlcl9saW1pdCgpLCB3aGljaCBwYXJzZXMg dGhlCidzbG90LXBvd2VyLWxpbWl0LW1pbGxpd2F0dCcgRFQgcHJvcGVydHksIHJldHVybmluZyB0 aGUgdmFsdWUgaW4KbWlsbGl3YXR0cyBhbmQgaW4gZm9ybWF0IHJlYWR5IGZvciB0aGUgUENJZSBT bG90IENhcGFiaWxpdGllcyBSZWdpc3Rlci4KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxw YWxpQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVs Lm9yZz4KUmV2aWV3ZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+Ci0tLQpDaGFu Z2VzIGluIHY0OgoqIFNldCAyMzkgVyB3aGVuIERUIHNsb3QtcG93ZXItbGltaXQtbWlsbGl3YXR0 IGlzIGJldHdlZW4gMjM5IFcgYW5kIDI1MCBXCiogRml4IHJldHVybmluZyBwb3dlciBsaW1pdCB2 YWx1ZQpDaGFuZ2VzIGluIHYzOgoqIFNldCA2MDAgVyB3aGVuIERUIHNsb3QtcG93ZXItbGltaXQt bWlsbGl3YXR0ID4gNjAwIFcKQ2hhbmdlcyBpbiB2MjoKKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0ll IDYuMCBzbG90IHBvd2VyIGxpbWl0IGVuY29kaW5ncwoqIFJvdW5kIGRvd24gc2xvdCBwb3dlciBs aW1pdCB2YWx1ZQotLS0KIGRyaXZlcnMvcGNpL29mLmMgIHwgNzAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvcGNpL3BjaS5oIHwgMTUgKysr KysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9wY2kvb2YuYyBiL2RyaXZlcnMvcGNpL29mLmMKaW5kZXggY2IyZTgzNTFjMmNjLi42 YzFiODEzMDQ2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL29mLmMKKysrIGIvZHJpdmVycy9w Y2kvb2YuYwpAQCAtNjMzLDMgKzYzMyw3MyBAQCBpbnQgb2ZfcGNpX2dldF9tYXhfbGlua19zcGVl ZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJuIG1heF9saW5rX3NwZWVkOwogfQog RVhQT1JUX1NZTUJPTF9HUEwob2ZfcGNpX2dldF9tYXhfbGlua19zcGVlZCk7CisKKy8qKgorICog b2ZfcGNpX2dldF9zbG90X3Bvd2VyX2xpbWl0IC0gUGFyc2VzIHRoZSAic2xvdC1wb3dlci1saW1p dC1taWxsaXdhdHQiCisgKgkJCQkgcHJvcGVydHkuCisgKgorICogQG5vZGU6IGRldmljZSB0cmVl IG5vZGUgd2l0aCB0aGUgc2xvdCBwb3dlciBsaW1pdCBpbmZvcm1hdGlvbgorICogQHNsb3RfcG93 ZXJfbGltaXRfdmFsdWU6IHBvaW50ZXIgd2hlcmUgdGhlIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQg aW4gUENJZQorICoJCQkgICAgU2xvdCBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgZm9ybWF0CisgKiBA c2xvdF9wb3dlcl9saW1pdF9zY2FsZTogcG9pbnRlciB3aGVyZSB0aGUgc2NhbGUgc2hvdWxkIGJl IHN0b3JlZCBpbiBQQ0llCisgKgkJCSAgICBTbG90IENhcGFiaWxpdGllcyBSZWdpc3RlciBmb3Jt YXQKKyAqCisgKiBSZXR1cm5zIHRoZSBzbG90IHBvd2VyIGxpbWl0IGluIG1pbGxpd2F0dHMgYW5k IGlmIEBzbG90X3Bvd2VyX2xpbWl0X3ZhbHVlCisgKiBhbmQgQHNsb3RfcG93ZXJfbGltaXRfc2Nh bGUgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLCBmaWxscyBpbiB0aGUgdmFsdWUgYW5kCisgKiBzY2Fs ZSBpbiBmb3JtYXQgdXNlZCBieSBQQ0llIFNsb3QgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyLgorICoK KyAqIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQgb3IgaXMgaW52YWxpZCwgcmV0dXJucyAw LgorICovCit1MzIgb2ZfcGNpX2dldF9zbG90X3Bvd2VyX2xpbWl0KHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSwKKwkJCQl1OCAqc2xvdF9wb3dlcl9saW1pdF92YWx1ZSwKKwkJCQl1OCAqc2xvdF9w b3dlcl9saW1pdF9zY2FsZSkKK3sKKwl1MzIgc2xvdF9wb3dlcl9saW1pdF9tdzsKKwl1OCB2YWx1 ZSwgc2NhbGU7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNsb3QtcG93ZXIt bGltaXQtbWlsbGl3YXR0IiwKKwkJCQkgJnNsb3RfcG93ZXJfbGltaXRfbXcpKQorCQlzbG90X3Bv d2VyX2xpbWl0X213ID0gMDsKKworCS8qIENhbGN1bGF0ZSBTbG90IFBvd2VyIExpbWl0IFZhbHVl IGFuZCBTbG90IFBvd2VyIExpbWl0IFNjYWxlICovCisJaWYgKHNsb3RfcG93ZXJfbGltaXRfbXcg PT0gMCkgeworCQl2YWx1ZSA9IDB4MDA7CisJCXNjYWxlID0gMDsKKwl9IGVsc2UgaWYgKHNsb3Rf cG93ZXJfbGltaXRfbXcgPD0gMjU1KSB7CisJCXZhbHVlID0gc2xvdF9wb3dlcl9saW1pdF9tdzsK KwkJc2NhbGUgPSAzOworCX0gZWxzZSBpZiAoc2xvdF9wb3dlcl9saW1pdF9tdyA8PSAyNTUqMTAp IHsKKwkJdmFsdWUgPSBzbG90X3Bvd2VyX2xpbWl0X213IC8gMTA7CisJCXNjYWxlID0gMjsKKwkJ c2xvdF9wb3dlcl9saW1pdF9tdyA9IHNsb3RfcG93ZXJfbGltaXRfbXcgLyAxMCAqIDEwOworCX0g ZWxzZSBpZiAoc2xvdF9wb3dlcl9saW1pdF9tdyA8PSAyNTUqMTAwKSB7CisJCXZhbHVlID0gc2xv dF9wb3dlcl9saW1pdF9tdyAvIDEwMDsKKwkJc2NhbGUgPSAxOworCQlzbG90X3Bvd2VyX2xpbWl0 X213ID0gc2xvdF9wb3dlcl9saW1pdF9tdyAvIDEwMCAqIDEwMDsKKwl9IGVsc2UgaWYgKHNsb3Rf cG93ZXJfbGltaXRfbXcgPD0gMjM5KjEwMDApIHsKKwkJdmFsdWUgPSBzbG90X3Bvd2VyX2xpbWl0 X213IC8gMTAwMDsKKwkJc2NhbGUgPSAwOworCQlzbG90X3Bvd2VyX2xpbWl0X213ID0gc2xvdF9w b3dlcl9saW1pdF9tdyAvIDEwMDAgKiAxMDAwOworCX0gZWxzZSBpZiAoc2xvdF9wb3dlcl9saW1p dF9tdyA8IDI1MCoxMDAwKSB7CisJCXZhbHVlID0gMHhFRjsKKwkJc2NhbGUgPSAwOworCQlzbG90 X3Bvd2VyX2xpbWl0X213ID0gMjM5KjEwMDA7CisJfSBlbHNlIGlmIChzbG90X3Bvd2VyX2xpbWl0 X213IDw9IDYwMCoxMDAwKSB7CisJCXZhbHVlID0gMHhGMCArIChzbG90X3Bvd2VyX2xpbWl0X213 IC8gMTAwMCAtIDI1MCkgLyAyNTsKKwkJc2NhbGUgPSAwOworCQlzbG90X3Bvd2VyX2xpbWl0X213 ID0gc2xvdF9wb3dlcl9saW1pdF9tdyAvICgxMDAwKjI1KSAqICgxMDAwKjI1KTsKKwl9IGVsc2Ug eworCQl2YWx1ZSA9IDB4RkU7CisJCXNjYWxlID0gMDsKKwkJc2xvdF9wb3dlcl9saW1pdF9tdyA9 IDYwMCoxMDAwOworCX0KKworCWlmIChzbG90X3Bvd2VyX2xpbWl0X3ZhbHVlKQorCQkqc2xvdF9w b3dlcl9saW1pdF92YWx1ZSA9IHZhbHVlOworCisJaWYgKHNsb3RfcG93ZXJfbGltaXRfc2NhbGUp CisJCSpzbG90X3Bvd2VyX2xpbWl0X3NjYWxlID0gc2NhbGU7CisKKwlyZXR1cm4gc2xvdF9wb3dl cl9saW1pdF9tdzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3BjaV9nZXRfc2xvdF9wb3dlcl9s aW1pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5o CmluZGV4IDNkNjBjYWJkZTFhMS4uZTEwY2RlYzZjNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bj aS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNjI3LDYgKzYyNyw5IEBAIHN0cnVj dCBkZXZpY2Vfbm9kZTsKIGludCBvZl9wY2lfcGFyc2VfYnVzX3JhbmdlKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwogaW50IG9mX2dldF9wY2lfZG9tYWlu X25yKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBpbnQgb2ZfcGNpX2dldF9tYXhfbGlua19z cGVlZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwordTMyIG9mX3BjaV9nZXRfc2xvdF9wb3dl cl9saW1pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJdTggKnNsb3RfcG93ZXJfbGlt aXRfdmFsdWUsCisJCQkJdTggKnNsb3RfcG93ZXJfbGltaXRfc2NhbGUpOwogdm9pZCBwY2lfc2V0 X29mX25vZGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9yZWxlYXNlX29mX25vZGUo c3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9zZXRfYnVzX29mX25vZGUoc3RydWN0IHBj aV9idXMgKmJ1cyk7CkBAIC02NTMsNiArNjU2LDE4IEBAIG9mX3BjaV9nZXRfbWF4X2xpbmtfc3Bl ZWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0 aWMgaW5saW5lIHUzMgorb2ZfcGNpX2dldF9zbG90X3Bvd2VyX2xpbWl0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSwKKwkJCSAgICB1OCAqc2xvdF9wb3dlcl9saW1pdF92YWx1ZSwKKwkJCSAgICB1 OCAqc2xvdF9wb3dlcl9saW1pdF9zY2FsZSkKK3sKKwlpZiAoc2xvdF9wb3dlcl9saW1pdF92YWx1 ZSkKKwkJKnNsb3RfcG93ZXJfbGltaXRfdmFsdWUgPSAwOworCWlmIChzbG90X3Bvd2VyX2xpbWl0 X3NjYWxlKQorCQkqc2xvdF9wb3dlcl9saW1pdF9zY2FsZSA9IDA7CisJcmV0dXJuIDA7Cit9CisK IHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfc2V0X29mX25vZGUoc3RydWN0IHBjaV9kZXYgKmRldikg eyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbGVhc2Vfb2Zfbm9kZShzdHJ1Y3QgcGNpX2Rl diAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfc2V0X2J1c19vZl9ub2RlKHN0cnVj dCBwY2lfYnVzICpidXMpIHsgfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=