From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F4041CCF9E3 for ; Mon, 10 Nov 2025 09:20:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=hxLXwdvcR73afnWX3+U+TbZmEVnvtJ1WDn3vMJOYfeI=; b=ZrDUF3JjrriiUjjDFPnM3gYJbp L4JcKed2y0rTbQ0L2nywfORkkUG5M4Ih6ZrarXzOILAIOQH77bpy/iNs3FZoXEvrQ4r3DTFconkJl hXeCHsLpzahRQoMFE/L2PQ5GdU6kF3E6yxJn/mHQTKfLcKH12bCyQfHJPh1P3rpZesWTBXBCtxEql h+vna4yNQVMfEsXIpzFTfeCSERDLOI4W6tzaRnnX1dRiXkWPSJSAP9BAHGMvOsEYduK7Q4GJ3HC+1 Kvk91dh9P0MQn88aooUH9hMYaZsd8g8qCCXmmouRNl18wVDF90H7Bry1EcM5sSNpXHgBm2bO9szKV JnoCDGzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vIO43-000000054kt-1mxQ; Mon, 10 Nov 2025 09:19:55 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vIO3z-000000054jn-2UUo; Mon, 10 Nov 2025 09:19:53 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1762766377; cv=none; d=zohomail.com; s=zohoarc; b=mQxPVYOATQezqBL5yCJPKwUbX+JgMrUABoUyvim3PFza8c5ZHhZestibHiJFWxXvoUng13jVC8P9S64jLTObD3EpZPUjgof53bxKAflmbD/d78+0IWCG8rNnUURNAQ8Oje3LhaAfmz53emfB473ehmaxkoUhLVNdPpqAiCm1FeU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762766377; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=hxLXwdvcR73afnWX3+U+TbZmEVnvtJ1WDn3vMJOYfeI=; b=AUtP6OnBexLHP6078mlNSuvrN1eMtg8eyILcYQm+PCUyEel5aO3GjP5o+k/IR2p8jF5aO/vUOfWan+DKf+K6QVxlPMK3JNUqhpcbD2Q6ZQc69QnOsjAw2W5iAuL+QEHBPlJ0aoWglABTbUZzwNG9t4F8qJN4UUICHgiaxNcj24E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1762766376; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=hxLXwdvcR73afnWX3+U+TbZmEVnvtJ1WDn3vMJOYfeI=; b=FSyKtglpf319WU2vjW77dgt25xU6yIInC/sCx6LK4hbKihknuUJcM+Xfc4doAzdm TkVp3GcYUsXL3ydIq01zsOAj8rnMcOSkAt6BZ5AUWKkDs6fcC2OqtvmkDzvhvjE66+d HJOO9ylHv/KRJd9AOt8FaM/tBgmLyh5foC6PyvK0= Received: by mx.zohomail.com with SMTPS id 1762766374404175.65977685098846; Mon, 10 Nov 2025 01:19:34 -0800 (PST) From: Nicolas Frattaroli To: Peter Wang =?UTF-8?B?KOeOi+S/oeWPiyk=?= , Chunfeng Yun =?UTF-8?B?KOS6keaYpeWzsCk=?= , "kishon@kernel.org" , "avri.altman@wdc.com" , "bvanassche@acm.org" , "martin.petersen@oracle.com" , "broonie@kernel.org" , "alim.akhtar@samsung.com" , "chu.stanley@gmail.com" , "conor+dt@kernel.org" , "p.zabel@pengutronix.de" , "robh@kernel.org" , "James.Bottomley@HansenPartnership.com" , "lgirdwood@gmail.com" , "vkoul@kernel.org" , "matthias.bgg@gmail.com" , "krzk+dt@kernel.org" , AngeloGioacchino Del Regno , Chaotian Jing =?UTF-8?B?KOS6leacneWkqSk=?= Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "devicetree@vger.kernel.org" , "kernel@collabora.com" , Louis-Alexis Eyraud , "linux-scsi@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-phy@lists.infradead.org" Subject: Re: [PATCH v3 09/24] scsi: ufs: mediatek: Rework the crypt-boost stuff Date: Mon, 10 Nov 2025 10:19:25 +0100 Message-ID: <6210035.lOV4Wx5bFT@workhorse> In-Reply-To: <9ae7495023a8562566ff57bd2dfa60524194ee30.camel@mediatek.com> References: <20251023-mt8196-ufs-v3-0-0f04b4a795ff@collabora.com> <20251023-mt8196-ufs-v3-9-0f04b4a795ff@collabora.com> <9ae7495023a8562566ff57bd2dfa60524194ee30.camel@mediatek.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251110_011951_686104_382A5EB8 X-CRM114-Status: GOOD ( 30.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tuesday, 4 November 2025 08:28:18 Central European Standard Time Chaotia= n Jing (=E4=BA=95=E6=9C=9D=E5=A4=A9) wrote: > On Thu, 2025-10-23 at 21:49 +0200, Nicolas Frattaroli wrote: > > I don't know whether the crypt-boost functionality as it is currently > > implemented is even appropriate for mainline. It might be better done > > in > > some generic way. But what I do know is that I can rework the code to > > make it less obtuse. > >=20 > > Prefix the boost stuff with the appropriate vendor prefix, remove the > > pointless clock wrappers, and rework the function. > >=20 > > Signed-off-by: Nicolas Frattaroli > > --- > > drivers/ufs/host/ufs-mediatek.c | 91 +++++++++++++++-------------- > > ------------ > > 1 file changed, 32 insertions(+), 59 deletions(-) > >=20 > > diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs- > > mediatek.c > > index 131f71145a12..9c0ac72d6e43 100644 > > --- a/drivers/ufs/host/ufs-mediatek.c > > +++ b/drivers/ufs/host/ufs-mediatek.c > > @@ -562,21 +562,6 @@ static int ufs_mtk_mphy_power_on(struct ufs_hba > > *hba, bool on) > > return 0; > > } > > =20 > > -static int ufs_mtk_get_host_clk(struct device *dev, const char > > *name, > > - struct clk **clk_out) > > -{ > > - struct clk *clk; > > - int err =3D 0; > > - > > - clk =3D devm_clk_get(dev, name); > > - if (IS_ERR(clk)) > > - err =3D PTR_ERR(clk); > > - else > > - *clk_out =3D clk; > > - > > - return err; > > -} > > - > > static void ufs_mtk_boost_crypt(struct ufs_hba *hba, bool boost) > > { > > struct ufs_mtk_host *host =3D ufshcd_get_variant(hba); > > @@ -633,65 +618,53 @@ static void ufs_mtk_boost_crypt(struct ufs_hba > > *hba, bool boost) > > clk_disable_unprepare(cfg->clk_crypt_mux); > > } > > =20 > > -static int ufs_mtk_init_host_clk(struct ufs_hba *hba, const char > > *name, > > - struct clk **clk) > > -{ > > - int ret; > > - > > - ret =3D ufs_mtk_get_host_clk(hba->dev, name, clk); > > - if (ret) { > > - dev_info(hba->dev, "%s: failed to get %s: %d", > > __func__, > > - name, ret); > > - } > > - > > - return ret; > > -} > > - > > -static void ufs_mtk_init_boost_crypt(struct ufs_hba *hba) > > +static int ufs_mtk_init_boost_crypt(struct ufs_hba *hba) > You change the return type but never checked the return value when > calling this function ? Yeah, I should probably check the return in ufs_mtk_init_host_caps instead of continuing on silently. > > { > > struct ufs_mtk_host *host =3D ufshcd_get_variant(hba); > > struct ufs_mtk_crypt_cfg *cfg; > > struct device *dev =3D hba->dev; > > - struct regulator *reg; > > - u32 volt; > > + int ret; > > =20 > > - host->crypt =3D devm_kzalloc(dev, sizeof(*(host->crypt)), > > - GFP_KERNEL); > > - if (!host->crypt) > > - goto disable_caps; > > + cfg =3D devm_kzalloc(dev, sizeof(*cfg), GFP_KERNEL); > > + if (!cfg) > > + return -ENOMEM; > > =20 > > - reg =3D devm_regulator_get_optional(dev, "dvfsrc-vcore"); > > - if (IS_ERR(reg)) { > > - dev_info(dev, "failed to get dvfsrc-vcore: %ld", > > - PTR_ERR(reg)); > > - goto disable_caps; > > + cfg->reg_vcore =3D devm_regulator_get_optional(dev, "dvfsrc- > > vcore"); > > + if (IS_ERR(cfg->reg_vcore)) { > > + dev_err(dev, "Failed to get dvfsrc-vcore: %pe", cfg- > > >reg_vcore); > Since this regulator is optional, why use dev_err ? and why retune an > error since you never check the return value ? Because get_optional doesn't mean what you think it means. It means the function returns -ENODEV if the regulator is absent, instead of creating a dummy supply. We want to hard error out if the regulator is absent, because the regulator is needed. Whether or not the return code is checked makes no functional difference in this case. If this function exits early, UFS_MTK_CAP_BOOST_CRYPT_ENGINE isn't added to the host caps, and the host->crypt member isn't set to cfg. The return code may be useful for additional logging, which is not critical to the correctness of the code. > > + return PTR_ERR(cfg->reg_vcore); > > } > > =20 > > - if (of_property_read_u32(dev->of_node, "boost-crypt-vcore-min", > > - &volt)) { > > - dev_info(dev, "failed to get boost-crypt-vcore-min"); > > - goto disable_caps; > > + ret =3D of_property_read_u32(dev->of_node, "mediatek,boost-crypt- > > vcore-min", > > + &cfg->vcore_volt); > > + if (ret) { > > + dev_err(dev, "Failed to get mediatek,boost-crypt-vcore- > > min: %pe\n", > > + ERR_PTR(ret)); > > + return ret; > > } > > =20 > > - cfg =3D host->crypt; > > - if (ufs_mtk_init_host_clk(hba, "crypt_mux", > > - &cfg->clk_crypt_mux)) > > - goto disable_caps; > > + cfg->clk_crypt_mux =3D devm_clk_get(dev, "crypt_mux"); > > + if (IS_ERR(cfg->clk_crypt_mux)) { > > + dev_err(dev, "Failed to get clock crypt_mux: %pe\n", > > cfg->clk_crypt_mux); > > + return PTR_ERR(cfg->clk_crypt_mux); > > + } > > =20 > > - if (ufs_mtk_init_host_clk(hba, "crypt_lp", > > - &cfg->clk_crypt_lp)) > > - goto disable_caps; > > + cfg->clk_crypt_lp =3D devm_clk_get(dev, "crypt_lp"); > > + if (IS_ERR(cfg->clk_crypt_lp)) { > > + dev_err(dev, "Failed to get clock crypt_lp: %pe\n", > > cfg->clk_crypt_lp); > > + return PTR_ERR(cfg->clk_crypt_lp); > > + } > > =20 > > - if (ufs_mtk_init_host_clk(hba, "crypt_perf", > > - &cfg->clk_crypt_perf)) > > - goto disable_caps; > > + cfg->clk_crypt_perf =3D devm_clk_get(dev, "crypt_perf"); > > + if (IS_ERR(cfg->clk_crypt_perf)) { > > + dev_err(dev, "Failed to get clock crypt_perf: %pe\n", > > cfg->clk_crypt_perf); > > + return PTR_ERR(cfg->clk_crypt_perf); > > + } > > =20 > > - cfg->reg_vcore =3D reg; > > - cfg->vcore_volt =3D volt; > > + host->crypt =3D cfg; > > host->caps |=3D UFS_MTK_CAP_BOOST_CRYPT_ENGINE; > > =20 > > -disable_caps: > > - return; > > + return 0; > > } > > =20 > > static void ufs_mtk_init_host_caps(struct ufs_hba *hba) > >=20 >=20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0339BCCFA13 for ; Mon, 10 Nov 2025 09:19:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YNtR5pW5QOoRNtMP4qjf0b8mu06ZrL9rxJ4YQwt9YX4=; b=YZNaAF0b+GCz1S 1SQ0GaiWiqbd8qY+C707uxYNvBZhxnAPpKm2BHU3O3r2IXsoTfIm9qe5YhiVLU8vpmTzV9xUN822q RTZlJbq2JuCU0bm4J3C1rnvTdTGFZcP+SI6ybNtuC2tBGREhY29KAdT9qjR3qXTRJMPxntOUujAcL FYOnnXiiyhFJP14HNQZWMqgFFdy7QVat5qgBQcEgpdkgVZrw1WQ6Fkd/3watr3zSt+n8d1Gx/1K4w 3rcR48gKKzKqbvHq5mfHogno0u2KhTx+zh4T+gWNXClsdUZz9ZReFABQVcVkKJD5gi1hFq/ETY8Vq Y5Yqq4x7KW4TEupn7IHg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vIO43-000000054lM-3CGF; Mon, 10 Nov 2025 09:19:55 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vIO3z-000000054jn-2UUo; Mon, 10 Nov 2025 09:19:53 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1762766377; cv=none; d=zohomail.com; s=zohoarc; b=mQxPVYOATQezqBL5yCJPKwUbX+JgMrUABoUyvim3PFza8c5ZHhZestibHiJFWxXvoUng13jVC8P9S64jLTObD3EpZPUjgof53bxKAflmbD/d78+0IWCG8rNnUURNAQ8Oje3LhaAfmz53emfB473ehmaxkoUhLVNdPpqAiCm1FeU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762766377; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=hxLXwdvcR73afnWX3+U+TbZmEVnvtJ1WDn3vMJOYfeI=; b=AUtP6OnBexLHP6078mlNSuvrN1eMtg8eyILcYQm+PCUyEel5aO3GjP5o+k/IR2p8jF5aO/vUOfWan+DKf+K6QVxlPMK3JNUqhpcbD2Q6ZQc69QnOsjAw2W5iAuL+QEHBPlJ0aoWglABTbUZzwNG9t4F8qJN4UUICHgiaxNcj24E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1762766376; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=hxLXwdvcR73afnWX3+U+TbZmEVnvtJ1WDn3vMJOYfeI=; b=FSyKtglpf319WU2vjW77dgt25xU6yIInC/sCx6LK4hbKihknuUJcM+Xfc4doAzdm TkVp3GcYUsXL3ydIq01zsOAj8rnMcOSkAt6BZ5AUWKkDs6fcC2OqtvmkDzvhvjE66+d HJOO9ylHv/KRJd9AOt8FaM/tBgmLyh5foC6PyvK0= Received: by mx.zohomail.com with SMTPS id 1762766374404175.65977685098846; Mon, 10 Nov 2025 01:19:34 -0800 (PST) From: Nicolas Frattaroli To: Peter Wang =?UTF-8?B?KOeOi+S/oeWPiyk=?= , Chunfeng Yun =?UTF-8?B?KOS6keaYpeWzsCk=?= , "kishon@kernel.org" , "avri.altman@wdc.com" , "bvanassche@acm.org" , "martin.petersen@oracle.com" , "broonie@kernel.org" , "alim.akhtar@samsung.com" , "chu.stanley@gmail.com" , "conor+dt@kernel.org" , "p.zabel@pengutronix.de" , "robh@kernel.org" , "James.Bottomley@HansenPartnership.com" , "lgirdwood@gmail.com" , "vkoul@kernel.org" , "matthias.bgg@gmail.com" , "krzk+dt@kernel.org" , AngeloGioacchino Del Regno , Chaotian Jing =?UTF-8?B?KOS6leacneWkqSk=?= Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "devicetree@vger.kernel.org" , "kernel@collabora.com" , Louis-Alexis Eyraud , "linux-scsi@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-phy@lists.infradead.org" Subject: Re: [PATCH v3 09/24] scsi: ufs: mediatek: Rework the crypt-boost stuff Date: Mon, 10 Nov 2025 10:19:25 +0100 Message-ID: <6210035.lOV4Wx5bFT@workhorse> In-Reply-To: <9ae7495023a8562566ff57bd2dfa60524194ee30.camel@mediatek.com> References: <20251023-mt8196-ufs-v3-0-0f04b4a795ff@collabora.com> <20251023-mt8196-ufs-v3-9-0f04b4a795ff@collabora.com> <9ae7495023a8562566ff57bd2dfa60524194ee30.camel@mediatek.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251110_011951_686104_382A5EB8 X-CRM114-Status: GOOD ( 30.86 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org T24gVHVlc2RheSwgNCBOb3ZlbWJlciAyMDI1IDA4OjI4OjE4IENlbnRyYWwgRXVyb3BlYW4gU3Rh bmRhcmQgVGltZSBDaGFvdGlhbiBKaW5nICjkupXmnJ3lpKkpIHdyb3RlOgo+IE9uIFRodSwgMjAy NS0xMC0yMyBhdCAyMTo0OSArMDIwMCwgTmljb2xhcyBGcmF0dGFyb2xpIHdyb3RlOgo+ID4gSSBk b24ndCBrbm93IHdoZXRoZXIgdGhlIGNyeXB0LWJvb3N0IGZ1bmN0aW9uYWxpdHkgYXMgaXQgaXMg Y3VycmVudGx5Cj4gPiBpbXBsZW1lbnRlZCBpcyBldmVuIGFwcHJvcHJpYXRlIGZvciBtYWlubGlu ZS4gSXQgbWlnaHQgYmUgYmV0dGVyIGRvbmUKPiA+IGluCj4gPiBzb21lIGdlbmVyaWMgd2F5LiBC dXQgd2hhdCBJIGRvIGtub3cgaXMgdGhhdCBJIGNhbiByZXdvcmsgdGhlIGNvZGUgdG8KPiA+IG1h a2UgaXQgbGVzcyBvYnR1c2UuCj4gPiAKPiA+IFByZWZpeCB0aGUgYm9vc3Qgc3R1ZmYgd2l0aCB0 aGUgYXBwcm9wcmlhdGUgdmVuZG9yIHByZWZpeCwgcmVtb3ZlIHRoZQo+ID4gcG9pbnRsZXNzIGNs b2NrIHdyYXBwZXJzLCBhbmQgcmV3b3JrIHRoZSBmdW5jdGlvbi4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogTmljb2xhcyBGcmF0dGFyb2xpIDxuaWNvbGFzLmZyYXR0YXJvbGlAY29sbGFib3JhLmNv bT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvdWZzL2hvc3QvdWZzLW1lZGlhdGVrLmMgfCA5MSArKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+ID4gLS0tLS0tLS0tLS0tCj4gPiAgMSBmaWxlIGNo YW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYyBiL2RyaXZlcnMvdWZzL2hvc3Qv dWZzLQo+ID4gbWVkaWF0ZWsuYwo+ID4gaW5kZXggMTMxZjcxMTQ1YTEyLi45YzBhYzcyZDZlNDMg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jCj4gPiArKysg Yi9kcml2ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jCj4gPiBAQCAtNTYyLDIxICs1NjIsNiBA QCBzdGF0aWMgaW50IHVmc19tdGtfbXBoeV9wb3dlcl9vbihzdHJ1Y3QgdWZzX2hiYQo+ID4gKmhi YSwgYm9vbCBvbikKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQg dWZzX210a19nZXRfaG9zdF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyCj4gPiAq bmFtZSwKPiA+IC0JCQkJc3RydWN0IGNsayAqKmNsa19vdXQpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg Y2xrICpjbGs7Cj4gPiAtCWludCBlcnIgPSAwOwo+ID4gLQo+ID4gLQljbGsgPSBkZXZtX2Nsa19n ZXQoZGV2LCBuYW1lKTsKPiA+IC0JaWYgKElTX0VSUihjbGspKQo+ID4gLQkJZXJyID0gUFRSX0VS UihjbGspOwo+ID4gLQllbHNlCj4gPiAtCQkqY2xrX291dCA9IGNsazsKPiA+IC0KPiA+IC0JcmV0 dXJuIGVycjsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIHZvaWQgdWZzX210a19ib29zdF9jcnlw dChzdHJ1Y3QgdWZzX2hiYSAqaGJhLCBib29sIGJvb3N0KQo+ID4gIHsKPiA+ICAJc3RydWN0IHVm c19tdGtfaG9zdCAqaG9zdCA9IHVmc2hjZF9nZXRfdmFyaWFudChoYmEpOwo+ID4gQEAgLTYzMyw2 NSArNjE4LDUzIEBAIHN0YXRpYyB2b2lkIHVmc19tdGtfYm9vc3RfY3J5cHQoc3RydWN0IHVmc19o YmEKPiA+ICpoYmEsIGJvb2wgYm9vc3QpCj4gPiAgCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZmct PmNsa19jcnlwdF9tdXgpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IHVmc19tdGtfaW5p dF9ob3N0X2NsayhzdHJ1Y3QgdWZzX2hiYSAqaGJhLCBjb25zdCBjaGFyCj4gPiAqbmFtZSwKPiA+ IC0JCQkJIHN0cnVjdCBjbGsgKipjbGspCj4gPiAtewo+ID4gLQlpbnQgcmV0Owo+ID4gLQo+ID4g LQlyZXQgPSB1ZnNfbXRrX2dldF9ob3N0X2NsayhoYmEtPmRldiwgbmFtZSwgY2xrKTsKPiA+IC0J aWYgKHJldCkgewo+ID4gLQkJZGV2X2luZm8oaGJhLT5kZXYsICIlczogZmFpbGVkIHRvIGdldCAl czogJWQiLAo+ID4gX19mdW5jX18sCj4gPiAtCQkJIG5hbWUsIHJldCk7Cj4gPiAtCX0KPiA+IC0K PiA+IC0JcmV0dXJuIHJldDsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgdWZzX210a19p bml0X2Jvb3N0X2NyeXB0KHN0cnVjdCB1ZnNfaGJhICpoYmEpCj4gPiArc3RhdGljIGludCB1ZnNf bXRrX2luaXRfYm9vc3RfY3J5cHQoc3RydWN0IHVmc19oYmEgKmhiYSkKPiBZb3UgY2hhbmdlIHRo ZSByZXR1cm4gdHlwZSBidXQgbmV2ZXIgY2hlY2tlZCB0aGUgcmV0dXJuIHZhbHVlIHdoZW4KPiBj YWxsaW5nIHRoaXMgZnVuY3Rpb24gPwoKWWVhaCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhl IHJldHVybiBpbiB1ZnNfbXRrX2luaXRfaG9zdF9jYXBzCmluc3RlYWQgb2YgY29udGludWluZyBv biBzaWxlbnRseS4KCj4gPiAgewo+ID4gIAlzdHJ1Y3QgdWZzX210a19ob3N0ICpob3N0ID0gdWZz aGNkX2dldF92YXJpYW50KGhiYSk7Cj4gPiAgCXN0cnVjdCB1ZnNfbXRrX2NyeXB0X2NmZyAqY2Zn Owo+ID4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoYmEtPmRldjsKPiA+IC0Jc3RydWN0IHJlZ3Vs YXRvciAqcmVnOwo+ID4gLQl1MzIgdm9sdDsKPiA+ICsJaW50IHJldDsKPiA+ICAKPiA+IC0JaG9z dC0+Y3J5cHQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKihob3N0LT5jcnlwdCkpLAo+ID4g LQkJCQkgICBHRlBfS0VSTkVMKTsKPiA+IC0JaWYgKCFob3N0LT5jcnlwdCkKPiA+IC0JCWdvdG8g ZGlzYWJsZV9jYXBzOwo+ID4gKwljZmcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNmZyks IEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIWNmZykKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4g IAo+ID4gLQlyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAiZHZmc3JjLXZj b3JlIik7Cj4gPiAtCWlmIChJU19FUlIocmVnKSkgewo+ID4gLQkJZGV2X2luZm8oZGV2LCAiZmFp bGVkIHRvIGdldCBkdmZzcmMtdmNvcmU6ICVsZCIsCj4gPiAtCQkJIFBUUl9FUlIocmVnKSk7Cj4g PiAtCQlnb3RvIGRpc2FibGVfY2FwczsKPiA+ICsJY2ZnLT5yZWdfdmNvcmUgPSBkZXZtX3JlZ3Vs YXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAiZHZmc3JjLQo+ID4gdmNvcmUiKTsKPiA+ICsJaWYgKElT X0VSUihjZmctPnJlZ192Y29yZSkpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdl dCBkdmZzcmMtdmNvcmU6ICVwZSIsIGNmZy0KPiA+ID5yZWdfdmNvcmUpOwo+IFNpbmNlIHRoaXMg cmVndWxhdG9yIGlzIG9wdGlvbmFsLCB3aHkgdXNlIGRldl9lcnIgPyBhbmQgd2h5IHJldHVuZSBh bgo+IGVycm9yIHNpbmNlIHlvdSBuZXZlciBjaGVjayB0aGUgcmV0dXJuIHZhbHVlID8KCkJlY2F1 c2UgZ2V0X29wdGlvbmFsIGRvZXNuJ3QgbWVhbiB3aGF0IHlvdSB0aGluayBpdCBtZWFucy4gSXQg bWVhbnMKdGhlIGZ1bmN0aW9uIHJldHVybnMgLUVOT0RFViBpZiB0aGUgcmVndWxhdG9yIGlzIGFi c2VudCwgaW5zdGVhZCBvZgpjcmVhdGluZyBhIGR1bW15IHN1cHBseS4gV2Ugd2FudCB0byBoYXJk IGVycm9yIG91dCBpZiB0aGUgcmVndWxhdG9yCmlzIGFic2VudCwgYmVjYXVzZSB0aGUgcmVndWxh dG9yIGlzIG5lZWRlZC4KCldoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2Vk IG1ha2VzIG5vIGZ1bmN0aW9uYWwKZGlmZmVyZW5jZSBpbiB0aGlzIGNhc2UuIElmIHRoaXMgZnVu Y3Rpb24gZXhpdHMgZWFybHksClVGU19NVEtfQ0FQX0JPT1NUX0NSWVBUX0VOR0lORSBpc24ndCBh ZGRlZCB0byB0aGUgaG9zdCBjYXBzLAphbmQgdGhlIGhvc3QtPmNyeXB0IG1lbWJlciBpc24ndCBz ZXQgdG8gY2ZnLgoKVGhlIHJldHVybiBjb2RlIG1heSBiZSB1c2VmdWwgZm9yIGFkZGl0aW9uYWwg bG9nZ2luZywgd2hpY2ggaXMgbm90CmNyaXRpY2FsIHRvIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUg Y29kZS4KCj4gPiArCQlyZXR1cm4gUFRSX0VSUihjZmctPnJlZ192Y29yZSk7Cj4gPiAgCX0KPiA+ ICAKPiA+IC0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImJvb3N0LWNy eXB0LXZjb3JlLW1pbiIsCj4gPiAtCQkJCSAmdm9sdCkpIHsKPiA+IC0JCWRldl9pbmZvKGRldiwg ImZhaWxlZCB0byBnZXQgYm9vc3QtY3J5cHQtdmNvcmUtbWluIik7Cj4gPiAtCQlnb3RvIGRpc2Fi bGVfY2FwczsKPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAi bWVkaWF0ZWssYm9vc3QtY3J5cHQtCj4gPiB2Y29yZS1taW4iLAo+ID4gKwkJCQkgICAmY2ZnLT52 Y29yZV92b2x0KTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gZ2V0IG1lZGlhdGVrLGJvb3N0LWNyeXB0LXZjb3JlLQo+ID4gbWluOiAlcGVcbiIsCj4gPiAr CQkJRVJSX1BUUihyZXQpKTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAgCX0KPiA+ICAKPiA+IC0J Y2ZnID0gaG9zdC0+Y3J5cHQ7Cj4gPiAtCWlmICh1ZnNfbXRrX2luaXRfaG9zdF9jbGsoaGJhLCAi Y3J5cHRfbXV4IiwKPiA+IC0JCQkJICAmY2ZnLT5jbGtfY3J5cHRfbXV4KSkKPiA+IC0JCWdvdG8g ZGlzYWJsZV9jYXBzOwo+ID4gKwljZmctPmNsa19jcnlwdF9tdXggPSBkZXZtX2Nsa19nZXQoZGV2 LCAiY3J5cHRfbXV4Iik7Cj4gPiArCWlmIChJU19FUlIoY2ZnLT5jbGtfY3J5cHRfbXV4KSkgewo+ ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrIGNyeXB0X211eDogJXBlXG4i LAo+ID4gY2ZnLT5jbGtfY3J5cHRfbXV4KTsKPiA+ICsJCXJldHVybiBQVFJfRVJSKGNmZy0+Y2xr X2NyeXB0X211eCk7Cj4gPiArCX0KPiA+ICAKPiA+IC0JaWYgKHVmc19tdGtfaW5pdF9ob3N0X2Ns ayhoYmEsICJjcnlwdF9scCIsCj4gPiAtCQkJCSAgJmNmZy0+Y2xrX2NyeXB0X2xwKSkKPiA+IC0J CWdvdG8gZGlzYWJsZV9jYXBzOwo+ID4gKwljZmctPmNsa19jcnlwdF9scCA9IGRldm1fY2xrX2dl dChkZXYsICJjcnlwdF9scCIpOwo+ID4gKwlpZiAoSVNfRVJSKGNmZy0+Y2xrX2NyeXB0X2xwKSkg ewo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrIGNyeXB0X2xwOiAlcGVc biIsCj4gPiBjZmctPmNsa19jcnlwdF9scCk7Cj4gPiArCQlyZXR1cm4gUFRSX0VSUihjZmctPmNs a19jcnlwdF9scCk7Cj4gPiArCX0KPiA+ICAKPiA+IC0JaWYgKHVmc19tdGtfaW5pdF9ob3N0X2Ns ayhoYmEsICJjcnlwdF9wZXJmIiwKPiA+IC0JCQkJICAmY2ZnLT5jbGtfY3J5cHRfcGVyZikpCj4g PiAtCQlnb3RvIGRpc2FibGVfY2FwczsKPiA+ICsJY2ZnLT5jbGtfY3J5cHRfcGVyZiA9IGRldm1f Y2xrX2dldChkZXYsICJjcnlwdF9wZXJmIik7Cj4gPiArCWlmIChJU19FUlIoY2ZnLT5jbGtfY3J5 cHRfcGVyZikpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9jayBjcnlw dF9wZXJmOiAlcGVcbiIsCj4gPiBjZmctPmNsa19jcnlwdF9wZXJmKTsKPiA+ICsJCXJldHVybiBQ VFJfRVJSKGNmZy0+Y2xrX2NyeXB0X3BlcmYpOwo+ID4gKwl9Cj4gPiAgCj4gPiAtCWNmZy0+cmVn X3Zjb3JlID0gcmVnOwo+ID4gLQljZmctPnZjb3JlX3ZvbHQgPSB2b2x0Owo+ID4gKwlob3N0LT5j cnlwdCA9IGNmZzsKPiA+ICAJaG9zdC0+Y2FwcyB8PSBVRlNfTVRLX0NBUF9CT09TVF9DUllQVF9F TkdJTkU7Cj4gPiAgCj4gPiAtZGlzYWJsZV9jYXBzOgo+ID4gLQlyZXR1cm47Cj4gPiArCXJldHVy biAwOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCB1ZnNfbXRrX2luaXRfaG9zdF9jYXBz KHN0cnVjdCB1ZnNfaGJhICpoYmEpCj4gPiAKPiAKCgoKCgotLSAKbGludXgtcGh5IG1haWxpbmcg bGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK