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.7 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,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 C882DC43460 for ; Thu, 6 May 2021 15:34:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 874EC613EC for ; Thu, 6 May 2021 15:34:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235787AbhEFPeL (ORCPT ); Thu, 6 May 2021 11:34:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:45934 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235591AbhEFPdt (ORCPT ); Thu, 6 May 2021 11:33:49 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3FFB261444; Thu, 6 May 2021 15:32:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315171; bh=BNybo/imm7XJtoxFMKGPLmZE6NxN+kmKnZtaTUumbOU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VwIB4YyNY1qalXOuifdY/OX5Lr5ZidlVIaCsWkaCvH96DGZoQbfGYIf5ISVob5+KE pN5GegVfTHQ1KT+VK+tlRGJMH8onCaGV4sPkRiymB1JxdF2H12vBvuw8IyfyNhFnWK QQ1/Bq9NXvpvj3yTVBhL1YsuZoK3IFcSTj+QDJuiKxl5qfBxrGd0ezg4Pu0T1tgbZz ROZm4n41SXYyFFZKCXb+TobGeOc3oPmtIGKt1TT4TGXxWT/2XYAlY9+rQU/gaKm/Kf kodHF+9TrPMtie4G61xkoDnbSsIrBWB2+yeujXWJKQrX4r6MSm4hwczG3Zem8DCd2f JvTrdf6qptqMQ== Received: by pali.im (Postfix) id E76C08A1; Thu, 6 May 2021 17:32:50 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Thomas Petazzoni , Rob Herring , Bjorn Helgaas Cc: Russell King , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Remi Pommarel , Xogium , Tomasz Maciej Nowak , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 23/42] PCI: aardvark: Fix support for ERR interrupt on emulated bridge Date: Thu, 6 May 2021 17:31:34 +0200 Message-Id: <20210506153153.30454-24-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210506153153.30454-1-pali@kernel.org> References: <20210506153153.30454-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 ERR interrupt is triggered when corresponding bit is unmasked in both ISR0 and PCI_EXP_DEVCTL registers. Unmasking ERR bits in PCI_EXP_DEVCTL register is not enough. This means that currently the ERR interrupt is never triggered. Unmask ERR bits in ISR0 register at driver probe time. ERR interrupt is not triggered until ERR bits are unmasked also in PCI_EXP_DEVCTL register, which is done by AER driver. So it is safe to unconditionally unmask all ERR bits in aardvark probe. Aardvark HW sets PCI_ERR_ROOT_AER_IRQ to zero and when corresponding bits in ISR0 and PCI_EXP_DEVCTL are enabled, the HW triggers a generic interrupt on GIC. Chain this interrupt to PCIe interrupt 0 with generic_handle_irq() to allow processing of ERR interrupts. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Fixes: 8a3ebd8de328 ("PCI: aardvark: Implement emulated root PCI bridge config space") Cc: stable@vger.kernel.org --- drivers/pci/controller/pci-aardvark.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 8a5133226e41..2ea58ba10a97 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -104,6 +104,9 @@ #define PCIE_MSG_PM_PME_MASK BIT(7) #define PCIE_ISR0_MASK_REG (CONTROL_BASE_ADDR + 0x44) #define PCIE_ISR0_MSI_INT_PENDING BIT(24) +#define PCIE_ISR0_CORR_ERR BIT(11) +#define PCIE_ISR0_NFAT_ERR BIT(12) +#define PCIE_ISR0_FAT_ERR BIT(13) #define PCIE_ISR0_INTX_ASSERT(val) BIT(16 + (val)) #define PCIE_ISR0_INTX_DEASSERT(val) BIT(20 + (val)) #define PCIE_ISR0_ALL_MASK GENMASK(26, 0) @@ -416,6 +419,11 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie) reg &= ~PCIE_ISR0_MSI_INT_PENDING; advk_writel(pcie, reg, PCIE_ISR0_MASK_REG); + /* Unmask bits for ERR interrupt */ + reg = advk_readl(pcie, PCIE_ISR0_MASK_REG); + reg &= ~(PCIE_ISR0_FAT_ERR | PCIE_ISR0_NFAT_ERR | PCIE_ISR0_CORR_ERR); + advk_writel(pcie, reg, PCIE_ISR0_MASK_REG); + /* Enable summary interrupt for GIC SPI source */ reg = PCIE_IRQ_ALL_MASK & (~PCIE_IRQ_ENABLE_INTS_MASK); advk_writel(pcie, reg, HOST_CTRL_INT_MASK_REG); @@ -1195,6 +1203,7 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) { u32 isr0_val, isr0_mask, isr0_status; u32 isr1_val, isr1_mask, isr1_status; + u32 err_bits; int i, virq; isr0_val = advk_readl(pcie, PCIE_ISR0_REG); @@ -1205,9 +1214,22 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG); isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK); + err_bits = isr0_status & (PCIE_ISR0_FAT_ERR | PCIE_ISR0_NFAT_ERR | PCIE_ISR0_CORR_ERR); + if (!isr0_status && !isr1_status) return; + /* Process ERR interrupt */ + if (err_bits) { + advk_writel(pcie, err_bits, PCIE_ISR0_REG); + /* Aardvark HW returns zero for PCI_ERR_ROOT_AER_IRQ, so use PCIe interrupt 0 */ + virq = irq_find_mapping(pcie->irq_domain, 0); + if (virq) + generic_handle_irq(virq); + else + dev_err(&pcie->pdev->dev, "unexpected ERR IRQ\n"); + } + /* Process MSI interrupts */ if (isr0_status & PCIE_ISR0_MSI_INT_PENDING) advk_pcie_handle_msi(pcie); -- 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.7 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 68673C43470 for ; Thu, 6 May 2021 16:03:53 +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 E81856113E for ; Thu, 6 May 2021 16:03:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E81856113E 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+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=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=BWlstWbWcFTScFfISqW9hZKsXIICLj/lcm1MZ2nSELA=; b=JIV+wexv2h7nKEkRTNnRQwtOx SsAaxfvhpP50d96N/XbLWyer2uIkeg8Gr7NUsvLSGMkBMmZ9xFr7Ny75XsX6oLX13r2Sj5FjwOm4N 3s+QC8RKEgsLWwtB6nAIJwQPpDyo5ilJZtCWk6PSd+c0hc+ZNZyMv0LzmI4sk/JTDnjpuefndHW7a G8gR15frHeh4EWYZwadwqGQSlXW9tzc9WDAIs2E0+jjALDru6iBb5OwlBsaxqlqpEh9XXCbHEQ0fT bQR2lMivfa8H2AW28bGuxwhtZvtWD/Q6SqudTNvwMdV73uqCMxh7lwRVNs/bGfHCvExllgZAsXb2o q0JygNX0A==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1legDO-004ekN-12; Thu, 06 May 2021 15:47:02 +0000 Received: from mail.kernel.org ([198.145.29.99]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzl-004a4K-Qk for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 15:33:03 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3FFB261444; Thu, 6 May 2021 15:32:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315171; bh=BNybo/imm7XJtoxFMKGPLmZE6NxN+kmKnZtaTUumbOU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VwIB4YyNY1qalXOuifdY/OX5Lr5ZidlVIaCsWkaCvH96DGZoQbfGYIf5ISVob5+KE pN5GegVfTHQ1KT+VK+tlRGJMH8onCaGV4sPkRiymB1JxdF2H12vBvuw8IyfyNhFnWK QQ1/Bq9NXvpvj3yTVBhL1YsuZoK3IFcSTj+QDJuiKxl5qfBxrGd0ezg4Pu0T1tgbZz ROZm4n41SXYyFFZKCXb+TobGeOc3oPmtIGKt1TT4TGXxWT/2XYAlY9+rQU/gaKm/Kf kodHF+9TrPMtie4G61xkoDnbSsIrBWB2+yeujXWJKQrX4r6MSm4hwczG3Zem8DCd2f JvTrdf6qptqMQ== Received: by pali.im (Postfix) id E76C08A1; Thu, 6 May 2021 17:32:50 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Thomas Petazzoni , Rob Herring , Bjorn Helgaas Cc: Russell King , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Remi Pommarel , Xogium , Tomasz Maciej Nowak , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 23/42] PCI: aardvark: Fix support for ERR interrupt on emulated bridge Date: Thu, 6 May 2021 17:31:34 +0200 Message-Id: <20210506153153.30454-24-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210506153153.30454-1-pali@kernel.org> References: <20210506153153.30454-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210506_163258_610904_ED78B66F X-CRM114-Status: GOOD ( 13.76 ) 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 RVJSIGludGVycnVwdCBpcyB0cmlnZ2VyZWQgd2hlbiBjb3JyZXNwb25kaW5nIGJpdCBpcyB1bm1h c2tlZCBpbiBib3RoIElTUjAKYW5kIFBDSV9FWFBfREVWQ1RMIHJlZ2lzdGVycy4gVW5tYXNraW5n IEVSUiBiaXRzIGluIFBDSV9FWFBfREVWQ1RMIHJlZ2lzdGVyCmlzIG5vdCBlbm91Z2guIFRoaXMg bWVhbnMgdGhhdCBjdXJyZW50bHkgdGhlIEVSUiBpbnRlcnJ1cHQgaXMgbmV2ZXIKdHJpZ2dlcmVk LgoKVW5tYXNrIEVSUiBiaXRzIGluIElTUjAgcmVnaXN0ZXIgYXQgZHJpdmVyIHByb2JlIHRpbWUu IEVSUiBpbnRlcnJ1cHQgaXMgbm90CnRyaWdnZXJlZCB1bnRpbCBFUlIgYml0cyBhcmUgdW5tYXNr ZWQgYWxzbyBpbiBQQ0lfRVhQX0RFVkNUTCByZWdpc3RlciwKd2hpY2ggaXMgZG9uZSBieSBBRVIg ZHJpdmVyLiBTbyBpdCBpcyBzYWZlIHRvIHVuY29uZGl0aW9uYWxseSB1bm1hc2sgYWxsCkVSUiBi aXRzIGluIGFhcmR2YXJrIHByb2JlLgoKQWFyZHZhcmsgSFcgc2V0cyBQQ0lfRVJSX1JPT1RfQUVS X0lSUSB0byB6ZXJvIGFuZCB3aGVuIGNvcnJlc3BvbmRpbmcgYml0cwppbiBJU1IwIGFuZCBQQ0lf RVhQX0RFVkNUTCBhcmUgZW5hYmxlZCwgdGhlIEhXIHRyaWdnZXJzIGEgZ2VuZXJpYyBpbnRlcnJ1 cHQKb24gR0lDLiBDaGFpbiB0aGlzIGludGVycnVwdCB0byBQQ0llIGludGVycnVwdCAwIHdpdGgg Z2VuZXJpY19oYW5kbGVfaXJxKCkKdG8gYWxsb3cgcHJvY2Vzc2luZyBvZiBFUlIgaW50ZXJydXB0 cy4KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+ClJldmlld2Vk LWJ5OiBNYXJlayBCZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+CkZpeGVzOiA4YTNlYmQ4ZGUzMjgg KCJQQ0k6IGFhcmR2YXJrOiBJbXBsZW1lbnQgZW11bGF0ZWQgcm9vdCBQQ0kgYnJpZGdlIGNvbmZp ZyBzcGFjZSIpCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCi0tLQogZHJpdmVycy9wY2kvY29u dHJvbGxlci9wY2ktYWFyZHZhcmsuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29u dHJvbGxlci9wY2ktYWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2 YXJrLmMKaW5kZXggOGE1MTMzMjI2ZTQxLi4yZWE1OGJhMTBhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9wY2ktYWFyZHZhcmsuYwpAQCAtMTA0LDYgKzEwNCw5IEBACiAjZGVmaW5lIFBDSUVfTVNH X1BNX1BNRV9NQVNLCQkJQklUKDcpCiAjZGVmaW5lIFBDSUVfSVNSMF9NQVNLX1JFRwkJCShDT05U Uk9MX0JBU0VfQUREUiArIDB4NDQpCiAjZGVmaW5lICAgICBQQ0lFX0lTUjBfTVNJX0lOVF9QRU5E SU5HCQlCSVQoMjQpCisjZGVmaW5lICAgICBQQ0lFX0lTUjBfQ09SUl9FUlIJCQlCSVQoMTEpCisj ZGVmaW5lICAgICBQQ0lFX0lTUjBfTkZBVF9FUlIJCQlCSVQoMTIpCisjZGVmaW5lICAgICBQQ0lF X0lTUjBfRkFUX0VSUgkJCUJJVCgxMykKICNkZWZpbmUgICAgIFBDSUVfSVNSMF9JTlRYX0FTU0VS VCh2YWwpCQlCSVQoMTYgKyAodmFsKSkKICNkZWZpbmUgICAgIFBDSUVfSVNSMF9JTlRYX0RFQVNT RVJUKHZhbCkJQklUKDIwICsgKHZhbCkpCiAjZGVmaW5lCSAgICBQQ0lFX0lTUjBfQUxMX01BU0sJ CQlHRU5NQVNLKDI2LCAwKQpAQCAtNDE2LDYgKzQxOSwxMSBAQCBzdGF0aWMgdm9pZCBhZHZrX3Bj aWVfc2V0dXBfaHcoc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKIAlyZWcgJj0gflBDSUVfSVNSMF9N U0lfSU5UX1BFTkRJTkc7CiAJYWR2a193cml0ZWwocGNpZSwgcmVnLCBQQ0lFX0lTUjBfTUFTS19S RUcpOwogCisJLyogVW5tYXNrIGJpdHMgZm9yIEVSUiBpbnRlcnJ1cHQgKi8KKwlyZWcgPSBhZHZr X3JlYWRsKHBjaWUsIFBDSUVfSVNSMF9NQVNLX1JFRyk7CisJcmVnICY9IH4oUENJRV9JU1IwX0ZB VF9FUlIgfCBQQ0lFX0lTUjBfTkZBVF9FUlIgfCBQQ0lFX0lTUjBfQ09SUl9FUlIpOworCWFkdmtf d3JpdGVsKHBjaWUsIHJlZywgUENJRV9JU1IwX01BU0tfUkVHKTsKKwogCS8qIEVuYWJsZSBzdW1t YXJ5IGludGVycnVwdCBmb3IgR0lDIFNQSSBzb3VyY2UgKi8KIAlyZWcgPSBQQ0lFX0lSUV9BTExf TUFTSyAmICh+UENJRV9JUlFfRU5BQkxFX0lOVFNfTUFTSyk7CiAJYWR2a193cml0ZWwocGNpZSwg cmVnLCBIT1NUX0NUUkxfSU5UX01BU0tfUkVHKTsKQEAgLTExOTUsNiArMTIwMyw3IEBAIHN0YXRp YyB2b2lkIGFkdmtfcGNpZV9oYW5kbGVfaW50KHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJ dTMyIGlzcjBfdmFsLCBpc3IwX21hc2ssIGlzcjBfc3RhdHVzOwogCXUzMiBpc3IxX3ZhbCwgaXNy MV9tYXNrLCBpc3IxX3N0YXR1czsKKwl1MzIgZXJyX2JpdHM7CiAJaW50IGksIHZpcnE7CiAKIAlp c3IwX3ZhbCA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9JU1IwX1JFRyk7CkBAIC0xMjA1LDkgKzEy MTQsMjIgQEAgc3RhdGljIHZvaWQgYWR2a19wY2llX2hhbmRsZV9pbnQoc3RydWN0IGFkdmtfcGNp ZSAqcGNpZSkKIAlpc3IxX21hc2sgPSBhZHZrX3JlYWRsKHBjaWUsIFBDSUVfSVNSMV9NQVNLX1JF Ryk7CiAJaXNyMV9zdGF0dXMgPSBpc3IxX3ZhbCAmICgofmlzcjFfbWFzaykgJiBQQ0lFX0lTUjFf QUxMX01BU0spOwogCisJZXJyX2JpdHMgPSBpc3IwX3N0YXR1cyAmIChQQ0lFX0lTUjBfRkFUX0VS UiB8IFBDSUVfSVNSMF9ORkFUX0VSUiB8IFBDSUVfSVNSMF9DT1JSX0VSUik7CisKIAlpZiAoIWlz cjBfc3RhdHVzICYmICFpc3IxX3N0YXR1cykKIAkJcmV0dXJuOwogCisJLyogUHJvY2VzcyBFUlIg aW50ZXJydXB0ICovCisJaWYgKGVycl9iaXRzKSB7CisJCWFkdmtfd3JpdGVsKHBjaWUsIGVycl9i aXRzLCBQQ0lFX0lTUjBfUkVHKTsKKwkJLyogQWFyZHZhcmsgSFcgcmV0dXJucyB6ZXJvIGZvciBQ Q0lfRVJSX1JPT1RfQUVSX0lSUSwgc28gdXNlIFBDSWUgaW50ZXJydXB0IDAgKi8KKwkJdmlycSA9 IGlycV9maW5kX21hcHBpbmcocGNpZS0+aXJxX2RvbWFpbiwgMCk7CisJCWlmICh2aXJxKQorCQkJ Z2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCQllbHNlCisJCQlkZXZfZXJyKCZwY2llLT5wZGV2 LT5kZXYsICJ1bmV4cGVjdGVkIEVSUiBJUlFcbiIpOworCX0KKwogCS8qIFByb2Nlc3MgTVNJIGlu dGVycnVwdHMgKi8KIAlpZiAoaXNyMF9zdGF0dXMgJiBQQ0lFX0lTUjBfTVNJX0lOVF9QRU5ESU5H KQogCQlhZHZrX3BjaWVfaGFuZGxlX21zaShwY2llKTsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK