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 0C0A02EDD6B for ; Tue, 14 Jul 2026 20:22:49 +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=1784060571; cv=none; b=NJNXTy/NB1mlRK8/m6TaRlrOhXJmEvdPc2P+q4eRjuLX1xE+DI46iMSTOeOfl2FbR600cqj/IPixJ1FFz3onszJ5tn+sYQLj/FHhoPnQiZcqzKwVkCfycyl0gaSHZjdpD9NVLozuXion8FzcHYOiBZlFwAyLweqAb2z85QgZzCk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784060571; c=relaxed/simple; bh=pReN0uZNq8XmXhY9C0IrF2YTSsl0fojPET/zhJAdsa0=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=u9HOMB+96gqZnX7xRC9pku8y04uBS9/XbL1BB2oZ6SoKSb00qelR1ouPsglMS/ibmlcwDY+D9yHL0C8jQfmmnfU+LOkxN7qX14D+/Xs0nvSyaVc7eB6U5+LdqhDGmMPZaXY0ymttrGkryXBADVydK4UDBJA8bf5O6/3lQJ/hjMU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j2voWa3x; 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="j2voWa3x" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 16B7F1F000E9; Tue, 14 Jul 2026 20:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784060569; bh=MHSqA7occ7hGC7US8NOfu7naZc8W6e5MV9v/apQ1gtA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=j2voWa3xzxpKMmshz8lxOgqyUze+wfldWL/08xWQBu2KQ4B1bnZXKEJqMkLJILS6i XGz529QHqF2prZiGZquBWjIcLVyzthv6m02XLyGRVCCiAvA6WDeMxexErg32pEhDH8 3x56nhQS2UjB/jxyvqb4twt+KGarA65GfmDAEGpFdA14uOpTWBLdYb1l39Z4pBTEWi /RPmaPPRESvLaKtKONKpcvj+LegkCWerFOwZvQ5W6EsIePNJc4H9OJTpvEVhCxbSKm SpBquaNM0d1NIY/RuQEr6qjtQKJydEndqbN6L1pBWekPThtMCp2ki0SSAyU7MxZU4k dczoRVGq9+Hqg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 21/35] phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Reply-To: sashiko-reviews@lists.linux.dev To: "Sebastian Reichel" Cc: vkoul@kernel.org, linux-phy@lists.infradead.org, robh@kernel.org, devicetree@vger.kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-21-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> <20260714-rockchip-usbdp-cleanup-v13-21-6cb3e769d4c5@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Tue, 14 Jul 2026 20:22:48 +0000 Message-Id: <20260714202249.16B7F1F000E9@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 2 potential issue(= s) to consider: Pre-existing issues: - [High] Incomplete hardware reconfiguration when exiting DP AltMode leaves= USB3 permanently broken. - [High] Resource leak due to checking `udphy->mode` instead of `udphy->sta= tus` during PHY exit and power off. -- --- Patch [21]: [PATCH v13 21/35] phy: rockchip: usbdp: Properly handle TYP= EC_STATE_SAFE and TYPEC_STATE_USB --- commit 00cf3afa847e665c47f5fa7b9e7cf40b3d920a4f Author: Sebastian Reichel phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB This commit updates the Rockchip USB/DP Combo PHY driver to handle Type-C safe and USB states. This is intended to ensure that the muxing is properly updated when exiting DP AltMode. Closes: https://sashiko.dev/#/message/20260619155020.CC7361F000E9%40smtp.ke= rnel.org > diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rock= chip/phy-rockchip-usbdp.c > index 4e54020d17551..0399cbf96e195 100644 > --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c > +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c > @@ -1293,17 +1293,26 @@ static const struct phy_ops rk_udphy_usb3_phy_ops= =3D { > .owner =3D THIS_MODULE, > }; > =20 > +static bool rk_udphy_is_supported_mode(struct typec_mux_state *state) > +{ > + /* Handle Safe State and USB State */ > + if (state->mode < TYPEC_STATE_MODAL) > + return true; > + > + /* Handle DP AltMode */ > + if (state->alt && state->alt->svid =3D=3D USB_TYPEC_DP_SID) > + return true; > + > + return false; > +} > + > static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux, > struct typec_mux_state *state) > { > struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); > =20 > - /* > - * Ignore mux events not involving DP AltMode, because > - * the mode field is being reused, e.g. state->mode =3D=3D 4 > - * could be either TYPEC_MODE_USB4 or TYPEC_DP_STATE_C. > - */ > - if (!state->alt || state->alt->svid !=3D USB_TYPEC_DP_SID) > + /* Ignore mux events not involving USB or DP */ > + if (!rk_udphy_is_supported_mode(state)) > return 0; > =20 > mutex_lock(&udphy->mutex); [Severity: High] This isn't a bug introduced by this patch, but does this fully resolve the problem when transitioning back to USB-only mode? When the Type-C framework exits DP AltMode (entering TYPEC_STATE_SAFE or TYPEC_STATE_USB), rk_udphy_typec_mux_set() updates udphy->mode and sets udphy->phy_needs_reinit =3D true. However, it appears the hardware is never actually reconfigured to reflect this. The hardware is only reconfigured inside rk_udphy_power_on(), which checks phy_needs_reinit. Because the USB subsystem already powered on the USB PHY before DP was connected, it holds a power reference and will not call phy_power_on() again due to a Type-C mux change. Furthermore, when the DP driver calls phy_power_off() during AltMode exit, rk_udphy_power_off() clears the UDPHY_MODE_DP flag from udphy->status but d= oes not check phy_needs_reinit or trigger hardware reconfiguration. Does this leave the hardware PHY stuck in 4-lane DP mode with the U3 port disabled, breaking USB3 functionality after unplugging the DP cable? [Severity: High] This is also a pre-existing issue, but could the way udphy->mode is updated during these mux transitions lead to a resource leak? If rk_udphy_typec_mux_set() switches udphy->mode to UDPHY_MODE_DP (4-lane D= P) while the USB3 PHY is actively in use, udphy->mode loses the UDPHY_MODE_USB bit. Later, if the USB3 driver is unbound or the system suspends, rk_udphy_usb3_phy_exit() is called: rk_udphy_usb3_phy_exit() { ... if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) goto unlock; ... } Because the check uses udphy->mode instead of udphy->status, it returns ear= ly and skips rk_udphy_power_off(). This leaves UDPHY_MODE_USB permanently set = in udphy->status. Additionally, rk_udphy_power_off() also incorrectly validates against udphy->mode instead of udphy->status: rk_udphy_power_off() { ... if (!(udphy->mode & mode)) { dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); return; } ... } Because udphy->status never returns to 0 (UDPHY_MODE_NONE), rk_udphy_disabl= e() is never called. Does this leave the PHY fully powered indefinitely, preven= ting the system from entering low-power suspend states? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260714-rockchip-u= sbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com?part=3D21 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 3DE64C43458 for ; Tue, 14 Jul 2026 20:22:52 +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=R5Yihd/FzFmq240UmKfNzerJlbNsMWtkaoVr+9YBk4w=; b=N4bQKCizYbDPSE 240fQAulzYfQlegxlJHXMEBYoIwf62t6Gi543SRMa0A8KHosgICgUqKTetxQ71CgSlYk6qf4uhVju BTD1CRERvBtCO84AQfpDVBpcTqSSZofxHAKEBaQg/aylP3VBAatAa2gizPImYSlabvyX9Rn1UgcbE QGTgkid1+sbr5kSji2wLG5fzVOmvG9Q1XoA04NM59DL58Q7ERG0qgcRmgQ2jKrdekL4r4/+uID8tx enx64AFZ5IK7E+qvCK88XMQmKbWT/1TgHhpcqHbXWtU/M18l18HqviGQBx1I6K/tBa0eoEgD3fnCT z/3OgfdFSfTEWxDndAhw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wjjeV-0000000DDfQ-2zzS; Tue, 14 Jul 2026 20:22:51 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wjjeU-0000000DDer-0tSB for linux-phy@lists.infradead.org; Tue, 14 Jul 2026 20:22:50 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9AA6540E21; Tue, 14 Jul 2026 20:22:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 16B7F1F000E9; Tue, 14 Jul 2026 20:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784060569; bh=MHSqA7occ7hGC7US8NOfu7naZc8W6e5MV9v/apQ1gtA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=j2voWa3xzxpKMmshz8lxOgqyUze+wfldWL/08xWQBu2KQ4B1bnZXKEJqMkLJILS6i XGz529QHqF2prZiGZquBWjIcLVyzthv6m02XLyGRVCCiAvA6WDeMxexErg32pEhDH8 3x56nhQS2UjB/jxyvqb4twt+KGarA65GfmDAEGpFdA14uOpTWBLdYb1l39Z4pBTEWi /RPmaPPRESvLaKtKONKpcvj+LegkCWerFOwZvQ5W6EsIePNJc4H9OJTpvEVhCxbSKm SpBquaNM0d1NIY/RuQEr6qjtQKJydEndqbN6L1pBWekPThtMCp2ki0SSAyU7MxZU4k dczoRVGq9+Hqg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 21/35] phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB To: "Sebastian Reichel" Cc: vkoul@kernel.org, linux-phy@lists.infradead.org, robh@kernel.org, devicetree@vger.kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-21-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> <20260714-rockchip-usbdp-cleanup-v13-21-6cb3e769d4c5@collabora.com> Date: Tue, 14 Jul 2026 20:22:48 +0000 Message-Id: <20260714202249.16B7F1F000E9@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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBJbmNvbXBsZXRlIGhhcmR3YXJlIHJlY29uZmlndXJhdGlvbiB3aGVuIGV4aXRpbmcg RFAgQWx0TW9kZSBsZWF2ZXMgVVNCMyBwZXJtYW5lbnRseSBicm9rZW4uCi0gW0hpZ2hdIFJlc291 cmNlIGxlYWsgZHVlIHRvIGNoZWNraW5nIGB1ZHBoeS0+bW9kZWAgaW5zdGVhZCBvZiBgdWRwaHkt PnN0YXR1c2AgZHVyaW5nIFBIWSBleGl0IGFuZCBwb3dlciBvZmYuCi0tCgotLS0gUGF0Y2ggWzIx XTogW1BBVENIIHYxMyAyMS8zNV0gcGh5OiByb2NrY2hpcDogdXNiZHA6IFByb3Blcmx5IGhhbmRs ZSBUWVBFQ19TVEFURV9TQUZFIGFuZCBUWVBFQ19TVEFURV9VU0IgLS0tCmNvbW1pdCAwMGNmM2Fm YTg0N2U2NjVjNDdmNWZhN2I5ZTdjZjQwYjNkOTIwYTRmCkF1dGhvcjogU2ViYXN0aWFuIFJlaWNo ZWwgPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxhYm9yYS5jb20+CgpwaHk6IHJvY2tjaGlwOiB1c2Jk cDogUHJvcGVybHkgaGFuZGxlIFRZUEVDX1NUQVRFX1NBRkUgYW5kIFRZUEVDX1NUQVRFX1VTQgoK VGhpcyBjb21taXQgdXBkYXRlcyB0aGUgUm9ja2NoaXAgVVNCL0RQIENvbWJvIFBIWSBkcml2ZXIg dG8gaGFuZGxlIFR5cGUtQwpzYWZlIGFuZCBVU0Igc3RhdGVzLiBUaGlzIGlzIGludGVuZGVkIHRv IGVuc3VyZSB0aGF0IHRoZSBtdXhpbmcgaXMgcHJvcGVybHkKdXBkYXRlZCB3aGVuIGV4aXRpbmcg RFAgQWx0TW9kZS4KCkNsb3NlczogaHR0cHM6Ly9zYXNoaWtvLmRldi8jL21lc3NhZ2UvMjAyNjA2 MTkxNTUwMjAuQ0M3MzYxRjAwMEU5JTQwc210cC5rZXJuZWwub3JnCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtdXNiZHAuYyBiL2RyaXZlcnMvcGh5L3Jv Y2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5jCj4gaW5kZXggNGU1NDAyMGQxNzU1MS4uMDM5OWNi Zjk2ZTE5NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAt dXNiZHAuYwo+ICsrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5j Cj4gQEAgLTEyOTMsMTcgKzEyOTMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIHJr X3VkcGh5X3VzYjNfcGh5X29wcyA9IHsKPiAgCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiAgfTsK PiAgCj4gK3N0YXRpYyBib29sIHJrX3VkcGh5X2lzX3N1cHBvcnRlZF9tb2RlKHN0cnVjdCB0eXBl Y19tdXhfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwkvKiBIYW5kbGUgU2FmZSBTdGF0ZSBhbmQgVVNC IFN0YXRlICovCj4gKwlpZiAoc3RhdGUtPm1vZGUgPCBUWVBFQ19TVEFURV9NT0RBTCkKPiArCQly ZXR1cm4gdHJ1ZTsKPiArCj4gKwkvKiBIYW5kbGUgRFAgQWx0TW9kZSAqLwo+ICsJaWYgKHN0YXRl LT5hbHQgJiYgc3RhdGUtPmFsdC0+c3ZpZCA9PSBVU0JfVFlQRUNfRFBfU0lEKQo+ICsJCXJldHVy biB0cnVlOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiAgc3RhdGljIGludCBya191 ZHBoeV90eXBlY19tdXhfc2V0KHN0cnVjdCB0eXBlY19tdXhfZGV2ICptdXgsCj4gIAkJCQkgIHN0 cnVjdCB0eXBlY19tdXhfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgcmtfdWRwaHkgKnVk cGh5ID0gdHlwZWNfbXV4X2dldF9kcnZkYXRhKG11eCk7Cj4gIAo+IC0JLyoKPiAtCSAqIElnbm9y ZSBtdXggZXZlbnRzIG5vdCBpbnZvbHZpbmcgRFAgQWx0TW9kZSwgYmVjYXVzZQo+IC0JICogdGhl IG1vZGUgZmllbGQgaXMgYmVpbmcgcmV1c2VkLCBlLmcuIHN0YXRlLT5tb2RlID09IDQKPiAtCSAq IGNvdWxkIGJlIGVpdGhlciBUWVBFQ19NT0RFX1VTQjQgb3IgVFlQRUNfRFBfU1RBVEVfQy4KPiAt CSAqLwo+IC0JaWYgKCFzdGF0ZS0+YWx0IHx8IHN0YXRlLT5hbHQtPnN2aWQgIT0gVVNCX1RZUEVD X0RQX1NJRCkKPiArCS8qIElnbm9yZSBtdXggZXZlbnRzIG5vdCBpbnZvbHZpbmcgVVNCIG9yIERQ ICovCj4gKwlpZiAoIXJrX3VkcGh5X2lzX3N1cHBvcnRlZF9tb2RlKHN0YXRlKSkKPiAgCQlyZXR1 cm4gMDsKPiAgCj4gIAltdXRleF9sb2NrKCZ1ZHBoeS0+bXV0ZXgpOwoKW1NldmVyaXR5OiBIaWdo XQpUaGlzIGlzbid0IGEgYnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGRvZXMgdGhp cyBmdWxseSByZXNvbHZlIHRoZQpwcm9ibGVtIHdoZW4gdHJhbnNpdGlvbmluZyBiYWNrIHRvIFVT Qi1vbmx5IG1vZGU/CgpXaGVuIHRoZSBUeXBlLUMgZnJhbWV3b3JrIGV4aXRzIERQIEFsdE1vZGUg KGVudGVyaW5nIFRZUEVDX1NUQVRFX1NBRkUgb3IKVFlQRUNfU1RBVEVfVVNCKSwgcmtfdWRwaHlf dHlwZWNfbXV4X3NldCgpIHVwZGF0ZXMgdWRwaHktPm1vZGUgYW5kIHNldHMKdWRwaHktPnBoeV9u ZWVkc19yZWluaXQgPSB0cnVlLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoZSBoYXJkd2FyZSBpcyBu ZXZlcgphY3R1YWxseSByZWNvbmZpZ3VyZWQgdG8gcmVmbGVjdCB0aGlzLgoKVGhlIGhhcmR3YXJl IGlzIG9ubHkgcmVjb25maWd1cmVkIGluc2lkZSBya191ZHBoeV9wb3dlcl9vbigpLCB3aGljaCBj aGVja3MKcGh5X25lZWRzX3JlaW5pdC4gQmVjYXVzZSB0aGUgVVNCIHN1YnN5c3RlbSBhbHJlYWR5 IHBvd2VyZWQgb24gdGhlIFVTQiBQSFkKYmVmb3JlIERQIHdhcyBjb25uZWN0ZWQsIGl0IGhvbGRz IGEgcG93ZXIgcmVmZXJlbmNlIGFuZCB3aWxsIG5vdCBjYWxsCnBoeV9wb3dlcl9vbigpIGFnYWlu IGR1ZSB0byBhIFR5cGUtQyBtdXggY2hhbmdlLgoKRnVydGhlcm1vcmUsIHdoZW4gdGhlIERQIGRy aXZlciBjYWxscyBwaHlfcG93ZXJfb2ZmKCkgZHVyaW5nIEFsdE1vZGUgZXhpdCwKcmtfdWRwaHlf cG93ZXJfb2ZmKCkgY2xlYXJzIHRoZSBVRFBIWV9NT0RFX0RQIGZsYWcgZnJvbSB1ZHBoeS0+c3Rh dHVzIGJ1dCBkb2VzCm5vdCBjaGVjayBwaHlfbmVlZHNfcmVpbml0IG9yIHRyaWdnZXIgaGFyZHdh cmUgcmVjb25maWd1cmF0aW9uLgoKRG9lcyB0aGlzIGxlYXZlIHRoZSBoYXJkd2FyZSBQSFkgc3R1 Y2sgaW4gNC1sYW5lIERQIG1vZGUgd2l0aCB0aGUgVTMgcG9ydApkaXNhYmxlZCwgYnJlYWtpbmcg VVNCMyBmdW5jdGlvbmFsaXR5IGFmdGVyIHVucGx1Z2dpbmcgdGhlIERQIGNhYmxlPwoKCltTZXZl cml0eTogSGlnaF0KVGhpcyBpcyBhbHNvIGEgcHJlLWV4aXN0aW5nIGlzc3VlLCBidXQgY291bGQg dGhlIHdheSB1ZHBoeS0+bW9kZSBpcyB1cGRhdGVkCmR1cmluZyB0aGVzZSBtdXggdHJhbnNpdGlv bnMgbGVhZCB0byBhIHJlc291cmNlIGxlYWs/CgpJZiBya191ZHBoeV90eXBlY19tdXhfc2V0KCkg c3dpdGNoZXMgdWRwaHktPm1vZGUgdG8gVURQSFlfTU9ERV9EUCAoNC1sYW5lIERQKQp3aGlsZSB0 aGUgVVNCMyBQSFkgaXMgYWN0aXZlbHkgaW4gdXNlLCB1ZHBoeS0+bW9kZSBsb3NlcyB0aGUgVURQ SFlfTU9ERV9VU0IKYml0LgoKTGF0ZXIsIGlmIHRoZSBVU0IzIGRyaXZlciBpcyB1bmJvdW5kIG9y IHRoZSBzeXN0ZW0gc3VzcGVuZHMsCnJrX3VkcGh5X3VzYjNfcGh5X2V4aXQoKSBpcyBjYWxsZWQ6 Cgpya191ZHBoeV91c2IzX3BoeV9leGl0KCkgewogICAgLi4uCiAgICBpZiAoISh1ZHBoeS0+bW9k ZSAmIFVEUEhZX01PREVfVVNCKSB8fCB1ZHBoeS0+aHMpCiAgICAgICAgZ290byB1bmxvY2s7CiAg ICAuLi4KfQoKQmVjYXVzZSB0aGUgY2hlY2sgdXNlcyB1ZHBoeS0+bW9kZSBpbnN0ZWFkIG9mIHVk cGh5LT5zdGF0dXMsIGl0IHJldHVybnMgZWFybHkKYW5kIHNraXBzIHJrX3VkcGh5X3Bvd2VyX29m ZigpLiBUaGlzIGxlYXZlcyBVRFBIWV9NT0RFX1VTQiBwZXJtYW5lbnRseSBzZXQgaW4KdWRwaHkt PnN0YXR1cy4KCkFkZGl0aW9uYWxseSwgcmtfdWRwaHlfcG93ZXJfb2ZmKCkgYWxzbyBpbmNvcnJl Y3RseSB2YWxpZGF0ZXMgYWdhaW5zdAp1ZHBoeS0+bW9kZSBpbnN0ZWFkIG9mIHVkcGh5LT5zdGF0 dXM6Cgpya191ZHBoeV9wb3dlcl9vZmYoKSB7CiAgICAuLi4KICAgIGlmICghKHVkcGh5LT5tb2Rl ICYgbW9kZSkpIHsKICAgICAgICBkZXZfaW5mbyh1ZHBoeS0+ZGV2LCAibW9kZSAweCUwMnggaXMg bm90IHN1cHBvcnRcbiIsIG1vZGUpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIC4uLgp9CgpC ZWNhdXNlIHVkcGh5LT5zdGF0dXMgbmV2ZXIgcmV0dXJucyB0byAwIChVRFBIWV9NT0RFX05PTkUp LCBya191ZHBoeV9kaXNhYmxlKCkKaXMgbmV2ZXIgY2FsbGVkLiBEb2VzIHRoaXMgbGVhdmUgdGhl IFBIWSBmdWxseSBwb3dlcmVkIGluZGVmaW5pdGVseSwgcHJldmVudGluZwp0aGUgc3lzdGVtIGZy b20gZW50ZXJpbmcgbG93LXBvd2VyIHN1c3BlbmQgc3RhdGVzPwoKLS0gClNhc2hpa28gQUkgcmV2 aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDcxNC1yb2NrY2hpcC11 c2JkcC1jbGVhbnVwLXYxMy0wLTZjYjNlNzY5ZDRjNUBjb2xsYWJvcmEuY29tP3BhcnQ9MjEKCi0t IApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=