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 D41F0C43461 for ; Thu, 6 May 2021 15:34:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A408D613BA for ; Thu, 6 May 2021 15:34:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235911AbhEFPfr (ORCPT ); Thu, 6 May 2021 11:35:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:46638 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235770AbhEFPeC (ORCPT ); Thu, 6 May 2021 11:34:02 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6ABBD613C2; Thu, 6 May 2021 15:32:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315176; bh=YnX8Fz29kf60K0H0Lln7W4fAoz60MdG7mey2fziRxCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pGwE/af0ZzxIt4YljcqEMGH5eX1G4XH0FH/wq+Wu6hGOXOHP5EeITwkQfvf51FGeC GCnpT701QVw8HwwEhHZFk1AaUsuuL8itj9fzS7YYndCijD17qAmaHdoKM3H1gGA+wu U0G3bzUuH3WT1bEes0ympfcQVARGKDmnkDuKV0tYxjJenwtxklvC4nBlL3+TwcpbPg XYLMT3gN3RovN8opGcjvQtwWdbSRUIQyV8irPJLXRtL1ZDC7gSt63FHQ+J65Nhxxx9 jyBmvDS/SwzxblHuMWGp4e5Wigf/8tMtSQy85leCb1ECXTDpXX6joQ3eOe6sgkJeoM yJzLTerKqCSjQ== Received: by pali.im (Postfix) id 249398A1; Thu, 6 May 2021 17:32:56 +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 42/42] PCI: aardvark: Add support for Advanced Error Reporting registers on emulated bridge Date: Thu, 6 May 2021 17:31:53 +0200 Message-Id: <20210506153153.30454-43-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 PCI aardvark hardware supports access to Advanced Error Reporting configuration registers of PCIe core via PCIE_CORE_PCIERR_CAP. Export them via emulated software root bridge through the new .read_ext and .write_ext emulated bridge callbacks. Note that in Advanced Error Reporting Capability header, the offset to the next Extended Capability header is set, but it is not documented in Armada 3700 Functional Specification. As this change adds support only for Advanced Error Reporting, explicitly clear PCI_EXT_CAP_NEXT bits in AER capability header. After this change, pcieport driver correctly detects AER support and allows PCIe AER driver to start receiving ERR interrupts. It prints into dmesg: [ 4.358401] pcieport 0000:00:00.0: AER: enabled with IRQ 52 Signed-off-by: Pali Rohár Reviewed-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index ac3ee48e69d7..8914af62ccc3 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -683,11 +683,85 @@ advk_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, } } +static pci_bridge_emul_read_status_t +advk_pci_bridge_emul_ext_conf_read(struct pci_bridge_emul *bridge, + int reg, u32 *value) +{ + struct advk_pcie *pcie = bridge->data; + + switch (reg) { + case 0: + *value = advk_readl(pcie, PCIE_CORE_PCIERR_CAP + reg); + /* + * Clear PCI_EXT_CAP_NEXT bits as they are set to 0x150 offset. + * Armada 3700 Functional Specification does not contain any + * documentation about registers at that address, so explicitly + * mark Advanced Error Reporting Capability header as the end of + * Extended Capabilities. + */ + *value &= 0x000fffff; + return PCI_BRIDGE_EMUL_HANDLED; + + case PCI_ERR_UNCOR_STATUS: + case PCI_ERR_UNCOR_MASK: + case PCI_ERR_UNCOR_SEVER: + case PCI_ERR_COR_STATUS: + case PCI_ERR_COR_MASK: + case PCI_ERR_CAP: + case PCI_ERR_HEADER_LOG+0: + case PCI_ERR_HEADER_LOG+4: + case PCI_ERR_HEADER_LOG+8: + case PCI_ERR_HEADER_LOG+12: + case PCI_ERR_ROOT_COMMAND: + case PCI_ERR_ROOT_STATUS: + case PCI_ERR_ROOT_ERR_SRC: + *value = advk_readl(pcie, PCIE_CORE_PCIERR_CAP + reg); + return PCI_BRIDGE_EMUL_HANDLED; + + default: + return PCI_BRIDGE_EMUL_NOT_HANDLED; + } +} + +static void +advk_pci_bridge_emul_ext_conf_write(struct pci_bridge_emul *bridge, + int reg, u32 old, u32 new, u32 mask) +{ + struct advk_pcie *pcie = bridge->data; + + switch (reg) { + /* These are W1C registers, so clear other bits */ + case PCI_ERR_UNCOR_STATUS: + case PCI_ERR_COR_STATUS: + case PCI_ERR_ROOT_STATUS: + new &= mask; + fallthrough; + + case PCI_ERR_UNCOR_MASK: + case PCI_ERR_UNCOR_SEVER: + case PCI_ERR_COR_MASK: + case PCI_ERR_CAP: + case PCI_ERR_HEADER_LOG+0: + case PCI_ERR_HEADER_LOG+4: + case PCI_ERR_HEADER_LOG+8: + case PCI_ERR_HEADER_LOG+12: + case PCI_ERR_ROOT_COMMAND: + case PCI_ERR_ROOT_ERR_SRC: + advk_writel(pcie, new, PCIE_CORE_PCIERR_CAP + reg); + break; + + default: + break; + } +} + static struct pci_bridge_emul_ops advk_pci_bridge_emul_ops = { .read_base = advk_pci_bridge_emul_base_conf_read, .write_base = advk_pci_bridge_emul_base_conf_write, .read_pcie = advk_pci_bridge_emul_pcie_conf_read, .write_pcie = advk_pci_bridge_emul_pcie_conf_write, + .read_ext = advk_pci_bridge_emul_ext_conf_read, + .write_ext = advk_pci_bridge_emul_ext_conf_write, }; /* -- 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 077D2C433ED for ; Thu, 6 May 2021 16:03:28 +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 8AF6A610E7 for ; Thu, 6 May 2021 16:03:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8AF6A610E7 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=qzKSyvJIFb/0gK5ickT4UmaWs9UEnUtHC31wl92lVB4=; b=Gx+dT1mrkuHR7GClDh2OexQcf QfhoF4wILiOU2ipinBc8de+/jOtpbHimR3yw3ulxBYc66QDIq18FurwLYjKoxq8ga31lr4LRYRSCJ SIMN7ynnTwTY3FTWxfeYbf6d6PgYPR9a6NsUJg04iy31GocBfzNWzn+2311qWPe7OseE+zTq79zn5 CzvFLt33/yy3PvVoYyHg8DAKdA9yF4sazvYgPp/bCtImKQw0ytKWyw5ketKfut8VSC4hqrpEZRuMq /fhEWunW633Iosdq3NoY6wxIi+72AodRt7gIkz8NQsOW5QDEK6uginbBveesYGBa0kV9J1FOy0zlw zjwrNUvSA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1legJT-004gjl-El; Thu, 06 May 2021 15:53:19 +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 1lefzs-004a7c-Tf for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 15:33:05 +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=OckI2xdR+BgglL0reKoUNKh/12FM4WpkOqSKQqJyezg=; b=ZOsaS6AlZcWlrCWA2RSrq6y4MP UN29PVUB0lIYyyW+ub+NSEH7YhfsvxiIuTojTCIEVxCQtcdCV8FmFJ6OQqdA3/M6WaRh1R068i+TO RHvE1W5LAPg+uElKZuuae8cxCRlsaKW/xOWIc3XHnn44MbqDxCrfY9PALsNh18O0hVELsmA1K22kh CLMqZ9jOASCutan9SW+zUcV3a3VktWyPvvckNZ2mBvg7N0GyK/nDglzyLb//b9Z7egjDw0xePz9zX wF63sc6b3oQacQqFglmHrfwShMFx6rW1rheBnRVDHbuSYVkOPz1UxEHg4+Z14oE25cq0gFKe2pQl6 ytarMUYQ==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzn-0069lK-RL for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 15:33:04 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6ABBD613C2; Thu, 6 May 2021 15:32:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315176; bh=YnX8Fz29kf60K0H0Lln7W4fAoz60MdG7mey2fziRxCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pGwE/af0ZzxIt4YljcqEMGH5eX1G4XH0FH/wq+Wu6hGOXOHP5EeITwkQfvf51FGeC GCnpT701QVw8HwwEhHZFk1AaUsuuL8itj9fzS7YYndCijD17qAmaHdoKM3H1gGA+wu U0G3bzUuH3WT1bEes0ympfcQVARGKDmnkDuKV0tYxjJenwtxklvC4nBlL3+TwcpbPg XYLMT3gN3RovN8opGcjvQtwWdbSRUIQyV8irPJLXRtL1ZDC7gSt63FHQ+J65Nhxxx9 jyBmvDS/SwzxblHuMWGp4e5Wigf/8tMtSQy85leCb1ECXTDpXX6joQ3eOe6sgkJeoM yJzLTerKqCSjQ== Received: by pali.im (Postfix) id 249398A1; Thu, 6 May 2021 17:32:56 +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 42/42] PCI: aardvark: Add support for Advanced Error Reporting registers on emulated bridge Date: Thu, 6 May 2021 17:31:53 +0200 Message-Id: <20210506153153.30454-43-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_083259_973427_3CF66120 X-CRM114-Status: GOOD ( 13.54 ) 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 UENJIGFhcmR2YXJrIGhhcmR3YXJlIHN1cHBvcnRzIGFjY2VzcyB0byBBZHZhbmNlZCBFcnJvciBS ZXBvcnRpbmcKY29uZmlndXJhdGlvbiByZWdpc3RlcnMgb2YgUENJZSBjb3JlIHZpYSBQQ0lFX0NP UkVfUENJRVJSX0NBUC4KCkV4cG9ydCB0aGVtIHZpYSBlbXVsYXRlZCBzb2Z0d2FyZSByb290IGJy aWRnZSB0aHJvdWdoIHRoZSBuZXcgLnJlYWRfZXh0IGFuZAoud3JpdGVfZXh0IGVtdWxhdGVkIGJy aWRnZSBjYWxsYmFja3MuCgpOb3RlIHRoYXQgaW4gQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIENh cGFiaWxpdHkgaGVhZGVyLCB0aGUgb2Zmc2V0IHRvIHRoZQpuZXh0IEV4dGVuZGVkIENhcGFiaWxp dHkgaGVhZGVyIGlzIHNldCwgYnV0IGl0IGlzIG5vdCBkb2N1bWVudGVkIGluIEFybWFkYQozNzAw IEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbi4gQXMgdGhpcyBjaGFuZ2UgYWRkcyBzdXBwb3J0IG9u bHkgZm9yCkFkdmFuY2VkIEVycm9yIFJlcG9ydGluZywgZXhwbGljaXRseSBjbGVhciBQQ0lfRVhU X0NBUF9ORVhUIGJpdHMgaW4gQUVSCmNhcGFiaWxpdHkgaGVhZGVyLgoKQWZ0ZXIgdGhpcyBjaGFu Z2UsIHBjaWVwb3J0IGRyaXZlciBjb3JyZWN0bHkgZGV0ZWN0cyBBRVIgc3VwcG9ydCBhbmQgYWxs b3dzClBDSWUgQUVSIGRyaXZlciB0byBzdGFydCByZWNlaXZpbmcgRVJSIGludGVycnVwdHMuIEl0 IHByaW50cyBpbnRvIGRtZXNnOgoKICAgIFsgICAgNC4zNTg0MDFdIHBjaWVwb3J0IDAwMDA6MDA6 MDAuMDogQUVSOiBlbmFibGVkIHdpdGggSVJRIDUyCgpTaWduZWQtb2ZmLWJ5OiBQYWxpIFJvaMOh ciA8cGFsaUBrZXJuZWwub3JnPgpSZXZpZXdlZC1ieTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJu ZWwub3JnPgotLS0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMgfCA3NCAr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKaW5kZXggYWMzZWU0OGU2OWQ3 Li44OTE0YWY2MmNjYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFh cmR2YXJrLmMKKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwpAQCAt NjgzLDExICs2ODMsODUgQEAgYWR2a19wY2lfYnJpZGdlX2VtdWxfcGNpZV9jb25mX3dyaXRlKHN0 cnVjdCBwY2lfYnJpZGdlX2VtdWwgKmJyaWRnZSwKIAl9CiB9CiAKK3N0YXRpYyBwY2lfYnJpZGdl X2VtdWxfcmVhZF9zdGF0dXNfdAorYWR2a19wY2lfYnJpZGdlX2VtdWxfZXh0X2NvbmZfcmVhZChz dHJ1Y3QgcGNpX2JyaWRnZV9lbXVsICpicmlkZ2UsCisJCQkJICAgaW50IHJlZywgdTMyICp2YWx1 ZSkKK3sKKwlzdHJ1Y3QgYWR2a19wY2llICpwY2llID0gYnJpZGdlLT5kYXRhOworCisJc3dpdGNo IChyZWcpIHsKKwljYXNlIDA6CisJCSp2YWx1ZSA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9DT1JF X1BDSUVSUl9DQVAgKyByZWcpOworCQkvKgorCQkgKiBDbGVhciBQQ0lfRVhUX0NBUF9ORVhUIGJp dHMgYXMgdGhleSBhcmUgc2V0IHRvIDB4MTUwIG9mZnNldC4KKwkJICogQXJtYWRhIDM3MDAgRnVu Y3Rpb25hbCBTcGVjaWZpY2F0aW9uIGRvZXMgbm90IGNvbnRhaW4gYW55CisJCSAqIGRvY3VtZW50 YXRpb24gYWJvdXQgcmVnaXN0ZXJzIGF0IHRoYXQgYWRkcmVzcywgc28gZXhwbGljaXRseQorCQkg KiBtYXJrIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBDYXBhYmlsaXR5IGhlYWRlciBhcyB0aGUg ZW5kIG9mCisJCSAqIEV4dGVuZGVkIENhcGFiaWxpdGllcy4KKwkJICovCisJCSp2YWx1ZSAmPSAw eDAwMGZmZmZmOworCQlyZXR1cm4gUENJX0JSSURHRV9FTVVMX0hBTkRMRUQ7CisKKwljYXNlIFBD SV9FUlJfVU5DT1JfU1RBVFVTOgorCWNhc2UgUENJX0VSUl9VTkNPUl9NQVNLOgorCWNhc2UgUENJ X0VSUl9VTkNPUl9TRVZFUjoKKwljYXNlIFBDSV9FUlJfQ09SX1NUQVRVUzoKKwljYXNlIFBDSV9F UlJfQ09SX01BU0s6CisJY2FzZSBQQ0lfRVJSX0NBUDoKKwljYXNlIFBDSV9FUlJfSEVBREVSX0xP RyswOgorCWNhc2UgUENJX0VSUl9IRUFERVJfTE9HKzQ6CisJY2FzZSBQQ0lfRVJSX0hFQURFUl9M T0crODoKKwljYXNlIFBDSV9FUlJfSEVBREVSX0xPRysxMjoKKwljYXNlIFBDSV9FUlJfUk9PVF9D T01NQU5EOgorCWNhc2UgUENJX0VSUl9ST09UX1NUQVRVUzoKKwljYXNlIFBDSV9FUlJfUk9PVF9F UlJfU1JDOgorCQkqdmFsdWUgPSBhZHZrX3JlYWRsKHBjaWUsIFBDSUVfQ09SRV9QQ0lFUlJfQ0FQ ICsgcmVnKTsKKwkJcmV0dXJuIFBDSV9CUklER0VfRU1VTF9IQU5ETEVEOworCisJZGVmYXVsdDoK KwkJcmV0dXJuIFBDSV9CUklER0VfRU1VTF9OT1RfSEFORExFRDsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkCithZHZrX3BjaV9icmlkZ2VfZW11bF9leHRfY29uZl93cml0ZShzdHJ1Y3QgcGNpX2JyaWRn ZV9lbXVsICpicmlkZ2UsCisJCQkJICAgIGludCByZWcsIHUzMiBvbGQsIHUzMiBuZXcsIHUzMiBt YXNrKQoreworCXN0cnVjdCBhZHZrX3BjaWUgKnBjaWUgPSBicmlkZ2UtPmRhdGE7CisKKwlzd2l0 Y2ggKHJlZykgeworCS8qIFRoZXNlIGFyZSBXMUMgcmVnaXN0ZXJzLCBzbyBjbGVhciBvdGhlciBi aXRzICovCisJY2FzZSBQQ0lfRVJSX1VOQ09SX1NUQVRVUzoKKwljYXNlIFBDSV9FUlJfQ09SX1NU QVRVUzoKKwljYXNlIFBDSV9FUlJfUk9PVF9TVEFUVVM6CisJCW5ldyAmPSBtYXNrOworCQlmYWxs dGhyb3VnaDsKKworCWNhc2UgUENJX0VSUl9VTkNPUl9NQVNLOgorCWNhc2UgUENJX0VSUl9VTkNP Ul9TRVZFUjoKKwljYXNlIFBDSV9FUlJfQ09SX01BU0s6CisJY2FzZSBQQ0lfRVJSX0NBUDoKKwlj YXNlIFBDSV9FUlJfSEVBREVSX0xPRyswOgorCWNhc2UgUENJX0VSUl9IRUFERVJfTE9HKzQ6CisJ Y2FzZSBQQ0lfRVJSX0hFQURFUl9MT0crODoKKwljYXNlIFBDSV9FUlJfSEVBREVSX0xPRysxMjoK KwljYXNlIFBDSV9FUlJfUk9PVF9DT01NQU5EOgorCWNhc2UgUENJX0VSUl9ST09UX0VSUl9TUkM6 CisJCWFkdmtfd3JpdGVsKHBjaWUsIG5ldywgUENJRV9DT1JFX1BDSUVSUl9DQVAgKyByZWcpOwor CQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBw Y2lfYnJpZGdlX2VtdWxfb3BzIGFkdmtfcGNpX2JyaWRnZV9lbXVsX29wcyA9IHsKIAkucmVhZF9i YXNlID0gYWR2a19wY2lfYnJpZGdlX2VtdWxfYmFzZV9jb25mX3JlYWQsCiAJLndyaXRlX2Jhc2Ug PSBhZHZrX3BjaV9icmlkZ2VfZW11bF9iYXNlX2NvbmZfd3JpdGUsCiAJLnJlYWRfcGNpZSA9IGFk dmtfcGNpX2JyaWRnZV9lbXVsX3BjaWVfY29uZl9yZWFkLAogCS53cml0ZV9wY2llID0gYWR2a19w Y2lfYnJpZGdlX2VtdWxfcGNpZV9jb25mX3dyaXRlLAorCS5yZWFkX2V4dCA9IGFkdmtfcGNpX2Jy aWRnZV9lbXVsX2V4dF9jb25mX3JlYWQsCisJLndyaXRlX2V4dCA9IGFkdmtfcGNpX2JyaWRnZV9l bXVsX2V4dF9jb25mX3dyaXRlLAogfTsKIAogLyoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK