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=1793618299; b=IeUE17QmDzgHU33P2SWxDC7gbbo6FjqX7I01DTqOns2zQtL4s9nPN3VGwkhJzLDPk8q8 3eXoWdZQcjf5c80YiEGxL62QAPQVBYkyDrd9SCb6w+zoP8OnOO6GFbwKNIPdkZjAxh5y7 9YMoBvVneZN7ymgGuswsBGECErvkx+bZu+r/Vh380DedsTUyaqI5OYBfyPv8/nap6qit/ qtACTAVWpDfiBlwPZMSYYCUI9lwYaggFrg+t2QQi+22zFc3tJms8Vkz/0wXIqiFmz9cr8 i4YZNNAviy1ZIwAxQsiZvR0o2+3ACRhSykbgmzJleDNShQrrij7W06chbrvMlq5QgRA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793618299; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=0wHbwkyIp2jpgTD4783b7gznc0vB6QVgAcGDjNYbaJE=; b=un/Ht1djPZMEPCOMGMvmNN7tPYzqD2Yh1LBMVZlMLcUVnRC6ZBM2IXtpsNYV2yO8/+1q v+F09haVr8iFxHzKfUpp3+H9kPxtJ35KOXD0iLNuSkvJjZJb3qh+SP1zhGin4Ik1ZjEtN vHvFdLGIl1GaivBtho5x9/qtIgKI0e4UPOPkU2Q0alRAHMNgtbyIo7AXRBzEGOlovjWML NUNb0AbL7zRlna5nuqMRTszHyTvmdOdPdqWQLwhmM0JXbBIlETOiLxm2DnRCd+a2de+Gu Myn+6ToOybIz5VLqyk/jOgZ1GnIYUND44rO3cc7bSghqWgVAEKFdpT5OQzYC2Xwvolw== 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="l/XA7NAf"; 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 D027760A2630; Mon, 2 Nov 2026 11:18:18 +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=l/XA7NAf Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C92A1F00A16; Mon, 2 Nov 2026 11:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793618298; bh=0wHbwkyIp2jpgTD4783b7gznc0vB6QVgAcGDjNYbaJE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=l/XA7NAfKmmN5xqkQ96dray/l1fSKUCygTZyL6sBzth0z8yla5WWTlwsdwltBKExs gxtGJzSDS4nnoenKB1gR3+nJM4GA0/XNq/SO9J1r/EHR7HlD+lCaCNdvilmblK+ImD 2waINuB01veg+1yD75pUXuwatNDDDN5mgubUEovfpAAdSx/zanwe9ZHGOR5T4oXKHn MUbT1uhVGlGhQrSDi/a2ZyHvCwCVsHfwJ6RE1GQPL8IiQJNwLDeOaIxCkM1v135nQa v2A8ikxWw/6RQ8/Drlgoglwd3ysor8fzavQnvw25vigIjV1TzbnTbXQjnW8CQhcIP7 SqL+mE0xyaFGw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 1/2] i3c: master: svc: Add amlogic a9 support Reply-To: sashiko-reviews@lists.linux.dev To: "Junyi Zhao" Cc: linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, imx@lists.linux.dev, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, neil.armstrong@linaro.org, "Alexandre Belloni" In-Reply-To: <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> References: <20261102-a9_i3c-v2-0-0c474bfccffa@amlogic.com> <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Mon, 02 Nov 2026 11:18:17 +0000 X-Mailing-List: imx@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] i3c: master: svc: NULL dereference on unchecked devm_kcalloc() in = aml_ao_i3c_tail_clocks() - [High] i3c: master: svc: unclocked MMIO access to AML_AO_I3C_FCLK_DIV_CTR= L in aml_i3c_init() - [Low] i3c: master: svc: missing COMMON_CLK dependency for aml_ao_i3c_tail= _clocks() -- commit 5d539aa0589681cba0b31f37c581a2a552c6d504 Author: Junyi Zhao i3c: master: svc: Add amlogic a9 support This commit adds support for the Silvaco I3C master controller on Amlogic a9 SoCs (both EE-domain and AO-domain variants). It introduces a vendor_init callback and vendor_quirks to register the AO-domain internal clock divider chain and configure the fast_clk rate during probe. > diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc= -i3c-master.c > index e700392f0801f..98aa6eb0f49ca 100644 > --- a/drivers/i3c/master/svc-i3c-master.c > +++ b/drivers/i3c/master/svc-i3c-master.c > @@ -9,6 +9,7 @@ > =20 > #include > #include > +#include [ ... ] > @@ -2019,6 +2043,12 @@ static int svc_i3c_master_probe(struct platform_de= vice *pdev) > if (master->num_clks < 0) > return dev_err_probe(dev, -EINVAL, "can't get I3C clocks\n"); > =20 > + if (master->drvdata->vendor_init) { > + ret =3D master->drvdata->vendor_init(master); > + if (ret) > + return ret; > + } > + > for (i =3D 0; i < master->num_clks; i++) { > if (!strcmp(master->clks[i].id, "fast_clk")) > break; > @@ -2036,7 +2066,6 @@ static int svc_i3c_master_probe(struct platform_dev= ice *pdev) > if (master->irq < 0) > return master->irq; > =20 > - master->dev =3D dev; > ret =3D clk_bulk_prepare_enable(master->num_clks, master->clks); > if (ret) > return dev_err_probe(dev, ret, "can't enable I3C clocks\n"); > @@ -2163,9 +2192,184 @@ static const struct svc_i3c_drvdata npcm845_drvda= ta =3D { > =20 > static const struct svc_i3c_drvdata svc_default_drvdata =3D {}; > =20 > +/* > + * Container for the tail clocks of the AO domain variant. The clock HW > + * structures are registered with the clock framework and must stay alive > + * for the whole driver lifetime, so they are kept along with the shared > + * lock used by their gate/divider operations. > + */ > +struct aml_i3c_ao_clk { > + struct clk_gate div_en; > + struct clk_divider div; > + struct clk_gate gate; > + spinlock_t lock; > +}; > + > +/* > + * aml_ao_i3c_tail_clocks - register the internal divider chain that > + * produces the AO variant's fast_clk, and append it to the clk bulk > + * array as "fast_clk". @parent must be "pclk", the only clock the AO > + * variant exposes (see silvaco,i3c-master.yaml). > + */ > +static int aml_ao_i3c_tail_clocks(struct svc_i3c_master *master, struct = clk *parent) > +{ > + struct device *dev =3D master->dev; > + struct aml_i3c_ao_clk *ao; > + struct clk_init_data init =3D {}; > + char name[64]; > + int ret; > + struct clk_bulk_data *new_clks; > + struct clk *fclk; > + > + ao =3D devm_kzalloc(dev, sizeof(*ao), GFP_KERNEL); > + if (!ao) > + return -ENOMEM; > + > + spin_lock_init(&ao->lock); > + > + snprintf(name, sizeof(name), "%s#div_en", dev_name(dev)); > + init.name =3D name; > + init.ops =3D &clk_gate_ops; > + init.flags =3D CLK_IGNORE_UNUSED; > + init.parent_data =3D &(struct clk_parent_data) { > + .index =3D -1, > + .hw =3D __clk_get_hw(parent), > + }; > + init.num_parents =3D 1; > + > + ao->div_en.reg =3D master->regs + AML_AO_I3C_FCLK_DIV_CTRL; > + ao->div_en.bit_idx =3D AML_AO_I3C_FCLK_DIV_EN_SHIFT; > + ao->div_en.hw.init =3D &init; > + ao->div_en.lock =3D &ao->lock; > + > + ret =3D devm_clk_hw_register(dev, &ao->div_en.hw); > + if (ret) > + return dev_err_probe(dev, ret, "failed to register %s\n", name); > + > + snprintf(name, sizeof(name), "%s#div", dev_name(dev)); > + init.name =3D name; > + init.ops =3D &clk_divider_ops; > + init.flags =3D 0; > + init.parent_data =3D &(struct clk_parent_data) { > + .index =3D -1, > + .hw =3D &ao->div_en.hw, > + }; > + init.num_parents =3D 1; > + > + ao->div.reg =3D master->regs + AML_AO_I3C_FCLK_DIV_CTRL; > + ao->div.shift =3D AML_AO_I3C_FCLK_DIV_SHIFT; > + ao->div.width =3D AML_AO_I3C_FCLK_DIV_WIDTH; > + ao->div.hw.init =3D &init; > + ao->div.lock =3D &ao->lock; > + > + ret =3D devm_clk_hw_register(dev, &ao->div.hw); > + if (ret) > + return dev_err_probe(dev, ret, "failed to register %s\n", name); > + > + snprintf(name, sizeof(name), "%s#gate", dev_name(dev)); > + init.name =3D name; > + init.ops =3D &clk_gate_ops; > + init.flags =3D CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED; > + init.parent_data =3D &(struct clk_parent_data) { > + .index =3D -1, > + .hw =3D &ao->div.hw, > + }; > + init.num_parents =3D 1; > + > + ao->gate.reg =3D master->regs + AML_AO_I3C_FCLK_DIV_CTRL; > + ao->gate.bit_idx =3D AML_AO_I3C_FCLK_EN_SHIFT; > + ao->gate.hw.init =3D &init; > + ao->gate.lock =3D &ao->lock; > + > + ret =3D devm_clk_hw_register(dev, &ao->gate.hw); > + if (ret) > + return dev_err_probe(dev, ret, "failed to register %s\n", name); > + > + fclk =3D devm_clk_hw_get_clk(dev, &ao->gate.hw, NULL); > + if (IS_ERR(fclk)) > + return dev_err_probe(dev, PTR_ERR(fclk), > + "tail i3c fast clock failed\n"); [Severity: Low] Will this fail to link when the common clock framework is disabled? aml_ao_i3c_tail_clocks() unconditionally references clk_gate_ops, clk_divider_ops, devm_clk_hw_register(), and devm_clk_hw_get_clk(), which do not have stub definitions in include/linux/clk-provider.h when common clock support is not enabled. In drivers/i3c/master/Kconfig, the driver currently has: config SVC_I3C_MASTER tristate "Silvaco I3C Dual-Role Master driver" depends on HAS_IOMEM depends on !(ALPHA || PARISC) Should the Kconfig entry also depend on common clock support? > + > + new_clks =3D devm_kcalloc(dev, > + master->num_clks + 1, > + sizeof(*new_clks), > + GFP_KERNEL); > + memcpy(new_clks, master->clks, > + master->num_clks * sizeof(*master->clks)); > + new_clks[master->num_clks].id =3D "fast_clk"; > + new_clks[master->num_clks].clk =3D fclk; [Severity: High] What happens if devm_kcalloc() returns null in aml_ao_i3c_tail_clocks()? new_clks is passed directly to memcpy() and dereferenced at new_clks[master->num_clks] without checking whether the allocation succeede= d. Should this return -ENOMEM if !new_clks? > + master->clks =3D new_clks; > + master->num_clks++; > + > + return 0; > +} > + > +static int aml_i3c_init(struct svc_i3c_master *master) > +{ > + struct device *dev =3D master->dev; > + long fin_freq; > + int ret, i; > + struct clk *fclk; > + > + if (vendor_has_quirk(master, AML_I3C_QUIRK_AO)) { > + /* > + * clk_bulk_get_all() preserves the DT order, and the > + * binding restricts the AO variant to exactly one clock, > + * which is always "pclk". So clks[0] is the input of the > + * internal divider chain. > + */ > + ret =3D aml_ao_i3c_tail_clocks(master, master->clks[0].clk); > + if (ret) > + return ret; > + } > + > + for (i =3D 0; i < master->num_clks; i++) { > + if (!strcmp(master->clks[i].id, "fast_clk")) > + break; > + } > + > + if (i =3D=3D master->num_clks) > + return dev_err_probe(dev, -EINVAL, > + "can't get I3C fast clock\n"); > + > + fclk =3D master->clks[i].clk; > + if (IS_ERR(fclk)) > + return PTR_ERR(fclk); > + > + fin_freq =3D clk_round_rate(fclk, 25000000); > + if (fin_freq <=3D 0) { > + dev_err(dev, "invalid fast_clk\n"); > + return fin_freq ? fin_freq : -EINVAL; > + } > + > + ret =3D clk_set_rate(fclk, fin_freq); > + if (ret) > + return dev_err_probe(dev, ret, > + "setting fast_clk rate failed\n"); [Severity: High] On the AO variant, is it safe to access master->regs + AML_AO_I3C_FCLK_DIV_= CTRL before pclk is prepared and enabled? In svc_i3c_master_probe(), master->drvdata->vendor_init(master) is called r= ight after devm_clk_bulk_get_all(), before clk_bulk_prepare_enable() enables pclk and before pm_runtime_enable() is called: svc_i3c_master_probe() devm_clk_bulk_get_all() aml_i3c_init() aml_ao_i3c_tail_clocks() devm_clk_hw_register(&ao->div.hw) __clk_core_init() clk_divider_recalc_rate() clk_set_rate(fclk, fin_freq) clk_divider_set_rate() ... clk_bulk_prepare_enable() ... pm_runtime_enable() Both devm_clk_hw_register(&ao->div.hw) and clk_set_rate(fclk, fin_freq) read and write master->regs + AML_AO_I3C_FCLK_DIV_CTRL while pclk is still disabled, and none of the registered AO clocks set CLK_OPS_PARENT_ENABLE. In addition, because devm_clk_hw_register() runs before pm_runtime_enable(), runtime PM is not bound to the registered clocks, so reading debugfs clk_summary while the controller is runtime-suspended (and pclk is gated by svc_i3c_runtime_suspend()) will also read master->regs + AML_AO_I3C_FCLK_DIV_CTRL with pclk disabled. Should pclk be enabled before registering and programming the internal divi= der clocks (or should the AO clocks use CLK_OPS_PARENT_ENABLE / runtime PM)? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261102-a9_i3c-v2-= 0-0c474bfccffa@amlogic.com?part=3D1 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 EBEB460A3809 for ; Mon, 2 Nov 2026 11:18:20 +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=SQQnoEgz; 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=l/XA7NAf 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=RMVcFe/56rcfGTOGlwJyB+KUGsKY8nieEer2CCpGA8Q=; b=SQQnoEgzEu2YNdvwKyQB9BTE+U 1fnUqVS8QBmpw2CfdRD2qF0elixiIP+aFJCKUR80PgQr5gKKaB3m0rTXw3dfLdaPeO0ixOIcvJyCA 1Zmp9x1f7nk5SAXPpjid0tWFQJVV9XbRwuDVfwuADgmzzw9k7uhUvUlT9bNF4b4Dgti71Tih5XXP2 D433Y17P3hA8g+oSY3zQogZHjp5toyVRRlrSUiUFzu6uhxnf9xo/SsDwKvCtuo4v6Tno8WAbCuHq+ d4JFHWebev0rGv3PJzB/sIgcpz72OsdJyfKkPrLjdsUgwuKnVBEEihHfCeX6l+rNHFv/mVpBBRFSw vqU7zOdQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNq3Q-0000000GHq9-30Su; Mon, 02 Nov 2026 11:18:20 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNq3P-0000000GHpO-0Hbz; Mon, 02 Nov 2026 11:18:19 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9414E43AB7; Mon, 2 Nov 2026 11:18:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C92A1F00A16; Mon, 2 Nov 2026 11:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793618298; bh=0wHbwkyIp2jpgTD4783b7gznc0vB6QVgAcGDjNYbaJE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=l/XA7NAfKmmN5xqkQ96dray/l1fSKUCygTZyL6sBzth0z8yla5WWTlwsdwltBKExs gxtGJzSDS4nnoenKB1gR3+nJM4GA0/XNq/SO9J1r/EHR7HlD+lCaCNdvilmblK+ImD 2waINuB01veg+1yD75pUXuwatNDDDN5mgubUEovfpAAdSx/zanwe9ZHGOR5T4oXKHn MUbT1uhVGlGhQrSDi/a2ZyHvCwCVsHfwJ6RE1GQPL8IiQJNwLDeOaIxCkM1v135nQa v2A8ikxWw/6RQ8/Drlgoglwd3ysor8fzavQnvw25vigIjV1TzbnTbXQjnW8CQhcIP7 SqL+mE0xyaFGw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 1/2] i3c: master: svc: Add amlogic a9 support To: "Junyi Zhao" Cc: linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, imx@lists.linux.dev, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, neil.armstrong@linaro.org, "Alexandre Belloni" In-Reply-To: <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> References: <20261102-a9_i3c-v2-0-0c474bfccffa@amlogic.com> <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> Date: Mon, 02 Nov 2026 11:18:17 +0000 X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-i3c" 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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIGkzYzogbWFzdGVyOiBz dmM6IE5VTEwgZGVyZWZlcmVuY2Ugb24gdW5jaGVja2VkIGRldm1fa2NhbGxvYygpIGluIGFtbF9h b19pM2NfdGFpbF9jbG9ja3MoKQotIFtIaWdoXSBpM2M6IG1hc3Rlcjogc3ZjOiB1bmNsb2NrZWQg TU1JTyBhY2Nlc3MgdG8gQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIGluIGFtbF9pM2NfaW5pdCgp Ci0gW0xvd10gaTNjOiBtYXN0ZXI6IHN2YzogbWlzc2luZyBDT01NT05fQ0xLIGRlcGVuZGVuY3kg Zm9yIGFtbF9hb19pM2NfdGFpbF9jbG9ja3MoKQotLQoKY29tbWl0IDVkNTM5YWEwNTg5NjgxY2Jh MGIzMWYzN2M1ODFhMmE1NTJjNmQ1MDQKQXV0aG9yOiBKdW55aSBaaGFvIDxqdW55aS56aGFvQGFt bG9naWMuY29tPgoKaTNjOiBtYXN0ZXI6IHN2YzogQWRkIGFtbG9naWMgYTkgc3VwcG9ydAoKVGhp cyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgU2lsdmFjbyBJM0MgbWFzdGVyIGNvbnRyb2xs ZXIgb24gQW1sb2dpYwphOSBTb0NzIChib3RoIEVFLWRvbWFpbiBhbmQgQU8tZG9tYWluIHZhcmlh bnRzKS4gSXQgaW50cm9kdWNlcyBhCnZlbmRvcl9pbml0IGNhbGxiYWNrIGFuZCB2ZW5kb3JfcXVp cmtzIHRvIHJlZ2lzdGVyIHRoZSBBTy1kb21haW4gaW50ZXJuYWwKY2xvY2sgZGl2aWRlciBjaGFp biBhbmQgY29uZmlndXJlIHRoZSBmYXN0X2NsayByYXRlIGR1cmluZyBwcm9iZS4KCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jIGIvZHJpdmVycy9pM2Mv bWFzdGVyL3N2Yy1pM2MtbWFzdGVyLmMKPiBpbmRleCBlNzAwMzkyZjA4MDFmLi45OGFhNmViMGY0 OWNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jCj4g KysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL3N2Yy1pM2MtbWFzdGVyLmMKPiBAQCAtOSw2ICs5LDcg QEAKPiAgCj4gICNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICAjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KClsgLi4uIF0KCj4gQEAg LTIwMTksNiArMjA0MywxMiBAQCBzdGF0aWMgaW50IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlpZiAobWFzdGVyLT5udW1fY2xrcyA8IDApCj4g IAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAiY2FuJ3QgZ2V0IEkzQyBjbG9j a3NcbiIpOwo+ICAKPiArCWlmIChtYXN0ZXItPmRydmRhdGEtPnZlbmRvcl9pbml0KSB7Cj4gKwkJ cmV0ID0gbWFzdGVyLT5kcnZkYXRhLT52ZW5kb3JfaW5pdChtYXN0ZXIpOwo+ICsJCWlmIChyZXQp Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICAJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+ bnVtX2Nsa3M7IGkrKykgewo+ICAJCWlmICghc3RyY21wKG1hc3Rlci0+Y2xrc1tpXS5pZCwgImZh c3RfY2xrIikpCj4gIAkJCWJyZWFrOwo+IEBAIC0yMDM2LDcgKzIwNjYsNiBAQCBzdGF0aWMgaW50 IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlp ZiAobWFzdGVyLT5pcnEgPCAwKQo+ICAJCXJldHVybiBtYXN0ZXItPmlycTsKPiAgCj4gLQltYXN0 ZXItPmRldiA9IGRldjsKPiAgCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKG1hc3Rlci0+ bnVtX2Nsa3MsIG1hc3Rlci0+Y2xrcyk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiBkZXZfZXJy X3Byb2JlKGRldiwgcmV0LCAiY2FuJ3QgZW5hYmxlIEkzQyBjbG9ja3NcbiIpOwo+IEBAIC0yMTYz LDkgKzIxOTIsMTg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZjX2kzY19kcnZkYXRhIG5wY204 NDVfZHJ2ZGF0YSA9IHsKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZjX2kzY19kcnZkYXRh IHN2Y19kZWZhdWx0X2RydmRhdGEgPSB7fTsKPiAgCj4gKy8qCj4gKyAqIENvbnRhaW5lciBmb3Ig dGhlIHRhaWwgY2xvY2tzIG9mIHRoZSBBTyBkb21haW4gdmFyaWFudC4gVGhlIGNsb2NrIEhXCj4g KyAqIHN0cnVjdHVyZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2xvY2sgZnJhbWV3b3JrIGFu ZCBtdXN0IHN0YXkgYWxpdmUKPiArICogZm9yIHRoZSB3aG9sZSBkcml2ZXIgbGlmZXRpbWUsIHNv IHRoZXkgYXJlIGtlcHQgYWxvbmcgd2l0aCB0aGUgc2hhcmVkCj4gKyAqIGxvY2sgdXNlZCBieSB0 aGVpciBnYXRlL2RpdmlkZXIgb3BlcmF0aW9ucy4KPiArICovCj4gK3N0cnVjdCBhbWxfaTNjX2Fv X2NsayB7Cj4gKwlzdHJ1Y3QgY2xrX2dhdGUgZGl2X2VuOwo+ICsJc3RydWN0IGNsa19kaXZpZGVy IGRpdjsKPiArCXN0cnVjdCBjbGtfZ2F0ZSBnYXRlOwo+ICsJc3BpbmxvY2tfdCBsb2NrOwo+ICt9 Owo+ICsKPiArLyoKPiArICogYW1sX2FvX2kzY190YWlsX2Nsb2NrcyAtIHJlZ2lzdGVyIHRoZSBp bnRlcm5hbCBkaXZpZGVyIGNoYWluIHRoYXQKPiArICogcHJvZHVjZXMgdGhlIEFPIHZhcmlhbnQn cyBmYXN0X2NsaywgYW5kIGFwcGVuZCBpdCB0byB0aGUgY2xrIGJ1bGsKPiArICogYXJyYXkgYXMg ImZhc3RfY2xrIi4gIEBwYXJlbnQgbXVzdCBiZSAicGNsayIsIHRoZSBvbmx5IGNsb2NrIHRoZSBB Two+ICsgKiB2YXJpYW50IGV4cG9zZXMgKHNlZSBzaWx2YWNvLGkzYy1tYXN0ZXIueWFtbCkuCj4g KyAqLwo+ICtzdGF0aWMgaW50IGFtbF9hb19pM2NfdGFpbF9jbG9ja3Moc3RydWN0IHN2Y19pM2Nf bWFzdGVyICptYXN0ZXIsIHN0cnVjdCBjbGsgKnBhcmVudCkKPiArewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gbWFzdGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgYW1sX2kzY19hb19jbGsgKmFvOwo+ICsJ c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdCA9IHt9Owo+ICsJY2hhciBuYW1lWzY0XTsKPiArCWlu dCByZXQ7Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqbmV3X2Nsa3M7Cj4gKwlzdHJ1Y3QgY2xr ICpmY2xrOwo+ICsKPiArCWFvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCphbyksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFhbykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGluX2xv Y2tfaW5pdCgmYW8tPmxvY2spOwo+ICsKPiArCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwg IiVzI2Rpdl9lbiIsIGRldl9uYW1lKGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWlu aXQub3BzID0gJmNsa19nYXRlX29wczsKPiArCWluaXQuZmxhZ3MgPSBDTEtfSUdOT1JFX1VOVVNF RDsKPiArCWluaXQucGFyZW50X2RhdGEgPSAmKHN0cnVjdCBjbGtfcGFyZW50X2RhdGEpIHsKPiAr CQkuaW5kZXggPSAtMSwKPiArCQkuaHcgPSBfX2Nsa19nZXRfaHcocGFyZW50KSwKPiArCX07Cj4g Kwlpbml0Lm51bV9wYXJlbnRzID0gMTsKPiArCj4gKwlhby0+ZGl2X2VuLnJlZyA9IG1hc3Rlci0+ cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RSTDsKPiArCWFvLT5kaXZfZW4uYml0X2lkeCA9 IEFNTF9BT19JM0NfRkNMS19ESVZfRU5fU0hJRlQ7Cj4gKwlhby0+ZGl2X2VuLmh3LmluaXQgPSAm aW5pdDsKPiArCWFvLT5kaXZfZW4ubG9jayA9ICZhby0+bG9jazsKPiArCj4gKwlyZXQgPSBkZXZt X2Nsa19od19yZWdpc3RlcihkZXYsICZhby0+ZGl2X2VuLmh3KTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIs IG5hbWUpOwo+ICsKPiArCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzI2RpdiIsIGRl dl9uYW1lKGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWluaXQub3BzID0gJmNsa19k aXZpZGVyX29wczsKPiArCWluaXQuZmxhZ3MgPSAwOwo+ICsJaW5pdC5wYXJlbnRfZGF0YSA9ICYo c3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+ICsJCS5pbmRleCA9IC0xLAo+ICsJCS5odyA9ICZh by0+ZGl2X2VuLmh3LAo+ICsJfTsKPiArCWluaXQubnVtX3BhcmVudHMgPSAxOwo+ICsKPiArCWFv LT5kaXYucmVnID0gbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMOwo+ICsJ YW8tPmRpdi5zaGlmdCA9IEFNTF9BT19JM0NfRkNMS19ESVZfU0hJRlQ7Cj4gKwlhby0+ZGl2Lndp ZHRoID0gQU1MX0FPX0kzQ19GQ0xLX0RJVl9XSURUSDsKPiArCWFvLT5kaXYuaHcuaW5pdCA9ICZp bml0Owo+ICsJYW8tPmRpdi5sb2NrID0gJmFvLT5sb2NrOwo+ICsKPiArCXJldCA9IGRldm1fY2xr X2h3X3JlZ2lzdGVyKGRldiwgJmFvLT5kaXYuaHcpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgbmFtZSk7 Cj4gKwo+ICsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMjZ2F0ZSIsIGRldl9uYW1l KGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWluaXQub3BzID0gJmNsa19nYXRlX29w czsKPiArCWluaXQuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9VTlVT RUQ7Cj4gKwlpbml0LnBhcmVudF9kYXRhID0gJihzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4g KwkJLmluZGV4ID0gLTEsCj4gKwkJLmh3ID0gJmFvLT5kaXYuaHcsCj4gKwl9Owo+ICsJaW5pdC5u dW1fcGFyZW50cyA9IDE7Cj4gKwo+ICsJYW8tPmdhdGUucmVnID0gbWFzdGVyLT5yZWdzICsgQU1M X0FPX0kzQ19GQ0xLX0RJVl9DVFJMOwo+ICsJYW8tPmdhdGUuYml0X2lkeCA9IEFNTF9BT19JM0Nf RkNMS19FTl9TSElGVDsKPiArCWFvLT5nYXRlLmh3LmluaXQgPSAmaW5pdDsKPiArCWFvLT5nYXRl LmxvY2sgPSAmYW8tPmxvY2s7Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2 LCAmYW8tPmdhdGUuaHcpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIHJldCwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgbmFtZSk7Cj4gKwo+ICsJZmNsayA9 IGRldm1fY2xrX2h3X2dldF9jbGsoZGV2LCAmYW8tPmdhdGUuaHcsIE5VTEwpOwo+ICsJaWYgKElT X0VSUihmY2xrKSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZmNsayks Cj4gKwkJCQkgICAgICJ0YWlsIGkzYyBmYXN0IGNsb2NrIGZhaWxlZFxuIik7CgpbU2V2ZXJpdHk6 IExvd10KV2lsbCB0aGlzIGZhaWwgdG8gbGluayB3aGVuIHRoZSBjb21tb24gY2xvY2sgZnJhbWV3 b3JrIGlzIGRpc2FibGVkPwoKYW1sX2FvX2kzY190YWlsX2Nsb2NrcygpIHVuY29uZGl0aW9uYWxs eSByZWZlcmVuY2VzIGNsa19nYXRlX29wcywKY2xrX2RpdmlkZXJfb3BzLCBkZXZtX2Nsa19od19y ZWdpc3RlcigpLCBhbmQgZGV2bV9jbGtfaHdfZ2V0X2NsaygpLCB3aGljaCBkbwpub3QgaGF2ZSBz dHViIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvY2xrLXByb3ZpZGVyLmggd2hlbiBjb21t b24gY2xvY2sKc3VwcG9ydCBpcyBub3QgZW5hYmxlZC4KCkluIGRyaXZlcnMvaTNjL21hc3Rlci9L Y29uZmlnLCB0aGUgZHJpdmVyIGN1cnJlbnRseSBoYXM6CgogICAgY29uZmlnIFNWQ19JM0NfTUFT VEVSCiAgICAgICAgdHJpc3RhdGUgIlNpbHZhY28gSTNDIER1YWwtUm9sZSBNYXN0ZXIgZHJpdmVy IgogICAgICAgIGRlcGVuZHMgb24gSEFTX0lPTUVNCiAgICAgICAgZGVwZW5kcyBvbiAhKEFMUEhB IHx8IFBBUklTQykKClNob3VsZCB0aGUgS2NvbmZpZyBlbnRyeSBhbHNvIGRlcGVuZCBvbiBjb21t b24gY2xvY2sgc3VwcG9ydD8KCj4gKwo+ICsJbmV3X2Nsa3MgPSBkZXZtX2tjYWxsb2MoZGV2LAo+ ICsJCQkJbWFzdGVyLT5udW1fY2xrcyArIDEsCj4gKwkJCQlzaXplb2YoKm5ld19jbGtzKSwKPiAr CQkJCUdGUF9LRVJORUwpOwo+ICsJbWVtY3B5KG5ld19jbGtzLCBtYXN0ZXItPmNsa3MsCj4gKwkJ CW1hc3Rlci0+bnVtX2Nsa3MgKiBzaXplb2YoKm1hc3Rlci0+Y2xrcykpOwo+ICsJbmV3X2Nsa3Nb bWFzdGVyLT5udW1fY2xrc10uaWQgPSAiZmFzdF9jbGsiOwo+ICsJbmV3X2Nsa3NbbWFzdGVyLT5u dW1fY2xrc10uY2xrID0gZmNsazsKCltTZXZlcml0eTogSGlnaF0KV2hhdCBoYXBwZW5zIGlmIGRl dm1fa2NhbGxvYygpIHJldHVybnMgbnVsbCBpbiBhbWxfYW9faTNjX3RhaWxfY2xvY2tzKCk/Cgpu ZXdfY2xrcyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gbWVtY3B5KCkgYW5kIGRlcmVmZXJlbmNlZCBh dApuZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXSB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgdGhl IGFsbG9jYXRpb24gc3VjY2VlZGVkLgpTaG91bGQgdGhpcyByZXR1cm4gLUVOT01FTSBpZiAhbmV3 X2Nsa3M/Cgo+ICsJbWFzdGVyLT5jbGtzID0gbmV3X2Nsa3M7Cj4gKwltYXN0ZXItPm51bV9jbGtz Kys7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYW1sX2kzY19pbml0 KHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBtYXN0ZXItPmRldjsKPiArCWxvbmcgZmluX2ZyZXE7Cj4gKwlpbnQgcmV0LCBpOwo+ICsJ c3RydWN0IGNsayAqZmNsazsKPiArCj4gKwlpZiAodmVuZG9yX2hhc19xdWlyayhtYXN0ZXIsIEFN TF9JM0NfUVVJUktfQU8pKSB7Cj4gKwkJLyoKPiArCQkgKiBjbGtfYnVsa19nZXRfYWxsKCkgcHJl c2VydmVzIHRoZSBEVCBvcmRlciwgYW5kIHRoZQo+ICsJCSAqIGJpbmRpbmcgcmVzdHJpY3RzIHRo ZSBBTyB2YXJpYW50IHRvIGV4YWN0bHkgb25lIGNsb2NrLAo+ICsJCSAqIHdoaWNoIGlzIGFsd2F5 cyAicGNsayIuICBTbyBjbGtzWzBdIGlzIHRoZSBpbnB1dCBvZiB0aGUKPiArCQkgKiBpbnRlcm5h bCBkaXZpZGVyIGNoYWluLgo+ICsJCSAqLwo+ICsJCXJldCA9IGFtbF9hb19pM2NfdGFpbF9jbG9j a3MobWFzdGVyLCBtYXN0ZXItPmNsa3NbMF0uY2xrKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jbGtzOyBp KyspIHsKPiArCQlpZiAoIXN0cmNtcChtYXN0ZXItPmNsa3NbaV0uaWQsICJmYXN0X2NsayIpKQo+ ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAoaSA9PSBtYXN0ZXItPm51bV9jbGtzKQo+ICsJ CXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiArCQkJCSAgICAgImNhbid0IGdl dCBJM0MgZmFzdCBjbG9ja1xuIik7Cj4gKwo+ICsJZmNsayA9IG1hc3Rlci0+Y2xrc1tpXS5jbGs7 Cj4gKwlpZiAoSVNfRVJSKGZjbGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGZjbGspOwo+ICsKPiAr CWZpbl9mcmVxID0gY2xrX3JvdW5kX3JhdGUoZmNsaywgMjUwMDAwMDApOwo+ICsJaWYgKGZpbl9m cmVxIDw9IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImludmFsaWQgZmFzdF9jbGtcbiIpOwo+ICsJ CXJldHVybiBmaW5fZnJlcSA/IGZpbl9mcmVxIDogLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQg PSBjbGtfc2V0X3JhdGUoZmNsaywgZmluX2ZyZXEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKPiArCQkJCSAgICAgInNldHRpbmcgZmFzdF9jbGsgcmF0 ZSBmYWlsZWRcbiIpOwoKW1NldmVyaXR5OiBIaWdoXQpPbiB0aGUgQU8gdmFyaWFudCwgaXMgaXQg c2FmZSB0byBhY2Nlc3MgbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMCmJl Zm9yZSBwY2xrIGlzIHByZXBhcmVkIGFuZCBlbmFibGVkPwoKSW4gc3ZjX2kzY19tYXN0ZXJfcHJv YmUoKSwgbWFzdGVyLT5kcnZkYXRhLT52ZW5kb3JfaW5pdChtYXN0ZXIpIGlzIGNhbGxlZCByaWdo dAphZnRlciBkZXZtX2Nsa19idWxrX2dldF9hbGwoKSwgYmVmb3JlIGNsa19idWxrX3ByZXBhcmVf ZW5hYmxlKCkgZW5hYmxlcyBwY2xrCmFuZCBiZWZvcmUgcG1fcnVudGltZV9lbmFibGUoKSBpcyBj YWxsZWQ6CgogICAgc3ZjX2kzY19tYXN0ZXJfcHJvYmUoKQogICAgICAgIGRldm1fY2xrX2J1bGtf Z2V0X2FsbCgpCiAgICAgICAgYW1sX2kzY19pbml0KCkKICAgICAgICAgICAgYW1sX2FvX2kzY190 YWlsX2Nsb2NrcygpCiAgICAgICAgICAgICAgICBkZXZtX2Nsa19od19yZWdpc3RlcigmYW8tPmRp di5odykKICAgICAgICAgICAgICAgICAgICBfX2Nsa19jb3JlX2luaXQoKQogICAgICAgICAgICAg ICAgICAgICAgICBjbGtfZGl2aWRlcl9yZWNhbGNfcmF0ZSgpCiAgICAgICAgICAgIGNsa19zZXRf cmF0ZShmY2xrLCBmaW5fZnJlcSkKICAgICAgICAgICAgICAgIGNsa19kaXZpZGVyX3NldF9yYXRl KCkKICAgICAgICAuLi4KICAgICAgICBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZSgpCiAgICAgICAg Li4uCiAgICAgICAgcG1fcnVudGltZV9lbmFibGUoKQoKQm90aCBkZXZtX2Nsa19od19yZWdpc3Rl cigmYW8tPmRpdi5odykgYW5kIGNsa19zZXRfcmF0ZShmY2xrLCBmaW5fZnJlcSkgcmVhZAphbmQg d3JpdGUgbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdoaWxlIHBjbGsg aXMgc3RpbGwKZGlzYWJsZWQsIGFuZCBub25lIG9mIHRoZSByZWdpc3RlcmVkIEFPIGNsb2NrcyBz ZXQgQ0xLX09QU19QQVJFTlRfRU5BQkxFLgoKSW4gYWRkaXRpb24sIGJlY2F1c2UgZGV2bV9jbGtf aHdfcmVnaXN0ZXIoKSBydW5zIGJlZm9yZSBwbV9ydW50aW1lX2VuYWJsZSgpLApydW50aW1lIFBN IGlzIG5vdCBib3VuZCB0byB0aGUgcmVnaXN0ZXJlZCBjbG9ja3MsIHNvIHJlYWRpbmcgZGVidWdm cwpjbGtfc3VtbWFyeSB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBydW50aW1lLXN1c3BlbmRlZCAo YW5kIHBjbGsgaXMgZ2F0ZWQgYnkKc3ZjX2kzY19ydW50aW1lX3N1c3BlbmQoKSkgd2lsbCBhbHNv IHJlYWQgbWFzdGVyLT5yZWdzICsKQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdpdGggcGNsayBk aXNhYmxlZC4KClNob3VsZCBwY2xrIGJlIGVuYWJsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIGFuZCBw cm9ncmFtbWluZyB0aGUgaW50ZXJuYWwgZGl2aWRlcgpjbG9ja3MgKG9yIHNob3VsZCB0aGUgQU8g Y2xvY2tzIHVzZSBDTEtfT1BTX1BBUkVOVF9FTkFCTEUgLyBydW50aW1lIFBNKT8KCi0tIApTYXNo aWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjExMDIt YTlfaTNjLXYyLTAtMGM0NzRiZmNjZmZhQGFtbG9naWMuY29tP3BhcnQ9MQoKLS0gCmxpbnV4LWkz YyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK 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 BEA9E60A2615 for ; Mon, 2 Nov 2026 11:18:20 +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=EUT583Ou; 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=l/XA7NAf 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=NOHvkMhM+hutgg6MDVDrirGf85807c5hwDTQnR/j4Yk=; b=EUT583Ou7k4HpgHYZz7vdEVGXI yXNfZU+bi00ekUW+L8/fw7y4mt06sLvW0sqI60nNQDRDYFiUTkp9m5ly+bJuVS/bL0MZHSVqZI21N jylHtzgAbvi3BCBVPiVCowRfJBeq1c7U/ekZOmfzzPVisTjSnUxJDM1QfyL1vmH1yXzzeuWlsBCMo 9ikD2lebeQTtAAsMyeNuE817WR08qTiA2ivPD2dNv7NIYYsBmTniKDUTzJbsMVBrNAhOX6GJlD4nH KvscSEqVxCuahSyvJA2/b5kkx3L138Zvy/vKstoEONZKe8XcvmURdMibL0TAH4BMmApjPegaW9O4Y aLVFqBoQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNq3P-0000000GHpj-2mez; Mon, 02 Nov 2026 11:18:19 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNq3P-0000000GHpO-0Hbz; Mon, 02 Nov 2026 11:18:19 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9414E43AB7; Mon, 2 Nov 2026 11:18:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C92A1F00A16; Mon, 2 Nov 2026 11:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793618298; bh=0wHbwkyIp2jpgTD4783b7gznc0vB6QVgAcGDjNYbaJE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=l/XA7NAfKmmN5xqkQ96dray/l1fSKUCygTZyL6sBzth0z8yla5WWTlwsdwltBKExs gxtGJzSDS4nnoenKB1gR3+nJM4GA0/XNq/SO9J1r/EHR7HlD+lCaCNdvilmblK+ImD 2waINuB01veg+1yD75pUXuwatNDDDN5mgubUEovfpAAdSx/zanwe9ZHGOR5T4oXKHn MUbT1uhVGlGhQrSDi/a2ZyHvCwCVsHfwJ6RE1GQPL8IiQJNwLDeOaIxCkM1v135nQa v2A8ikxWw/6RQ8/Drlgoglwd3ysor8fzavQnvw25vigIjV1TzbnTbXQjnW8CQhcIP7 SqL+mE0xyaFGw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 1/2] i3c: master: svc: Add amlogic a9 support To: "Junyi Zhao" Cc: linux-i3c@lists.infradead.org, devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, imx@lists.linux.dev, robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, neil.armstrong@linaro.org, "Alexandre Belloni" In-Reply-To: <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> References: <20261102-a9_i3c-v2-0-0c474bfccffa@amlogic.com> <20261102-a9_i3c-v2-1-0c474bfccffa@amlogic.com> Date: Mon, 02 Nov 2026 11:18:17 +0000 X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-amlogic" 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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIGkzYzogbWFzdGVyOiBz dmM6IE5VTEwgZGVyZWZlcmVuY2Ugb24gdW5jaGVja2VkIGRldm1fa2NhbGxvYygpIGluIGFtbF9h b19pM2NfdGFpbF9jbG9ja3MoKQotIFtIaWdoXSBpM2M6IG1hc3Rlcjogc3ZjOiB1bmNsb2NrZWQg TU1JTyBhY2Nlc3MgdG8gQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIGluIGFtbF9pM2NfaW5pdCgp Ci0gW0xvd10gaTNjOiBtYXN0ZXI6IHN2YzogbWlzc2luZyBDT01NT05fQ0xLIGRlcGVuZGVuY3kg Zm9yIGFtbF9hb19pM2NfdGFpbF9jbG9ja3MoKQotLQoKY29tbWl0IDVkNTM5YWEwNTg5NjgxY2Jh MGIzMWYzN2M1ODFhMmE1NTJjNmQ1MDQKQXV0aG9yOiBKdW55aSBaaGFvIDxqdW55aS56aGFvQGFt bG9naWMuY29tPgoKaTNjOiBtYXN0ZXI6IHN2YzogQWRkIGFtbG9naWMgYTkgc3VwcG9ydAoKVGhp cyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgU2lsdmFjbyBJM0MgbWFzdGVyIGNvbnRyb2xs ZXIgb24gQW1sb2dpYwphOSBTb0NzIChib3RoIEVFLWRvbWFpbiBhbmQgQU8tZG9tYWluIHZhcmlh bnRzKS4gSXQgaW50cm9kdWNlcyBhCnZlbmRvcl9pbml0IGNhbGxiYWNrIGFuZCB2ZW5kb3JfcXVp cmtzIHRvIHJlZ2lzdGVyIHRoZSBBTy1kb21haW4gaW50ZXJuYWwKY2xvY2sgZGl2aWRlciBjaGFp biBhbmQgY29uZmlndXJlIHRoZSBmYXN0X2NsayByYXRlIGR1cmluZyBwcm9iZS4KCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jIGIvZHJpdmVycy9pM2Mv bWFzdGVyL3N2Yy1pM2MtbWFzdGVyLmMKPiBpbmRleCBlNzAwMzkyZjA4MDFmLi45OGFhNmViMGY0 OWNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jCj4g KysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL3N2Yy1pM2MtbWFzdGVyLmMKPiBAQCAtOSw2ICs5LDcg QEAKPiAgCj4gICNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICAjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KClsgLi4uIF0KCj4gQEAg LTIwMTksNiArMjA0MywxMiBAQCBzdGF0aWMgaW50IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlpZiAobWFzdGVyLT5udW1fY2xrcyA8IDApCj4g IAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAiY2FuJ3QgZ2V0IEkzQyBjbG9j a3NcbiIpOwo+ICAKPiArCWlmIChtYXN0ZXItPmRydmRhdGEtPnZlbmRvcl9pbml0KSB7Cj4gKwkJ cmV0ID0gbWFzdGVyLT5kcnZkYXRhLT52ZW5kb3JfaW5pdChtYXN0ZXIpOwo+ICsJCWlmIChyZXQp Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICAJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+ bnVtX2Nsa3M7IGkrKykgewo+ICAJCWlmICghc3RyY21wKG1hc3Rlci0+Y2xrc1tpXS5pZCwgImZh c3RfY2xrIikpCj4gIAkJCWJyZWFrOwo+IEBAIC0yMDM2LDcgKzIwNjYsNiBAQCBzdGF0aWMgaW50 IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlp ZiAobWFzdGVyLT5pcnEgPCAwKQo+ICAJCXJldHVybiBtYXN0ZXItPmlycTsKPiAgCj4gLQltYXN0 ZXItPmRldiA9IGRldjsKPiAgCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKG1hc3Rlci0+ bnVtX2Nsa3MsIG1hc3Rlci0+Y2xrcyk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiBkZXZfZXJy X3Byb2JlKGRldiwgcmV0LCAiY2FuJ3QgZW5hYmxlIEkzQyBjbG9ja3NcbiIpOwo+IEBAIC0yMTYz LDkgKzIxOTIsMTg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZjX2kzY19kcnZkYXRhIG5wY204 NDVfZHJ2ZGF0YSA9IHsKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZjX2kzY19kcnZkYXRh IHN2Y19kZWZhdWx0X2RydmRhdGEgPSB7fTsKPiAgCj4gKy8qCj4gKyAqIENvbnRhaW5lciBmb3Ig dGhlIHRhaWwgY2xvY2tzIG9mIHRoZSBBTyBkb21haW4gdmFyaWFudC4gVGhlIGNsb2NrIEhXCj4g KyAqIHN0cnVjdHVyZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2xvY2sgZnJhbWV3b3JrIGFu ZCBtdXN0IHN0YXkgYWxpdmUKPiArICogZm9yIHRoZSB3aG9sZSBkcml2ZXIgbGlmZXRpbWUsIHNv IHRoZXkgYXJlIGtlcHQgYWxvbmcgd2l0aCB0aGUgc2hhcmVkCj4gKyAqIGxvY2sgdXNlZCBieSB0 aGVpciBnYXRlL2RpdmlkZXIgb3BlcmF0aW9ucy4KPiArICovCj4gK3N0cnVjdCBhbWxfaTNjX2Fv X2NsayB7Cj4gKwlzdHJ1Y3QgY2xrX2dhdGUgZGl2X2VuOwo+ICsJc3RydWN0IGNsa19kaXZpZGVy IGRpdjsKPiArCXN0cnVjdCBjbGtfZ2F0ZSBnYXRlOwo+ICsJc3BpbmxvY2tfdCBsb2NrOwo+ICt9 Owo+ICsKPiArLyoKPiArICogYW1sX2FvX2kzY190YWlsX2Nsb2NrcyAtIHJlZ2lzdGVyIHRoZSBp bnRlcm5hbCBkaXZpZGVyIGNoYWluIHRoYXQKPiArICogcHJvZHVjZXMgdGhlIEFPIHZhcmlhbnQn cyBmYXN0X2NsaywgYW5kIGFwcGVuZCBpdCB0byB0aGUgY2xrIGJ1bGsKPiArICogYXJyYXkgYXMg ImZhc3RfY2xrIi4gIEBwYXJlbnQgbXVzdCBiZSAicGNsayIsIHRoZSBvbmx5IGNsb2NrIHRoZSBB Two+ICsgKiB2YXJpYW50IGV4cG9zZXMgKHNlZSBzaWx2YWNvLGkzYy1tYXN0ZXIueWFtbCkuCj4g KyAqLwo+ICtzdGF0aWMgaW50IGFtbF9hb19pM2NfdGFpbF9jbG9ja3Moc3RydWN0IHN2Y19pM2Nf bWFzdGVyICptYXN0ZXIsIHN0cnVjdCBjbGsgKnBhcmVudCkKPiArewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gbWFzdGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgYW1sX2kzY19hb19jbGsgKmFvOwo+ICsJ c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdCA9IHt9Owo+ICsJY2hhciBuYW1lWzY0XTsKPiArCWlu dCByZXQ7Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqbmV3X2Nsa3M7Cj4gKwlzdHJ1Y3QgY2xr ICpmY2xrOwo+ICsKPiArCWFvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCphbyksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFhbykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGluX2xv Y2tfaW5pdCgmYW8tPmxvY2spOwo+ICsKPiArCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwg IiVzI2Rpdl9lbiIsIGRldl9uYW1lKGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWlu aXQub3BzID0gJmNsa19nYXRlX29wczsKPiArCWluaXQuZmxhZ3MgPSBDTEtfSUdOT1JFX1VOVVNF RDsKPiArCWluaXQucGFyZW50X2RhdGEgPSAmKHN0cnVjdCBjbGtfcGFyZW50X2RhdGEpIHsKPiAr CQkuaW5kZXggPSAtMSwKPiArCQkuaHcgPSBfX2Nsa19nZXRfaHcocGFyZW50KSwKPiArCX07Cj4g Kwlpbml0Lm51bV9wYXJlbnRzID0gMTsKPiArCj4gKwlhby0+ZGl2X2VuLnJlZyA9IG1hc3Rlci0+ cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RSTDsKPiArCWFvLT5kaXZfZW4uYml0X2lkeCA9 IEFNTF9BT19JM0NfRkNMS19ESVZfRU5fU0hJRlQ7Cj4gKwlhby0+ZGl2X2VuLmh3LmluaXQgPSAm aW5pdDsKPiArCWFvLT5kaXZfZW4ubG9jayA9ICZhby0+bG9jazsKPiArCj4gKwlyZXQgPSBkZXZt X2Nsa19od19yZWdpc3RlcihkZXYsICZhby0+ZGl2X2VuLmh3KTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIs IG5hbWUpOwo+ICsKPiArCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzI2RpdiIsIGRl dl9uYW1lKGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWluaXQub3BzID0gJmNsa19k aXZpZGVyX29wczsKPiArCWluaXQuZmxhZ3MgPSAwOwo+ICsJaW5pdC5wYXJlbnRfZGF0YSA9ICYo c3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+ICsJCS5pbmRleCA9IC0xLAo+ICsJCS5odyA9ICZh by0+ZGl2X2VuLmh3LAo+ICsJfTsKPiArCWluaXQubnVtX3BhcmVudHMgPSAxOwo+ICsKPiArCWFv LT5kaXYucmVnID0gbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMOwo+ICsJ YW8tPmRpdi5zaGlmdCA9IEFNTF9BT19JM0NfRkNMS19ESVZfU0hJRlQ7Cj4gKwlhby0+ZGl2Lndp ZHRoID0gQU1MX0FPX0kzQ19GQ0xLX0RJVl9XSURUSDsKPiArCWFvLT5kaXYuaHcuaW5pdCA9ICZp bml0Owo+ICsJYW8tPmRpdi5sb2NrID0gJmFvLT5sb2NrOwo+ICsKPiArCXJldCA9IGRldm1fY2xr X2h3X3JlZ2lzdGVyKGRldiwgJmFvLT5kaXYuaHcpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgbmFtZSk7 Cj4gKwo+ICsJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMjZ2F0ZSIsIGRldl9uYW1l KGRldikpOwo+ICsJaW5pdC5uYW1lID0gbmFtZTsKPiArCWluaXQub3BzID0gJmNsa19nYXRlX29w czsKPiArCWluaXQuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX0lHTk9SRV9VTlVT RUQ7Cj4gKwlpbml0LnBhcmVudF9kYXRhID0gJihzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4g KwkJLmluZGV4ID0gLTEsCj4gKwkJLmh3ID0gJmFvLT5kaXYuaHcsCj4gKwl9Owo+ICsJaW5pdC5u dW1fcGFyZW50cyA9IDE7Cj4gKwo+ICsJYW8tPmdhdGUucmVnID0gbWFzdGVyLT5yZWdzICsgQU1M X0FPX0kzQ19GQ0xLX0RJVl9DVFJMOwo+ICsJYW8tPmdhdGUuYml0X2lkeCA9IEFNTF9BT19JM0Nf RkNMS19FTl9TSElGVDsKPiArCWFvLT5nYXRlLmh3LmluaXQgPSAmaW5pdDsKPiArCWFvLT5nYXRl LmxvY2sgPSAmYW8tPmxvY2s7Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2 LCAmYW8tPmdhdGUuaHcpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIHJldCwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgbmFtZSk7Cj4gKwo+ICsJZmNsayA9 IGRldm1fY2xrX2h3X2dldF9jbGsoZGV2LCAmYW8tPmdhdGUuaHcsIE5VTEwpOwo+ICsJaWYgKElT X0VSUihmY2xrKSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZmNsayks Cj4gKwkJCQkgICAgICJ0YWlsIGkzYyBmYXN0IGNsb2NrIGZhaWxlZFxuIik7CgpbU2V2ZXJpdHk6 IExvd10KV2lsbCB0aGlzIGZhaWwgdG8gbGluayB3aGVuIHRoZSBjb21tb24gY2xvY2sgZnJhbWV3 b3JrIGlzIGRpc2FibGVkPwoKYW1sX2FvX2kzY190YWlsX2Nsb2NrcygpIHVuY29uZGl0aW9uYWxs eSByZWZlcmVuY2VzIGNsa19nYXRlX29wcywKY2xrX2RpdmlkZXJfb3BzLCBkZXZtX2Nsa19od19y ZWdpc3RlcigpLCBhbmQgZGV2bV9jbGtfaHdfZ2V0X2NsaygpLCB3aGljaCBkbwpub3QgaGF2ZSBz dHViIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvY2xrLXByb3ZpZGVyLmggd2hlbiBjb21t b24gY2xvY2sKc3VwcG9ydCBpcyBub3QgZW5hYmxlZC4KCkluIGRyaXZlcnMvaTNjL21hc3Rlci9L Y29uZmlnLCB0aGUgZHJpdmVyIGN1cnJlbnRseSBoYXM6CgogICAgY29uZmlnIFNWQ19JM0NfTUFT VEVSCiAgICAgICAgdHJpc3RhdGUgIlNpbHZhY28gSTNDIER1YWwtUm9sZSBNYXN0ZXIgZHJpdmVy IgogICAgICAgIGRlcGVuZHMgb24gSEFTX0lPTUVNCiAgICAgICAgZGVwZW5kcyBvbiAhKEFMUEhB IHx8IFBBUklTQykKClNob3VsZCB0aGUgS2NvbmZpZyBlbnRyeSBhbHNvIGRlcGVuZCBvbiBjb21t b24gY2xvY2sgc3VwcG9ydD8KCj4gKwo+ICsJbmV3X2Nsa3MgPSBkZXZtX2tjYWxsb2MoZGV2LAo+ ICsJCQkJbWFzdGVyLT5udW1fY2xrcyArIDEsCj4gKwkJCQlzaXplb2YoKm5ld19jbGtzKSwKPiAr CQkJCUdGUF9LRVJORUwpOwo+ICsJbWVtY3B5KG5ld19jbGtzLCBtYXN0ZXItPmNsa3MsCj4gKwkJ CW1hc3Rlci0+bnVtX2Nsa3MgKiBzaXplb2YoKm1hc3Rlci0+Y2xrcykpOwo+ICsJbmV3X2Nsa3Nb bWFzdGVyLT5udW1fY2xrc10uaWQgPSAiZmFzdF9jbGsiOwo+ICsJbmV3X2Nsa3NbbWFzdGVyLT5u dW1fY2xrc10uY2xrID0gZmNsazsKCltTZXZlcml0eTogSGlnaF0KV2hhdCBoYXBwZW5zIGlmIGRl dm1fa2NhbGxvYygpIHJldHVybnMgbnVsbCBpbiBhbWxfYW9faTNjX3RhaWxfY2xvY2tzKCk/Cgpu ZXdfY2xrcyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gbWVtY3B5KCkgYW5kIGRlcmVmZXJlbmNlZCBh dApuZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXSB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgdGhl IGFsbG9jYXRpb24gc3VjY2VlZGVkLgpTaG91bGQgdGhpcyByZXR1cm4gLUVOT01FTSBpZiAhbmV3 X2Nsa3M/Cgo+ICsJbWFzdGVyLT5jbGtzID0gbmV3X2Nsa3M7Cj4gKwltYXN0ZXItPm51bV9jbGtz Kys7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYW1sX2kzY19pbml0 KHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBtYXN0ZXItPmRldjsKPiArCWxvbmcgZmluX2ZyZXE7Cj4gKwlpbnQgcmV0LCBpOwo+ICsJ c3RydWN0IGNsayAqZmNsazsKPiArCj4gKwlpZiAodmVuZG9yX2hhc19xdWlyayhtYXN0ZXIsIEFN TF9JM0NfUVVJUktfQU8pKSB7Cj4gKwkJLyoKPiArCQkgKiBjbGtfYnVsa19nZXRfYWxsKCkgcHJl c2VydmVzIHRoZSBEVCBvcmRlciwgYW5kIHRoZQo+ICsJCSAqIGJpbmRpbmcgcmVzdHJpY3RzIHRo ZSBBTyB2YXJpYW50IHRvIGV4YWN0bHkgb25lIGNsb2NrLAo+ICsJCSAqIHdoaWNoIGlzIGFsd2F5 cyAicGNsayIuICBTbyBjbGtzWzBdIGlzIHRoZSBpbnB1dCBvZiB0aGUKPiArCQkgKiBpbnRlcm5h bCBkaXZpZGVyIGNoYWluLgo+ICsJCSAqLwo+ICsJCXJldCA9IGFtbF9hb19pM2NfdGFpbF9jbG9j a3MobWFzdGVyLCBtYXN0ZXItPmNsa3NbMF0uY2xrKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jbGtzOyBp KyspIHsKPiArCQlpZiAoIXN0cmNtcChtYXN0ZXItPmNsa3NbaV0uaWQsICJmYXN0X2NsayIpKQo+ ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAoaSA9PSBtYXN0ZXItPm51bV9jbGtzKQo+ICsJ CXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiArCQkJCSAgICAgImNhbid0IGdl dCBJM0MgZmFzdCBjbG9ja1xuIik7Cj4gKwo+ICsJZmNsayA9IG1hc3Rlci0+Y2xrc1tpXS5jbGs7 Cj4gKwlpZiAoSVNfRVJSKGZjbGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGZjbGspOwo+ICsKPiAr CWZpbl9mcmVxID0gY2xrX3JvdW5kX3JhdGUoZmNsaywgMjUwMDAwMDApOwo+ICsJaWYgKGZpbl9m cmVxIDw9IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImludmFsaWQgZmFzdF9jbGtcbiIpOwo+ICsJ CXJldHVybiBmaW5fZnJlcSA/IGZpbl9mcmVxIDogLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQg PSBjbGtfc2V0X3JhdGUoZmNsaywgZmluX2ZyZXEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKPiArCQkJCSAgICAgInNldHRpbmcgZmFzdF9jbGsgcmF0 ZSBmYWlsZWRcbiIpOwoKW1NldmVyaXR5OiBIaWdoXQpPbiB0aGUgQU8gdmFyaWFudCwgaXMgaXQg c2FmZSB0byBhY2Nlc3MgbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMCmJl Zm9yZSBwY2xrIGlzIHByZXBhcmVkIGFuZCBlbmFibGVkPwoKSW4gc3ZjX2kzY19tYXN0ZXJfcHJv YmUoKSwgbWFzdGVyLT5kcnZkYXRhLT52ZW5kb3JfaW5pdChtYXN0ZXIpIGlzIGNhbGxlZCByaWdo dAphZnRlciBkZXZtX2Nsa19idWxrX2dldF9hbGwoKSwgYmVmb3JlIGNsa19idWxrX3ByZXBhcmVf ZW5hYmxlKCkgZW5hYmxlcyBwY2xrCmFuZCBiZWZvcmUgcG1fcnVudGltZV9lbmFibGUoKSBpcyBj YWxsZWQ6CgogICAgc3ZjX2kzY19tYXN0ZXJfcHJvYmUoKQogICAgICAgIGRldm1fY2xrX2J1bGtf Z2V0X2FsbCgpCiAgICAgICAgYW1sX2kzY19pbml0KCkKICAgICAgICAgICAgYW1sX2FvX2kzY190 YWlsX2Nsb2NrcygpCiAgICAgICAgICAgICAgICBkZXZtX2Nsa19od19yZWdpc3RlcigmYW8tPmRp di5odykKICAgICAgICAgICAgICAgICAgICBfX2Nsa19jb3JlX2luaXQoKQogICAgICAgICAgICAg ICAgICAgICAgICBjbGtfZGl2aWRlcl9yZWNhbGNfcmF0ZSgpCiAgICAgICAgICAgIGNsa19zZXRf cmF0ZShmY2xrLCBmaW5fZnJlcSkKICAgICAgICAgICAgICAgIGNsa19kaXZpZGVyX3NldF9yYXRl KCkKICAgICAgICAuLi4KICAgICAgICBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZSgpCiAgICAgICAg Li4uCiAgICAgICAgcG1fcnVudGltZV9lbmFibGUoKQoKQm90aCBkZXZtX2Nsa19od19yZWdpc3Rl cigmYW8tPmRpdi5odykgYW5kIGNsa19zZXRfcmF0ZShmY2xrLCBmaW5fZnJlcSkgcmVhZAphbmQg d3JpdGUgbWFzdGVyLT5yZWdzICsgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdoaWxlIHBjbGsg aXMgc3RpbGwKZGlzYWJsZWQsIGFuZCBub25lIG9mIHRoZSByZWdpc3RlcmVkIEFPIGNsb2NrcyBz ZXQgQ0xLX09QU19QQVJFTlRfRU5BQkxFLgoKSW4gYWRkaXRpb24sIGJlY2F1c2UgZGV2bV9jbGtf aHdfcmVnaXN0ZXIoKSBydW5zIGJlZm9yZSBwbV9ydW50aW1lX2VuYWJsZSgpLApydW50aW1lIFBN IGlzIG5vdCBib3VuZCB0byB0aGUgcmVnaXN0ZXJlZCBjbG9ja3MsIHNvIHJlYWRpbmcgZGVidWdm cwpjbGtfc3VtbWFyeSB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBydW50aW1lLXN1c3BlbmRlZCAo YW5kIHBjbGsgaXMgZ2F0ZWQgYnkKc3ZjX2kzY19ydW50aW1lX3N1c3BlbmQoKSkgd2lsbCBhbHNv IHJlYWQgbWFzdGVyLT5yZWdzICsKQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdpdGggcGNsayBk aXNhYmxlZC4KClNob3VsZCBwY2xrIGJlIGVuYWJsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIGFuZCBw cm9ncmFtbWluZyB0aGUgaW50ZXJuYWwgZGl2aWRlcgpjbG9ja3MgKG9yIHNob3VsZCB0aGUgQU8g Y2xvY2tzIHVzZSBDTEtfT1BTX1BBUkVOVF9FTkFCTEUgLyBydW50aW1lIFBNKT8KCi0tIApTYXNo aWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjExMDIt YTlfaTNjLXYyLTAtMGM0NzRiZmNjZmZhQGFtbG9naWMuY29tP3BhcnQ9MQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5n IGxpc3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo=