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 1AD62C433EF for ; Mon, 10 Jan 2022 01:50:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237992AbiAJBuq (ORCPT ); Sun, 9 Jan 2022 20:50:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59582 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237996AbiAJBuq (ORCPT ); Sun, 9 Jan 2022 20:50:46 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9559BC06173F for ; Sun, 9 Jan 2022 17:50:45 -0800 (PST) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 2CC4560F55 for ; Mon, 10 Jan 2022 01:50:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CDF32C36AEF; Mon, 10 Jan 2022 01:50:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779444; bh=ERQmAU7MrPTBRzQ0rEyO1Wp0w9GsgejBo78GbfwYwuY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JaC7gjLqZwfzO6uSmJDq+wHFxuKSG138m2ailZHNjnJcJ0cm1h7sXrhhSbqjGRatO 3TJuATLcMPPBbeW1sGFnergngHS7JZkuH/Sm/3pwKbG10hEEwyOj7xcVqB04icbuzY gPRQMzMv4+Md5rQ5ECpyhzQAkbxYthbCgC1mI8Sntfizidn4xHtQngvgy5935Jnw4B GlAjQeKF8cqItIeuotUI15BUfGXBtcNUuf3pbyU2k9lRt705DJU7qstNBLOOovSr9b +QGqV1VjpTikmuq9zJ8q5hw4CP5l4s4sUdqYH4FnpL45HXgidkAUbBmfGdqBKJ4YsG arzKDBgXhzQTQ== 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 10/23] PCI: aardvark: Add support for masking MSI interrupts Date: Mon, 10 Jan 2022 02:50:05 +0100 Message-Id: <20220110015018.26359-11-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 We should not unmask MSIs at setup, but only when kernel asks for them to be unmasked. At setup, mask all MSIs, and implement IRQ chip callbacks for masking and unmasking particular MSIs. Signed-off-by: Pali Rohár Signed-off-by: Marek Behún --- drivers/pci/controller/pci-aardvark.c | 54 ++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c index 9d2462f076c1..51fedbcb41fb 100644 --- a/drivers/pci/controller/pci-aardvark.c +++ b/drivers/pci/controller/pci-aardvark.c @@ -275,6 +275,7 @@ struct advk_pcie { raw_spinlock_t irq_lock; struct irq_domain *msi_domain; struct irq_domain *msi_inner_domain; + raw_spinlock_t msi_irq_lock; DECLARE_BITMAP(msi_used, MSI_IRQ_NUM); struct mutex msi_used_lock; u16 msi_msg; @@ -571,12 +572,10 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie) advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG); advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG); - /* Disable All ISR0/1 Sources */ + /* Disable All ISR0/1 and MSI Sources */ advk_writel(pcie, PCIE_ISR0_ALL_MASK, PCIE_ISR0_MASK_REG); advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_MASK_REG); - - /* Unmask all MSIs */ - advk_writel(pcie, ~(u32)PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG); + advk_writel(pcie, PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG); /* Unmask summary MSI interrupt */ reg = advk_readl(pcie, PCIE_ISR0_MASK_REG); @@ -1198,10 +1197,52 @@ static int advk_msi_set_affinity(struct irq_data *irq_data, return -EINVAL; } +static void advk_msi_irq_mask(struct irq_data *d) +{ + struct advk_pcie *pcie = d->domain->host_data; + irq_hw_number_t hwirq = irqd_to_hwirq(d); + unsigned long flags; + u32 mask; + + raw_spin_lock_irqsave(&pcie->msi_irq_lock, flags); + mask = advk_readl(pcie, PCIE_MSI_MASK_REG); + mask |= BIT(hwirq); + advk_writel(pcie, mask, PCIE_MSI_MASK_REG); + raw_spin_unlock_irqrestore(&pcie->msi_irq_lock, flags); +} + +static void advk_msi_irq_unmask(struct irq_data *d) +{ + struct advk_pcie *pcie = d->domain->host_data; + irq_hw_number_t hwirq = irqd_to_hwirq(d); + unsigned long flags; + u32 mask; + + raw_spin_lock_irqsave(&pcie->msi_irq_lock, flags); + mask = advk_readl(pcie, PCIE_MSI_MASK_REG); + mask &= ~BIT(hwirq); + advk_writel(pcie, mask, PCIE_MSI_MASK_REG); + raw_spin_unlock_irqrestore(&pcie->msi_irq_lock, flags); +} + +static void advk_msi_top_irq_mask(struct irq_data *d) +{ + pci_msi_mask_irq(d); + irq_chip_mask_parent(d); +} + +static void advk_msi_top_irq_unmask(struct irq_data *d) +{ + pci_msi_unmask_irq(d); + irq_chip_unmask_parent(d); +} + static struct irq_chip advk_msi_bottom_irq_chip = { .name = "MSI", .irq_compose_msi_msg = advk_msi_irq_compose_msi_msg, .irq_set_affinity = advk_msi_set_affinity, + .irq_mask = advk_msi_irq_mask, + .irq_unmask = advk_msi_irq_unmask, }; static int advk_msi_irq_domain_alloc(struct irq_domain *domain, @@ -1291,7 +1332,9 @@ static const struct irq_domain_ops advk_pcie_irq_domain_ops = { }; static struct irq_chip advk_msi_irq_chip = { - .name = "advk-MSI", + .name = "advk-MSI", + .irq_mask = advk_msi_top_irq_mask, + .irq_unmask = advk_msi_top_irq_unmask, }; static struct msi_domain_info advk_msi_domain_info = { @@ -1305,6 +1348,7 @@ static int advk_pcie_init_msi_irq_domain(struct advk_pcie *pcie) struct device *dev = &pcie->pdev->dev; phys_addr_t msi_msg_phys; + raw_spin_lock_init(&pcie->msi_irq_lock); mutex_init(&pcie->msi_used_lock); msi_msg_phys = virt_to_phys(&pcie->msi_msg); -- 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 7E5EEC433F5 for ; Mon, 10 Jan 2022 01:55:35 +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=MKTnhNTe9N97kC/lrDK61eISqx7nC1kyf4vuuAiRJuQ=; b=1jZafGvGF/FpZZ HZs9LdmJnw5YEp0U5y2iOkRjSk9kJSTmnC9BGJi7aDM4xmXYl5B7q0uNGfTv0MU7pEIwx3Dk8C3Ku 0nl2sBUxVrWwZI7XGgw/Nx7yToi2sdCn4UQz/iQMWB/e3sFSNlU6DcWVHROk5I+Iopr2HbynquXfD Ge4/62mHz0tZfenYxcU53bBuBTV2aDQnCU/OKHGelHcmZ3yLxbsUnXaEKwpiUmgFA68WOtPwfT5yt ETyfbRNeoz4c7I+1DTJq5eSIBcE9f6byYS56qBoGR2OkMJ4F0L1KjUHLp5XzaxdyYn+AtAc8sCk0z 9WiSijwHY8Wg93hsaREw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n6jsv-008npx-QP; Mon, 10 Jan 2022 01:54:10 +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 1n6jpg-008lhc-N3 for linux-arm-kernel@lists.infradead.org; Mon, 10 Jan 2022 01:50:50 +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 8DAE1B81050; Mon, 10 Jan 2022 01:50:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CDF32C36AEF; Mon, 10 Jan 2022 01:50:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641779444; bh=ERQmAU7MrPTBRzQ0rEyO1Wp0w9GsgejBo78GbfwYwuY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JaC7gjLqZwfzO6uSmJDq+wHFxuKSG138m2ailZHNjnJcJ0cm1h7sXrhhSbqjGRatO 3TJuATLcMPPBbeW1sGFnergngHS7JZkuH/Sm/3pwKbG10hEEwyOj7xcVqB04icbuzY gPRQMzMv4+Md5rQ5ECpyhzQAkbxYthbCgC1mI8Sntfizidn4xHtQngvgy5935Jnw4B GlAjQeKF8cqItIeuotUI15BUfGXBtcNUuf3pbyU2k9lRt705DJU7qstNBLOOovSr9b +QGqV1VjpTikmuq9zJ8q5hw4CP5l4s4sUdqYH4FnpL45HXgidkAUbBmfGdqBKJ4YsG arzKDBgXhzQTQ== 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 10/23] PCI: aardvark: Add support for masking MSI interrupts Date: Mon, 10 Jan 2022 02:50:05 +0100 Message-Id: <20220110015018.26359-11-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_175049_085745_C4D113E3 X-CRM114-Status: GOOD ( 17.25 ) 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 RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KCldlIHNob3VsZCBub3QgdW5tYXNr IE1TSXMgYXQgc2V0dXAsIGJ1dCBvbmx5IHdoZW4ga2VybmVsIGFza3MgZm9yIHRoZW0KdG8gYmUg dW5tYXNrZWQuCgpBdCBzZXR1cCwgbWFzayBhbGwgTVNJcywgYW5kIGltcGxlbWVudCBJUlEgY2hp cCBjYWxsYmFja3MgZm9yIG1hc2tpbmcKYW5kIHVubWFza2luZyBwYXJ0aWN1bGFyIE1TSXMuCgpT aWduZWQtb2ZmLWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5 OiBNYXJlayBCZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy9wY2kvY29udHJv bGxlci9wY2ktYWFyZHZhcmsuYyB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBm aWxlIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKaW5kZXggOWQyNDYyZjA3NmMxLi41MWZlZGJjYjQxZmIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKKysrIGIv ZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwpAQCAtMjc1LDYgKzI3NSw3IEBA IHN0cnVjdCBhZHZrX3BjaWUgewogCXJhd19zcGlubG9ja190IGlycV9sb2NrOwogCXN0cnVjdCBp cnFfZG9tYWluICptc2lfZG9tYWluOwogCXN0cnVjdCBpcnFfZG9tYWluICptc2lfaW5uZXJfZG9t YWluOworCXJhd19zcGlubG9ja190IG1zaV9pcnFfbG9jazsKIAlERUNMQVJFX0JJVE1BUChtc2lf dXNlZCwgTVNJX0lSUV9OVU0pOwogCXN0cnVjdCBtdXRleCBtc2lfdXNlZF9sb2NrOwogCXUxNiBt c2lfbXNnOwpAQCAtNTcxLDEyICs1NzIsMTAgQEAgc3RhdGljIHZvaWQgYWR2a19wY2llX3NldHVw X2h3KHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiAJYWR2a193cml0ZWwocGNpZSwgUENJRV9JU1Ix X0FMTF9NQVNLLCBQQ0lFX0lTUjFfUkVHKTsKIAlhZHZrX3dyaXRlbChwY2llLCBQQ0lFX0lSUV9B TExfTUFTSywgSE9TVF9DVFJMX0lOVF9TVEFUVVNfUkVHKTsKIAotCS8qIERpc2FibGUgQWxsIElT UjAvMSBTb3VyY2VzICovCisJLyogRGlzYWJsZSBBbGwgSVNSMC8xIGFuZCBNU0kgU291cmNlcyAq LwogCWFkdmtfd3JpdGVsKHBjaWUsIFBDSUVfSVNSMF9BTExfTUFTSywgUENJRV9JU1IwX01BU0tf UkVHKTsKIAlhZHZrX3dyaXRlbChwY2llLCBQQ0lFX0lTUjFfQUxMX01BU0ssIFBDSUVfSVNSMV9N QVNLX1JFRyk7Ci0KLQkvKiBVbm1hc2sgYWxsIE1TSXMgKi8KLQlhZHZrX3dyaXRlbChwY2llLCB+ KHUzMilQQ0lFX01TSV9BTExfTUFTSywgUENJRV9NU0lfTUFTS19SRUcpOworCWFkdmtfd3JpdGVs KHBjaWUsIFBDSUVfTVNJX0FMTF9NQVNLLCBQQ0lFX01TSV9NQVNLX1JFRyk7CiAKIAkvKiBVbm1h c2sgc3VtbWFyeSBNU0kgaW50ZXJydXB0ICovCiAJcmVnID0gYWR2a19yZWFkbChwY2llLCBQQ0lF X0lTUjBfTUFTS19SRUcpOwpAQCAtMTE5OCwxMCArMTE5Nyw1MiBAQCBzdGF0aWMgaW50IGFkdmtf bXNpX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLAogCXJldHVybiAtRUlO VkFMOwogfQogCitzdGF0aWMgdm9pZCBhZHZrX21zaV9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEg KmQpCit7CisJc3RydWN0IGFkdmtfcGNpZSAqcGNpZSA9IGQtPmRvbWFpbi0+aG9zdF9kYXRhOwor CWlycV9od19udW1iZXJfdCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwl1MzIgbWFzazsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpZS0+bXNp X2lycV9sb2NrLCBmbGFncyk7CisJbWFzayA9IGFkdmtfcmVhZGwocGNpZSwgUENJRV9NU0lfTUFT S19SRUcpOworCW1hc2sgfD0gQklUKGh3aXJxKTsKKwlhZHZrX3dyaXRlbChwY2llLCBtYXNrLCBQ Q0lFX01TSV9NQVNLX1JFRyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPm1z aV9pcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHZrX21zaV9pcnFfdW5tYXNr KHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgYWR2a19wY2llICpwY2llID0gZC0+ZG9t YWluLT5ob3N0X2RhdGE7CisJaXJxX2h3X251bWJlcl90IGh3aXJxID0gaXJxZF90b19od2lycShk KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBtYXNrOworCisJcmF3X3NwaW5fbG9ja19p cnFzYXZlKCZwY2llLT5tc2lfaXJxX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gYWR2a19yZWFkbChw Y2llLCBQQ0lFX01TSV9NQVNLX1JFRyk7CisJbWFzayAmPSB+QklUKGh3aXJxKTsKKwlhZHZrX3dy aXRlbChwY2llLCBtYXNrLCBQQ0lFX01TSV9NQVNLX1JFRyk7CisJcmF3X3NwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnBjaWUtPm1zaV9pcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBh ZHZrX21zaV90b3BfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQoreworCXBjaV9tc2lfbWFz a19pcnEoZCk7CisJaXJxX2NoaXBfbWFza19wYXJlbnQoZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFk dmtfbXNpX3RvcF9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlwY2lfbXNpX3Vu bWFza19pcnEoZCk7CisJaXJxX2NoaXBfdW5tYXNrX3BhcmVudChkKTsKK30KKwogc3RhdGljIHN0 cnVjdCBpcnFfY2hpcCBhZHZrX21zaV9ib3R0b21faXJxX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJN U0kiLAogCS5pcnFfY29tcG9zZV9tc2lfbXNnCT0gYWR2a19tc2lfaXJxX2NvbXBvc2VfbXNpX21z ZywKIAkuaXJxX3NldF9hZmZpbml0eQk9IGFkdmtfbXNpX3NldF9hZmZpbml0eSwKKwkuaXJxX21h c2sJCT0gYWR2a19tc2lfaXJxX21hc2ssCisJLmlycV91bm1hc2sJCT0gYWR2a19tc2lfaXJxX3Vu bWFzaywKIH07CiAKIHN0YXRpYyBpbnQgYWR2a19tc2lfaXJxX2RvbWFpbl9hbGxvYyhzdHJ1Y3Qg aXJxX2RvbWFpbiAqZG9tYWluLApAQCAtMTI5MSw3ICsxMzMyLDkgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBpcnFfZG9tYWluX29wcyBhZHZrX3BjaWVfaXJxX2RvbWFpbl9vcHMgPSB7CiB9OwogCiBz dGF0aWMgc3RydWN0IGlycV9jaGlwIGFkdmtfbXNpX2lycV9jaGlwID0gewotCS5uYW1lID0gImFk dmstTVNJIiwKKwkubmFtZQkJPSAiYWR2ay1NU0kiLAorCS5pcnFfbWFzawk9IGFkdmtfbXNpX3Rv cF9pcnFfbWFzaywKKwkuaXJxX3VubWFzawk9IGFkdmtfbXNpX3RvcF9pcnFfdW5tYXNrLAogfTsK IAogc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gYWR2a19tc2lfZG9tYWluX2luZm8gPSB7 CkBAIC0xMzA1LDYgKzEzNDgsNyBAQCBzdGF0aWMgaW50IGFkdmtfcGNpZV9pbml0X21zaV9pcnFf ZG9tYWluKHN0cnVjdCBhZHZrX3BjaWUgKnBjaWUpCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBj aWUtPnBkZXYtPmRldjsKIAlwaHlzX2FkZHJfdCBtc2lfbXNnX3BoeXM7CiAKKwlyYXdfc3Bpbl9s b2NrX2luaXQoJnBjaWUtPm1zaV9pcnFfbG9jayk7CiAJbXV0ZXhfaW5pdCgmcGNpZS0+bXNpX3Vz ZWRfbG9jayk7CiAKIAltc2lfbXNnX3BoeXMgPSB2aXJ0X3RvX3BoeXMoJnBjaWUtPm1zaV9tc2cp OwotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=