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 31D7FECAAD8 for ; Wed, 14 Sep 2022 13:15:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229912AbiINNPc (ORCPT ); Wed, 14 Sep 2022 09:15:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229735AbiINNPW (ORCPT ); Wed, 14 Sep 2022 09:15:22 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 663EF558C2; Wed, 14 Sep 2022 06:15:17 -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 38B2261D05; Wed, 14 Sep 2022 13:15:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66B99C433D7; Wed, 14 Sep 2022 13:15:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1663161316; bh=LC/yaD2w8sEiDYhcM6gqXvtnA5PdZMjHegWYyYGmmwY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=ojozldpLrFaLrBJaXV3hDNPauxhrZSeQtHYIWs+cWinfMJk8fxnVe3ESfAHk6Eu7p elAYJ5vyc5+OQzwdG4k0HGURSPYvJ7pquvUT9LRbUHUHhTj3MwwdUYjE+f/5MdyYIf dPJZpp+1ULEcgj8VUJXu+D1oIBEGeqeQbCswr1zmepnKvEyTRS+NrpcHXGdrZhaIhs k/7YrI9jrKrSmLICCPumwcJj1ksY9KgPweiaJ/XWm+burfnHM3xvZ8VFNuV2ORvHvm Xbp1XrR41xJDSqklg0Tv+bEPTOHvvga4dTHFsy+ve0SQbLi775aFhZ2nz0OpP1WLGT M5buLuMiBS9jA== Message-ID: Date: Wed, 14 Sep 2022 16:15:11 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v2 6/6] soc: ti: pruss: Add helper functions to get/set PRUSS_CFG_GPMUX Content-Language: en-US To: Romain Naour , linux-kernel@vger.kernel.org, Md Danish Anwar Cc: bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, krzysztof.kozlowski+dt@linaro.org, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, nm@ti.com, ssantosh@kernel.org, s-anna@ti.com, linux-arm-kernel@lists.infradead.org, grygorii.strashko@ti.com, vigneshr@ti.com, kishon@ti.com References: <20220418123004.9332-1-p-mohan@ti.com> <20220418123004.9332-7-p-mohan@ti.com> <94b57cbc-b865-e0b4-0d52-3da72f2dd026@smile.fr> From: Roger Quadros In-Reply-To: <94b57cbc-b865-e0b4-0d52-3da72f2dd026@smile.fr> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org Hello Romain, On 12/09/2022 17:20, Romain Naour wrote: > +Danish > > Hi Danish, > > (Removed Puranjay (as he is no longer with TI) and adding Danish.) > > Le 18/04/2022 à 14:30, Puranjay Mohan a écrit : >> From: Tero Kristo >> >> Add two new helper functions pruss_cfg_get_gpmux() & pruss_cfg_set_gpmux() >> to get and set the GP MUX mode for programming the PRUSS internal wrapper >> mux functionality as needed by usecases. > > Actually I'm curious about how the GP MUX mode are supposed to work in some > cases. The register mapping in the AM57xx TRM seems confusing. > > See the "PRU-ICSS I/O Interface" part about the "PRU-ICSS Internal Wrapper > Multiplexing" [1]. > > The commit "ARM: dts: am57xx-idk: Add prueth on ICSS" [2] (only in the > TI kernel tree) adds pruss1 and pruss2 for the am571x-idk board. > > But this commit doesn't really explain the ti,pruss-gp-mux-sel setting > from pruss1_eth and pruss2_eth: > > /* Dual mac ethernet application node on icss1 */ > pruss1_eth { > status = "okay"; > compatible = "ti,am57-prueth"; > > ti,pruss-gp-mux-sel = <0>, /* GP, default */ > <4>; /* MII2, needed for PRUSS1_MII1 */ > } > > &pruss2_eth { > ti,pruss-gp-mux-sel = <4>, /* MII2, needed for PRUSS1_MII0 */ > <4>; /* MII2, needed for PRUSS1_MII1 */ > }; > > At the first look, the two comments in pruss2_eth node about PRUSS1_MIIx seems > dubious. Indeed, it would means that the PRUSS2 setting (ti,pruss-gp-mux-sel) is > required to makes PRUSS1 work. Yes, if I remember right this is only applicable to AM571 Soc which had an overloaded pinmuxing design and it resulted in this kind of weird constraint. i.e. gp-mux-sel of PRUSS2 needs to be set to get PRUSS1 MII to work. > > In my use case, only the pruss1 is expected to be used with the prueth driver. > > Actually, the prueth on PRUSS1 partially works with only pruss1_eth's gp-mux > initialized: > > pruss1_eth { > status = "okay"; > compatible = "ti,am57-prueth"; > > ti,pruss-gp-mux-sel = <0>, /* GP, default */ > <4>; /* MII2, needed for PRUSS1_MII1 */ > } > > pruss2_eth { > status = "disabled"; > } > > (Tests done with the ti-linux-kernel 5.10.y) > > On wireshark I noticed ethernet frames (ping) sent from the board but the reply > from the remote PC is never received on the board. > > It really seems we need pruss2_eth's gp-mux initialized. > The problem here is that I don't want to enable PRUSS2 just to > configure pruss2_eth's gp-mux for the sake of pruss1. > > I had to write manually (using devmem2) the "good" value (0x10002003) in > PRUSS2_CFG0 and PRUSS2_CFG1 to configure entirely the PRUSS1_MII1. > > I'm not sure how the driver should handle this register mapping properly. > > [1] https://www.ti.com/lit/ds/symlink/am5749.pdf > > [2] > https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/?h=linux-5.10.y&id=2a3b089f5697fe2f9a9875b2fba1bef88d196a53 > > Best regards, > Romain cheers, -roger > >> >> Co-developed-by: Suman Anna >> Signed-off-by: Suman Anna >> Signed-off-by: Tero Kristo >> Co-developed-by: Grzegorz Jaszczyk >> Signed-off-by: Grzegorz Jaszczyk >> Signed-off-by: Puranjay Mohan >> --- >> include/linux/pruss_driver.h | 44 ++++++++++++++++++++++++++++++++++++ >> 1 file changed, 44 insertions(+) >> >> diff --git a/include/linux/pruss_driver.h b/include/linux/pruss_driver.h >> index e2d5477225c6..3312281ef4c1 100644 >> --- a/include/linux/pruss_driver.h >> +++ b/include/linux/pruss_driver.h >> @@ -35,4 +35,48 @@ struct pruss { >> struct clk *iep_clk_mux; >> }; >> >> +/** >> + * pruss_cfg_get_gpmux() - get the current GPMUX value for a PRU device >> + * @pruss: pruss instance >> + * @pru_id: PRU identifier (0-1) >> + * @mux: pointer to store the current mux value into >> + * >> + * Return: 0 on success, or an error code otherwise >> + */ >> +static inline int pruss_cfg_get_gpmux(struct pruss *pruss, >> + enum pruss_pru_id pru_id, u8 *mux) >> +{ >> + int ret = 0; >> + u32 val; >> + >> + if (pru_id < 0 || pru_id >= PRUSS_NUM_PRUS) >> + return -EINVAL; >> + >> + ret = pruss_cfg_read(pruss, PRUSS_CFG_GPCFG(pru_id), &val); >> + if (!ret) >> + *mux = (u8)((val & PRUSS_GPCFG_PRU_MUX_SEL_MASK) >> >> + PRUSS_GPCFG_PRU_MUX_SEL_SHIFT); >> + return ret; >> +} >> + >> +/** >> + * pruss_cfg_set_gpmux() - set the GPMUX value for a PRU device >> + * @pruss: pruss instance >> + * @pru_id: PRU identifier (0-1) >> + * @mux: new mux value for PRU >> + * >> + * Return: 0 on success, or an error code otherwise >> + */ >> +static inline int pruss_cfg_set_gpmux(struct pruss *pruss, >> + enum pruss_pru_id pru_id, u8 mux) >> +{ >> + if (mux >= PRUSS_GP_MUX_SEL_MAX || >> + pru_id < 0 || pru_id >= PRUSS_NUM_PRUS) >> + return -EINVAL; >> + >> + return pruss_cfg_update(pruss, PRUSS_CFG_GPCFG(pru_id), >> + PRUSS_GPCFG_PRU_MUX_SEL_MASK, >> + (u32)mux << PRUSS_GPCFG_PRU_MUX_SEL_SHIFT); >> +} >> + >> #endif /* _PRUSS_DRIVER_H_ */ > 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 38933ECAAD3 for ; Wed, 14 Sep 2022 13:16:37 +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:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=viQSLuVskfLIPpwfzBTtZOXDjsM2kSJT/O8/AKwA/gw=; b=SAQk6Q8cEV7SEc qcWAVhYWBy64KQebzwskpNM2R78ju1PX5skdlWp4UzTV1pJLiaZRtPvrbZxtdttwwyrL4eAH9rren GELiReOIaf9EXKpRuvBw5BLgduwrJg0w3obrcmFSfj0rYIyLOMiIK2UelzIE7N7p7yxGvV4vguFPk LFwXUa5Vo7gwULt3yrSq0gmg7muR9CqAJkFSu2ZtP6h4Si5tWVaM1cFMR1RlX/RzYTL7gJULWNlZf 97QzYfZPr77nb0viVV/CCeIA7eaXt1YaitZdeKIfv/OP3sWZ14272MjM/AgikZD4a2AcFXicVXxgw vGhGNZZyb9b444y6ucKQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oYSEg-000bFg-U6; Wed, 14 Sep 2022 13:15:27 +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 1oYSEa-000b8E-2v for linux-arm-kernel@lists.infradead.org; Wed, 14 Sep 2022 13:15:22 +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 C691861D52; Wed, 14 Sep 2022 13:15:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66B99C433D7; Wed, 14 Sep 2022 13:15:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1663161316; bh=LC/yaD2w8sEiDYhcM6gqXvtnA5PdZMjHegWYyYGmmwY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=ojozldpLrFaLrBJaXV3hDNPauxhrZSeQtHYIWs+cWinfMJk8fxnVe3ESfAHk6Eu7p elAYJ5vyc5+OQzwdG4k0HGURSPYvJ7pquvUT9LRbUHUHhTj3MwwdUYjE+f/5MdyYIf dPJZpp+1ULEcgj8VUJXu+D1oIBEGeqeQbCswr1zmepnKvEyTRS+NrpcHXGdrZhaIhs k/7YrI9jrKrSmLICCPumwcJj1ksY9KgPweiaJ/XWm+burfnHM3xvZ8VFNuV2ORvHvm Xbp1XrR41xJDSqklg0Tv+bEPTOHvvga4dTHFsy+ve0SQbLi775aFhZ2nz0OpP1WLGT M5buLuMiBS9jA== Message-ID: Date: Wed, 14 Sep 2022 16:15:11 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v2 6/6] soc: ti: pruss: Add helper functions to get/set PRUSS_CFG_GPMUX Content-Language: en-US To: Romain Naour , linux-kernel@vger.kernel.org, Md Danish Anwar Cc: bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, krzysztof.kozlowski+dt@linaro.org, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, nm@ti.com, ssantosh@kernel.org, s-anna@ti.com, linux-arm-kernel@lists.infradead.org, grygorii.strashko@ti.com, vigneshr@ti.com, kishon@ti.com References: <20220418123004.9332-1-p-mohan@ti.com> <20220418123004.9332-7-p-mohan@ti.com> <94b57cbc-b865-e0b4-0d52-3da72f2dd026@smile.fr> From: Roger Quadros In-Reply-To: <94b57cbc-b865-e0b4-0d52-3da72f2dd026@smile.fr> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220914_061520_229154_D1D492D7 X-CRM114-Status: GOOD ( 35.66 ) 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 SGVsbG8gUm9tYWluLAoKT24gMTIvMDkvMjAyMiAxNzoyMCwgUm9tYWluIE5hb3VyIHdyb3RlOgo+ ICtEYW5pc2gKPiAKPiBIaSBEYW5pc2gsCj4gCj4gKFJlbW92ZWQgUHVyYW5qYXkgKGFzIGhlIGlz IG5vIGxvbmdlciB3aXRoIFRJKSBhbmQgYWRkaW5nIERhbmlzaC4pCj4gCj4gTGUgMTgvMDQvMjAy MiDDoCAxNDozMCwgUHVyYW5qYXkgTW9oYW4gYSDDqWNyaXTCoDoKPj4gRnJvbTogVGVybyBLcmlz dG8gPHQta3Jpc3RvQHRpLmNvbT4KPj4KPj4gQWRkIHR3byBuZXcgaGVscGVyIGZ1bmN0aW9ucyBw cnVzc19jZmdfZ2V0X2dwbXV4KCkgJiBwcnVzc19jZmdfc2V0X2dwbXV4KCkKPj4gdG8gZ2V0IGFu ZCBzZXQgdGhlIEdQIE1VWCBtb2RlIGZvciBwcm9ncmFtbWluZyB0aGUgUFJVU1MgaW50ZXJuYWwg d3JhcHBlcgo+PiBtdXggZnVuY3Rpb25hbGl0eSBhcyBuZWVkZWQgYnkgdXNlY2FzZXMuCj4gCj4g QWN0dWFsbHkgSSdtIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBHUCBNVVggbW9kZSBhcmUgc3VwcG9z ZWQgdG8gd29yayBpbiBzb21lCj4gY2FzZXMuIFRoZSByZWdpc3RlciBtYXBwaW5nIGluIHRoZSBB TTU3eHggVFJNIHNlZW1zIGNvbmZ1c2luZy4KPiAKPiBTZWUgdGhlICJQUlUtSUNTUyBJL08gSW50 ZXJmYWNlIiBwYXJ0IGFib3V0IHRoZSAiUFJVLUlDU1MgSW50ZXJuYWwgV3JhcHBlcgo+IE11bHRp cGxleGluZyIgWzFdLgo+IAo+IFRoZSBjb21taXQgIkFSTTogZHRzOiBhbTU3eHgtaWRrOiBBZGQg cHJ1ZXRoIG9uIElDU1MiIFsyXSAob25seSBpbiB0aGUKPiBUSSBrZXJuZWwgdHJlZSkgYWRkcyBw cnVzczEgYW5kIHBydXNzMiBmb3IgdGhlIGFtNTcxeC1pZGsgYm9hcmQuCj4gCj4gQnV0IHRoaXMg Y29tbWl0IGRvZXNuJ3QgcmVhbGx5IGV4cGxhaW4gdGhlIHRpLHBydXNzLWdwLW11eC1zZWwgc2V0 dGluZwo+IGZyb20gcHJ1c3MxX2V0aCBhbmQgcHJ1c3MyX2V0aDoKPiAKPiAgICAgLyogRHVhbCBt YWMgZXRoZXJuZXQgYXBwbGljYXRpb24gbm9kZSBvbiBpY3NzMSAqLwo+ICAgICBwcnVzczFfZXRo IHsKPiAgICAgCXN0YXR1cyA9ICJva2F5IjsKPiAgICAgCWNvbXBhdGlibGUgPSAidGksYW01Ny1w cnVldGgiOwo+IAo+ICAgICAJdGkscHJ1c3MtZ3AtbXV4LXNlbCA9IDwwPiwJLyogR1AsIGRlZmF1 bHQgKi8KPiAgICAgCQkJICAgICAgPDQ+OwkvKiBNSUkyLCBuZWVkZWQgZm9yIFBSVVNTMV9NSUkx ICovCj4gICAgIH0KPiAKPiAgICAgJnBydXNzMl9ldGggewo+ICAgICAJdGkscHJ1c3MtZ3AtbXV4 LXNlbCA9IDw0PiwJLyogTUlJMiwgbmVlZGVkIGZvciBQUlVTUzFfTUlJMCAqLwo+ICAgICAJCQkg ICAgICA8ND47CS8qIE1JSTIsIG5lZWRlZCBmb3IgUFJVU1MxX01JSTEgKi8KPiAgICAgfTsKPiAK PiBBdCB0aGUgZmlyc3QgbG9vaywgdGhlIHR3byBjb21tZW50cyBpbiBwcnVzczJfZXRoIG5vZGUg YWJvdXQgUFJVU1MxX01JSXggc2VlbXMKPiBkdWJpb3VzLiBJbmRlZWQsIGl0IHdvdWxkIG1lYW5z IHRoYXQgdGhlIFBSVVNTMiBzZXR0aW5nICh0aSxwcnVzcy1ncC1tdXgtc2VsKSBpcwo+IHJlcXVp cmVkIHRvIG1ha2VzIFBSVVNTMSB3b3JrLgoKWWVzLCBpZiBJIHJlbWVtYmVyIHJpZ2h0IHRoaXMg aXMgb25seSBhcHBsaWNhYmxlIHRvIEFNNTcxIFNvYyB3aGljaCBoYWQKYW4gb3ZlcmxvYWRlZCBw aW5tdXhpbmcgZGVzaWduIGFuZCBpdCByZXN1bHRlZCBpbiB0aGlzIGtpbmQgb2Ygd2VpcmQgY29u c3RyYWludC4KaS5lLiBncC1tdXgtc2VsIG9mIFBSVVNTMiBuZWVkcyB0byBiZSBzZXQgdG8gZ2V0 IFBSVVNTMSBNSUkgdG8gd29yay4KCj4gCj4gSW4gbXkgdXNlIGNhc2UsIG9ubHkgdGhlIHBydXNz MSBpcyBleHBlY3RlZCB0byBiZSB1c2VkIHdpdGggdGhlIHBydWV0aCBkcml2ZXIuCj4gCj4gQWN0 dWFsbHksIHRoZSBwcnVldGggb24gUFJVU1MxIHBhcnRpYWxseSB3b3JrcyB3aXRoIG9ubHkgcHJ1 c3MxX2V0aCdzIGdwLW11eAo+IGluaXRpYWxpemVkOgo+IAo+ICAgICBwcnVzczFfZXRoIHsKPiAg ICAgICAgICAgICBzdGF0dXMgPSAib2theSI7Cj4gICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJ0 aSxhbTU3LXBydWV0aCI7Cj4gCj4gICAgICAgICAgICAgdGkscHJ1c3MtZ3AtbXV4LXNlbCA9IDww PiwgICAgICAvKiBHUCwgZGVmYXVsdCAqLwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8ND47ICAgICAgLyogTUlJMiwgbmVlZGVkIGZvciBQUlVTUzFfTUlJMSAqLwo+ICAgICB9 Cj4gCj4gICAgIHBydXNzMl9ldGggewo+ICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7 Cj4gICAgIH0KPiAKPiAoVGVzdHMgZG9uZSB3aXRoIHRoZSB0aS1saW51eC1rZXJuZWwgNS4xMC55 KQo+IAo+IE9uIHdpcmVzaGFyayBJIG5vdGljZWQgZXRoZXJuZXQgZnJhbWVzIChwaW5nKSBzZW50 IGZyb20gdGhlIGJvYXJkIGJ1dCB0aGUgcmVwbHkKPiBmcm9tIHRoZSByZW1vdGUgUEMgaXMgbmV2 ZXIgcmVjZWl2ZWQgb24gdGhlIGJvYXJkLgo+IAo+IEl0IHJlYWxseSBzZWVtcyB3ZSBuZWVkIHBy dXNzMl9ldGgncyBncC1tdXggaW5pdGlhbGl6ZWQuCj4gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0 IEkgZG9uJ3Qgd2FudCB0byBlbmFibGUgUFJVU1MyIGp1c3QgdG8KPiBjb25maWd1cmUgcHJ1c3My X2V0aCdzIGdwLW11eCBmb3IgdGhlIHNha2Ugb2YgcHJ1c3MxLgo+IAo+IEkgaGFkIHRvIHdyaXRl IG1hbnVhbGx5ICh1c2luZyBkZXZtZW0yKSB0aGUgImdvb2QiIHZhbHVlICgweDEwMDAyMDAzKSBp bgo+IFBSVVNTMl9DRkcwIGFuZCBQUlVTUzJfQ0ZHMSB0byBjb25maWd1cmUgZW50aXJlbHkgdGhl IFBSVVNTMV9NSUkxLgo+IAo+IEknbSBub3Qgc3VyZSBob3cgdGhlIGRyaXZlciBzaG91bGQgaGFu ZGxlIHRoaXMgcmVnaXN0ZXIgbWFwcGluZyBwcm9wZXJseS4KPiAKPiBbMV0gaHR0cHM6Ly93d3cu dGkuY29tL2xpdC9kcy9zeW1saW5rL2FtNTc0OS5wZGYKPiAKPiBbMl0KPiBodHRwczovL2dpdC50 aS5jb20vY2dpdC90aS1saW51eC1rZXJuZWwvdGktbGludXgta2VybmVsL2NvbW1pdC8/aD1saW51 eC01LjEwLnkmaWQ9MmEzYjA4OWY1Njk3ZmUyZjlhOTg3NWIyZmJhMWJlZjg4ZDE5NmE1Mwo+IAo+ IEJlc3QgcmVnYXJkcywKPiBSb21haW4KCmNoZWVycywKLXJvZ2VyCgo+IAo+Pgo+PiBDby1kZXZl bG9wZWQtYnk6IFN1bWFuIEFubmEgPHMtYW5uYUB0aS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFN1 bWFuIEFubmEgPHMtYW5uYUB0aS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFRlcm8gS3Jpc3RvIDx0 LWtyaXN0b0B0aS5jb20+Cj4+IENvLWRldmVsb3BlZC1ieTogR3J6ZWdvcnogSmFzemN6eWsgPGdy emVnb3J6Lmphc3pjenlrQGxpbmFyby5vcmc+Cj4+IFNpZ25lZC1vZmYtYnk6IEdyemVnb3J6IEph c3pjenlrIDxncnplZ29yei5qYXN6Y3p5a0BsaW5hcm8ub3JnPgo+PiBTaWduZWQtb2ZmLWJ5OiBQ dXJhbmpheSBNb2hhbiA8cC1tb2hhbkB0aS5jb20+Cj4+IC0tLQo+PiAgaW5jbHVkZS9saW51eC9w cnVzc19kcml2ZXIuaCB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ PiAgMSBmaWxlIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvcHJ1c3NfZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3BydXNzX2RyaXZlci5o Cj4+IGluZGV4IGUyZDU0NzcyMjVjNi4uMzMxMjI4MWVmNGMxIDEwMDY0NAo+PiAtLS0gYS9pbmNs dWRlL2xpbnV4L3BydXNzX2RyaXZlci5oCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvcHJ1c3NfZHJp dmVyLmgKPj4gQEAgLTM1LDQgKzM1LDQ4IEBAIHN0cnVjdCBwcnVzcyB7Cj4+ICAJc3RydWN0IGNs ayAqaWVwX2Nsa19tdXg7Cj4+ICB9Owo+PiAgCj4+ICsvKioKPj4gKyAqIHBydXNzX2NmZ19nZXRf Z3BtdXgoKSAtIGdldCB0aGUgY3VycmVudCBHUE1VWCB2YWx1ZSBmb3IgYSBQUlUgZGV2aWNlCj4+ ICsgKiBAcHJ1c3M6IHBydXNzIGluc3RhbmNlCj4+ICsgKiBAcHJ1X2lkOiBQUlUgaWRlbnRpZmll ciAoMC0xKQo+PiArICogQG11eDogcG9pbnRlciB0byBzdG9yZSB0aGUgY3VycmVudCBtdXggdmFs dWUgaW50bwo+PiArICoKPj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBj b2RlIG90aGVyd2lzZQo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGludCBwcnVzc19jZmdfZ2V0 X2dwbXV4KHN0cnVjdCBwcnVzcyAqcHJ1c3MsCj4+ICsJCQkJICAgICAgZW51bSBwcnVzc19wcnVf aWQgcHJ1X2lkLCB1OCAqbXV4KQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCXUzMiB2YWw7 Cj4+ICsKPj4gKwlpZiAocHJ1X2lkIDwgMCB8fCBwcnVfaWQgPj0gUFJVU1NfTlVNX1BSVVMpCj4+ ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcmV0ID0gcHJ1c3NfY2ZnX3JlYWQocHJ1c3Ms IFBSVVNTX0NGR19HUENGRyhwcnVfaWQpLCAmdmFsKTsKPj4gKwlpZiAoIXJldCkKPj4gKwkJKm11 eCA9ICh1OCkoKHZhbCAmIFBSVVNTX0dQQ0ZHX1BSVV9NVVhfU0VMX01BU0spID4+Cj4+ICsJCQkg ICAgUFJVU1NfR1BDRkdfUFJVX01VWF9TRUxfU0hJRlQpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gKy8qKgo+PiArICogcHJ1c3NfY2ZnX3NldF9ncG11eCgpIC0gc2V0IHRoZSBHUE1V WCB2YWx1ZSBmb3IgYSBQUlUgZGV2aWNlCj4+ICsgKiBAcHJ1c3M6IHBydXNzIGluc3RhbmNlCj4+ ICsgKiBAcHJ1X2lkOiBQUlUgaWRlbnRpZmllciAoMC0xKQo+PiArICogQG11eDogbmV3IG11eCB2 YWx1ZSBmb3IgUFJVCj4+ICsgKgo+PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVy cm9yIGNvZGUgb3RoZXJ3aXNlCj4+ICsgKi8KPj4gK3N0YXRpYyBpbmxpbmUgaW50IHBydXNzX2Nm Z19zZXRfZ3BtdXgoc3RydWN0IHBydXNzICpwcnVzcywKPj4gKwkJCQkgICAgICBlbnVtIHBydXNz X3BydV9pZCBwcnVfaWQsIHU4IG11eCkKPj4gK3sKPj4gKwlpZiAobXV4ID49IFBSVVNTX0dQX01V WF9TRUxfTUFYIHx8Cj4+ICsJICAgIHBydV9pZCA8IDAgfHwgcHJ1X2lkID49IFBSVVNTX05VTV9Q UlVTKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCXJldHVybiBwcnVzc19jZmdfdXBk YXRlKHBydXNzLCBQUlVTU19DRkdfR1BDRkcocHJ1X2lkKSwKPj4gKwkJCQlQUlVTU19HUENGR19Q UlVfTVVYX1NFTF9NQVNLLAo+PiArCQkJCSh1MzIpbXV4IDw8IFBSVVNTX0dQQ0ZHX1BSVV9NVVhf U0VMX1NISUZUKTsKPj4gK30KPj4gKwo+PiAgI2VuZGlmCS8qIF9QUlVTU19EUklWRVJfSF8gKi8K PiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK