From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792685585; b=FxN3Tz4l193fltGDB+8hHWlM7VPvV2izWlqGe538GAncmYqMVB2ZeK1DAWQQO6hb4v5s i4UNIlgB6ESeyYLsQfIQnggqxY1JjBQc+S7MyMv4w0NOEk/xSrjUI4VIPRHZ6hSZDFzUi REyHqqKHTBet1MFprJEhbzKx6vC7qZbSxIN0+9H8AkQ/QR2pQy4FZEiYeUvN4QOlX1jZ2 xOoE0Wx0OdwxbbFiXvncS8Rxetfz4Mez2fx+VcfZJGov2M8YmqYOEnX5xdtGX5V7JMdYo QGJ2RFTvzKYwe3NEZte1B/nF9iuwteE92jtoUKs6u/8D5CebdXfxIOoOsb+bY3GFl6w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792685585; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=jF1NmDnjh7c7kkxRx9bcWKHyYF3gUqr7mA5JIQaVVhI=; b=tb1GNcqJNF98e8K0aEOSch1Q8Xsd+W+mL5KhAwQOcN0FPDQuQAfFLhdItGNldNNJudC7 Wx65AOSj3FABEWk/Z2am40C79xAnco++Rl4oXNVZYq8jSi8afsRNmlpP3WBHt/91Pab68 T2oYmGJTubtiL3uUbcr64HwYfR8VHgZY0H1YPxAkJhZwmr5XsRe5qhce0GEKIY3uAmJvD 6RpnxrI7n2MeX+MkqkHRoT+Wkx7fl5uY51P20N0QcWQwnfS0Tu8ySwemodA8qqWIYxJhG tXElsdNbMWiB6a7P5BSWC9k9Qp5X6dX0SB5Hw39qfMXlysPeDfZMRgqBZSZQpAVr1Zw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=VbKU9Xij; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 068C7606A31B; Thu, 22 Oct 2026 16:13:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=VbKU9Xij Received: by smtp.kernel.org (Postfix) with ESMTPSA id D023C1F031E0; Thu, 22 Oct 2026 16:13:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792685584; bh=jF1NmDnjh7c7kkxRx9bcWKHyYF3gUqr7mA5JIQaVVhI=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=VbKU9XijUrEX0e4+6Rn3tL6jndLa0XGqXD16igKfK2SXZJ2P6cdLWIj2iQt2CDgZE 8dHVpsg338sud3dCvLpyaruKJoGrMpLcAvOcxouQO0yRHvsM7YDGG/lb6SMyUlnK7P EjFJeQA8nDr6caxF8yna5GwsBxTVyY4E4bOIZxrjDYUjWoBrGg/qXxHIoDutLMTapA EDi8JjNSWQKwA3XABoJZGcGv9inNuF89WCXtegcQ/Fk2lcMx3pWNNt1+ip20SLhNqm LI2XImZpCUj7xtN4KsFk63598DT+8lBpHDdGsESggY6fGE+OTV+uLnH0yFipfLsWP0 hQ9WqlLEd/RiA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 07/27] clk: rockchip: Add RK3572 clock and reset support Reply-To: sashiko-reviews@lists.linux.dev To: "Cunhao Lu" <1579567540@qq.com> Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, mfd@lists.linux.dev, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org, linux-phy@lists.infradead.org, linux-usb@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, lee@kernel.org In-Reply-To: <20261022-add-board-ok3572-c-v1-7-0b0fd85a31ee@qq.com> References: <20261022-add-board-ok3572-c-v1-0-0b0fd85a31ee@qq.com> <20261022-add-board-ok3572-c-v1-7-0b0fd85a31ee@qq.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 22 Oct 2026 16:13:03 +0000 X-Mailing-List: linux-serial@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: - [Medium] clk: rockchip: missing CLK_AUDIO_FRAC_0..2 in rk3572_clk_branches - [Medium] clk: rockchip: internal FACTOR(0) branches overwrite PLL_PPLL in= rk3572_clk_init() -- commit 9602441daaa896927eb56cc9b1d0e4d99173c907 Author: Cunhao Lu <1579567540@qq.com> clk: rockchip: Add RK3572 clock and reset support This commit adds clock and soft-reset controller driver support for the Rockchip rk3572 SoC. > diff --git a/drivers/clk/rockchip/clk-rk3572.c b/drivers/clk/rockchip/clk= -rk3572.c > new file mode 100644 > index 0000000000000..78fd35f5f27d1 > --- /dev/null > +++ b/drivers/clk/rockchip/clk-rk3572.c [ ... ] > +PNAME(mux_24m_frac_int_mclk4_p) =3D { > + "xin24m", "clk_audio_frac_0", "clk_audio_frac_1", "clk_audio_frac_2", > + "clk_audio_frac_3", "clk_audio_int_0", "clk_audio_int_1", "clk_audio_in= t_2", > + "sai0_mclk_in", "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in", > +}; [ ... ] > +PNAME(mux_24m_frac_int_mclki_p) =3D { > + "xin24m", "clk_audio_int_0", "clk_audio_int_1", "clk_audio_int_2", "clk= _audio_frac_0", > + "clk_audio_frac_1", "clk_audio_frac_2", "clk_audio_frac_3", "sai0_mclk_= in", > + "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in", "sai4_mclk_in", > +}; > + > +PNAME(mux_24m_frac_int_mclki_sclki_p) =3D { > + "xin24m", "clk_audio_int_0", "clk_audio_int_1", "clk_audio_int_2", "clk= _audio_frac_0", > + "clk_audio_frac_1", "clk_audio_frac_2", "clk_audio_frac_3", "sai0_mclk_= in", > + "sai1_mclk_in", "sai2_mclk_in", "sai3_mclk_in", "sai4_mclk_in", "sai0_s= clk_in", > + "sai1_sclk_in", "sai2_sclk_in", "sai3_sclk_in", "sai4_sclk_in", > +}; [ ... ] > +static struct rockchip_pll_clock rk3572_pll_clks[] __initdata =3D { > + /* Keep BPLL and LPLL enabled for firmware consumers. */ > + [bpll] =3D PLL(pll_rk3588_core, PLL_BPLL, "bpll", mux_pll_p, > + CLK_IGNORE_UNUSED, RK3572_PLL_CON(0), > + RK3572_MODE_CON1, 0, 15, 0, rk3572_pll_rates), > + [lpll] =3D PLL(pll_rk3588_core, PLL_LPLL, "lpll", mux_pll_p, > + CLK_IGNORE_UNUSED, RK3572_LPLL_CON(16), > + RK3572_LPLL_MODE_CON0, 0, 15, 0, rk3572_pll_rates), > + [vpll] =3D PLL(pll_rk3588, PLL_VPLL, "vpll", mux_pll_p, > + 0, RK3572_PLL_CON(88), > + RK3572_MODE_CON0, 4, 15, 0, rk3572_pll_rates), > + [aupll] =3D PLL(pll_rk3588, PLL_AUPLL, "aupll", mux_aupll_p, > + 0, RK3572_PLL_CON(96), > + RK3572_MODE_CON0, 6, 15, 0, rk3572_aupll_rates), > + [cpll] =3D PLL(pll_rk3588, PLL_CPLL, "cpll", mux_pll_p, > + 0, RK3572_PLL_CON(104), > + RK3572_MODE_CON0, 8, 15, 0, rk3572_pll_rates), > + [gpll] =3D PLL(pll_rk3588, PLL_GPLL, "gpll", mux_pll_p, > + CLK_IGNORE_UNUSED, RK3572_PLL_CON(112), > + RK3572_MODE_CON0, 2, 15, 0, rk3572_pll_rates), > + [ppll] =3D PLL(pll_rk3588_ddr, PLL_PPLL, "ppll", mux_pll_p, > + 0, RK3572_PPLL_CON(128), > + RK3572_PPLL_CON(134), 15, 15, 0, rk3572_ppll_rates), > +}; > + > +static struct rockchip_clk_branch rk3572_clk_branches[] __initdata =3D { > + /* fixed */ > + FACTOR(0, "xin12m", "xin24m", 0, 1, 2), > + > + COMPOSITE_FRACMUX(CLK_32K, "clk_32k", "xin24m", CLK_IS_CRITICAL, > + RK3572_PMU_CLKSEL_CON(21), 0, > + RK3572_PMU_CLKGATE_CON(7), 14, GFLAGS, NULL), > + > + FACTOR(0, "clk_spll_div12", "spll", 0, 1, 12), > + FACTOR(0, "clk_spll_div6", "spll", 0, 1, 6), > + FACTOR(0, "clk_spll_div4", "spll", 0, 1, 4), > + FACTOR(0, "clk_spll_div2", "spll", 0, 1, 2), [Severity: Medium] Will registering these fixed-factor branches with an id of 0 overwrite the ppll entry in ctx->clk_data.clks[0]? In include/dt-bindings/clock/rockchip,rk3572-cru.h, the binding id for ppll is 0: #define PLL_PPLL 0 During rk3572_clk_init() in drivers/clk/rockchip/clk-rk3572.c, rockchip_clk_register_plls() runs before rockchip_clk_register_branches(): rockchip_clk_register_plls(ctx, rk3572_pll_clks, ARRAY_SIZE(rk3572_pll_clks), RK3572_GRF_SOC_STATUS0); ... rockchip_clk_register_branches(ctx, rk3572_clk_branches, ARRAY_SIZE(rk3572_clk_branches)); When rockchip_clk_register_branches() iterates over rk3572_clk_branches[], it unconditionally calls rockchip_clk_set_lookup(ctx, clk, list->id) in drivers/clk/rockchip/clk.h: static inline void rockchip_clk_set_lookup(struct rockchip_clk_provider= *ctx, struct clk *clk, unsigned in= t id) { ctx->clk_data.clks[id] =3D clk; } Because xin12m (which also has no consumers in this file) and clk_spll_div12, clk_spll_div6, clk_spll_div4, and clk_spll_div2 all pass 0 as their id, rockchip_clk_register_branches() overwrites ctx->clk_data.clks[0] with clk_spll_div2. Any device tree consumer requesting ppll will receive clk_spll_div2 instead. [ ... ] > + MUX(CLK_AUDIO_FRAC_0_SRC, "clk_audio_frac_0_src", gpll_cpll_aupll_24m_p= , 0, > + RK3572_CLKSEL_CON(13), 0, 2, MFLAGS), > + MUX(CLK_AUDIO_FRAC_1_SRC, "clk_audio_frac_1_src", gpll_cpll_aupll_24m_p= , 0, > + RK3572_CLKSEL_CON(15), 0, 2, MFLAGS), > + MUX(CLK_AUDIO_FRAC_2_SRC, "clk_audio_frac_2_src", gpll_cpll_aupll_24m_p= , 0, > + RK3572_CLKSEL_CON(17), 0, 2, MFLAGS), > + MUX(CLK_AUDIO_FRAC_3_SRC, "clk_audio_frac_3_src", gpll_cpll_aupll_24m_p= , 0, > + RK3572_CLKSEL_CON(19), 0, 2, MFLAGS), > + COMPOSITE_FRAC(CLK_AUDIO_FRAC_3, "clk_audio_frac_3", "clk_audio_frac_3_= src", 0, > + RK3572_CLKSEL_CON(18), 0, > + RK3572_CLKGATE_CON(1), 14, GFLAGS), [Severity: Medium] Are the fractional divider definitions for clk_audio_frac_0, clk_audio_frac_1, and clk_audio_frac_2 missing from rk3572_clk_branches[] here? In include/dt-bindings/clock/rockchip,rk3572-cru.h, all four fractional audio clocks and their parent muxes are defined: #define CLK_AUDIO_FRAC_0 25 #define CLK_AUDIO_FRAC_1 26 #define CLK_AUDIO_FRAC_2 27 #define CLK_AUDIO_FRAC_3 28 #define CLK_AUDIO_FRAC_0_SRC 29 #define CLK_AUDIO_FRAC_1_SRC 30 #define CLK_AUDIO_FRAC_2_SRC 31 #define CLK_AUDIO_FRAC_3_SRC 32 However, rk3572_clk_branches[] in drivers/clk/rockchip/clk-rk3572.c only registers the four source muxes (clk_audio_frac_0_src through clk_audio_frac_3_src) and clk_audio_frac_3, omitting clk_audio_frac_0, clk_audio_frac_1, and clk_audio_frac_2. Because mux_24m_frac_int_mclk4_p, mux_24m_frac_int_mclki_p, and mux_24m_frac_int_mclki_sclki_p list clk_audio_frac_0, clk_audio_frac_1, and clk_audio_frac_2 as parents, 13 downstream audio clocks (clk_pdm0_src_top, mclk_asrc0_src_0, mclk_asrc1_src_1, mclk_pdm0_src_top, mclk_sai0 through mclk_sai5, and mclk_spdif_tx0 through mclk_spdif_tx2) will fail to resolve those parents when rk3572_clk_init() -> rockchip_clk_register_branches() runs, and device tree lookups for those three clock ids will fail to find a registered clock. [ ... ] --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261022-add-board-= ok3572-c-v1-0-0b0fd85a31ee@qq.com?part=3D7 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 090BB606A323 for ; Thu, 22 Oct 2026 16:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=p65aEiDQ; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=VbKU9Xij 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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=dshHA1+zmH+eJWFyzaPkfC6YuTxrCMgT15jNeEZF5m8=; b=p65aEiDQRYuu2ctBfnj68a6R/n ZfDOBIPrxca1RUAr/IUBrKg2EzRUXjUSI3P6C9wPF/fSMwzltnNDxGGdvESXx7ARsE4xjDb6+JOo1 6Plj2itPw3TXizSeUUBqzPNPNzh0hCHNy7LLw1nJsoRPAYv+pL6MkVN1ZfQCQDuxiR9ClloYTDO2+ 7GUXQuN9g1Ry6jvQk4eq6mxH1DmQCTablYwSHVIzfZXHZ+ixUinO3q51curhAiotwA3MIa36+EmC9 domWORSL6puPE6LE9SibSRg4C3e7rlfND1MbWvWkIcdVHsgBOw3Nvf62U00XpTNIqO+k00OwZ1yxc NKUYta+A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xJvPe-0000000ET4v-2Wu2; Thu, 22 Oct 2026 16:13:06 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xJvPd-0000000ET4l-1Y63 for linux-phy@lists.infradead.org; Thu, 22 Oct 2026 16:13:05 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id C2C94416FC; Thu, 22 Oct 2026 16:13:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D023C1F031E0; Thu, 22 Oct 2026 16:13:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792685584; bh=jF1NmDnjh7c7kkxRx9bcWKHyYF3gUqr7mA5JIQaVVhI=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=VbKU9XijUrEX0e4+6Rn3tL6jndLa0XGqXD16igKfK2SXZJ2P6cdLWIj2iQt2CDgZE 8dHVpsg338sud3dCvLpyaruKJoGrMpLcAvOcxouQO0yRHvsM7YDGG/lb6SMyUlnK7P EjFJeQA8nDr6caxF8yna5GwsBxTVyY4E4bOIZxrjDYUjWoBrGg/qXxHIoDutLMTapA EDi8JjNSWQKwA3XABoJZGcGv9inNuF89WCXtegcQ/Fk2lcMx3pWNNt1+ip20SLhNqm LI2XImZpCUj7xtN4KsFk63598DT+8lBpHDdGsESggY6fGE+OTV+uLnH0yFipfLsWP0 hQ9WqlLEd/RiA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 07/27] clk: rockchip: Add RK3572 clock and reset support To: "Cunhao Lu" <1579567540@qq.com> Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, mfd@lists.linux.dev, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org, linux-phy@lists.infradead.org, linux-usb@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, lee@kernel.org In-Reply-To: <20261022-add-board-ok3572-c-v1-7-0b0fd85a31ee@qq.com> References: <20261022-add-board-ok3572-c-v1-0-0b0fd85a31ee@qq.com> <20261022-add-board-ok3572-c-v1-7-0b0fd85a31ee@qq.com> Date: Thu, 22 Oct 2026 16:13:03 +0000 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW01lZGl1bV0gY2xrOiByb2NrY2hp cDogbWlzc2luZyBDTEtfQVVESU9fRlJBQ18wLi4yIGluIHJrMzU3Ml9jbGtfYnJhbmNoZXMKLSBb TWVkaXVtXSBjbGs6IHJvY2tjaGlwOiBpbnRlcm5hbCBGQUNUT1IoMCkgYnJhbmNoZXMgb3Zlcndy aXRlIFBMTF9QUExMIGluIHJrMzU3Ml9jbGtfaW5pdCgpCi0tCgpjb21taXQgOTYwMjQ0MWRhYWE4 OTY5MjdlYjU2Y2M5YjFkMGU0ZDk5MTczYzkwNwpBdXRob3I6IEN1bmhhbyBMdSA8MTU3OTU2NzU0 MEBxcS5jb20+CgpjbGs6IHJvY2tjaGlwOiBBZGQgUkszNTcyIGNsb2NrIGFuZCByZXNldCBzdXBw b3J0CgpUaGlzIGNvbW1pdCBhZGRzIGNsb2NrIGFuZCBzb2Z0LXJlc2V0IGNvbnRyb2xsZXIgZHJp dmVyIHN1cHBvcnQgZm9yIHRoZQpSb2NrY2hpcCByazM1NzIgU29DLgoKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU3Mi5jIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAv Y2xrLXJrMzU3Mi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAw Li43OGZkMzVmNWYyN2QxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvY2xrL3JvY2tj aGlwL2Nsay1yazM1NzIuYwoKWyAuLi4gXQoKPiArUE5BTUUobXV4XzI0bV9mcmFjX2ludF9tY2xr NF9wKSA9IHsKPiArCSJ4aW4yNG0iLCAiY2xrX2F1ZGlvX2ZyYWNfMCIsICJjbGtfYXVkaW9fZnJh Y18xIiwgImNsa19hdWRpb19mcmFjXzIiLAo+ICsJImNsa19hdWRpb19mcmFjXzMiLCAiY2xrX2F1 ZGlvX2ludF8wIiwgImNsa19hdWRpb19pbnRfMSIsICJjbGtfYXVkaW9faW50XzIiLAo+ICsJInNh aTBfbWNsa19pbiIsICJzYWkxX21jbGtfaW4iLCAic2FpMl9tY2xrX2luIiwgInNhaTNfbWNsa19p biIsCj4gK307CgpbIC4uLiBdCgo+ICtQTkFNRShtdXhfMjRtX2ZyYWNfaW50X21jbGtpX3ApID0g ewo+ICsJInhpbjI0bSIsICJjbGtfYXVkaW9faW50XzAiLCAiY2xrX2F1ZGlvX2ludF8xIiwgImNs a19hdWRpb19pbnRfMiIsICJjbGtfYXVkaW9fZnJhY18wIiwKPiArCSJjbGtfYXVkaW9fZnJhY18x IiwgImNsa19hdWRpb19mcmFjXzIiLCAiY2xrX2F1ZGlvX2ZyYWNfMyIsICJzYWkwX21jbGtfaW4i LAo+ICsJInNhaTFfbWNsa19pbiIsICJzYWkyX21jbGtfaW4iLCAic2FpM19tY2xrX2luIiwgInNh aTRfbWNsa19pbiIsCj4gK307Cj4gKwo+ICtQTkFNRShtdXhfMjRtX2ZyYWNfaW50X21jbGtpX3Nj bGtpX3ApID0gewo+ICsJInhpbjI0bSIsICJjbGtfYXVkaW9faW50XzAiLCAiY2xrX2F1ZGlvX2lu dF8xIiwgImNsa19hdWRpb19pbnRfMiIsICJjbGtfYXVkaW9fZnJhY18wIiwKPiArCSJjbGtfYXVk aW9fZnJhY18xIiwgImNsa19hdWRpb19mcmFjXzIiLCAiY2xrX2F1ZGlvX2ZyYWNfMyIsICJzYWkw X21jbGtfaW4iLAo+ICsJInNhaTFfbWNsa19pbiIsICJzYWkyX21jbGtfaW4iLCAic2FpM19tY2xr X2luIiwgInNhaTRfbWNsa19pbiIsICJzYWkwX3NjbGtfaW4iLAo+ICsJInNhaTFfc2Nsa19pbiIs ICJzYWkyX3NjbGtfaW4iLCAic2FpM19zY2xrX2luIiwgInNhaTRfc2Nsa19pbiIsCj4gK307Cgpb IC4uLiBdCgo+ICtzdGF0aWMgc3RydWN0IHJvY2tjaGlwX3BsbF9jbG9jayByazM1NzJfcGxsX2Ns a3NbXSBfX2luaXRkYXRhID0gewo+ICsJLyogS2VlcCBCUExMIGFuZCBMUExMIGVuYWJsZWQgZm9y IGZpcm13YXJlIGNvbnN1bWVycy4gKi8KPiArCVticGxsXSA9IFBMTChwbGxfcmszNTg4X2NvcmUs IFBMTF9CUExMLCAiYnBsbCIsIG11eF9wbGxfcCwKPiArCQkgICAgIENMS19JR05PUkVfVU5VU0VE LCBSSzM1NzJfUExMX0NPTigwKSwKPiArCQkgICAgIFJLMzU3Ml9NT0RFX0NPTjEsIDAsIDE1LCAw LCByazM1NzJfcGxsX3JhdGVzKSwKPiArCVtscGxsXSA9IFBMTChwbGxfcmszNTg4X2NvcmUsIFBM TF9MUExMLCAibHBsbCIsIG11eF9wbGxfcCwKPiArCQkgICAgIENMS19JR05PUkVfVU5VU0VELCBS SzM1NzJfTFBMTF9DT04oMTYpLAo+ICsJCSAgICAgUkszNTcyX0xQTExfTU9ERV9DT04wLCAwLCAx NSwgMCwgcmszNTcyX3BsbF9yYXRlcyksCj4gKwlbdnBsbF0gPSBQTEwocGxsX3JrMzU4OCwgUExM X1ZQTEwsICJ2cGxsIiwgbXV4X3BsbF9wLAo+ICsJCSAgICAgMCwgUkszNTcyX1BMTF9DT04oODgp LAo+ICsJCSAgICAgUkszNTcyX01PREVfQ09OMCwgNCwgMTUsIDAsIHJrMzU3Ml9wbGxfcmF0ZXMp LAo+ICsJW2F1cGxsXSA9IFBMTChwbGxfcmszNTg4LCBQTExfQVVQTEwsICJhdXBsbCIsIG11eF9h dXBsbF9wLAo+ICsJCSAgICAgMCwgUkszNTcyX1BMTF9DT04oOTYpLAo+ICsJCSAgICAgUkszNTcy X01PREVfQ09OMCwgNiwgMTUsIDAsIHJrMzU3Ml9hdXBsbF9yYXRlcyksCj4gKwlbY3BsbF0gPSBQ TEwocGxsX3JrMzU4OCwgUExMX0NQTEwsICJjcGxsIiwgbXV4X3BsbF9wLAo+ICsJCSAgICAgMCwg UkszNTcyX1BMTF9DT04oMTA0KSwKPiArCQkgICAgIFJLMzU3Ml9NT0RFX0NPTjAsIDgsIDE1LCAw LCByazM1NzJfcGxsX3JhdGVzKSwKPiArCVtncGxsXSA9IFBMTChwbGxfcmszNTg4LCBQTExfR1BM TCwgImdwbGwiLCBtdXhfcGxsX3AsCj4gKwkJICAgICBDTEtfSUdOT1JFX1VOVVNFRCwgUkszNTcy X1BMTF9DT04oMTEyKSwKPiArCQkgICAgIFJLMzU3Ml9NT0RFX0NPTjAsIDIsIDE1LCAwLCByazM1 NzJfcGxsX3JhdGVzKSwKPiArCVtwcGxsXSA9IFBMTChwbGxfcmszNTg4X2RkciwgUExMX1BQTEws ICJwcGxsIiwgbXV4X3BsbF9wLAo+ICsJCSAgICAgMCwgUkszNTcyX1BQTExfQ09OKDEyOCksCj4g KwkJICAgICBSSzM1NzJfUFBMTF9DT04oMTM0KSwgMTUsIDE1LCAwLCByazM1NzJfcHBsbF9yYXRl cyksCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHJvY2tjaGlwX2Nsa19icmFuY2ggcmszNTcy X2Nsa19icmFuY2hlc1tdIF9faW5pdGRhdGEgPSB7Cj4gKwkvKiBmaXhlZCAqLwo+ICsJRkFDVE9S KDAsICJ4aW4xMm0iLCAieGluMjRtIiwgMCwgMSwgMiksCj4gKwo+ICsJQ09NUE9TSVRFX0ZSQUNN VVgoQ0xLXzMySywgImNsa18zMmsiLCAieGluMjRtIiwgQ0xLX0lTX0NSSVRJQ0FMLAo+ICsJCQkg IFJLMzU3Ml9QTVVfQ0xLU0VMX0NPTigyMSksIDAsCj4gKwkJCVJLMzU3Ml9QTVVfQ0xLR0FURV9D T04oNyksIDE0LCBHRkxBR1MsIE5VTEwpLAo+ICsKPiArCUZBQ1RPUigwLCAiY2xrX3NwbGxfZGl2 MTIiLCAic3BsbCIsIDAsIDEsIDEyKSwKPiArCUZBQ1RPUigwLCAiY2xrX3NwbGxfZGl2NiIsICJz cGxsIiwgMCwgMSwgNiksCj4gKwlGQUNUT1IoMCwgImNsa19zcGxsX2RpdjQiLCAic3BsbCIsIDAs IDEsIDQpLAo+ICsJRkFDVE9SKDAsICJjbGtfc3BsbF9kaXYyIiwgInNwbGwiLCAwLCAxLCAyKSwK CltTZXZlcml0eTogTWVkaXVtXQpXaWxsIHJlZ2lzdGVyaW5nIHRoZXNlIGZpeGVkLWZhY3RvciBi cmFuY2hlcyB3aXRoIGFuIGlkIG9mIDAgb3ZlcndyaXRlIHRoZQpwcGxsIGVudHJ5IGluIGN0eC0+ Y2xrX2RhdGEuY2xrc1swXT8KCkluIGluY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcm9ja2NoaXAs cmszNTcyLWNydS5oLCB0aGUgYmluZGluZyBpZCBmb3IgcHBsbAppcyAwOgoKICAgICNkZWZpbmUg UExMX1BQTEwJCQkJMAoKRHVyaW5nIHJrMzU3Ml9jbGtfaW5pdCgpIGluIGRyaXZlcnMvY2xrL3Jv Y2tjaGlwL2Nsay1yazM1NzIuYywKcm9ja2NoaXBfY2xrX3JlZ2lzdGVyX3BsbHMoKSBydW5zIGJl Zm9yZSByb2NrY2hpcF9jbGtfcmVnaXN0ZXJfYnJhbmNoZXMoKToKCiAgICByb2NrY2hpcF9jbGtf cmVnaXN0ZXJfcGxscyhjdHgsIHJrMzU3Ml9wbGxfY2xrcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFSUkFZX1NJWkUocmszNTcyX3BsbF9jbGtzKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJLMzU3Ml9HUkZfU09DX1NUQVRVUzApOwogICAgLi4uCiAgICByb2NrY2hp cF9jbGtfcmVnaXN0ZXJfYnJhbmNoZXMoY3R4LCByazM1NzJfY2xrX2JyYW5jaGVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUocmszNTcyX2Nsa19icmFuY2hl cykpOwoKV2hlbiByb2NrY2hpcF9jbGtfcmVnaXN0ZXJfYnJhbmNoZXMoKSBpdGVyYXRlcyBvdmVy IHJrMzU3Ml9jbGtfYnJhbmNoZXNbXSwKaXQgdW5jb25kaXRpb25hbGx5IGNhbGxzIHJvY2tjaGlw X2Nsa19zZXRfbG9va3VwKGN0eCwgY2xrLCBsaXN0LT5pZCkgaW4KZHJpdmVycy9jbGsvcm9ja2No aXAvY2xrLmg6CgogICAgc3RhdGljIGlubGluZSB2b2lkIHJvY2tjaGlwX2Nsa19zZXRfbG9va3Vw KHN0cnVjdCByb2NrY2hpcF9jbGtfcHJvdmlkZXIgKmN0eCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGludCBp ZCkKICAgIHsKICAgICAgICAgICAgY3R4LT5jbGtfZGF0YS5jbGtzW2lkXSA9IGNsazsKICAgIH0K CkJlY2F1c2UgeGluMTJtICh3aGljaCBhbHNvIGhhcyBubyBjb25zdW1lcnMgaW4gdGhpcyBmaWxl KSBhbmQKY2xrX3NwbGxfZGl2MTIsIGNsa19zcGxsX2RpdjYsIGNsa19zcGxsX2RpdjQsIGFuZCBj bGtfc3BsbF9kaXYyIGFsbCBwYXNzIDAKYXMgdGhlaXIgaWQsIHJvY2tjaGlwX2Nsa19yZWdpc3Rl cl9icmFuY2hlcygpIG92ZXJ3cml0ZXMKY3R4LT5jbGtfZGF0YS5jbGtzWzBdIHdpdGggY2xrX3Nw bGxfZGl2Mi4gQW55IGRldmljZSB0cmVlIGNvbnN1bWVyCnJlcXVlc3RpbmcgcHBsbCB3aWxsIHJl Y2VpdmUgY2xrX3NwbGxfZGl2MiBpbnN0ZWFkLgoKWyAuLi4gXQoKPiArCU1VWChDTEtfQVVESU9f RlJBQ18wX1NSQywgImNsa19hdWRpb19mcmFjXzBfc3JjIiwgZ3BsbF9jcGxsX2F1cGxsXzI0bV9w LCAwLAo+ICsJICAgIFJLMzU3Ml9DTEtTRUxfQ09OKDEzKSwgMCwgMiwgTUZMQUdTKSwKPiArCU1V WChDTEtfQVVESU9fRlJBQ18xX1NSQywgImNsa19hdWRpb19mcmFjXzFfc3JjIiwgZ3BsbF9jcGxs X2F1cGxsXzI0bV9wLCAwLAo+ICsJICAgIFJLMzU3Ml9DTEtTRUxfQ09OKDE1KSwgMCwgMiwgTUZM QUdTKSwKPiArCU1VWChDTEtfQVVESU9fRlJBQ18yX1NSQywgImNsa19hdWRpb19mcmFjXzJfc3Jj IiwgZ3BsbF9jcGxsX2F1cGxsXzI0bV9wLCAwLAo+ICsJICAgIFJLMzU3Ml9DTEtTRUxfQ09OKDE3 KSwgMCwgMiwgTUZMQUdTKSwKPiArCU1VWChDTEtfQVVESU9fRlJBQ18zX1NSQywgImNsa19hdWRp b19mcmFjXzNfc3JjIiwgZ3BsbF9jcGxsX2F1cGxsXzI0bV9wLCAwLAo+ICsJICAgIFJLMzU3Ml9D TEtTRUxfQ09OKDE5KSwgMCwgMiwgTUZMQUdTKSwKPiArCUNPTVBPU0lURV9GUkFDKENMS19BVURJ T19GUkFDXzMsICJjbGtfYXVkaW9fZnJhY18zIiwgImNsa19hdWRpb19mcmFjXzNfc3JjIiwgMCwK PiArCQkgICAgICAgUkszNTcyX0NMS1NFTF9DT04oMTgpLCAwLAo+ICsJCQlSSzM1NzJfQ0xLR0FU RV9DT04oMSksIDE0LCBHRkxBR1MpLAoKW1NldmVyaXR5OiBNZWRpdW1dCkFyZSB0aGUgZnJhY3Rp b25hbCBkaXZpZGVyIGRlZmluaXRpb25zIGZvciBjbGtfYXVkaW9fZnJhY18wLApjbGtfYXVkaW9f ZnJhY18xLCBhbmQgY2xrX2F1ZGlvX2ZyYWNfMiBtaXNzaW5nIGZyb20gcmszNTcyX2Nsa19icmFu Y2hlc1tdCmhlcmU/CgpJbiBpbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3JvY2tjaGlwLHJrMzU3 Mi1jcnUuaCwgYWxsIGZvdXIgZnJhY3Rpb25hbAphdWRpbyBjbG9ja3MgYW5kIHRoZWlyIHBhcmVu dCBtdXhlcyBhcmUgZGVmaW5lZDoKCiAgICAjZGVmaW5lIENMS19BVURJT19GUkFDXzAJCQkyNQog ICAgI2RlZmluZSBDTEtfQVVESU9fRlJBQ18xCQkJMjYKICAgICNkZWZpbmUgQ0xLX0FVRElPX0ZS QUNfMgkJCTI3CiAgICAjZGVmaW5lIENMS19BVURJT19GUkFDXzMJCQkyOAogICAgI2RlZmluZSBD TEtfQVVESU9fRlJBQ18wX1NSQwkJMjkKICAgICNkZWZpbmUgQ0xLX0FVRElPX0ZSQUNfMV9TUkMJ CTMwCiAgICAjZGVmaW5lIENMS19BVURJT19GUkFDXzJfU1JDCQkzMQogICAgI2RlZmluZSBDTEtf QVVESU9fRlJBQ18zX1NSQwkJMzIKCkhvd2V2ZXIsIHJrMzU3Ml9jbGtfYnJhbmNoZXNbXSBpbiBk cml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTcyLmMgb25seQpyZWdpc3RlcnMgdGhlIGZvdXIg c291cmNlIG11eGVzIChjbGtfYXVkaW9fZnJhY18wX3NyYyB0aHJvdWdoCmNsa19hdWRpb19mcmFj XzNfc3JjKSBhbmQgY2xrX2F1ZGlvX2ZyYWNfMywgb21pdHRpbmcgY2xrX2F1ZGlvX2ZyYWNfMCwK Y2xrX2F1ZGlvX2ZyYWNfMSwgYW5kIGNsa19hdWRpb19mcmFjXzIuCgpCZWNhdXNlIG11eF8yNG1f ZnJhY19pbnRfbWNsazRfcCwgbXV4XzI0bV9mcmFjX2ludF9tY2xraV9wLCBhbmQKbXV4XzI0bV9m cmFjX2ludF9tY2xraV9zY2xraV9wIGxpc3QgY2xrX2F1ZGlvX2ZyYWNfMCwgY2xrX2F1ZGlvX2Zy YWNfMSwgYW5kCmNsa19hdWRpb19mcmFjXzIgYXMgcGFyZW50cywgMTMgZG93bnN0cmVhbSBhdWRp byBjbG9ja3MgKGNsa19wZG0wX3NyY190b3AsCm1jbGtfYXNyYzBfc3JjXzAsIG1jbGtfYXNyYzFf c3JjXzEsIG1jbGtfcGRtMF9zcmNfdG9wLCBtY2xrX3NhaTAgdGhyb3VnaAptY2xrX3NhaTUsIGFu ZCBtY2xrX3NwZGlmX3R4MCB0aHJvdWdoIG1jbGtfc3BkaWZfdHgyKSB3aWxsIGZhaWwgdG8gcmVz b2x2ZQp0aG9zZSBwYXJlbnRzIHdoZW4gcmszNTcyX2Nsa19pbml0KCkgLT4gcm9ja2NoaXBfY2xr X3JlZ2lzdGVyX2JyYW5jaGVzKCkKcnVucywgYW5kIGRldmljZSB0cmVlIGxvb2t1cHMgZm9yIHRo b3NlIHRocmVlIGNsb2NrIGlkcyB3aWxsIGZhaWwgdG8gZmluZCBhCnJlZ2lzdGVyZWQgY2xvY2su CgpbIC4uLiBdCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8j L3BhdGNoc2V0LzIwMjYxMDIyLWFkZC1ib2FyZC1vazM1NzItYy12MS0wLTBiMGZkODVhMzFlZUBx cS5jb20/cGFydD03CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1waHkK