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 40D7EC43334 for ; Tue, 5 Jul 2022 18:07:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232732AbiGESHF (ORCPT ); Tue, 5 Jul 2022 14:07:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232868AbiGESHE (ORCPT ); Tue, 5 Jul 2022 14:07:04 -0400 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD1F51F2CB; Tue, 5 Jul 2022 11:07:02 -0700 (PDT) Received: by mail-ej1-x633.google.com with SMTP id d2so23064018ejy.1; Tue, 05 Jul 2022 11:07:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C3MBhx1ORlPHZ9G4+h8YaWQcZ6SFmshxeCeN90vs+Vg=; b=EvCJru21FJDLrFNyWj1mt6ib9bZnl2/sCGMrbEAyt2dFLQM9z6JYnPe83RNIeK60bV jI3YqKyUUy7/e43JZ9kE7tQvoBV0i4VJAswQjggNUtK2t9l7DwCFzBTt/BvZ3Hed7JbS 01WbxSx+AERck5U4pG3q+2Zh0FAryO1S//6DP9HRrWgEa8/wjs8DOM4aGwF+HZ0KfH/J T+vOc0MaW1I37t0/qaZLY3e2a6RgJDhOVqrxCiM1WzaPmaINtCRJyR8hiFDdGrmSHW0J 5pbPx2B2yFUrBwNoH1NOBYzhRJCaGYhKxXygvGXPMF+TRwwtoY7wt6c5iiLDOvbQl5tB 80Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C3MBhx1ORlPHZ9G4+h8YaWQcZ6SFmshxeCeN90vs+Vg=; b=tT23HSxY1nmTtC6pnOjShCRPiTkBDZfAmJ4M0RPrhUeTdxOKzKUf0ZUybE3xvjNGKp 3rUGupjJLFuDsabN9Z19p86JtTVYne8MIIx9OxO5AmgGOicywHXYgJdnCD3vJr/+m2Z8 9d0/esmhFrdFAtapZmdDvhJ3wu4wXFoH456FlJ7CZH/K1hvCXAT+jr2LYzWjXFztinNN 4LtJNovvVwR4cInUOC1K3fDJ5ybZeH4HmbEh/oJXnaCOYAvjS1+NKWsShXauR4sQ6NFN F/Gb5CpRNALFjp0dpMCNhjznkTSCYdalwEMSojQ4HxTA28gzbpE7RQa2lauKcbzesHso hu7g== X-Gm-Message-State: AJIora9/2PYiVi1LfQ3UsX9XcaMEvm0qY0/uCr8M1NqaK5duZmSmsM9Z B5Q3hTjljmgetDV5VuJbA/M= X-Google-Smtp-Source: AGRyM1uftWZ7uUb2RAX1JiED29UVN81QgJ+i9XK4890u80u5UWT4LYY7hJr9VUBrTSDO3BmPWgydmQ== X-Received: by 2002:a17:907:968f:b0:726:9f9b:ab0f with SMTP id hd15-20020a170907968f00b007269f9bab0fmr35971875ejc.237.1657044421330; Tue, 05 Jul 2022 11:07:01 -0700 (PDT) Received: from kista.localnet (213-161-3-76.dynamic.telemach.net. [213.161.3.76]) by smtp.gmail.com with ESMTPSA id n18-20020a05640204d200b00435a08a3557sm23880887edw.27.2022.07.05.11.07.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 11:07:00 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Roman Stratiienko Cc: Samuel Holland , =?ISO-8859-1?Q?Cl=E9ment_P=E9ron?= , Michael Turquette , sboyd@kernel.org, mripard@kernel.org, wens@csie.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: Re: [PATCH v3] clk: sunxi-ng: sun50i: h6: Modify GPU clock configuration to support DFS Date: Tue, 05 Jul 2022 20:06:59 +0200 Message-ID: <2562485.k3LOHGUjKi@kista> In-Reply-To: References: <20220705075226.359475-1-r.stratiienko@gmail.com> <5580615.DvuYhMxLoT@kista> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Dne torek, 05. julij 2022 ob 18:29:39 CEST je Roman Stratiienko napisal(a): > Hi Jernej, >=20 > =D0=B2=D1=82, 5 =D0=B8=D1=8E=D0=BB. 2022 =D0=B3. =D0=B2 19:07, Jernej =C5= =A0krabec : > > Hi Roman, > >=20 > > Dne torek, 05. julij 2022 ob 09:52:26 CEST je Roman Stratiienko=20 napisal(a): > > > Using simple bash script it was discovered that not all CCU registers > > >=20 > > > can be safely used for DFS, e.g.: > > > while true > > > do > > > =20 > > > devmem 0x3001030 4 0xb0003e02 > > > devmem 0x3001030 4 0xb0001e02 > > > =20 > > > done > > >=20 > > > Script above changes the GPU_PLL multiplier register value. While the > > > script is running, the user should interact with the user interface. > > >=20 > > > Using this method the following results were obtained: > > > | Register | Name | Bits | Values | Result | > > > | -- | -- | -- | -- | -- | > > > | 0x3001030 | GPU_PLL.MULT | 15..8 | 20-62 | OK | > > > | 0x3001030 | GPU_PLL.INDIV | 1 | 0-1 | OK | > > > | 0x3001030 | GPU_PLL.OUTDIV | 0 | 0-1 | FAIL | > > > | 0x3001670 | GPU_CLK.DIV | 3..0 | ANY | FAIL | > > >=20 > > > DVFS started to work seamlessly once dividers which caused the > > > glitches were set to fixed values. > > >=20 > > > Signed-off-by: Roman Stratiienko > > >=20 > > > --- > > >=20 > > > Changelog: > > >=20 > > > V2: > > > - Drop changes related to mux > > > - Drop frequency limiting > > > - Add unused dividers initialization > > >=20 > > > V3: > > > - Adjust comments > >=20 > > I don't see any comment fixed, at least not to "1", as we discussed. Di= d I > > miss anything? >=20 > I've added the "bits" word, so now it should sound correct. Technically it's correct, but this would be third form of comments for fixe= d=20 bits. Let's stick to the form which is most informative ("Force PLL_GPU out= put=20 divider to 1"). Ideally, comment would also point to gpu_clk comment for=20 reason why, like it's done for video PLL block already. >=20 > > Also, please add min and max. >=20 > What is the rationale for additional limits? If limits are specified in whatever form, they should be added. As I said=20 several times already, vendor code limits PLL frequency to 288 MHz minimum = and=20 lists maximum. As experienced a few times before with video PLLs, these are= =20 important, otherwise PLL is unstable. For example, OPP table in vendor DT h= as=20 two operating points lower than 288 MHz, which means it would either lock u= p=20 or be unstable. In such cases, vendor code actually sets GPU_CLK divider to= 2,=20 but we can skip them, because GPU_CLK divider will be hardcoded to 1 with t= his=20 patch. > CPU_PLL doesn't have these limits. I don't want to make them different. Why CPU_PLL? Why not video PLL? In any case, it doesn't matter if struct lo= oks=20 similar to some other or is unique. Only important thing is that struct=20 describes PLL as best as possible. >=20 > > I also consent to R-B, which you > > didn't include. >=20 > I was expecting an explicit 'review-by' line. Anyway I can add it and > resend v4 if it's necessary. If you at least add min and max limits, you can add following tag: Reviewed-by: Jernej Skrabec If you send it before Friday, it will be in 5.20. Best regards, Jernej >=20 > Regards, > Roman >=20 > > Did you resend v2 instead of v3? > >=20 > > Best regards, > > Jernej > >=20 > > > --- > > >=20 > > > drivers/clk/sunxi-ng/ccu-sun50i-h6.c | 16 +++++++++++++--- > > > 1 file changed, 13 insertions(+), 3 deletions(-) > > >=20 > > > diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > > b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c index > > > 2ddf0a0da526f..068d1a6b2ebf3 > > > 100644 > > > --- a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > > +++ b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > > @@ -95,13 +95,13 @@ static struct ccu_nkmp pll_periph1_clk =3D { > > >=20 > > > }, > > > =20 > > > }; > > >=20 > > > +/* For GPU PLL, using an output divider for DFS causes system to fail > > > */ > > >=20 > > > #define SUN50I_H6_PLL_GPU_REG 0x030 > > > static struct ccu_nkmp pll_gpu_clk =3D { > > > =20 > > > .enable =3D BIT(31), > > > .lock =3D BIT(28), > > > .n =3D _SUNXI_CCU_MULT_MIN(8, 8, 12), > > > .m =3D _SUNXI_CCU_DIV(1, 1), /* input divider */ > > >=20 > > > - .p =3D _SUNXI_CCU_DIV(0, 1), /* output divider > >=20 > > */ > >=20 > > > .common =3D { > > > =20 > > > .reg =3D 0x030, > > > .hw.init =3D CLK_HW_INIT("pll-gpu", "osc24M", > > >=20 > > > @@ -294,9 +294,9 @@ static SUNXI_CCU_M_WITH_MUX_GATE(deinterlace_clk, > > > "deinterlace", static SUNXI_CCU_GATE(bus_deinterlace_clk, > > > "bus-deinterlace", "psi-ahb1-ahb2", 0x62c, BIT(0), 0); > > >=20 > > > +/* Keep GPU_CLK divider const to avoid DFS instability. */ > > >=20 > > > static const char * const gpu_parents[] =3D { "pll-gpu" }; > > >=20 > > > -static SUNXI_CCU_M_WITH_MUX_GATE(gpu_clk, "gpu", gpu_parents, 0x670, > > > - 0, 3, /* M */ > > > +static SUNXI_CCU_MUX_WITH_GATE(gpu_clk, "gpu", gpu_parents, 0x670, > > >=20 > > > 24, 1, /* mux */ > > > BIT(31), /* gate */ > > > CLK_SET_RATE_PARENT); > > >=20 > > > @@ -1193,6 +1193,16 @@ static int sun50i_h6_ccu_probe(struct > > > platform_device *pdev) if (IS_ERR(reg)) > > >=20 > > > return PTR_ERR(reg); > > >=20 > > > + /* Force PLL_GPU output divider bits to 0 */ > > > + val =3D readl(reg + SUN50I_H6_PLL_GPU_REG); > > > + val &=3D ~BIT(0); > > > + writel(val, reg + SUN50I_H6_PLL_GPU_REG); > > > + > > > + /* Force GPU_CLK divider bits to 0 */ > > > + val =3D readl(reg + gpu_clk.common.reg); > > > + val &=3D ~GENMASK(3, 0); > > > + writel(val, reg + gpu_clk.common.reg); > > > + > > >=20 > > > /* Enable the lock bits on all PLLs */ > > > for (i =3D 0; i < ARRAY_SIZE(pll_regs); i++) { > > > =20 > > > val =3D readl(reg + pll_regs[i]); > > >=20 > > > -- > > > 2.34.1 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 A2815C433EF for ; Tue, 5 Jul 2022 18:08:12 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4gPeI2KUB/GfvIqzHXpt7NyWs4WVlX7sOqF2Bu7LY9k=; b=nwe1CjJK1N3gn8 kTYwdvu80xqIZMhEVcSOrhNooC7UJitRYCRWWkl4VtUaAyFQti6N6l0gOCU1ZFxnX+wPNnyzgnORM qalZT7nWjphjPGkB/Yq/jhK7bopy9JRwiwykawhGPrIktdHpdzJPiLJcXpoFwZEjDyigO8cEJ6yAc ASmx3md/4VpDo3gejTK+yszhZ8HdjA77VksnVA2EgWxanxt6ElkiR1Wih9qSOeofEZHWQz/PIi7SQ FmSbwrfpURMak6b/zsy/fPc807asaSCcbh9obkCC+xi0oXEN3SEnhw4QtAEQY3TGLgDm1UWnIicxK zwfMvLAqKK3ncUIkymQg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8mx3-0021mK-3g; Tue, 05 Jul 2022 18:07:09 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8mwz-0021l1-FY for linux-arm-kernel@lists.infradead.org; Tue, 05 Jul 2022 18:07:07 +0000 Received: by mail-ej1-x632.google.com with SMTP id dn9so17734770ejc.7 for ; Tue, 05 Jul 2022 11:07:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C3MBhx1ORlPHZ9G4+h8YaWQcZ6SFmshxeCeN90vs+Vg=; b=EvCJru21FJDLrFNyWj1mt6ib9bZnl2/sCGMrbEAyt2dFLQM9z6JYnPe83RNIeK60bV jI3YqKyUUy7/e43JZ9kE7tQvoBV0i4VJAswQjggNUtK2t9l7DwCFzBTt/BvZ3Hed7JbS 01WbxSx+AERck5U4pG3q+2Zh0FAryO1S//6DP9HRrWgEa8/wjs8DOM4aGwF+HZ0KfH/J T+vOc0MaW1I37t0/qaZLY3e2a6RgJDhOVqrxCiM1WzaPmaINtCRJyR8hiFDdGrmSHW0J 5pbPx2B2yFUrBwNoH1NOBYzhRJCaGYhKxXygvGXPMF+TRwwtoY7wt6c5iiLDOvbQl5tB 80Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C3MBhx1ORlPHZ9G4+h8YaWQcZ6SFmshxeCeN90vs+Vg=; b=aNrhzQVmHqMARQZaflnhD+waA3IhKVwyi27y3wMZM+0iAZ6leKreZRAarBYowZh9Tv NZxHHNZD/49MDmifX7iSG+JIB3ZlV11ue8rZQKExXiw4VFAgzTYJ6l6sRiJRqOH9UUEh nIOFgjhqbg1I5sNomMyGCY/FJSm+u2qtucnGjXp1lF6mt6UnPIkDoLcaBzjk8hChFMuA f/S1UiQoPL5pTXfx4htXukIjQsFQfsqvrG99hUgGdsoMrIdQRrxLF1ySdyVzmwDH/xJ9 mPUc3UPKg2L33u26f4oRA3G1sEgp8Buzxm/WAyO30NIQVq2GHMT5hWeyZyEV+EHI1vgp dtsA== X-Gm-Message-State: AJIora9eBJO7crYd173HhQECXXYOPGCdLO+ry4vUTXkKFb4jxAW3a67w wnvPuESOgoHjSchWM82sevI= X-Google-Smtp-Source: AGRyM1uftWZ7uUb2RAX1JiED29UVN81QgJ+i9XK4890u80u5UWT4LYY7hJr9VUBrTSDO3BmPWgydmQ== X-Received: by 2002:a17:907:968f:b0:726:9f9b:ab0f with SMTP id hd15-20020a170907968f00b007269f9bab0fmr35971875ejc.237.1657044421330; Tue, 05 Jul 2022 11:07:01 -0700 (PDT) Received: from kista.localnet (213-161-3-76.dynamic.telemach.net. [213.161.3.76]) by smtp.gmail.com with ESMTPSA id n18-20020a05640204d200b00435a08a3557sm23880887edw.27.2022.07.05.11.07.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 11:07:00 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Roman Stratiienko Cc: Samuel Holland , =?ISO-8859-1?Q?Cl=E9ment_P=E9ron?= , Michael Turquette , sboyd@kernel.org, mripard@kernel.org, wens@csie.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: Re: [PATCH v3] clk: sunxi-ng: sun50i: h6: Modify GPU clock configuration to support DFS Date: Tue, 05 Jul 2022 20:06:59 +0200 Message-ID: <2562485.k3LOHGUjKi@kista> In-Reply-To: References: <20220705075226.359475-1-r.stratiienko@gmail.com> <5580615.DvuYhMxLoT@kista> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220705_110705_570869_6A4C7D9A X-CRM114-Status: GOOD ( 39.36 ) 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 RG5lIHRvcmVrLCAwNS4ganVsaWogMjAyMiBvYiAxODoyOTozOSBDRVNUIGplIFJvbWFuIFN0cmF0 aWllbmtvIG5hcGlzYWwoYSk6Cj4gSGkgSmVybmVqLAo+IAo+INCy0YIsIDUg0LjRjtC7LiAyMDIy INCzLiDQsiAxOTowNywgSmVybmVqIMWga3JhYmVjIDxqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20+ Ogo+ID4gSGkgUm9tYW4sCj4gPiAKPiA+IERuZSB0b3JlaywgMDUuIGp1bGlqIDIwMjIgb2IgMDk6 NTI6MjYgQ0VTVCBqZSBSb21hbiBTdHJhdGlpZW5rbyAKbmFwaXNhbChhKToKPiA+ID4gVXNpbmcg c2ltcGxlIGJhc2ggc2NyaXB0IGl0IHdhcyBkaXNjb3ZlcmVkIHRoYXQgbm90IGFsbCBDQ1UgcmVn aXN0ZXJzCj4gPiA+IAo+ID4gPiBjYW4gYmUgc2FmZWx5IHVzZWQgZm9yIERGUywgZS5nLjoKPiA+ ID4gICAgIHdoaWxlIHRydWUKPiA+ID4gICAgIGRvCj4gPiA+ICAgICAKPiA+ID4gICAgICAgICBk ZXZtZW0gMHgzMDAxMDMwIDQgMHhiMDAwM2UwMgo+ID4gPiAgICAgICAgIGRldm1lbSAweDMwMDEw MzAgNCAweGIwMDAxZTAyCj4gPiA+ICAgICAKPiA+ID4gICAgIGRvbmUKPiA+ID4gCj4gPiA+IFNj cmlwdCBhYm92ZSBjaGFuZ2VzIHRoZSBHUFVfUExMIG11bHRpcGxpZXIgcmVnaXN0ZXIgdmFsdWUu IFdoaWxlIHRoZQo+ID4gPiBzY3JpcHQgaXMgcnVubmluZywgdGhlIHVzZXIgc2hvdWxkIGludGVy YWN0IHdpdGggdGhlIHVzZXIgaW50ZXJmYWNlLgo+ID4gPiAKPiA+ID4gVXNpbmcgdGhpcyBtZXRo b2QgdGhlIGZvbGxvd2luZyByZXN1bHRzIHdlcmUgb2J0YWluZWQ6Cj4gPiA+IHwgUmVnaXN0ZXIg IHwgTmFtZSAgICAgICAgICAgfCBCaXRzICB8IFZhbHVlcyB8IFJlc3VsdCB8Cj4gPiA+IHwgLS0g ICAgICAgIHwgLS0gICAgICAgICAgICAgfCAtLSAgICB8IC0tICAgICB8IC0tICAgICB8Cj4gPiA+ IHwgMHgzMDAxMDMwIHwgR1BVX1BMTC5NVUxUICAgfCAxNS4uOCB8IDIwLTYyICB8IE9LICAgICB8 Cj4gPiA+IHwgMHgzMDAxMDMwIHwgR1BVX1BMTC5JTkRJViAgfCAgICAgMSB8IDAtMSAgICB8IE9L ICAgICB8Cj4gPiA+IHwgMHgzMDAxMDMwIHwgR1BVX1BMTC5PVVRESVYgfCAgICAgMCB8IDAtMSAg ICB8IEZBSUwgICB8Cj4gPiA+IHwgMHgzMDAxNjcwIHwgR1BVX0NMSy5ESVYgICAgfCAgMy4uMCB8 IEFOWSAgICB8IEZBSUwgICB8Cj4gPiA+IAo+ID4gPiBEVkZTIHN0YXJ0ZWQgdG8gd29yayBzZWFt bGVzc2x5IG9uY2UgZGl2aWRlcnMgd2hpY2ggY2F1c2VkIHRoZQo+ID4gPiBnbGl0Y2hlcyB3ZXJl IHNldCB0byBmaXhlZCB2YWx1ZXMuCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSb21hbiBT dHJhdGlpZW5rbyA8ci5zdHJhdGlpZW5rb0BnbWFpbC5jb20+Cj4gPiA+IAo+ID4gPiAtLS0KPiA+ ID4gCj4gPiA+IENoYW5nZWxvZzoKPiA+ID4gCj4gPiA+IFYyOgo+ID4gPiAtIERyb3AgY2hhbmdl cyByZWxhdGVkIHRvIG11eAo+ID4gPiAtIERyb3AgZnJlcXVlbmN5IGxpbWl0aW5nCj4gPiA+IC0g QWRkIHVudXNlZCBkaXZpZGVycyBpbml0aWFsaXphdGlvbgo+ID4gPiAKPiA+ID4gVjM6Cj4gPiA+ IC0gQWRqdXN0IGNvbW1lbnRzCj4gPiAKPiA+IEkgZG9uJ3Qgc2VlIGFueSBjb21tZW50IGZpeGVk LCBhdCBsZWFzdCBub3QgdG8gIjEiLCBhcyB3ZSBkaXNjdXNzZWQuIERpZCBJCj4gPiBtaXNzIGFu eXRoaW5nPwo+IAo+IEkndmUgYWRkZWQgdGhlICJiaXRzIiB3b3JkLCBzbyBub3cgaXQgc2hvdWxk IHNvdW5kIGNvcnJlY3QuCgpUZWNobmljYWxseSBpdCdzIGNvcnJlY3QsIGJ1dCB0aGlzIHdvdWxk IGJlIHRoaXJkIGZvcm0gb2YgY29tbWVudHMgZm9yIGZpeGVkIApiaXRzLiBMZXQncyBzdGljayB0 byB0aGUgZm9ybSB3aGljaCBpcyBtb3N0IGluZm9ybWF0aXZlICgiRm9yY2UgUExMX0dQVSBvdXRw dXQgCmRpdmlkZXIgdG8gMSIpLiBJZGVhbGx5LCBjb21tZW50IHdvdWxkIGFsc28gcG9pbnQgdG8g Z3B1X2NsayBjb21tZW50IGZvciAKcmVhc29uIHdoeSwgbGlrZSBpdCdzIGRvbmUgZm9yIHZpZGVv IFBMTCBibG9jayBhbHJlYWR5LgoKPiAKPiA+IEFsc28sIHBsZWFzZSBhZGQgbWluIGFuZCBtYXgu Cj4gCj4gV2hhdCBpcyB0aGUgcmF0aW9uYWxlIGZvciBhZGRpdGlvbmFsIGxpbWl0cz8KCklmIGxp bWl0cyBhcmUgc3BlY2lmaWVkIGluIHdoYXRldmVyIGZvcm0sIHRoZXkgc2hvdWxkIGJlIGFkZGVk LiBBcyBJIHNhaWQgCnNldmVyYWwgdGltZXMgYWxyZWFkeSwgdmVuZG9yIGNvZGUgbGltaXRzIFBM TCBmcmVxdWVuY3kgdG8gMjg4IE1IeiBtaW5pbXVtIGFuZCAKbGlzdHMgbWF4aW11bS4gQXMgZXhw ZXJpZW5jZWQgYSBmZXcgdGltZXMgYmVmb3JlIHdpdGggdmlkZW8gUExMcywgdGhlc2UgYXJlIApp bXBvcnRhbnQsIG90aGVyd2lzZSBQTEwgaXMgdW5zdGFibGUuIEZvciBleGFtcGxlLCBPUFAgdGFi bGUgaW4gdmVuZG9yIERUIGhhcyAKdHdvIG9wZXJhdGluZyBwb2ludHMgbG93ZXIgdGhhbiAyODgg TUh6LCB3aGljaCBtZWFucyBpdCB3b3VsZCBlaXRoZXIgbG9jayB1cCAKb3IgYmUgdW5zdGFibGUu IEluIHN1Y2ggY2FzZXMsIHZlbmRvciBjb2RlIGFjdHVhbGx5IHNldHMgR1BVX0NMSyBkaXZpZGVy IHRvIDIsIApidXQgd2UgY2FuIHNraXAgdGhlbSwgYmVjYXVzZSBHUFVfQ0xLIGRpdmlkZXIgd2ls bCBiZSBoYXJkY29kZWQgdG8gMSB3aXRoIHRoaXMgCnBhdGNoLgoKPiBDUFVfUExMIGRvZXNuJ3Qg aGF2ZSB0aGVzZSBsaW1pdHMuIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZW0gZGlmZmVyZW50LgoK V2h5IENQVV9QTEw/IFdoeSBub3QgdmlkZW8gUExMPyBJbiBhbnkgY2FzZSwgaXQgZG9lc24ndCBt YXR0ZXIgaWYgc3RydWN0IGxvb2tzIApzaW1pbGFyIHRvIHNvbWUgb3RoZXIgb3IgaXMgdW5pcXVl LiBPbmx5IGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHN0cnVjdCAKZGVzY3JpYmVzIFBMTCBhcyBi ZXN0IGFzIHBvc3NpYmxlLgoKPiAKPiA+IEkgYWxzbyBjb25zZW50IHRvIFItQiwgd2hpY2ggeW91 Cj4gPiBkaWRuJ3QgaW5jbHVkZS4KPiAKPiBJIHdhcyBleHBlY3RpbmcgYW4gZXhwbGljaXQgJ3Jl dmlldy1ieScgbGluZS4gQW55d2F5IEkgY2FuIGFkZCBpdCBhbmQKPiByZXNlbmQgdjQgaWYgaXQn cyBuZWNlc3NhcnkuCgpJZiB5b3UgYXQgbGVhc3QgYWRkIG1pbiBhbmQgbWF4IGxpbWl0cywgeW91 IGNhbiBhZGQgZm9sbG93aW5nIHRhZzoKUmV2aWV3ZWQtYnk6IEplcm5laiBTa3JhYmVjIDxqZXJu ZWouc2tyYWJlY0BnbWFpbC5jb20+CgpJZiB5b3Ugc2VuZCBpdCBiZWZvcmUgRnJpZGF5LCBpdCB3 aWxsIGJlIGluIDUuMjAuCgpCZXN0IHJlZ2FyZHMsCkplcm5lagoKPiAKPiBSZWdhcmRzLAo+IFJv bWFuCj4gCj4gPiBEaWQgeW91IHJlc2VuZCB2MiBpbnN0ZWFkIG9mIHYzPwo+ID4gCj4gPiBCZXN0 IHJlZ2FyZHMsCj4gPiBKZXJuZWoKPiA+IAo+ID4gPiAtLS0KPiA+ID4gCj4gPiA+ICBkcml2ZXJz L2Nsay9zdW54aS1uZy9jY3Utc3VuNTBpLWg2LmMgfCAxNiArKysrKysrKysrKysrLS0tCj4gPiA+ ICAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiA+ID4g Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdW54aS1uZy9jY3Utc3VuNTBpLWg2LmMK PiA+ID4gYi9kcml2ZXJzL2Nsay9zdW54aS1uZy9jY3Utc3VuNTBpLWg2LmMgaW5kZXgKPiA+ID4g MmRkZjBhMGRhNTI2Zi4uMDY4ZDFhNmIyZWJmMwo+ID4gPiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy9jbGsvc3VueGktbmcvY2N1LXN1bjUwaS1oNi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvY2xr L3N1bnhpLW5nL2NjdS1zdW41MGktaDYuYwo+ID4gPiBAQCAtOTUsMTMgKzk1LDEzIEBAIHN0YXRp YyBzdHJ1Y3QgY2N1X25rbXAgcGxsX3BlcmlwaDFfY2xrID0gewo+ID4gPiAKPiA+ID4gICAgICAg fSwKPiA+ID4gIAo+ID4gPiAgfTsKPiA+ID4gCj4gPiA+ICsvKiBGb3IgR1BVIFBMTCwgdXNpbmcg YW4gb3V0cHV0IGRpdmlkZXIgZm9yIERGUyBjYXVzZXMgc3lzdGVtIHRvIGZhaWwKPiA+ID4gKi8K PiA+ID4gCj4gPiA+ICAjZGVmaW5lIFNVTjUwSV9INl9QTExfR1BVX1JFRyAgICAgICAgICAgICAg ICAweDAzMAo+ID4gPiAgc3RhdGljIHN0cnVjdCBjY3VfbmttcCBwbGxfZ3B1X2NsayA9IHsKPiA+ ID4gIAo+ID4gPiAgICAgICAuZW5hYmxlICAgICAgICAgPSBCSVQoMzEpLAo+ID4gPiAgICAgICAu bG9jayAgICAgICAgICAgPSBCSVQoMjgpLAo+ID4gPiAgICAgICAubiAgICAgICAgICAgICAgPSBf U1VOWElfQ0NVX01VTFRfTUlOKDgsIDgsIDEyKSwKPiA+ID4gICAgICAgLm0gICAgICAgICAgICAg ID0gX1NVTlhJX0NDVV9ESVYoMSwgMSksIC8qIGlucHV0IGRpdmlkZXIgKi8KPiA+ID4gCj4gPiA+ IC0gICAgIC5wICAgICAgICAgICAgICA9IF9TVU5YSV9DQ1VfRElWKDAsIDEpLCAvKiBvdXRwdXQg ZGl2aWRlcgo+ID4gCj4gPiAqLwo+ID4gCj4gPiA+ICAgICAgIC5jb21tb24gICAgICAgICA9IHsK PiA+ID4gICAgICAgCj4gPiA+ICAgICAgICAgICAgICAgLnJlZyAgICAgICAgICAgID0gMHgwMzAs Cj4gPiA+ICAgICAgICAgICAgICAgLmh3LmluaXQgICAgICAgID0gQ0xLX0hXX0lOSVQoInBsbC1n cHUiLCAib3NjMjRNIiwKPiA+ID4gCj4gPiA+IEBAIC0yOTQsOSArMjk0LDkgQEAgc3RhdGljIFNV TlhJX0NDVV9NX1dJVEhfTVVYX0dBVEUoZGVpbnRlcmxhY2VfY2xrLAo+ID4gPiAiZGVpbnRlcmxh Y2UiLCBzdGF0aWMgU1VOWElfQ0NVX0dBVEUoYnVzX2RlaW50ZXJsYWNlX2NsaywKPiA+ID4gImJ1 cy1kZWludGVybGFjZSIsICJwc2ktYWhiMS1haGIyIiwgMHg2MmMsIEJJVCgwKSwgMCk7Cj4gPiA+ IAo+ID4gPiArLyogS2VlcCBHUFVfQ0xLIGRpdmlkZXIgY29uc3QgdG8gYXZvaWQgREZTIGluc3Rh YmlsaXR5LiAqLwo+ID4gPiAKPiA+ID4gIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3B1X3Bh cmVudHNbXSA9IHsgInBsbC1ncHUiIH07Cj4gPiA+IAo+ID4gPiAtc3RhdGljIFNVTlhJX0NDVV9N X1dJVEhfTVVYX0dBVEUoZ3B1X2NsaywgImdwdSIsIGdwdV9wYXJlbnRzLCAweDY3MCwKPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDMsICAgIC8qIE0gKi8KPiA+ ID4gK3N0YXRpYyBTVU5YSV9DQ1VfTVVYX1dJVEhfR0FURShncHVfY2xrLCAiZ3B1IiwgZ3B1X3Bh cmVudHMsIDB4NjcwLAo+ID4gPiAKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDI0LCAxLCAgIC8qIG11eCAqLwo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQklUKDMxKSwgLyogZ2F0ZSAqLwo+ID4gPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7Cj4gPiA+IAo+ID4gPiBAQCAt MTE5Myw2ICsxMTkzLDE2IEBAIHN0YXRpYyBpbnQgc3VuNTBpX2g2X2NjdV9wcm9iZShzdHJ1Y3QK PiA+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KSBpZiAoSVNfRVJSKHJlZykpCj4gPiA+IAo+ID4g PiAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHJlZyk7Cj4gPiA+IAo+ID4gPiArICAgICAv KiBGb3JjZSBQTExfR1BVIG91dHB1dCBkaXZpZGVyIGJpdHMgdG8gMCAqLwo+ID4gPiArICAgICB2 YWwgPSByZWFkbChyZWcgKyBTVU41MElfSDZfUExMX0dQVV9SRUcpOwo+ID4gPiArICAgICB2YWwg Jj0gfkJJVCgwKTsKPiA+ID4gKyAgICAgd3JpdGVsKHZhbCwgcmVnICsgU1VONTBJX0g2X1BMTF9H UFVfUkVHKTsKPiA+ID4gKwo+ID4gPiArICAgICAvKiBGb3JjZSBHUFVfQ0xLIGRpdmlkZXIgYml0 cyB0byAwICovCj4gPiA+ICsgICAgIHZhbCA9IHJlYWRsKHJlZyArIGdwdV9jbGsuY29tbW9uLnJl Zyk7Cj4gPiA+ICsgICAgIHZhbCAmPSB+R0VOTUFTSygzLCAwKTsKPiA+ID4gKyAgICAgd3JpdGVs KHZhbCwgcmVnICsgZ3B1X2Nsay5jb21tb24ucmVnKTsKPiA+ID4gKwo+ID4gPiAKPiA+ID4gICAg ICAgLyogRW5hYmxlIHRoZSBsb2NrIGJpdHMgb24gYWxsIFBMTHMgKi8KPiA+ID4gICAgICAgZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxsX3JlZ3MpOyBpKyspIHsKPiA+ID4gICAgICAgCj4g PiA+ICAgICAgICAgICAgICAgdmFsID0gcmVhZGwocmVnICsgcGxsX3JlZ3NbaV0pOwo+ID4gPiAK PiA+ID4gLS0KPiA+ID4gMi4zNC4xCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK