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 4B9FEC6FD1D for ; Fri, 17 Mar 2023 22:25:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230051AbjCQWYq (ORCPT ); Fri, 17 Mar 2023 18:24:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231140AbjCQWYl (ORCPT ); Fri, 17 Mar 2023 18:24:41 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 022811CBC3; Fri, 17 Mar 2023 15:24:38 -0700 (PDT) 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 91ACB60B60; Fri, 17 Mar 2023 22:24:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B29A0C433EF; Fri, 17 Mar 2023 22:24:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679091878; bh=pY8MO6hDYHj7EBk0Gajf7dj+bm+X4jpCn+kEyhifYX4=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=CY59zY+3bt0ddKBq50DgSurIZHxJg+KjTTA/n0yi6I9/cgLxNPiP9w6YpPN1nPrrX fyZ3sNpZ09/E2Cj0rDucjWt+j/nTrUj7RRGNYsihw3x2IawEaLjzR68CsniyQJEij4 +Nkani2pqZ48yA79RiENsE2LV4BNX/sOSgxJQUaIC8ti3J/VxBDsrx6kvsiHWf/Jpk oL0tcOm/pY0csuvHimSTLvpNI/IoJZV9l5e/6PLmPzBDBIY21H9uVdXYMrR7QDyE7e NSvoBvh6uMTt8PIrIV7tbXshAD5/ZInrebe7BOjT1MLUpqdlMXHT2AeyVVQyXWTzoo KpkgN2gEbP8yg== Date: Fri, 17 Mar 2023 17:24:36 -0500 From: Bjorn Helgaas To: Hongxing Zhu Cc: Lorenzo Pieralisi , "l.stach@pengutronix.de" , "bhelgaas@google.com" , "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "kernel@pengutronix.de" , dl-linux-imx Subject: Re: [PATCH v2] PCI: imx6: Save and restore MSI control of RC in suspend and resume Message-ID: <20230317222436.GA1978818@bhelgaas> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Fri, Mar 17, 2023 at 07:38:02AM +0000, Hongxing Zhu wrote: > > -----Original Message----- > > From: Lorenzo Pieralisi > > Sent: 2023年3月16日 16:11 > > To: Hongxing Zhu > > Cc: Bjorn Helgaas ; l.stach@pengutronix.de; > > bhelgaas@google.com; linux-pci@vger.kernel.org; > > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > kernel@pengutronix.de; dl-linux-imx > > Subject: Re: [PATCH v2] PCI: imx6: Save and restore MSI control of RC in > > suspend and resume > > > > On Thu, Mar 16, 2023 at 07:37:41AM +0000, Hongxing Zhu wrote: > > > > [...] > > > > > > > > > It's not a separate register. > > > > > > > > > > > > > > The bit I manipulated is the MSI Enable bit of the Message > > > > > > > Control Register for MSI (Offset 02h) contained in the > > > > > > > MSI-capability of Root Complex. > > > > > > > > > > > > > > In addition, on i.MX6, the MSI Enable bit controls delivery of > > > > > > > MSI interrupts from components below the Root Port. > > > > > > > > > > > > > > So, set MSI Enable in imx6q-pcie to let the MSI from > > > > > > > downstream components works. > > > > > > > > > > > > My confusion is about this "MSI Capability" found by > > > > > > "dw_pcie_find_capability(pci, PCI_CAP_ID_MSI)" in your patch. > > > > > > > > > > > > The i.MX6 manual might refer to that as an "MSI Capability" but > > > > > > as far as I know, the PCIe base spec doesn't document a Root > > > > > > Complex MSI > > > > Capability. > > > > > > > > > > > > I don't think it's the same as the one documented in PCIe r6.0, > > > > > > sec 7.7.2. I think it's different because: > > > > > > > > > > > > (1) I *think* "pci" here refers to the RC, not to a Root Port. > > > > > > > > > > > > (2) The semantics are different. The MSI-X Enable bit in 7.7.2 only > > > > > > determines whether the Function itself is permitted to use MSI-X. > > > > > > It has nothing to do with devices *below* a Root Port can use > > MSI-X. > > > > > > It also has nothing to do with whether a Root Port can forward MSI > > > > > > transactions from those downstream devices. > > > > > > > > > > > > This part of my confusion could be easily resolved via a comment. > > > > > > > > > > > > I do have a follow-on question, though: the patch seems to > > > > > > enable MSI-related functionality using a register in the > > > > > > DesignWare IP, not something in the i.MX6-specific IP. If > > > > > > that's true, why don't other DesignWare-based drivers need something > > similar? > > > > > Hi Bjorn: > > > > > Thanks a lot for you reply. > > > > > This behavior is specific for i.MX PCIe. > > > > > > > > Which behaviour ? It can't be the root port MSI capability, that > > > > would be a HW bug (ie disabling root port MSIs would imply disabling > > > > MSIs for all downstream components). > > > > > > > > > > i.MX PCIe designer use this MSI_EN bit to control the MSI trigger when > > > integrate Design Ware PCIe IP. > > > Without the MSI_EN bit assertion (1b'1), the devices below this RC > > > can't trigger the MSI successfully. > > > Yes, you're right. It should not be the root port MSI capability. > > > > The question is, it is or it is not the root port MSI capability ? > > > > If it is, that's a HW bug. > > > > If it is not there is nothing to do and this patch can be merged. > Hi Lorenzo: > Thanks for your reply. > I think it is not the root port MSI capability actually. > Refer to my understands, designer just use the msi_en bit to control the > delivery of MSI interrupts from components below the Root Port. > > > > > > > i.MX PCIe designer use this MSI_EN bit to control the MSI trigger > > > > > when integrate Design Ware PCIe IP. > > > > > > > > Fair enough but that can't be the MSI Enable bit in the Root Port > > > > MSI capability "Message Control" field I am afraid. > > > > > > > > It is what Bjorn mentioned quite clearly, a root complex > > > > configuration register dressed as an MSI capability, the root > > > > complex is not a PCI device; either that or that's an HW bug. > > > Yes, it is. I agree with you. Had report this situation to the design team. > > > Hope to correct this bug in HW design if it's possible. > > > > I don't understand if it is a HW bug or not, see above. I think it is legitimate to > > have MMIO register space that *looks* like an MSI capability for the root > > complex to control delivery of MSI interrupts, as long as it is not the actual > > root port MSI capability, in the root port PCI config space in which case this > > would be a HW bug from what you are reporting. > I just provide the following suggestions. > - Root complex shouldn't have the MSI capability refer to the PCIe Spec > 7.7.1 chapter. > - Root port MSIs should not imply disabling MSIs for all downstream components. I think this is all a lot of confusion, mostly on my part, sorry about that. Root Complex configuration and behavior is not specified by the PCIe spec, so that's completely up to the i.MX designer. It's fine for the Root Complex to have an MSI Capability, and it's fine for that capability to enable/disable the RC fielding of MSI MemWr transactions from downstream devices and triggering MSI interrupts. It's also fine for the RC MSI Capability to be identified with a Capability ID of 0x5, although it is slightly confusing to use PCI_CAP_ID_MSI to find it. It's also slightly confusing to use the PCI_MSI_FLAGS offset into the RC MSI Capability. Using the PCI_CAP_ID_MSI, PCI_MSI_FLAGS, and PCI_MSI_FLAGS_ENABLE macros suggests to the reader that this RC MSI capability is the same as the the MSI Capability defined by PCIe r6.0, sec 7.7.1. Obviously it is *not* the same, because we're talking about a *Root Complex* capability, while the sec 7.7.1 capability can only appear on PCIe functions (Root Ports, Endpoints, Switch Ports, etc). I suggest a comment to the effect that this is a Root Complex MSI Capability, not the MSI Capability defined by PCIe r6.0, sec 7.7.1. Possibly even add new #defines in pci-imx6.c with different names, even though the values happen to be the same as the PCI_MSI_* #defines. That would be a convenient place to put a comment about what they are. Bjorn 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 05CD7C6FD1D for ; Fri, 17 Mar 2023 22:25:45 +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: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:References: List-Owner; bh=ocDVQ31AMcLG2GCkpJ8BtZkHBJFUMXM2vpzsvqONaI4=; b=s3g/a67Mj382mK zO9BdfxD6g5OIgcsyoRBqjhZgDL3S24fW7EQEXfjwV4HgHFyurF8gkwuga9b/flRi5UOej9bZOCKL 2uDLL6bu9AM6URCjEZyAKeArl/zDo/AgAhP2WqUVS7dX/FlI+jDCalSuWfpRw3lWxG7mFh7Ti75WL ByxLOQgnODaL/5gDEYewp1PP1hW+Gb6p5FYzAvgymjTKZhJAApjY74PF6lRDIywzgD243eQQ7kil9 MJPuvAVEEwKbShRdg3xUjQ9g0f89q/8+EgbLdfnZpwxiG289+G2RB1ne57JrfpN888XNAFcQ+N5GI NEbDn2ltrFqE0OKp7Cjw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pdIVA-003Z9E-05; Fri, 17 Mar 2023 22:24:44 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pdIV7-003Z8U-1N for linux-arm-kernel@lists.infradead.org; Fri, 17 Mar 2023 22:24:43 +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 9598260BBF; Fri, 17 Mar 2023 22:24:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B29A0C433EF; Fri, 17 Mar 2023 22:24:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679091878; bh=pY8MO6hDYHj7EBk0Gajf7dj+bm+X4jpCn+kEyhifYX4=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=CY59zY+3bt0ddKBq50DgSurIZHxJg+KjTTA/n0yi6I9/cgLxNPiP9w6YpPN1nPrrX fyZ3sNpZ09/E2Cj0rDucjWt+j/nTrUj7RRGNYsihw3x2IawEaLjzR68CsniyQJEij4 +Nkani2pqZ48yA79RiENsE2LV4BNX/sOSgxJQUaIC8ti3J/VxBDsrx6kvsiHWf/Jpk oL0tcOm/pY0csuvHimSTLvpNI/IoJZV9l5e/6PLmPzBDBIY21H9uVdXYMrR7QDyE7e NSvoBvh6uMTt8PIrIV7tbXshAD5/ZInrebe7BOjT1MLUpqdlMXHT2AeyVVQyXWTzoo KpkgN2gEbP8yg== Date: Fri, 17 Mar 2023 17:24:36 -0500 From: Bjorn Helgaas To: Hongxing Zhu Cc: Lorenzo Pieralisi , "l.stach@pengutronix.de" , "bhelgaas@google.com" , "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "kernel@pengutronix.de" , dl-linux-imx Subject: Re: [PATCH v2] PCI: imx6: Save and restore MSI control of RC in suspend and resume Message-ID: <20230317222436.GA1978818@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230317_152441_557807_D0A7B558 X-CRM114-Status: GOOD ( 50.08 ) 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 T24gRnJpLCBNYXIgMTcsIDIwMjMgYXQgMDc6Mzg6MDJBTSArMDAwMCwgSG9uZ3hpbmcgWmh1IHdy b3RlOgo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IExvcmVuem8gUGll cmFsaXNpIDxscGllcmFsaXNpQGtlcm5lbC5vcmc+Cj4gPiBTZW50OiAyMDIz5bm0M+aciDE25pel IDE2OjExCj4gPiBUbzogSG9uZ3hpbmcgWmh1IDxob25neGluZy56aHVAbnhwLmNvbT4KPiA+IENj OiBCam9ybiBIZWxnYWFzIDxoZWxnYWFzQGtlcm5lbC5vcmc+OyBsLnN0YWNoQHBlbmd1dHJvbml4 LmRlOwo+ID4gYmhlbGdhYXNAZ29vZ2xlLmNvbTsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsK PiA+IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZzsKPiA+IGtlcm5lbEBwZW5ndXRyb25peC5kZTsgZGwtbGludXgtaW14IDxs aW51eC1pbXhAbnhwLmNvbT4KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjJdIFBDSTogaW14Njog U2F2ZSBhbmQgcmVzdG9yZSBNU0kgY29udHJvbCBvZiBSQyBpbgo+ID4gc3VzcGVuZCBhbmQgcmVz dW1lCj4gPiAKPiA+IE9uIFRodSwgTWFyIDE2LCAyMDIzIGF0IDA3OjM3OjQxQU0gKzAwMDAsIEhv bmd4aW5nIFpodSB3cm90ZToKPiA+IAo+ID4gWy4uLl0KPiA+IAo+ID4gPiA+ID4gPiA+IEl0J3Mg bm90IGEgc2VwYXJhdGUgcmVnaXN0ZXIuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBUaGUg Yml0IEkgbWFuaXB1bGF0ZWQgaXMgdGhlIE1TSSBFbmFibGUgYml0IG9mIHRoZSBNZXNzYWdlCj4g PiA+ID4gPiA+ID4gQ29udHJvbCBSZWdpc3RlciBmb3IgTVNJIChPZmZzZXQgMDJoKSBjb250YWlu ZWQgaW4gdGhlCj4gPiA+ID4gPiA+ID4gTVNJLWNhcGFiaWxpdHkgb2YgUm9vdCBDb21wbGV4Lgo+ ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gSW4gYWRkaXRpb24sIG9uIGkuTVg2LCB0aGUgTVNJ IEVuYWJsZSBiaXQgY29udHJvbHMgZGVsaXZlcnkgb2YKPiA+ID4gPiA+ID4gPiBNU0kgaW50ZXJy dXB0cyBmcm9tIGNvbXBvbmVudHMgYmVsb3cgdGhlIFJvb3QgUG9ydC4KPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+IFNvLCBzZXQgTVNJIEVuYWJsZSBpbiBpbXg2cS1wY2llIHRvIGxldCB0aGUg TVNJIGZyb20KPiA+ID4gPiA+ID4gPiBkb3duc3RyZWFtIGNvbXBvbmVudHMgd29ya3MuCj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IE15IGNvbmZ1c2lvbiBpcyBhYm91dCB0aGlzICJNU0kgQ2FwYWJp bGl0eSIgZm91bmQgYnkKPiA+ID4gPiA+ID4gImR3X3BjaWVfZmluZF9jYXBhYmlsaXR5KHBjaSwg UENJX0NBUF9JRF9NU0kpIiBpbiB5b3VyIHBhdGNoLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBU aGUgaS5NWDYgbWFudWFsIG1pZ2h0IHJlZmVyIHRvIHRoYXQgYXMgYW4gIk1TSSBDYXBhYmlsaXR5 IiBidXQKPiA+ID4gPiA+ID4gYXMgZmFyIGFzIEkga25vdywgdGhlIFBDSWUgYmFzZSBzcGVjIGRv ZXNuJ3QgZG9jdW1lbnQgYSBSb290Cj4gPiA+ID4gPiA+IENvbXBsZXggTVNJCj4gPiA+ID4gQ2Fw YWJpbGl0eS4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gSSBkb24ndCB0aGluayBpdCdzIHRoZSBz YW1lIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBpbiBQQ0llIHI2LjAsCj4gPiA+ID4gPiA+IHNlYyA3 LjcuMi4gIEkgdGhpbmsgaXQncyBkaWZmZXJlbnQgYmVjYXVzZToKPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gICAoMSkgSSAqdGhpbmsqICJwY2kiIGhlcmUgcmVmZXJzIHRvIHRoZSBSQywgbm90IHRv IGEgUm9vdCBQb3J0Lgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICgyKSBUaGUgc2VtYW50aWNz IGFyZSBkaWZmZXJlbnQuICBUaGUgTVNJLVggRW5hYmxlIGJpdCBpbiA3LjcuMiBvbmx5Cj4gPiA+ ID4gPiA+ICAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBGdW5jdGlvbiBpdHNlbGYgaXMgcGVybWl0 dGVkIHRvIHVzZSBNU0ktWC4KPiA+ID4gPiA+ID4gICBJdCBoYXMgbm90aGluZyB0byBkbyB3aXRo IGRldmljZXMgKmJlbG93KiBhIFJvb3QgUG9ydCBjYW4gdXNlCj4gPiBNU0ktWC4KPiA+ID4gPiA+ ID4gICBJdCBhbHNvIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hldGhlciBhIFJvb3QgUG9ydCBj YW4gZm9yd2FyZCBNU0kKPiA+ID4gPiA+ID4gICB0cmFuc2FjdGlvbnMgZnJvbSB0aG9zZSBkb3du c3RyZWFtIGRldmljZXMuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFRoaXMgcGFydCBvZiBteSBj b25mdXNpb24gY291bGQgYmUgZWFzaWx5IHJlc29sdmVkIHZpYSBhIGNvbW1lbnQuCj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+IEkgZG8gaGF2ZSBhIGZvbGxvdy1vbiBxdWVzdGlvbiwgdGhvdWdoOiB0 aGUgcGF0Y2ggc2VlbXMgdG8KPiA+ID4gPiA+ID4gZW5hYmxlIE1TSS1yZWxhdGVkIGZ1bmN0aW9u YWxpdHkgdXNpbmcgYSByZWdpc3RlciBpbiB0aGUKPiA+ID4gPiA+ID4gRGVzaWduV2FyZSBJUCwg bm90IHNvbWV0aGluZyBpbiB0aGUgaS5NWDYtc3BlY2lmaWMgSVAuICBJZgo+ID4gPiA+ID4gPiB0 aGF0J3MgdHJ1ZSwgd2h5IGRvbid0IG90aGVyIERlc2lnbldhcmUtYmFzZWQgZHJpdmVycyBuZWVk IHNvbWV0aGluZwo+ID4gc2ltaWxhcj8KPiA+ID4gPiA+IEhpIEJqb3JuOgo+ID4gPiA+ID4gVGhh bmtzIGEgbG90IGZvciB5b3UgcmVwbHkuCj4gPiA+ID4gPiBUaGlzIGJlaGF2aW9yIGlzIHNwZWNp ZmljIGZvciBpLk1YIFBDSWUuCj4gPiA+ID4KPiA+ID4gPiBXaGljaCBiZWhhdmlvdXIgPyBJdCBj YW4ndCBiZSB0aGUgcm9vdCBwb3J0IE1TSSBjYXBhYmlsaXR5LCB0aGF0Cj4gPiA+ID4gd291bGQg YmUgYSBIVyBidWcgKGllIGRpc2FibGluZyByb290IHBvcnQgTVNJcyB3b3VsZCBpbXBseSBkaXNh YmxpbmcKPiA+ID4gPiBNU0lzIGZvciBhbGwgZG93bnN0cmVhbSBjb21wb25lbnRzKS4KPiA+ID4g Pgo+ID4gPgo+ID4gPiBpLk1YIFBDSWUgZGVzaWduZXIgdXNlIHRoaXMgTVNJX0VOIGJpdCB0byBj b250cm9sIHRoZSBNU0kgdHJpZ2dlciB3aGVuCj4gPiA+IGludGVncmF0ZSAgRGVzaWduIFdhcmUg UENJZSBJUC4KPiA+ID4gV2l0aG91dCB0aGUgTVNJX0VOIGJpdCBhc3NlcnRpb24gKDFiJzEpLCB0 aGUgZGV2aWNlcyBiZWxvdyB0aGlzIFJDCj4gPiA+IGNhbid0IHRyaWdnZXIgIHRoZSBNU0kgc3Vj Y2Vzc2Z1bGx5Lgo+ID4gPiBZZXMsIHlvdSdyZSByaWdodC4gSXQgc2hvdWxkIG5vdCBiZSB0aGUg cm9vdCBwb3J0IE1TSSBjYXBhYmlsaXR5Lgo+ID4gCj4gPiBUaGUgcXVlc3Rpb24gaXMsIGl0IGlz IG9yIGl0IGlzIG5vdCB0aGUgcm9vdCBwb3J0IE1TSSBjYXBhYmlsaXR5ID8KPiA+IAo+ID4gSWYg aXQgaXMsIHRoYXQncyBhIEhXIGJ1Zy4KPiA+IAo+ID4gSWYgaXQgaXMgbm90IHRoZXJlIGlzIG5v dGhpbmcgdG8gZG8gYW5kIHRoaXMgcGF0Y2ggY2FuIGJlIG1lcmdlZC4KPiBIaSBMb3JlbnpvOgo+ IFRoYW5rcyBmb3IgeW91ciByZXBseS4KPiBJIHRoaW5rIGl0IGlzIG5vdCB0aGUgcm9vdCBwb3J0 IE1TSSBjYXBhYmlsaXR5IGFjdHVhbGx5Lgo+IFJlZmVyIHRvIG15IHVuZGVyc3RhbmRzLCBkZXNp Z25lciBqdXN0IHVzZSB0aGUgbXNpX2VuIGJpdCB0byBjb250cm9sIHRoZQo+ICBkZWxpdmVyeSBv ZiBNU0kgaW50ZXJydXB0cyBmcm9tIGNvbXBvbmVudHMgYmVsb3cgdGhlIFJvb3QgUG9ydC4KPiA+ IAo+ID4gPiA+ID4gaS5NWCBQQ0llIGRlc2lnbmVyIHVzZSB0aGlzIE1TSV9FTiBiaXQgdG8gY29u dHJvbCB0aGUgTVNJIHRyaWdnZXIKPiA+ID4gPiA+IHdoZW4gaW50ZWdyYXRlIERlc2lnbiBXYXJl IFBDSWUgSVAuCj4gPiA+ID4KPiA+ID4gPiBGYWlyIGVub3VnaCBidXQgdGhhdCBjYW4ndCBiZSB0 aGUgTVNJIEVuYWJsZSBiaXQgaW4gdGhlIFJvb3QgUG9ydAo+ID4gPiA+IE1TSSBjYXBhYmlsaXR5 ICJNZXNzYWdlIENvbnRyb2wiIGZpZWxkIEkgYW0gYWZyYWlkLgo+ID4gPiA+Cj4gPiA+ID4gSXQg aXMgd2hhdCBCam9ybiBtZW50aW9uZWQgcXVpdGUgY2xlYXJseSwgYSByb290IGNvbXBsZXgKPiA+ ID4gPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGRyZXNzZWQgYXMgYW4gTVNJIGNhcGFiaWxpdHks IHRoZSByb290Cj4gPiA+ID4gY29tcGxleCBpcyBub3QgYSBQQ0kgZGV2aWNlOyBlaXRoZXIgdGhh dCBvciB0aGF0J3MgYW4gSFcgYnVnLgo+ID4gPiBZZXMsIGl0IGlzLiBJIGFncmVlIHdpdGggeW91 LiBIYWQgcmVwb3J0IHRoaXMgc2l0dWF0aW9uIHRvIHRoZSBkZXNpZ24gdGVhbS4KPiA+ID4gSG9w ZSB0byBjb3JyZWN0IHRoaXMgYnVnIGluIEhXIGRlc2lnbiBpZiBpdCdzIHBvc3NpYmxlLgo+ID4g Cj4gPiBJIGRvbid0IHVuZGVyc3RhbmQgaWYgaXQgaXMgYSBIVyBidWcgb3Igbm90LCBzZWUgYWJv dmUuIEkgdGhpbmsgaXQgaXMgbGVnaXRpbWF0ZSB0bwo+ID4gaGF2ZSBNTUlPIHJlZ2lzdGVyIHNw YWNlIHRoYXQgKmxvb2tzKiBsaWtlIGFuIE1TSSBjYXBhYmlsaXR5IGZvciB0aGUgcm9vdAo+ID4g Y29tcGxleCB0byBjb250cm9sIGRlbGl2ZXJ5IG9mIE1TSSBpbnRlcnJ1cHRzLCBhcyBsb25nIGFz IGl0IGlzIG5vdCB0aGUgYWN0dWFsCj4gPiByb290IHBvcnQgTVNJIGNhcGFiaWxpdHksIGluIHRo ZSByb290IHBvcnQgUENJIGNvbmZpZyBzcGFjZSBpbiB3aGljaCBjYXNlIHRoaXMKPiA+IHdvdWxk IGJlIGEgSFcgYnVnIGZyb20gd2hhdCB5b3UgYXJlIHJlcG9ydGluZy4KPiBJIGp1c3QgcHJvdmlk ZSB0aGUgZm9sbG93aW5nIHN1Z2dlc3Rpb25zLgo+IC0gUm9vdCBjb21wbGV4IHNob3VsZG4ndCBo YXZlIHRoZSBNU0kgY2FwYWJpbGl0eSByZWZlciB0byB0aGUgUENJZSBTcGVjCj4gICA3LjcuMSBj aGFwdGVyLgo+IC0gUm9vdCBwb3J0IE1TSXMgc2hvdWxkIG5vdCBpbXBseSBkaXNhYmxpbmcgTVNJ cyBmb3IgYWxsIGRvd25zdHJlYW0gY29tcG9uZW50cy4KCkkgdGhpbmsgdGhpcyBpcyBhbGwgYSBs b3Qgb2YgY29uZnVzaW9uLCBtb3N0bHkgb24gbXkgcGFydCwgc29ycnkgYWJvdXQKdGhhdC4KClJv b3QgQ29tcGxleCBjb25maWd1cmF0aW9uIGFuZCBiZWhhdmlvciBpcyBub3Qgc3BlY2lmaWVkIGJ5 IHRoZSBQQ0llCnNwZWMsIHNvIHRoYXQncyBjb21wbGV0ZWx5IHVwIHRvIHRoZSBpLk1YIGRlc2ln bmVyLiAgSXQncyBmaW5lIGZvciB0aGUKUm9vdCBDb21wbGV4IHRvIGhhdmUgYW4gTVNJIENhcGFi aWxpdHksIGFuZCBpdCdzIGZpbmUgZm9yIHRoYXQKY2FwYWJpbGl0eSB0byBlbmFibGUvZGlzYWJs ZSB0aGUgUkMgZmllbGRpbmcgb2YgTVNJIE1lbVdyIHRyYW5zYWN0aW9ucwpmcm9tIGRvd25zdHJl YW0gZGV2aWNlcyBhbmQgdHJpZ2dlcmluZyBNU0kgaW50ZXJydXB0cy4KCkl0J3MgYWxzbyBmaW5l IGZvciB0aGUgUkMgTVNJIENhcGFiaWxpdHkgdG8gYmUgaWRlbnRpZmllZCB3aXRoIGEKQ2FwYWJp bGl0eSBJRCBvZiAweDUsIGFsdGhvdWdoIGl0IGlzIHNsaWdodGx5IGNvbmZ1c2luZyB0byB1c2UK UENJX0NBUF9JRF9NU0kgdG8gZmluZCBpdC4gIEl0J3MgYWxzbyBzbGlnaHRseSBjb25mdXNpbmcg dG8gdXNlIHRoZQpQQ0lfTVNJX0ZMQUdTIG9mZnNldCBpbnRvIHRoZSBSQyBNU0kgQ2FwYWJpbGl0 eS4KClVzaW5nIHRoZSBQQ0lfQ0FQX0lEX01TSSwgUENJX01TSV9GTEFHUywgYW5kIFBDSV9NU0lf RkxBR1NfRU5BQkxFCm1hY3JvcyBzdWdnZXN0cyB0byB0aGUgcmVhZGVyIHRoYXQgdGhpcyBSQyBN U0kgY2FwYWJpbGl0eSBpcyB0aGUgc2FtZQphcyB0aGUgdGhlIE1TSSBDYXBhYmlsaXR5IGRlZmlu ZWQgYnkgUENJZSByNi4wLCBzZWMgNy43LjEuICBPYnZpb3VzbHkKaXQgaXMgKm5vdCogdGhlIHNh bWUsIGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBhICpSb290IENvbXBsZXgqCmNhcGFiaWxp dHksIHdoaWxlIHRoZSBzZWMgNy43LjEgY2FwYWJpbGl0eSBjYW4gb25seSBhcHBlYXIgb24gUENJ ZQpmdW5jdGlvbnMgKFJvb3QgUG9ydHMsIEVuZHBvaW50cywgU3dpdGNoIFBvcnRzLCBldGMpLgoK SSBzdWdnZXN0IGEgY29tbWVudCB0byB0aGUgZWZmZWN0IHRoYXQgdGhpcyBpcyBhIFJvb3QgQ29t cGxleCBNU0kKQ2FwYWJpbGl0eSwgbm90IHRoZSBNU0kgQ2FwYWJpbGl0eSBkZWZpbmVkIGJ5IFBD SWUgcjYuMCwgc2VjIDcuNy4xLgoKUG9zc2libHkgZXZlbiBhZGQgbmV3ICNkZWZpbmVzIGluIHBj aS1pbXg2LmMgd2l0aCBkaWZmZXJlbnQgbmFtZXMsCmV2ZW4gdGhvdWdoIHRoZSB2YWx1ZXMgaGFw cGVuIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBQQ0lfTVNJXyoKI2RlZmluZXMuICBUaGF0IHdvdWxk IGJlIGEgY29udmVuaWVudCBwbGFjZSB0byBwdXQgYSBjb21tZW50IGFib3V0CndoYXQgdGhleSBh cmUuCgpCam9ybgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=