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 896E9C43462 for ; Thu, 6 May 2021 15:34:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5BBBD613BA for ; Thu, 6 May 2021 15:34:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235707AbhEFPfg (ORCPT ); Thu, 6 May 2021 11:35:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:46348 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235680AbhEFPdw (ORCPT ); Thu, 6 May 2021 11:33:52 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B6214613B5; Thu, 6 May 2021 15:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315174; bh=JtpzxROGnZVDcJeZYzWfrsnJEYa+UhigCuLwKzPz8pI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q7xwc5ANNXpJa4sYpgJ9cScgGOgl2KJRynZD6qVxsvTciEAhMSEZY9Rw/gOM1dJKR YRhUlLxjn6KcSeiB6BFwCKxYxrndvvlneMqpRA/sDRPcWTX+Gy+cex9e+jaPjApjID 8M4Ep7ErS7+tGRKkm+MC9lhABLkBxjnM28NJCrR1vPOlIavw8lZdlwTRFt1RDXC2IT FKLA0eSQkU6/MT+bkR4XTE8Rfmh8bPU/9nwWKsvQjQpJkuZDnwh2J/X+lRWhzOIPVj YBhFanaOYqNc9ouWufijbUX/F22Qx27TkFLV6yxfNek2rwcHUO7upf1nVS1J12uBE1 BD5jRGzIsD4KA== Received: by pali.im (Postfix) id 6A75189A; Thu, 6 May 2021 17:32:53 +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 31/42] PCI: aardvark: Use separate INTA interrupt for emulated root bridge Date: Thu, 6 May 2021 17:31:42 +0200 Message-Id: <20210506153153.30454-32-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 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-EMU 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 Reviewed-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 66 ++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index f2ed276b7e18..e724d05a61a8 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -194,6 +194,8 @@ struct advk_pcie { struct platform_device *pdev; void __iomem *base; int irq; + struct irq_domain *emul_irq_domain; + struct irq_chip emul_irq_chip; struct irq_domain *irq_domain; struct irq_chip irq_chip; struct irq_domain *msi_domain; @@ -1074,6 +1076,22 @@ static const struct irq_domain_ops advk_pcie_irq_domain_ops = { .xlate = irq_domain_xlate_onecell, }; +static int advk_pcie_emul_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, &pcie->emul_irq_chip, handle_simple_irq); + irq_set_chip_data(virq, pcie); + + return 0; +} + +static const struct irq_domain_ops advk_pcie_emul_irq_domain_ops = { + .map = advk_pcie_emul_irq_map, + .xlate = irq_domain_xlate_onecell, +}; + static int advk_pcie_init_msi_irq_domain(struct advk_pcie *pcie) { struct device *dev = &pcie->pdev->dev; @@ -1167,6 +1185,24 @@ static void advk_pcie_remove_irq_domain(struct advk_pcie *pcie) irq_domain_remove(pcie->irq_domain); } +static int advk_pcie_init_emul_irq_domain(struct advk_pcie *pcie) +{ + pcie->emul_irq_chip.name = "advk-EMU"; + pcie->emul_irq_domain = irq_domain_add_linear(NULL, 1, + &advk_pcie_emul_irq_domain_ops, pcie); + if (!pcie->emul_irq_domain) { + dev_err(&pcie->pdev->dev, "Failed to add emul IRQ domain\n"); + return -ENOMEM; + } + + return 0; +} + +static void advk_pcie_remove_emul_irq_domain(struct advk_pcie *pcie) +{ + irq_domain_remove(pcie->emul_irq_domain); +} + static void advk_pcie_handle_msi(struct advk_pcie *pcie) { struct irq_data *irq_data; @@ -1244,7 +1280,7 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) * Aardvark HW returns zero for PCI_EXP_FLAGS_IRQ, so use PCIe interrupt 0. */ if (le16_to_cpu(pcie->bridge.pcie_conf.rootctl) & PCI_EXP_RTCTL_PMEIE) { - virq = irq_find_mapping(pcie->irq_domain, 0); + virq = irq_find_mapping(pcie->emul_irq_domain, 0); if (virq) generic_handle_irq(virq); else @@ -1257,7 +1293,7 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie) 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); + virq = irq_find_mapping(pcie->emul_irq_domain, 0); if (virq) generic_handle_irq(virq); else @@ -1304,6 +1340,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 itw own emulated irq chip and irq domain. + * Variable 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->emul_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); @@ -1432,13 +1483,23 @@ static int advk_pcie_probe(struct platform_device *pdev) return ret; } + ret = advk_pcie_init_emul_irq_domain(pcie); + if (ret) { + dev_err(dev, "Failed to initialize irq\n"); + advk_pcie_remove_irq_domain(pcie); + advk_pcie_remove_msi_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) { + advk_pcie_remove_emul_irq_domain(pcie); advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(pcie); irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); @@ -1487,6 +1548,7 @@ static int advk_pcie_remove(struct platform_device *pdev) advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG); /* Remove IRQ domains */ + advk_pcie_remove_emul_irq_domain(pcie); advk_pcie_remove_msi_irq_domain(pcie); advk_pcie_remove_irq_domain(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 3B38EC43461 for ; Thu, 6 May 2021 16:03:48 +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 ADDCB61073 for ; Thu, 6 May 2021 16:03:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ADDCB61073 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=zJ4Qt/zwFXDPeo3ymsvfNExNj42XxXauWk2txAnbb5s=; b=OeJWSFhgYnZtBLx3Bh5w61tez FZlzRw5eGrC1IhYpMGk2vwMU7fEldQ+UQUi8Hean8hkmVrZdHz7Cg0A2rf7+wiiukzrAwDTKNahB8 CfOjUHq96hF2Dqwc8axpvQbKzE1aeKyF29QxsyqYMUzBVhK+ui0Drhb/1NWO66ZvMbYSKrf7bP4RU G0iQYWfSARpAvhvePuiDmqzLI8yIdRhc2cJN6tyZFPx6lPfNaR4sxAp25Ggj3jFFD6qgs8Yvs14vb w3qXOlJrj6wiWTHMqm2Y/Qi/lS7h6ia/CqSR0Ym50kPMD2sM2QTpk7B16/L7kQhzHJkQ0vOTAtRIt 7HlG0rstg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1legEp-004fES-Gd; Thu, 06 May 2021 15:48:32 +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 1lefzq-004a7t-TP for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 15:33:04 +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=eOfjyVnowt166Ky7AsOxTOxN3CESr/UCj+2gvgaZq7A=; b=jjRrA9Yji827K+8ntg/sh7iI2i xjsq1QIq/bYRSDtqO8tvLMSo+b/IluIS2uPsx19pGphEuEiyTX5oMnxpdceLg96wda7Idf4bTakJk AAtPxTnQyo4JruWJgTgodvpavmd298b7oZuF0yG5wQpG3bh0wzw5EDNVTHdQI+CCoNXUMV8lIWFYx G7UouE1PIvn/a929Udzi6QepPp/WFL6BRej47jAEQAO/opbTBmEJ04pAS5okOg8t7Yu3x6GXsV1WD d33arsA3nrRUmjnfTcCMj87z8/a7Zz8Dv866dtrXmkehZULf7xnB2izbrezNmkrJUon0Z0VDeXpYG FpVxVFeQ==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lefzl-0069ga-7N for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 15:33:01 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id B6214613B5; Thu, 6 May 2021 15:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620315174; bh=JtpzxROGnZVDcJeZYzWfrsnJEYa+UhigCuLwKzPz8pI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q7xwc5ANNXpJa4sYpgJ9cScgGOgl2KJRynZD6qVxsvTciEAhMSEZY9Rw/gOM1dJKR YRhUlLxjn6KcSeiB6BFwCKxYxrndvvlneMqpRA/sDRPcWTX+Gy+cex9e+jaPjApjID 8M4Ep7ErS7+tGRKkm+MC9lhABLkBxjnM28NJCrR1vPOlIavw8lZdlwTRFt1RDXC2IT FKLA0eSQkU6/MT+bkR4XTE8Rfmh8bPU/9nwWKsvQjQpJkuZDnwh2J/X+lRWhzOIPVj YBhFanaOYqNc9ouWufijbUX/F22Qx27TkFLV6yxfNek2rwcHUO7upf1nVS1J12uBE1 BD5jRGzIsD4KA== Received: by pali.im (Postfix) id 6A75189A; Thu, 6 May 2021 17:32:53 +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 31/42] PCI: aardvark: Use separate INTA interrupt for emulated root bridge Date: Thu, 6 May 2021 17:31:42 +0200 Message-Id: <20210506153153.30454-32-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_083257_370241_E3D742D6 X-CRM114-Status: GOOD ( 19.33 ) 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 RW11bGF0ZWQgcm9vdCBicmlkZ2UgY3VycmVudGx5IHByb3ZpZGVzIG9ubHkgb25lIExlZ2FjeSBJ TlRBIGludGVycnVwdAp3aGljaCBpcyB1c2VkIGZvciByZXBvcnRpbmcgUENJZSBQTUUgYW5kIEVS UiBldmVudHMgYW5kIGhhbmRsZWQgYnkga2VybmVsClBDSWUgUE1FIGFuZCBBRVIgZHJpdmVycy4K CkFhcmR2YXJrIEhXIHJlcG9ydHMgdGhlc2UgUE1FIGFuZCBFUlIgZXZlbnRzIHNlcGFyYXRlbHks IHNvIHRoZXJlIGlzIG5vCm5lZWQgdG8gbWl4IHJlYWwgSU5UQSBpbnRlcnJ1cHQgYW5kIGVtdWxh dGVkIElOVEEgaW50ZXJydXB0IGZvciBQQ0llIFBNRQphbmQgQUVSIGRyaXZlcnMuCgpSZWdpc3Rl ciBhIG5ldyBhZHZrLUVNVSBpcnEgY2hpcCBhbmQgYSBuZXcgaXJxIGRvbWFpbiBmb3IgZW11bGF0 ZWQgcm9vdApicmlkZ2UgYW5kIHVzZSB0aGlzIG5ldyBzZXBhcmF0ZSBpcnEgZG9tYWluIGZvciBw cm92aWRpbmcgSU5UQSBpbnRlcnJ1cHQKZnJvbSBlbXVsYXRlZCByb290IGJyaWRnZSBmb3IgUE1F IGFuZCBFUlIgZXZlbnRzLgoKVGhlIHJlYWwgSU5UQSBpbnRlcnJ1cHQgZnJvbSByZWFsIGRldmlj ZXMgaXMgbm93IHNlcGFyYXRlLgoKQSBjdXN0b20gbWFwX2lycSBjYWxsYmFjayBmdW5jdGlvbiBv biBQQ0kgaG9zdCBicmlkZ2Ugc3RydWN0dXJlIGlzIHVzZWQgdG8KYWxsb2NhdGUgSVJRIG1hcHBp bmcgZm9yIGVtdWxhdGVkIHJvb3QgYnJpZGdlIGZyb20gbmV3IGlycSBkb21haW4uIE9yaWdpbmFs CmNhbGxiYWNrIG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaSgpIGlzIHVzZWQgZm9yIGFsbCBvdGhl ciBkZXZpY2VzIGFzIGJlZm9yZS4KClNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtl cm5lbC5vcmc+ClJldmlld2VkLWJ5OiBNYXJlayBCZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+Ci0t LQogZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyB8IDY2ICsrKysrKysrKysr KysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZh cmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKaW5kZXggZjJlZDI3 NmI3ZTE4Li5lNzI0ZDA1YTYxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv cGNpLWFhcmR2YXJrLmMKKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsu YwpAQCAtMTk0LDYgKzE5NCw4IEBAIHN0cnVjdCBhZHZrX3BjaWUgewogCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXY7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBpcnE7CisJc3RydWN0 IGlycV9kb21haW4gKmVtdWxfaXJxX2RvbWFpbjsKKwlzdHJ1Y3QgaXJxX2NoaXAgZW11bF9pcnFf Y2hpcDsKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqaXJxX2RvbWFpbjsKIAlzdHJ1Y3QgaXJxX2NoaXAg aXJxX2NoaXA7CiAJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47CkBAIC0xMDc0LDYgKzEw NzYsMjIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhZHZrX3BjaWVfaXJx X2RvbWFpbl9vcHMgPSB7CiAJLnhsYXRlID0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAogfTsK IAorc3RhdGljIGludCBhZHZrX3BjaWVfZW11bF9pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpo LAorCQkJCSAgdW5zaWduZWQgaW50IHZpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwlz dHJ1Y3QgYWR2a19wY2llICpwY2llID0gaC0+aG9zdF9kYXRhOworCisJaXJxX3NldF9jaGlwX2Fu ZF9oYW5kbGVyKHZpcnEsICZwY2llLT5lbXVsX2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7 CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgcGNpZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhZHZrX3BjaWVfZW11bF9pcnFfZG9tYWlu X29wcyA9IHsKKwkubWFwID0gYWR2a19wY2llX2VtdWxfaXJxX21hcCwKKwkueGxhdGUgPSBpcnFf ZG9tYWluX3hsYXRlX29uZWNlbGwsCit9OworCiBzdGF0aWMgaW50IGFkdmtfcGNpZV9pbml0X21z aV9pcnFfZG9tYWluKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiB7CiAJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsKQEAgLTExNjcsNiArMTE4NSwyNCBAQCBzdGF0aWMgdm9p ZCBhZHZrX3BjaWVfcmVtb3ZlX2lycV9kb21haW4oc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKIAlp cnFfZG9tYWluX3JlbW92ZShwY2llLT5pcnFfZG9tYWluKTsKIH0KIAorc3RhdGljIGludCBhZHZr X3BjaWVfaW5pdF9lbXVsX2lycV9kb21haW4oc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKK3sKKwlw Y2llLT5lbXVsX2lycV9jaGlwLm5hbWUgPSAiYWR2ay1FTVUiOworCXBjaWUtPmVtdWxfaXJxX2Rv bWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLAorCQkJCSZhZHZrX3BjaWVfZW11 bF9pcnFfZG9tYWluX29wcywgcGNpZSk7CisJaWYgKCFwY2llLT5lbXVsX2lycV9kb21haW4pIHsK KwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBlbXVsIElSUSBkb21h aW5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgYWR2a19wY2llX3JlbW92ZV9lbXVsX2lycV9kb21haW4oc3RydWN0IGFkdmtfcGNpZSAq cGNpZSkKK3sKKwlpcnFfZG9tYWluX3JlbW92ZShwY2llLT5lbXVsX2lycV9kb21haW4pOworfQor CiBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfaGFuZGxlX21zaShzdHJ1Y3QgYWR2a19wY2llICpwY2ll KQogewogCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CkBAIC0xMjQ0LDcgKzEyODAsNyBAQCBz dGF0aWMgdm9pZCBhZHZrX3BjaWVfaGFuZGxlX2ludChzdHJ1Y3QgYWR2a19wY2llICpwY2llKQog CQkJICogQWFyZHZhcmsgSFcgcmV0dXJucyB6ZXJvIGZvciBQQ0lfRVhQX0ZMQUdTX0lSUSwgc28g dXNlIFBDSWUgaW50ZXJydXB0IDAuCiAJCQkgKi8KIAkJCWlmIChsZTE2X3RvX2NwdShwY2llLT5i cmlkZ2UucGNpZV9jb25mLnJvb3RjdGwpICYgUENJX0VYUF9SVENUTF9QTUVJRSkgewotCQkJCXZp cnEgPSBpcnFfZmluZF9tYXBwaW5nKHBjaWUtPmlycV9kb21haW4sIDApOworCQkJCXZpcnEgPSBp cnFfZmluZF9tYXBwaW5nKHBjaWUtPmVtdWxfaXJxX2RvbWFpbiwgMCk7CiAJCQkJaWYgKHZpcnEp CiAJCQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKIAkJCQllbHNlCkBAIC0xMjU3LDcgKzEy OTMsNyBAQCBzdGF0aWMgdm9pZCBhZHZrX3BjaWVfaGFuZGxlX2ludChzdHJ1Y3QgYWR2a19wY2ll ICpwY2llKQogCWlmIChlcnJfYml0cykgewogCQlhZHZrX3dyaXRlbChwY2llLCBlcnJfYml0cywg UENJRV9JU1IwX1JFRyk7CiAJCS8qIEFhcmR2YXJrIEhXIHJldHVybnMgemVybyBmb3IgUENJX0VS Ul9ST09UX0FFUl9JUlEsIHNvIHVzZSBQQ0llIGludGVycnVwdCAwICovCi0JCXZpcnEgPSBpcnFf ZmluZF9tYXBwaW5nKHBjaWUtPmlycV9kb21haW4sIDApOworCQl2aXJxID0gaXJxX2ZpbmRfbWFw cGluZyhwY2llLT5lbXVsX2lycV9kb21haW4sIDApOwogCQlpZiAodmlycSkKIAkJCWdlbmVyaWNf aGFuZGxlX2lycSh2aXJxKTsKIAkJZWxzZQpAQCAtMTMwNCw2ICsxMzQwLDIxIEBAIHN0YXRpYyB2 b2lkIGFkdmtfcGNpZV9pcnFfaGFuZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiAJY2hhaW5l ZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIH0KIAorc3RhdGljIGludCBhZHZrX3BjaWVfbWFwX2ly cShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJc3RydWN0 IGFkdmtfcGNpZSAqcGNpZSA9IGRldi0+YnVzLT5zeXNkYXRhOworCisJLyoKKwkgKiBFbXVsYXRl ZCByb290IGJyaWRnZSBoYXMgaXR3IG93biBlbXVsYXRlZCBpcnEgY2hpcCBhbmQgaXJxIGRvbWFp bi4KKwkgKiBWYXJpYWJsZSBwaW4gaXMgdGhlIElOVHggcGluICgxPUlOVEEsIDI9SU5UQiwgMz1J TlRDLCA0PUlOVEQpIGFuZAorCSAqIGh3aXJxIGZvciBpcnFfY3JlYXRlX21hcHBpbmcoKSBpcyBp bmRleGVkIGZyb20gemVyby4KKwkgKi8KKwlpZiAocGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSkK KwkJcmV0dXJuIGlycV9jcmVhdGVfbWFwcGluZyhwY2llLT5lbXVsX2lycV9kb21haW4sIHBpbi0x KTsKKwllbHNlCisJCXJldHVybiBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2koZGV2LCBzbG90LCBw aW4pOworfQorCiBzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBhZHZrX3BjaWVfZGlzYWJsZV9w aHkoc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkKIHsKIAlwaHlfcG93ZXJfb2ZmKHBjaWUtPnBoeSk7 CkBAIC0xNDMyLDEzICsxNDgzLDIzIEBAIHN0YXRpYyBpbnQgYWR2a19wY2llX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCisJcmV0ID0gYWR2 a19wY2llX2luaXRfZW11bF9pcnFfZG9tYWluKHBjaWUpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpcnFcbiIpOworCQlhZHZrX3BjaWVfcmVtb3Zl X2lycV9kb21haW4ocGNpZSk7CisJCWFkdmtfcGNpZV9yZW1vdmVfbXNpX2lycV9kb21haW4ocGNp ZSk7CisJCXJldHVybiByZXQ7CisJfQorCiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2Rh dGEocGNpZS0+aXJxLCBhZHZrX3BjaWVfaXJxX2hhbmRsZXIsIHBjaWUpOwogCiAJYnJpZGdlLT5z eXNkYXRhID0gcGNpZTsKIAlicmlkZ2UtPm9wcyA9ICZhZHZrX3BjaWVfb3BzOworCWJyaWRnZS0+ bWFwX2lycSA9IGFkdmtfcGNpZV9tYXBfaXJxOwogCiAJcmV0ID0gcGNpX2hvc3RfcHJvYmUoYnJp ZGdlKTsKIAlpZiAocmV0IDwgMCkgeworCQlhZHZrX3BjaWVfcmVtb3ZlX2VtdWxfaXJxX2RvbWFp bihwY2llKTsKIAkJYWR2a19wY2llX3JlbW92ZV9tc2lfaXJxX2RvbWFpbihwY2llKTsKIAkJYWR2 a19wY2llX3JlbW92ZV9pcnFfZG9tYWluKHBjaWUpOwogCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxl cl9hbmRfZGF0YShwY2llLT5pcnEsIE5VTEwsIE5VTEwpOwpAQCAtMTQ4Nyw2ICsxNTQ4LDcgQEAg c3RhdGljIGludCBhZHZrX3BjaWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJYWR2a193cml0ZWwocGNpZSwgUENJRV9JUlFfQUxMX01BU0ssIEhPU1RfQ1RSTF9JTlRfU1RB VFVTX1JFRyk7CiAKIAkvKiBSZW1vdmUgSVJRIGRvbWFpbnMgKi8KKwlhZHZrX3BjaWVfcmVtb3Zl X2VtdWxfaXJxX2RvbWFpbihwY2llKTsKIAlhZHZrX3BjaWVfcmVtb3ZlX21zaV9pcnFfZG9tYWlu KHBjaWUpOwogCWFkdmtfcGNpZV9yZW1vdmVfaXJxX2RvbWFpbihwY2llKTsKIAotLSAKMi4yMC4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=