From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3919185D for ; Sat, 2 Sep 2023 04:52:26 +0000 (UTC) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1bf1935f6c2so4016405ad.1 for ; Fri, 01 Sep 2023 21:52:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1693630346; x=1694235146; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ijD/QXgkfcmQQpjgZVWk02lSeb5Kah86yA9TYX6zx1I=; b=nVQ6huGlXRYUPlgv10ukoWEQIeXlNwUjGnvdJHgxN9DuASf8LmIcCGCtGKoXrDem/i LiYX7Jev8sVS7mV+7HHtiQzx/cQcj3QnaqFU2Mu4ThP0xKfpe5E6NCDTiYCB/1pIjnGw 5aPS8OziUUdBbG87G53R6y0g+aiT7EN71MNJpBf4k4VQ3tP2L8KFD7SXkV3EJiwR7HX7 2ClL2QC4ebiEu4o+UzVgU0Y9uKzsWy347D8j/TRkxqB8kqKLaFAPy6xzCON9mLN5QuPN wH7OpAkiNCHP+eyEFiKcSgoCCEiaGtT6PGE2mWI6NiMJZjCI+aEmCKtu0AXt80Cb6+Cu Q7Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693630346; x=1694235146; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ijD/QXgkfcmQQpjgZVWk02lSeb5Kah86yA9TYX6zx1I=; b=PPCb8V9aqzKXQq0u3uPhKuVO8zk1y9EljX7kQsxgtoItMwWcErpw0gOAUvpF7gTX9h wHQJgWoJeCXUR/QlK6/cqW9+3xIjhfCLx6WznBiIX6AYEfeou1s55thXxPotnVE/QF4K XYh27+BOyl5iLqtKSR9l7UwmY2Mxc4By/H1m25HPgv8smDMpI/ycqBwIU1qb75XpfCdi ylb8+dBk17G02GQVpH3hZV7aFh+BuisTlhQHGrIdMRkDJx15pcNcNeU3miJVnWL0grN/ VRT/DCY72qV42ZNldtXZfrVDZhM+abfjsWdH5maWWvQPeha+lumEqvDvEO+mKfZVgmTi 2TUQ== X-Gm-Message-State: AOJu0YxMmCJK/zRmsjScJV8uphmeaNPS2g75l9nsgb37bLAZ5uskhOaN 69zFi/2jgNH01BrBIUybsgIy X-Google-Smtp-Source: AGHT+IHn+lpzw9uFuVsUrK4hFksx30nUuJVmCY/9azhZGZuuOYfsE09NMsfHfbXcr11fLWIN9x+S/g== X-Received: by 2002:a17:902:ce83:b0:1bc:2fe1:1821 with SMTP id f3-20020a170902ce8300b001bc2fe11821mr6157887plg.17.1693630345688; Fri, 01 Sep 2023 21:52:25 -0700 (PDT) Received: from thinkpad ([117.217.187.8]) by smtp.gmail.com with ESMTPSA id u10-20020a170902e80a00b001aadd0d7364sm3794308plg.83.2023.09.01.21.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 21:52:24 -0700 (PDT) Date: Sat, 2 Sep 2023 10:22:14 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: tglx@linutronix.de, aisheng.dong@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, festevam@gmail.com, imx@lists.linux.dev, jdmason@kudzu.us, kernel@pengutronix.de, kishon@ti.com, krzysztof.kozlowski+dt@linaro.org, kw@linux.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, maz@kernel.org, ntb@lists.linux.dev, peng.fan@nxp.com, robh+dt@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org Subject: Re: [PATCH 1/3] PCI: endpoint: Add RC-to-EP doorbell support using platform MSI controller Message-ID: <20230902045214.GA2913@thinkpad> References: <20230426203436.1277307-1-Frank.Li@nxp.com> <20230426203436.1277307-2-Frank.Li@nxp.com> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230426203436.1277307-2-Frank.Li@nxp.com> On Wed, Apr 26, 2023 at 04:34:34PM -0400, Frank Li wrote: > This commit introduces a common method for sending messages from the Root Complex > (RC) to the Endpoint (EP) by utilizing the platform MSI interrupt controller, > such as ARM GIC, as an EP doorbell. Maps the memory assigned for the BAR region > by the PCI host to the message address of the platform MSI interrupt controller > in the PCI EP. As a result, when the PCI RC writes to the BAR region, it triggers > an IRQ at the EP. This implementation serves as a common method for all endpoint > function drivers. > > However, it currently supports only one EP physical function due to limitations > in ARM MSI/IMS readiness. > I've provided generic comments below, but I will do one more thorough review after seeing epf-test driver patch. > Signed-off-by: Frank Li > --- > drivers/pci/endpoint/pci-epf-core.c | 109 ++++++++++++++++++++++++++++ > include/linux/pci-epf.h | 16 ++++ > 2 files changed, 125 insertions(+) > > diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c > index 355a6f56fcea..94ac82bf84c5 100644 > --- a/drivers/pci/endpoint/pci-epf-core.c > +++ b/drivers/pci/endpoint/pci-epf-core.c > @@ -6,10 +6,12 @@ > * Author: Kishon Vijay Abraham I > */ > > +#include Why is this needed? > #include > #include > #include > #include > +#include > > #include > #include > @@ -300,6 +302,113 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar, > } > EXPORT_SYMBOL_GPL(pci_epf_alloc_space); > > +static enum irqreturn pci_epf_interrupt_handler(int irq, void *data) static irqreturn_t s/pci_epf_interrupt_handler/pci_epf_doorbell_handler > +{ > + struct pci_epf *epf = data; > + > + if (epf->event_ops && epf->event_ops->doorbell) > + epf->event_ops->doorbell(epf, irq - epf->virq_base); > + > + return IRQ_HANDLED; > +} > + > +static void pci_epf_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg) > +{ > + struct pci_epc *epc = container_of(desc->dev, struct pci_epc, dev); > + struct pci_epf *epf; > + > + /* Todo: Need check correct epf if multi epf supported */ > + list_for_each_entry(epf, &epc->pci_epf, list) { > + if (epf->msg && desc->msi_index < epf->num_msgs) > + epf->msg[desc->msi_index] = *msg; > + } > +} > + > +int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_msgs) > +{ > + struct irq_domain *domain; > + struct pci_epc *epc; > + struct device *dev; > + int virq; > + int ret; > + int i; > + > + epc = epf->epc; > + dev = &epc->dev; "epc_dev" to make it explicit > + > + /* > + * Current only support 1 function. What does this mean exactly? Even a single EPC can support multiple EPFs > + * PCI IMS(interrupt message store) ARM support have not been > + * ready yet. No need to mention platform irq controller name. > + */ > + if (epc->function_num_map != 1) Why can't you use, epf->func_no? > + return -EOPNOTSUPP; > + > + domain = dev_get_msi_domain(dev->parent); > + if (!domain) > + return -EOPNTSUPP; Newline > + dev_set_msi_domain(dev, domain); > + > + /* use parent of_node to get device id information */ > + dev->of_node = dev->parent->of_node; > + Why do you need of_node assignment inside EPF core? > + epf->msg = kcalloc(num_msgs, sizeof(struct msi_msg), GFP_KERNEL); > + if (!epf->msg) > + return -ENOMEM; > + > + epf->num_msgs = num_msgs; > + Move this to the start of the function, after checks. > + ret = platform_msi_domain_alloc_irqs(dev, num_msgs, pci_epf_write_msi_msg); > + if (ret) { > + dev_err(dev, "Can't allocate MSI from system MSI controller\n"); "Failed to allocate MSI" > + goto err_mem; err_free_mem > + } > + > + for (i = 0; i < num_msgs; i++) { > + virq = msi_get_virq(dev, i); > + if (i == 0) > + epf->virq_base = virq; > + > + ret = request_irq(virq, pci_epf_interrupt_handler, 0, > + "pci-epf-doorbell", epf); IRQ name should have an index, otherwise all of them will have the same name. > + > + if (ret) { > + dev_err(dev, "Failure request doorbell IRQ\n"); "Failed to request doorbell" > + goto err_irq; err_free_irq > + } > + } > + > + epf->num_msgs = num_msgs; Newline > + return ret; > + > +err_irq: > + platform_msi_domain_free_irqs(dev); > +err_mem: > + kfree(epf->msg); > + epf->msg = NULL; > + epf->num_msgs = 0; > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(pci_epf_alloc_doorbell); > + > +void pci_epf_free_doorbell(struct pci_epf *epf) > +{ > + struct pci_epc *epc; > + int i; > + > + epc = epf->epc; > + > + for (i = 0; i < epf->num_msgs; i++) > + free_irq(epf->virq_base + i, epf); > + > + platform_msi_domain_free_irqs(&epc->dev); > + kfree(epf->msg); > + epf->msg = NULL; > + epf->num_msgs = 0; > +} > +EXPORT_SYMBOL_GPL(pci_epf_free_doorbell); > + > static void pci_epf_remove_cfs(struct pci_epf_driver *driver) > { > struct config_group *group, *tmp; > diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h > index b8441db2fa52..e187e3ee48d2 100644 > --- a/include/linux/pci-epf.h > +++ b/include/linux/pci-epf.h > @@ -75,6 +75,7 @@ struct pci_epf_ops { > struct pci_epc_event_ops { > int (*core_init)(struct pci_epf *epf); > int (*link_up)(struct pci_epf *epf); > + int (*doorbell)(struct pci_epf *epf, int index); > }; > > /** > @@ -173,6 +174,9 @@ struct pci_epf { > unsigned long vfunction_num_map; > struct list_head pci_vepf; > const struct pci_epc_event_ops *event_ops; > + struct msi_msg *msg; > + u16 num_msgs; > + int virq_base; > }; > > /** > @@ -216,4 +220,16 @@ int pci_epf_bind(struct pci_epf *epf); > void pci_epf_unbind(struct pci_epf *epf); > int pci_epf_add_vepf(struct pci_epf *epf_pf, struct pci_epf *epf_vf); > void pci_epf_remove_vepf(struct pci_epf *epf_pf, struct pci_epf *epf_vf); > +int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 nums); > +void pci_epf_free_doorbell(struct pci_epf *epf); > + > +static inline struct msi_msg *epf_get_msg(struct pci_epf *epf) > +{ > + return epf->msg; > +} > + > +static inline u16 epf_get_msg_num(struct pci_epf *epf) > +{ > + return epf->num_msgs; > +} I don't see a need for these two functions as they are doing just dereferences. - Mani > #endif /* __LINUX_PCI_EPF_H */ > -- > 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 ABF48CA0FF6 for ; Sat, 2 Sep 2023 04:52:55 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=l9t9lppUb1gg/ghQWzAMDkw9QlsURBdlK4Nyaqe3QuI=; b=mXscS0B5pwKKOd H1Z3RPhsF/ibImLshpIRXkjOtYwcIZLai7CIcxwsmVA7zQFwsAfRmt9PqoF8AbGmxMP/O2Y+cM4+N Eob6940rwAqvqZ3XJ/GFmnJPpbdxSZNr2gI0UtRFo0qHP4XvbLagVve/6577WihYs/Y/PIwCWYSnw QHGkzyHqdNuQBS2TbSI+KMwj3VApxvWQiXfglLaPGOL//7ao8DQz99fW0R5fyAcwiJnaCF/DkXeTy nQo8P39msh2ZZcBKN9KVhl/0O5cA2ki+b3R4J0WQK4R21vC8m3YqS+hNpxnLrDDOZmtmz05svRoR/ +1CHac6y759cLQQkTg4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qcIcZ-0013tZ-02; Sat, 02 Sep 2023 04:52:31 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qcIcV-0013tA-35 for linux-arm-kernel@lists.infradead.org; Sat, 02 Sep 2023 04:52:29 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-1bf1935f6c2so4016415ad.1 for ; Fri, 01 Sep 2023 21:52:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1693630346; x=1694235146; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ijD/QXgkfcmQQpjgZVWk02lSeb5Kah86yA9TYX6zx1I=; b=E+yZO8UPVxz/TdhXpURvmhrLLdVt88J1bXZlRkJYH4bexRdrLIaypVRjEy6ki+QKhD liKZFcDWLEo2fKavFNeYje7k2c/SiCEiM8VCaVO1x1rjmCi8s3oPs3TOBSVUdFJSW/TE NGxKaA4+WfVGV5wYC1rBzGjMmhgvNIRE0QUJXQSNEldzmV4IrVkfZryJG8nkG4nWC0Ny KJMwqNP3isFNyRmLQ8yXsIYYMzNzZpB7PjSBnN42CXdsGhiz4DZKapWe02df3PblTeIq nyo1MMcq/1dkdbDROsssjAd5GqZIamT4epVA5XcO7urkBezonybsrevVVJnmtFHvx6+D +6Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693630346; x=1694235146; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ijD/QXgkfcmQQpjgZVWk02lSeb5Kah86yA9TYX6zx1I=; b=TY3XagW7KPhljqvXiVtzAnWEtOg2HOc5xZ1yH28sFCbb7Z5pBZOYzxB2r60FDmnD5V it5gM4+0zt0fAPWm50R0poyHvRoT9Vp2Nt+zOyo/kvcJBcsyHi7y21MNyMvT9Hodjgu1 +ouCfqhCGBWjMsyCzfO+5W3PfpTv7ngY8VhIUrhzqAI8RCN0kGOjsz4ZvKCX2tyjJWZF ayDTR/GM05Yzm/FpEquINvvAGWRILFqyO0upJJYpwO6TlOiBSpJwH7wWvZCCiikycy9L 2zu3OUg7duYwCUf/Z4zdDcC75tjEJRO2CFXNtiIKLDql9NjF18DwQ5nMRMNY8Qkfb8e0 sFbA== X-Gm-Message-State: AOJu0YzBokdbX+hQCWNz/zz4q0vJTOKxNsQheeMSdEJsnTk9X1NHvguq SsZxE2Pebtq7MmF9FMgbqps/ X-Google-Smtp-Source: AGHT+IHn+lpzw9uFuVsUrK4hFksx30nUuJVmCY/9azhZGZuuOYfsE09NMsfHfbXcr11fLWIN9x+S/g== X-Received: by 2002:a17:902:ce83:b0:1bc:2fe1:1821 with SMTP id f3-20020a170902ce8300b001bc2fe11821mr6157887plg.17.1693630345688; Fri, 01 Sep 2023 21:52:25 -0700 (PDT) Received: from thinkpad ([117.217.187.8]) by smtp.gmail.com with ESMTPSA id u10-20020a170902e80a00b001aadd0d7364sm3794308plg.83.2023.09.01.21.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 21:52:24 -0700 (PDT) Date: Sat, 2 Sep 2023 10:22:14 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: tglx@linutronix.de, aisheng.dong@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, festevam@gmail.com, imx@lists.linux.dev, jdmason@kudzu.us, kernel@pengutronix.de, kishon@ti.com, krzysztof.kozlowski+dt@linaro.org, kw@linux.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, maz@kernel.org, ntb@lists.linux.dev, peng.fan@nxp.com, robh+dt@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org Subject: Re: [PATCH 1/3] PCI: endpoint: Add RC-to-EP doorbell support using platform MSI controller Message-ID: <20230902045214.GA2913@thinkpad> References: <20230426203436.1277307-1-Frank.Li@nxp.com> <20230426203436.1277307-2-Frank.Li@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230426203436.1277307-2-Frank.Li@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230901_215228_047566_44D84438 X-CRM114-Status: GOOD ( 36.22 ) 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 T24gV2VkLCBBcHIgMjYsIDIwMjMgYXQgMDQ6MzQ6MzRQTSAtMDQwMCwgRnJhbmsgTGkgd3JvdGU6 Cj4gVGhpcyBjb21taXQgaW50cm9kdWNlcyBhIGNvbW1vbiBtZXRob2QgZm9yIHNlbmRpbmcgbWVz c2FnZXMgZnJvbSB0aGUgUm9vdCBDb21wbGV4Cj4gKFJDKSB0byB0aGUgRW5kcG9pbnQgKEVQKSBi eSB1dGlsaXppbmcgdGhlIHBsYXRmb3JtIE1TSSBpbnRlcnJ1cHQgY29udHJvbGxlciwKPiBzdWNo IGFzIEFSTSBHSUMsIGFzIGFuIEVQIGRvb3JiZWxsLiBNYXBzIHRoZSBtZW1vcnkgYXNzaWduZWQg Zm9yIHRoZSBCQVIgcmVnaW9uCj4gYnkgdGhlIFBDSSBob3N0IHRvIHRoZSBtZXNzYWdlIGFkZHJl c3Mgb2YgdGhlIHBsYXRmb3JtIE1TSSBpbnRlcnJ1cHQgY29udHJvbGxlcgo+IGluIHRoZSBQQ0kg RVAuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSBQQ0kgUkMgd3JpdGVzIHRvIHRoZSBCQVIgcmVnaW9u LCBpdCB0cmlnZ2Vycwo+IGFuIElSUSBhdCB0aGUgRVAuIFRoaXMgaW1wbGVtZW50YXRpb24gc2Vy dmVzIGFzIGEgY29tbW9uIG1ldGhvZCBmb3IgYWxsIGVuZHBvaW50Cj4gZnVuY3Rpb24gZHJpdmVy cy4KPiAKPiBIb3dldmVyLCBpdCBjdXJyZW50bHkgc3VwcG9ydHMgb25seSBvbmUgRVAgcGh5c2lj YWwgZnVuY3Rpb24gZHVlIHRvIGxpbWl0YXRpb25zCj4gaW4gQVJNIE1TSS9JTVMgcmVhZGluZXNz Lgo+IAoKSSd2ZSBwcm92aWRlZCBnZW5lcmljIGNvbW1lbnRzIGJlbG93LCBidXQgSSB3aWxsIGRv IG9uZSBtb3JlIHRob3JvdWdoIHJldmlldwphZnRlciBzZWVpbmcgZXBmLXRlc3QgZHJpdmVyIHBh dGNoLgoKPiBTaWduZWQtb2ZmLWJ5OiBGcmFuayBMaSA8RnJhbmsuTGlAbnhwLmNvbT4KPiAtLS0K PiAgZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMgfCAxMDkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2xpbnV4L3BjaS1lcGYuaCAgICAgICAgICAgICB8 ICAxNiArKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTI1IGluc2VydGlvbnMoKykKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMgYi9kcml2ZXJzL3Bj aS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYwo+IGluZGV4IDM1NWE2ZjU2ZmNlYS4uOTRhYzgyYmY4 NGM1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jCj4g KysrIGIvZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMKPiBAQCAtNiwxMCArNiwx MiBAQAo+ICAgKiBBdXRob3I6IEtpc2hvbiBWaWpheSBBYnJhaGFtIEkgPGtpc2hvbkB0aS5jb20+ Cj4gICAqLwo+ICAKPiArI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgoKV2h5IGlzIHRoaXMg bmVlZGVkPwoKPiAgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICAjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+Cj4gIAo+ICAjaW5jbHVkZSA8 bGludXgvcGNpLWVwYy5oPgo+ICAjaW5jbHVkZSA8bGludXgvcGNpLWVwZi5oPgo+IEBAIC0zMDAs NiArMzAyLDExMyBAQCB2b2lkICpwY2lfZXBmX2FsbG9jX3NwYWNlKHN0cnVjdCBwY2lfZXBmICpl cGYsIHNpemVfdCBzaXplLCBlbnVtIHBjaV9iYXJubyBiYXIsCj4gIH0KPiAgRVhQT1JUX1NZTUJP TF9HUEwocGNpX2VwZl9hbGxvY19zcGFjZSk7Cj4gIAo+ICtzdGF0aWMgZW51bSBpcnFyZXR1cm4g cGNpX2VwZl9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoKc3RhdGljIGly cXJldHVybl90CgpzL3BjaV9lcGZfaW50ZXJydXB0X2hhbmRsZXIvcGNpX2VwZl9kb29yYmVsbF9o YW5kbGVyCgo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2VwZiAqZXBmID0gZGF0YTsKPiArCj4gKwlpZiAo ZXBmLT5ldmVudF9vcHMgJiYgZXBmLT5ldmVudF9vcHMtPmRvb3JiZWxsKQo+ICsJCWVwZi0+ZXZl bnRfb3BzLT5kb29yYmVsbChlcGYsIGlycSAtIGVwZi0+dmlycV9iYXNlKTsKPiArCj4gKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBjaV9lcGZfd3JpdGVfbXNp X21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpCj4gK3sKPiAr CXN0cnVjdCBwY2lfZXBjICplcGMgPSBjb250YWluZXJfb2YoZGVzYy0+ZGV2LCBzdHJ1Y3QgcGNp X2VwYywgZGV2KTsKPiArCXN0cnVjdCBwY2lfZXBmICplcGY7Cj4gKwo+ICsJLyogVG9kbzogTmVl ZCBjaGVjayBjb3JyZWN0IGVwZiBpZiBtdWx0aSBlcGYgc3VwcG9ydGVkICovCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGVwZiwgJmVwYy0+cGNpX2VwZiwgbGlzdCkgewo+ICsJCWlmIChlcGYtPm1z ZyAmJiBkZXNjLT5tc2lfaW5kZXggPCBlcGYtPm51bV9tc2dzKQo+ICsJCQllcGYtPm1zZ1tkZXNj LT5tc2lfaW5kZXhdID0gKm1zZzsKPiArCX0KPiArfQo+ICsKPiAraW50IHBjaV9lcGZfYWxsb2Nf ZG9vcmJlbGwoc3RydWN0IHBjaV9lcGYgKmVwZiwgdTE2IG51bV9tc2dzKQo+ICt7Cj4gKwlzdHJ1 Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwo+ICsJc3RydWN0IHBjaV9lcGMgKmVwYzsKPiArCXN0cnVj dCBkZXZpY2UgKmRldjsKPiArCWludCB2aXJxOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsK PiArCWVwYyA9IGVwZi0+ZXBjOwo+ICsJZGV2ID0gJmVwYy0+ZGV2OwoKImVwY19kZXYiIHRvIG1h a2UgaXQgZXhwbGljaXQKCj4gKwo+ICsJLyoKPiArCSAqIEN1cnJlbnQgb25seSBzdXBwb3J0IDEg ZnVuY3Rpb24uCgpXaGF0IGRvZXMgdGhpcyBtZWFuIGV4YWN0bHk/IEV2ZW4gYSBzaW5nbGUgRVBD IGNhbiBzdXBwb3J0IG11bHRpcGxlIEVQRnMKCj4gKwkgKiBQQ0kgSU1TKGludGVycnVwdCBtZXNz YWdlIHN0b3JlKSBBUk0gc3VwcG9ydCBoYXZlIG5vdCBiZWVuCj4gKwkgKiByZWFkeSB5ZXQuCgpO byBuZWVkIHRvIG1lbnRpb24gcGxhdGZvcm0gaXJxIGNvbnRyb2xsZXIgbmFtZS4KCj4gKwkgKi8K PiArCWlmIChlcGMtPmZ1bmN0aW9uX251bV9tYXAgIT0gMSkKCldoeSBjYW4ndCB5b3UgdXNlLCBl cGYtPmZ1bmNfbm8/Cgo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiArCj4gKwlkb21haW4gPSBk ZXZfZ2V0X21zaV9kb21haW4oZGV2LT5wYXJlbnQpOwo+ICsJaWYgKCFkb21haW4pCj4gKwkJcmV0 dXJuIC1FT1BOVFNVUFA7CgpOZXdsaW5lCgo+ICsJZGV2X3NldF9tc2lfZG9tYWluKGRldiwgZG9t YWluKTsKPiArCj4gKwkvKiB1c2UgcGFyZW50IG9mX25vZGUgdG8gZ2V0IGRldmljZSBpZCBpbmZv cm1hdGlvbiAqLwo+ICsJZGV2LT5vZl9ub2RlID0gZGV2LT5wYXJlbnQtPm9mX25vZGU7Cj4gKwoK V2h5IGRvIHlvdSBuZWVkIG9mX25vZGUgYXNzaWdubWVudCBpbnNpZGUgRVBGIGNvcmU/Cgo+ICsJ ZXBmLT5tc2cgPSBrY2FsbG9jKG51bV9tc2dzLCBzaXplb2Yoc3RydWN0IG1zaV9tc2cpLCBHRlBf S0VSTkVMKTsKPiArCWlmICghZXBmLT5tc2cpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ ZXBmLT5udW1fbXNncyA9IG51bV9tc2dzOwo+ICsKCk1vdmUgdGhpcyB0byB0aGUgc3RhcnQgb2Yg dGhlIGZ1bmN0aW9uLCBhZnRlciBjaGVja3MuCgo+ICsJcmV0ID0gcGxhdGZvcm1fbXNpX2RvbWFp bl9hbGxvY19pcnFzKGRldiwgbnVtX21zZ3MsIHBjaV9lcGZfd3JpdGVfbXNpX21zZyk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBNU0kgZnJvbSBzeXN0 ZW0gTVNJIGNvbnRyb2xsZXJcbiIpOwoKIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0kiCgo+ICsJCWdv dG8gZXJyX21lbTsKCmVycl9mcmVlX21lbQoKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg bnVtX21zZ3M7IGkrKykgewo+ICsJCXZpcnEgPSBtc2lfZ2V0X3ZpcnEoZGV2LCBpKTsKPiArCQlp ZiAoaSA9PSAwKQo+ICsJCQllcGYtPnZpcnFfYmFzZSA9IHZpcnE7Cj4gKwo+ICsJCXJldCA9IHJl cXVlc3RfaXJxKHZpcnEsIHBjaV9lcGZfaW50ZXJydXB0X2hhbmRsZXIsIDAsCj4gKwkJCQkgICJw Y2ktZXBmLWRvb3JiZWxsIiwgZXBmKTsKCklSUSBuYW1lIHNob3VsZCBoYXZlIGFuIGluZGV4LCBv dGhlcndpc2UgYWxsIG9mIHRoZW0gd2lsbCBoYXZlIHRoZSBzYW1lIG5hbWUuCgo+ICsKPiArCQlp ZiAocmV0KSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiRmFpbHVyZSByZXF1ZXN0IGRvb3JiZWxsIElS UVxuIik7CgoiRmFpbGVkIHRvIHJlcXVlc3QgZG9vcmJlbGwiCgo+ICsJCQlnb3RvIGVycl9pcnE7 CgplcnJfZnJlZV9pcnEKCj4gKwkJfQo+ICsJfQo+ICsKPiArCWVwZi0+bnVtX21zZ3MgPSBudW1f bXNnczsKCk5ld2xpbmUKCj4gKwlyZXR1cm4gcmV0Owo+ICsKPiArZXJyX2lycToKPiArCXBsYXRm b3JtX21zaV9kb21haW5fZnJlZV9pcnFzKGRldik7Cj4gK2Vycl9tZW06Cj4gKwlrZnJlZShlcGYt Pm1zZyk7Cj4gKwllcGYtPm1zZyA9IE5VTEw7Cj4gKwllcGYtPm51bV9tc2dzID0gMDsKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9lcGZfYWxsb2NfZG9v cmJlbGwpOwo+ICsKPiArdm9pZCBwY2lfZXBmX2ZyZWVfZG9vcmJlbGwoc3RydWN0IHBjaV9lcGYg KmVwZikKPiArewo+ICsJc3RydWN0IHBjaV9lcGMgKmVwYzsKPiArCWludCBpOwo+ICsKPiArCWVw YyA9IGVwZi0+ZXBjOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBlcGYtPm51bV9tc2dzOyBpKysp Cj4gKwkJZnJlZV9pcnEoZXBmLT52aXJxX2Jhc2UgKyBpLCBlcGYpOwo+ICsKPiArCXBsYXRmb3Jt X21zaV9kb21haW5fZnJlZV9pcnFzKCZlcGMtPmRldik7Cj4gKwlrZnJlZShlcGYtPm1zZyk7Cj4g KwllcGYtPm1zZyA9IE5VTEw7Cj4gKwllcGYtPm51bV9tc2dzID0gMDsKPiArfQo+ICtFWFBPUlRf U1lNQk9MX0dQTChwY2lfZXBmX2ZyZWVfZG9vcmJlbGwpOwo+ICsKPiAgc3RhdGljIHZvaWQgcGNp X2VwZl9yZW1vdmVfY2ZzKHN0cnVjdCBwY2lfZXBmX2RyaXZlciAqZHJpdmVyKQo+ICB7Cj4gIAlz dHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgKnRtcDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9wY2ktZXBmLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1lcGYuaAo+IGluZGV4IGI4NDQxZGIy ZmE1Mi4uZTE4N2UzZWU0OGQyIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWVwZi5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9wY2ktZXBmLmgKPiBAQCAtNzUsNiArNzUsNyBAQCBzdHJ1 Y3QgcGNpX2VwZl9vcHMgewo+ICBzdHJ1Y3QgcGNpX2VwY19ldmVudF9vcHMgewo+ICAJaW50ICgq Y29yZV9pbml0KShzdHJ1Y3QgcGNpX2VwZiAqZXBmKTsKPiAgCWludCAoKmxpbmtfdXApKHN0cnVj dCBwY2lfZXBmICplcGYpOwo+ICsJaW50ICgqZG9vcmJlbGwpKHN0cnVjdCBwY2lfZXBmICplcGYs IGludCBpbmRleCk7Cj4gIH07Cj4gIAo+ICAvKioKPiBAQCAtMTczLDYgKzE3NCw5IEBAIHN0cnVj dCBwY2lfZXBmIHsKPiAgCXVuc2lnbmVkIGxvbmcJCXZmdW5jdGlvbl9udW1fbWFwOwo+ICAJc3Ry dWN0IGxpc3RfaGVhZAlwY2lfdmVwZjsKPiAgCWNvbnN0IHN0cnVjdCBwY2lfZXBjX2V2ZW50X29w cyAqZXZlbnRfb3BzOwo+ICsJc3RydWN0IG1zaV9tc2cgKm1zZzsKPiArCXUxNiBudW1fbXNnczsK PiArCWludCB2aXJxX2Jhc2U7Cj4gIH07Cj4gIAo+ICAvKioKPiBAQCAtMjE2LDQgKzIyMCwxNiBA QCBpbnQgcGNpX2VwZl9iaW5kKHN0cnVjdCBwY2lfZXBmICplcGYpOwo+ICB2b2lkIHBjaV9lcGZf dW5iaW5kKHN0cnVjdCBwY2lfZXBmICplcGYpOwo+ICBpbnQgcGNpX2VwZl9hZGRfdmVwZihzdHJ1 Y3QgcGNpX2VwZiAqZXBmX3BmLCBzdHJ1Y3QgcGNpX2VwZiAqZXBmX3ZmKTsKPiAgdm9pZCBwY2lf ZXBmX3JlbW92ZV92ZXBmKHN0cnVjdCBwY2lfZXBmICplcGZfcGYsIHN0cnVjdCBwY2lfZXBmICpl cGZfdmYpOwo+ICtpbnQgcGNpX2VwZl9hbGxvY19kb29yYmVsbChzdHJ1Y3QgcGNpX2VwZiAqZXBm LCB1MTYgbnVtcyk7Cj4gK3ZvaWQgcGNpX2VwZl9mcmVlX2Rvb3JiZWxsKHN0cnVjdCBwY2lfZXBm ICplcGYpOwo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXNpX21zZyAqZXBmX2dldF9tc2co c3RydWN0IHBjaV9lcGYgKmVwZikKPiArewo+ICsJcmV0dXJuIGVwZi0+bXNnOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHUxNiBlcGZfZ2V0X21zZ19udW0oc3RydWN0IHBjaV9lcGYgKmVwZikK PiArewo+ICsJcmV0dXJuIGVwZi0+bnVtX21zZ3M7Cj4gK30KCkkgZG9uJ3Qgc2VlIGEgbmVlZCBm b3IgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcyB0aGV5IGFyZSBkb2luZyBqdXN0IGRlcmVmZXJlbmNl cy4KCi0gTWFuaQoKPiAgI2VuZGlmIC8qIF9fTElOVVhfUENJX0VQRl9IICovCj4gLS0gCj4gMi4z NC4xCj4gCgotLSAK4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+Cu teCuruCvjQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=