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=1793950322; b=XXlwl0O1pNXsPVC3vWeMek/PA3cMBskysAfBEgaOy3ItfjXmJgH6IGLmmGhoHNyLGyGW lCMhXnJ64PgC2UILkzQHtWPfzriBYggfjNL+1jOQ9q7jN3Ueosk2zyX3xvKhBiWYLthSX qkQXLxSEThQF/6GyqFUylCCR+5ZS5BQyqUNsWwxY5t5pHGH5JxkwitrTC1Sg4uQxLfqCp QbsqTw3GmPxic+mydk9R4mhz/P0BxJ9xWJrHc1qzeydiY9uGyiVnFGUobXQdkA1lBRh2i qkVZFRqj3d1huzatMVxdTfg5BtIADEcezYo2qJ7WSqwI1FPmHQtFWOVXFv/XFwFlmGA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793950322; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=J26CElyGAMgILynoCQU6N9ZuMtxndWEd7lVSGneZhMk=; b=dY+bU4OtjBBWLlBDGAjC5+XuvwVzp/cga5/W9xiMen6fc+OCQddU3XC7vsgfgJxp1aRh 3IeMxhUFq7ihD4XgD/OvjiI1Mnjsdd5gWNpvdr65zV2nmavBqV/VPETUpE7qjXod/sqCP P0B+0kw+olJSvd7qiymoTbHtBz/Hxb1TtrPB3SeQtIlRuD3r65ztmI7WQYkYvjbTcufCr ATFgrR1Eh5Lazh10upPADgzx3dnsEMzsA02Y+M89sJcUeIlJbxTpSvirJ9JBiE2HbdM1L RpAawuZIJfq49sCFsqVLqEv55vzl5UrHXjsab1aP1dRs9+mggTXN7CaYh6z8BZgCk7A== 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=Ecf7q7pS; 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 DAB20606A326; Fri, 6 Nov 2026 07:32:01 +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=Ecf7q7pS Received: by smtp.kernel.org (Postfix) with ESMTPSA id 392021F008A3; Fri, 6 Nov 2026 07:32:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793950321; bh=J26CElyGAMgILynoCQU6N9ZuMtxndWEd7lVSGneZhMk=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Ecf7q7pSZPM79t0GKDwDB+AycXJ9vuAeAg9WTCIe+8P+JPwGUS2CLoRYMIfd/MNU2 gFfQ+d+aQJIaubb2KFRv1DhTTQmv1JlKeGhuElS5ILUXh45BCtCHRfaBuhMfgUdnzE B727dPl/pzgePDIRkHG+eO6Jdyb+f+4yHTUfYCT0/AEB3bQ83ii6cNUIXBRQdUzivY k0+u8IWh4XuutfpIUujWXGPfqjw2ltVR2K7Qt26rtxm3st9PZNrKcgyKr5QwhUJzii dhfgBhTiY4hufaZwtNByWk0D3JeVcP1WWCZTZx8I4yT/5qS4F+SGt+j8bbBImx9jxH +LJuqI/qTQJrw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 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: <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> References: <20261106-a9_i3c-v3-0-804b69b9095b@amlogic.com> <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 06 Nov 2026 07:32:00 +0000 X-Mailing-List: devicetree@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 4 potential issues to consider: - [Medium] i3c: master: svc: unbalanced fclk disable in aml_ao_i3c_tail_clocks() - [Medium] i3c: master: svc: NULL dereference of clks[0].id in aml_i3c_init() - [Medium] i3c: master: svc: unclocked MMIO read in aml_ao_i3c_tail_clocks() - [Low] i3c: master: svc: duplicate fast_clk lookup in aml_i3c_init() -- commit 13e8b1ef64cdb3b2e6850ddcbaa3e5a7ffee2a56 Author: Junyi Zhao i3c: master: svc: Add amlogic a9 support This commit adds Amlogic A9 and A9 AO I3C controller support to the Silvaco I3C master driver, including a vendor_init callback that registers the AO variant's internal clock divider chain and configures the fast_clk rate. > diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc= -i3c-master.c > index e700392f0801f..aef56286ecfa8 100644 > --- a/drivers/i3c/master/svc-i3c-master.c > +++ b/drivers/i3c/master/svc-i3c-master.c [ ... ] > @@ -2019,27 +2049,43 @@ static int svc_i3c_master_probe(struct platform_d= evice *pdev) > if (master->num_clks < 0) > return dev_err_probe(dev, -EINVAL, "can't get I3C clocks\n"); > =20 > + 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"); > + > + /* > + * Vendor specific setup may register additional clocks (e.g. the > + * internal divider chain of the AO variant) and program clock rates, > + * so it must run with the clocks enabled. > + */ > + if (master->drvdata->vendor_init) { > + ret =3D master->drvdata->vendor_init(master); > + if (ret) > + goto err_disable_clks; > + } > + > for (i =3D 0; i < master->num_clks; i++) { > if (!strcmp(master->clks[i].id, "fast_clk")) > break; > } > =20 > - if (i =3D=3D master->num_clks) > - return dev_err_probe(dev, -EINVAL, > - "can't get I3C peripheral clock\n"); > + if (i =3D=3D master->num_clks) { > + ret =3D dev_err_probe(dev, -EINVAL, > + "can't get I3C peripheral clock\n"); > + goto err_disable_clks; > + } > =20 > master->fclk =3D master->clks[i].clk; > - if (IS_ERR(master->fclk)) > - return PTR_ERR(master->fclk); > + if (IS_ERR(master->fclk)) { > + ret =3D PTR_ERR(master->fclk); > + goto err_disable_clks; > + } [ ... ] > @@ -2163,9 +2209,213 @@ static const struct svc_i3c_drvdata npcm845_drvda= ta =3D { [ ... ] > +static int aml_ao_i3c_tail_clocks(struct svc_i3c_master *master, struct = clk *parent) > +{ > + struct device *dev =3D master->dev; > + struct clk_bulk_data *new_clks; > + struct clk_init_data init =3D {}; > + struct aml_i3c_ao_clk *ao; > + struct clk *fclk; > + char name[64]; > + int ret; > + > + 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); [Severity: Medium] Can the clock framework read AML_AO_I3C_FCLK_DIV_CTRL while pclk is disabled during runtime suspend? svc_i3c_master_probe() invokes vendor_init() before calling pm_runtime_enable(), so clk_pm_runtime_init() sees pm_runtime_enabled(dev) =3D=3D false and leaves core->rpm_enabled unset for div_en, div, and gate, and none of the three clocks sets CLK_OPS_PARENT_ENABLE. Once svc_i3c_runtime_suspend() disables pclk, any clock query (such as reading /sys/kernel/debug/clk/clk_summary) calls clk_gate_ops.is_enabled or clk_divider_ops.recalc_rate and performs an unclocked MMIO read of AML_AO_I3C_FCLK_DIV_CTRL. > + 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"); > + > + new_clks =3D devm_kcalloc(dev, master->num_clks + 1, sizeof(*new_clks), > + GFP_KERNEL); > + if (!new_clks) > + return -ENOMEM; > + > + 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; > + master->clks =3D new_clks; > + master->num_clks++; > + > + /* > + * Keep the clk bulk state balanced for the following > + * clk_bulk_disable_unprepare() calls (error paths and runtime PM). > + */ > + ret =3D clk_prepare_enable(fclk); > + if (ret) > + return dev_err_probe(dev, ret, "can't enable fast_clk\n"); > + > + return 0; > +} [Severity: Medium] If clk_prepare_enable(fclk) fails here, does the err_disable_clks path in svc_i3c_master_probe() call clk_bulk_disable_unprepare() on an unprepared and disabled fclk? master->clks and master->num_clks are updated to include fclk before clk_prepare_enable(fclk) succeeds, which will trigger WARN() assertions in clk_core_disable() and clk_core_unprepare(). > +static int aml_i3c_init(struct svc_i3c_master *master) > +{ > + struct device *dev =3D master->dev; > + struct clk *fclk; > + long fin_freq; > + int ret, i; > + > + if (svc_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. > + */ > + if (strcmp(master->clks[0].id, "pclk")) > + return dev_err_probe(dev, -EINVAL, > + "invalid AO input clock\n"); [Severity: Medium] Can this dereference a NULL pointer if the DT node omits clocks or clock-names? devm_clk_bulk_get_all() returns 0 with master->clks =3D=3D NULL when no clocks are present in DT (passing the master->num_clks < 0 check in svc_i3c_master_probe()), and leaves master->clks[0].id as NULL if clock-names is missing. > + > + 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); [Severity: Low] This isn't a bug, but this fast_clk lookup and IS_ERR() check duplicate the identical loop that runs in svc_i3c_master_probe() right after vendor_init() returns. Could master->fclk be resolved once in a helper or before setting the clock rate? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261106-a9_i3c-v3-= 0-804b69b9095b@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 28E47606A326 for ; Fri, 6 Nov 2026 07:32:05 +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=HvvP6Yq6; 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=Ecf7q7pS 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=t3WKfCy+EjStiBeQ8Fk4IUg4gQnTsSDuB/ilW8D7yQk=; b=HvvP6Yq6IMFzRFdgHYNj7RBngA VOiy+pKSWV1kPk2bd6bvgPJTofbWH+i3OKBz+yLsJ6By0GoDynXIXzDYwoK69y5rRSxzQ/fWJDgHm +W9Li2GvJBJedkegnT0Tv1ZadTJf79MebTy34cT2NmFBu3MmTpqSD4GzFhfuAtVjLeVrvklGjD2I/ eBpcgH5giDwK/WD9Umy29eKQ8DK9meVrOmfThr8t15CxFUQAvaw3YBfsXBJegxiLNYRzddODcTz1/ +HwLSF04wLVu6ruy65cQGPXZCLrvVy6KGlquVyKP0JKo8c14bSgzWknILIiXweCMDt2hlYscQEL8f /A4wQB9w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPEQe-0000000BSXr-3cH9; Fri, 06 Nov 2026 07:32:04 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPEQc-0000000BSWg-337K; Fri, 06 Nov 2026 07:32:02 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 07BA260202; Fri, 6 Nov 2026 07:32:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 392021F008A3; Fri, 6 Nov 2026 07:32:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793950321; bh=J26CElyGAMgILynoCQU6N9ZuMtxndWEd7lVSGneZhMk=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Ecf7q7pSZPM79t0GKDwDB+AycXJ9vuAeAg9WTCIe+8P+JPwGUS2CLoRYMIfd/MNU2 gFfQ+d+aQJIaubb2KFRv1DhTTQmv1JlKeGhuElS5ILUXh45BCtCHRfaBuhMfgUdnzE B727dPl/pzgePDIRkHG+eO6Jdyb+f+4yHTUfYCT0/AEB3bQ83ii6cNUIXBRQdUzivY k0+u8IWh4XuutfpIUujWXGPfqjw2ltVR2K7Qt26rtxm3st9PZNrKcgyKr5QwhUJzii dhfgBhTiY4hufaZwtNByWk0D3JeVcP1WWCZTZx8I4yT/5qS4F+SGt+j8bbBImx9jxH +LJuqI/qTQJrw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 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: <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> References: <20261106-a9_i3c-v3-0-804b69b9095b@amlogic.com> <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> Date: Fri, 06 Nov 2026 07:32:00 +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 NCBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtNZWRpdW1dIGkzYzogbWFzdGVyOiBz dmM6IHVuYmFsYW5jZWQgZmNsayBkaXNhYmxlIGluCiAgYW1sX2FvX2kzY190YWlsX2Nsb2Nrcygp Ci0gW01lZGl1bV0gaTNjOiBtYXN0ZXI6IHN2YzogTlVMTCBkZXJlZmVyZW5jZSBvZiBjbGtzWzBd LmlkIGluCiAgYW1sX2kzY19pbml0KCkKLSBbTWVkaXVtXSBpM2M6IG1hc3Rlcjogc3ZjOiB1bmNs b2NrZWQgTU1JTyByZWFkIGluCiAgYW1sX2FvX2kzY190YWlsX2Nsb2NrcygpCi0gW0xvd10gaTNj OiBtYXN0ZXI6IHN2YzogZHVwbGljYXRlIGZhc3RfY2xrIGxvb2t1cCBpbiBhbWxfaTNjX2luaXQo KQotLQoKY29tbWl0IDEzZThiMWVmNjRjZGIzYjJlNjg1MGRkY2JhYTNlNWE3ZmZlZTJhNTYKQXV0 aG9yOiBKdW55aSBaaGFvIDxqdW55aS56aGFvQGFtbG9naWMuY29tPgoKaTNjOiBtYXN0ZXI6IHN2 YzogQWRkIGFtbG9naWMgYTkgc3VwcG9ydAoKVGhpcyBjb21taXQgYWRkcyBBbWxvZ2ljIEE5IGFu ZCBBOSBBTyBJM0MgY29udHJvbGxlciBzdXBwb3J0IHRvIHRoZQpTaWx2YWNvIEkzQyBtYXN0ZXIg ZHJpdmVyLCBpbmNsdWRpbmcgYSB2ZW5kb3JfaW5pdCBjYWxsYmFjayB0aGF0IHJlZ2lzdGVycwp0 aGUgQU8gdmFyaWFudCdzIGludGVybmFsIGNsb2NrIGRpdmlkZXIgY2hhaW4gYW5kIGNvbmZpZ3Vy ZXMgdGhlIGZhc3RfY2xrCnJhdGUuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIv c3ZjLWkzYy1tYXN0ZXIuYyBiL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jCj4g aW5kZXggZTcwMDM5MmYwODAxZi4uYWVmNTYyODZlY2ZhOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2kzYy9tYXN0ZXIvc3ZjLWkzYy1tYXN0ZXIuYwo+ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9z dmMtaTNjLW1hc3Rlci5jClsgLi4uIF0KPiBAQCAtMjAxOSwyNyArMjA0OSw0MyBAQCBzdGF0aWMg aW50IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g IAlpZiAobWFzdGVyLT5udW1fY2xrcyA8IDApCj4gIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2 LCAtRUlOVkFMLCAiY2FuJ3QgZ2V0IEkzQyBjbG9ja3NcbiIpOwo+ICAKPiArCXJldCA9IGNsa19i dWxrX3ByZXBhcmVfZW5hYmxlKG1hc3Rlci0+bnVtX2Nsa3MsIG1hc3Rlci0+Y2xrcyk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiY2FuJ3QgZW5hYmxl IEkzQyBjbG9ja3NcbiIpOwo+ICsKPiArCS8qCj4gKwkgKiBWZW5kb3Igc3BlY2lmaWMgc2V0dXAg bWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwgY2xvY2tzIChlLmcuIHRoZQo+ICsJICogaW50ZXJuYWwg ZGl2aWRlciBjaGFpbiBvZiB0aGUgQU8gdmFyaWFudCkgYW5kIHByb2dyYW0gY2xvY2sgcmF0ZXMs Cj4gKwkgKiBzbyBpdCBtdXN0IHJ1biB3aXRoIHRoZSBjbG9ja3MgZW5hYmxlZC4KPiArCSAqLwo+ ICsJaWYgKG1hc3Rlci0+ZHJ2ZGF0YS0+dmVuZG9yX2luaXQpIHsKPiArCQlyZXQgPSBtYXN0ZXIt PmRydmRhdGEtPnZlbmRvcl9pbml0KG1hc3Rlcik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBl cnJfZGlzYWJsZV9jbGtzOwo+ICsJfQo+ICsKPiAgCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51 bV9jbGtzOyBpKyspIHsKPiAgCQlpZiAoIXN0cmNtcChtYXN0ZXItPmNsa3NbaV0uaWQsICJmYXN0 X2NsayIpKQo+ICAJCQlicmVhazsKPiAgCX0KPiAgCj4gLQlpZiAoaSA9PSBtYXN0ZXItPm51bV9j bGtzKQo+IC0JCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiAtCQkJCSAgICAg ImNhbid0IGdldCBJM0MgcGVyaXBoZXJhbCBjbG9ja1xuIik7Cj4gKwlpZiAoaSA9PSBtYXN0ZXIt Pm51bV9jbGtzKSB7Cj4gKwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gKwkJ CQkgICAgImNhbid0IGdldCBJM0MgcGVyaXBoZXJhbCBjbG9ja1xuIik7Cj4gKwkJZ290byBlcnJf ZGlzYWJsZV9jbGtzOwo+ICsJfQo+ICAKPiAgCW1hc3Rlci0+ZmNsayA9IG1hc3Rlci0+Y2xrc1tp XS5jbGs7Cj4gLQlpZiAoSVNfRVJSKG1hc3Rlci0+ZmNsaykpCj4gLQkJcmV0dXJuIFBUUl9FUlIo bWFzdGVyLT5mY2xrKTsKPiArCWlmIChJU19FUlIobWFzdGVyLT5mY2xrKSkgewo+ICsJCXJldCA9 IFBUUl9FUlIobWFzdGVyLT5mY2xrKTsKPiArCQlnb3RvIGVycl9kaXNhYmxlX2Nsa3M7Cj4gKwl9 ClsgLi4uIF0KPiBAQCAtMjE2Myw5ICsyMjA5LDIxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN2 Y19pM2NfZHJ2ZGF0YSBucGNtODQ1X2RydmRhdGEgPSB7ClsgLi4uIF0KPiArc3RhdGljIGludCBh bWxfYW9faTNjX3RhaWxfY2xvY2tzKHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyLCBzdHJ1 Y3QgY2xrICpwYXJlbnQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1hc3Rlci0+ZGV2 Owo+ICsJc3RydWN0IGNsa19idWxrX2RhdGEgKm5ld19jbGtzOwo+ICsJc3RydWN0IGNsa19pbml0 X2RhdGEgaW5pdCA9IHt9Owo+ICsJc3RydWN0IGFtbF9pM2NfYW9fY2xrICphbzsKPiArCXN0cnVj dCBjbGsgKmZjbGs7Cj4gKwljaGFyIG5hbWVbNjRdOwo+ICsJaW50IHJldDsKPiArCj4gKwlhbyA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYW8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYW8p Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJmFvLT5sb2NrKTsK PiArCj4gKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyNkaXZfZW4iLCBkZXZfbmFt ZShkZXYpKTsKPiArCWluaXQubmFtZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZ2F0ZV9v cHM7Cj4gKwlpbml0LmZsYWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQ7Cj4gKwlpbml0LnBhcmVudF9k YXRhID0gJihzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4gKwkJLmluZGV4ID0gLTEsCj4gKwkJ Lmh3ID0gX19jbGtfZ2V0X2h3KHBhcmVudCksCj4gKwl9Owo+ICsJaW5pdC5udW1fcGFyZW50cyA9 IDE7Cj4gKwo+ICsJYW8tPmRpdl9lbi5yZWcgPSBtYXN0ZXItPnJlZ3MgKyBBTUxfQU9fSTNDX0ZD TEtfRElWX0NUUkw7Cj4gKwlhby0+ZGl2X2VuLmJpdF9pZHggPSBBTUxfQU9fSTNDX0ZDTEtfRElW X0VOX1NISUZUOwo+ICsJYW8tPmRpdl9lbi5ody5pbml0ID0gJmluaXQ7Cj4gKwlhby0+ZGl2X2Vu LmxvY2sgPSAmYW8tPmxvY2s7Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2 LCAmYW8tPmRpdl9lbi5odyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2Jl KGRldiwgcmV0LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLCBuYW1lKTsKPiArCj4gKwlzbnBy aW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyNkaXYiLCBkZXZfbmFtZShkZXYpKTsKPiArCWlu aXQubmFtZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZGl2aWRlcl9vcHM7Cj4gKwlpbml0 LmZsYWdzID0gMDsKPiArCWluaXQucGFyZW50X2RhdGEgPSAmKHN0cnVjdCBjbGtfcGFyZW50X2Rh dGEpIHsKPiArCQkuaW5kZXggPSAtMSwKPiArCQkuaHcgPSAmYW8tPmRpdl9lbi5odywKPiArCX07 Cj4gKwlpbml0Lm51bV9wYXJlbnRzID0gMTsKPiArCj4gKwlhby0+ZGl2LnJlZyA9IG1hc3Rlci0+ cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RSTDsKPiArCWFvLT5kaXYuc2hpZnQgPSBBTUxf QU9fSTNDX0ZDTEtfRElWX1NISUZUOwo+ICsJYW8tPmRpdi53aWR0aCA9IEFNTF9BT19JM0NfRkNM S19ESVZfV0lEVEg7Cj4gKwlhby0+ZGl2Lmh3LmluaXQgPSAmaW5pdDsKPiArCWFvLT5kaXYubG9j ayA9ICZhby0+bG9jazsKPiArCj4gKwlyZXQgPSBkZXZtX2Nsa19od19yZWdpc3RlcihkZXYsICZh by0+ZGl2Lmh3KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsIG5hbWUpOwo+ICsKPiArCXNucHJpbnRmKG5h bWUsIHNpemVvZihuYW1lKSwgIiVzI2dhdGUiLCBkZXZfbmFtZShkZXYpKTsKPiArCWluaXQubmFt ZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZ2F0ZV9vcHM7Cj4gKwlpbml0LmZsYWdzID0g Q0xLX1NFVF9SQVRFX1BBUkVOVCB8IENMS19JR05PUkVfVU5VU0VEOwo+ICsJaW5pdC5wYXJlbnRf ZGF0YSA9ICYoc3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+ICsJCS5pbmRleCA9IC0xLAo+ICsJ CS5odyA9ICZhby0+ZGl2Lmh3LAo+ICsJfTsKPiArCWluaXQubnVtX3BhcmVudHMgPSAxOwo+ICsK PiArCWFvLT5nYXRlLnJlZyA9IG1hc3Rlci0+cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RS TDsKPiArCWFvLT5nYXRlLmJpdF9pZHggPSBBTUxfQU9fSTNDX0ZDTEtfRU5fU0hJRlQ7Cj4gKwlh by0+Z2F0ZS5ody5pbml0ID0gJmluaXQ7Cj4gKwlhby0+Z2F0ZS5sb2NrID0gJmFvLT5sb2NrOwo+ ICsKPiArCXJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgJmFvLT5nYXRlLmh3KTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8g cmVnaXN0ZXIgJXNcbiIsIG5hbWUpOwoKW1NldmVyaXR5OiBNZWRpdW1dCkNhbiB0aGUgY2xvY2sg ZnJhbWV3b3JrIHJlYWQgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdoaWxlIHBjbGsgaXMKZGlz YWJsZWQgZHVyaW5nIHJ1bnRpbWUgc3VzcGVuZD8KCnN2Y19pM2NfbWFzdGVyX3Byb2JlKCkgaW52 b2tlcyB2ZW5kb3JfaW5pdCgpIGJlZm9yZSBjYWxsaW5nCnBtX3J1bnRpbWVfZW5hYmxlKCksIHNv IGNsa19wbV9ydW50aW1lX2luaXQoKSBzZWVzCnBtX3J1bnRpbWVfZW5hYmxlZChkZXYpID09IGZh bHNlIGFuZCBsZWF2ZXMgY29yZS0+cnBtX2VuYWJsZWQgdW5zZXQgZm9yCmRpdl9lbiwgZGl2LCBh bmQgZ2F0ZSwgYW5kIG5vbmUgb2YgdGhlIHRocmVlIGNsb2NrcyBzZXRzCkNMS19PUFNfUEFSRU5U X0VOQUJMRS4gIE9uY2Ugc3ZjX2kzY19ydW50aW1lX3N1c3BlbmQoKSBkaXNhYmxlcyBwY2xrLAph bnkgY2xvY2sgcXVlcnkgKHN1Y2ggYXMgcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsvY2xr X3N1bW1hcnkpCmNhbGxzIGNsa19nYXRlX29wcy5pc19lbmFibGVkIG9yIGNsa19kaXZpZGVyX29w cy5yZWNhbGNfcmF0ZSBhbmQgcGVyZm9ybXMKYW4gdW5jbG9ja2VkIE1NSU8gcmVhZCBvZiBBTUxf QU9fSTNDX0ZDTEtfRElWX0NUUkwuCgo+ICsJZmNsayA9IGRldm1fY2xrX2h3X2dldF9jbGsoZGV2 LCAmYW8tPmdhdGUuaHcsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihmY2xrKSkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZmNsayksCj4gKwkJCQkgICAgICJ0YWlsIGkzYyBm YXN0IGNsb2NrIGZhaWxlZFxuIik7Cj4gKwo+ICsJbmV3X2Nsa3MgPSBkZXZtX2tjYWxsb2MoZGV2 LCBtYXN0ZXItPm51bV9jbGtzICsgMSwgc2l6ZW9mKCpuZXdfY2xrcyksCj4gKwkJCQlHRlBfS0VS TkVMKTsKPiArCWlmICghbmV3X2Nsa3MpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWVt Y3B5KG5ld19jbGtzLCBtYXN0ZXItPmNsa3MsCj4gKwkgICAgICAgbWFzdGVyLT5udW1fY2xrcyAq IHNpemVvZigqbWFzdGVyLT5jbGtzKSk7Cj4gKwluZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXS5p ZCA9ICJmYXN0X2NsayI7Cj4gKwluZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXS5jbGsgPSBmY2xr Owo+ICsJbWFzdGVyLT5jbGtzID0gbmV3X2Nsa3M7Cj4gKwltYXN0ZXItPm51bV9jbGtzKys7Cj4g Kwo+ICsJLyoKPiArCSAqIEtlZXAgdGhlIGNsayBidWxrIHN0YXRlIGJhbGFuY2VkIGZvciB0aGUg Zm9sbG93aW5nCj4gKwkgKiBjbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZSgpIGNhbGxzIChlcnJv ciBwYXRocyBhbmQgcnVudGltZSBQTSkuCj4gKwkgKi8KPiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShmY2xrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJjYW4ndCBlbmFibGUgZmFzdF9jbGtcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cgpb U2V2ZXJpdHk6IE1lZGl1bV0KSWYgY2xrX3ByZXBhcmVfZW5hYmxlKGZjbGspIGZhaWxzIGhlcmUs IGRvZXMgdGhlIGVycl9kaXNhYmxlX2Nsa3MgcGF0aCBpbgpzdmNfaTNjX21hc3Rlcl9wcm9iZSgp IGNhbGwgY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoKSBvbiBhbiB1bnByZXBhcmVkCmFuZCBk aXNhYmxlZCBmY2xrPyAgbWFzdGVyLT5jbGtzIGFuZCBtYXN0ZXItPm51bV9jbGtzIGFyZSB1cGRh dGVkIHRvCmluY2x1ZGUgZmNsayBiZWZvcmUgY2xrX3ByZXBhcmVfZW5hYmxlKGZjbGspIHN1Y2Nl ZWRzLCB3aGljaCB3aWxsIHRyaWdnZXIKV0FSTigpIGFzc2VydGlvbnMgaW4gY2xrX2NvcmVfZGlz YWJsZSgpIGFuZCBjbGtfY29yZV91bnByZXBhcmUoKS4KCj4gK3N0YXRpYyBpbnQgYW1sX2kzY19p bml0KHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBtYXN0ZXItPmRldjsKPiArCXN0cnVjdCBjbGsgKmZjbGs7Cj4gKwlsb25nIGZpbl9m cmVxOwo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlpZiAoc3ZjX2hhc19xdWlyayhtYXN0ZXIsIEFN TF9JM0NfUVVJUktfQU8pKSB7Cj4gKwkJLyoKPiArCQkgKiBjbGtfYnVsa19nZXRfYWxsKCkgcHJl c2VydmVzIHRoZSBEVCBvcmRlciwgYW5kIHRoZQo+ICsJCSAqIGJpbmRpbmcgcmVzdHJpY3RzIHRo ZSBBTyB2YXJpYW50IHRvIGV4YWN0bHkgb25lIGNsb2NrLAo+ICsJCSAqIHdoaWNoIGlzIGFsd2F5 cyAicGNsayIuICBTbyBjbGtzWzBdIGlzIHRoZSBpbnB1dCBvZiB0aGUKPiArCQkgKiBpbnRlcm5h bCBkaXZpZGVyIGNoYWluLgo+ICsJCSAqLwo+ICsJCWlmIChzdHJjbXAobWFzdGVyLT5jbGtzWzBd LmlkLCAicGNsayIpKQo+ICsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4g KwkJCQkJICAgICAiaW52YWxpZCBBTyBpbnB1dCBjbG9ja1xuIik7CgpbU2V2ZXJpdHk6IE1lZGl1 bV0KQ2FuIHRoaXMgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERUIG5vZGUgb21p dHMgY2xvY2tzIG9yCmNsb2NrLW5hbWVzPwoKZGV2bV9jbGtfYnVsa19nZXRfYWxsKCkgcmV0dXJu cyAwIHdpdGggbWFzdGVyLT5jbGtzID09IE5VTEwgd2hlbiBubwpjbG9ja3MgYXJlIHByZXNlbnQg aW4gRFQgKHBhc3NpbmcgdGhlIG1hc3Rlci0+bnVtX2Nsa3MgPCAwIGNoZWNrIGluCnN2Y19pM2Nf bWFzdGVyX3Byb2JlKCkpLCBhbmQgbGVhdmVzIG1hc3Rlci0+Y2xrc1swXS5pZCBhcyBOVUxMIGlm CmNsb2NrLW5hbWVzIGlzIG1pc3NpbmcuCgo+ICsKPiArCQlyZXQgPSBhbWxfYW9faTNjX3RhaWxf Y2xvY2tzKG1hc3RlciwgbWFzdGVyLT5jbGtzWzBdLmNsayk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2xr czsgaSsrKSB7Cj4gKwkJaWYgKCFzdHJjbXAobWFzdGVyLT5jbGtzW2ldLmlkLCAiZmFzdF9jbGsi KSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGkgPT0gbWFzdGVyLT5udW1fY2xrcykK PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gKwkJCQkgICAgICJjYW4n dCBnZXQgSTNDIGZhc3QgY2xvY2tcbiIpOwo+ICsKPiArCWZjbGsgPSBtYXN0ZXItPmNsa3NbaV0u Y2xrOwo+ICsJaWYgKElTX0VSUihmY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihmY2xrKTsKCltT ZXZlcml0eTogTG93XQpUaGlzIGlzbid0IGEgYnVnLCBidXQgdGhpcyBmYXN0X2NsayBsb29rdXAg YW5kIElTX0VSUigpIGNoZWNrIGR1cGxpY2F0ZQp0aGUgaWRlbnRpY2FsIGxvb3AgdGhhdCBydW5z IGluIHN2Y19pM2NfbWFzdGVyX3Byb2JlKCkgcmlnaHQgYWZ0ZXIKdmVuZG9yX2luaXQoKSByZXR1 cm5zLiAgQ291bGQgbWFzdGVyLT5mY2xrIGJlIHJlc29sdmVkIG9uY2UgaW4gYSBoZWxwZXIKb3Ig YmVmb3JlIHNldHRpbmcgdGhlIGNsb2NrIHJhdGU/CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcg aHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMTA2LWE5X2kzYy12My0wLTgwNGI2 OWI5MDk1YkBhbWxvZ2ljLmNvbT9wYXJ0PTEKCi0tIApsaW51eC1pM2MgbWFpbGluZyBsaXN0Cmxp bnV4LWkzY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtaTNjCg== 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 C60ED606A326 for ; Fri, 6 Nov 2026 07:32:08 +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=rgk0Jzbt; 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=Ecf7q7pS 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=mEpyiZpTJauwGhnLVuIF8oMtWd0nGjVk2kj7CPFqKyQ=; b=rgk0JzbtarohJY/1n88mngMROi oFNJQ/Fzd43fCTmjANVHxT7/uTKvKaxIo5abQ4mkdGtHV7EfePUPYvOB8flyHCSNFYCpSGxHTmKWa RwbIHNXlytLqunPsHMOAQhQrnX5OfPQmf9YgID0ErVBLlF6gt58a1TzxgzD+7Qmdm3BXVMQjpgHwv 8BpiPD612klKiuGz8j6jRN93E9JxfY6ZIXCPM2Kzu/vBdH9HhBfq+gOP/xCoDefY/La+vVFISpP30 cvZyIk4zhYOL5RK5Fbmsp95NCpOPuhzeFCaT4t3Iq/UQxOTF6WazOXO/Xxfa8qZNNkNd91af+Gkkk idE3aPpQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPEQe-0000000BSXm-3DzE; Fri, 06 Nov 2026 07:32:04 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPEQc-0000000BSWg-337K; Fri, 06 Nov 2026 07:32:02 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 07BA260202; Fri, 6 Nov 2026 07:32:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 392021F008A3; Fri, 6 Nov 2026 07:32:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793950321; bh=J26CElyGAMgILynoCQU6N9ZuMtxndWEd7lVSGneZhMk=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Ecf7q7pSZPM79t0GKDwDB+AycXJ9vuAeAg9WTCIe+8P+JPwGUS2CLoRYMIfd/MNU2 gFfQ+d+aQJIaubb2KFRv1DhTTQmv1JlKeGhuElS5ILUXh45BCtCHRfaBuhMfgUdnzE B727dPl/pzgePDIRkHG+eO6Jdyb+f+4yHTUfYCT0/AEB3bQ83ii6cNUIXBRQdUzivY k0+u8IWh4XuutfpIUujWXGPfqjw2ltVR2K7Qt26rtxm3st9PZNrKcgyKr5QwhUJzii dhfgBhTiY4hufaZwtNByWk0D3JeVcP1WWCZTZx8I4yT/5qS4F+SGt+j8bbBImx9jxH +LJuqI/qTQJrw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 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: <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> References: <20261106-a9_i3c-v3-0-804b69b9095b@amlogic.com> <20261106-a9_i3c-v3-1-804b69b9095b@amlogic.com> Date: Fri, 06 Nov 2026 07:32:00 +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 NCBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtNZWRpdW1dIGkzYzogbWFzdGVyOiBz dmM6IHVuYmFsYW5jZWQgZmNsayBkaXNhYmxlIGluCiAgYW1sX2FvX2kzY190YWlsX2Nsb2Nrcygp Ci0gW01lZGl1bV0gaTNjOiBtYXN0ZXI6IHN2YzogTlVMTCBkZXJlZmVyZW5jZSBvZiBjbGtzWzBd LmlkIGluCiAgYW1sX2kzY19pbml0KCkKLSBbTWVkaXVtXSBpM2M6IG1hc3Rlcjogc3ZjOiB1bmNs b2NrZWQgTU1JTyByZWFkIGluCiAgYW1sX2FvX2kzY190YWlsX2Nsb2NrcygpCi0gW0xvd10gaTNj OiBtYXN0ZXI6IHN2YzogZHVwbGljYXRlIGZhc3RfY2xrIGxvb2t1cCBpbiBhbWxfaTNjX2luaXQo KQotLQoKY29tbWl0IDEzZThiMWVmNjRjZGIzYjJlNjg1MGRkY2JhYTNlNWE3ZmZlZTJhNTYKQXV0 aG9yOiBKdW55aSBaaGFvIDxqdW55aS56aGFvQGFtbG9naWMuY29tPgoKaTNjOiBtYXN0ZXI6IHN2 YzogQWRkIGFtbG9naWMgYTkgc3VwcG9ydAoKVGhpcyBjb21taXQgYWRkcyBBbWxvZ2ljIEE5IGFu ZCBBOSBBTyBJM0MgY29udHJvbGxlciBzdXBwb3J0IHRvIHRoZQpTaWx2YWNvIEkzQyBtYXN0ZXIg ZHJpdmVyLCBpbmNsdWRpbmcgYSB2ZW5kb3JfaW5pdCBjYWxsYmFjayB0aGF0IHJlZ2lzdGVycwp0 aGUgQU8gdmFyaWFudCdzIGludGVybmFsIGNsb2NrIGRpdmlkZXIgY2hhaW4gYW5kIGNvbmZpZ3Vy ZXMgdGhlIGZhc3RfY2xrCnJhdGUuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIv c3ZjLWkzYy1tYXN0ZXIuYyBiL2RyaXZlcnMvaTNjL21hc3Rlci9zdmMtaTNjLW1hc3Rlci5jCj4g aW5kZXggZTcwMDM5MmYwODAxZi4uYWVmNTYyODZlY2ZhOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2kzYy9tYXN0ZXIvc3ZjLWkzYy1tYXN0ZXIuYwo+ICsrKyBiL2RyaXZlcnMvaTNjL21hc3Rlci9z dmMtaTNjLW1hc3Rlci5jClsgLi4uIF0KPiBAQCAtMjAxOSwyNyArMjA0OSw0MyBAQCBzdGF0aWMg aW50IHN2Y19pM2NfbWFzdGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g IAlpZiAobWFzdGVyLT5udW1fY2xrcyA8IDApCj4gIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2 LCAtRUlOVkFMLCAiY2FuJ3QgZ2V0IEkzQyBjbG9ja3NcbiIpOwo+ICAKPiArCXJldCA9IGNsa19i dWxrX3ByZXBhcmVfZW5hYmxlKG1hc3Rlci0+bnVtX2Nsa3MsIG1hc3Rlci0+Y2xrcyk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiY2FuJ3QgZW5hYmxl IEkzQyBjbG9ja3NcbiIpOwo+ICsKPiArCS8qCj4gKwkgKiBWZW5kb3Igc3BlY2lmaWMgc2V0dXAg bWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwgY2xvY2tzIChlLmcuIHRoZQo+ICsJICogaW50ZXJuYWwg ZGl2aWRlciBjaGFpbiBvZiB0aGUgQU8gdmFyaWFudCkgYW5kIHByb2dyYW0gY2xvY2sgcmF0ZXMs Cj4gKwkgKiBzbyBpdCBtdXN0IHJ1biB3aXRoIHRoZSBjbG9ja3MgZW5hYmxlZC4KPiArCSAqLwo+ ICsJaWYgKG1hc3Rlci0+ZHJ2ZGF0YS0+dmVuZG9yX2luaXQpIHsKPiArCQlyZXQgPSBtYXN0ZXIt PmRydmRhdGEtPnZlbmRvcl9pbml0KG1hc3Rlcik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBl cnJfZGlzYWJsZV9jbGtzOwo+ICsJfQo+ICsKPiAgCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51 bV9jbGtzOyBpKyspIHsKPiAgCQlpZiAoIXN0cmNtcChtYXN0ZXItPmNsa3NbaV0uaWQsICJmYXN0 X2NsayIpKQo+ICAJCQlicmVhazsKPiAgCX0KPiAgCj4gLQlpZiAoaSA9PSBtYXN0ZXItPm51bV9j bGtzKQo+IC0JCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiAtCQkJCSAgICAg ImNhbid0IGdldCBJM0MgcGVyaXBoZXJhbCBjbG9ja1xuIik7Cj4gKwlpZiAoaSA9PSBtYXN0ZXIt Pm51bV9jbGtzKSB7Cj4gKwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gKwkJ CQkgICAgImNhbid0IGdldCBJM0MgcGVyaXBoZXJhbCBjbG9ja1xuIik7Cj4gKwkJZ290byBlcnJf ZGlzYWJsZV9jbGtzOwo+ICsJfQo+ICAKPiAgCW1hc3Rlci0+ZmNsayA9IG1hc3Rlci0+Y2xrc1tp XS5jbGs7Cj4gLQlpZiAoSVNfRVJSKG1hc3Rlci0+ZmNsaykpCj4gLQkJcmV0dXJuIFBUUl9FUlIo bWFzdGVyLT5mY2xrKTsKPiArCWlmIChJU19FUlIobWFzdGVyLT5mY2xrKSkgewo+ICsJCXJldCA9 IFBUUl9FUlIobWFzdGVyLT5mY2xrKTsKPiArCQlnb3RvIGVycl9kaXNhYmxlX2Nsa3M7Cj4gKwl9 ClsgLi4uIF0KPiBAQCAtMjE2Myw5ICsyMjA5LDIxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN2 Y19pM2NfZHJ2ZGF0YSBucGNtODQ1X2RydmRhdGEgPSB7ClsgLi4uIF0KPiArc3RhdGljIGludCBh bWxfYW9faTNjX3RhaWxfY2xvY2tzKHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyLCBzdHJ1 Y3QgY2xrICpwYXJlbnQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1hc3Rlci0+ZGV2 Owo+ICsJc3RydWN0IGNsa19idWxrX2RhdGEgKm5ld19jbGtzOwo+ICsJc3RydWN0IGNsa19pbml0 X2RhdGEgaW5pdCA9IHt9Owo+ICsJc3RydWN0IGFtbF9pM2NfYW9fY2xrICphbzsKPiArCXN0cnVj dCBjbGsgKmZjbGs7Cj4gKwljaGFyIG5hbWVbNjRdOwo+ICsJaW50IHJldDsKPiArCj4gKwlhbyA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYW8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYW8p Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJmFvLT5sb2NrKTsK PiArCj4gKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyNkaXZfZW4iLCBkZXZfbmFt ZShkZXYpKTsKPiArCWluaXQubmFtZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZ2F0ZV9v cHM7Cj4gKwlpbml0LmZsYWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQ7Cj4gKwlpbml0LnBhcmVudF9k YXRhID0gJihzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4gKwkJLmluZGV4ID0gLTEsCj4gKwkJ Lmh3ID0gX19jbGtfZ2V0X2h3KHBhcmVudCksCj4gKwl9Owo+ICsJaW5pdC5udW1fcGFyZW50cyA9 IDE7Cj4gKwo+ICsJYW8tPmRpdl9lbi5yZWcgPSBtYXN0ZXItPnJlZ3MgKyBBTUxfQU9fSTNDX0ZD TEtfRElWX0NUUkw7Cj4gKwlhby0+ZGl2X2VuLmJpdF9pZHggPSBBTUxfQU9fSTNDX0ZDTEtfRElW X0VOX1NISUZUOwo+ICsJYW8tPmRpdl9lbi5ody5pbml0ID0gJmluaXQ7Cj4gKwlhby0+ZGl2X2Vu LmxvY2sgPSAmYW8tPmxvY2s7Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2 LCAmYW8tPmRpdl9lbi5odyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2Jl KGRldiwgcmV0LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLCBuYW1lKTsKPiArCj4gKwlzbnBy aW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyNkaXYiLCBkZXZfbmFtZShkZXYpKTsKPiArCWlu aXQubmFtZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZGl2aWRlcl9vcHM7Cj4gKwlpbml0 LmZsYWdzID0gMDsKPiArCWluaXQucGFyZW50X2RhdGEgPSAmKHN0cnVjdCBjbGtfcGFyZW50X2Rh dGEpIHsKPiArCQkuaW5kZXggPSAtMSwKPiArCQkuaHcgPSAmYW8tPmRpdl9lbi5odywKPiArCX07 Cj4gKwlpbml0Lm51bV9wYXJlbnRzID0gMTsKPiArCj4gKwlhby0+ZGl2LnJlZyA9IG1hc3Rlci0+ cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RSTDsKPiArCWFvLT5kaXYuc2hpZnQgPSBBTUxf QU9fSTNDX0ZDTEtfRElWX1NISUZUOwo+ICsJYW8tPmRpdi53aWR0aCA9IEFNTF9BT19JM0NfRkNM S19ESVZfV0lEVEg7Cj4gKwlhby0+ZGl2Lmh3LmluaXQgPSAmaW5pdDsKPiArCWFvLT5kaXYubG9j ayA9ICZhby0+bG9jazsKPiArCj4gKwlyZXQgPSBkZXZtX2Nsa19od19yZWdpc3RlcihkZXYsICZh by0+ZGl2Lmh3KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsIG5hbWUpOwo+ICsKPiArCXNucHJpbnRmKG5h bWUsIHNpemVvZihuYW1lKSwgIiVzI2dhdGUiLCBkZXZfbmFtZShkZXYpKTsKPiArCWluaXQubmFt ZSA9IG5hbWU7Cj4gKwlpbml0Lm9wcyA9ICZjbGtfZ2F0ZV9vcHM7Cj4gKwlpbml0LmZsYWdzID0g Q0xLX1NFVF9SQVRFX1BBUkVOVCB8IENMS19JR05PUkVfVU5VU0VEOwo+ICsJaW5pdC5wYXJlbnRf ZGF0YSA9ICYoc3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+ICsJCS5pbmRleCA9IC0xLAo+ICsJ CS5odyA9ICZhby0+ZGl2Lmh3LAo+ICsJfTsKPiArCWluaXQubnVtX3BhcmVudHMgPSAxOwo+ICsK PiArCWFvLT5nYXRlLnJlZyA9IG1hc3Rlci0+cmVncyArIEFNTF9BT19JM0NfRkNMS19ESVZfQ1RS TDsKPiArCWFvLT5nYXRlLmJpdF9pZHggPSBBTUxfQU9fSTNDX0ZDTEtfRU5fU0hJRlQ7Cj4gKwlh by0+Z2F0ZS5ody5pbml0ID0gJmluaXQ7Cj4gKwlhby0+Z2F0ZS5sb2NrID0gJmFvLT5sb2NrOwo+ ICsKPiArCXJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgJmFvLT5nYXRlLmh3KTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8g cmVnaXN0ZXIgJXNcbiIsIG5hbWUpOwoKW1NldmVyaXR5OiBNZWRpdW1dCkNhbiB0aGUgY2xvY2sg ZnJhbWV3b3JrIHJlYWQgQU1MX0FPX0kzQ19GQ0xLX0RJVl9DVFJMIHdoaWxlIHBjbGsgaXMKZGlz YWJsZWQgZHVyaW5nIHJ1bnRpbWUgc3VzcGVuZD8KCnN2Y19pM2NfbWFzdGVyX3Byb2JlKCkgaW52 b2tlcyB2ZW5kb3JfaW5pdCgpIGJlZm9yZSBjYWxsaW5nCnBtX3J1bnRpbWVfZW5hYmxlKCksIHNv IGNsa19wbV9ydW50aW1lX2luaXQoKSBzZWVzCnBtX3J1bnRpbWVfZW5hYmxlZChkZXYpID09IGZh bHNlIGFuZCBsZWF2ZXMgY29yZS0+cnBtX2VuYWJsZWQgdW5zZXQgZm9yCmRpdl9lbiwgZGl2LCBh bmQgZ2F0ZSwgYW5kIG5vbmUgb2YgdGhlIHRocmVlIGNsb2NrcyBzZXRzCkNMS19PUFNfUEFSRU5U X0VOQUJMRS4gIE9uY2Ugc3ZjX2kzY19ydW50aW1lX3N1c3BlbmQoKSBkaXNhYmxlcyBwY2xrLAph bnkgY2xvY2sgcXVlcnkgKHN1Y2ggYXMgcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9jbGsvY2xr X3N1bW1hcnkpCmNhbGxzIGNsa19nYXRlX29wcy5pc19lbmFibGVkIG9yIGNsa19kaXZpZGVyX29w cy5yZWNhbGNfcmF0ZSBhbmQgcGVyZm9ybXMKYW4gdW5jbG9ja2VkIE1NSU8gcmVhZCBvZiBBTUxf QU9fSTNDX0ZDTEtfRElWX0NUUkwuCgo+ICsJZmNsayA9IGRldm1fY2xrX2h3X2dldF9jbGsoZGV2 LCAmYW8tPmdhdGUuaHcsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihmY2xrKSkKPiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZmNsayksCj4gKwkJCQkgICAgICJ0YWlsIGkzYyBm YXN0IGNsb2NrIGZhaWxlZFxuIik7Cj4gKwo+ICsJbmV3X2Nsa3MgPSBkZXZtX2tjYWxsb2MoZGV2 LCBtYXN0ZXItPm51bV9jbGtzICsgMSwgc2l6ZW9mKCpuZXdfY2xrcyksCj4gKwkJCQlHRlBfS0VS TkVMKTsKPiArCWlmICghbmV3X2Nsa3MpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWVt Y3B5KG5ld19jbGtzLCBtYXN0ZXItPmNsa3MsCj4gKwkgICAgICAgbWFzdGVyLT5udW1fY2xrcyAq IHNpemVvZigqbWFzdGVyLT5jbGtzKSk7Cj4gKwluZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXS5p ZCA9ICJmYXN0X2NsayI7Cj4gKwluZXdfY2xrc1ttYXN0ZXItPm51bV9jbGtzXS5jbGsgPSBmY2xr Owo+ICsJbWFzdGVyLT5jbGtzID0gbmV3X2Nsa3M7Cj4gKwltYXN0ZXItPm51bV9jbGtzKys7Cj4g Kwo+ICsJLyoKPiArCSAqIEtlZXAgdGhlIGNsayBidWxrIHN0YXRlIGJhbGFuY2VkIGZvciB0aGUg Zm9sbG93aW5nCj4gKwkgKiBjbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZSgpIGNhbGxzIChlcnJv ciBwYXRocyBhbmQgcnVudGltZSBQTSkuCj4gKwkgKi8KPiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShmY2xrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJjYW4ndCBlbmFibGUgZmFzdF9jbGtcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cgpb U2V2ZXJpdHk6IE1lZGl1bV0KSWYgY2xrX3ByZXBhcmVfZW5hYmxlKGZjbGspIGZhaWxzIGhlcmUs IGRvZXMgdGhlIGVycl9kaXNhYmxlX2Nsa3MgcGF0aCBpbgpzdmNfaTNjX21hc3Rlcl9wcm9iZSgp IGNhbGwgY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoKSBvbiBhbiB1bnByZXBhcmVkCmFuZCBk aXNhYmxlZCBmY2xrPyAgbWFzdGVyLT5jbGtzIGFuZCBtYXN0ZXItPm51bV9jbGtzIGFyZSB1cGRh dGVkIHRvCmluY2x1ZGUgZmNsayBiZWZvcmUgY2xrX3ByZXBhcmVfZW5hYmxlKGZjbGspIHN1Y2Nl ZWRzLCB3aGljaCB3aWxsIHRyaWdnZXIKV0FSTigpIGFzc2VydGlvbnMgaW4gY2xrX2NvcmVfZGlz YWJsZSgpIGFuZCBjbGtfY29yZV91bnByZXBhcmUoKS4KCj4gK3N0YXRpYyBpbnQgYW1sX2kzY19p bml0KHN0cnVjdCBzdmNfaTNjX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBtYXN0ZXItPmRldjsKPiArCXN0cnVjdCBjbGsgKmZjbGs7Cj4gKwlsb25nIGZpbl9m cmVxOwo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlpZiAoc3ZjX2hhc19xdWlyayhtYXN0ZXIsIEFN TF9JM0NfUVVJUktfQU8pKSB7Cj4gKwkJLyoKPiArCQkgKiBjbGtfYnVsa19nZXRfYWxsKCkgcHJl c2VydmVzIHRoZSBEVCBvcmRlciwgYW5kIHRoZQo+ICsJCSAqIGJpbmRpbmcgcmVzdHJpY3RzIHRo ZSBBTyB2YXJpYW50IHRvIGV4YWN0bHkgb25lIGNsb2NrLAo+ICsJCSAqIHdoaWNoIGlzIGFsd2F5 cyAicGNsayIuICBTbyBjbGtzWzBdIGlzIHRoZSBpbnB1dCBvZiB0aGUKPiArCQkgKiBpbnRlcm5h bCBkaXZpZGVyIGNoYWluLgo+ICsJCSAqLwo+ICsJCWlmIChzdHJjbXAobWFzdGVyLT5jbGtzWzBd LmlkLCAicGNsayIpKQo+ICsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4g KwkJCQkJICAgICAiaW52YWxpZCBBTyBpbnB1dCBjbG9ja1xuIik7CgpbU2V2ZXJpdHk6IE1lZGl1 bV0KQ2FuIHRoaXMgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIERUIG5vZGUgb21p dHMgY2xvY2tzIG9yCmNsb2NrLW5hbWVzPwoKZGV2bV9jbGtfYnVsa19nZXRfYWxsKCkgcmV0dXJu cyAwIHdpdGggbWFzdGVyLT5jbGtzID09IE5VTEwgd2hlbiBubwpjbG9ja3MgYXJlIHByZXNlbnQg aW4gRFQgKHBhc3NpbmcgdGhlIG1hc3Rlci0+bnVtX2Nsa3MgPCAwIGNoZWNrIGluCnN2Y19pM2Nf bWFzdGVyX3Byb2JlKCkpLCBhbmQgbGVhdmVzIG1hc3Rlci0+Y2xrc1swXS5pZCBhcyBOVUxMIGlm CmNsb2NrLW5hbWVzIGlzIG1pc3NpbmcuCgo+ICsKPiArCQlyZXQgPSBhbWxfYW9faTNjX3RhaWxf Y2xvY2tzKG1hc3RlciwgbWFzdGVyLT5jbGtzWzBdLmNsayk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2xr czsgaSsrKSB7Cj4gKwkJaWYgKCFzdHJjbXAobWFzdGVyLT5jbGtzW2ldLmlkLCAiZmFzdF9jbGsi KSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGkgPT0gbWFzdGVyLT5udW1fY2xrcykK PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gKwkJCQkgICAgICJjYW4n dCBnZXQgSTNDIGZhc3QgY2xvY2tcbiIpOwo+ICsKPiArCWZjbGsgPSBtYXN0ZXItPmNsa3NbaV0u Y2xrOwo+ICsJaWYgKElTX0VSUihmY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihmY2xrKTsKCltT ZXZlcml0eTogTG93XQpUaGlzIGlzbid0IGEgYnVnLCBidXQgdGhpcyBmYXN0X2NsayBsb29rdXAg YW5kIElTX0VSUigpIGNoZWNrIGR1cGxpY2F0ZQp0aGUgaWRlbnRpY2FsIGxvb3AgdGhhdCBydW5z IGluIHN2Y19pM2NfbWFzdGVyX3Byb2JlKCkgcmlnaHQgYWZ0ZXIKdmVuZG9yX2luaXQoKSByZXR1 cm5zLiAgQ291bGQgbWFzdGVyLT5mY2xrIGJlIHJlc29sdmVkIG9uY2UgaW4gYSBoZWxwZXIKb3Ig YmVmb3JlIHNldHRpbmcgdGhlIGNsb2NrIHJhdGU/CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcg aHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMTA2LWE5X2kzYy12My0wLTgwNGI2 OWI5MDk1YkBhbWxvZ2ljLmNvbT9wYXJ0PTEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9n aWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK