From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F6474252A2 for ; Tue, 7 Jul 2026 14:34:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783434898; cv=none; b=qHRJ4ogGtgWPKwYG6nYtJ0QSabRwP4j4gJYnsWX2l5I7x/nr54Fxy463AwS08UP0LaHd+nDjpG2Q8QFR+EWegE8I53OTsRSTSYt9qYM2PlMCO7NpX7mB2QpfZ0wRKV0amY07o4u91jeBS4ApBMrtoZiBoh3CZysBjufObSf+hlY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783434898; c=relaxed/simple; bh=5Gco5Go2gUItq1NrDKB2Wc8ehwqjUs7ylB0Eq13WeB8=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=uedeeEm5/0tLtpaoxlauxf+CPd3wA21DYEUfQuE549e4wD6+uzXszE+o0+Tj3/ppbcbfVUm0KWadwAdFhmXgKF5vyH3bnMaPg8uEKoIkzbvCiep8NqhB/wRLjlvr2yLvuqwqH3pIf0C4PLSkv0Ovjv36nYXCEXKB4q5uzlRKxaw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=N/WqgxbW; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="N/WqgxbW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 278E61F000E9; Tue, 7 Jul 2026 14:34:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783434896; bh=Suf8JZ6PIfFOLXhYIo/erubsBs3DC5+ejnPnfderUAw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=N/WqgxbWQcuTdvSwta08qJWHkMAMyu1YFOw+EKY2z830bV/xFvMt0yWilbwVVNylH Cw3v3h6LGok4cn7ZmHnnwQXsee4mr9yd5E4vH0Ee1ocPTLtxqCwc0QWi17YJgT9424 y0srJaGogX9BbG/yrw4dYGmAxIplYm92p5/Kr+0L62uiYpPgp73FV3WrhLpsqxMrmk kXxhgjUTKsnO6EnJzsdH7d/4kzg8NQX20C/NMp3jZs9JBseK4GmaXm6XXSsXKMimv3 SNyF1kjjH6jgvL/KPupPDMmsBajvYLgfcBI893PRYBe1ym3NRQXqXEm3I/udtZBipZ SukPnb+oduD7w== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 04/12] phy: phy-mtk-dp: Migrate register offsets to SoC specific pdata Reply-To: sashiko-reviews@lists.linux.dev To: "AngeloGioacchino Del Regno" Cc: neil.armstrong@linaro.org, linux-phy@lists.infradead.org, vkoul@kernel.org, conor+dt@kernel.org, robh@kernel.org, olteanv@gmail.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org In-Reply-To: <20260707141931.191172-5-angelogioacchino.delregno@collabora.com> References: <20260707141931.191172-1-angelogioacchino.delregno@collabora.com> <20260707141931.191172-5-angelogioacchino.delregno@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 07 Jul 2026 14:34:55 +0000 Message-Id: <20260707143456.278E61F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 6 potential issue(= s) to consider: New issues: - [High] PHY driving parameters are bulk written to the wrong starting regi= ster offset, corrupting hardware state. - [High] Missing NULL check on the result of `device_get_match_data()` lead= s to a NULL pointer dereference. - [Low] The array `off_dig_lane` in `mt8195_dp_phy_data` is initialized usi= ng a compound literal, causing a compilation error. - [Low] The variable `ret` is used without being declared in `mtk_dp_phy_pr= obe`, causing a build failure. - [Low] Missing `#include ` for `devm_pm_runtime_enable= `. Pre-existing issues: - [High] Dereferencing `dev->platform_data` before verifying it is not `NUL= L` causes a kernel panic. -- --- Patch [4]: [PATCH v2 04/12] phy: phy-mtk-dp: Migrate register offsets t= o SoC specific pdata --- commit b50fb23a21796e73379a3d3b300932c7ffb998c8 Author: AngeloGioacchino Del Regno Subject: phy: phy-mtk-dp: Migrate register offsets to SoC specific pdata This commit migrates the hardcoded register offsets in the MediaTek DP PHY driver to SoC-specific platform data. It also refactors the driving parameter initialization to loop through all lanes instead of hardcoding each lane. > diff --git a/drivers/phy/mediatek/phy-mtk-dp.c b/drivers/phy/mediatek/phy= -mtk-dp.c > index b042ab67ebaf3..915f148325c49 100644 > --- a/drivers/phy/mediatek/phy-mtk-dp.c > +++ b/drivers/phy/mediatek/phy-mtk-dp.c [ ... ] > @@ -94,15 +143,21 @@ static int mtk_dp_phy_init(struct phy *phy) > DRIVING_PARAM_7_DEFAULT, > DRIVING_PARAM_8_DEFAULT > }; > - > - regmap_bulk_write(dp_phy->regmap, MTK_DP_LANE0_DRIVING_PARAM_3, > - driving_params, ARRAY_SIZE(driving_params)); [ ... ] > + int i, ret; > + > + /* > + * Assume that all lanes need the same driving parameters: this > + * will bulk write from DRIVING_PARAM_0 to DRIVING_PARAM_8 on > + * all lanes (a grand total of [9 * num_lanes] 32-bit writes) > + */ > + for (i =3D 0; i < MTK_DP_PHY_MAX_LANES; i++) { > + ret =3D regmap_bulk_write(dp_phy->regmap, > + pdata->off_dig_lane[i] + reg, > + driving_params, > + ARRAY_SIZE(driving_params)); [Severity: High] Does this bulk write start at the correct register offset? The loop writes the driving_params array starting at the base offset for DP_PHYD_LAN_DRIVING_PARAM_0. However, the driving_params array only contain= s 6 elements (defaults for PARAM_3 through PARAM_8). Will this incorrectly write parameters 3-8 into the registers for 0-5, leav= ing registers 6-8 uninitialized and corrupting the hardware PHY configuration? > + if (ret) > + return ret; > + }; > =20 > return 0; > } [ ... ] > @@ -169,12 +233,19 @@ static void mtk_dp_phy_legacy_remove_lookup(void *d= ata) > phy_remove_lookup(phy, "dp", dev_name(dp_phy->dev)); > } > =20 > +static const struct mtk_dp_phy_pdata mt8195_dp_phy_data; > + > static int mtk_dp_phy_legacy_probe(struct platform_device *pdev, struct = mtk_dp_phy *dp_phy) > { > struct device *dev =3D &pdev->dev; > struct phy *phy; > int ret; > =20 > + /* > + * If legacy platform driver probe, assume this is MT8195 or compatible > + * with a devicetree that was not migrated to the new, proper bindings. > + */ > + dp_phy->pdata =3D &mt8195_dp_phy_data; > dp_phy->regmap =3D *(struct regmap **)dev->platform_data; [Severity: High] This is a pre-existing issue, but can dev->platform_data be NULL here? The code directly dereferences dev->platform_data to assign dp_phy->regmap before checking if it is NULL on the next line. If a device is probed witho= ut devicetree and platform data is missing, will this trigger a kernel panic? > if (!dp_phy->regmap) > return dev_err_probe(dev, -EINVAL, "No platform data available\n"); [ ... ] > @@ -227,6 +298,8 @@ static int mtk_dp_phy_probe(struct platform_device *p= dev) > if (IS_ERR(dp_phy->regmap)) > return PTR_ERR(dp_phy->regmap); > =20 > + dp_phy->pdata =3D device_get_match_data(dev); [Severity: High] Could device_get_match_data() return NULL here? If the driver is manually bound via sysfs without a matching OF compatible (but the device has an of_node), device_get_match_data() will return NULL. Since dp_phy->pdata is later unconditionally dereferenced in functions like mtk_dp_phy_init() to look up register offsets, will this lead to a NULL poi= nter dereference? > + > phy =3D devm_phy_create(dev, NULL, &mtk_dp_phy_dev_ops); [ ... ] [Severity: Low] Is the variable ret declared in the scope of mtk_dp_phy_probe? It was noted that ret might be assigned the result of devm_pm_runtime_enabl= e() and evaluated: ret =3D devm_pm_runtime_enable(dev); if (ret) return ret; But it appears it might not be declared within the local scope, which could cause a compilation error. [Severity: Low] Should be included in this file? If devm_pm_runtime_enable() is used, it relies on the Power Management API. Relying on implicit transitive inclusion for Power Management APIs can= be fragile and may cause a build failure. > @@ -245,8 +318,15 @@ static int mtk_dp_phy_probe(struct platform_device *= pdev) > return 0; > } > =20 > +static const struct mtk_dp_phy_pdata mt8195_dp_phy_data =3D { > + .off_dig_glb =3D 0x1000, > + .off_dig_lane =3D (const u16[]) { 0x1100, 0x1200, 0x1300, 0x1400 }, [Severity: Low] Will this array initialization compile correctly? In standard C, an array member inside a struct should be initialized using a brace-enclosed list. Using a compound literal cast like (const u16[]) decays to a pointer, which may cause a compilation error for an array type initial= izer. > + .regs_dig_glb =3D mt8195_phy_dig_glb_regs, > + .regs_dig_lane =3D mt8195_phy_dig_lane_regs, > +}; --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260707141931.1911= 72-1-angelogioacchino.delregno@collabora.com?part=3D4 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 BFC17C43602 for ; Tue, 7 Jul 2026 14:34:58 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2mNyBmNAnofff0AySpb6OPJGvJ/V7Ecw+wVlI/lDQrY=; b=HpFDUt9Z3w3O6x MCLelNAjm8LyIt1k8aiNWm7rj2L9oPwVaCVYveTKv0kOZiKkkrGQauCis21jtlEW7V57Qt55ZdU0A /SVM1bwHOtv+uL9/k3eoLjwfMAJTriE44pfEqLnqMCQEOjNnNd8wbYtYxgYY2NPEcPWLK3Up6pGb8 nrsiJhia2cLNOok35QB5wSjK/M7x/wiNP93VU50gV05fFFA6Vxo2/Lf6MsO1ynMt4YvLdF+Ey0ojU NsHBtrcDN/yBA0pgeSYeddkBVzdSMBPTlrCxPWkXxaR4fVHwPPg/L5Hwo6FyrIxIsEW27I0+ESatM FN8NSwyVnAVcY1FzqXlg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wh6t0-0000000FBex-2IFG; Tue, 07 Jul 2026 14:34:58 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wh6sz-0000000FBek-0U9T for linux-phy@lists.infradead.org; Tue, 07 Jul 2026 14:34:57 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id C4F7943AFC; Tue, 7 Jul 2026 14:34:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 278E61F000E9; Tue, 7 Jul 2026 14:34:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783434896; bh=Suf8JZ6PIfFOLXhYIo/erubsBs3DC5+ejnPnfderUAw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=N/WqgxbWQcuTdvSwta08qJWHkMAMyu1YFOw+EKY2z830bV/xFvMt0yWilbwVVNylH Cw3v3h6LGok4cn7ZmHnnwQXsee4mr9yd5E4vH0Ee1ocPTLtxqCwc0QWi17YJgT9424 y0srJaGogX9BbG/yrw4dYGmAxIplYm92p5/Kr+0L62uiYpPgp73FV3WrhLpsqxMrmk kXxhgjUTKsnO6EnJzsdH7d/4kzg8NQX20C/NMp3jZs9JBseK4GmaXm6XXSsXKMimv3 SNyF1kjjH6jgvL/KPupPDMmsBajvYLgfcBI893PRYBe1ym3NRQXqXEm3I/udtZBipZ SukPnb+oduD7w== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 04/12] phy: phy-mtk-dp: Migrate register offsets to SoC specific pdata To: "AngeloGioacchino Del Regno" Cc: neil.armstrong@linaro.org, linux-phy@lists.infradead.org, vkoul@kernel.org, conor+dt@kernel.org, robh@kernel.org, olteanv@gmail.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org In-Reply-To: <20260707141931.191172-5-angelogioacchino.delregno@collabora.com> References: <20260707141931.191172-1-angelogioacchino.delregno@collabora.com> <20260707141931.191172-5-angelogioacchino.delregno@collabora.com> Date: Tue, 07 Jul 2026 14:34:55 +0000 Message-Id: <20260707143456.278E61F000E9@smtp.kernel.org> 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: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 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 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBQ SFkgZHJpdmluZyBwYXJhbWV0ZXJzIGFyZSBidWxrIHdyaXR0ZW4gdG8gdGhlIHdyb25nIHN0YXJ0 aW5nIHJlZ2lzdGVyIG9mZnNldCwgY29ycnVwdGluZyBoYXJkd2FyZSBzdGF0ZS4KLSBbSGlnaF0g TWlzc2luZyBOVUxMIGNoZWNrIG9uIHRoZSByZXN1bHQgb2YgYGRldmljZV9nZXRfbWF0Y2hfZGF0 YSgpYCBsZWFkcyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4KLSBbTG93XSBUaGUgYXJy YXkgYG9mZl9kaWdfbGFuZWAgaW4gYG10ODE5NV9kcF9waHlfZGF0YWAgaXMgaW5pdGlhbGl6ZWQg dXNpbmcgYSBjb21wb3VuZCBsaXRlcmFsLCBjYXVzaW5nIGEgY29tcGlsYXRpb24gZXJyb3IuCi0g W0xvd10gVGhlIHZhcmlhYmxlIGByZXRgIGlzIHVzZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBp biBgbXRrX2RwX3BoeV9wcm9iZWAsIGNhdXNpbmcgYSBidWlsZCBmYWlsdXJlLgotIFtMb3ddIE1p c3NpbmcgYCNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+YCBmb3IgYGRldm1fcG1fcnVudGlt ZV9lbmFibGVgLgoKUHJlLWV4aXN0aW5nIGlzc3VlczoKLSBbSGlnaF0gRGVyZWZlcmVuY2luZyBg ZGV2LT5wbGF0Zm9ybV9kYXRhYCBiZWZvcmUgdmVyaWZ5aW5nIGl0IGlzIG5vdCBgTlVMTGAgY2F1 c2VzIGEga2VybmVsIHBhbmljLgotLQoKLS0tIFBhdGNoIFs0XTogW1BBVENIIHYyIDA0LzEyXSBw aHk6IHBoeS1tdGstZHA6IE1pZ3JhdGUgcmVnaXN0ZXIgb2Zmc2V0cyB0byBTb0Mgc3BlY2lmaWMg cGRhdGEgLS0tCmNvbW1pdCBiNTBmYjIzYTIxNzk2ZTczMzc5YTNkM2IzMDA5MzJjN2ZmYjk5OGM4 CkF1dGhvcjogQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gPGFuZ2Vsb2dpb2FjY2hpbm8uZGVs cmVnbm9AY29sbGFib3JhLmNvbT4KU3ViamVjdDogcGh5OiBwaHktbXRrLWRwOiBNaWdyYXRlIHJl Z2lzdGVyIG9mZnNldHMgdG8gU29DIHNwZWNpZmljIHBkYXRhCgpUaGlzIGNvbW1pdCBtaWdyYXRl cyB0aGUgaGFyZGNvZGVkIHJlZ2lzdGVyIG9mZnNldHMgaW4gdGhlIE1lZGlhVGVrIERQIFBIWQpk cml2ZXIgdG8gU29DLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEuIEl0IGFsc28gcmVmYWN0b3JzIHRo ZSBkcml2aW5nCnBhcmFtZXRlciBpbml0aWFsaXphdGlvbiB0byBsb29wIHRocm91Z2ggYWxsIGxh bmVzIGluc3RlYWQgb2YgaGFyZGNvZGluZwplYWNoIGxhbmUuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLWRwLmMgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHkt bXRrLWRwLmMKPiBpbmRleCBiMDQyYWI2N2ViYWYzLi45MTVmMTQ4MzI1YzQ5IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstZHAuYwo+ICsrKyBiL2RyaXZlcnMvcGh5 L21lZGlhdGVrL3BoeS1tdGstZHAuYwoKWyAuLi4gXQoKPiBAQCAtOTQsMTUgKzE0MywyMSBAQCBz dGF0aWMgaW50IG10a19kcF9waHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCj4gIAkJRFJJVklOR19Q QVJBTV83X0RFRkFVTFQsCj4gIAkJRFJJVklOR19QQVJBTV84X0RFRkFVTFQKPiAgCX07Cj4gLQo+ IC0JcmVnbWFwX2J1bGtfd3JpdGUoZHBfcGh5LT5yZWdtYXAsIE1US19EUF9MQU5FMF9EUklWSU5H X1BBUkFNXzMsCj4gLQkJCSAgZHJpdmluZ19wYXJhbXMsIEFSUkFZX1NJWkUoZHJpdmluZ19wYXJh bXMpKTsKClsgLi4uIF0KCj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBBc3N1bWUg dGhhdCBhbGwgbGFuZXMgbmVlZCB0aGUgc2FtZSBkcml2aW5nIHBhcmFtZXRlcnM6IHRoaXMKPiAr CSAqIHdpbGwgYnVsayB3cml0ZSBmcm9tIERSSVZJTkdfUEFSQU1fMCB0byBEUklWSU5HX1BBUkFN Xzggb24KPiArCSAqIGFsbCBsYW5lcyAoYSBncmFuZCB0b3RhbCBvZiBbOSAqIG51bV9sYW5lc10g MzItYml0IHdyaXRlcykKPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IE1US19EUF9QSFlfTUFY X0xBTkVTOyBpKyspIHsKPiArCQlyZXQgPSByZWdtYXBfYnVsa193cml0ZShkcF9waHktPnJlZ21h cCwKPiArCQkJCQlwZGF0YS0+b2ZmX2RpZ19sYW5lW2ldICsgcmVnLAo+ICsJCQkJCWRyaXZpbmdf cGFyYW1zLAo+ICsJCQkJCUFSUkFZX1NJWkUoZHJpdmluZ19wYXJhbXMpKTsKCltTZXZlcml0eTog SGlnaF0KRG9lcyB0aGlzIGJ1bGsgd3JpdGUgc3RhcnQgYXQgdGhlIGNvcnJlY3QgcmVnaXN0ZXIg b2Zmc2V0PwoKVGhlIGxvb3Agd3JpdGVzIHRoZSBkcml2aW5nX3BhcmFtcyBhcnJheSBzdGFydGlu ZyBhdCB0aGUgYmFzZSBvZmZzZXQgZm9yCkRQX1BIWURfTEFOX0RSSVZJTkdfUEFSQU1fMC4gSG93 ZXZlciwgdGhlIGRyaXZpbmdfcGFyYW1zIGFycmF5IG9ubHkgY29udGFpbnMgNgplbGVtZW50cyAo ZGVmYXVsdHMgZm9yIFBBUkFNXzMgdGhyb3VnaCBQQVJBTV84KS4KCldpbGwgdGhpcyBpbmNvcnJl Y3RseSB3cml0ZSBwYXJhbWV0ZXJzIDMtOCBpbnRvIHRoZSByZWdpc3RlcnMgZm9yIDAtNSwgbGVh dmluZwpyZWdpc3RlcnMgNi04IHVuaW5pdGlhbGl6ZWQgYW5kIGNvcnJ1cHRpbmcgdGhlIGhhcmR3 YXJlIFBIWSBjb25maWd1cmF0aW9uPwoKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ ICsJfTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQoKWyAuLi4gXQoKPiBAQCAtMTY5LDEyICsyMzMs MTkgQEAgc3RhdGljIHZvaWQgbXRrX2RwX3BoeV9sZWdhY3lfcmVtb3ZlX2xvb2t1cCh2b2lkICpk YXRhKQo+ICAJcGh5X3JlbW92ZV9sb29rdXAocGh5LCAiZHAiLCBkZXZfbmFtZShkcF9waHktPmRl dikpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kcF9waHlfcGRhdGEgbXQ4 MTk1X2RwX3BoeV9kYXRhOwo+ICsKPiAgc3RhdGljIGludCBtdGtfZHBfcGh5X2xlZ2FjeV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbXRrX2RwX3BoeSAqZHBfcGh5 KQo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICAJc3RydWN0IHBo eSAqcGh5Owo+ICAJaW50IHJldDsKPiAgCj4gKwkvKgo+ICsJICogSWYgbGVnYWN5IHBsYXRmb3Jt IGRyaXZlciBwcm9iZSwgYXNzdW1lIHRoaXMgaXMgTVQ4MTk1IG9yIGNvbXBhdGlibGUKPiArCSAq IHdpdGggYSBkZXZpY2V0cmVlIHRoYXQgd2FzIG5vdCBtaWdyYXRlZCB0byB0aGUgbmV3LCBwcm9w ZXIgYmluZGluZ3MuCj4gKwkgKi8KPiArCWRwX3BoeS0+cGRhdGEgPSAmbXQ4MTk1X2RwX3BoeV9k YXRhOwo+ICAJZHBfcGh5LT5yZWdtYXAgPSAqKHN0cnVjdCByZWdtYXAgKiopZGV2LT5wbGF0Zm9y bV9kYXRhOwoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzIGEgcHJlLWV4aXN0aW5nIGlzc3VlLCBi dXQgY2FuIGRldi0+cGxhdGZvcm1fZGF0YSBiZSBOVUxMIGhlcmU/CgpUaGUgY29kZSBkaXJlY3Rs eSBkZXJlZmVyZW5jZXMgZGV2LT5wbGF0Zm9ybV9kYXRhIHRvIGFzc2lnbiBkcF9waHktPnJlZ21h cApiZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgTlVMTCBvbiB0aGUgbmV4dCBsaW5lLiBJZiBhIGRl dmljZSBpcyBwcm9iZWQgd2l0aG91dApkZXZpY2V0cmVlIGFuZCBwbGF0Zm9ybSBkYXRhIGlzIG1p c3NpbmcsIHdpbGwgdGhpcyB0cmlnZ2VyIGEga2VybmVsIHBhbmljPwoKPiAgCWlmICghZHBfcGh5 LT5yZWdtYXApCj4gIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAiTm8gcGxh dGZvcm0gZGF0YSBhdmFpbGFibGVcbiIpOwoKWyAuLi4gXQoKPiBAQCAtMjI3LDYgKzI5OCw4IEBA IHN0YXRpYyBpbnQgbXRrX2RwX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICAJaWYgKElTX0VSUihkcF9waHktPnJlZ21hcCkpCj4gIAkJcmV0dXJuIFBUUl9FUlIoZHBf cGh5LT5yZWdtYXApOwo+ICAKPiArCWRwX3BoeS0+cGRhdGEgPSBkZXZpY2VfZ2V0X21hdGNoX2Rh dGEoZGV2KTsKCltTZXZlcml0eTogSGlnaF0KQ291bGQgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkg cmV0dXJuIE5VTEwgaGVyZT8KCklmIHRoZSBkcml2ZXIgaXMgbWFudWFsbHkgYm91bmQgdmlhIHN5 c2ZzIHdpdGhvdXQgYSBtYXRjaGluZyBPRiBjb21wYXRpYmxlCihidXQgdGhlIGRldmljZSBoYXMg YW4gb2Zfbm9kZSksIGRldmljZV9nZXRfbWF0Y2hfZGF0YSgpIHdpbGwgcmV0dXJuIE5VTEwuCgpT aW5jZSBkcF9waHktPnBkYXRhIGlzIGxhdGVyIHVuY29uZGl0aW9uYWxseSBkZXJlZmVyZW5jZWQg aW4gZnVuY3Rpb25zIGxpa2UKbXRrX2RwX3BoeV9pbml0KCkgdG8gbG9vayB1cCByZWdpc3RlciBv ZmZzZXRzLCB3aWxsIHRoaXMgbGVhZCB0byBhIE5VTEwgcG9pbnRlcgpkZXJlZmVyZW5jZT8KCj4g Kwo+ICAJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19kcF9waHlfZGV2X29w cyk7CgpbIC4uLiBdCgpbU2V2ZXJpdHk6IExvd10KSXMgdGhlIHZhcmlhYmxlIHJldCBkZWNsYXJl ZCBpbiB0aGUgc2NvcGUgb2YgbXRrX2RwX3BoeV9wcm9iZT8KCkl0IHdhcyBub3RlZCB0aGF0IHJl dCBtaWdodCBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGRldm1fcG1fcnVudGltZV9lbmFibGUo KQphbmQgZXZhbHVhdGVkOgoKcmV0ID0gZGV2bV9wbV9ydW50aW1lX2VuYWJsZShkZXYpOwppZiAo cmV0KQogICAgcmV0dXJuIHJldDsKCkJ1dCBpdCBhcHBlYXJzIGl0IG1pZ2h0IG5vdCBiZSBkZWNs YXJlZCB3aXRoaW4gdGhlIGxvY2FsIHNjb3BlLCB3aGljaCBjb3VsZApjYXVzZSBhIGNvbXBpbGF0 aW9uIGVycm9yLgoKW1NldmVyaXR5OiBMb3ddClNob3VsZCA8bGludXgvcG1fcnVudGltZS5oPiBi ZSBpbmNsdWRlZCBpbiB0aGlzIGZpbGU/CgpJZiBkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKCkgaXMg dXNlZCwgaXQgcmVsaWVzIG9uIHRoZSBQb3dlciBNYW5hZ2VtZW50CkFQSS4gUmVseWluZyBvbiBp bXBsaWNpdCB0cmFuc2l0aXZlIGluY2x1c2lvbiBmb3IgUG93ZXIgTWFuYWdlbWVudCBBUElzIGNh biBiZQpmcmFnaWxlIGFuZCBtYXkgY2F1c2UgYSBidWlsZCBmYWlsdXJlLgoKPiBAQCAtMjQ1LDgg KzMxOCwxNSBAQCBzdGF0aWMgaW50IG10a19kcF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19kcF9waHlfcGRhdGEgbXQ4MTk1X2RwX3BoeV9kYXRhID0gewo+ICsJLm9mZl9kaWdfZ2xi ID0gMHgxMDAwLAo+ICsJLm9mZl9kaWdfbGFuZSA9IChjb25zdCB1MTZbXSkgeyAweDExMDAsIDB4 MTIwMCwgMHgxMzAwLCAweDE0MDAgfSwKCltTZXZlcml0eTogTG93XQpXaWxsIHRoaXMgYXJyYXkg aW5pdGlhbGl6YXRpb24gY29tcGlsZSBjb3JyZWN0bHk/CgpJbiBzdGFuZGFyZCBDLCBhbiBhcnJh eSBtZW1iZXIgaW5zaWRlIGEgc3RydWN0IHNob3VsZCBiZSBpbml0aWFsaXplZCB1c2luZyBhCmJy YWNlLWVuY2xvc2VkIGxpc3QuIFVzaW5nIGEgY29tcG91bmQgbGl0ZXJhbCBjYXN0IGxpa2UgKGNv bnN0IHUxNltdKSBkZWNheXMKdG8gYSBwb2ludGVyLCB3aGljaCBtYXkgY2F1c2UgYSBjb21waWxh dGlvbiBlcnJvciBmb3IgYW4gYXJyYXkgdHlwZSBpbml0aWFsaXplci4KCj4gKwkucmVnc19kaWdf Z2xiID0gbXQ4MTk1X3BoeV9kaWdfZ2xiX3JlZ3MsCj4gKwkucmVnc19kaWdfbGFuZSA9IG10ODE5 NV9waHlfZGlnX2xhbmVfcmVncywKPiArfTsKCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRw czovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA3MDcxNDE5MzEuMTkxMTcyLTEtYW5nZWxv Z2lvYWNjaGluby5kZWxyZWdub0Bjb2xsYWJvcmEuY29tP3BhcnQ9NAoKLS0gCmxpbnV4LXBoeSBt YWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==