From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6DE233998 for ; Fri, 24 Jan 2025 07:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737702517; cv=none; b=axRJlC+aLC+rTSvw+OWxFtS02/ITuWglZyJbmQfuWKP7OoJvhKPLrRh7XhQUuJ4j8Qstg+miCjcftUscys+jacCs/PGpvE9gd0oil1REpnKO/NEd1z6pIT8ZToqEekLu19CGZ8MN+BPBH5DNDjoijku/W4Wo4MXEJxGlflAnJxY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737702517; c=relaxed/simple; bh=bbWuCKzdRDfHke4jR912REo6Gk6j7bDUt2JZed/wDBo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=l+vFSYlrLoSk2jk1EVze24dSCnJXLowFwwdV8ZdwlG1yC/4LDUjGD19nY+UbENVx4mOsMApB3Q0aA0fP4pXKqnNxQAg91AQw06LN9cn7lpWmkgB6Wrc4HME/GY85H2UYZ0o+esa0bjmTV+BL38SyrV2ud5kLdwxZjK7cXi4xl/0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=d2LADKZB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="d2LADKZB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 240F2C4CED2; Fri, 24 Jan 2025 07:08:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1737702517; bh=bbWuCKzdRDfHke4jR912REo6Gk6j7bDUt2JZed/wDBo=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=d2LADKZB5awe3E0KMAb3m5f9NjSPkC9DH/VLGN6cMHwqMtZXpi4/9NTdBt0EluiMq slXh8EcPydHRtWf0dlsdC8gIUCEqqhlTo4MkyQ2hYA3lrZ6h+YmWOMpJvVQizSMBq7 06JqtcgBPkle3IiJd7QTWiid23ki806rOBPhWmD2Eg5TP4ckQ7pHRFl/s8Vxx3JAGD OJyqGJM7BIDQvbMyzNsYE1zz9Iosn1zBLfWSDCv5I27y5p8eVFeoVrdYatifR1C0+G +Ce0+1UcAehyiUzs/5SmwLZ5BhAXdT5J+hC2vOhPnR6kcLnGdGZa+nZXLlZ+5K9PDD +8ytgqq6vZ28A== Date: Fri, 24 Jan 2025 12:38:29 +0530 From: Manivannan Sadhasivam To: Qiang Yu Cc: Dmitry Baryshkov , "Wenbin Yao (Consultant)" , vkoul@kernel.org, kishon@kernel.org, p.zabel@pengutronix.de, abel.vesa@linaro.org, neil.armstrong@linaro.org, manivannan.sadhasivam@linaro.org, quic_devipriy@quicinc.com, konrad.dybcio@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org Subject: Re: [PATCH 2/2] phy: qcom: qmp-pcie: Add PHY register retention support Message-ID: <20250124070829.oar3hlkshkpam57d@thinkpad> References: <20250121094140.4006801-1-quic_wenbyao@quicinc.com> <20250121094140.4006801-3-quic_wenbyao@quicinc.com> <188a9efd-718e-4ac5-b89a-29f2713e1dba@quicinc.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org 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: <188a9efd-718e-4ac5-b89a-29f2713e1dba@quicinc.com> + Mayank (with whom I discussed this topic internally) On Fri, Jan 24, 2025 at 02:22:01PM +0800, Qiang Yu wrote: > > On 1/22/2025 5:43 PM, Dmitry Baryshkov wrote: > > On Wed, Jan 22, 2025 at 03:17:39PM +0800, Wenbin Yao (Consultant) wrote: > > > On 1/21/2025 6:36 PM, Dmitry Baryshkov wrote: > > > > On Tue, 21 Jan 2025 at 11:43, Wenbin Yao wrote: > > > > > From: Qiang Yu > > > > > > > > > > Currently, BCR reset and PHY register setting are mandatory for every port > > > > > before link training. However, some QCOM PCIe PHYs support no_csr reset. > > > > > Different than BCR reset that is used to reset entire PHY including > > > > > hardware and register, once no_csr reset is toggled, only PHY hardware will > > > > > be reset but PHY registers will be retained, > > > > I'm sorry, I can't parse this. > > > The difference between no_csr reset and bcr reset is that no_csr reset > > > doesn't reset the phy registers. If a phy is enabled in UEFI, its registers > > > are programed. After Linux boot up, the registers will not be reset but > > > keep the value programmed by UEFI if we only do no_csr reset, so we can > > > skip phy setting. > > Please fix capitalization of the abbreviations (PHY, BCR) and add > > similar text to the commit message. > > > > > > > which means PHY setting can > > > > > be skipped during PHY init if PCIe link was enabled in booltloader and only > > > > > no_csr is toggled after that. > > > > > > > > > > Hence, determine whether the PHY has been enabled in bootloader by > > > > > verifying QPHY_START_CTRL register. If it is programmed and no_csr reset is > > > > > present, skip BCR reset and PHY register setting, so that PCIe link can be > > > > > established with no_csr reset only. > > > > This doesn't tell us why we want to do so. The general rule is not to > > > > depend on the bootloaders at all. The reason is pretty simple: it is > > > > hard to update bootloaders, while it is relatively easy to update the > > > > kernel. If the hardware team issues any kind of changes to the > > > > programming tables, the kernel will get them earlier than the > > > > bootloader. > > > With this change, we don't need to upstream phy setting for all phys > > > support no_csr reset, this will save a great deal of efforts and simplify > > > the phy driver. Our goal is to remove proprietary PCIe firmware operations > > > from kernel. PHY is just the start and will be followed by controller, > > > clocks, regulators, etc. If program table need to be changed, the place to > > > do that will be UEFI. > > Well, that sounds like a very bad idea. Please don't do that. Linux > > kernel drivers should not depend on the UEFI or a bootloader. Unless > > there is a good reason for that, Linux should continue to be able to > > reset and program the PCIe PHY (as well as all other hw blocks). > I'm wondering if it's really necessary for Linux to be able to program the > PHY. Perhaps Linux should only care about common aspects defined by the > PCIe spec like bus scanning, BAR space allocation, and functions provided > by other PCIe capabilities. As for the specific operations that are > different on various platforms, it might be more appropriate for the > firmware to take care of them. This way, the responsibilities can be more > clearly divided, and the driver could potentially be > more streamlined. > It is not necessary in an ideal world, but what we have seen is Qcom releasing updated PHY init sequence after upstreaming the initial PHY driver support. In that case, the devices with old firmware will become outdated unless the fw is updated (which is not straightforward compared to updating the kernel). But, I do like this idea of reusing the PHY init sequence in the kernel. Though we cannot just do it for all platforms. Maybe we can enable it on platforms like compute starting from X1E and see how it goes? Just to minimize the impact if it didn't go well. > On the other hand, since the no_csr reset can retain register values, > maybe we should still make full use of it, even if we don't want to > rely on UEFI. For example, during runtime suspend/resume > (the D3cold -> D0 cycle) D3Cold during runtime suspend in bizarre. >, when re-initializing the PHY, same PHY > settings will be programmed again. This is a bit redundant. > Hmm, what would happen if the CX collapse happens during system suspend? Will the PHY registers be retained? - Mani -- மணிவண்ணன் சதாசிவம் 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 7229BC0218C for ; Fri, 24 Jan 2025 07:08:43 +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=hZXGBhYAZkkmJsWrTFEqsTwqkC2IjF3ecBFMfLsOObU=; b=G8jfrNmaDN6u/l glI42BEsRRYxmam0m7KuFS5yVP2ypky0lrnCy8oFor76qQBnGqnVe9Oyuooh4PPw5rUgLbEbRTMT/ PupnFqn//0PsSvUGGI+doHEe9VtJtcBwVey4+FRkOQ/wUQaHBtRs0c7s8MReHS4HJzX8Z4pO9PM08 CscP8pUmhN+RAFbUxdxpD2owO/sG+dEtEBKWEvgD6OC2Wr0TJMS9XzBbocRgkfVRMJg9UTqbPOYii igyOi5o9HSyn9XwVyCX4heTI68EU8cC78IiUdYAcSWxtC96h+4gFXAhW3+8z8EUSmsPypZ/7mqTO6 Zs/Du8hAUZHW8p6b8gkA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tbDo2-0000000E4SW-2Nin; Fri, 24 Jan 2025 07:08:42 +0000 Received: from nyc.source.kernel.org ([2604:1380:45d1:ec00::3]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tbDnz-0000000E4S9-0oii for linux-phy@lists.infradead.org; Fri, 24 Jan 2025 07:08:40 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 59F5EA40CFB; Fri, 24 Jan 2025 07:06:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 240F2C4CED2; Fri, 24 Jan 2025 07:08:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1737702517; bh=bbWuCKzdRDfHke4jR912REo6Gk6j7bDUt2JZed/wDBo=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=d2LADKZB5awe3E0KMAb3m5f9NjSPkC9DH/VLGN6cMHwqMtZXpi4/9NTdBt0EluiMq slXh8EcPydHRtWf0dlsdC8gIUCEqqhlTo4MkyQ2hYA3lrZ6h+YmWOMpJvVQizSMBq7 06JqtcgBPkle3IiJd7QTWiid23ki806rOBPhWmD2Eg5TP4ckQ7pHRFl/s8Vxx3JAGD OJyqGJM7BIDQvbMyzNsYE1zz9Iosn1zBLfWSDCv5I27y5p8eVFeoVrdYatifR1C0+G +Ce0+1UcAehyiUzs/5SmwLZ5BhAXdT5J+hC2vOhPnR6kcLnGdGZa+nZXLlZ+5K9PDD +8ytgqq6vZ28A== Date: Fri, 24 Jan 2025 12:38:29 +0530 From: Manivannan Sadhasivam To: Qiang Yu Cc: Dmitry Baryshkov , "Wenbin Yao (Consultant)" , vkoul@kernel.org, kishon@kernel.org, p.zabel@pengutronix.de, abel.vesa@linaro.org, neil.armstrong@linaro.org, manivannan.sadhasivam@linaro.org, quic_devipriy@quicinc.com, konrad.dybcio@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org Subject: Re: [PATCH 2/2] phy: qcom: qmp-pcie: Add PHY register retention support Message-ID: <20250124070829.oar3hlkshkpam57d@thinkpad> References: <20250121094140.4006801-1-quic_wenbyao@quicinc.com> <20250121094140.4006801-3-quic_wenbyao@quicinc.com> <188a9efd-718e-4ac5-b89a-29f2713e1dba@quicinc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <188a9efd-718e-4ac5-b89a-29f2713e1dba@quicinc.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250123_230839_368380_3F98BBA1 X-CRM114-Status: GOOD ( 40.65 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org KyBNYXlhbmsgKHdpdGggd2hvbSBJIGRpc2N1c3NlZCB0aGlzIHRvcGljIGludGVybmFsbHkpCgpP biBGcmksIEphbiAyNCwgMjAyNSBhdCAwMjoyMjowMVBNICswODAwLCBRaWFuZyBZdSB3cm90ZToK PiAKPiBPbiAxLzIyLzIwMjUgNTo0MyBQTSwgRG1pdHJ5IEJhcnlzaGtvdiB3cm90ZToKPiA+IE9u IFdlZCwgSmFuIDIyLCAyMDI1IGF0IDAzOjE3OjM5UE0gKzA4MDAsIFdlbmJpbiBZYW8gKENvbnN1 bHRhbnQpIHdyb3RlOgo+ID4gPiBPbiAxLzIxLzIwMjUgNjozNiBQTSwgRG1pdHJ5IEJhcnlzaGtv diB3cm90ZToKPiA+ID4gPiBPbiBUdWUsIDIxIEphbiAyMDI1IGF0IDExOjQzLCBXZW5iaW4gWWFv IDxxdWljX3dlbmJ5YW9AcXVpY2luYy5jb20+IHdyb3RlOgo+ID4gPiA+ID4gRnJvbTogUWlhbmcg WXUgPHF1aWNfcWlhbnl1QHF1aWNpbmMuY29tPgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBDdXJyZW50 bHksIEJDUiByZXNldCBhbmQgUEhZIHJlZ2lzdGVyIHNldHRpbmcgYXJlIG1hbmRhdG9yeSBmb3Ig ZXZlcnkgcG9ydAo+ID4gPiA+ID4gYmVmb3JlIGxpbmsgdHJhaW5pbmcuIEhvd2V2ZXIsIHNvbWUg UUNPTSBQQ0llIFBIWXMgc3VwcG9ydCBub19jc3IgcmVzZXQuCj4gPiA+ID4gPiBEaWZmZXJlbnQg dGhhbiBCQ1IgcmVzZXQgdGhhdCBpcyB1c2VkIHRvIHJlc2V0IGVudGlyZSBQSFkgaW5jbHVkaW5n Cj4gPiA+ID4gPiBoYXJkd2FyZSBhbmQgcmVnaXN0ZXIsIG9uY2Ugbm9fY3NyIHJlc2V0IGlzIHRv Z2dsZWQsIG9ubHkgUEhZIGhhcmR3YXJlIHdpbGwKPiA+ID4gPiA+IGJlIHJlc2V0IGJ1dCBQSFkg cmVnaXN0ZXJzIHdpbGwgYmUgcmV0YWluZWQsCj4gPiA+ID4gSSdtIHNvcnJ5LCBJIGNhbid0IHBh cnNlIHRoaXMuCj4gPiA+IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbm9fY3NyIHJlc2V0IGFuZCBi Y3IgcmVzZXQgaXMgdGhhdCBub19jc3IgcmVzZXQKPiA+ID4gZG9lc24ndCByZXNldCB0aGUgcGh5 IHJlZ2lzdGVycy4gSWYgYSBwaHkgaXMgZW5hYmxlZCBpbiBVRUZJLCBpdHMgcmVnaXN0ZXJzCj4g PiA+IGFyZSBwcm9ncmFtZWQuIEFmdGVyIExpbnV4IGJvb3QgdXAsIHRoZSByZWdpc3RlcnMgd2ls bCBub3QgYmUgcmVzZXQgYnV0Cj4gPiA+IGtlZXAgdGhlIHZhbHVlIHByb2dyYW1tZWQgYnkgVUVG SSBpZiB3ZSBvbmx5IGRvIG5vX2NzciByZXNldCwgc28gd2UgY2FuCj4gPiA+IHNraXAgcGh5IHNl dHRpbmcuCj4gPiBQbGVhc2UgZml4IGNhcGl0YWxpemF0aW9uIG9mIHRoZSBhYmJyZXZpYXRpb25z IChQSFksIEJDUikgYW5kIGFkZAo+ID4gc2ltaWxhciB0ZXh0IHRvIHRoZSBjb21taXQgbWVzc2Fn ZS4KPiA+IAo+ID4gPiA+ID4gd2hpY2ggbWVhbnMgUEhZIHNldHRpbmcgY2FuCj4gPiA+ID4gPiBi ZSBza2lwcGVkIGR1cmluZyBQSFkgaW5pdCBpZiBQQ0llIGxpbmsgd2FzIGVuYWJsZWQgaW4gYm9v bHRsb2FkZXIgYW5kIG9ubHkKPiA+ID4gPiA+IG5vX2NzciBpcyB0b2dnbGVkIGFmdGVyIHRoYXQu Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhlbmNlLCBkZXRlcm1pbmUgd2hldGhlciB0aGUgUEhZIGhh cyBiZWVuIGVuYWJsZWQgaW4gYm9vdGxvYWRlciBieQo+ID4gPiA+ID4gdmVyaWZ5aW5nIFFQSFlf U1RBUlRfQ1RSTCByZWdpc3Rlci4gSWYgaXQgaXMgcHJvZ3JhbW1lZCBhbmQgbm9fY3NyIHJlc2V0 IGlzCj4gPiA+ID4gPiBwcmVzZW50LCBza2lwIEJDUiByZXNldCBhbmQgUEhZIHJlZ2lzdGVyIHNl dHRpbmcsIHNvIHRoYXQgUENJZSBsaW5rIGNhbiBiZQo+ID4gPiA+ID4gZXN0YWJsaXNoZWQgd2l0 aCBub19jc3IgcmVzZXQgb25seS4KPiA+ID4gPiBUaGlzIGRvZXNuJ3QgdGVsbCB1cyB3aHkgd2Ug d2FudCB0byBkbyBzby4gVGhlIGdlbmVyYWwgcnVsZSBpcyBub3QgdG8KPiA+ID4gPiBkZXBlbmQg b24gdGhlIGJvb3Rsb2FkZXJzIGF0IGFsbC4gVGhlIHJlYXNvbiBpcyBwcmV0dHkgc2ltcGxlOiBp dCBpcwo+ID4gPiA+IGhhcmQgdG8gdXBkYXRlIGJvb3Rsb2FkZXJzLCB3aGlsZSBpdCBpcyByZWxh dGl2ZWx5IGVhc3kgdG8gdXBkYXRlIHRoZQo+ID4gPiA+IGtlcm5lbC4gSWYgdGhlIGhhcmR3YXJl IHRlYW0gaXNzdWVzIGFueSBraW5kIG9mIGNoYW5nZXMgdG8gdGhlCj4gPiA+ID4gcHJvZ3JhbW1p bmcgdGFibGVzLCB0aGUga2VybmVsIHdpbGwgZ2V0IHRoZW0gZWFybGllciB0aGFuIHRoZQo+ID4g PiA+IGJvb3Rsb2FkZXIuCj4gPiA+IFdpdGggdGhpcyBjaGFuZ2UsIHdlIGRvbid0IG5lZWQgdG8g dXBzdHJlYW0gcGh5IHNldHRpbmcgZm9yIGFsbCBwaHlzCj4gPiA+IHN1cHBvcnQgbm9fY3NyIHJl c2V0LCB0aGlzIHdpbGwgc2F2ZSBhIGdyZWF0IGRlYWwgb2YgZWZmb3J0cyBhbmQgc2ltcGxpZnkK PiA+ID4gdGhlIHBoeSBkcml2ZXIuIE91ciBnb2FsIGlzIHRvIHJlbW92ZSBwcm9wcmlldGFyeSBQ Q0llIGZpcm13YXJlIG9wZXJhdGlvbnMKPiA+ID4gZnJvbSBrZXJuZWwuIFBIWSBpcyBqdXN0IHRo ZSBzdGFydCBhbmQgd2lsbCBiZSBmb2xsb3dlZCBieSBjb250cm9sbGVyLAo+ID4gPiBjbG9ja3Ms IHJlZ3VsYXRvcnMsIGV0Yy4gSWYgcHJvZ3JhbSB0YWJsZSBuZWVkIHRvIGJlIGNoYW5nZWQsIHRo ZSBwbGFjZSB0bwo+ID4gPiBkbyB0aGF0IHdpbGwgYmUgVUVGSS4KPiA+IFdlbGwsIHRoYXQgc291 bmRzIGxpa2UgYSB2ZXJ5IGJhZCBpZGVhLiBQbGVhc2UgZG9uJ3QgZG8gdGhhdC4gTGludXgKPiA+ IGtlcm5lbCBkcml2ZXJzIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBVRUZJIG9yIGEgYm9vdGxv YWRlci4gVW5sZXNzCj4gPiB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGF0LCBMaW51eCBz aG91bGQgY29udGludWUgdG8gYmUgYWJsZSB0bwo+ID4gcmVzZXQgYW5kIHByb2dyYW0gdGhlIFBD SWUgUEhZIChhcyB3ZWxsIGFzIGFsbCBvdGhlciBodyBibG9ja3MpLgo+IEknbSB3b25kZXJpbmcg aWYgaXQncyByZWFsbHkgbmVjZXNzYXJ5IGZvciBMaW51eCB0byBiZSBhYmxlIHRvIHByb2dyYW0g dGhlCj4gUEhZLiBQZXJoYXBzIExpbnV4IHNob3VsZCBvbmx5IGNhcmUgYWJvdXQgY29tbW9uIGFz cGVjdHMgZGVmaW5lZCBieSB0aGUKPiBQQ0llIHNwZWMgbGlrZSBidXMgc2Nhbm5pbmcsIEJBUiBz cGFjZSBhbGxvY2F0aW9uLCBhbmQgZnVuY3Rpb25zIHByb3ZpZGVkCj4gYnkgb3RoZXIgUENJZSBj YXBhYmlsaXRpZXMuIEFzIGZvciB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyB0aGF0IGFyZQo+IGRp ZmZlcmVudCBvbiB2YXJpb3VzIHBsYXRmb3JtcywgaXQgbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0 ZSBmb3IgdGhlCj4gZmlybXdhcmUgdG8gdGFrZSBjYXJlIG9mIHRoZW0uIFRoaXMgd2F5LCB0aGUg cmVzcG9uc2liaWxpdGllcyBjYW4gYmUgbW9yZQo+IGNsZWFybHkgZGl2aWRlZCwgYW5kIHRoZSBk cml2ZXIgY291bGQgcG90ZW50aWFsbHkgYmUKPiBtb3JlIHN0cmVhbWxpbmVkLgo+IAoKSXQgaXMg bm90IG5lY2Vzc2FyeSBpbiBhbiBpZGVhbCB3b3JsZCwgYnV0IHdoYXQgd2UgaGF2ZSBzZWVuIGlz IFFjb20gcmVsZWFzaW5nCnVwZGF0ZWQgUEhZIGluaXQgc2VxdWVuY2UgYWZ0ZXIgdXBzdHJlYW1p bmcgdGhlIGluaXRpYWwgUEhZIGRyaXZlciBzdXBwb3J0LiBJbgp0aGF0IGNhc2UsIHRoZSBkZXZp Y2VzIHdpdGggb2xkIGZpcm13YXJlIHdpbGwgYmVjb21lIG91dGRhdGVkIHVubGVzcyB0aGUgZncg aXMKdXBkYXRlZCAod2hpY2ggaXMgbm90IHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJlZCB0byB1cGRh dGluZyB0aGUga2VybmVsKS4KCkJ1dCwgSSBkbyBsaWtlIHRoaXMgaWRlYSBvZiByZXVzaW5nIHRo ZSBQSFkgaW5pdCBzZXF1ZW5jZSBpbiB0aGUga2VybmVsLiBUaG91Z2gKd2UgY2Fubm90IGp1c3Qg ZG8gaXQgZm9yIGFsbCBwbGF0Zm9ybXMuIE1heWJlIHdlIGNhbiBlbmFibGUgaXQgb24gcGxhdGZv cm1zIGxpa2UKY29tcHV0ZSBzdGFydGluZyBmcm9tIFgxRSBhbmQgc2VlIGhvdyBpdCBnb2VzPyBK dXN0IHRvIG1pbmltaXplIHRoZSBpbXBhY3QgaWYgaXQKZGlkbid0IGdvIHdlbGwuCgo+IE9uIHRo ZSBvdGhlciBoYW5kLCBzaW5jZSB0aGUgbm9fY3NyIHJlc2V0IGNhbiByZXRhaW4gcmVnaXN0ZXIg dmFsdWVzLAo+IG1heWJlIHdlIHNob3VsZCBzdGlsbCBtYWtlIGZ1bGwgdXNlIG9mIGl0LCBldmVu IGlmIHdlIGRvbid0IHdhbnQgdG8KPiByZWx5IG9uIFVFRkkuIEZvciBleGFtcGxlLCBkdXJpbmcg cnVudGltZSBzdXNwZW5kL3Jlc3VtZQo+ICh0aGUgRDNjb2xkIC0+IEQwIGN5Y2xlKQoKRDNDb2xk IGR1cmluZyBydW50aW1lIHN1c3BlbmQgaW4gYml6YXJyZS4KCj4sIHdoZW4gcmUtaW5pdGlhbGl6 aW5nIHRoZSBQSFksIHNhbWUgUEhZCj4gc2V0dGluZ3Mgd2lsbCBiZSBwcm9ncmFtbWVkIGFnYWlu LiBUaGlzIGlzIGEgYml0IHJlZHVuZGFudC4KPiAKCkhtbSwgd2hhdCB3b3VsZCBoYXBwZW4gaWYg dGhlIENYIGNvbGxhcHNlIGhhcHBlbnMgZHVyaW5nIHN5c3RlbSBzdXNwZW5kPyBXaWxsCnRoZSBQ SFkgcmVnaXN0ZXJzIGJlIHJldGFpbmVkPwoKLSBNYW5pCgotLSAK4K6u4K6j4K6/4K614K6j4K+N 4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+CuteCuruCvjQoKLS0gCmxpbnV4LXBoeSBtYWlsaW5n IGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==