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=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 C9646C433E0 for ; Thu, 18 Jun 2020 02:39:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A890220720 for ; Thu, 18 Jun 2020 02:39:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592447974; bh=Ofauh1tBppSKUpqFNfZSf4nuYCyIJ5cLtkEC6ulDfek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=V6CY7q8LTJNzxD99/JPBviFzyzuHxV7yuA11/EpxGDqjYSUXsUq3E3nlaOhtuOyKV 4xsI2BaMXbSoJ8uoxDMv0IOZl+UTE6L9ec0XsdPxAvbEshTllghBugBQdVWtMArK6U kG2hi37qxU8SfWVv+m5ydqv/pinMqAmcmplOx0sY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729025AbgFRBM7 (ORCPT ); Wed, 17 Jun 2020 21:12:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:41834 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729018AbgFRBM6 (ORCPT ); Wed, 17 Jun 2020 21:12:58 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4590C221ED; Thu, 18 Jun 2020 01:12:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592442777; bh=Ofauh1tBppSKUpqFNfZSf4nuYCyIJ5cLtkEC6ulDfek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y5itvmspFirUGLJ7e4a4hbJeCNnbdXNJ81Lek596J2A8OXmbCLtcg2roRUb8aowDn /gW1dwnCKHocalOTC6uxHXstGX56M9VCj9tWfJiiVpKUuLIHtQmHCVkbcygGUMJFYJ v3SaIX/1KpgXnOoJUOGyCS11unp6HeMOVHg7gGm8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Pali=20Roh=C3=A1r?= , Tomasz Maciej Nowak , Lorenzo Pieralisi , Thomas Petazzoni , Sasha Levin , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH AUTOSEL 5.7 223/388] PCI: aardvark: Issue PERST via GPIO Date: Wed, 17 Jun 2020 21:05:20 -0400 Message-Id: <20200618010805.600873-223-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200618010805.600873-1-sashal@kernel.org> References: <20200618010805.600873-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: Pali Rohár [ Upstream commit 5169a9851daaa2782a7bd2bb83d5b1bd224b2879 ] Add support for issuing PERST via GPIO specified in 'reset-gpios' property (as described in PCI device tree bindings). Some buggy cards (e.g. Compex WLE900VX or WLE1216) are not detected after reboot when PERST is not issued during driver initialization. If bootloader already enabled link training then issuing PERST has no effect for some buggy cards (e.g. Compex WLE900VX) and these cards are not detected. We therefore clear the LINK_TRAINING_EN register before. It was observed that Compex WLE900VX card needs to be in PERST reset for at least 10ms if bootloader enabled link training. Tested on Turris MOX. Link: https://lore.kernel.org/r/20200430080625.26070-6-pali@kernel.org Tested-by: Tomasz Maciej Nowak Signed-off-by: Pali Rohár Signed-off-by: Lorenzo Pieralisi Acked-by: Thomas Petazzoni Signed-off-by: Sasha Levin --- drivers/pci/controller/pci-aardvark.c | 43 ++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index e202f954eb84..2ecc79c03ade 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -9,6 +9,7 @@ */ #include +#include #include #include #include @@ -18,6 +19,7 @@ #include #include #include +#include #include #include "../pci.h" @@ -204,6 +206,7 @@ struct advk_pcie { int root_bus_nr; int link_gen; struct pci_bridge_emul bridge; + struct gpio_desc *reset_gpio; }; static inline void advk_writel(struct advk_pcie *pcie, u32 val, u64 reg) @@ -330,10 +333,31 @@ static void advk_pcie_train_link(struct advk_pcie *pcie) dev_err(dev, "link never came up\n"); } +static void advk_pcie_issue_perst(struct advk_pcie *pcie) +{ + u32 reg; + + if (!pcie->reset_gpio) + return; + + /* PERST does not work for some cards when link training is enabled */ + reg = advk_readl(pcie, PCIE_CORE_CTRL0_REG); + reg &= ~LINK_TRAINING_EN; + advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG); + + /* 10ms delay is needed for some cards */ + dev_info(&pcie->pdev->dev, "issuing PERST via reset GPIO for 10ms\n"); + gpiod_set_value_cansleep(pcie->reset_gpio, 1); + usleep_range(10000, 11000); + gpiod_set_value_cansleep(pcie->reset_gpio, 0); +} + static void advk_pcie_setup_hw(struct advk_pcie *pcie) { u32 reg; + advk_pcie_issue_perst(pcie); + /* Set to Direct mode */ reg = advk_readl(pcie, CTRL_CONFIG_REG); reg &= ~(CTRL_MODE_MASK << CTRL_MODE_SHIFT); @@ -406,7 +430,8 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie) /* * PERST# signal could have been asserted by pinctrl subsystem before - * probe() callback has been called, making the endpoint going into + * probe() callback has been called or issued explicitly by reset gpio + * function advk_pcie_issue_perst(), making the endpoint going into * fundamental reset. As required by PCI Express spec a delay for at * least 100ms after such a reset before link training is needed. */ @@ -1046,6 +1071,22 @@ static int advk_pcie_probe(struct platform_device *pdev) } pcie->root_bus_nr = bus->start; + pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node, + "reset-gpios", 0, + GPIOD_OUT_LOW, + "pcie1-reset"); + ret = PTR_ERR_OR_ZERO(pcie->reset_gpio); + if (ret) { + if (ret == -ENOENT) { + pcie->reset_gpio = NULL; + } else { + if (ret != -EPROBE_DEFER) + dev_err(dev, "Failed to get reset-gpio: %i\n", + ret); + return ret; + } + } + ret = of_pci_get_max_link_speed(dev->of_node); if (ret <= 0 || ret > 3) pcie->link_gen = 3; -- 2.25.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=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 A3FF3C433E0 for ; Thu, 18 Jun 2020 01:25:13 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0955121D80 for ; Thu, 18 Jun 2020 01:25:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="adZLuTw6"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="Y5itvmsp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0955121D80 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OShqZHJV6cBQLDEHqP+h6+vBOuuMC3KxIEogEBhmur0=; b=adZLuTw6NPlgwg TnXMNsJM1tKg0+nO8KtWpfRiNoBIjheWeOp6RilVe974QYaveB8znc3Lwf/VREjl8oTqYmb3smpNI OOWse/dTxXcuH4zB4B7vizj9nT9VDB1zVwKtT+tBObPUkw+mhsW1f7H5+DgP2QqJIYCGZNyUSPSQB kMD4rlnktEbJtucowI7zSsB4BJv6LlAO5q0oa1VdyezYSxhi1DrY3iMU1tuO+J0oI6UYXiuOARBWN 407ZkEy5sGRrCLm3typMYV0gR6Ptrfh04KOSOfE83QJPsav9HioXcuwSUhyPaEMDYsmm9TwKN8MgJ MMz0yZdjnT1KjcpnjYCQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jljIa-00082k-LL; Thu, 18 Jun 2020 01:25:00 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jlj6v-0002U3-R6 for linux-arm-kernel@lists.infradead.org; Thu, 18 Jun 2020 01:12:59 +0000 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4590C221ED; Thu, 18 Jun 2020 01:12:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592442777; bh=Ofauh1tBppSKUpqFNfZSf4nuYCyIJ5cLtkEC6ulDfek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y5itvmspFirUGLJ7e4a4hbJeCNnbdXNJ81Lek596J2A8OXmbCLtcg2roRUb8aowDn /gW1dwnCKHocalOTC6uxHXstGX56M9VCj9tWfJiiVpKUuLIHtQmHCVkbcygGUMJFYJ v3SaIX/1KpgXnOoJUOGyCS11unp6HeMOVHg7gGm8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH AUTOSEL 5.7 223/388] PCI: aardvark: Issue PERST via GPIO Date: Wed, 17 Jun 2020 21:05:20 -0400 Message-Id: <20200618010805.600873-223-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200618010805.600873-1-sashal@kernel.org> References: <20200618010805.600873-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200617_181257_928745_CB13A01E X-CRM114-Status: GOOD ( 17.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomasz Maciej Nowak , Sasha Levin , Lorenzo Pieralisi , linux-pci@vger.kernel.org, Thomas Petazzoni , =?UTF-8?q?Pali=20Roh=C3=A1r?= , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClsgVXBzdHJlYW0gY29tbWl0IDUx NjlhOTg1MWRhYWEyNzgyYTdiZDJiYjgzZDViMWJkMjI0YjI4NzkgXQoKQWRkIHN1cHBvcnQgZm9y IGlzc3VpbmcgUEVSU1QgdmlhIEdQSU8gc3BlY2lmaWVkIGluICdyZXNldC1ncGlvcycKcHJvcGVy dHkgKGFzIGRlc2NyaWJlZCBpbiBQQ0kgZGV2aWNlIHRyZWUgYmluZGluZ3MpLgoKU29tZSBidWdn eSBjYXJkcyAoZS5nLiBDb21wZXggV0xFOTAwVlggb3IgV0xFMTIxNikgYXJlIG5vdCBkZXRlY3Rl ZAphZnRlciByZWJvb3Qgd2hlbiBQRVJTVCBpcyBub3QgaXNzdWVkIGR1cmluZyBkcml2ZXIgaW5p dGlhbGl6YXRpb24uCgpJZiBib290bG9hZGVyIGFscmVhZHkgZW5hYmxlZCBsaW5rIHRyYWluaW5n IHRoZW4gaXNzdWluZyBQRVJTVCBoYXMgbm8KZWZmZWN0IGZvciBzb21lIGJ1Z2d5IGNhcmRzIChl LmcuIENvbXBleCBXTEU5MDBWWCkgYW5kIHRoZXNlIGNhcmRzIGFyZQpub3QgZGV0ZWN0ZWQuIFdl IHRoZXJlZm9yZSBjbGVhciB0aGUgTElOS19UUkFJTklOR19FTiByZWdpc3RlciBiZWZvcmUuCgpJ dCB3YXMgb2JzZXJ2ZWQgdGhhdCBDb21wZXggV0xFOTAwVlggY2FyZCBuZWVkcyB0byBiZSBpbiBQ RVJTVCByZXNldApmb3IgYXQgbGVhc3QgMTBtcyBpZiBib290bG9hZGVyIGVuYWJsZWQgbGluayB0 cmFpbmluZy4KClRlc3RlZCBvbiBUdXJyaXMgTU9YLgoKTGluazogaHR0cHM6Ly9sb3JlLmtlcm5l bC5vcmcvci8yMDIwMDQzMDA4MDYyNS4yNjA3MC02LXBhbGlAa2VybmVsLm9yZwpUZXN0ZWQtYnk6 IFRvbWFzeiBNYWNpZWogTm93YWsgPHRtbjUwNUBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IFBh bGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IExvcmVuem8gUGllcmFs aXNpIDxsb3JlbnpvLnBpZXJhbGlzaUBhcm0uY29tPgpBY2tlZC1ieTogVGhvbWFzIFBldGF6em9u aSA8dGhvbWFzLnBldGF6em9uaUBib290bGluLmNvbT4KU2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2 aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFh cmR2YXJrLmMgfCA0MyArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2Vk LCA0MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp LWFhcmR2YXJrLmMKaW5kZXggZTIwMmY5NTRlYjg0Li4yZWNjNzljMDNhZGUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKKysrIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogCiAjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgv aXJxZG9tYWluLmg+CkBAIC0xOCw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9w Y2kuaD4KIAogI2luY2x1ZGUgIi4uL3BjaS5oIgpAQCAtMjA0LDYgKzIwNiw3IEBAIHN0cnVjdCBh ZHZrX3BjaWUgewogCWludCByb290X2J1c19ucjsKIAlpbnQgbGlua19nZW47CiAJc3RydWN0IHBj aV9icmlkZ2VfZW11bCBicmlkZ2U7CisJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKIH07 CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZHZrX3dyaXRlbChzdHJ1Y3QgYWR2a19wY2llICpwY2ll LCB1MzIgdmFsLCB1NjQgcmVnKQpAQCAtMzMwLDEwICszMzMsMzEgQEAgc3RhdGljIHZvaWQgYWR2 a19wY2llX3RyYWluX2xpbmsoc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKIAlkZXZfZXJyKGRldiwg ImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIGFkdmtfcGNpZV9pc3N1 ZV9wZXJzdChzdHJ1Y3QgYWR2a19wY2llICpwY2llKQoreworCXUzMiByZWc7CisKKwlpZiAoIXBj aWUtPnJlc2V0X2dwaW8pCisJCXJldHVybjsKKworCS8qIFBFUlNUIGRvZXMgbm90IHdvcmsgZm9y IHNvbWUgY2FyZHMgd2hlbiBsaW5rIHRyYWluaW5nIGlzIGVuYWJsZWQgKi8KKwlyZWcgPSBhZHZr X3JlYWRsKHBjaWUsIFBDSUVfQ09SRV9DVFJMMF9SRUcpOworCXJlZyAmPSB+TElOS19UUkFJTklO R19FTjsKKwlhZHZrX3dyaXRlbChwY2llLCByZWcsIFBDSUVfQ09SRV9DVFJMMF9SRUcpOworCisJ LyogMTBtcyBkZWxheSBpcyBuZWVkZWQgZm9yIHNvbWUgY2FyZHMgKi8KKwlkZXZfaW5mbygmcGNp ZS0+cGRldi0+ZGV2LCAiaXNzdWluZyBQRVJTVCB2aWEgcmVzZXQgR1BJTyBmb3IgMTBtc1xuIik7 CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBjaWUtPnJlc2V0X2dwaW8sIDEpOworCXVzbGVl cF9yYW5nZSgxMDAwMCwgMTEwMDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwY2llLT5y ZXNldF9ncGlvLCAwKTsKK30KKwogc3RhdGljIHZvaWQgYWR2a19wY2llX3NldHVwX2h3KHN0cnVj dCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJdTMyIHJlZzsKIAorCWFkdmtfcGNpZV9pc3N1ZV9wZXJz dChwY2llKTsKKwogCS8qIFNldCB0byBEaXJlY3QgbW9kZSAqLwogCXJlZyA9IGFkdmtfcmVhZGwo cGNpZSwgQ1RSTF9DT05GSUdfUkVHKTsKIAlyZWcgJj0gfihDVFJMX01PREVfTUFTSyA8PCBDVFJM X01PREVfU0hJRlQpOwpAQCAtNDA2LDcgKzQzMCw4IEBAIHN0YXRpYyB2b2lkIGFkdmtfcGNpZV9z ZXR1cF9odyhzdHJ1Y3QgYWR2a19wY2llICpwY2llKQogCiAJLyoKIAkgKiBQRVJTVCMgc2lnbmFs IGNvdWxkIGhhdmUgYmVlbiBhc3NlcnRlZCBieSBwaW5jdHJsIHN1YnN5c3RlbSBiZWZvcmUKLQkg KiBwcm9iZSgpIGNhbGxiYWNrIGhhcyBiZWVuIGNhbGxlZCwgbWFraW5nIHRoZSBlbmRwb2ludCBn b2luZyBpbnRvCisJICogcHJvYmUoKSBjYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQgb3IgaXNzdWVk IGV4cGxpY2l0bHkgYnkgcmVzZXQgZ3BpbworCSAqIGZ1bmN0aW9uIGFkdmtfcGNpZV9pc3N1ZV9w ZXJzdCgpLCBtYWtpbmcgdGhlIGVuZHBvaW50IGdvaW5nIGludG8KIAkgKiBmdW5kYW1lbnRhbCBy ZXNldC4gQXMgcmVxdWlyZWQgYnkgUENJIEV4cHJlc3Mgc3BlYyBhIGRlbGF5IGZvciBhdAogCSAq IGxlYXN0IDEwMG1zIGFmdGVyIHN1Y2ggYSByZXNldCBiZWZvcmUgbGluayB0cmFpbmluZyBpcyBu ZWVkZWQuCiAJICovCkBAIC0xMDQ2LDYgKzEwNzEsMjIgQEAgc3RhdGljIGludCBhZHZrX3BjaWVf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAl9CiAJcGNpZS0+cm9vdF9idXNf bnIgPSBidXMtPnN0YXJ0OwogCisJcGNpZS0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X2Zy b21fb2Zfbm9kZShkZXYsIGRldi0+b2Zfbm9kZSwKKwkJCQkJCSAgICAgICAicmVzZXQtZ3Bpb3Mi LCAwLAorCQkJCQkJICAgICAgIEdQSU9EX09VVF9MT1csCisJCQkJCQkgICAgICAgInBjaWUxLXJl c2V0Iik7CisJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHBjaWUtPnJlc2V0X2dwaW8pOworCWlmIChy ZXQpIHsKKwkJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCQlwY2llLT5yZXNldF9ncGlvID0gTlVM TDsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgcmVzZXQtZ3BpbzogJWlcbiIsCisJCQkJCXJldCk7CisJCQly ZXR1cm4gcmV0OworCQl9CisJfQorCiAJcmV0ID0gb2ZfcGNpX2dldF9tYXhfbGlua19zcGVlZChk ZXYtPm9mX25vZGUpOwogCWlmIChyZXQgPD0gMCB8fCByZXQgPiAzKQogCQlwY2llLT5saW5rX2dl biA9IDM7Ci0tIAoyLjI1LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==