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 EB6FCC433EF for ; Sun, 20 Feb 2022 19:34:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244645AbiBTTem (ORCPT ); Sun, 20 Feb 2022 14:34:42 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:43456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244643AbiBTTem (ORCPT ); Sun, 20 Feb 2022 14:34:42 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BB454506A for ; Sun, 20 Feb 2022 11:34:20 -0800 (PST) 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 32D8460EEC for ; Sun, 20 Feb 2022 19:34:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B44C8C340F4; Sun, 20 Feb 2022 19:34:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645385659; bh=Kg7tvKfErrUrv+LwL7iITXtlKgsPFVj4d1HwBEXX4fA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O3rpjMmhOpoHbxu7b4TkB3HRBbQscbUpfEmtG1P8zKFbd+PJugbOPpnTe3TvmVeeQ 3XIV5+woHjZVjiWO3hSq9NYejjrh9xI0HVAUBmVqutMLtOiJVD6mqjALedjQtQWeod uOeJbJ+j9yod2VxvF79wagVpsclOP+M1T5vaFPP8wZSngMilJVmI7l/YJF5ZHCvcpO HqaYjWuLaJOLkzMW36+EegEQppOiyD/ayQM69uWH1j+zPhOkyHiZFJxv8wtGqXnQ+B zEtTtopj1LnPL+yX9gae1YTlvWKAegm9agfEEfvTkzv+8o4zkwyj4XChOuNHue0mPy tC2sxzb3w8VUw== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Lorenzo Pieralisi , Bjorn Helgaas Cc: =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Marc Zyngier , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Gregory CLEMENT , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH 12/18] PCI: aardvark: Send Set_Slot_Power_Limit message Date: Sun, 20 Feb 2022 20:33:40 +0100 Message-Id: <20220220193346.23789-13-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220220193346.23789-1-kabel@kernel.org> References: <20220220193346.23789-1-kabel@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 From: Pali Rohár Emulate Slot PowerLimit Scale and Value bits in the Slot Capabilities register of the emulated bridge and if slot power limit value is defined, send that Set_Slot_Power_Limit message via Message Generation Control Register in Link Up handler on link up event. Slot power limit value is read from device-tree property 'slot-power-limit-milliwatt'. If this property is not specified, we treat it as "Slot Capabilities register has not yet been initialized". According to PCIe Base specification 3.0, when transitioning from a non-DL_Up Status to a DL_Up Status, the Port must initiate the transmission of a Set_Slot_Power_Limit Message to the other component on the Link to convey the value programmed in the Slot Power Limit Scale and Value fields of the Slot Capabilities register. This transmission is optional if the Slot Capabilities register has not yet been initialized. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 52 ++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 62bb0308b9f7..41127a26c5bc 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -212,6 +212,11 @@ enum { }; #define VENDOR_ID_REG (LMI_BASE_ADDR + 0x44) +#define PME_MSG_GEN_CTRL (LMI_BASE_ADDR + 0x220) +#define SEND_SET_SLOT_POWER_LIMIT BIT(13) +#define SEND_PME_TURN_OFF BIT(14) +#define SLOT_POWER_LIMIT_DATA_SHIFT 16 +#define SLOT_POWER_LIMIT_DATA_MASK GENMASK(25, 16) /* PCIe core controller registers */ #define CTRL_CORE_BASE_ADDR 0x18000 @@ -285,6 +290,8 @@ struct advk_pcie { raw_spinlock_t msi_irq_lock; DECLARE_BITMAP(msi_used, MSI_IRQ_NUM); struct mutex msi_used_lock; + u8 slot_power_limit_value; + u8 slot_power_limit_scale; int link_gen; bool link_was_up; struct timer_list link_irq_timer; @@ -317,8 +324,9 @@ static inline bool advk_pcie_link_up(struct advk_pcie *pcie) { /* check if LTSSM is in normal operation - some L* state */ u8 ltssm_state = advk_pcie_ltssm_state(pcie); + u16 slotsta, slotctl; + u32 slotpwr, val; bool link_is_up; - u16 slotsta; link_is_up = ltssm_state >= LTSSM_L0 && ltssm_state < LTSSM_DISABLED; @@ -332,6 +340,28 @@ static inline bool advk_pcie_link_up(struct advk_pcie *pcie) pcie->bridge.pcie_conf.slotsta = cpu_to_le16(slotsta); mod_timer(&pcie->link_irq_timer, jiffies + 1); + + /* + * According to PCIe Base specification 3.0, when transitioning + * from a non-DL_Up Status to a DL_Up Status, the Port must + * initiate the transmission of a Set_Slot_Power_Limit Message + * to the other component on the Link to convey the value + * programmed in the Slot Power Limit Scale and Value fields of + * the Slot Capabilities register. This transmission is optional + * if the Slot Capabilities register has not yet been + * initialized. + */ + slotctl = le16_to_cpu(pcie->bridge.pcie_conf.slotctl); + slotpwr = (le32_to_cpu(pcie->bridge.pcie_conf.slotcap) & + (PCI_EXP_SLTCAP_SPLV | PCI_EXP_SLTCAP_SPLS)) >> + PCI_EXP_SLTCAP_SPLV_SHIFT; + if (!(slotctl & PCI_EXP_SLTCTL_ASPL_DISABLE) && slotpwr) { + val = advk_readl(pcie, PME_MSG_GEN_CTRL); + val &= ~SLOT_POWER_LIMIT_DATA_MASK; + val |= slotpwr << SLOT_POWER_LIMIT_DATA_SHIFT; + val |= SEND_SET_SLOT_POWER_LIMIT; + advk_writel(pcie, val, PME_MSG_GEN_CTRL); + } } return link_is_up; @@ -944,8 +974,9 @@ advk_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, case PCI_EXP_SLTCTL: { u16 slotctl = le16_to_cpu(bridge->pcie_conf.slotctl); - /* Only emulation of HPIE and DLLSCE bits is provided */ - slotctl &= PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_DLLSCE; + /* Only emulation of HPIE, DLLSCE and ASPLD bits is provided */ + slotctl &= PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_DLLSCE | + PCI_EXP_SLTCTL_ASPL_DISABLE; bridge->pcie_conf.slotctl = cpu_to_le16(slotctl); break; } @@ -1107,9 +1138,13 @@ static int advk_sw_pci_bridge_init(struct advk_pcie *pcie) * Set physical slot number to 1 since there is only one port and zero * value is reserved for ports within the same silicon as Root Port * which is not our case. + * + * Set slot power limit. */ slotcap = PCI_EXP_SLTCAP_NCCS | PCI_EXP_SLTCAP_HPC | - (1 << PCI_EXP_SLTCAP_PSN_SHIFT); + (1 << PCI_EXP_SLTCAP_PSN_SHIFT) | + (pcie->slot_power_limit_value << PCI_EXP_SLTCAP_SPLV_SHIFT) | + (pcie->slot_power_limit_scale << PCI_EXP_SLTCAP_SPLS_SHIFT); bridge->pcie_conf.slotcap = cpu_to_le32(slotcap); bridge->pcie_conf.slotsta = cpu_to_le16(PCI_EXP_SLTSTA_PDS); @@ -1842,6 +1877,7 @@ static int advk_pcie_probe(struct platform_device *pdev) struct advk_pcie *pcie; struct pci_host_bridge *bridge; struct resource_entry *entry; + u32 slot_power_limit; int ret; bridge = devm_pci_alloc_host_bridge(dev, sizeof(struct advk_pcie)); @@ -1954,6 +1990,14 @@ static int advk_pcie_probe(struct platform_device *pdev) else pcie->link_gen = ret; + slot_power_limit = of_pci_get_slot_power_limit(dev->of_node, + &pcie->slot_power_limit_value, + &pcie->slot_power_limit_scale); + if (slot_power_limit) + dev_info(dev, "Slot Power Limit: %u.%uW\n", + slot_power_limit / 1000, + (slot_power_limit / 100) % 10); + ret = advk_pcie_setup_phy(pcie); if (ret) return ret; -- 2.34.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 F19B1C433EF for ; Sun, 20 Feb 2022 19:39:58 +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=beIG04GZ0L1aDU7JwLuEMbxJEuNL7QrtX609tUVhaGQ=; b=pd4cFL0ArLdlxh +vj8QHFPLwDwzaAn2cCWQcQlQTtMkExa0OqE+oDlgXkmRmW3PEPy3xbqjqWavH1kAC2FLr+ejdfgj cwG6+TZxcdJRjoqRmrySvLCRwI7idzcpcQRo15XSR4HS6t9/YElgZ7DZzsaThEjXKLd+W6fMbAKlY REzSPkmU8xAB9ihHLVf2s6COlyvjJJQ823bMAjA6HjX+pn1KPyElXwpBlQ97Z7eG3BbsyZ6Ir+SQ9 wqr3KeEF6CxMLJongQhE1o6uETTwt+tnDWoNLBREWy3AaWNtxeRmy7GJvehjllzSUXDCEkUKcJqZ0 KvyjmHJELrrXSeQwMQjw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nLs2C-002DF9-E8; Sun, 20 Feb 2022 19:38:17 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nLryO-002BID-K4 for linux-arm-kernel@lists.infradead.org; Sun, 20 Feb 2022 19:34:22 +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 2F62060EEA; Sun, 20 Feb 2022 19:34:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B44C8C340F4; Sun, 20 Feb 2022 19:34:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645385659; bh=Kg7tvKfErrUrv+LwL7iITXtlKgsPFVj4d1HwBEXX4fA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O3rpjMmhOpoHbxu7b4TkB3HRBbQscbUpfEmtG1P8zKFbd+PJugbOPpnTe3TvmVeeQ 3XIV5+woHjZVjiWO3hSq9NYejjrh9xI0HVAUBmVqutMLtOiJVD6mqjALedjQtQWeod uOeJbJ+j9yod2VxvF79wagVpsclOP+M1T5vaFPP8wZSngMilJVmI7l/YJF5ZHCvcpO HqaYjWuLaJOLkzMW36+EegEQppOiyD/ayQM69uWH1j+zPhOkyHiZFJxv8wtGqXnQ+B zEtTtopj1LnPL+yX9gae1YTlvWKAegm9agfEEfvTkzv+8o4zkwyj4XChOuNHue0mPy tC2sxzb3w8VUw== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Lorenzo Pieralisi , Bjorn Helgaas Cc: =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Marc Zyngier , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Gregory CLEMENT , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH 12/18] PCI: aardvark: Send Set_Slot_Power_Limit message Date: Sun, 20 Feb 2022 20:33:40 +0100 Message-Id: <20220220193346.23789-13-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220220193346.23789-1-kabel@kernel.org> References: <20220220193346.23789-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220220_113420_782226_53E44E6A X-CRM114-Status: GOOD ( 19.49 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KCkVtdWxhdGUgU2xvdCBQb3dlckxp bWl0IFNjYWxlIGFuZCBWYWx1ZSBiaXRzIGluIHRoZSBTbG90IENhcGFiaWxpdGllcwpyZWdpc3Rl ciBvZiB0aGUgZW11bGF0ZWQgYnJpZGdlIGFuZCBpZiBzbG90IHBvd2VyIGxpbWl0IHZhbHVlIGlz CmRlZmluZWQsIHNlbmQgdGhhdCBTZXRfU2xvdF9Qb3dlcl9MaW1pdCBtZXNzYWdlIHZpYSBNZXNz YWdlIEdlbmVyYXRpb24KQ29udHJvbCBSZWdpc3RlciBpbiBMaW5rIFVwIGhhbmRsZXIgb24gbGlu ayB1cCBldmVudC4KClNsb3QgcG93ZXIgbGltaXQgdmFsdWUgaXMgcmVhZCBmcm9tIGRldmljZS10 cmVlIHByb3BlcnR5CidzbG90LXBvd2VyLWxpbWl0LW1pbGxpd2F0dCcuIElmIHRoaXMgcHJvcGVy dHkgaXMgbm90IHNwZWNpZmllZCwgd2UKdHJlYXQgaXQgYXMgIlNsb3QgQ2FwYWJpbGl0aWVzIHJl Z2lzdGVyIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQiLgoKQWNjb3JkaW5nIHRvIFBDSWUg QmFzZSBzcGVjaWZpY2F0aW9uIDMuMCwgd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gYQpub24tRExf VXAgU3RhdHVzIHRvIGEgRExfVXAgU3RhdHVzLCB0aGUgUG9ydCBtdXN0IGluaXRpYXRlIHRoZQp0 cmFuc21pc3Npb24gb2YgYSBTZXRfU2xvdF9Qb3dlcl9MaW1pdCBNZXNzYWdlIHRvIHRoZSBvdGhl ciBjb21wb25lbnQKb24gdGhlIExpbmsgdG8gY29udmV5IHRoZSB2YWx1ZSBwcm9ncmFtbWVkIGlu IHRoZSBTbG90IFBvd2VyIExpbWl0ClNjYWxlIGFuZCBWYWx1ZSBmaWVsZHMgb2YgdGhlIFNsb3Qg Q2FwYWJpbGl0aWVzIHJlZ2lzdGVyLiBUaGlzCnRyYW5zbWlzc2lvbiBpcyBvcHRpb25hbCBpZiB0 aGUgU2xvdCBDYXBhYmlsaXRpZXMgcmVnaXN0ZXIgaGFzIG5vdAp5ZXQgYmVlbiBpbml0aWFsaXpl ZC4KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+ClNpZ25lZC1v ZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL3BjaS9j b250cm9sbGVyL3BjaS1hYXJkdmFyay5jIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrLS0t CiAxIGZpbGUgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwppbmRleCA2MmJiMDMwOGI5ZjcuLjQxMTI3YTI2 YzViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwor KysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jCkBAIC0yMTIsNiArMjEy LDExIEBAIGVudW0gewogfTsKIAogI2RlZmluZSBWRU5ET1JfSURfUkVHCQkJCShMTUlfQkFTRV9B RERSICsgMHg0NCkKKyNkZWZpbmUgUE1FX01TR19HRU5fQ1RSTAkJCShMTUlfQkFTRV9BRERSICsg MHgyMjApCisjZGVmaW5lICAgICBTRU5EX1NFVF9TTE9UX1BPV0VSX0xJTUlUCQlCSVQoMTMpCisj ZGVmaW5lICAgICBTRU5EX1BNRV9UVVJOX09GRgkJCUJJVCgxNCkKKyNkZWZpbmUgICAgIFNMT1Rf UE9XRVJfTElNSVRfREFUQV9TSElGVAkJMTYKKyNkZWZpbmUgICAgIFNMT1RfUE9XRVJfTElNSVRf REFUQV9NQVNLCQlHRU5NQVNLKDI1LCAxNikKIAogLyogUENJZSBjb3JlIGNvbnRyb2xsZXIgcmVn aXN0ZXJzICovCiAjZGVmaW5lIENUUkxfQ09SRV9CQVNFX0FERFIJCQkweDE4MDAwCkBAIC0yODUs NiArMjkwLDggQEAgc3RydWN0IGFkdmtfcGNpZSB7CiAJcmF3X3NwaW5sb2NrX3QgbXNpX2lycV9s b2NrOwogCURFQ0xBUkVfQklUTUFQKG1zaV91c2VkLCBNU0lfSVJRX05VTSk7CiAJc3RydWN0IG11 dGV4IG1zaV91c2VkX2xvY2s7CisJdTggc2xvdF9wb3dlcl9saW1pdF92YWx1ZTsKKwl1OCBzbG90 X3Bvd2VyX2xpbWl0X3NjYWxlOwogCWludCBsaW5rX2dlbjsKIAlib29sIGxpbmtfd2FzX3VwOwog CXN0cnVjdCB0aW1lcl9saXN0IGxpbmtfaXJxX3RpbWVyOwpAQCAtMzE3LDggKzMyNCw5IEBAIHN0 YXRpYyBpbmxpbmUgYm9vbCBhZHZrX3BjaWVfbGlua191cChzdHJ1Y3QgYWR2a19wY2llICpwY2ll KQogewogCS8qIGNoZWNrIGlmIExUU1NNIGlzIGluIG5vcm1hbCBvcGVyYXRpb24gLSBzb21lIEwq IHN0YXRlICovCiAJdTggbHRzc21fc3RhdGUgPSBhZHZrX3BjaWVfbHRzc21fc3RhdGUocGNpZSk7 CisJdTE2IHNsb3RzdGEsIHNsb3RjdGw7CisJdTMyIHNsb3Rwd3IsIHZhbDsKIAlib29sIGxpbmtf aXNfdXA7Ci0JdTE2IHNsb3RzdGE7CiAKIAlsaW5rX2lzX3VwID0gbHRzc21fc3RhdGUgPj0gTFRT U01fTDAgJiYgbHRzc21fc3RhdGUgPCBMVFNTTV9ESVNBQkxFRDsKIApAQCAtMzMyLDYgKzM0MCwy OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWR2a19wY2llX2xpbmtfdXAoc3RydWN0IGFkdmtfcGNp ZSAqcGNpZSkKIAkJcGNpZS0+YnJpZGdlLnBjaWVfY29uZi5zbG90c3RhID0gY3B1X3RvX2xlMTYo c2xvdHN0YSk7CiAKIAkJbW9kX3RpbWVyKCZwY2llLT5saW5rX2lycV90aW1lciwgamlmZmllcyAr IDEpOworCisJCS8qCisJCSAqIEFjY29yZGluZyB0byBQQ0llIEJhc2Ugc3BlY2lmaWNhdGlvbiAz LjAsIHdoZW4gdHJhbnNpdGlvbmluZworCQkgKiBmcm9tIGEgbm9uLURMX1VwIFN0YXR1cyB0byBh IERMX1VwIFN0YXR1cywgdGhlIFBvcnQgbXVzdAorCQkgKiBpbml0aWF0ZSB0aGUgdHJhbnNtaXNz aW9uIG9mIGEgU2V0X1Nsb3RfUG93ZXJfTGltaXQgTWVzc2FnZQorCQkgKiB0byB0aGUgb3RoZXIg Y29tcG9uZW50IG9uIHRoZSBMaW5rIHRvIGNvbnZleSB0aGUgdmFsdWUKKwkJICogcHJvZ3JhbW1l ZCBpbiB0aGUgU2xvdCBQb3dlciBMaW1pdCBTY2FsZSBhbmQgVmFsdWUgZmllbGRzIG9mCisJCSAq IHRoZSBTbG90IENhcGFiaWxpdGllcyByZWdpc3Rlci4gVGhpcyB0cmFuc21pc3Npb24gaXMgb3B0 aW9uYWwKKwkJICogaWYgdGhlIFNsb3QgQ2FwYWJpbGl0aWVzIHJlZ2lzdGVyIGhhcyBub3QgeWV0 IGJlZW4KKwkJICogaW5pdGlhbGl6ZWQuCisJCSAqLworCQlzbG90Y3RsID0gbGUxNl90b19jcHUo cGNpZS0+YnJpZGdlLnBjaWVfY29uZi5zbG90Y3RsKTsKKwkJc2xvdHB3ciA9IChsZTMyX3RvX2Nw dShwY2llLT5icmlkZ2UucGNpZV9jb25mLnNsb3RjYXApICYKKwkJCSAgIChQQ0lfRVhQX1NMVENB UF9TUExWIHwgUENJX0VYUF9TTFRDQVBfU1BMUykpID4+CisJCQkgIFBDSV9FWFBfU0xUQ0FQX1NQ TFZfU0hJRlQ7CisJCWlmICghKHNsb3RjdGwgJiBQQ0lfRVhQX1NMVENUTF9BU1BMX0RJU0FCTEUp ICYmIHNsb3Rwd3IpIHsKKwkJCXZhbCA9IGFkdmtfcmVhZGwocGNpZSwgUE1FX01TR19HRU5fQ1RS TCk7CisJCQl2YWwgJj0gflNMT1RfUE9XRVJfTElNSVRfREFUQV9NQVNLOworCQkJdmFsIHw9IHNs b3Rwd3IgPDwgU0xPVF9QT1dFUl9MSU1JVF9EQVRBX1NISUZUOworCQkJdmFsIHw9IFNFTkRfU0VU X1NMT1RfUE9XRVJfTElNSVQ7CisJCQlhZHZrX3dyaXRlbChwY2llLCB2YWwsIFBNRV9NU0dfR0VO X0NUUkwpOworCQl9CiAJfQogCiAJcmV0dXJuIGxpbmtfaXNfdXA7CkBAIC05NDQsOCArOTc0LDkg QEAgYWR2a19wY2lfYnJpZGdlX2VtdWxfcGNpZV9jb25mX3dyaXRlKHN0cnVjdCBwY2lfYnJpZGdl X2VtdWwgKmJyaWRnZSwKIAogCWNhc2UgUENJX0VYUF9TTFRDVEw6IHsKIAkJdTE2IHNsb3RjdGwg PSBsZTE2X3RvX2NwdShicmlkZ2UtPnBjaWVfY29uZi5zbG90Y3RsKTsKLQkJLyogT25seSBlbXVs YXRpb24gb2YgSFBJRSBhbmQgRExMU0NFIGJpdHMgaXMgcHJvdmlkZWQgKi8KLQkJc2xvdGN0bCAm PSBQQ0lfRVhQX1NMVENUTF9IUElFIHwgUENJX0VYUF9TTFRDVExfRExMU0NFOworCQkvKiBPbmx5 IGVtdWxhdGlvbiBvZiBIUElFLCBETExTQ0UgYW5kIEFTUExEIGJpdHMgaXMgcHJvdmlkZWQgKi8K KwkJc2xvdGN0bCAmPSBQQ0lfRVhQX1NMVENUTF9IUElFIHwgUENJX0VYUF9TTFRDVExfRExMU0NF IHwKKwkJCSAgIFBDSV9FWFBfU0xUQ1RMX0FTUExfRElTQUJMRTsKIAkJYnJpZGdlLT5wY2llX2Nv bmYuc2xvdGN0bCA9IGNwdV90b19sZTE2KHNsb3RjdGwpOwogCQlicmVhazsKIAl9CkBAIC0xMTA3 LDkgKzExMzgsMTMgQEAgc3RhdGljIGludCBhZHZrX3N3X3BjaV9icmlkZ2VfaW5pdChzdHJ1Y3Qg YWR2a19wY2llICpwY2llKQogCSAqIFNldCBwaHlzaWNhbCBzbG90IG51bWJlciB0byAxIHNpbmNl IHRoZXJlIGlzIG9ubHkgb25lIHBvcnQgYW5kIHplcm8KIAkgKiB2YWx1ZSBpcyByZXNlcnZlZCBm b3IgcG9ydHMgd2l0aGluIHRoZSBzYW1lIHNpbGljb24gYXMgUm9vdCBQb3J0CiAJICogd2hpY2gg aXMgbm90IG91ciBjYXNlLgorCSAqCisJICogU2V0IHNsb3QgcG93ZXIgbGltaXQuCiAJICovCiAJ c2xvdGNhcCA9IFBDSV9FWFBfU0xUQ0FQX05DQ1MgfCBQQ0lfRVhQX1NMVENBUF9IUEMgfAotCQkg ICgxIDw8IFBDSV9FWFBfU0xUQ0FQX1BTTl9TSElGVCk7CisJCSAgKDEgPDwgUENJX0VYUF9TTFRD QVBfUFNOX1NISUZUKSB8CisJCSAgKHBjaWUtPnNsb3RfcG93ZXJfbGltaXRfdmFsdWUgPDwgUENJ X0VYUF9TTFRDQVBfU1BMVl9TSElGVCkgfAorCQkgIChwY2llLT5zbG90X3Bvd2VyX2xpbWl0X3Nj YWxlIDw8IFBDSV9FWFBfU0xUQ0FQX1NQTFNfU0hJRlQpOwogCWJyaWRnZS0+cGNpZV9jb25mLnNs b3RjYXAgPSBjcHVfdG9fbGUzMihzbG90Y2FwKTsKIAlicmlkZ2UtPnBjaWVfY29uZi5zbG90c3Rh ID0gY3B1X3RvX2xlMTYoUENJX0VYUF9TTFRTVEFfUERTKTsKIApAQCAtMTg0Miw2ICsxODc3LDcg QEAgc3RhdGljIGludCBhZHZrX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAlzdHJ1Y3QgYWR2a19wY2llICpwY2llOwogCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJy aWRnZTsKIAlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5OworCXUzMiBzbG90X3Bvd2VyX2xp bWl0OwogCWludCByZXQ7CiAKIAlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShk ZXYsIHNpemVvZihzdHJ1Y3QgYWR2a19wY2llKSk7CkBAIC0xOTU0LDYgKzE5OTAsMTQgQEAgc3Rh dGljIGludCBhZHZrX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAll bHNlCiAJCXBjaWUtPmxpbmtfZ2VuID0gcmV0OwogCisJc2xvdF9wb3dlcl9saW1pdCA9IG9mX3Bj aV9nZXRfc2xvdF9wb3dlcl9saW1pdChkZXYtPm9mX25vZGUsCisJCQkJCQkgICAgICAgJnBjaWUt PnNsb3RfcG93ZXJfbGltaXRfdmFsdWUsCisJCQkJCQkgICAgICAgJnBjaWUtPnNsb3RfcG93ZXJf bGltaXRfc2NhbGUpOworCWlmIChzbG90X3Bvd2VyX2xpbWl0KQorCQlkZXZfaW5mbyhkZXYsICJT bG90IFBvd2VyIExpbWl0OiAldS4ldVdcbiIsCisJCQkgc2xvdF9wb3dlcl9saW1pdCAvIDEwMDAs CisJCQkgKHNsb3RfcG93ZXJfbGltaXQgLyAxMDApICUgMTApOworCiAJcmV0ID0gYWR2a19wY2ll X3NldHVwX3BoeShwY2llKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotLSAKMi4zNC4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=