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 59E1C47CC85 for ; Wed, 1 Jul 2026 12:36:46 +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=1782909407; cv=none; b=CGseFZtFwumOWlY6ZCfoxuylTtGq7/61A8zZMEvSPf+CNh8TWdmYPZ1L7oDfuahA38EtLtfiV38+90PdwlBjXVLTJNmZxymMnc6YG0bkYl8n7u0mU+G52Od2aKMqV2f2lFOCuAWjoC0wptT/dlL7AuU/w/qgkuuGiIxxXtcEp0M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782909407; c=relaxed/simple; bh=TTCt5dYawlOog3o1DwL6gk8LDarn1/cvNuOkaWeCuzk=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=YP7TzyWW5xJSvSycKquD6dRRdV3tYRj29bzlOG7K7rUVbQlYl6MYKJpVcryyU5Y9v1h+nVbIUGeLs2AZYUcsHS2rkRLdllnjKEqDLGWxgpi/WQUmSwHDs7bo1TTNJNDPsrf1UDEwRWyQxtKvkaLvwlxb1MMfIPhjtFn5Ta0Z6jQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Td8ZAtgs; 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="Td8ZAtgs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 717A71F000E9; Wed, 1 Jul 2026 12:36:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782909406; bh=C1+20SB3grYbbLQ4hKEaqQJTlwwxHdQUc0LGvzYz11k=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Td8ZAtgsLCmlbpLm4pVtiur9FeHkTmvl0ANVtHBBG/129J6sK/ABeK/Fm/mH8k9I/ Pza0aYQHde7eB0Ag07QB5T2+lqrW407pQ5J/MNzhkpgHI6v3iBXSS3vg4iiOkr5ooP c78i6KjwPpwwuB+06zGgPPYTA/7UaQMj9ra9U15ABVk9Uza2WVGdZu6HhZFBZFNThj CFU9csh7UgNo0Y7xfHU1wEwZiKMNU6ANy8Y93NCScS23LkSynW62DPFJpX1vh6tZte sJ1Wtd7uY/62EGDPIGhmHSP8ICJbWqWZbpm2PGFx/znEZ/4Qf4scHIs+fJ57IOJC5+ CMcCJA5y4Yp/Q== From: sashiko-bot@kernel.org Subject: Re: [PATCH 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: linux-phy@lists.infradead.org, neil.armstrong@linaro.org, conor+dt@kernel.org, vkoul@kernel.org, dri-devel@lists.freedesktop.org, robh@kernel.org, devicetree@vger.kernel.org, olteanv@gmail.com In-Reply-To: <20260701122008.19509-5-angelogioacchino.delregno@collabora.com> References: <20260701122008.19509-1-angelogioacchino.delregno@collabora.com> <20260701122008.19509-5-angelogioacchino.delregno@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 01 Jul 2026 12:36:45 +0000 Message-Id: <20260701123645.717A71F000E9@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 5 potential issue(= s) to consider: New issues: - [High] Missing NULL pointer check for `device_get_match_data()` return va= lue leads to kernel panic. - [Low] Build failure due to invalid initialization of an array field with = a compound literal. Pre-existing issues: - [High] Missing driver `.remove` callback leads to unbalanced runtime PM u= sage counter and resource leak. - [High] Dangling `phy_lookup` entry in the global list causes a Use-After-= Free upon driver unbind. - [High] Unconditional dereference of `dev->platform_data` before validatin= g it for NULL. -- commit 2a851e9d237369ac4340bdce02183defb68c9865 Author: AngeloGioacchino Del Regno phy: phy-mtk-dp: Migrate register offsets to SoC specific pdata This patch migrates the hardcoded register offsets in the MediaTek DP PHY d= river to SoC-specific platform data. It assigns this platform data for both Devic= eTree and platform probing. It also loops through lanes to clean up the writing of driving parameters. > diff --git a/drivers/phy/mediatek/phy-mtk-dp.c b/drivers/phy/mediatek/phy= -mtk-dp.c > index 98e05fe05ce3b..ce33f6812bae6 100644 > --- a/drivers/phy/mediatek/phy-mtk-dp.c > +++ b/drivers/phy/mediatek/phy-mtk-dp.c [ ... ] > @@ -161,11 +225,18 @@ static const struct phy_ops mtk_dp_phy_dev_ops =3D { > .owner =3D THIS_MODULE, > }; > =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; > =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 does this code unconditionally dereference dev->platform_data before checking if it is NULL? If the platform device is probed through the legacy path without an of_node= and without platform_data provided (which can happen by manually binding an arbitrary compatible device via sysfs), could this lead to a kernel panic? > if (!dp_phy->regmap) > return dev_err_probe(dev, -EINVAL, "No platform data available\n"); [ ... ] > @@ -214,6 +285,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] Can device_get_match_data() return NULL here? If a user with privileges to write to sysfs binds the device manually using /sys/bus/platform/drivers/.../bind, or the device is instantiated via platf= orm name matching while having an of_node, device_get_match_data() will return NULL. Could this lead to a NULL pointer dereference resulting in a kernel panic w= hen dp_phy->pdata is accessed later? > phy =3D devm_phy_create(dev, NULL, &mtk_dp_phy_dev_ops); > if (IS_ERR(phy)) > return dev_err_probe(dev, PTR_ERR(phy), [ ... ] > @@ -231,8 +304,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 fail to compile under standard C compilers? The off_dig_lane field is declared as an array u16 off_dig_lane[MTK_DP_PHY_MAX_LANES], but it is being initialized using a pointer from a compound literal cast (const u16[]) { ... }. Assigning an explicitly cast compound literal to an array field is syntactically invalid and could prevent the driver from building. > + .regs_dig_glb =3D mt8195_phy_dig_glb_regs, > + .regs_dig_lane =3D mt8195_phy_dig_lane_regs, > +}; [Severity: High] This is a pre-existing issue, but does the mtk_dp_phy_driver missing a .rem= ove callback lead to unbalanced runtime PM usage? drivers/phy/mediatek/phy-mtk-dp.c:mtk_dp_phy_probe() { ... pm_runtime_enable(dev); pm_runtime_get_sync(dev); return 0; } drivers/phy/mediatek/phy-mtk-dp.c:mtk_dp_phy_driver { .probe =3D mtk_dp_phy_probe, .driver =3D { .name =3D "mediatek-dp-phy", .of_match_table =3D mtk_dp_phy_of_match, }, }; Without a .remove implementation to handle unbinding the driver, could the device remain permanently powered on and fail to cleanly suspend or unbind? [Severity: High] This is also a pre-existing issue, but is the phy_lookup entry left danglin= g in the global list when the driver is unbound? drivers/phy/mediatek/phy-mtk-dp.c:mtk_dp_phy_legacy_probe() { ... phy_create_lookup(phy, "dp", dev_name(dev)); ... } Because there is no .remove callback, phy_remove_lookup() is never called. Could a subsequent phy_get() call traversing the list access the freed pointer, resulting in a Use-After-Free since devres automatically frees the struct phy? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260701122008.1950= 9-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 65346C43327 for ; Wed, 1 Jul 2026 12:36:47 +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=s5VXZs3sP0OFUhJxnO+PAhsiquCEl4ZIAXc+inK7pZM=; b=sDo7HDuC6Pi2qn Ts5QeAVUrxzeIjDFkX1sITiz+0JeTT7R/710IvCnEqXxFjuyuUUCg6xEYSiL+A4j/RhkXWfofvUt8 mH2oeY+/tJgg+F//VNeicEaNunkpWaGQzvneqVy04YkVwkLNnvY5I3Ke4jH8mVAR67xNYCRbo8zqv Gj+rDEq7gjGpr0fvBJaE4ivciGawlBt+FM4wQXeb5s0hY6gqcSXzPRnAqh5GJFniGL4bui1d2sM/v TfdfHSCymmbXFbKSK5jbAo3uwRD0xtvRNcDe+3cLcONdKU8V6UMx3J3RUuHbM0frPnZj//Sj6QzSE j2V5x8WgBI1hmlYqKA0Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1weuBL-0000000212s-0jCN; Wed, 01 Jul 2026 12:36:47 +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 1weuBK-0000000212c-1w5v for linux-phy@lists.infradead.org; Wed, 01 Jul 2026 12:36:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 1680C40BF7; Wed, 1 Jul 2026 12:36:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 717A71F000E9; Wed, 1 Jul 2026 12:36:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782909406; bh=C1+20SB3grYbbLQ4hKEaqQJTlwwxHdQUc0LGvzYz11k=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Td8ZAtgsLCmlbpLm4pVtiur9FeHkTmvl0ANVtHBBG/129J6sK/ABeK/Fm/mH8k9I/ Pza0aYQHde7eB0Ag07QB5T2+lqrW407pQ5J/MNzhkpgHI6v3iBXSS3vg4iiOkr5ooP c78i6KjwPpwwuB+06zGgPPYTA/7UaQMj9ra9U15ABVk9Uza2WVGdZu6HhZFBZFNThj CFU9csh7UgNo0Y7xfHU1wEwZiKMNU6ANy8Y93NCScS23LkSynW62DPFJpX1vh6tZte sJ1Wtd7uY/62EGDPIGhmHSP8ICJbWqWZbpm2PGFx/znEZ/4Qf4scHIs+fJ57IOJC5+ CMcCJA5y4Yp/Q== From: sashiko-bot@kernel.org Subject: Re: [PATCH 04/12] phy: phy-mtk-dp: Migrate register offsets to SoC specific pdata To: "AngeloGioacchino Del Regno" Cc: linux-phy@lists.infradead.org, neil.armstrong@linaro.org, conor+dt@kernel.org, vkoul@kernel.org, dri-devel@lists.freedesktop.org, robh@kernel.org, devicetree@vger.kernel.org, olteanv@gmail.com In-Reply-To: <20260701122008.19509-5-angelogioacchino.delregno@collabora.com> References: <20260701122008.19509-1-angelogioacchino.delregno@collabora.com> <20260701122008.19509-5-angelogioacchino.delregno@collabora.com> Date: Wed, 01 Jul 2026 12:36:45 +0000 Message-Id: <20260701123645.717A71F000E9@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 NSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBN aXNzaW5nIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGRldmljZV9nZXRfbWF0Y2hfZGF0YSgpYCBy ZXR1cm4gdmFsdWUgbGVhZHMgdG8ga2VybmVsIHBhbmljLgotIFtMb3ddIEJ1aWxkIGZhaWx1cmUg ZHVlIHRvIGludmFsaWQgaW5pdGlhbGl6YXRpb24gb2YgYW4gYXJyYXkgZmllbGQgd2l0aCBhIGNv bXBvdW5kIGxpdGVyYWwuCgpQcmUtZXhpc3RpbmcgaXNzdWVzOgotIFtIaWdoXSBNaXNzaW5nIGRy aXZlciBgLnJlbW92ZWAgY2FsbGJhY2sgbGVhZHMgdG8gdW5iYWxhbmNlZCBydW50aW1lIFBNIHVz YWdlIGNvdW50ZXIgYW5kIHJlc291cmNlIGxlYWsuCi0gW0hpZ2hdIERhbmdsaW5nIGBwaHlfbG9v a3VwYCBlbnRyeSBpbiB0aGUgZ2xvYmFsIGxpc3QgY2F1c2VzIGEgVXNlLUFmdGVyLUZyZWUgdXBv biBkcml2ZXIgdW5iaW5kLgotIFtIaWdoXSBVbmNvbmRpdGlvbmFsIGRlcmVmZXJlbmNlIG9mIGBk ZXYtPnBsYXRmb3JtX2RhdGFgIGJlZm9yZSB2YWxpZGF0aW5nIGl0IGZvciBOVUxMLgotLQoKY29t bWl0IDJhODUxZTlkMjM3MzY5YWM0MzQwYmRjZTAyMTgzZGVmYjY4Yzk4NjUKQXV0aG9yOiBBbmdl bG9HaW9hY2NoaW5vIERlbCBSZWdubyA8YW5nZWxvZ2lvYWNjaGluby5kZWxyZWdub0Bjb2xsYWJv cmEuY29tPgoKcGh5OiBwaHktbXRrLWRwOiBNaWdyYXRlIHJlZ2lzdGVyIG9mZnNldHMgdG8gU29D IHNwZWNpZmljIHBkYXRhCgpUaGlzIHBhdGNoIG1pZ3JhdGVzIHRoZSBoYXJkY29kZWQgcmVnaXN0 ZXIgb2Zmc2V0cyBpbiB0aGUgTWVkaWFUZWsgRFAgUEhZIGRyaXZlcgp0byBTb0Mtc3BlY2lmaWMg cGxhdGZvcm0gZGF0YS4gSXQgYXNzaWducyB0aGlzIHBsYXRmb3JtIGRhdGEgZm9yIGJvdGggRGV2 aWNlVHJlZQphbmQgcGxhdGZvcm0gcHJvYmluZy4gSXQgYWxzbyBsb29wcyB0aHJvdWdoIGxhbmVz IHRvIGNsZWFuIHVwIHRoZSB3cml0aW5nIG9mCmRyaXZpbmcgcGFyYW1ldGVycy4KCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstZHAuYyBiL2RyaXZlcnMvcGh5L21l ZGlhdGVrL3BoeS1tdGstZHAuYwo+IGluZGV4IDk4ZTA1ZmUwNWNlM2IuLmNlMzNmNjgxMmJhZTYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay1kcC5jCj4gKysrIGIv ZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay1kcC5jClsgLi4uIF0KPiBAQCAtMTYxLDExICsy MjUsMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10a19kcF9waHlfZGV2X29wcyA9 IHsKPiAgCS5vd25lciA9IFRISVNfTU9EVUxFLAo+ICB9Owo+ICAKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfZHBfcGh5X3BkYXRhIG10ODE5NV9kcF9waHlfZGF0YTsKPiArCj4gIHN0YXRpYyBp bnQgbXRrX2RwX3BoeV9sZWdhY3lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwg c3RydWN0IG10a19kcF9waHkgKmRwX3BoeSkKPiAgewo+ICAJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiAgCXN0cnVjdCBwaHkgKnBoeTsKPiAgCj4gKwkvKgo+ICsJICogSWYgbGVn YWN5IHBsYXRmb3JtIGRyaXZlciBwcm9iZSwgYXNzdW1lIHRoaXMgaXMgTVQ4MTk1IG9yIGNvbXBh dGlibGUKPiArCSAqIHdpdGggYSBkZXZpY2V0cmVlIHRoYXQgd2FzIG5vdCBtaWdyYXRlZCB0byB0 aGUgbmV3LCBwcm9wZXIgYmluZGluZ3MuCj4gKwkgKi8KPiArCWRwX3BoeS0+cGRhdGEgPSAmbXQ4 MTk1X2RwX3BoeV9kYXRhOwo+ICAJZHBfcGh5LT5yZWdtYXAgPSAqKHN0cnVjdCByZWdtYXAgKiop ZGV2LT5wbGF0Zm9ybV9kYXRhOwoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzIGEgcHJlLWV4aXN0 aW5nIGlzc3VlLCBidXQgZG9lcyB0aGlzIGNvZGUgdW5jb25kaXRpb25hbGx5IGRlcmVmZXJlbmNl CmRldi0+cGxhdGZvcm1fZGF0YSBiZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgTlVMTD8KCklmIHRo ZSBwbGF0Zm9ybSBkZXZpY2UgaXMgcHJvYmVkIHRocm91Z2ggdGhlIGxlZ2FjeSBwYXRoIHdpdGhv dXQgYW4gb2Zfbm9kZSBhbmQKd2l0aG91dCBwbGF0Zm9ybV9kYXRhIHByb3ZpZGVkICh3aGljaCBj YW4gaGFwcGVuIGJ5IG1hbnVhbGx5IGJpbmRpbmcgYW4KYXJiaXRyYXJ5IGNvbXBhdGlibGUgZGV2 aWNlIHZpYSBzeXNmcyksIGNvdWxkIHRoaXMgbGVhZCB0byBhIGtlcm5lbCBwYW5pYz8KCj4gIAlp ZiAoIWRwX3BoeS0+cmVnbWFwKQo+ICAJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZB TCwgIk5vIHBsYXRmb3JtIGRhdGEgYXZhaWxhYmxlXG4iKTsKWyAuLi4gXQo+IEBAIC0yMTQsNiAr Mjg1LDggQEAgc3RhdGljIGludCBtdGtfZHBfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gIAlpZiAoSVNfRVJSKGRwX3BoeS0+cmVnbWFwKSkKPiAgCQlyZXR1cm4gUFRS X0VSUihkcF9waHktPnJlZ21hcCk7Cj4gIAo+ICsJZHBfcGh5LT5wZGF0YSA9IGRldmljZV9nZXRf bWF0Y2hfZGF0YShkZXYpOwo+ICsKCltTZXZlcml0eTogSGlnaF0KQ2FuIGRldmljZV9nZXRfbWF0 Y2hfZGF0YSgpIHJldHVybiBOVUxMIGhlcmU/CgpJZiBhIHVzZXIgd2l0aCBwcml2aWxlZ2VzIHRv IHdyaXRlIHRvIHN5c2ZzIGJpbmRzIHRoZSBkZXZpY2UgbWFudWFsbHkgdXNpbmcKL3N5cy9idXMv cGxhdGZvcm0vZHJpdmVycy8uLi4vYmluZCwgb3IgdGhlIGRldmljZSBpcyBpbnN0YW50aWF0ZWQg dmlhIHBsYXRmb3JtCm5hbWUgbWF0Y2hpbmcgd2hpbGUgaGF2aW5nIGFuIG9mX25vZGUsIGRldmlj ZV9nZXRfbWF0Y2hfZGF0YSgpIHdpbGwgcmV0dXJuCk5VTEwuCgpDb3VsZCB0aGlzIGxlYWQgdG8g YSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgcmVzdWx0aW5nIGluIGEga2VybmVsIHBhbmljIHdo ZW4KZHBfcGh5LT5wZGF0YSBpcyBhY2Nlc3NlZCBsYXRlcj8KCj4gIAlwaHkgPSBkZXZtX3BoeV9j cmVhdGUoZGV2LCBOVUxMLCAmbXRrX2RwX3BoeV9kZXZfb3BzKTsKPiAgCWlmIChJU19FUlIocGh5 KSkKPiAgCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocGh5KSwKWyAuLi4gXQo+ IEBAIC0yMzEsOCArMzA0LDE1IEBAIHN0YXRpYyBpbnQgbXRrX2RwX3BoeV9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbXRrX2RwX3BoeV9wZGF0YSBtdDgxOTVfZHBfcGh5X2RhdGEgPSB7Cj4gKwku b2ZmX2RpZ19nbGIgPSAweDEwMDAsCj4gKwkub2ZmX2RpZ19sYW5lID0gKGNvbnN0IHUxNltdKSB7 IDB4MTEwMCwgMHgxMjAwLCAweDEzMDAsIDB4MTQwMCB9LAoKW1NldmVyaXR5OiBMb3ddCldpbGwg dGhpcyBmYWlsIHRvIGNvbXBpbGUgdW5kZXIgc3RhbmRhcmQgQyBjb21waWxlcnM/CgpUaGUgb2Zm X2RpZ19sYW5lIGZpZWxkIGlzIGRlY2xhcmVkIGFzIGFuIGFycmF5CnUxNiBvZmZfZGlnX2xhbmVb TVRLX0RQX1BIWV9NQVhfTEFORVNdLCBidXQgaXQgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdXNpbmcg YQpwb2ludGVyIGZyb20gYSBjb21wb3VuZCBsaXRlcmFsIGNhc3QgKGNvbnN0IHUxNltdKSB7IC4u LiB9LgoKQXNzaWduaW5nIGFuIGV4cGxpY2l0bHkgY2FzdCBjb21wb3VuZCBsaXRlcmFsIHRvIGFu IGFycmF5IGZpZWxkIGlzCnN5bnRhY3RpY2FsbHkgaW52YWxpZCBhbmQgY291bGQgcHJldmVudCB0 aGUgZHJpdmVyIGZyb20gYnVpbGRpbmcuCgo+ICsJLnJlZ3NfZGlnX2dsYiA9IG10ODE5NV9waHlf ZGlnX2dsYl9yZWdzLAo+ICsJLnJlZ3NfZGlnX2xhbmUgPSBtdDgxOTVfcGh5X2RpZ19sYW5lX3Jl Z3MsCj4gK307CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUs IGJ1dCBkb2VzIHRoZSBtdGtfZHBfcGh5X2RyaXZlciBtaXNzaW5nIGEgLnJlbW92ZQpjYWxsYmFj ayBsZWFkIHRvIHVuYmFsYW5jZWQgcnVudGltZSBQTSB1c2FnZT8KCmRyaXZlcnMvcGh5L21lZGlh dGVrL3BoeS1tdGstZHAuYzptdGtfZHBfcGh5X3Byb2JlKCkgewogICAgLi4uCiAgICBwbV9ydW50 aW1lX2VuYWJsZShkZXYpOwogICAgcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwoKICAgIHJldHVy biAwOwp9Cgpkcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLWRwLmM6bXRrX2RwX3BoeV9kcml2 ZXIgewogICAgLnByb2JlID0gbXRrX2RwX3BoeV9wcm9iZSwKICAgIC5kcml2ZXIgPSB7CiAgICAg ICAgLm5hbWUgPSAibWVkaWF0ZWstZHAtcGh5IiwKICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBt dGtfZHBfcGh5X29mX21hdGNoLAogICAgfSwKfTsKCldpdGhvdXQgYSAucmVtb3ZlIGltcGxlbWVu dGF0aW9uIHRvIGhhbmRsZSB1bmJpbmRpbmcgdGhlIGRyaXZlciwgY291bGQgdGhlCmRldmljZSBy ZW1haW4gcGVybWFuZW50bHkgcG93ZXJlZCBvbiBhbmQgZmFpbCB0byBjbGVhbmx5IHN1c3BlbmQg b3IgdW5iaW5kPwoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzIGFsc28gYSBwcmUtZXhpc3Rpbmcg aXNzdWUsIGJ1dCBpcyB0aGUgcGh5X2xvb2t1cCBlbnRyeSBsZWZ0IGRhbmdsaW5nIGluCnRoZSBn bG9iYWwgbGlzdCB3aGVuIHRoZSBkcml2ZXIgaXMgdW5ib3VuZD8KCmRyaXZlcnMvcGh5L21lZGlh dGVrL3BoeS1tdGstZHAuYzptdGtfZHBfcGh5X2xlZ2FjeV9wcm9iZSgpIHsKICAgIC4uLgogICAg cGh5X2NyZWF0ZV9sb29rdXAocGh5LCAiZHAiLCBkZXZfbmFtZShkZXYpKTsKICAgIC4uLgp9CgpC ZWNhdXNlIHRoZXJlIGlzIG5vIC5yZW1vdmUgY2FsbGJhY2ssIHBoeV9yZW1vdmVfbG9va3VwKCkg aXMgbmV2ZXIgY2FsbGVkLgoKQ291bGQgYSBzdWJzZXF1ZW50IHBoeV9nZXQoKSBjYWxsIHRyYXZl cnNpbmcgdGhlIGxpc3QgYWNjZXNzIHRoZSBmcmVlZApwb2ludGVyLCByZXN1bHRpbmcgaW4gYSBV c2UtQWZ0ZXItRnJlZSBzaW5jZSBkZXZyZXMgYXV0b21hdGljYWxseSBmcmVlcyB0aGUKc3RydWN0 IHBoeT8KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0 Y2hzZXQvMjAyNjA3MDExMjIwMDguMTk1MDktMS1hbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNv bGxhYm9yYS5jb20/cGFydD00CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1waHkK