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 F3190C433F5 for ; Mon, 10 Jan 2022 01:51:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238009AbiAJBvF (ORCPT ); Sun, 9 Jan 2022 20:51:05 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:38520 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238002AbiAJBvD (ORCPT ); Sun, 9 Jan 2022 20:51:03 -0500 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 ams.source.kernel.org (Postfix) with ESMTPS id 123A8B8111A for ; Mon, 10 Jan 2022 01:51:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34C84C36AEB; Mon, 10 Jan 2022 01:50:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779460; bh=SlxQBQrWAYeP7zsIXGg/ePMIWtH0FKRDMLtj/O82KD4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YRKPJbi9w5+Nw35LGPLjwUtfljWGgzorU9gVutqyhOOZbOXRa7FZwDAjKLO2y5QS+ egC5UOrjGoX90FYbRum6Gfqwu097MnJuhLBz6RQUSb5sO1b1zwZ1+y0Kc1es1247OZ CPN1oZRIyJefBdW9QB3DqhRiVZCEOIqsF32fsX3PN/DX6yyE7DYomXGZ2pwYiwwUp3 xFQKQiPgpY/lpaDhoqMl/ovA0VHOy+GFF0sKMlrTl7pprE45hXFYSLtTLwomFWlggd EgpICqDa1mGbN9O45W3MikE+QIlEIW86VIBDaUjg7YQmYCD3ru0LH2q4zvPVhPn7Zy 3XVHPT1Fheyeg== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Marc Zyngier , Lorenzo Pieralisi , Bjorn Helgaas Cc: pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH v2 18/23] PCI: aardvark: Use separate INTA interrupt for emulated root bridge Date: Mon, 10 Jan 2022 02:50:13 +0100 Message-Id: <20220110015018.26359-19-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220110015018.26359-1-kabel@kernel.org> References: <20220110015018.26359-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 Emulated root bridge currently provides only one Legacy INTA interrupt which is used for reporting PCIe PME and ERR events and handled by kernel PCIe PME and AER drivers. Aardvark HW reports these PME and ERR events separately, so there is no need to mix real INTA interrupt and emulated INTA interrupt for PCIe PME and AER drivers. Register a new advk-RP (as in Root Port) irq chip and a new irq domain for emulated root bridge and use this new separate irq domain for providing INTA interrupt from emulated root bridge for PME and ERR events. The real INTA interrupt from real devices is now separate. A custom map_irq callback function on PCI host bridge structure is used to allocate IRQ mapping for emulated root bridge from new irq domain. Original callback of_irq_parse_and_map_pci() is used for all other devices as before. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 69 ++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 730ff1ffc952..ca519cadcdfe 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -274,6 +274,7 @@ struct advk_pcie { } wins[OB_WIN_COUNT]; u8 wins_count; int irq; + struct irq_domain *rp_irq_domain; struct irq_domain *irq_domain; struct irq_chip irq_chip; raw_spinlock_t irq_lock; @@ -1443,6 +1444,44 @@ static void advk_pcie_remove_irq_domain(struct advk_pcie *pcie) irq_domain_remove(pcie->irq_domain); } +static struct irq_chip advk_rp_irq_chip = { + .name = "advk-RP", +}; + +static int advk_pcie_rp_irq_map(struct irq_domain *h, + unsigned int virq, irq_hw_number_t hwirq) +{ + struct advk_pcie *pcie = h->host_data; + + irq_set_chip_and_handler(virq, &advk_rp_irq_chip, handle_simple_irq); + irq_set_chip_data(virq, pcie); + + return 0; +} + +static const struct irq_domain_ops advk_pcie_rp_irq_domain_ops = { + .map = advk_pcie_rp_irq_map, + .xlate = irq_domain_xlate_onecell, +}; + +static int advk_pcie_init_rp_irq_domain(struct advk_pcie *pcie) +{ + pcie->rp_irq_domain = irq_domain_add_linear(NULL, 1, + &advk_pcie_rp_irq_domain_ops, + pcie); + if (!pcie->rp_irq_domain) { + dev_err(&pcie->pdev->dev, "Failed to add Root Port IRQ domain\n"); + return -ENOMEM; + } + + return 0; +} + +static void advk_pcie_remove_rp_irq_domain(struct advk_pcie *pcie) +{ + irq_domain_remove(pcie->rp_irq_domain); +} + static void advk_pcie_handle_pme(struct advk_pcie *pcie) { u32 requester = advk_readl(pcie, PCIE_MSG_LOG_REG) >> 16; @@ -1464,7 +1503,7 @@ static void advk_pcie_handle_pme(struct advk_pcie *pcie) if (!(le16_to_cpu(pcie->bridge.pcie_conf.rootctl) & PCI_EXP_RTCTL_PMEIE)) return; - if (generic_handle_domain_irq(pcie->irq_domain, 0) == -EINVAL) + if (generic_handle_domain_irq(pcie->rp_irq_domain, 0) == -EINVAL) dev_err_ratelimited(&pcie->pdev->dev, "unhandled PME IRQ\n"); } } @@ -1516,7 +1555,7 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) * Aardvark HW returns zero for PCI_ERR_ROOT_AER_IRQ, so use * PCIe interrupt 0 */ - if (generic_handle_domain_irq(pcie->irq_domain, 0) == -EINVAL) + if (generic_handle_domain_irq(pcie->rp_irq_domain, 0) == -EINVAL) dev_err_ratelimited(&pcie->pdev->dev, "unhandled ERR IRQ\n"); } @@ -1560,6 +1599,21 @@ static void advk_pcie_irq_handler(struct irq_desc *desc) chained_irq_exit(chip, desc); } +static int advk_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) +{ + struct advk_pcie *pcie = dev->bus->sysdata; + + /* + * Emulated root bridge has its own emulated irq chip and irq domain. + * Argument pin is the INTx pin (1=INTA, 2=INTB, 3=INTC, 4=INTD) and + * hwirq for irq_create_mapping() is indexed from zero. + */ + if (pci_is_root_bus(dev->bus)) + return irq_create_mapping(pcie->rp_irq_domain, pin - 1); + else + return of_irq_parse_and_map_pci(dev, slot, pin); +} + static void __maybe_unused advk_pcie_disable_phy(struct advk_pcie *pcie) { phy_power_off(pcie->phy); @@ -1761,14 +1815,24 @@ static int advk_pcie_probe(struct platform_device *pdev) return ret; } + ret = advk_pcie_init_rp_irq_domain(pcie); + if (ret) { + dev_err(dev, "Failed to initialize irq\n"); + advk_pcie_remove_msi_irq_domain(pcie); + advk_pcie_remove_irq_domain(pcie); + return ret; + } + irq_set_chained_handler_and_data(pcie->irq, advk_pcie_irq_handler, pcie); bridge->sysdata = pcie; bridge->ops = &advk_pcie_ops; + bridge->map_irq = advk_pcie_map_irq; ret = pci_host_probe(bridge); if (ret < 0) { irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); + advk_pcie_remove_rp_irq_domain(pcie); advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(pcie); return ret; @@ -1820,6 +1884,7 @@ static int advk_pcie_remove(struct platform_device *pdev) irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); /* Remove IRQ domains */ + advk_pcie_remove_rp_irq_domain(pcie); advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(pcie); -- 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 F07EFC433EF for ; Mon, 10 Jan 2022 02:02:50 +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=o38rozFr4Gjc1kNSESlRyEShpBwkwYibghKDctZ0OAc=; b=squWdTi4qNYZRf 23wzclndkKcPf7Zs5GaXz2u+vZW1q9kjxXZ/N6yisHIoPrkOQNkgMtl9QUKYFeA6OHlXACL/WrcJm Ha5NF0KgxIle/3NOVyoId0VCur4Q0PVebQVDMvAzSzfu23gjRrbeK9j9c/sryaTwliGCZTD52QZaC dy6WDrKMrw/FnMFS6rdpqKrAKe3j08RF15RjMq8BPoe1mMpFiLfQ0r1vM/bQd+DcHnjAEt+P1KlT7 hQyGh7AuBsveg8kimekVBPfgb8wTYMxUbuVHSOSB2+BW37A+yVdrtioQC0hxyAZlFYAcI9Uxc3FgR ICy2sRU5nPfn9btkDybA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jzm-008rYx-Qg; Mon, 10 Jan 2022 02:01:15 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jpv-008lnW-Ao for linux-arm-kernel@lists.infradead.org; Mon, 10 Jan 2022 01:51:05 +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 ams.source.kernel.org (Postfix) with ESMTPS id 11AAAB81050; Mon, 10 Jan 2022 01:51:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 34C84C36AEB; Mon, 10 Jan 2022 01:50:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779460; bh=SlxQBQrWAYeP7zsIXGg/ePMIWtH0FKRDMLtj/O82KD4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YRKPJbi9w5+Nw35LGPLjwUtfljWGgzorU9gVutqyhOOZbOXRa7FZwDAjKLO2y5QS+ egC5UOrjGoX90FYbRum6Gfqwu097MnJuhLBz6RQUSb5sO1b1zwZ1+y0Kc1es1247OZ CPN1oZRIyJefBdW9QB3DqhRiVZCEOIqsF32fsX3PN/DX6yyE7DYomXGZ2pwYiwwUp3 xFQKQiPgpY/lpaDhoqMl/ovA0VHOy+GFF0sKMlrTl7pprE45hXFYSLtTLwomFWlggd EgpICqDa1mGbN9O45W3MikE+QIlEIW86VIBDaUjg7YQmYCD3ru0LH2q4zvPVhPn7Zy 3XVHPT1Fheyeg== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Marc Zyngier , Lorenzo Pieralisi , Bjorn Helgaas Cc: pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH v2 18/23] PCI: aardvark: Use separate INTA interrupt for emulated root bridge Date: Mon, 10 Jan 2022 02:50:13 +0100 Message-Id: <20220110015018.26359-19-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220110015018.26359-1-kabel@kernel.org> References: <20220110015018.26359-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220109_175103_726720_1DFE3D63 X-CRM114-Status: GOOD ( 20.72 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KCkVtdWxhdGVkIHJvb3QgYnJpZGdl IGN1cnJlbnRseSBwcm92aWRlcyBvbmx5IG9uZSBMZWdhY3kgSU5UQSBpbnRlcnJ1cHQKd2hpY2gg aXMgdXNlZCBmb3IgcmVwb3J0aW5nIFBDSWUgUE1FIGFuZCBFUlIgZXZlbnRzIGFuZCBoYW5kbGVk IGJ5IGtlcm5lbApQQ0llIFBNRSBhbmQgQUVSIGRyaXZlcnMuCgpBYXJkdmFyayBIVyByZXBvcnRz IHRoZXNlIFBNRSBhbmQgRVJSIGV2ZW50cyBzZXBhcmF0ZWx5LCBzbyB0aGVyZSBpcyBubwpuZWVk IHRvIG1peCByZWFsIElOVEEgaW50ZXJydXB0IGFuZCBlbXVsYXRlZCBJTlRBIGludGVycnVwdCBm b3IgUENJZSBQTUUKYW5kIEFFUiBkcml2ZXJzLgoKUmVnaXN0ZXIgYSBuZXcgYWR2ay1SUCAoYXMg aW4gUm9vdCBQb3J0KSBpcnEgY2hpcCBhbmQgYSBuZXcgaXJxIGRvbWFpbgpmb3IgZW11bGF0ZWQg cm9vdCBicmlkZ2UgYW5kIHVzZSB0aGlzIG5ldyBzZXBhcmF0ZSBpcnEgZG9tYWluIGZvcgpwcm92 aWRpbmcgSU5UQSBpbnRlcnJ1cHQgZnJvbSBlbXVsYXRlZCByb290IGJyaWRnZSBmb3IgUE1FIGFu ZCBFUlIgZXZlbnRzLgoKVGhlIHJlYWwgSU5UQSBpbnRlcnJ1cHQgZnJvbSByZWFsIGRldmljZXMg aXMgbm93IHNlcGFyYXRlLgoKQSBjdXN0b20gbWFwX2lycSBjYWxsYmFjayBmdW5jdGlvbiBvbiBQ Q0kgaG9zdCBicmlkZ2Ugc3RydWN0dXJlIGlzIHVzZWQgdG8KYWxsb2NhdGUgSVJRIG1hcHBpbmcg Zm9yIGVtdWxhdGVkIHJvb3QgYnJpZGdlIGZyb20gbmV3IGlycSBkb21haW4uIE9yaWdpbmFsCmNh bGxiYWNrIG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaSgpIGlzIHVzZWQgZm9yIGFsbCBvdGhlciBk ZXZpY2VzIGFzIGJlZm9yZS4KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5l bC5vcmc+ClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4KLS0t CiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jIHwgNjkgKysrKysrKysrKysr KysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFy ay5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwppbmRleCA3MzBmZjFm ZmM5NTIuLmNhNTE5Y2FkY2RmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2ktYWFyZHZhcmsuYworKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5j CkBAIC0yNzQsNiArMjc0LDcgQEAgc3RydWN0IGFkdmtfcGNpZSB7CiAJfSB3aW5zW09CX1dJTl9D T1VOVF07CiAJdTggd2luc19jb3VudDsKIAlpbnQgaXJxOworCXN0cnVjdCBpcnFfZG9tYWluICpy cF9pcnFfZG9tYWluOwogCXN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluOwogCXN0cnVjdCBp cnFfY2hpcCBpcnFfY2hpcDsKIAlyYXdfc3BpbmxvY2tfdCBpcnFfbG9jazsKQEAgLTE0NDMsNiAr MTQ0NCw0NCBAQCBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfcmVtb3ZlX2lycV9kb21haW4oc3RydWN0 IGFkdmtfcGNpZSAqcGNpZSkKIAlpcnFfZG9tYWluX3JlbW92ZShwY2llLT5pcnFfZG9tYWluKTsK IH0KIAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhZHZrX3JwX2lycV9jaGlwID0geworCS5uYW1l ID0gImFkdmstUlAiLAorfTsKKworc3RhdGljIGludCBhZHZrX3BjaWVfcnBfaXJxX21hcChzdHJ1 Y3QgaXJxX2RvbWFpbiAqaCwKKwkJCQl1bnNpZ25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90 IGh3aXJxKQoreworCXN0cnVjdCBhZHZrX3BjaWUgKnBjaWUgPSBoLT5ob3N0X2RhdGE7CisKKwlp cnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmFkdmtfcnBfaXJxX2NoaXAsIGhhbmRsZV9z aW1wbGVfaXJxKTsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBwY2llKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGFkdmtfcGNpZV9ycF9p cnFfZG9tYWluX29wcyA9IHsKKwkubWFwID0gYWR2a19wY2llX3JwX2lycV9tYXAsCisJLnhsYXRl ID0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAorfTsKKworc3RhdGljIGludCBhZHZrX3BjaWVf aW5pdF9ycF9pcnFfZG9tYWluKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCit7CisJcGNpZS0+cnBf aXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLAorCQkJCQkJICAgICZh ZHZrX3BjaWVfcnBfaXJxX2RvbWFpbl9vcHMsCisJCQkJCQkgICAgcGNpZSk7CisJaWYgKCFwY2ll LT5ycF9pcnFfZG9tYWluKSB7CisJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIkZhaWxlZCB0 byBhZGQgUm9vdCBQb3J0IElSUSBkb21haW5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWR2a19wY2llX3JlbW92ZV9ycF9pcnFfZG9t YWluKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCit7CisJaXJxX2RvbWFpbl9yZW1vdmUocGNpZS0+ cnBfaXJxX2RvbWFpbik7Cit9CisKIHN0YXRpYyB2b2lkIGFkdmtfcGNpZV9oYW5kbGVfcG1lKHN0 cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJdTMyIHJlcXVlc3RlciA9IGFkdmtfcmVhZGwocGNp ZSwgUENJRV9NU0dfTE9HX1JFRykgPj4gMTY7CkBAIC0xNDY0LDcgKzE1MDMsNyBAQCBzdGF0aWMg dm9pZCBhZHZrX3BjaWVfaGFuZGxlX3BtZShzdHJ1Y3QgYWR2a19wY2llICpwY2llKQogCQlpZiAo IShsZTE2X3RvX2NwdShwY2llLT5icmlkZ2UucGNpZV9jb25mLnJvb3RjdGwpICYgUENJX0VYUF9S VENUTF9QTUVJRSkpCiAJCQlyZXR1cm47CiAKLQkJaWYgKGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9p cnEocGNpZS0+aXJxX2RvbWFpbiwgMCkgPT0gLUVJTlZBTCkKKwkJaWYgKGdlbmVyaWNfaGFuZGxl X2RvbWFpbl9pcnEocGNpZS0+cnBfaXJxX2RvbWFpbiwgMCkgPT0gLUVJTlZBTCkKIAkJCWRldl9l cnJfcmF0ZWxpbWl0ZWQoJnBjaWUtPnBkZXYtPmRldiwgInVuaGFuZGxlZCBQTUUgSVJRXG4iKTsK IAl9CiB9CkBAIC0xNTE2LDcgKzE1NTUsNyBAQCBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfaGFuZGxl X2ludChzdHJ1Y3QgYWR2a19wY2llICpwY2llKQogCQkgKiBBYXJkdmFyayBIVyByZXR1cm5zIHpl cm8gZm9yIFBDSV9FUlJfUk9PVF9BRVJfSVJRLCBzbyB1c2UKIAkJICogUENJZSBpbnRlcnJ1cHQg MAogCQkgKi8KLQkJaWYgKGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEocGNpZS0+aXJxX2RvbWFp biwgMCkgPT0gLUVJTlZBTCkKKwkJaWYgKGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEocGNpZS0+ cnBfaXJxX2RvbWFpbiwgMCkgPT0gLUVJTlZBTCkKIAkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJnBj aWUtPnBkZXYtPmRldiwgInVuaGFuZGxlZCBFUlIgSVJRXG4iKTsKIAl9CiAKQEAgLTE1NjAsNiAr MTU5OSwyMSBAQCBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfaXJxX2hhbmRsZXIoc3RydWN0IGlycV9k ZXNjICpkZXNjKQogCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKK3N0YXRpYyBp bnQgYWR2a19wY2llX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwg dTggcGluKQoreworCXN0cnVjdCBhZHZrX3BjaWUgKnBjaWUgPSBkZXYtPmJ1cy0+c3lzZGF0YTsK KworCS8qCisJICogRW11bGF0ZWQgcm9vdCBicmlkZ2UgaGFzIGl0cyBvd24gZW11bGF0ZWQgaXJx IGNoaXAgYW5kIGlycSBkb21haW4uCisJICogQXJndW1lbnQgcGluIGlzIHRoZSBJTlR4IHBpbiAo MT1JTlRBLCAyPUlOVEIsIDM9SU5UQywgND1JTlREKSBhbmQKKwkgKiBod2lycSBmb3IgaXJxX2Ny ZWF0ZV9tYXBwaW5nKCkgaXMgaW5kZXhlZCBmcm9tIHplcm8uCisJICovCisJaWYgKHBjaV9pc19y b290X2J1cyhkZXYtPmJ1cykpCisJCXJldHVybiBpcnFfY3JlYXRlX21hcHBpbmcocGNpZS0+cnBf aXJxX2RvbWFpbiwgcGluIC0gMSk7CisJZWxzZQorCQlyZXR1cm4gb2ZfaXJxX3BhcnNlX2FuZF9t YXBfcGNpKGRldiwgc2xvdCwgcGluKTsKK30KKwogc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQg YWR2a19wY2llX2Rpc2FibGVfcGh5KHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJcGh5X3Bv d2VyX29mZihwY2llLT5waHkpOwpAQCAtMTc2MSwxNCArMTgxNSwyNCBAQCBzdGF0aWMgaW50IGFk dmtfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4gcmV0 OwogCX0KIAorCXJldCA9IGFkdmtfcGNpZV9pbml0X3JwX2lycV9kb21haW4ocGNpZSk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGlycVxuIik7CisJ CWFkdmtfcGNpZV9yZW1vdmVfbXNpX2lycV9kb21haW4ocGNpZSk7CisJCWFkdmtfcGNpZV9yZW1v dmVfaXJxX2RvbWFpbihwY2llKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlpcnFfc2V0X2NoYWlu ZWRfaGFuZGxlcl9hbmRfZGF0YShwY2llLT5pcnEsIGFkdmtfcGNpZV9pcnFfaGFuZGxlciwgcGNp ZSk7CiAKIAlicmlkZ2UtPnN5c2RhdGEgPSBwY2llOwogCWJyaWRnZS0+b3BzID0gJmFkdmtfcGNp ZV9vcHM7CisJYnJpZGdlLT5tYXBfaXJxID0gYWR2a19wY2llX21hcF9pcnE7CiAKIAlyZXQgPSBw Y2lfaG9zdF9wcm9iZShicmlkZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlycV9zZXRfY2hhaW5l ZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgTlVMTCwgTlVMTCk7CisJCWFkdmtfcGNpZV9y ZW1vdmVfcnBfaXJxX2RvbWFpbihwY2llKTsKIAkJYWR2a19wY2llX3JlbW92ZV9tc2lfaXJxX2Rv bWFpbihwY2llKTsKIAkJYWR2a19wY2llX3JlbW92ZV9pcnFfZG9tYWluKHBjaWUpOwogCQlyZXR1 cm4gcmV0OwpAQCAtMTgyMCw2ICsxODg0LDcgQEAgc3RhdGljIGludCBhZHZrX3BjaWVfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJf YW5kX2RhdGEocGNpZS0+aXJxLCBOVUxMLCBOVUxMKTsKIAogCS8qIFJlbW92ZSBJUlEgZG9tYWlu cyAqLworCWFkdmtfcGNpZV9yZW1vdmVfcnBfaXJxX2RvbWFpbihwY2llKTsKIAlhZHZrX3BjaWVf cmVtb3ZlX21zaV9pcnFfZG9tYWluKHBjaWUpOwogCWFkdmtfcGNpZV9yZW1vdmVfaXJxX2RvbWFp bihwY2llKTsKIAotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=