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=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 D1509C43460 for ; Tue, 27 Apr 2021 10:56:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97275610FA for ; Tue, 27 Apr 2021 10:56:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235809AbhD0K4t (ORCPT ); Tue, 27 Apr 2021 06:56:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:46856 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235803AbhD0K4t (ORCPT ); Tue, 27 Apr 2021 06:56:49 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A1C19613B0; Tue, 27 Apr 2021 10:56:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1619520966; bh=P3sk/jdvdGbo8a4NLyXLQdNK5bliTYyVm9EmJOM7/24=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P0GiYa98NeCaeYsF0ydEe3dQhBgPRtgLHlolscO/xEhE49EQ2kv2PdJ8mHsfBRdTO 6N0FFeHx4cfei6d7+taD1dW04B2Y/ywNRhbiSp6UY75t2djMTFQaIpRQHjZekmt99m vqsFPpYGO+1bjiaaXN6BRNsjio9pBIa52KVSdkcP/+ED2rux4NCyvm+NtWqdCwKve0 9WFE5WqGe0O+1ZavAWrnvquqkRI67G4zadr63rYt7u5PCBsoRvm3OELGOph/7RPpQ4 8SWXoSpRiseMimkHG2Rm/Sm02X3ELfzY3TfLbEjPSCAbdbnLMyVahsvUXsUrE8hKz0 Jk5Fw/Ec50GbA== Received: by pali.im (Postfix) id D2C3B791; Tue, 27 Apr 2021 12:56:00 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Bjorn Helgaas , Kalle Valo , =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= Cc: vtolkm@gmail.com, Rob Herring , Ilias Apalodimas , Thomas Petazzoni , linux-pci@vger.kernel.org, ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] PCI: Disallow retraining link for Atheros chips on non-Gen1 PCIe bridges Date: Tue, 27 Apr 2021 12:55:25 +0200 Message-Id: <20210427105525.23277-1-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210326124326.21163-1-pali@kernel.org> References: <20210326124326.21163-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-wireless@vger.kernel.org Atheros AR9xxx and QCA98xx chips do not behave not only after a bus reset but also after doing retrain link when PCIe bridge is not in GEN1 mode at 2.5 GT/s speed. QCA9880 and QCA9890 chips throw a Link Down event and completely disappear from the bus and their config space is not accessible again. AR9390 chip throws a Link Down event followed by Link Up event, config space is accessible again, but contains nonsense values. PCI device ID is 0xABCD which indicates HW bug that chip itself was not able to read values from internal EEPROM/OTP. AR9287 chip throws also Link Down and Link Up events, also has accessible config space and moreover its config space contains correct values. But ath9k driver cannot initialize card from this state as it is unable to access HW registers. This also indicates that chip iself was not able to read values from internal EEPROM/OTP. This issue related to PCI device ID 0xABCD and reading internal EEPROM/OTP was previously discussed at ath9k-devel mailing list in following thread: https://www.mail-archive.com/ath9k-devel@lists.ath9k.org/msg07529.html After experiments we come up with workaround that Retrain link can be called only when using GEN1 PCIe bridge or when PCIe bridge has forced link speed to 2.5 GT/s via PCI_EXP_LNKCTL2 register. This issue was reproduced with more cards: Compex WLE900VX (QCA9880 based / device ID 0x003c), Compex WLE200NX (AR9287 based / device ID 0x002e), "noname" card (QCA9890 based / device ID 0x003c) and Wistron NKR-DNXAH1 (AR9390 based / device ID 0x0030) on Armada 385 with pci-mvebu.c driver and also on Armada 3720 with pci-aardvark.c driver. To workaround this issue, this change introduces a new PCI quirk called PCI_DEV_FLAGS_NO_RETRAIN_LINK_WHEN_NOT_GEN1 which is enabled for all Atheros chips with PCI_DEV_FLAGS_NO_BUS_RESET quirk, plus also for Atheros chip AR9287. When this quirk is set then kernel disallows triggering PCI_EXP_LNKCTL_RL bit in config space of PCIe Bridge in case PCIe Bridge is capable of higher speed than 2.5 GT/s and higher speed is already allowed. When PCIe Bridge has accessible LNKCTL2 register then kernel tries to force target link speed via PCI_EXP_LNKCTL2_TLS* bits to 2.5 GT/s. After this change it is possible to trigger PCI_EXP_LNKCTL_RL bit without causing issues on problematic Atheros cards. Currently only PCIe ASPM kernel code triggers this PCI_EXP_LNKCTL_RL bit, so quirk check is added only into pcie/aspm.c file. Signed-off-by: Pali Rohár Reported-by: Toke Høiland-Jørgensen Tested-by: Toke Høiland-Jørgensen Tested-by: Marek Behún BugLink: https://lore.kernel.org/linux-pci/87h7l8axqp.fsf@toke.dk/ BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=84821 BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=192441 BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=209833 Cc: stable@vger.kernel.org # c80851f6ce63a ("PCI: Add PCI_EXP_LNKCTL2_TLS* macros") --- Changes since v1: * Move whole quirk code into pcie_downgrade_link_to_gen1() function * Reformat to 80 chars per line where possible * Add quirk also for cards with AR9287 chip (PCI ID 0x002e) * Extend commit message description and add information about 0xABCD --- drivers/pci/pcie/aspm.c | 44 +++++++++++++++++++++++++++++++++++++++++ drivers/pci/quirks.c | 37 ++++++++++++++++++++++++++-------- include/linux/pci.h | 2 ++ 3 files changed, 75 insertions(+), 8 deletions(-) diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index ac0557a305af..729b0389562b 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -192,12 +192,56 @@ static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist) link->clkpm_disable = blacklist ? 1 : 0; } +static int pcie_downgrade_link_to_gen1(struct pci_dev *parent) +{ + u16 reg16; + u32 reg32; + int ret; + + /* Check if link is capable of higher speed than 2.5 GT/s */ + pcie_capability_read_dword(parent, PCI_EXP_LNKCAP, ®32); + if ((reg32 & PCI_EXP_LNKCAP_SLS) <= PCI_EXP_LNKCAP_SLS_2_5GB) + return 0; + + /* Check if link speed can be downgraded to 2.5 GT/s */ + pcie_capability_read_dword(parent, PCI_EXP_LNKCAP2, ®32); + if (!(reg32 & PCI_EXP_LNKCAP2_SLS_2_5GB)) { + pci_err(parent, "ASPM: Bridge does not support changing Link Speed to 2.5 GT/s\n"); + return -EOPNOTSUPP; + } + + /* Force link speed to 2.5 GT/s */ + ret = pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL2, + PCI_EXP_LNKCTL2_TLS, + PCI_EXP_LNKCTL2_TLS_2_5GT); + if (!ret) { + /* Verify that new value was really set */ + pcie_capability_read_word(parent, PCI_EXP_LNKCTL2, ®16); + if ((reg16 & PCI_EXP_LNKCTL2_TLS) != PCI_EXP_LNKCTL2_TLS_2_5GT) + ret = -EINVAL; + } + + if (ret) { + pci_err(parent, "ASPM: Changing Target Link Speed to 2.5 GT/s failed: %d\n", ret); + return ret; + } + + pci_info(parent, "ASPM: Target Link Speed changed to 2.5 GT/s due to quirk\n"); + return 0; +} + static bool pcie_retrain_link(struct pcie_link_state *link) { struct pci_dev *parent = link->pdev; unsigned long end_jiffies; u16 reg16; + if ((link->downstream->dev_flags & PCI_DEV_FLAGS_NO_RETRAIN_LINK_WHEN_NOT_GEN1) && + pcie_downgrade_link_to_gen1(parent)) { + pci_err(parent, "ASPM: Retrain Link at higher speed is disallowed by quirk\n"); + return false; + } + pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); reg16 |= PCI_EXP_LNKCTL_RL; pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 653660e3ba9e..68c5e8f4ff8c 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -3553,23 +3553,44 @@ static void mellanox_check_broken_intx_masking(struct pci_dev *pdev) DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX, PCI_ANY_ID, mellanox_check_broken_intx_masking); -static void quirk_no_bus_reset(struct pci_dev *dev) +static void quirk_no_bus_reset_and_no_retrain_link(struct pci_dev *dev) { - dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET; + dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET | + PCI_DEV_FLAGS_NO_RETRAIN_LINK_WHEN_NOT_GEN1; } /* - * Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset. + * Atheros AR9xxx and QCA98xx chips do not behave after a bus reset and also + * after retrain link when PCIe bridge is not in GEN1 mode at 2.5 GT/s speed. * The device will throw a Link Down error on AER-capable systems and * regardless of AER, config space of the device is never accessible again * and typically causes the system to hang or reset when access is attempted. + * Or if config space is accessible again then it contains only dummy values + * like fixed PCI device ID 0xABCD or values not initialized at all. + * Retrain link can be called only when using GEN1 PCIe bridge or when + * PCIe bridge has forced link speed to 2.5 GT/s via PCI_EXP_LNKCTL2 register. + * To reset these cards it is required to do PCIe Warm Reset via PERST# pin. * https://lore.kernel.org/r/20140923210318.498dacbd@dualc.maya.org/ + * https://lore.kernel.org/r/87h7l8axqp.fsf@toke.dk/ + * https://www.mail-archive.com/ath9k-devel@lists.ath9k.org/msg07529.html */ -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, quirk_no_bus_reset); -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, quirk_no_bus_reset); -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset); -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0033, quirk_no_bus_reset); -DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0034, quirk_no_bus_reset); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x002e, + quirk_no_bus_reset_and_no_retrain_link); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0030, + quirk_no_bus_reset_and_no_retrain_link); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, + quirk_no_bus_reset_and_no_retrain_link); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0033, + quirk_no_bus_reset_and_no_retrain_link); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0034, + quirk_no_bus_reset_and_no_retrain_link); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, + quirk_no_bus_reset_and_no_retrain_link); + +static void quirk_no_bus_reset(struct pci_dev *dev) +{ + dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET; +} /* * Root port on some Cavium CN8xxx chips do not successfully complete a bus diff --git a/include/linux/pci.h b/include/linux/pci.h index 86c799c97b77..fdbf7254e4ab 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -227,6 +227,8 @@ enum pci_dev_flags { PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10), /* Don't use Relaxed Ordering for TLPs directed at this device */ PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11), + /* Don't Retrain Link for device when bridge is not in GEN1 mode */ + PCI_DEV_FLAGS_NO_RETRAIN_LINK_WHEN_NOT_GEN1 = (__force pci_dev_flags_t) (1 << 12), }; enum pci_irq_reroute_variant { -- 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 X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,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 EE464C433B4 for ; Tue, 27 Apr 2021 10:57:22 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 3E438600CC for ; Tue, 27 Apr 2021 10:57:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3E438600CC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=ath10k-bounces+ath10k=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=VDTeFZZO99AMnCbqvzBSoWH5Yizv0jbGlmQbtwzFnZE=; b=bJVkCt9Xu9qOCi+B1apWRThtt Tn9tuuT3Be7qNbmdY0AZK0QCiVk6fqeEy37i8DaugLWcpqKoiZCdgezHtjT37Y/p2FwE8rdWEcpZJ pK0iIzIvwu9GiOkYjD9gioe9gfA+4591GRRQj9kimd7A7BW2RNFGz/e/FphhurK9FfcvaiHVbY5jB tXw0zpSfmsTahMo5z3yCLLXycNq9UNt63YB8Gnf3JF2QBKIBtgWFdrRB2g15s72NwXY5Cmpi7wQ6R FxOfwEELLsdZ8qwdGWf5CCKc4oLEO6Wkpv5psfxzG2QEs0P6maNvLwkrEj16g3OVr/ky850/iPFjz HscOcPPZg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lbLO2-001SOA-Vy; Tue, 27 Apr 2021 10:56:15 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lbLO0-001SO3-9T for ath10k@desiato.infradead.org; Tue, 27 Apr 2021 10:56:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:Content-ID:Content-Description; bh=ONFpyVuqnbDADAsZ7+CzndkZyfqp9kZB1pMRK+I9e7c=; b=VZfdrdiF/5IpjUvQc8p4rYsxCB mFbfjbprFqN4+QWqdXC7I/cm4S+fnJgR/g1f8Dvc9m+nnC8Odc/ZYgZp6udRdfpF/UFUCiXhcESOF kkG9i+D3clCAkW89SZZkwcm6M15BYXnfkPTYqQTDJlZKpYFQF93yil1iADOrOEyn7At73qHjTI+oC d0rzKrfu+mVrqC5ka5TWxkx6KK9snFl/+H4bHojECjxa3SqKoXC2r8YF16O3NjhtfSVK7Hc++9uae COhs2HxzfAQHQ6m1hfSDpEWlgp8ZOomVW7TXdS1TgZZRjrjKUYsiAhsFdvflxOgVTiitJzWcZ0Pg1 TTLqvk4g==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lbLNw-00GfLS-TQ for ath10k@lists.infradead.org; Tue, 27 Apr 2021 10:56:10 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id A1C19613B0; Tue, 27 Apr 2021 10:56:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1619520966; bh=P3sk/jdvdGbo8a4NLyXLQdNK5bliTYyVm9EmJOM7/24=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P0GiYa98NeCaeYsF0ydEe3dQhBgPRtgLHlolscO/xEhE49EQ2kv2PdJ8mHsfBRdTO 6N0FFeHx4cfei6d7+taD1dW04B2Y/ywNRhbiSp6UY75t2djMTFQaIpRQHjZekmt99m vqsFPpYGO+1bjiaaXN6BRNsjio9pBIa52KVSdkcP/+ED2rux4NCyvm+NtWqdCwKve0 9WFE5WqGe0O+1ZavAWrnvquqkRI67G4zadr63rYt7u5PCBsoRvm3OELGOph/7RPpQ4 8SWXoSpRiseMimkHG2Rm/Sm02X3ELfzY3TfLbEjPSCAbdbnLMyVahsvUXsUrE8hKz0 Jk5Fw/Ec50GbA== Received: by pali.im (Postfix) id D2C3B791; Tue, 27 Apr 2021 12:56:00 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Bjorn Helgaas , Kalle Valo , =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= Cc: vtolkm@gmail.com, Rob Herring , Ilias Apalodimas , Thomas Petazzoni , linux-pci@vger.kernel.org, ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] PCI: Disallow retraining link for Atheros chips on non-Gen1 PCIe bridges Date: Tue, 27 Apr 2021 12:55:25 +0200 Message-Id: <20210427105525.23277-1-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210326124326.21163-1-pali@kernel.org> References: <20210326124326.21163-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210427_035609_057417_7E5D24C0 X-CRM114-Status: GOOD ( 23.22 ) X-BeenThere: ath10k@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: "ath10k" Errors-To: ath10k-bounces+ath10k=archiver.kernel.org@lists.infradead.org QXRoZXJvcyBBUjl4eHggYW5kIFFDQTk4eHggY2hpcHMgZG8gbm90IGJlaGF2ZSBub3Qgb25seSBh ZnRlciBhIGJ1cyByZXNldApidXQgYWxzbyBhZnRlciBkb2luZyByZXRyYWluIGxpbmsgd2hlbiBQ Q0llIGJyaWRnZSBpcyBub3QgaW4gR0VOMSBtb2RlIGF0CjIuNSBHVC9zIHNwZWVkLgoKUUNBOTg4 MCBhbmQgUUNBOTg5MCBjaGlwcyB0aHJvdyBhIExpbmsgRG93biBldmVudCBhbmQgY29tcGxldGVs eSBkaXNhcHBlYXIKZnJvbSB0aGUgYnVzIGFuZCB0aGVpciBjb25maWcgc3BhY2UgaXMgbm90IGFj Y2Vzc2libGUgYWdhaW4uCgpBUjkzOTAgY2hpcCB0aHJvd3MgYSBMaW5rIERvd24gZXZlbnQgZm9s bG93ZWQgYnkgTGluayBVcCBldmVudCwgY29uZmlnCnNwYWNlIGlzIGFjY2Vzc2libGUgYWdhaW4s IGJ1dCBjb250YWlucyBub25zZW5zZSB2YWx1ZXMuIFBDSSBkZXZpY2UgSUQgaXMKMHhBQkNEIHdo aWNoIGluZGljYXRlcyBIVyBidWcgdGhhdCBjaGlwIGl0c2VsZiB3YXMgbm90IGFibGUgdG8gcmVh ZCB2YWx1ZXMKZnJvbSBpbnRlcm5hbCBFRVBST00vT1RQLgoKQVI5Mjg3IGNoaXAgdGhyb3dzIGFs c28gTGluayBEb3duIGFuZCBMaW5rIFVwIGV2ZW50cywgYWxzbyBoYXMgYWNjZXNzaWJsZQpjb25m aWcgc3BhY2UgYW5kIG1vcmVvdmVyIGl0cyBjb25maWcgc3BhY2UgY29udGFpbnMgY29ycmVjdCB2 YWx1ZXMuIEJ1dAphdGg5ayBkcml2ZXIgY2Fubm90IGluaXRpYWxpemUgY2FyZCBmcm9tIHRoaXMg c3RhdGUgYXMgaXQgaXMgdW5hYmxlIHRvCmFjY2VzcyBIVyByZWdpc3RlcnMuIFRoaXMgYWxzbyBp bmRpY2F0ZXMgdGhhdCBjaGlwIGlzZWxmIHdhcyBub3QgYWJsZSB0bwpyZWFkIHZhbHVlcyBmcm9t IGludGVybmFsIEVFUFJPTS9PVFAuCgpUaGlzIGlzc3VlIHJlbGF0ZWQgdG8gUENJIGRldmljZSBJ RCAweEFCQ0QgYW5kIHJlYWRpbmcgaW50ZXJuYWwgRUVQUk9NL09UUAp3YXMgcHJldmlvdXNseSBk aXNjdXNzZWQgYXQgYXRoOWstZGV2ZWwgbWFpbGluZyBsaXN0IGluIGZvbGxvd2luZyB0aHJlYWQ6 CgpodHRwczovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2F0aDlrLWRldmVsQGxpc3RzLmF0aDlrLm9y Zy9tc2cwNzUyOS5odG1sCgpBZnRlciBleHBlcmltZW50cyB3ZSBjb21lIHVwIHdpdGggd29ya2Fy b3VuZCB0aGF0IFJldHJhaW4gbGluayBjYW4gYmUKY2FsbGVkIG9ubHkgd2hlbiB1c2luZyBHRU4x IFBDSWUgYnJpZGdlIG9yIHdoZW4gUENJZSBicmlkZ2UgaGFzIGZvcmNlZCBsaW5rCnNwZWVkIHRv IDIuNSBHVC9zIHZpYSBQQ0lfRVhQX0xOS0NUTDIgcmVnaXN0ZXIuCgpUaGlzIGlzc3VlIHdhcyBy ZXByb2R1Y2VkIHdpdGggbW9yZSBjYXJkczogQ29tcGV4IFdMRTkwMFZYIChRQ0E5ODgwIGJhc2Vk IC8KZGV2aWNlIElEIDB4MDAzYyksIENvbXBleCBXTEUyMDBOWCAoQVI5Mjg3IGJhc2VkIC8gZGV2 aWNlIElEIDB4MDAyZSksCiJub25hbWUiIGNhcmQgKFFDQTk4OTAgYmFzZWQgLyBkZXZpY2UgSUQg MHgwMDNjKSBhbmQgV2lzdHJvbiBOS1ItRE5YQUgxCihBUjkzOTAgYmFzZWQgLyBkZXZpY2UgSUQg MHgwMDMwKSBvbiBBcm1hZGEgMzg1IHdpdGggcGNpLW12ZWJ1LmMgZHJpdmVyIGFuZAphbHNvIG9u IEFybWFkYSAzNzIwIHdpdGggcGNpLWFhcmR2YXJrLmMgZHJpdmVyLgoKVG8gd29ya2Fyb3VuZCB0 aGlzIGlzc3VlLCB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBxdWlyayBjYWxsZWQK UENJX0RFVl9GTEFHU19OT19SRVRSQUlOX0xJTktfV0hFTl9OT1RfR0VOMSB3aGljaCBpcyBlbmFi bGVkIGZvciBhbGwKQXRoZXJvcyBjaGlwcyB3aXRoIFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VU IHF1aXJrLCBwbHVzIGFsc28gZm9yIEF0aGVyb3MKY2hpcCBBUjkyODcuCgpXaGVuIHRoaXMgcXVp cmsgaXMgc2V0IHRoZW4ga2VybmVsIGRpc2FsbG93cyB0cmlnZ2VyaW5nIFBDSV9FWFBfTE5LQ1RM X1JMCmJpdCBpbiBjb25maWcgc3BhY2Ugb2YgUENJZSBCcmlkZ2UgaW4gY2FzZSBQQ0llIEJyaWRn ZSBpcyBjYXBhYmxlIG9mIGhpZ2hlcgpzcGVlZCB0aGFuIDIuNSBHVC9zIGFuZCBoaWdoZXIgc3Bl ZWQgaXMgYWxyZWFkeSBhbGxvd2VkLiBXaGVuIFBDSWUgQnJpZGdlCmhhcyBhY2Nlc3NpYmxlIExO S0NUTDIgcmVnaXN0ZXIgdGhlbiBrZXJuZWwgdHJpZXMgdG8gZm9yY2UgdGFyZ2V0IGxpbmsKc3Bl ZWQgdmlhIFBDSV9FWFBfTE5LQ1RMMl9UTFMqIGJpdHMgdG8gMi41IEdUL3MuIEFmdGVyIHRoaXMg Y2hhbmdlIGl0IGlzCnBvc3NpYmxlIHRvIHRyaWdnZXIgUENJX0VYUF9MTktDVExfUkwgYml0IHdp dGhvdXQgY2F1c2luZyBpc3N1ZXMgb24KcHJvYmxlbWF0aWMgQXRoZXJvcyBjYXJkcy4KCkN1cnJl bnRseSBvbmx5IFBDSWUgQVNQTSBrZXJuZWwgY29kZSB0cmlnZ2VycyB0aGlzIFBDSV9FWFBfTE5L Q1RMX1JMIGJpdCwKc28gcXVpcmsgY2hlY2sgaXMgYWRkZWQgb25seSBpbnRvIHBjaWUvYXNwbS5j IGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpSZXBv cnRlZC1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+ClRlc3Rl ZC1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+ClRlc3RlZC1i eTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgpCdWdMaW5rOiBodHRwczovL2xvcmUu a2VybmVsLm9yZy9saW51eC1wY2kvODdoN2w4YXhxcC5mc2ZAdG9rZS5kay8KQnVnTGluazogaHR0 cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgyMQpCdWdMaW5rOiBo dHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjQ0MQpCdWdMaW5r OiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTgzMwpDYzog c3RhYmxlQHZnZXIua2VybmVsLm9yZyAjIGM4MDg1MWY2Y2U2M2EgKCJQQ0k6IEFkZCBQQ0lfRVhQ X0xOS0NUTDJfVExTKiBtYWNyb3MiKQoKLS0tCkNoYW5nZXMgc2luY2UgdjE6CiogTW92ZSB3aG9s ZSBxdWlyayBjb2RlIGludG8gcGNpZV9kb3duZ3JhZGVfbGlua190b19nZW4xKCkgZnVuY3Rpb24K KiBSZWZvcm1hdCB0byA4MCBjaGFycyBwZXIgbGluZSB3aGVyZSBwb3NzaWJsZQoqIEFkZCBxdWly ayBhbHNvIGZvciBjYXJkcyB3aXRoIEFSOTI4NyBjaGlwIChQQ0kgSUQgMHgwMDJlKQoqIEV4dGVu ZCBjb21taXQgbWVzc2FnZSBkZXNjcmlwdGlvbiBhbmQgYWRkIGluZm9ybWF0aW9uIGFib3V0IDB4 QUJDRAotLS0KIGRyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIHwgNDQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvcGNpL3F1aXJrcy5jICAgIHwgMzcgKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQogaW5jbHVkZS9saW51eC9wY2kuaCAgICAg fCAgMiArKwogMyBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNp ZS9hc3BtLmMKaW5kZXggYWMwNTU3YTMwNWFmLi43MjliMDM4OTU2MmIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC0x OTIsMTIgKzE5Miw1NiBAQCBzdGF0aWMgdm9pZCBwY2llX2Nsa3BtX2NhcF9pbml0KHN0cnVjdCBw Y2llX2xpbmtfc3RhdGUgKmxpbmssIGludCBibGFja2xpc3QpCiAJbGluay0+Y2xrcG1fZGlzYWJs ZSA9IGJsYWNrbGlzdCA/IDEgOiAwOwogfQogCitzdGF0aWMgaW50IHBjaWVfZG93bmdyYWRlX2xp bmtfdG9fZ2VuMShzdHJ1Y3QgcGNpX2RldiAqcGFyZW50KQoreworCXUxNiByZWcxNjsKKwl1MzIg cmVnMzI7CisJaW50IHJldDsKKworCS8qIENoZWNrIGlmIGxpbmsgaXMgY2FwYWJsZSBvZiBoaWdo ZXIgc3BlZWQgdGhhbiAyLjUgR1QvcyAqLworCXBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBh cmVudCwgUENJX0VYUF9MTktDQVAsICZyZWczMik7CisJaWYgKChyZWczMiAmIFBDSV9FWFBfTE5L Q0FQX1NMUykgPD0gUENJX0VYUF9MTktDQVBfU0xTXzJfNUdCKQorCQlyZXR1cm4gMDsKKworCS8q IENoZWNrIGlmIGxpbmsgc3BlZWQgY2FuIGJlIGRvd25ncmFkZWQgdG8gMi41IEdUL3MgKi8KKwlw Y2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwYXJlbnQsIFBDSV9FWFBfTE5LQ0FQMiwgJnJlZzMy KTsKKwlpZiAoIShyZWczMiAmIFBDSV9FWFBfTE5LQ0FQMl9TTFNfMl81R0IpKSB7CisJCXBjaV9l cnIocGFyZW50LCAiQVNQTTogQnJpZGdlIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgTGluayBT cGVlZCB0byAyLjUgR1Qvc1xuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBG b3JjZSBsaW5rIHNwZWVkIHRvIDIuNSBHVC9zICovCisJcmV0ID0gcGNpZV9jYXBhYmlsaXR5X2Ns ZWFyX2FuZF9zZXRfd29yZChwYXJlbnQsIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCSBQQ0lfRVhQ X0xOS0NUTDJfVExTLAorCQkJCQkJIFBDSV9FWFBfTE5LQ1RMMl9UTFNfMl81R1QpOworCWlmICgh cmV0KSB7CisJCS8qIFZlcmlmeSB0aGF0IG5ldyB2YWx1ZSB3YXMgcmVhbGx5IHNldCAqLworCQlw Y2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHBhcmVudCwgUENJX0VYUF9MTktDVEwyLCAmcmVnMTYp OworCQlpZiAoKHJlZzE2ICYgUENJX0VYUF9MTktDVEwyX1RMUykgIT0gUENJX0VYUF9MTktDVEwy X1RMU18yXzVHVCkKKwkJCXJldCA9IC1FSU5WQUw7CisJfQorCisJaWYgKHJldCkgeworCQlwY2lf ZXJyKHBhcmVudCwgIkFTUE06IENoYW5naW5nIFRhcmdldCBMaW5rIFNwZWVkIHRvIDIuNSBHVC9z IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpX2luZm8ocGFy ZW50LCAiQVNQTTogVGFyZ2V0IExpbmsgU3BlZWQgY2hhbmdlZCB0byAyLjUgR1QvcyBkdWUgdG8g cXVpcmtcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgYm9vbCBwY2llX3JldHJhaW5fbGlu ayhzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlICpsaW5rKQogewogCXN0cnVjdCBwY2lfZGV2ICpwYXJl bnQgPSBsaW5rLT5wZGV2OwogCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXM7CiAJdTE2IHJlZzE2 OwogCisJaWYgKChsaW5rLT5kb3duc3RyZWFtLT5kZXZfZmxhZ3MgJiBQQ0lfREVWX0ZMQUdTX05P X1JFVFJBSU5fTElOS19XSEVOX05PVF9HRU4xKSAmJgorCSAgICBwY2llX2Rvd25ncmFkZV9saW5r X3RvX2dlbjEocGFyZW50KSkgeworCQlwY2lfZXJyKHBhcmVudCwgIkFTUE06IFJldHJhaW4gTGlu ayBhdCBoaWdoZXIgc3BlZWQgaXMgZGlzYWxsb3dlZCBieSBxdWlya1xuIik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKIAlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHBhcmVudCwgUENJX0VYUF9M TktDVEwsICZyZWcxNik7CiAJcmVnMTYgfD0gUENJX0VYUF9MTktDVExfUkw7CiAJcGNpZV9jYXBh YmlsaXR5X3dyaXRlX3dvcmQocGFyZW50LCBQQ0lfRVhQX0xOS0NUTCwgcmVnMTYpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA2 NTM2NjBlM2JhOWUuLjY4YzVlOGY0ZmY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtz LmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTM1NTMsMjMgKzM1NTMsNDQgQEAgc3Rh dGljIHZvaWQgbWVsbGFub3hfY2hlY2tfYnJva2VuX2ludHhfbWFza2luZyhzdHJ1Y3QgcGNpX2Rl diAqcGRldikKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTUVMTEFOT1gs IFBDSV9BTllfSUQsCiAJCQltZWxsYW5veF9jaGVja19icm9rZW5faW50eF9tYXNraW5nKTsKIAot c3RhdGljIHZvaWQgcXVpcmtfbm9fYnVzX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0 aWMgdm9pZCBxdWlya19ub19idXNfcmVzZXRfYW5kX25vX3JldHJhaW5fbGluayhzdHJ1Y3QgcGNp X2RldiAqZGV2KQogewotCWRldi0+ZGV2X2ZsYWdzIHw9IFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JF U0VUOworCWRldi0+ZGV2X2ZsYWdzIHw9IFBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUIHwKKwkJ CSAgUENJX0RFVl9GTEFHU19OT19SRVRSQUlOX0xJTktfV0hFTl9OT1RfR0VOMTsKIH0KIAogLyoK LSAqIFNvbWUgQXRoZXJvcyBBUjl4eHggYW5kIFFDQTk4OHggY2hpcHMgZG8gbm90IGJlaGF2ZSBh ZnRlciBhIGJ1cyByZXNldC4KKyAqIEF0aGVyb3MgQVI5eHh4IGFuZCBRQ0E5OHh4IGNoaXBzIGRv IG5vdCBiZWhhdmUgYWZ0ZXIgYSBidXMgcmVzZXQgYW5kIGFsc28KKyAqIGFmdGVyIHJldHJhaW4g bGluayB3aGVuIFBDSWUgYnJpZGdlIGlzIG5vdCBpbiBHRU4xIG1vZGUgYXQgMi41IEdUL3Mgc3Bl ZWQuCiAgKiBUaGUgZGV2aWNlIHdpbGwgdGhyb3cgYSBMaW5rIERvd24gZXJyb3Igb24gQUVSLWNh cGFibGUgc3lzdGVtcyBhbmQKICAqIHJlZ2FyZGxlc3Mgb2YgQUVSLCBjb25maWcgc3BhY2Ugb2Yg dGhlIGRldmljZSBpcyBuZXZlciBhY2Nlc3NpYmxlIGFnYWluCiAgKiBhbmQgdHlwaWNhbGx5IGNh dXNlcyB0aGUgc3lzdGVtIHRvIGhhbmcgb3IgcmVzZXQgd2hlbiBhY2Nlc3MgaXMgYXR0ZW1wdGVk LgorICogT3IgaWYgY29uZmlnIHNwYWNlIGlzIGFjY2Vzc2libGUgYWdhaW4gdGhlbiBpdCBjb250 YWlucyBvbmx5IGR1bW15IHZhbHVlcworICogbGlrZSBmaXhlZCBQQ0kgZGV2aWNlIElEIDB4QUJD RCBvciB2YWx1ZXMgbm90IGluaXRpYWxpemVkIGF0IGFsbC4KKyAqIFJldHJhaW4gbGluayBjYW4g YmUgY2FsbGVkIG9ubHkgd2hlbiB1c2luZyBHRU4xIFBDSWUgYnJpZGdlIG9yIHdoZW4KKyAqIFBD SWUgYnJpZGdlIGhhcyBmb3JjZWQgbGluayBzcGVlZCB0byAyLjUgR1QvcyB2aWEgUENJX0VYUF9M TktDVEwyIHJlZ2lzdGVyLgorICogVG8gcmVzZXQgdGhlc2UgY2FyZHMgaXQgaXMgcmVxdWlyZWQg dG8gZG8gUENJZSBXYXJtIFJlc2V0IHZpYSBQRVJTVCMgcGluLgogICogaHR0cHM6Ly9sb3JlLmtl cm5lbC5vcmcvci8yMDE0MDkyMzIxMDMxOC40OThkYWNiZEBkdWFsYy5tYXlhLm9yZy8KKyAqIGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvODdoN2w4YXhxcC5mc2ZAdG9rZS5kay8KKyAqIGh0dHBz Oi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vYXRoOWstZGV2ZWxAbGlzdHMuYXRoOWsub3JnL21zZzA3 NTI5Lmh0bWwKICAqLwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRI RVJPUywgMHgwMDMwLCBxdWlya19ub19idXNfcmVzZXQpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVB REVSKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgwMDMyLCBxdWlya19ub19idXNfcmVzZXQpOwot REVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgwMDNjLCBx dWlya19ub19idXNfcmVzZXQpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1Jf SURfQVRIRVJPUywgMHgwMDMzLCBxdWlya19ub19idXNfcmVzZXQpOwotREVDTEFSRV9QQ0lfRklY VVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgwMDM0LCBxdWlya19ub19idXNfcmVz ZXQpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgw MDJlLAorCQkJIHF1aXJrX25vX2J1c19yZXNldF9hbmRfbm9fcmV0cmFpbl9saW5rKTsKK0RFQ0xB UkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSEVST1MsIDB4MDAzMCwKKwkJCSBx dWlya19ub19idXNfcmVzZXRfYW5kX25vX3JldHJhaW5fbGluayk7CitERUNMQVJFX1BDSV9GSVhV UF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLCAweDAwMzIsCisJCQkgcXVpcmtfbm9fYnVz X3Jlc2V0X2FuZF9ub19yZXRyYWluX2xpbmspOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBD SV9WRU5ET1JfSURfQVRIRVJPUywgMHgwMDMzLAorCQkJIHF1aXJrX25vX2J1c19yZXNldF9hbmRf bm9fcmV0cmFpbl9saW5rKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lE X0FUSEVST1MsIDB4MDAzNCwKKwkJCSBxdWlya19ub19idXNfcmVzZXRfYW5kX25vX3JldHJhaW5f bGluayk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLCAw eDAwM2MsCisJCQkgcXVpcmtfbm9fYnVzX3Jlc2V0X2FuZF9ub19yZXRyYWluX2xpbmspOworCitz dGF0aWMgdm9pZCBxdWlya19ub19idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlk ZXYtPmRldl9mbGFncyB8PSBQQ0lfREVWX0ZMQUdTX05PX0JVU19SRVNFVDsKK30KIAogLyoKICAq IFJvb3QgcG9ydCBvbiBzb21lIENhdml1bSBDTjh4eHggY2hpcHMgZG8gbm90IHN1Y2Nlc3NmdWxs eSBjb21wbGV0ZSBhIGJ1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1 ZGUvbGludXgvcGNpLmgKaW5kZXggODZjNzk5Yzk3Yjc3Li5mZGJmNzI1NGU0YWIgMTAwNjQ0Ci0t LSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjI3 LDYgKzIyNyw4IEBAIGVudW0gcGNpX2Rldl9mbGFncyB7CiAJUENJX0RFVl9GTEFHU19OT19GTFJf UkVTRVQgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDEwKSwKIAkvKiBEb24ndCB1 c2UgUmVsYXhlZCBPcmRlcmluZyBmb3IgVExQcyBkaXJlY3RlZCBhdCB0aGlzIGRldmljZSAqLwog CVBDSV9ERVZfRkxBR1NfTk9fUkVMQVhFRF9PUkRFUklORyA9IChfX2ZvcmNlIHBjaV9kZXZfZmxh Z3NfdCkgKDEgPDwgMTEpLAorCS8qIERvbid0IFJldHJhaW4gTGluayBmb3IgZGV2aWNlIHdoZW4g YnJpZGdlIGlzIG5vdCBpbiBHRU4xIG1vZGUgKi8KKwlQQ0lfREVWX0ZMQUdTX05PX1JFVFJBSU5f TElOS19XSEVOX05PVF9HRU4xID0gKF9fZm9yY2UgcGNpX2Rldl9mbGFnc190KSAoMSA8PCAxMiks CiB9OwogCiBlbnVtIHBjaV9pcnFfcmVyb3V0ZV92YXJpYW50IHsKLS0gCjIuMjAuMQoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmF0aDEwayBtYWlsaW5n IGxpc3QKYXRoMTBrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9hdGgxMGsK