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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 8C2BAC43327 for ; Wed, 1 Jul 2026 13:01:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DC30810F01C; Wed, 1 Jul 2026 13:01:49 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="h26Qf/2s"; dkim-atps=neutral Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by gabe.freedesktop.org (Postfix) with ESMTPS id C0BFB10F00F for ; Wed, 1 Jul 2026 13:01:48 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id D017F601E0; Wed, 1 Jul 2026 13:01:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 048FF1F000E9; Wed, 1 Jul 2026 13:01:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782910907; bh=/6s17sWw2U7DvJbiMh+7Uzrpjv0Cj2ixXONGdYVjlyk=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=h26Qf/2sie84Kt2Lq5qJm2beqhQV7Hp6ljbhgPu42bsctKhi0fKNWeqFDRWIN0EnC xvBKg3sORBitLD0cnuto34hmpUD9SGOjcYzzdNm3utFwhvJOMwOiw8SUCZxelpmtb4 70Jr8HaQTrtXVKCb+DkcLa10Dtt66vJVay0nxgo0N6RCdEGNtKKWyGN73uOA4Ccc+w 2qMhK+R95t1Lp0/Ct4n+R/A458X/zYFDjg3MFPPncJlN0tXDKr8KSqVtbjZ1dMkmDY yTti4iFKWe/vcbmB7HUFWIktZRBGmHpbPAlQmDlNtU1zTIxDHFbVjAmatpPdaPFkXl STur2eZrh6CMQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 12/12] phy: phy-mtk-dp: Add support for MT8196 eDP PHY To: "AngeloGioacchino Del Regno" Cc: vkoul@kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, dri-devel@lists.freedesktop.org In-Reply-To: <20260701122008.19509-13-angelogioacchino.delregno@collabora.com> References: <20260701122008.19509-1-angelogioacchino.delregno@collabora.com> <20260701122008.19509-13-angelogioacchino.delregno@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 01 Jul 2026 13:01:46 +0000 Message-Id: <20260701130147.048FF1F000E9@smtp.kernel.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Thank you for your contribution! Sashiko AI review found 4 potential issue(= s) to consider: New issues: - [High] The MT8196 layout places DP_PHYD_LAN_DRIVING_FORCE at an offset th= at is overwritten by a contiguous bulk write to the driving parameters. Pre-existing issues: - [High] Lane disabling logic incorrectly clears the wrong register bits, l= eaving upper lanes powered on and corrupting adjacent lanes. - [High] Analog register offsets are mistakenly fetched from the digital re= gister array, causing writes to the wrong address. - [High] Missing shift for analog calibration parameters passed to regmap_u= pdate_bits() zeroes out hardware fields. -- commit 25701726cdcf8525c87349866f69aa298517187f Author: AngeloGioacchino Del Regno Subject: phy: phy-mtk-dp: Add support for MT8196 eDP PHY The MT8196 SoC features an updated PHY IP compared to the older ones, and there is one that is specific to Embedded DisplayPort. This patch adds support for the eDP PHY found in the MediaTek MT8196 SoC and all of its variants. > diff --git a/drivers/phy/mediatek/phy-mtk-dp.c b/drivers/phy/mediatek/phy= -mtk-dp.c > index f067acef222f7..998ac34466678 100644 > --- a/drivers/phy/mediatek/phy-mtk-dp.c > +++ b/drivers/phy/mediatek/phy-mtk-dp.c [ ... ] > @@ -178,6 +190,11 @@ static const u8 mt8195_phy_dig_lane_regs[DP_PHYD_LAN= _MAX] =3D { > [DP_PHYD_LAN_DRIVING_PARAM_0] =3D 0x2c, > }; > =20 > +static const u8 mt8196_phy_dig_lane_regs[DP_PHYD_LAN_MAX] =3D { > + [DP_PHYD_LAN_DRIVING_FORCE] =3D 0x30, > + [DP_PHYD_LAN_DRIVING_PARAM_0] =3D 0x2c, > +}; [Severity: High] Could this regression corrupt the driving force configuration? In mtk_dp_phy_set_digital_drv_params(), there is a bulk write of 9 contiguo= us 32-bit registers starting at DP_PHYD_LAN_DRIVING_PARAM_0: ret =3D regmap_bulk_write(dp_phy->regmap, pdata->off_dig_lane[i] + reg, pdata->driving_params, ARRAY_SIZE(pdata->driving_params)); Since the bulk write starts at 0x2c, driving_params[1] will be written to 0= x30, which overlaps with DP_PHYD_LAN_DRIVING_FORCE. > + > static const u8 mt8195_phy_dig_glb_regs[DP_PHYD_GLOBAL_MAX] =3D { [ ... ] > @@ -751,8 +784,39 @@ static const struct mtk_dp_phy_pdata mt8195_dp_phy_d= ata =3D { > }, > }; > =20 > +static const struct mtk_dp_phy_pdata mt8196_edp_phy_data =3D { > + .off_ana_glb =3D 0x400, > + .off_ana_lane =3D (const u16[]) { 0x0, 0x100, 0x200, 0x300 }, > + .off_dig_glb =3D 0x1400, > + .off_dig_lane =3D (const u16[]) { 0x1000, 0x1100, 0x1200, 0x1300 }, > + .regs_ana_glb =3D mt8195_phy_ana_glb_regs, > + .regs_ana_lane =3D mt8195_phy_ana_lane_regs, > + .regs_dig_glb =3D mt8196_phy_dig_glb_regs, [Severity: High] This is a pre-existing issue, but do mtk_dp_phy_power_on() and mtk_dp_phy_power_off() fetch analog register offsets using this digital reg= ister array? Both functions use the analog enum DP_PHYA_GLB_FORCE_CTRL_1 to access the digital array: const u8 *regs =3D pdata->regs_dig_glb; ... ret =3D regmap_set_bits(dp_phy->regmap, pdata->off_ana_glb + regs[DP_PHYA_GLB_FORCE_CTRL_= 1], CKM_CKTX0_EN_FORCE_MODE); Accessing index 4 (DP_PHYA_GLB_FORCE_CTRL_1) of the digital array returns DP_PHYD_AUX_RX_CTL (0x40) instead of the intended analog offset (0x34). Does this overwrite incorrect memory mapped register offsets? > + .regs_dig_lane =3D mt8196_phy_dig_lane_regs, > + .mask_dig_tx_ln =3D PHYD_TX_LN_EN_V2, [Severity: High] This isn't a bug introduced by this patch, but does the lane disabling logi= c in mtk_dp_phy_disable_all_lanes() use this mask incorrectly? It computes lane_num as a raw index and passes it to field_prep(): ret =3D regmap_clear_bits(dp_phy->regmap, pdata->off_dig_glb + regs[DP_PHYD_TX_CTL_0], field_prep(pdata->mask_dig_tx_ln, lane_num)); Because field_prep() shifts the raw value, passing 3 instead of BIT(3) will shift 0b11 into the mask, clearing bits 4 and 5 instead of bit 7 (or bits 0= and 1 instead of bit 3 for V2). Should this be using BIT(lane_num) instead? > + .val_dig_bitrate =3D mt8196_edp_phy_dig_bitrate_val, > + .ana_bias_r =3D 15, > + .ana_cktx_imp =3D 8, [Severity: High] This isn't a bug introduced by this patch, but are these calibration parame= ters unconditionally cleared to zero in the hardware? In mtk_dp_phy_set_analog_calibration_params(), these values are passed directly to regmap_update_bits(): ret =3D regmap_update_bits(dp_phy->regmap, pdata->off_ana_glb + regs_ana_glb[DP_PHYA_GLB_= BIAS_GEN_0], XTP_GLB_BIAS_INT_R_CTRL, pdata->ana_bias_r); Because regmap_update_bits() expects a pre-shifted value and applies a mask (e.g., GENMASK(20, 16)), an unshifted raw value like 15 masked against the = upper bits yields 0. Should a macro like FIELD_PREP() be used to properly shift these values into place? > + .ana_lanes_imp =3D { > + .pmos =3D 8, > + .nmos =3D 8, > + }, [ ... ] --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260701122008.1950= 9-1-angelogioacchino.delregno@collabora.com?part=3D12 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 D68B8C43458 for ; Wed, 1 Jul 2026 13:01:49 +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=cgf6BEDO0ux54woIqbl1j/PJmFa906wBHF1DQ4LnXHE=; b=sV6feOwiBAeT63 9McIN2TXga4h5ZRCRa1Rb/2Fo//8YVRZDJhbK1deDdsvxl+Y37OA5O/XIiuUh/rKKW91/krZ0hXrT dOKKUonPuxBSVrCisR614glVrnC7fCVJzhfBhSNc86bXzNaroJb455R8TUfA3JglrIIy3SQ/brYUL 1kPunUSBl+nmylGoBIpHc/mUPIlgoZd12M8hV1bYkalqrmbsCcdn7lcQKwXXFmRatds/OijLSrpPh dS0xPofCzzt2mfv9Jk7xgkfvNynHLgtxNUj47Gac5ym9oPaKbV8pD5hKAgaWS5XL7+3Dh6UhCRgPR rkfFqIA5Op7ObTtPLGqg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1weuZZ-000000026gR-22gz; Wed, 01 Jul 2026 13:01:49 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1weuZY-000000026gH-3aeG for linux-phy@lists.infradead.org; Wed, 01 Jul 2026 13:01:48 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id D017F601E0; Wed, 1 Jul 2026 13:01:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 048FF1F000E9; Wed, 1 Jul 2026 13:01:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782910907; bh=/6s17sWw2U7DvJbiMh+7Uzrpjv0Cj2ixXONGdYVjlyk=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=h26Qf/2sie84Kt2Lq5qJm2beqhQV7Hp6ljbhgPu42bsctKhi0fKNWeqFDRWIN0EnC xvBKg3sORBitLD0cnuto34hmpUD9SGOjcYzzdNm3utFwhvJOMwOiw8SUCZxelpmtb4 70Jr8HaQTrtXVKCb+DkcLa10Dtt66vJVay0nxgo0N6RCdEGNtKKWyGN73uOA4Ccc+w 2qMhK+R95t1Lp0/Ct4n+R/A458X/zYFDjg3MFPPncJlN0tXDKr8KSqVtbjZ1dMkmDY yTti4iFKWe/vcbmB7HUFWIktZRBGmHpbPAlQmDlNtU1zTIxDHFbVjAmatpPdaPFkXl STur2eZrh6CMQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 12/12] phy: phy-mtk-dp: Add support for MT8196 eDP PHY To: "AngeloGioacchino Del Regno" Cc: vkoul@kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, dri-devel@lists.freedesktop.org In-Reply-To: <20260701122008.19509-13-angelogioacchino.delregno@collabora.com> References: <20260701122008.19509-1-angelogioacchino.delregno@collabora.com> <20260701122008.19509-13-angelogioacchino.delregno@collabora.com> Date: Wed, 01 Jul 2026 13:01:46 +0000 Message-Id: <20260701130147.048FF1F000E9@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 NCBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBU aGUgTVQ4MTk2IGxheW91dCBwbGFjZXMgRFBfUEhZRF9MQU5fRFJJVklOR19GT1JDRSBhdCBhbiBv ZmZzZXQgdGhhdCBpcyBvdmVyd3JpdHRlbiBieSBhIGNvbnRpZ3VvdXMgYnVsayB3cml0ZSB0byB0 aGUgZHJpdmluZyBwYXJhbWV0ZXJzLgoKUHJlLWV4aXN0aW5nIGlzc3VlczoKLSBbSGlnaF0gTGFu ZSBkaXNhYmxpbmcgbG9naWMgaW5jb3JyZWN0bHkgY2xlYXJzIHRoZSB3cm9uZyByZWdpc3RlciBi aXRzLCBsZWF2aW5nIHVwcGVyIGxhbmVzIHBvd2VyZWQgb24gYW5kIGNvcnJ1cHRpbmcgYWRqYWNl bnQgbGFuZXMuCi0gW0hpZ2hdIEFuYWxvZyByZWdpc3RlciBvZmZzZXRzIGFyZSBtaXN0YWtlbmx5 IGZldGNoZWQgZnJvbSB0aGUgZGlnaXRhbCByZWdpc3RlciBhcnJheSwgY2F1c2luZyB3cml0ZXMg dG8gdGhlIHdyb25nIGFkZHJlc3MuCi0gW0hpZ2hdIE1pc3Npbmcgc2hpZnQgZm9yIGFuYWxvZyBj YWxpYnJhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZCB0byByZWdtYXBfdXBkYXRlX2JpdHMoKSB6ZXJv ZXMgb3V0IGhhcmR3YXJlIGZpZWxkcy4KLS0KCmNvbW1pdCAyNTcwMTcyNmNkY2Y4NTI1Yzg3MzQ5 ODY2ZjY5YWEyOTg1MTcxODdmCkF1dGhvcjogQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gPGFu Z2Vsb2dpb2FjY2hpbm8uZGVscmVnbm9AY29sbGFib3JhLmNvbT4KU3ViamVjdDogcGh5OiBwaHkt bXRrLWRwOiBBZGQgc3VwcG9ydCBmb3IgTVQ4MTk2IGVEUCBQSFkKClRoZSBNVDgxOTYgU29DIGZl YXR1cmVzIGFuIHVwZGF0ZWQgUEhZIElQIGNvbXBhcmVkIHRvIHRoZSBvbGRlciBvbmVzLCBhbmQK dGhlcmUgaXMgb25lIHRoYXQgaXMgc3BlY2lmaWMgdG8gRW1iZWRkZWQgRGlzcGxheVBvcnQuIFRo aXMgcGF0Y2ggYWRkcwpzdXBwb3J0IGZvciB0aGUgZURQIFBIWSBmb3VuZCBpbiB0aGUgTWVkaWFU ZWsgTVQ4MTk2IFNvQyBhbmQgYWxsIG9mIGl0cwp2YXJpYW50cy4KCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstZHAuYyBiL2RyaXZlcnMvcGh5L21lZGlhdGVrL3Bo eS1tdGstZHAuYwo+IGluZGV4IGYwNjdhY2VmMjIyZjcuLjk5OGFjMzQ0NjY2NzggMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay1kcC5jCj4gKysrIGIvZHJpdmVycy9w aHkvbWVkaWF0ZWsvcGh5LW10ay1kcC5jCgpbIC4uLiBdCgo+IEBAIC0xNzgsNiArMTkwLDExIEBA IHN0YXRpYyBjb25zdCB1OCBtdDgxOTVfcGh5X2RpZ19sYW5lX3JlZ3NbRFBfUEhZRF9MQU5fTUFY XSA9IHsKPiAgCVtEUF9QSFlEX0xBTl9EUklWSU5HX1BBUkFNXzBdID0gMHgyYywKPiAgfTsKPiAg Cj4gK3N0YXRpYyBjb25zdCB1OCBtdDgxOTZfcGh5X2RpZ19sYW5lX3JlZ3NbRFBfUEhZRF9MQU5f TUFYXSA9IHsKPiArCVtEUF9QSFlEX0xBTl9EUklWSU5HX0ZPUkNFXSA9IDB4MzAsCj4gKwlbRFBf UEhZRF9MQU5fRFJJVklOR19QQVJBTV8wXSA9IDB4MmMsCj4gK307CgpbU2V2ZXJpdHk6IEhpZ2hd CkNvdWxkIHRoaXMgcmVncmVzc2lvbiBjb3JydXB0IHRoZSBkcml2aW5nIGZvcmNlIGNvbmZpZ3Vy YXRpb24/CgpJbiBtdGtfZHBfcGh5X3NldF9kaWdpdGFsX2Rydl9wYXJhbXMoKSwgdGhlcmUgaXMg YSBidWxrIHdyaXRlIG9mIDkgY29udGlndW91cwozMi1iaXQgcmVnaXN0ZXJzIHN0YXJ0aW5nIGF0 IERQX1BIWURfTEFOX0RSSVZJTkdfUEFSQU1fMDoKCiAgICByZXQgPSByZWdtYXBfYnVsa193cml0 ZShkcF9waHktPnJlZ21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkYXRhLT5vZmZf ZGlnX2xhbmVbaV0gKyByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGF0YS0+ZHJp dmluZ19wYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKHBkYXRh LT5kcml2aW5nX3BhcmFtcykpOwoKU2luY2UgdGhlIGJ1bGsgd3JpdGUgc3RhcnRzIGF0IDB4MmMs IGRyaXZpbmdfcGFyYW1zWzFdIHdpbGwgYmUgd3JpdHRlbiB0byAweDMwLAp3aGljaCBvdmVybGFw cyB3aXRoIERQX1BIWURfTEFOX0RSSVZJTkdfRk9SQ0UuCgo+ICsKPiAgc3RhdGljIGNvbnN0IHU4 IG10ODE5NV9waHlfZGlnX2dsYl9yZWdzW0RQX1BIWURfR0xPQkFMX01BWF0gPSB7CgpbIC4uLiBd Cgo+IEBAIC03NTEsOCArNzg0LDM5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RwX3BoeV9w ZGF0YSBtdDgxOTVfZHBfcGh5X2RhdGEgPSB7Cj4gIAl9LAo+ICB9Owo+ICAKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBtdGtfZHBfcGh5X3BkYXRhIG10ODE5Nl9lZHBfcGh5X2RhdGEgPSB7Cj4gKwku b2ZmX2FuYV9nbGIgPSAweDQwMCwKPiArCS5vZmZfYW5hX2xhbmUgPSAoY29uc3QgdTE2W10pIHsg MHgwLCAweDEwMCwgMHgyMDAsIDB4MzAwIH0sCj4gKwkub2ZmX2RpZ19nbGIgPSAweDE0MDAsCj4g Kwkub2ZmX2RpZ19sYW5lID0gKGNvbnN0IHUxNltdKSB7IDB4MTAwMCwgMHgxMTAwLCAweDEyMDAs IDB4MTMwMCB9LAo+ICsJLnJlZ3NfYW5hX2dsYiA9IG10ODE5NV9waHlfYW5hX2dsYl9yZWdzLAo+ ICsJLnJlZ3NfYW5hX2xhbmUgPSBtdDgxOTVfcGh5X2FuYV9sYW5lX3JlZ3MsCj4gKwkucmVnc19k aWdfZ2xiID0gbXQ4MTk2X3BoeV9kaWdfZ2xiX3JlZ3MsCgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMg aXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBkbyBtdGtfZHBfcGh5X3Bvd2VyX29uKCkgYW5k Cm10a19kcF9waHlfcG93ZXJfb2ZmKCkgZmV0Y2ggYW5hbG9nIHJlZ2lzdGVyIG9mZnNldHMgdXNp bmcgdGhpcyBkaWdpdGFsIHJlZ2lzdGVyCmFycmF5PwoKQm90aCBmdW5jdGlvbnMgdXNlIHRoZSBh bmFsb2cgZW51bSBEUF9QSFlBX0dMQl9GT1JDRV9DVFJMXzEgdG8gYWNjZXNzIHRoZQpkaWdpdGFs IGFycmF5OgoKICAgIGNvbnN0IHU4ICpyZWdzID0gcGRhdGEtPnJlZ3NfZGlnX2dsYjsKICAgIC4u LgogICAgcmV0ID0gcmVnbWFwX3NldF9iaXRzKGRwX3BoeS0+cmVnbWFwLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHBkYXRhLT5vZmZfYW5hX2dsYiArIHJlZ3NbRFBfUEhZQV9HTEJfRk9SQ0Vf Q1RSTF8xXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBDS01fQ0tUWDBfRU5fRk9SQ0VfTU9E RSk7CgpBY2Nlc3NpbmcgaW5kZXggNCAoRFBfUEhZQV9HTEJfRk9SQ0VfQ1RSTF8xKSBvZiB0aGUg ZGlnaXRhbCBhcnJheSByZXR1cm5zCkRQX1BIWURfQVVYX1JYX0NUTCAoMHg0MCkgaW5zdGVhZCBv ZiB0aGUgaW50ZW5kZWQgYW5hbG9nIG9mZnNldCAoMHgzNCkuCgpEb2VzIHRoaXMgb3ZlcndyaXRl IGluY29ycmVjdCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIG9mZnNldHM/Cgo+ICsJLnJlZ3NfZGln X2xhbmUgPSBtdDgxOTZfcGh5X2RpZ19sYW5lX3JlZ3MsCj4gKwkubWFza19kaWdfdHhfbG4gPSBQ SFlEX1RYX0xOX0VOX1YyLAoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVnIGludHJv ZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGRvZXMgdGhlIGxhbmUgZGlzYWJsaW5nIGxvZ2ljIGlu Cm10a19kcF9waHlfZGlzYWJsZV9hbGxfbGFuZXMoKSB1c2UgdGhpcyBtYXNrIGluY29ycmVjdGx5 PwoKSXQgY29tcHV0ZXMgbGFuZV9udW0gYXMgYSByYXcgaW5kZXggYW5kIHBhc3NlcyBpdCB0byBm aWVsZF9wcmVwKCk6CgogICAgcmV0ID0gcmVnbWFwX2NsZWFyX2JpdHMoZHBfcGh5LT5yZWdtYXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGF0YS0+b2ZmX2RpZ19nbGIgKyByZWdzW0RQ X1BIWURfVFhfQ1RMXzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfcHJlcChw ZGF0YS0+bWFza19kaWdfdHhfbG4sIGxhbmVfbnVtKSk7CgpCZWNhdXNlIGZpZWxkX3ByZXAoKSBz aGlmdHMgdGhlIHJhdyB2YWx1ZSwgcGFzc2luZyAzIGluc3RlYWQgb2YgQklUKDMpIHdpbGwKc2hp ZnQgMGIxMSBpbnRvIHRoZSBtYXNrLCBjbGVhcmluZyBiaXRzIDQgYW5kIDUgaW5zdGVhZCBvZiBi aXQgNyAob3IgYml0cyAwIGFuZAoxIGluc3RlYWQgb2YgYml0IDMgZm9yIFYyKS4KClNob3VsZCB0 aGlzIGJlIHVzaW5nIEJJVChsYW5lX251bSkgaW5zdGVhZD8KCj4gKwkudmFsX2RpZ19iaXRyYXRl ID0gbXQ4MTk2X2VkcF9waHlfZGlnX2JpdHJhdGVfdmFsLAo+ICsJLmFuYV9iaWFzX3IgPSAxNSwK PiArCS5hbmFfY2t0eF9pbXAgPSA4LAoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0IGEgYnVn IGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGFyZSB0aGVzZSBjYWxpYnJhdGlvbiBwYXJh bWV0ZXJzCnVuY29uZGl0aW9uYWxseSBjbGVhcmVkIHRvIHplcm8gaW4gdGhlIGhhcmR3YXJlPwoK SW4gbXRrX2RwX3BoeV9zZXRfYW5hbG9nX2NhbGlicmF0aW9uX3BhcmFtcygpLCB0aGVzZSB2YWx1 ZXMgYXJlIHBhc3NlZApkaXJlY3RseSB0byByZWdtYXBfdXBkYXRlX2JpdHMoKToKCiAgICByZXQg PSByZWdtYXBfdXBkYXRlX2JpdHMoZHBfcGh5LT5yZWdtYXAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGRhdGEtPm9mZl9hbmFfZ2xiICsgcmVnc19hbmFfZ2xiW0RQX1BIWUFfR0xCX0JJ QVNfR0VOXzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhUUF9HTEJfQklBU19JTlRf Ul9DVFJMLCBwZGF0YS0+YW5hX2JpYXNfcik7CgpCZWNhdXNlIHJlZ21hcF91cGRhdGVfYml0cygp IGV4cGVjdHMgYSBwcmUtc2hpZnRlZCB2YWx1ZSBhbmQgYXBwbGllcyBhIG1hc2sKKGUuZy4sIEdF Tk1BU0soMjAsIDE2KSksIGFuIHVuc2hpZnRlZCByYXcgdmFsdWUgbGlrZSAxNSBtYXNrZWQgYWdh aW5zdCB0aGUgdXBwZXIKYml0cyB5aWVsZHMgMC4KClNob3VsZCBhIG1hY3JvIGxpa2UgRklFTERf UFJFUCgpIGJlIHVzZWQgdG8gcHJvcGVybHkgc2hpZnQgdGhlc2UgdmFsdWVzIGludG8KcGxhY2U/ Cgo+ICsJLmFuYV9sYW5lc19pbXAgPSB7Cj4gKwkJLnBtb3MgPSA4LAo+ICsJCS5ubW9zID0gOCwK PiArCX0sCgpbIC4uLiBdCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtv LmRldi8jL3BhdGNoc2V0LzIwMjYwNzAxMTIyMDA4LjE5NTA5LTEtYW5nZWxvZ2lvYWNjaGluby5k ZWxyZWdub0Bjb2xsYWJvcmEuY29tP3BhcnQ9MTIKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0 CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=