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 9DFD0C83F1C for ; Wed, 30 Aug 2023 18:48:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243299AbjH3Srg (ORCPT ); Wed, 30 Aug 2023 14:47:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49560 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244645AbjH3Nh6 (ORCPT ); Wed, 30 Aug 2023 09:37:58 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8047011B; Wed, 30 Aug 2023 06:37:54 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5ACE52F4; Wed, 30 Aug 2023 06:38:33 -0700 (PDT) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6BC093F738; Wed, 30 Aug 2023 06:37:51 -0700 (PDT) Date: Wed, 30 Aug 2023 14:37:48 +0100 From: Cristian Marussi To: Peng Fan Cc: Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@arm.com" , Aisheng Dong , "festevam@gmail.com" , Jacky Bai , "s.hauer@pengutronix.de" , "shawnguo@kernel.org" , "kernel@pengutronix.de" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC] scmi: pinctrl: support i.MX9 Message-ID: References: <20230824070611.3335107-1-peng.fan@oss.nxp.com> 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-gpio@vger.kernel.org On Wed, Aug 30, 2023 at 12:48:37PM +0000, Peng Fan wrote: > Hi Cristian, > Hi, > > Subject: Re: [RFC] scmi: pinctrl: support i.MX9 > > > > On Fri, Aug 25, 2023 at 08:43:38AM +0000, Peng Fan wrote: > > > > Subject: Re: [RFC] scmi: pinctrl: support i.MX9 > > > > > > > > On Thu, Aug 24, 2023 at 2:47 PM Peng Fan wrote: > > > > > Me: > > > > Hi Peng, > > > > > > > > > > >> it is merely making things more complex and also slower > > > > > > bymaking the registers only accessible from this SCMI link. > > > > > > > > > > This is for safety reason, the pinctrl hardware must be handled by > > > > > a system manager entity. So mmio direct access not allowed from > > > > > Cortex-A side. > > > > > > > > Yeah I understood as much. But I don't think that the firmware is > > > > really filtering any of the access, it will just poke into any > > > > pinctrl register as instructed anyway so what's the point. Just looks like a > > layer of indirection. > > > > > > No, the firmware has a check on whether a pin is allowed to be > > > configured by the agent that wanna to configure the pin. > > > > > > > But I'm not your system manager, so it's not my decision. > > > > > > > > > The SCMI firmware is very straightforward, there is no group or > > > > > function. > > > > > > > > > > It just accepts the format as this: > > > > > MUX_TYPE, MUX VALUE, CONF_TYPE, CONF_VAL, DAISY_TYPE, DAISY > > ID, > > > > > DAISY_CFG, DAISY_VALUE. > > > > > > > > > > Similar as linux MMIO format. > > > > > > > > > > Our i.MX95 platform will support two settings, one with SCMI > > > > > firmware, one without SCMI. These two settings will share the same > > > > > pinctrl header file. > > > > > > > > > > And to simplify the scmi firmware design(anyway I am not owner of > > > > > the firmware), to make pinctrl header shared w/o scmi, we take the > > > > > current in-upstream freescale imx binding format. > > > > > > > > The SCMI people will have to state their position on this. > > > > Like what they consider conformance and what extensions are allowed. > > > > This is more a standardization question than an implementation > > > > question so it's not really my turf. > > > > > > The i.MX95 SCMI firmware uses OEM extension type. So I just follow > > > what the firmware did and support it in linux. Anyway let's wait > > > Sudeep's reply. > > > > > > > So my unsderstanding on this matter as of now is that: > > > > 1. the current SCMI Pinctrl specification can support your usecase by using > > OEM Types and multiple pins/values CONFIG_GET/SET commands > > Yes, based on the Oleksii patchset with my local multiple configs support. > Yes, I know, I pointed out on his series that the protocol has still to be fixed to be aligned with the latest BETA2 spec (we changed the spec on the fly while he was already posting indeed..) > > > > 2. the Kernel SCMI protocol layer (driver/firmware/arm_scmi/pinctrl.c) > > is equally fine and can support your usecase, AFTER Oleksii fixes it to > > align it to the latest v3.2-BETA2 specification changes. > > IOW, this means that, using the SCMI Pinctrl protocol operations > > exposed in scmi_protocol.h, from somewhere, you are able to properly > > configure multiple pins/values with your specific OEM types. > > Yes. Good. > > > > > 3. The SCMI Pinctrl driver (by Oleksii) built on top of the pinctrl protocol > > operations is instead NOT suitable for your usecase since it uses the Linux > > Generic Pinconf and IMX does not make use of it, and instead IMX has > > its own bindings and related parsing logic. > > Yes. > > > > > Am I right ? > > You are right. > > > > > If this is the case, I would NOT try to abuse the current SCMI Pinctrl Generic > > driver (by Oleksii) by throwing into it a bunch of IMX specific DT parsing, > > also because you'll end-up NOT using most of the generic SCMI Pinctrl driver > > but just reusing a bit of the probe (customized with your own DT maps > > parsing) > > Only DT map to parse the dts and map to config array. Others are same, > so need to export some symbols for pinctrl-scmi-imx.c driver if build imx > scmi driver. > Yes, but you are basically using some exported symbol to parse the DT in your way and then you do not use anything of the various functions/groups stuff...you just leverage some of the probing stuff and then issue you OEM Type configs....I mean most of the picntrl-scmi driver would be unused anyway in this scenario. > > > > Instead, given that the spec[1.] and the protocol layer[2.] are fine for your > > use case and you indeed have already a custom way to parse your DT > > mappings, I would say that you could just write your own custom SCMI > > driver ( ? pinctrl-imx-scmi), distinct and much more simple than the generic > > one, that does its own IMX DT parsing and calls just the SCMI protocol > > operations that it needs in the way that your platform expects: so basically > > another Pinctrl SCMI driver that does not use the generic pinconf DT > > configuration BUT DO USE the underlying SCMI Pinctrl protocol (via its > > exposed protocol operations...) > > I am ok with this approach, but I need use the other ID, saying 0x99, not 0x19, > because 0x19 will bind with the pinctrl-scmi.c driver, I could not reuse > this ID for i.MX pinctrl-scmi-imx driver. Otherwise there will be issue if both > driver are built in kernel image. > Ok here I lost you. The protocol ID 0x19 is bound to the protocol layer and identifies the standard Pinctrl protocol: usually you use a 0x99 to define and describe you own specific NEW vendor protocol, BUT here you are saying you are fine to use std Pinctrl spec AND the protocol operations as exposed in pinctrl.c, so I dont see why you should use a new vendor protocol_id to basically expose the same operations. (and I also dont see how you can do that without hacks in the current codebase) You CAN have multiple SCMI drivers using the same protocol at the same time (even more than one protocol at the same time), even though we try to avoid it if there are no good reason to have more than one driver, there is nothing in the spec or in the current SCMI platform or agent stacks that inhibits such scenario (and I use iot heavily for my offline testing indeed.) Look at: - drivers/hwmon/scmi-hwmon - drivers/iio/common/scmi_sensors/scmi_iio.c and you'll see that these 2 drivers uses the same SENSOR protocol, just for different sensor types so they do not interfere one with each other. What happens is that the first driver using a protocol causes its protocol_init to be called once for all. This should work flawlessly like this, if this is not the case for some reason, this will have to be fixed in the protocol implementation: you are supposed to be able to grab the same protocol from different drivers without any issue. I agree that you have to be careful not to share the same pins across 2 different drivers using the same Pinctrl driver, but even if both driver are compiled in, nothing is really happening until the related DT binding are parsed, and so unless you mismatch your DT and assign same pins to both the Generic SCMI Pinctrl and to the IMX SCMI Pinctrl I dont see how they can interfere. You could indeed, have a set of pins managed by your custom IMX driver and one distinct other set of pins handled by the SCMI Generic driver by Oleksii, both magically handled by the same SCMI Server backend :P ! BUT to be on the safe side you could anyway force a conflict in Kconfig to mutually exclude one driver when the other is built and vice-versa. Am I missing something ? Why would you need a new vendor ID to define a new protocol without not really having any new protocol ? Thanks, Cristian 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 F2BD9C83F01 for ; Wed, 30 Aug 2023 13:38: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: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=uOt2cp/cBa9+DTLn/B2yxPBWir6IUqRAXym1AsY6ch0=; b=A4y+pR0qCrrSZQ +N2RV4RFhyXDh67PUqpr/thDGVD4Cg/+09peQrlIVqJtWiMz8P4oWg7FPn9q5is4WoCoXNEhPWW/+ pO0p2+6ZcOU3RaTkrhlfEEDpfJASQLreVXQbOeT17YOdRZJ2LBmrpGV2TuyvnF1hDXOnxUU3sNtj/ hwRyPpqVZgStDadVlcRZTGvERf2bFovdNkIhJAUfy42McVldh6lyHDm2KnNCgMjWT/oRyB6llo+p/ 0ipy/lwU0WC1HDd7gmYxQKlmrl7MQw/urjLe/pltLncgSR+JsYRjBI3RNmVbE5GYfwc13ccodiLex Vp4r3Ag9f93jO2azvSNA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qbLOY-00DaSm-03; Wed, 30 Aug 2023 13:38:06 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qbLOU-00DaSF-0S for linux-arm-kernel@lists.infradead.org; Wed, 30 Aug 2023 13:38:04 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5ACE52F4; Wed, 30 Aug 2023 06:38:33 -0700 (PDT) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6BC093F738; Wed, 30 Aug 2023 06:37:51 -0700 (PDT) Date: Wed, 30 Aug 2023 14:37:48 +0100 From: Cristian Marussi To: Peng Fan Cc: Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@arm.com" , Aisheng Dong , "festevam@gmail.com" , Jacky Bai , "s.hauer@pengutronix.de" , "shawnguo@kernel.org" , "kernel@pengutronix.de" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC] scmi: pinctrl: support i.MX9 Message-ID: References: <20230824070611.3335107-1-peng.fan@oss.nxp.com> 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-20230830_063802_279686_60673FE7 X-CRM114-Status: GOOD ( 61.28 ) 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 T24gV2VkLCBBdWcgMzAsIDIwMjMgYXQgMTI6NDg6MzdQTSArMDAwMCwgUGVuZyBGYW4gd3JvdGU6 Cj4gSGkgQ3Jpc3RpYW4sCj4gCgpIaSwKCj4gPiBTdWJqZWN0OiBSZTogW1JGQ10gc2NtaTogcGlu Y3RybDogc3VwcG9ydCBpLk1YOQo+ID4gCj4gPiBPbiBGcmksIEF1ZyAyNSwgMjAyMyBhdCAwODo0 MzozOEFNICswMDAwLCBQZW5nIEZhbiB3cm90ZToKPiA+ID4gPiBTdWJqZWN0OiBSZTogW1JGQ10g c2NtaTogcGluY3RybDogc3VwcG9ydCBpLk1YOQo+ID4gPiA+Cj4gPiA+ID4gT24gVGh1LCBBdWcg MjQsIDIwMjMgYXQgMjo0N+KAr1BNIFBlbmcgRmFuIDxwZW5nLmZhbkBueHAuY29tPiB3cm90ZToK PiA+ID4gPiA+IE1lOgo+ID4gCj4gPiBIaSBQZW5nLAo+ID4gCj4gPiA+ID4KPiA+ID4gPiA+PiBp dCBpcyBtZXJlbHkgbWFraW5nIHRoaW5ncyBtb3JlIGNvbXBsZXggYW5kIGFsc28gc2xvd2VyCj4g PiA+ID4gPiA+IGJ5bWFraW5nIHRoZSByZWdpc3RlcnMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhp cyBTQ01JIGxpbmsuCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhpcyBpcyBmb3Igc2FmZXR5IHJlYXNv biwgdGhlIHBpbmN0cmwgaGFyZHdhcmUgbXVzdCBiZSBoYW5kbGVkIGJ5Cj4gPiA+ID4gPiBhIHN5 c3RlbSBtYW5hZ2VyIGVudGl0eS4gU28gbW1pbyBkaXJlY3QgYWNjZXNzIG5vdCBhbGxvd2VkIGZy b20KPiA+ID4gPiA+IENvcnRleC1BIHNpZGUuCj4gPiA+ID4KPiA+ID4gPiBZZWFoIEkgdW5kZXJz dG9vZCBhcyBtdWNoLiBCdXQgSSBkb24ndCB0aGluayB0aGF0IHRoZSBmaXJtd2FyZSBpcwo+ID4g PiA+IHJlYWxseSBmaWx0ZXJpbmcgYW55IG9mIHRoZSBhY2Nlc3MsIGl0IHdpbGwganVzdCBwb2tl IGludG8gYW55Cj4gPiA+ID4gcGluY3RybCByZWdpc3RlciBhcyBpbnN0cnVjdGVkIGFueXdheSBz byB3aGF0J3MgdGhlIHBvaW50LiBKdXN0IGxvb2tzIGxpa2UgYQo+ID4gbGF5ZXIgb2YgaW5kaXJl Y3Rpb24uCj4gPiA+Cj4gPiA+IE5vLCB0aGUgZmlybXdhcmUgaGFzIGEgY2hlY2sgb24gd2hldGhl ciBhIHBpbiBpcyBhbGxvd2VkIHRvIGJlCj4gPiA+IGNvbmZpZ3VyZWQgYnkgdGhlIGFnZW50IHRo YXQgd2FubmEgdG8gY29uZmlndXJlIHRoZSBwaW4uCj4gPiA+Cj4gPiA+ID4gQnV0IEknbSBub3Qg eW91ciBzeXN0ZW0gbWFuYWdlciwgc28gaXQncyBub3QgbXkgZGVjaXNpb24uCj4gPiA+ID4KPiA+ ID4gPiA+IFRoZSBTQ01JIGZpcm13YXJlIGlzIHZlcnkgc3RyYWlnaHRmb3J3YXJkLCB0aGVyZSBp cyBubyBncm91cCBvcgo+ID4gPiA+ID4gZnVuY3Rpb24uCj4gPiA+ID4gPgo+ID4gPiA+ID4gSXQg anVzdCBhY2NlcHRzIHRoZSBmb3JtYXQgYXMgdGhpczoKPiA+ID4gPiA+IE1VWF9UWVBFLCBNVVgg VkFMVUUsIENPTkZfVFlQRSwgQ09ORl9WQUwsIERBSVNZX1RZUEUsIERBSVNZCj4gPiBJRCwKPiA+ ID4gPiA+IERBSVNZX0NGRywgREFJU1lfVkFMVUUuCj4gPiA+ID4gPgo+ID4gPiA+ID4gU2ltaWxh ciBhcyBsaW51eCBNTUlPIGZvcm1hdC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBPdXIgaS5NWDk1IHBs YXRmb3JtIHdpbGwgc3VwcG9ydCB0d28gc2V0dGluZ3MsIG9uZSB3aXRoIFNDTUkKPiA+ID4gPiA+ IGZpcm13YXJlLCBvbmUgd2l0aG91dCBTQ01JLiBUaGVzZSB0d28gc2V0dGluZ3Mgd2lsbCBzaGFy ZSB0aGUgc2FtZQo+ID4gPiA+ID4gcGluY3RybCBoZWFkZXIgZmlsZS4KPiA+ID4gPiA+Cj4gPiA+ ID4gPiBBbmQgdG8gc2ltcGxpZnkgdGhlIHNjbWkgZmlybXdhcmUgZGVzaWduKGFueXdheSBJIGFt IG5vdCBvd25lciBvZgo+ID4gPiA+ID4gdGhlIGZpcm13YXJlKSwgdG8gbWFrZSBwaW5jdHJsIGhl YWRlciBzaGFyZWQgdy9vIHNjbWksIHdlIHRha2UgdGhlCj4gPiA+ID4gPiBjdXJyZW50IGluLXVw c3RyZWFtIGZyZWVzY2FsZSBpbXggYmluZGluZyBmb3JtYXQuCj4gPiA+ID4KPiA+ID4gPiBUaGUg U0NNSSBwZW9wbGUgd2lsbCBoYXZlIHRvIHN0YXRlIHRoZWlyIHBvc2l0aW9uIG9uIHRoaXMuCj4g PiA+ID4gTGlrZSB3aGF0IHRoZXkgY29uc2lkZXIgY29uZm9ybWFuY2UgYW5kIHdoYXQgZXh0ZW5z aW9ucyBhcmUgYWxsb3dlZC4KPiA+ID4gPiBUaGlzIGlzIG1vcmUgYSBzdGFuZGFyZGl6YXRpb24g cXVlc3Rpb24gdGhhbiBhbiBpbXBsZW1lbnRhdGlvbgo+ID4gPiA+IHF1ZXN0aW9uIHNvIGl0J3Mg bm90IHJlYWxseSBteSB0dXJmLgo+ID4gPgo+ID4gPiBUaGUgaS5NWDk1IFNDTUkgZmlybXdhcmUg dXNlcyBPRU0gZXh0ZW5zaW9uIHR5cGUuIFNvIEkganVzdCBmb2xsb3cKPiA+ID4gd2hhdCB0aGUg ZmlybXdhcmUgZGlkIGFuZCBzdXBwb3J0IGl0IGluIGxpbnV4LiBBbnl3YXkgbGV0J3Mgd2FpdAo+ ID4gPiBTdWRlZXAncyByZXBseS4KPiA+ID4KPiA+IAo+ID4gU28gbXkgdW5zZGVyc3RhbmRpbmcg b24gdGhpcyBtYXR0ZXIgYXMgb2Ygbm93IGlzIHRoYXQ6Cj4gPiAKPiA+IDEuIHRoZSBjdXJyZW50 IFNDTUkgUGluY3RybCBzcGVjaWZpY2F0aW9uIGNhbiBzdXBwb3J0IHlvdXIgdXNlY2FzZSBieSB1 c2luZwo+ID4gICAgT0VNIFR5cGVzIGFuZCBtdWx0aXBsZSBwaW5zL3ZhbHVlcyBDT05GSUdfR0VU L1NFVCBjb21tYW5kcwo+IAo+IFllcywgYmFzZWQgb24gdGhlIE9sZWtzaWkgcGF0Y2hzZXQgd2l0 aCBteSBsb2NhbCBtdWx0aXBsZSBjb25maWdzIHN1cHBvcnQuCj4gCgpZZXMsIEkga25vdywgSSBw b2ludGVkIG91dCBvbiBoaXMgc2VyaWVzIHRoYXQgdGhlIHByb3RvY29sIGhhcyBzdGlsbCB0bwpi ZSBmaXhlZCB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGxhdGVzdCBCRVRBMiBzcGVjICh3ZSBjaGFu Z2VkIHRoZSBzcGVjCm9uIHRoZSBmbHkgd2hpbGUgaGUgd2FzIGFscmVhZHkgcG9zdGluZyBpbmRl ZWQuLikKCj4gPiAKPiA+IDIuIHRoZSBLZXJuZWwgU0NNSSBwcm90b2NvbCBsYXllciAoZHJpdmVy L2Zpcm13YXJlL2FybV9zY21pL3BpbmN0cmwuYykKPiA+ICAgIGlzIGVxdWFsbHkgZmluZSBhbmQg Y2FuIHN1cHBvcnQgeW91ciB1c2VjYXNlLCBBRlRFUiBPbGVrc2lpIGZpeGVzIGl0IHRvCj4gPiAg ICBhbGlnbiBpdCB0byB0aGUgbGF0ZXN0IHYzLjItQkVUQTIgc3BlY2lmaWNhdGlvbiBjaGFuZ2Vz Lgo+ID4gICAgSU9XLCB0aGlzIG1lYW5zIHRoYXQsIHVzaW5nIHRoZSBTQ01JIFBpbmN0cmwgcHJv dG9jb2wgb3BlcmF0aW9ucwo+ID4gICAgZXhwb3NlZCBpbiBzY21pX3Byb3RvY29sLmgsIGZyb20g c29tZXdoZXJlLCB5b3UgYXJlIGFibGUgdG8gcHJvcGVybHkKPiA+ICAgIGNvbmZpZ3VyZSBtdWx0 aXBsZSBwaW5zL3ZhbHVlcyB3aXRoIHlvdXIgc3BlY2lmaWMgT0VNIHR5cGVzLgo+IAo+IFllcy4K Ckdvb2QuCgo+IAo+ID4gCj4gPiAzLiBUaGUgU0NNSSBQaW5jdHJsIGRyaXZlciAoYnkgT2xla3Np aSkgYnVpbHQgb24gdG9wIG9mIHRoZSBwaW5jdHJsIHByb3RvY29sCj4gPiAgICBvcGVyYXRpb25z IGlzIGluc3RlYWQgTk9UIHN1aXRhYmxlIGZvciB5b3VyIHVzZWNhc2Ugc2luY2UgaXQgdXNlcyB0 aGUgTGludXgKPiA+ICAgIEdlbmVyaWMgUGluY29uZiBhbmQgSU1YIGRvZXMgbm90IG1ha2UgdXNl IG9mIGl0LCBhbmQgaW5zdGVhZCBJTVggaGFzCj4gPiAgICBpdHMgb3duIGJpbmRpbmdzIGFuZCBy ZWxhdGVkIHBhcnNpbmcgbG9naWMuCj4gCj4gWWVzLgo+IAo+ID4gCj4gPiBBbSBJIHJpZ2h0ID8K PiAKPiBZb3UgYXJlIHJpZ2h0Lgo+IAo+ID4gCj4gPiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBJIHdv dWxkIE5PVCB0cnkgdG8gYWJ1c2UgdGhlIGN1cnJlbnQgU0NNSSBQaW5jdHJsIEdlbmVyaWMKPiA+ IGRyaXZlciAoYnkgT2xla3NpaSkgYnkgdGhyb3dpbmcgaW50byBpdCBhIGJ1bmNoIG9mIElNWCBz cGVjaWZpYyBEVCBwYXJzaW5nLAo+ID4gYWxzbyBiZWNhdXNlIHlvdSdsbCBlbmQtdXAgTk9UIHVz aW5nIG1vc3Qgb2YgdGhlIGdlbmVyaWMgU0NNSSBQaW5jdHJsIGRyaXZlcgo+ID4gYnV0IGp1c3Qg cmV1c2luZyBhIGJpdCBvZiB0aGUgcHJvYmUgKGN1c3RvbWl6ZWQgd2l0aCB5b3VyIG93biBEVCBt YXBzCj4gPiBwYXJzaW5nKQo+IAo+IE9ubHkgRFQgbWFwIHRvIHBhcnNlIHRoZSBkdHMgYW5kIG1h cCB0byBjb25maWcgYXJyYXkuIE90aGVycyBhcmUgc2FtZSwKPiBzbyBuZWVkIHRvIGV4cG9ydCBz b21lIHN5bWJvbHMgZm9yIHBpbmN0cmwtc2NtaS1pbXguYyBkcml2ZXIgaWYgYnVpbGQgaW14Cj4g c2NtaSBkcml2ZXIuCj4KClllcywgYnV0IHlvdSBhcmUgYmFzaWNhbGx5IHVzaW5nIHNvbWUgZXhw b3J0ZWQgc3ltYm9sIHRvIHBhcnNlIHRoZSBEVCBpbgp5b3VyIHdheSBhbmQgdGhlbiB5b3UgZG8g bm90IHVzZSBhbnl0aGluZyBvZiB0aGUgdmFyaW91cwpmdW5jdGlvbnMvZ3JvdXBzIHN0dWZmLi4u eW91IGp1c3QgbGV2ZXJhZ2Ugc29tZSBvZiB0aGUgcHJvYmluZyBzdHVmZiBhbmQKdGhlbiBpc3N1 ZSB5b3UgT0VNIFR5cGUgY29uZmlncy4uLi5JIG1lYW4gbW9zdCBvZiB0aGUgcGljbnRybC1zY21p CmRyaXZlciB3b3VsZCBiZSB1bnVzZWQgYW55d2F5IGluIHRoaXMgc2NlbmFyaW8uCgo+ID4gCj4g PiBJbnN0ZWFkLCBnaXZlbiB0aGF0IHRoZSBzcGVjWzEuXSBhbmQgdGhlIHByb3RvY29sIGxheWVy WzIuXSBhcmUgZmluZSBmb3IgeW91cgo+ID4gdXNlIGNhc2UgYW5kIHlvdSBpbmRlZWQgaGF2ZSBh bHJlYWR5IGEgY3VzdG9tIHdheSB0byBwYXJzZSB5b3VyIERUCj4gPiBtYXBwaW5ncywgSSB3b3Vs ZCBzYXkgdGhhdCB5b3UgY291bGQganVzdCB3cml0ZSB5b3VyIG93biBjdXN0b20gU0NNSQo+ID4g ZHJpdmVyICggPyBwaW5jdHJsLWlteC1zY21pKSwgZGlzdGluY3QgYW5kIG11Y2ggbW9yZSBzaW1w bGUgdGhhbiB0aGUgZ2VuZXJpYwo+ID4gb25lLCB0aGF0IGRvZXMgaXRzIG93biBJTVggRFQgcGFy c2luZyBhbmQgY2FsbHMganVzdCB0aGUgU0NNSSBwcm90b2NvbAo+ID4gb3BlcmF0aW9ucyB0aGF0 IGl0IG5lZWRzIGluIHRoZSB3YXkgdGhhdCB5b3VyIHBsYXRmb3JtIGV4cGVjdHM6IHNvIGJhc2lj YWxseQo+ID4gYW5vdGhlciBQaW5jdHJsIFNDTUkgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIHRo ZSBnZW5lcmljIHBpbmNvbmYgRFQKPiA+IGNvbmZpZ3VyYXRpb24gQlVUIERPIFVTRSB0aGUgdW5k ZXJseWluZyBTQ01JIFBpbmN0cmwgcHJvdG9jb2wgKHZpYSBpdHMKPiA+IGV4cG9zZWQgcHJvdG9j b2wgb3BlcmF0aW9ucy4uLikKPiAKPiBJIGFtIG9rIHdpdGggdGhpcyBhcHByb2FjaCwgYnV0IEkg bmVlZCB1c2UgdGhlIG90aGVyIElELCBzYXlpbmcgMHg5OSwgbm90IDB4MTksCj4gYmVjYXVzZSAw eDE5IHdpbGwgYmluZCB3aXRoIHRoZSBwaW5jdHJsLXNjbWkuYyBkcml2ZXIsIEkgY291bGQgbm90 IHJldXNlCj4gdGhpcyBJRCBmb3IgaS5NWCBwaW5jdHJsLXNjbWktaW14IGRyaXZlci4gT3RoZXJ3 aXNlIHRoZXJlIHdpbGwgYmUgaXNzdWUgaWYgYm90aAo+IGRyaXZlciBhcmUgYnVpbHQgaW4ga2Vy bmVsIGltYWdlLgo+IAoKT2sgaGVyZSBJIGxvc3QgeW91LgoKVGhlIHByb3RvY29sIElEIDB4MTkg aXMgYm91bmQgdG8gdGhlIHByb3RvY29sIGxheWVyIGFuZCBpZGVudGlmaWVzIHRoZQpzdGFuZGFy ZCBQaW5jdHJsIHByb3RvY29sOiB1c3VhbGx5IHlvdSB1c2UgYSAweDk5IHRvIGRlZmluZSBhbmQg ZGVzY3JpYmUKeW91IG93biBzcGVjaWZpYyBORVcgdmVuZG9yIHByb3RvY29sLCBCVVQgaGVyZSB5 b3UgYXJlIHNheWluZyB5b3UgYXJlIGZpbmUgdG8KdXNlIHN0ZCBQaW5jdHJsIHNwZWMgQU5EIHRo ZSBwcm90b2NvbCBvcGVyYXRpb25zIGFzIGV4cG9zZWQgaW4gcGluY3RybC5jLCBzbwpJIGRvbnQg c2VlIHdoeSB5b3Ugc2hvdWxkIHVzZSBhIG5ldyB2ZW5kb3IgcHJvdG9jb2xfaWQgdG8gYmFzaWNh bGx5CmV4cG9zZSB0aGUgc2FtZSBvcGVyYXRpb25zLiAoYW5kIEkgYWxzbyBkb250IHNlZSBob3cg eW91IGNhbiBkbyB0aGF0CndpdGhvdXQgaGFja3MgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UpCgpZ b3UgQ0FOIGhhdmUgbXVsdGlwbGUgU0NNSSBkcml2ZXJzIHVzaW5nIHRoZSBzYW1lIHByb3RvY29s IGF0IHRoZSBzYW1lCnRpbWUgKGV2ZW4gbW9yZSB0aGFuIG9uZSBwcm90b2NvbCBhdCB0aGUgc2Ft ZSB0aW1lKSwgZXZlbiB0aG91Z2ggd2UgdHJ5CnRvIGF2b2lkIGl0IGlmIHRoZXJlIGFyZSBubyBn b29kIHJlYXNvbiB0byBoYXZlIG1vcmUgdGhhbiBvbmUgZHJpdmVyLCB0aGVyZQppcyBub3RoaW5n IGluIHRoZSBzcGVjIG9yIGluIHRoZSBjdXJyZW50IFNDTUkgcGxhdGZvcm0gb3IgYWdlbnQgc3Rh Y2tzIHRoYXQKaW5oaWJpdHMgc3VjaCBzY2VuYXJpbyAoYW5kIEkgdXNlIGlvdCBoZWF2aWx5IGZv ciBteSBvZmZsaW5lIHRlc3RpbmcKaW5kZWVkLikKCkxvb2sgYXQ6CgogLSBkcml2ZXJzL2h3bW9u L3NjbWktaHdtb24gCiAtIGRyaXZlcnMvaWlvL2NvbW1vbi9zY21pX3NlbnNvcnMvc2NtaV9paW8u YwoKYW5kIHlvdSdsbCBzZWUgdGhhdCB0aGVzZSAyIGRyaXZlcnMgdXNlcyB0aGUgc2FtZSBTRU5T T1IgcHJvdG9jb2wsIGp1c3QgZm9yCmRpZmZlcmVudCBzZW5zb3IgdHlwZXMgc28gdGhleSBkbyBu b3QgaW50ZXJmZXJlIG9uZSB3aXRoIGVhY2ggb3RoZXIuCgpXaGF0IGhhcHBlbnMgaXMgdGhhdCB0 aGUgZmlyc3QgZHJpdmVyIHVzaW5nIGEgcHJvdG9jb2wgY2F1c2VzIGl0cwpwcm90b2NvbF9pbml0 IHRvIGJlIGNhbGxlZCBvbmNlIGZvciBhbGwuCgpUaGlzIHNob3VsZCB3b3JrIGZsYXdsZXNzbHkg bGlrZSB0aGlzLCBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSBmb3Igc29tZQpyZWFzb24sIHRoaXMg d2lsbCBoYXZlIHRvIGJlIGZpeGVkIGluIHRoZSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbjogeW91 CmFyZSBzdXBwb3NlZCB0byBiZSBhYmxlIHRvIGdyYWIgdGhlIHNhbWUgcHJvdG9jb2wgZnJvbSBk aWZmZXJlbnQKZHJpdmVycyB3aXRob3V0IGFueSBpc3N1ZS4KCkkgYWdyZWUgdGhhdCB5b3UgaGF2 ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBzaGFyZSB0aGUgc2FtZSBwaW5zIGFjcm9zcyAyCmRpZmZl cmVudCBkcml2ZXJzIHVzaW5nIHRoZSBzYW1lIFBpbmN0cmwgZHJpdmVyLCBidXQgZXZlbiBpZiBi b3RoIGRyaXZlcgphcmUgY29tcGlsZWQgaW4sIG5vdGhpbmcgaXMgcmVhbGx5IGhhcHBlbmluZyB1 bnRpbCB0aGUgcmVsYXRlZCBEVApiaW5kaW5nIGFyZSBwYXJzZWQsIGFuZCBzbyB1bmxlc3MgeW91 IG1pc21hdGNoIHlvdXIgRFQgYW5kIGFzc2lnbiBzYW1lCnBpbnMgdG8gYm90aCB0aGUgR2VuZXJp YyBTQ01JIFBpbmN0cmwgYW5kIHRvIHRoZSBJTVggU0NNSSBQaW5jdHJsIEkgZG9udApzZWUgaG93 IHRoZXkgY2FuIGludGVyZmVyZS4gWW91IGNvdWxkIGluZGVlZCwgaGF2ZSBhIHNldCBvZiBwaW5z IG1hbmFnZWQKYnkgeW91ciBjdXN0b20gSU1YIGRyaXZlciBhbmQgb25lIGRpc3RpbmN0IG90aGVy IHNldCBvZiBwaW5zIGhhbmRsZWQgYnkKdGhlIFNDTUkgR2VuZXJpYyBkcml2ZXIgYnkgT2xla3Np aSwgYm90aCBtYWdpY2FsbHkgaGFuZGxlZCBieSB0aGUgc2FtZQpTQ01JIFNlcnZlciBiYWNrZW5k IDpQICEKCkJVVCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIHlvdSBjb3VsZCBhbnl3YXkgZm9yY2Ug YSBjb25mbGljdCBpbiBLY29uZmlnCnRvIG11dHVhbGx5IGV4Y2x1ZGUgb25lIGRyaXZlciB3aGVu IHRoZSBvdGhlciBpcyBidWlsdCBhbmQgdmljZS12ZXJzYS4KCkFtIEkgbWlzc2luZyBzb21ldGhp bmcgPyBXaHkgd291bGQgeW91IG5lZWQgYSBuZXcgdmVuZG9yIElEIHRvIGRlZmluZSBhCm5ldyBw cm90b2NvbCB3aXRob3V0IG5vdCByZWFsbHkgaGF2aW5nIGFueSBuZXcgcHJvdG9jb2wgPwoKVGhh bmtzLApDcmlzdGlhbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=