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 0A711C433F5 for ; Fri, 26 Nov 2021 15:06:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377922AbhKZPJq (ORCPT ); Fri, 26 Nov 2021 10:09:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346753AbhKZPHq (ORCPT ); Fri, 26 Nov 2021 10:07:46 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C866C0613B4; Fri, 26 Nov 2021 06:51:38 -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 ams.source.kernel.org (Postfix) with ESMTPS id 94BACB827EB; Fri, 26 Nov 2021 14:43:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAA1EC004E1; Fri, 26 Nov 2021 14:43:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637937832; bh=eHdxVaxHiuruMF/9Td8JoiWopFdjBhE0ZD897U8weQU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z4wHuKmwrcGSBJwwGzCOqIi/9n7zgCfT0+vucq/Kwv1xcEtrkCshvG+dC+L+9OS6J KOA85PW+J0owUGdn7LFHypacJ3SrM8WNBk5WGqG9ZdkUgeE3ZBcHsImgpcKhjYAzAK OWGt+LR3HDKKu+uWpjEBCIvslfML7v4flRvP/yy+jJajPkpjYA5Clt5au1gTV1GGCN iLU3lS2qPABXmWbkuqaP6OTJaUh5aQWWWHismcJb0KDzCzyhsHL+hjlKRhHZ/JpOoT ICxtPjI87aOuXpr0Biw3MrwT6zZo/HLZiiGfIyIDa8Of8zgPBbXae2EQzLlK08ytn3 DsUJDpVqu8/tA== Received: by pali.im (Postfix) id 8C608EF6; Fri, 26 Nov 2021 15:43:49 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Rob Herring , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Bjorn Helgaas , Thomas Petazzoni , Arnd Bergmann , Nathan Chancellor , Chris Packham , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Jan=20Kundr=C3=A1t?= Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] PCI: mvebu: Add support for compiling driver as module Date: Fri, 26 Nov 2021 15:43:07 +0100 Message-Id: <20211126144307.7568-3-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211126144307.7568-1-pali@kernel.org> References: <20211126144307.7568-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 Now when driver uses devm_pci_remap_iospace() function, it is possible implement ->remove() callback for unbinding device from driver. Implement mvebu_pcie_remove() callback with proper cleanup phase, drop driver's suppress_bind_attrs flag and switch type of CONFIG_PCI_MVEBU option from bool to tristate. This allows to compile pci-mvebu.c driver as loadable module pci-mvebu.ko with ability to unload it. Signed-off-by: Pali Rohár --- drivers/pci/controller/Kconfig | 2 +- drivers/pci/controller/pci-mvebu.c | 91 +++++++++++++++++++++++++----- 2 files changed, 77 insertions(+), 16 deletions(-) diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig index 93b141110537..67189bcd5d89 100644 --- a/drivers/pci/controller/Kconfig +++ b/drivers/pci/controller/Kconfig @@ -4,7 +4,7 @@ menu "PCI controller drivers" depends on PCI config PCI_MVEBU - bool "Marvell EBU PCIe controller" + tristate "Marvell EBU PCIe controller" depends on ARCH_MVEBU || ARCH_DOVE || COMPILE_TEST depends on MVEBU_MBUS depends on ARM diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c index f2180e4630a1..f43492695f94 100644 --- a/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -145,22 +146,13 @@ static void mvebu_pcie_set_local_dev_nr(struct mvebu_pcie_port *port, int nr) mvebu_writel(port, stat, PCIE_STAT_OFF); } -/* - * Setup PCIE BARs and Address Decode Wins: - * BAR[0] -> internal registers (needed for MSI) - * BAR[1] -> covers all DRAM banks - * BAR[2] -> Disabled - * WIN[0-3] -> DRAM bank[0-3] - */ -static void mvebu_pcie_setup_wins(struct mvebu_pcie_port *port) +static void mvebu_pcie_disable_wins(struct mvebu_pcie_port *port) { - const struct mbus_dram_target_info *dram; - u32 size; int i; - dram = mv_mbus_dram_info(); + mvebu_writel(port, 0, PCIE_BAR_LO_OFF(0)); + mvebu_writel(port, 0, PCIE_BAR_HI_OFF(0)); - /* First, disable and clear BARs and windows. */ for (i = 1; i < 3; i++) { mvebu_writel(port, 0, PCIE_BAR_CTRL_OFF(i)); mvebu_writel(port, 0, PCIE_BAR_LO_OFF(i)); @@ -176,6 +168,25 @@ static void mvebu_pcie_setup_wins(struct mvebu_pcie_port *port) mvebu_writel(port, 0, PCIE_WIN5_CTRL_OFF); mvebu_writel(port, 0, PCIE_WIN5_BASE_OFF); mvebu_writel(port, 0, PCIE_WIN5_REMAP_OFF); +} + +/* + * Setup PCIE BARs and Address Decode Wins: + * BAR[0] -> internal registers (needed for MSI) + * BAR[1] -> covers all DRAM banks + * BAR[2] -> Disabled + * WIN[0-3] -> DRAM bank[0-3] + */ +static void mvebu_pcie_setup_wins(struct mvebu_pcie_port *port) +{ + const struct mbus_dram_target_info *dram; + u32 size; + int i; + + dram = mv_mbus_dram_info(); + + /* First, disable and clear BARs and windows. */ + mvebu_pcie_disable_wins(port); /* Setup windows for DDR banks. Count total DDR size on the fly. */ size = 0; @@ -1082,6 +1093,52 @@ static int mvebu_pcie_probe(struct platform_device *pdev) return pci_host_probe(bridge); } +static int mvebu_pcie_remove(struct platform_device *pdev) +{ + struct mvebu_pcie *pcie = platform_get_drvdata(pdev); + struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie); + u32 cmd; + int i; + + /* Remove PCI bus with all devices. */ + pci_lock_rescan_remove(); + pci_stop_root_bus(bridge->bus); + pci_remove_root_bus(bridge->bus); + pci_unlock_rescan_remove(); + + for (i = 0; i < pcie->nports; i++) { + struct mvebu_pcie_port *port = &pcie->ports[i]; + + if (!port->base) + continue; + + /* Disable Root Bridge I/O space, memory space and bus mastering. */ + cmd = mvebu_readl(port, PCIE_CMD_OFF); + cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); + mvebu_writel(port, cmd, PCIE_CMD_OFF); + + /* Mask all interrupt sources. */ + mvebu_writel(port, 0, PCIE_MASK_OFF); + + /* Free config space for emulated root bridge. */ + pci_bridge_emul_cleanup(&port->bridge); + + /* Disable and clear BARs and windows. */ + mvebu_pcie_disable_wins(port); + + /* Delete PCIe IO and MEM windows. */ + if (port->iowin.size) + mvebu_pcie_del_windows(port, port->iowin.base, port->iowin.size); + if (port->memwin.size) + mvebu_pcie_del_windows(port, port->memwin.base, port->memwin.size); + + /* Power down card and disable clocks. Must be the last step. */ + mvebu_pcie_powerdown(port); + } + + return 0; +} + static const struct of_device_id mvebu_pcie_of_match_table[] = { { .compatible = "marvell,armada-xp-pcie", }, { .compatible = "marvell,armada-370-pcie", }, @@ -1098,10 +1155,14 @@ static struct platform_driver mvebu_pcie_driver = { .driver = { .name = "mvebu-pcie", .of_match_table = mvebu_pcie_of_match_table, - /* driver unloading/unbinding currently not supported */ - .suppress_bind_attrs = true, .pm = &mvebu_pcie_pm_ops, }, .probe = mvebu_pcie_probe, + .remove = mvebu_pcie_remove, }; -builtin_platform_driver(mvebu_pcie_driver); +module_platform_driver(mvebu_pcie_driver); + +MODULE_AUTHOR("Thomas Petazzoni "); +MODULE_AUTHOR("Pali Rohár "); +MODULE_DESCRIPTION("Marvell EBU PCIe controller"); +MODULE_LICENSE("GPL v2"); -- 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 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 56D3FC433EF for ; Fri, 26 Nov 2021 14:45:40 +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=v+BVjvWmbznR3HshbJRQwmTre3Ur/UlatxC6I8lsfvI=; b=hAysAle8WVYt7j aMpAU5JTh6sC99AGw7aA4HqE8D8H4AnBGNkcMotI3PR5EEcwAxJa9ODzbAQYMp27Ci1Af96p/HJYB xhs+AsPtD1fiZvLk+Onx0LnjfAF4CkxkKxaBQHVRI8R+aZsj694/6sG79ZsvVG8D3/5SStg3wPKMZ boKvSKJSEVMCGLxeoY6zkfBWy0cxFmLjwlLCtXNva0TjuQIZa1EHd7tsq64GWj+eJyxPMVm2Hur4O EGoFD/5AC1PyUTNZ4fv1xiHAmcSIVqSYyIu1PxOXRLqUWP4ziV7/bQ0JD8K3bjnQ4Kt1xCtdZbY+F YGXGcyJTU89oPAkLcxkw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mqcSX-00AoMY-Tj; Fri, 26 Nov 2021 14:44:18 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mqcS8-00AoIb-Uu for linux-arm-kernel@lists.infradead.org; Fri, 26 Nov 2021 14:43:54 +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 dfw.source.kernel.org (Postfix) with ESMTPS id 5AB9C6229F; Fri, 26 Nov 2021 14:43:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAA1EC004E1; Fri, 26 Nov 2021 14:43:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637937832; bh=eHdxVaxHiuruMF/9Td8JoiWopFdjBhE0ZD897U8weQU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z4wHuKmwrcGSBJwwGzCOqIi/9n7zgCfT0+vucq/Kwv1xcEtrkCshvG+dC+L+9OS6J KOA85PW+J0owUGdn7LFHypacJ3SrM8WNBk5WGqG9ZdkUgeE3ZBcHsImgpcKhjYAzAK OWGt+LR3HDKKu+uWpjEBCIvslfML7v4flRvP/yy+jJajPkpjYA5Clt5au1gTV1GGCN iLU3lS2qPABXmWbkuqaP6OTJaUh5aQWWWHismcJb0KDzCzyhsHL+hjlKRhHZ/JpOoT ICxtPjI87aOuXpr0Biw3MrwT6zZo/HLZiiGfIyIDa8Of8zgPBbXae2EQzLlK08ytn3 DsUJDpVqu8/tA== Received: by pali.im (Postfix) id 8C608EF6; Fri, 26 Nov 2021 15:43:49 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Rob Herring , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Bjorn Helgaas , Thomas Petazzoni , Arnd Bergmann , Nathan Chancellor , Chris Packham , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Jan=20Kundr=C3=A1t?= Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] PCI: mvebu: Add support for compiling driver as module Date: Fri, 26 Nov 2021 15:43:07 +0100 Message-Id: <20211126144307.7568-3-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211126144307.7568-1-pali@kernel.org> References: <20211126144307.7568-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211126_064353_098378_4A4B3004 X-CRM114-Status: GOOD ( 26.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 Tm93IHdoZW4gZHJpdmVyIHVzZXMgZGV2bV9wY2lfcmVtYXBfaW9zcGFjZSgpIGZ1bmN0aW9uLCBp dCBpcyBwb3NzaWJsZQppbXBsZW1lbnQgLT5yZW1vdmUoKSBjYWxsYmFjayBmb3IgdW5iaW5kaW5n IGRldmljZSBmcm9tIGRyaXZlci4KCkltcGxlbWVudCBtdmVidV9wY2llX3JlbW92ZSgpIGNhbGxi YWNrIHdpdGggcHJvcGVyIGNsZWFudXAgcGhhc2UsIGRyb3AKZHJpdmVyJ3Mgc3VwcHJlc3NfYmlu ZF9hdHRycyBmbGFnIGFuZCBzd2l0Y2ggdHlwZSBvZiBDT05GSUdfUENJX01WRUJVCm9wdGlvbiBm cm9tIGJvb2wgdG8gdHJpc3RhdGUuCgpUaGlzIGFsbG93cyB0byBjb21waWxlIHBjaS1tdmVidS5j IGRyaXZlciBhcyBsb2FkYWJsZSBtb2R1bGUgcGNpLW12ZWJ1LmtvCndpdGggYWJpbGl0eSB0byB1 bmxvYWQgaXQuCgpTaWduZWQtb2ZmLWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgot LS0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyAgICAgfCAgMiArLQogZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2ktbXZlYnUuYyB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgYi9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL0tjb25maWcKaW5kZXggOTNiMTQxMTEwNTM3Li42NzE4OWJjZDVkODkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bj aS9jb250cm9sbGVyL0tjb25maWcKQEAgLTQsNyArNCw3IEBAIG1lbnUgIlBDSSBjb250cm9sbGVy IGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBQQ0kKIAogY29uZmlnIFBDSV9NVkVCVQotCWJvb2wgIk1h cnZlbGwgRUJVIFBDSWUgY29udHJvbGxlciIKKwl0cmlzdGF0ZSAiTWFydmVsbCBFQlUgUENJZSBj b250cm9sbGVyIgogCWRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBBUkNIX0RPVkUgfHwgQ09NUElM RV9URVNUCiAJZGVwZW5kcyBvbiBNVkVCVV9NQlVTCiAJZGVwZW5kcyBvbiBBUk0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLW12ZWJ1LmMgYi9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL3BjaS1tdmVidS5jCmluZGV4IGYyMTgwZTQ2MzBhMS4uZjQzNDkyNjk1Zjk0IDEwMDY0 NAotLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1tdmVidS5jCisrKyBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvcGNpLW12ZWJ1LmMKQEAgLTYsNiArNiw3IEBACiAgKi8KIAogI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUg PGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CkBAIC0xNDUsMjIgKzE0NiwxMyBAQCBzdGF0aWMgdm9pZCBtdmVidV9wY2llX3NldF9s b2NhbF9kZXZfbnIoc3RydWN0IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydCwgaW50IG5yKQogCW12ZWJ1 X3dyaXRlbChwb3J0LCBzdGF0LCBQQ0lFX1NUQVRfT0ZGKTsKIH0KIAotLyoKLSAqIFNldHVwIFBD SUUgQkFScyBhbmQgQWRkcmVzcyBEZWNvZGUgV2luczoKLSAqIEJBUlswXSAtPiBpbnRlcm5hbCBy ZWdpc3RlcnMgKG5lZWRlZCBmb3IgTVNJKQotICogQkFSWzFdIC0+IGNvdmVycyBhbGwgRFJBTSBi YW5rcwotICogQkFSWzJdIC0+IERpc2FibGVkCi0gKiBXSU5bMC0zXSAtPiBEUkFNIGJhbmtbMC0z XQotICovCi1zdGF0aWMgdm9pZCBtdmVidV9wY2llX3NldHVwX3dpbnMoc3RydWN0IG12ZWJ1X3Bj aWVfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIG12ZWJ1X3BjaWVfZGlzYWJsZV93aW5zKHN0cnVj dCBtdmVidV9wY2llX3BvcnQgKnBvcnQpCiB7Ci0JY29uc3Qgc3RydWN0IG1idXNfZHJhbV90YXJn ZXRfaW5mbyAqZHJhbTsKLQl1MzIgc2l6ZTsKIAlpbnQgaTsKIAotCWRyYW0gPSBtdl9tYnVzX2Ry YW1faW5mbygpOworCW12ZWJ1X3dyaXRlbChwb3J0LCAwLCBQQ0lFX0JBUl9MT19PRkYoMCkpOwor CW12ZWJ1X3dyaXRlbChwb3J0LCAwLCBQQ0lFX0JBUl9ISV9PRkYoMCkpOwogCi0JLyogRmlyc3Qs IGRpc2FibGUgYW5kIGNsZWFyIEJBUnMgYW5kIHdpbmRvd3MuICovCiAJZm9yIChpID0gMTsgaSA8 IDM7IGkrKykgewogCQltdmVidV93cml0ZWwocG9ydCwgMCwgUENJRV9CQVJfQ1RSTF9PRkYoaSkp OwogCQltdmVidV93cml0ZWwocG9ydCwgMCwgUENJRV9CQVJfTE9fT0ZGKGkpKTsKQEAgLTE3Niw2 ICsxNjgsMjUgQEAgc3RhdGljIHZvaWQgbXZlYnVfcGNpZV9zZXR1cF93aW5zKHN0cnVjdCBtdmVi dV9wY2llX3BvcnQgKnBvcnQpCiAJbXZlYnVfd3JpdGVsKHBvcnQsIDAsIFBDSUVfV0lONV9DVFJM X09GRik7CiAJbXZlYnVfd3JpdGVsKHBvcnQsIDAsIFBDSUVfV0lONV9CQVNFX09GRik7CiAJbXZl YnVfd3JpdGVsKHBvcnQsIDAsIFBDSUVfV0lONV9SRU1BUF9PRkYpOworfQorCisvKgorICogU2V0 dXAgUENJRSBCQVJzIGFuZCBBZGRyZXNzIERlY29kZSBXaW5zOgorICogQkFSWzBdIC0+IGludGVy bmFsIHJlZ2lzdGVycyAobmVlZGVkIGZvciBNU0kpCisgKiBCQVJbMV0gLT4gY292ZXJzIGFsbCBE UkFNIGJhbmtzCisgKiBCQVJbMl0gLT4gRGlzYWJsZWQKKyAqIFdJTlswLTNdIC0+IERSQU0gYmFu a1swLTNdCisgKi8KK3N0YXRpYyB2b2lkIG12ZWJ1X3BjaWVfc2V0dXBfd2lucyhzdHJ1Y3QgbXZl YnVfcGNpZV9wb3J0ICpwb3J0KQoreworCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2lu Zm8gKmRyYW07CisJdTMyIHNpemU7CisJaW50IGk7CisKKwlkcmFtID0gbXZfbWJ1c19kcmFtX2lu Zm8oKTsKKworCS8qIEZpcnN0LCBkaXNhYmxlIGFuZCBjbGVhciBCQVJzIGFuZCB3aW5kb3dzLiAq LworCW12ZWJ1X3BjaWVfZGlzYWJsZV93aW5zKHBvcnQpOwogCiAJLyogU2V0dXAgd2luZG93cyBm b3IgRERSIGJhbmtzLiAgQ291bnQgdG90YWwgRERSIHNpemUgb24gdGhlIGZseS4gKi8KIAlzaXpl ID0gMDsKQEAgLTEwODIsNiArMTA5Myw1MiBAQCBzdGF0aWMgaW50IG12ZWJ1X3BjaWVfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlyZXR1cm4gcGNpX2hvc3RfcHJvYmUoYnJp ZGdlKTsKIH0KIAorc3RhdGljIGludCBtdmVidV9wY2llX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdmVidV9wY2llICpwY2llID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7CisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlID0gcGNpX2hv c3RfYnJpZGdlX2Zyb21fcHJpdihwY2llKTsKKwl1MzIgY21kOworCWludCBpOworCisJLyogUmVt b3ZlIFBDSSBidXMgd2l0aCBhbGwgZGV2aWNlcy4gKi8KKwlwY2lfbG9ja19yZXNjYW5fcmVtb3Zl KCk7CisJcGNpX3N0b3Bfcm9vdF9idXMoYnJpZGdlLT5idXMpOworCXBjaV9yZW1vdmVfcm9vdF9i dXMoYnJpZGdlLT5idXMpOworCXBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpOworCisJZm9yIChp ID0gMDsgaSA8IHBjaWUtPm5wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBtdmVidV9wY2llX3BvcnQg KnBvcnQgPSAmcGNpZS0+cG9ydHNbaV07CisKKwkJaWYgKCFwb3J0LT5iYXNlKQorCQkJY29udGlu dWU7CisKKwkJLyogRGlzYWJsZSBSb290IEJyaWRnZSBJL08gc3BhY2UsIG1lbW9yeSBzcGFjZSBh bmQgYnVzIG1hc3RlcmluZy4gKi8KKwkJY21kID0gbXZlYnVfcmVhZGwocG9ydCwgUENJRV9DTURf T0ZGKTsKKwkJY21kICY9IH4oUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQ Q0lfQ09NTUFORF9NQVNURVIpOworCQltdmVidV93cml0ZWwocG9ydCwgY21kLCBQQ0lFX0NNRF9P RkYpOworCisJCS8qIE1hc2sgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLworCQltdmVidV93cml0 ZWwocG9ydCwgMCwgUENJRV9NQVNLX09GRik7CisKKwkJLyogRnJlZSBjb25maWcgc3BhY2UgZm9y IGVtdWxhdGVkIHJvb3QgYnJpZGdlLiAqLworCQlwY2lfYnJpZGdlX2VtdWxfY2xlYW51cCgmcG9y dC0+YnJpZGdlKTsKKworCQkvKiBEaXNhYmxlIGFuZCBjbGVhciBCQVJzIGFuZCB3aW5kb3dzLiAq LworCQltdmVidV9wY2llX2Rpc2FibGVfd2lucyhwb3J0KTsKKworCQkvKiBEZWxldGUgUENJZSBJ TyBhbmQgTUVNIHdpbmRvd3MuICovCisJCWlmIChwb3J0LT5pb3dpbi5zaXplKQorCQkJbXZlYnVf cGNpZV9kZWxfd2luZG93cyhwb3J0LCBwb3J0LT5pb3dpbi5iYXNlLCBwb3J0LT5pb3dpbi5zaXpl KTsKKwkJaWYgKHBvcnQtPm1lbXdpbi5zaXplKQorCQkJbXZlYnVfcGNpZV9kZWxfd2luZG93cyhw b3J0LCBwb3J0LT5tZW13aW4uYmFzZSwgcG9ydC0+bWVtd2luLnNpemUpOworCisJCS8qIFBvd2Vy IGRvd24gY2FyZCBhbmQgZGlzYWJsZSBjbG9ja3MuIE11c3QgYmUgdGhlIGxhc3Qgc3RlcC4gKi8K KwkJbXZlYnVfcGNpZV9wb3dlcmRvd24ocG9ydCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG12ZWJ1X3BjaWVfb2ZfbWF0Y2hfdGFibGVb XSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLXhwLXBjaWUiLCB9LAogCXsg LmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLXBjaWUiLCB9LApAQCAtMTA5OCwxMCAr MTE1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdmVidV9wY2llX2RyaXZl ciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJtdmVidS1wY2llIiwKIAkJLm9mX21hdGNo X3RhYmxlID0gbXZlYnVfcGNpZV9vZl9tYXRjaF90YWJsZSwKLQkJLyogZHJpdmVyIHVubG9hZGlu Zy91bmJpbmRpbmcgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KLQkJLnN1cHByZXNzX2JpbmRf YXR0cnMgPSB0cnVlLAogCQkucG0gPSAmbXZlYnVfcGNpZV9wbV9vcHMsCiAJfSwKIAkucHJvYmUg PSBtdmVidV9wY2llX3Byb2JlLAorCS5yZW1vdmUgPSBtdmVidV9wY2llX3JlbW92ZSwKIH07Ci1i dWlsdGluX3BsYXRmb3JtX2RyaXZlcihtdmVidV9wY2llX2RyaXZlcik7Cittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKG12ZWJ1X3BjaWVfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIFBl dGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBib290bGluLmNvbT4iKTsKK01PRFVMRV9BVVRIT1Io IlBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1h cnZlbGwgRUJVIFBDSWUgY29udHJvbGxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwot LSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=