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 85BEDC77B7A for ; Wed, 24 May 2023 12:43:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type: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=MDwTTTq9Z5T3KmFjLjOHbVttd0VmR7yaP3a+vTS/I6g=; b=F4OtdsgP2qIg3lpWkcutfwI2TK rSM/LhfnpHG2XoP/UExDNJvaLetPK343ehlh8xDwFRsNg5/yNb9r9GQa0wX+4+vIj92+REtkGd7/e c3JNcyvwNqOnr4w6gmJ5cTgbZkcUnly8LnPjnyTBJaRbMPA7OxlBiQs0LNqKz+2hScTJl4h1v8F0R x2O92SMK0+s7mkgtQpExkVeEoxcIUTn1BaACLMXUSgKMC2n6S8wfr2tR9Xl4BXGX9Vm3UdX98odKW lBuU9y5uLgu8KDyjNAq2234RIEMK14yIbsf0BwWok36YpIOCLLQHj/ARsqV17sqLg5njIHRy1aRrD uC2i36qg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q1npM-00DSjo-2H; Wed, 24 May 2023 12:42:52 +0000 Received: from pidgin.makrotopia.org ([185.142.180.65]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q1npJ-00DShi-0x; Wed, 24 May 2023 12:42:51 +0000 Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.96) (envelope-from ) id 1q1npD-0000Ql-0u; Wed, 24 May 2023 12:42:43 +0000 Date: Wed, 24 May 2023 13:42:30 +0100 From: Daniel Golle To: Jia-wei Chang =?utf-8?B?KOW8teS9s+WBiSk=?= Cc: "angelogioacchino.delregno@collabora.com" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "vincent@systemli.org" , "hsinyi@google.com" , "viresh.kumar@linaro.org" , Project_Global_Chrome_Upstream_Group , "linux-arm-kernel@lists.infradead.org" , "khilman@baylibre.com" , "matthias.bgg@gmail.com" , "rafael@kernel.org" , Rex-BC Chen =?utf-8?B?KOmZs+afj+i+sCk=?= , "error27@gmail.com" Subject: Re: [PATCH v2 4/4] cpufreq: mediatek: Raise proc and sram max voltage for MT7622/7623 Message-ID: References: <20230324101130.14053-1-jia-wei.chang@mediatek.com> <20230324101130.14053-5-jia-wei.chang@mediatek.com> <3054e2d9-7f77-a22a-293d-382f19494079@collabora.com> <4e5a8202f7446481def19e5926d1bfd6e6568dd7.camel@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4e5a8202f7446481def19e5926d1bfd6e6568dd7.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230524_054249_481954_8E6CDF13 X-CRM114-Status: GOOD ( 55.20 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Wed, May 24, 2023 at 08:43:31AM +0000, Jia-wei Chang (張佳偉) wrote: > On Wed, 2023-05-24 at 09:28 +0200, AngeloGioacchino Del Regno wrote: > > External email : Please do not click links or open attachments until > > you have verified the sender or the content. > > > > > > Il 23/05/23 19:37, Daniel Golle ha scritto: > > > On Tue, May 23, 2023 at 04:56:47PM +0200, AngeloGioacchino Del > > > Regno wrote: > > > > Il 22/05/23 20:03, Daniel Golle ha scritto: > > > > > Hi Jia-Wei, > > > > > Hi AngeloGioacchino, > > > > > > > > > > On Fri, Mar 24, 2023 at 06:11:30PM +0800, jia-wei.chang wrote: > > > > > > From: AngeloGioacchino Del Regno < > > > > > > angelogioacchino.delregno@collabora.com> > > > > > > > > > > > > During the addition of SRAM voltage tracking for CCI scaling, > > > > > > this > > > > > > driver got some voltage limits set for the vtrack algorithm: > > > > > > these > > > > > > were moved to platform data first, then enforced in a later > > > > > > commit > > > > > > 6a17b3876bc8 ("cpufreq: mediatek: Refine > > > > > > mtk_cpufreq_voltage_tracking()") > > > > > > using these as max values for the regulator_set_voltage() > > > > > > calls. > > > > > > > > > > > > In this case, the vsram/vproc constraints for MT7622 and > > > > > > MT7623 > > > > > > were supposed to be the same as MT2701 (and a number of other > > > > > > SoCs), > > > > > > but that turned out to be a mistake because the > > > > > > aforementioned two > > > > > > SoCs' maximum voltage for both VPROC and VPROC_SRAM is 1.36V. > > > > > > > > > > > > Fix that by adding new platform data for MT7622/7623 > > > > > > declaring the > > > > > > right {proc,sram}_max_volt parameter. > > > > > > > > > > > > Fixes: ead858bd128d ("cpufreq: mediatek: Move voltage limits > > > > > > to platform data") > > > > > > Fixes: 6a17b3876bc8 ("cpufreq: mediatek: Refine > > > > > > mtk_cpufreq_voltage_tracking()") > > > > > > Signed-off-by: AngeloGioacchino Del Regno < > > > > > > angelogioacchino.delregno@collabora.com> > > > > > > Signed-off-by: Jia-Wei Chang > > > > > > --- > > > > > > drivers/cpufreq/mediatek-cpufreq.c | 13 +++++++++++-- > > > > > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/drivers/cpufreq/mediatek-cpufreq.c > > > > > > b/drivers/cpufreq/mediatek-cpufreq.c > > > > > > index 764e4fbdd536..9a39a7ccfae9 100644 > > > > > > --- a/drivers/cpufreq/mediatek-cpufreq.c > > > > > > +++ b/drivers/cpufreq/mediatek-cpufreq.c > > > > > > @@ -693,6 +693,15 @@ static const struct > > > > > > mtk_cpufreq_platform_data mt2701_platform_data = { > > > > > > .ccifreq_supported = false, > > > > > > }; > > > > > > +static const struct mtk_cpufreq_platform_data > > > > > > mt7622_platform_data = { > > > > > > + .min_volt_shift = 100000, > > > > > > + .max_volt_shift = 200000, > > > > > > + .proc_max_volt = 1360000, > > > > > > + .sram_min_volt = 0, > > > > > > + .sram_max_volt = 1360000, > > > > > > > > > > This change breaks cpufreq (with ondemand scheduler) on my BPi > > > > > R64 > > > > > board (having MT7622AV SoC with MT6380N PMIC). > > > > > ... > > > > > [ 2.540091] cpufreq: __target_index: Failed to change cpu > > > > > frequency: -22 > > > > > [ 2.556985] cpu cpu0: cpu0: failed to scale up voltage! > > > > > ... > > > > > (repeating a lot, every time the highest operating point is > > > > > selected > > > > > by the cpufreq governor) > > > > > > > > > > The reason is that the MT6380N doesn't support 1360000uV on the > > > > > supply > > > > > outputs used for SRAM and processor. > > > > > > > > > > As for some reason cpufreq-mediatek tries to rise the SRAM > > > > > supply > > > > > voltage to the maximum for a short moment (probably a side- > > > > > effect of > > > > > the voltage tracking algorithm), this fails because the PMIC > > > > > only > > > > > supports up to 1350000uV. As the highest operating point is > > > > > anyway > > > > > using only 1310000uV the simple fix is setting 1350000uV as the > > > > > maximum > > > > > instead for both proc_max_volt and sram_max_volt. > > > > > > > > > > A similar situation applies also for BPi R2 (MT7623NI with > > > > > MT6323L > > > > > PMIC), here the maximum supported voltage of the PMIC which > > > > > also only > > > > > supports up to 1350000uV, and the SoC having its highest > > > > > operating > > > > > voltage defined at 1300000uV. > > > > > > > > > > If all agree with the simple fix I will post a patch for that. > > > > > > > > > > However, to me it feels fishy to begin with that the tracking > > > > > algorithm > > > > > tries to rise the voltage above the highest operating point > > > > > defined in > > > > > device tree, see here: > > > > > > > > > > 6a17b3876bc830 drivers/cpufreq/mediatek-cpufreq.c (Jia-Wei > > > > > Chang 2022-05-05 19:52:20 +0800 100) new_vsram > > > > > = clamp(new_vproc + soc_data->min_volt_shift, > > > > > 6a17b3876bc830 drivers/cpufreq/mediatek-cpufreq.c (Jia-Wei > > > > > Chang 2022-05-05 19:52:20 +0800 > > > > > 101) soc_data->sram_min_volt, soc_data- > > > > > >sram_max_volt); > > > > > > > > > > However, I did not investigate in depth the purpose of this > > > > > initial rise and can impossibly test my modifications to the > > > > > tracking algorithm on all supported SoCs. > > > > > > > > > > > > > Thanks for actually reporting that, I don't think that there's > > > > any > > > > valid reason why the algorithm should set a voltage higher than > > > > the > > > > maximum votage specified in the fastest OPP. > > > > > > > > Anyway - the logic for the platform data of this driver is to > > > > declare > > > > the maximum voltage that SoC model X supports, regardless of the > > > > actual > > > > board-specific OPPs, so that part is right; to solve this issue, > > > > I guess > > > > that the only way is for this driver to parse the OPPs during > > > > .probe() > > > > and then always use in the algorithm > > > > > > > > vproc_max = max(proc_max_volt, opp_vproc_max); > > > > vsram_max = max(sram_max_volt, vsram_vreg_max); > > Hi Daniel, Angelo Sir, > > Thanks for the issue report and suggestions. > > Is it possible to modify the value of proc_max_volt and sram_max_volt > to 1310000 in mt7622_platform_data as the highest voltage declared in > mt7622.dtsi and then give it a try? > > Sorry, I need someone help to check this on mt7622 since I don't have > mt7622 platform.. Unfortunately also setting proc_max_volt and sram_max_volt to 1310000 doesn't work: [ 1.983325] cpu cpu0: cpu0: failed to scale up voltage! [ 1.988621] cpufreq: __target_index: Failed to change cpu frequency: -22 ::repeating infinitely:: This is because in mt6380-regulator.c you can see static const unsigned int ldo_volt_table1[] = { 1400000, 1350000, 1300000, 1250000, 1200000, 1150000, 1100000, 1050000, }; So 1310000 is not among the supported voltages but mediatek-cpufreq.c will repeatedly call regulator_set_voltage(sram_reg, 1310000, 1310000); which will fail for obvious reasons. Using 1350000 for proc_max_volt and sram_max_volt like I have suggested as a simple work-around does work because 1350000 is among the supported voltages of the MT6380 regulator. On MT7623 the whole problem is anyway non-existent because there is no separate sram-supply, hence the tracking algorithm isn't used at all. > > Thanks. > > > > > > > You probably meant to write > > > vproc_max = min(proc_max_volt, opp_vproc_max); > > > vsram_max = min(sram_max_volt, vsram_vreg_max); > > > > > > right? > > > > > > > Apparently, some of my braincells was apparently taking a break. :-) > > > > Yes, I was meaning min(), not max() :-) > > > > Cheers! > > > > > > > > > > Jia-Wei, can you please handle this? > > > > > > > > Thanks, > > > > Angelo > > > > > > > > > > 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 C5EF0C77B73 for ; Wed, 24 May 2023 12:43:21 +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=Q5FxD7XVum1CM/z8prFh+GEmhCGmvoVufp7e0TWmkeA=; b=sv+iM2HB+WTymT MdJ1iaBElRcaxfmXt/F9m4vT4QkuVJRHeKeteCfNzYA08lasDtXWCDgAliutJehac4lb+bB5p+ByP ivYHLYBaolBSqSeUNhG4Yry2Lh/KWV853Zwxrgv5v308DWdZ7WLXs/DuOaR574y4Do1UN1c+bBZO4 gyum8sUMg8nCN+ZLcCRtFCqrxi9iwCnzQ6tW9IiiKqbGTM1lSyCjkF3W5Ek52naMq6adiYWjiD7ch 6gXY7XDNuDKtZb1d6l5U2HAb+ZiMrqkZF/fdSb2qZyShcrHzqIYlQTIHSnYw5tCsza5m9LmCiz1Kk kuq1l880ueaoTEbLfeNw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q1npN-00DSk0-0X; Wed, 24 May 2023 12:42:53 +0000 Received: from pidgin.makrotopia.org ([185.142.180.65]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q1npJ-00DShi-0x; Wed, 24 May 2023 12:42:51 +0000 Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.96) (envelope-from ) id 1q1npD-0000Ql-0u; Wed, 24 May 2023 12:42:43 +0000 Date: Wed, 24 May 2023 13:42:30 +0100 From: Daniel Golle To: Jia-wei Chang =?utf-8?B?KOW8teS9s+WBiSk=?= Cc: "angelogioacchino.delregno@collabora.com" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "vincent@systemli.org" , "hsinyi@google.com" , "viresh.kumar@linaro.org" , Project_Global_Chrome_Upstream_Group , "linux-arm-kernel@lists.infradead.org" , "khilman@baylibre.com" , "matthias.bgg@gmail.com" , "rafael@kernel.org" , Rex-BC Chen =?utf-8?B?KOmZs+afj+i+sCk=?= , "error27@gmail.com" Subject: Re: [PATCH v2 4/4] cpufreq: mediatek: Raise proc and sram max voltage for MT7622/7623 Message-ID: References: <20230324101130.14053-1-jia-wei.chang@mediatek.com> <20230324101130.14053-5-jia-wei.chang@mediatek.com> <3054e2d9-7f77-a22a-293d-382f19494079@collabora.com> <4e5a8202f7446481def19e5926d1bfd6e6568dd7.camel@mediatek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <4e5a8202f7446481def19e5926d1bfd6e6568dd7.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230524_054249_481954_8E6CDF13 X-CRM114-Status: GOOD ( 55.20 ) 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 T24gV2VkLCBNYXkgMjQsIDIwMjMgYXQgMDg6NDM6MzFBTSArMDAwMCwgSmlhLXdlaSBDaGFuZyAo 5by15L2z5YGJKSB3cm90ZToKPiBPbiBXZWQsIDIwMjMtMDUtMjQgYXQgMDk6MjggKzAyMDAsIEFu Z2Vsb0dpb2FjY2hpbm8gRGVsIFJlZ25vIHdyb3RlOgo+ID4gRXh0ZXJuYWwgZW1haWwgOiBQbGVh c2UgZG8gbm90IGNsaWNrIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW50aWwKPiA+IHlvdSBo YXZlIHZlcmlmaWVkIHRoZSBzZW5kZXIgb3IgdGhlIGNvbnRlbnQuCj4gPiAKPiA+IAo+ID4gSWwg MjMvMDUvMjMgMTk6MzcsIERhbmllbCBHb2xsZSBoYSBzY3JpdHRvOgo+ID4gPiBPbiBUdWUsIE1h eSAyMywgMjAyMyBhdCAwNDo1Njo0N1BNICswMjAwLCBBbmdlbG9HaW9hY2NoaW5vIERlbAo+ID4g PiBSZWdubyB3cm90ZToKPiA+ID4gPiBJbCAyMi8wNS8yMyAyMDowMywgRGFuaWVsIEdvbGxlIGhh IHNjcml0dG86Cj4gPiA+ID4gPiBIaSBKaWEtV2VpLAo+ID4gPiA+ID4gSGkgQW5nZWxvR2lvYWNj aGlubywKPiA+ID4gPiA+IAo+ID4gPiA+ID4gT24gRnJpLCBNYXIgMjQsIDIwMjMgYXQgMDY6MTE6 MzBQTSArMDgwMCwgamlhLXdlaS5jaGFuZyB3cm90ZToKPiA+ID4gPiA+ID4gRnJvbTogQW5nZWxv R2lvYWNjaGlubyBEZWwgUmVnbm8gPAo+ID4gPiA+ID4gPiBhbmdlbG9naW9hY2NoaW5vLmRlbHJl Z25vQGNvbGxhYm9yYS5jb20+Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBEdXJpbmcgdGhlIGFk ZGl0aW9uIG9mIFNSQU0gdm9sdGFnZSB0cmFja2luZyBmb3IgQ0NJIHNjYWxpbmcsCj4gPiA+ID4g PiA+IHRoaXMKPiA+ID4gPiA+ID4gZHJpdmVyIGdvdCBzb21lIHZvbHRhZ2UgbGltaXRzIHNldCBm b3IgdGhlIHZ0cmFjayBhbGdvcml0aG06Cj4gPiA+ID4gPiA+IHRoZXNlCj4gPiA+ID4gPiA+IHdl cmUgbW92ZWQgdG8gcGxhdGZvcm0gZGF0YSBmaXJzdCwgdGhlbiBlbmZvcmNlZCBpbiBhIGxhdGVy Cj4gPiA+ID4gPiA+IGNvbW1pdAo+ID4gPiA+ID4gPiA2YTE3YjM4NzZiYzggKCJjcHVmcmVxOiBt ZWRpYXRlazogUmVmaW5lCj4gPiA+ID4gPiA+IG10a19jcHVmcmVxX3ZvbHRhZ2VfdHJhY2tpbmco KSIpCj4gPiA+ID4gPiA+IHVzaW5nIHRoZXNlIGFzIG1heCB2YWx1ZXMgZm9yIHRoZSByZWd1bGF0 b3Jfc2V0X3ZvbHRhZ2UoKQo+ID4gPiA+ID4gPiBjYWxscy4KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IEluIHRoaXMgY2FzZSwgdGhlIHZzcmFtL3Zwcm9jIGNvbnN0cmFpbnRzIGZvciBNVDc2MjIg YW5kCj4gPiA+ID4gPiA+IE1UNzYyMwo+ID4gPiA+ID4gPiB3ZXJlIHN1cHBvc2VkIHRvIGJlIHRo ZSBzYW1lIGFzIE1UMjcwMSAoYW5kIGEgbnVtYmVyIG9mIG90aGVyCj4gPiA+ID4gPiA+IFNvQ3Mp LAo+ID4gPiA+ID4gPiBidXQgdGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbWlzdGFrZSBiZWNhdXNl IHRoZQo+ID4gPiA+ID4gPiBhZm9yZW1lbnRpb25lZCB0d28KPiA+ID4gPiA+ID4gU29DcycgbWF4 aW11bSB2b2x0YWdlIGZvciBib3RoIFZQUk9DIGFuZCBWUFJPQ19TUkFNIGlzIDEuMzZWLgo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gRml4IHRoYXQgYnkgYWRkaW5nIG5ldyBwbGF0Zm9ybSBkYXRh IGZvciBNVDc2MjIvNzYyMwo+ID4gPiA+ID4gPiBkZWNsYXJpbmcgdGhlCj4gPiA+ID4gPiA+IHJp Z2h0IHtwcm9jLHNyYW19X21heF92b2x0IHBhcmFtZXRlci4KPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IEZpeGVzOiBlYWQ4NThiZDEyOGQgKCJjcHVmcmVxOiBtZWRpYXRlazogTW92ZSB2b2x0YWdl IGxpbWl0cwo+ID4gPiA+ID4gPiB0byBwbGF0Zm9ybSBkYXRhIikKPiA+ID4gPiA+ID4gRml4ZXM6 IDZhMTdiMzg3NmJjOCAoImNwdWZyZXE6IG1lZGlhdGVrOiBSZWZpbmUKPiA+ID4gPiA+ID4gbXRr X2NwdWZyZXFfdm9sdGFnZV90cmFja2luZygpIikKPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTog QW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gPAo+ID4gPiA+ID4gPiBhbmdlbG9naW9hY2NoaW5v LmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+Cj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEppYS1X ZWkgQ2hhbmcgPGppYS13ZWkuY2hhbmdAbWVkaWF0ZWsuY29tPgo+ID4gPiA+ID4gPiAtLS0KPiA+ ID4gPiA+ID4gICAgZHJpdmVycy9jcHVmcmVxL21lZGlhdGVrLWNwdWZyZXEuYyB8IDEzICsrKysr KysrKysrLS0KPiA+ID4gPiA+ID4gICAgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9jcHVmcmVxL21lZGlhdGVrLWNwdWZyZXEuYwo+ID4gPiA+ID4gPiBiL2RyaXZlcnMvY3B1 ZnJlcS9tZWRpYXRlay1jcHVmcmVxLmMKPiA+ID4gPiA+ID4gaW5kZXggNzY0ZTRmYmRkNTM2Li45 YTM5YTdjY2ZhZTkgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9tZWRp YXRlay1jcHVmcmVxLmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9jcHVmcmVxL21lZGlhdGVr LWNwdWZyZXEuYwo+ID4gPiA+ID4gPiBAQCAtNjkzLDYgKzY5MywxNSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0Cj4gPiA+ID4gPiA+IG10a19jcHVmcmVxX3BsYXRmb3JtX2RhdGEgbXQyNzAxX3BsYXRm b3JtX2RhdGEgPSB7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgLmNjaWZyZXFfc3VwcG9ydGVkID0g ZmFsc2UsCj4gPiA+ID4gPiA+ICAgIH07Cj4gPiA+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19jcHVmcmVxX3BsYXRmb3JtX2RhdGEKPiA+ID4gPiA+ID4gbXQ3NjIyX3BsYXRmb3JtX2Rh dGEgPSB7Cj4gPiA+ID4gPiA+ICsgIC5taW5fdm9sdF9zaGlmdCA9IDEwMDAwMCwKPiA+ID4gPiA+ ID4gKyAgLm1heF92b2x0X3NoaWZ0ID0gMjAwMDAwLAo+ID4gPiA+ID4gPiArICAucHJvY19tYXhf dm9sdCA9IDEzNjAwMDAsCj4gPiA+ID4gPiA+ICsgIC5zcmFtX21pbl92b2x0ID0gMCwKPiA+ID4g PiA+ID4gKyAgLnNyYW1fbWF4X3ZvbHQgPSAxMzYwMDAwLAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBU aGlzIGNoYW5nZSBicmVha3MgY3B1ZnJlcSAod2l0aCBvbmRlbWFuZCBzY2hlZHVsZXIpIG9uIG15 IEJQaQo+ID4gPiA+ID4gUjY0Cj4gPiA+ID4gPiBib2FyZCAoaGF2aW5nIE1UNzYyMkFWIFNvQyB3 aXRoIE1UNjM4ME4gUE1JQykuCj4gPiA+ID4gPiAuLi4KPiA+ID4gPiA+IFsgICAgMi41NDAwOTFd IGNwdWZyZXE6IF9fdGFyZ2V0X2luZGV4OiBGYWlsZWQgdG8gY2hhbmdlIGNwdQo+ID4gPiA+ID4g ZnJlcXVlbmN5OiAtMjIKPiA+ID4gPiA+IFsgICAgMi41NTY5ODVdIGNwdSBjcHUwOiBjcHUwOiBm YWlsZWQgdG8gc2NhbGUgdXAgdm9sdGFnZSEKPiA+ID4gPiA+IC4uLgo+ID4gPiA+ID4gKHJlcGVh dGluZyBhIGxvdCwgZXZlcnkgdGltZSB0aGUgaGlnaGVzdCBvcGVyYXRpbmcgcG9pbnQgaXMKPiA+ ID4gPiA+IHNlbGVjdGVkCj4gPiA+ID4gPiBieSB0aGUgY3B1ZnJlcSBnb3Zlcm5vcikKPiA+ID4g PiA+IAo+ID4gPiA+ID4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSBNVDYzODBOIGRvZXNuJ3Qgc3Vw cG9ydCAxMzYwMDAwdVYgb24gdGhlCj4gPiA+ID4gPiBzdXBwbHkKPiA+ID4gPiA+IG91dHB1dHMg dXNlZCBmb3IgU1JBTSBhbmQgcHJvY2Vzc29yLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBcyBmb3Ig c29tZSByZWFzb24gY3B1ZnJlcS1tZWRpYXRlayB0cmllcyB0byByaXNlIHRoZSBTUkFNCj4gPiA+ ID4gPiBzdXBwbHkKPiA+ID4gPiA+IHZvbHRhZ2UgdG8gdGhlIG1heGltdW0gZm9yIGEgc2hvcnQg bW9tZW50IChwcm9iYWJseSBhIHNpZGUtCj4gPiA+ID4gPiBlZmZlY3Qgb2YKPiA+ID4gPiA+IHRo ZSB2b2x0YWdlIHRyYWNraW5nIGFsZ29yaXRobSksIHRoaXMgZmFpbHMgYmVjYXVzZSB0aGUgUE1J Qwo+ID4gPiA+ID4gb25seQo+ID4gPiA+ID4gc3VwcG9ydHMgdXAgdG8gMTM1MDAwMHVWLiBBcyB0 aGUgaGlnaGVzdCBvcGVyYXRpbmcgcG9pbnQgaXMKPiA+ID4gPiA+IGFueXdheQo+ID4gPiA+ID4g dXNpbmcgb25seSAxMzEwMDAwdVYgdGhlIHNpbXBsZSBmaXggaXMgc2V0dGluZyAxMzUwMDAwdVYg YXMgdGhlCj4gPiA+ID4gPiBtYXhpbXVtCj4gPiA+ID4gPiBpbnN0ZWFkIGZvciBib3RoIHByb2Nf bWF4X3ZvbHQgYW5kIHNyYW1fbWF4X3ZvbHQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEEgc2ltaWxh ciBzaXR1YXRpb24gYXBwbGllcyBhbHNvIGZvciBCUGkgUjIgKE1UNzYyM05JIHdpdGgKPiA+ID4g PiA+IE1UNjMyM0wKPiA+ID4gPiA+IFBNSUMpLCBoZXJlIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2 b2x0YWdlIG9mIHRoZSBQTUlDIHdoaWNoCj4gPiA+ID4gPiBhbHNvIG9ubHkKPiA+ID4gPiA+IHN1 cHBvcnRzIHVwIHRvIDEzNTAwMDB1ViwgYW5kIHRoZSBTb0MgaGF2aW5nIGl0cyBoaWdoZXN0Cj4g PiA+ID4gPiBvcGVyYXRpbmcKPiA+ID4gPiA+IHZvbHRhZ2UgZGVmaW5lZCBhdCAxMzAwMDAwdVYu Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IElmIGFsbCBhZ3JlZSB3aXRoIHRoZSBzaW1wbGUgZml4IEkg d2lsbCBwb3N0IGEgcGF0Y2ggZm9yIHRoYXQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhvd2V2ZXIs IHRvIG1lIGl0IGZlZWxzIGZpc2h5IHRvIGJlZ2luIHdpdGggdGhhdCB0aGUgdHJhY2tpbmcKPiA+ ID4gPiA+IGFsZ29yaXRobQo+ID4gPiA+ID4gdHJpZXMgdG8gcmlzZSB0aGUgdm9sdGFnZSBhYm92 ZSB0aGUgaGlnaGVzdCBvcGVyYXRpbmcgcG9pbnQKPiA+ID4gPiA+IGRlZmluZWQgaW4KPiA+ID4g PiA+IGRldmljZSB0cmVlLCBzZWUgaGVyZToKPiA+ID4gPiA+IAo+ID4gPiA+ID4gNmExN2IzODc2 YmM4MzAgZHJpdmVycy9jcHVmcmVxL21lZGlhdGVrLWNwdWZyZXEuYyAoSmlhLVdlaQo+ID4gPiA+ ID4gQ2hhbmcgICAgICAgICAgICAgIDIwMjItMDUtMDUgMTk6NTI6MjAgKzA4MDAgMTAwKSAgICBu ZXdfdnNyYW0KPiA+ID4gPiA+ID0gY2xhbXAobmV3X3Zwcm9jICsgc29jX2RhdGEtPm1pbl92b2x0 X3NoaWZ0LAo+ID4gPiA+ID4gNmExN2IzODc2YmM4MzAgZHJpdmVycy9jcHVmcmVxL21lZGlhdGVr LWNwdWZyZXEuYyAoSmlhLVdlaQo+ID4gPiA+ID4gQ2hhbmcgICAgICAgICAgICAgIDIwMjItMDUt MDUgMTk6NTI6MjAgKzA4MDAKPiA+ID4gPiA+IDEwMSkgICAgICAgICAgICAgICAgICAgICAgc29j X2RhdGEtPnNyYW1fbWluX3ZvbHQsIHNvY19kYXRhLQo+ID4gPiA+ID4gPnNyYW1fbWF4X3ZvbHQp Owo+ID4gPiA+ID4gCj4gPiA+ID4gPiBIb3dldmVyLCBJIGRpZCBub3QgaW52ZXN0aWdhdGUgaW4g ZGVwdGggdGhlIHB1cnBvc2Ugb2YgdGhpcwo+ID4gPiA+ID4gaW5pdGlhbCByaXNlIGFuZCBjYW4g aW1wb3NzaWJseSB0ZXN0IG15IG1vZGlmaWNhdGlvbnMgdG8gdGhlCj4gPiA+ID4gPiB0cmFja2lu ZyBhbGdvcml0aG0gb24gYWxsIHN1cHBvcnRlZCBTb0NzLgo+ID4gPiA+ID4gCj4gPiA+ID4gCj4g PiA+ID4gVGhhbmtzIGZvciBhY3R1YWxseSByZXBvcnRpbmcgdGhhdCwgSSBkb24ndCB0aGluayB0 aGF0IHRoZXJlJ3MKPiA+ID4gPiBhbnkKPiA+ID4gPiB2YWxpZCByZWFzb24gd2h5IHRoZSBhbGdv cml0aG0gc2hvdWxkIHNldCBhIHZvbHRhZ2UgaGlnaGVyIHRoYW4KPiA+ID4gPiB0aGUKPiA+ID4g PiBtYXhpbXVtIHZvdGFnZSBzcGVjaWZpZWQgaW4gdGhlIGZhc3Rlc3QgT1BQLgo+ID4gPiA+IAo+ ID4gPiA+IEFueXdheSAtIHRoZSBsb2dpYyBmb3IgdGhlIHBsYXRmb3JtIGRhdGEgb2YgdGhpcyBk cml2ZXIgaXMgdG8KPiA+ID4gPiBkZWNsYXJlCj4gPiA+ID4gdGhlIG1heGltdW0gdm9sdGFnZSB0 aGF0IFNvQyBtb2RlbCBYIHN1cHBvcnRzLCByZWdhcmRsZXNzIG9mIHRoZQo+ID4gPiA+IGFjdHVh bAo+ID4gPiA+IGJvYXJkLXNwZWNpZmljIE9QUHMsIHNvIHRoYXQgcGFydCBpcyByaWdodDsgdG8g c29sdmUgdGhpcyBpc3N1ZSwKPiA+ID4gPiBJIGd1ZXNzCj4gPiA+ID4gdGhhdCB0aGUgb25seSB3 YXkgaXMgZm9yIHRoaXMgZHJpdmVyIHRvIHBhcnNlIHRoZSBPUFBzIGR1cmluZwo+ID4gPiA+IC5w cm9iZSgpCj4gPiA+ID4gYW5kIHRoZW4gYWx3YXlzIHVzZSBpbiB0aGUgYWxnb3JpdGhtCj4gPiA+ ID4gCj4gPiA+ID4gICAgICB2cHJvY19tYXggPSBtYXgocHJvY19tYXhfdm9sdCwgb3BwX3Zwcm9j X21heCk7Cj4gPiA+ID4gICAgICB2c3JhbV9tYXggPSBtYXgoc3JhbV9tYXhfdm9sdCwgdnNyYW1f dnJlZ19tYXgpOwo+IAo+IEhpIERhbmllbCwgQW5nZWxvIFNpciwKPiAKPiBUaGFua3MgZm9yIHRo ZSBpc3N1ZSByZXBvcnQgYW5kIHN1Z2dlc3Rpb25zLgo+IAo+IElzIGl0IHBvc3NpYmxlIHRvIG1v ZGlmeSB0aGUgdmFsdWUgb2YgcHJvY19tYXhfdm9sdCBhbmQgc3JhbV9tYXhfdm9sdAo+IHRvIDEz MTAwMDAgaW4gbXQ3NjIyX3BsYXRmb3JtX2RhdGEgYXMgdGhlIGhpZ2hlc3Qgdm9sdGFnZSBkZWNs YXJlZCBpbgo+IG10NzYyMi5kdHNpIGFuZCB0aGVuIGdpdmUgaXQgYSB0cnk/Cj4gCj4gU29ycnks IEkgbmVlZCBzb21lb25lIGhlbHAgdG8gY2hlY2sgdGhpcyBvbiBtdDc2MjIgc2luY2UgSSBkb24n dCBoYXZlCj4gbXQ3NjIyIHBsYXRmb3JtLi4KClVuZm9ydHVuYXRlbHkgYWxzbyBzZXR0aW5nIHBy b2NfbWF4X3ZvbHQgYW5kIHNyYW1fbWF4X3ZvbHQgdG8gMTMxMDAwMApkb2Vzbid0IHdvcms6Clsg ICAgMS45ODMzMjVdIGNwdSBjcHUwOiBjcHUwOiBmYWlsZWQgdG8gc2NhbGUgdXAgdm9sdGFnZSEK WyAgICAxLjk4ODYyMV0gY3B1ZnJlcTogX190YXJnZXRfaW5kZXg6IEZhaWxlZCB0byBjaGFuZ2Ug Y3B1IGZyZXF1ZW5jeTogLTIyCjo6cmVwZWF0aW5nIGluZmluaXRlbHk6OgoKVGhpcyBpcyBiZWNh dXNlIGluIG10NjM4MC1yZWd1bGF0b3IuYyB5b3UgY2FuIHNlZQpzdGF0aWMgY29uc3QgdW5zaWdu ZWQgaW50IGxkb192b2x0X3RhYmxlMVtdID0gewogICAgICAgIDE0MDAwMDAsIDEzNTAwMDAsIDEz MDAwMDAsIDEyNTAwMDAsIDEyMDAwMDAsIDExNTAwMDAsIDExMDAwMDAsIDEwNTAwMDAsCn07CgpT byAxMzEwMDAwIGlzIG5vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIHZvbHRhZ2VzIGJ1dCBtZWRpYXRl ay1jcHVmcmVxLmMKd2lsbCByZXBlYXRlZGx5IGNhbGwKcmVndWxhdG9yX3NldF92b2x0YWdlKHNy YW1fcmVnLCAxMzEwMDAwLCAxMzEwMDAwKTsKd2hpY2ggd2lsbCBmYWlsIGZvciBvYnZpb3VzIHJl YXNvbnMuCgpVc2luZyAxMzUwMDAwIGZvciBwcm9jX21heF92b2x0IGFuZCBzcmFtX21heF92b2x0 IGxpa2UgSSBoYXZlIHN1Z2dlc3RlZAphcyBhIHNpbXBsZSB3b3JrLWFyb3VuZCBkb2VzIHdvcmsg YmVjYXVzZSAxMzUwMDAwIGlzIGFtb25nIHRoZSBzdXBwb3J0ZWQKdm9sdGFnZXMgb2YgdGhlIE1U NjM4MCByZWd1bGF0b3IuCgpPbiBNVDc2MjMgdGhlIHdob2xlIHByb2JsZW0gaXMgYW55d2F5IG5v bi1leGlzdGVudCBiZWNhdXNlIHRoZXJlIGlzIG5vCnNlcGFyYXRlIHNyYW0tc3VwcGx5LCBoZW5j ZSB0aGUgdHJhY2tpbmcgYWxnb3JpdGhtIGlzbid0IHVzZWQgYXQgYWxsLgoKPiAKPiBUaGFua3Mu Cj4gCj4gPiA+IAo+ID4gPiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gd3JpdGUKPiA+ID4gdnByb2Nf bWF4ID0gbWluKHByb2NfbWF4X3ZvbHQsIG9wcF92cHJvY19tYXgpOwo+ID4gPiB2c3JhbV9tYXgg PSBtaW4oc3JhbV9tYXhfdm9sdCwgdnNyYW1fdnJlZ19tYXgpOwo+ID4gPiAKPiA+ID4gcmlnaHQ/ Cj4gPiA+IAo+ID4gCj4gPiBBcHBhcmVudGx5LCBzb21lIG9mIG15IGJyYWluY2VsbHMgd2FzIGFw cGFyZW50bHkgdGFraW5nIGEgYnJlYWsuIDotKQo+ID4gCj4gPiBZZXMsIEkgd2FzIG1lYW5pbmcg bWluKCksIG5vdCBtYXgoKSA6LSkKPiA+IAo+ID4gQ2hlZXJzIQo+ID4gCj4gPiA+ID4gCj4gPiA+ ID4gSmlhLVdlaSwgY2FuIHlvdSBwbGVhc2UgaGFuZGxlIHRoaXM/Cj4gPiA+ID4gCj4gPiA+ID4g VGhhbmtzLAo+ID4gPiA+IEFuZ2Vsbwo+ID4gPiA+IAo+ID4gCj4gPiAKPiA+IAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBt YWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=