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 70AF13A9616 for ; Thu, 9 Jul 2026 19:20:06 +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=1783624807; cv=none; b=XbnvCzp5zkfJLdAHEzNnwF3j2ZxWjpHddt+BHquUVMfbQXwsvF3Q/V/R5GFdHenKF3kqYJpH9/AFVx6M1z4j926kuo/a6eTjY6UXf7c0snAOc43cxR+HI+7GgT3WxFY9sBCxHuFcVAg0R/yac7ZR3SKdSeQ2EF6kL9allyVoQ7c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783624807; c=relaxed/simple; bh=7DpJGoxfweEZtBfvoj3pfeT6eTmnoLv34PG/QWLyypo=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=pDuW8dAgVjDqzNHJKayStH2G4y8MM8pshaqp/gb4G+QHdKI3tny0AZqobhfgO1y9MFAnAVwHPXO7xehmarNke4sDngnC2V+wRr5ZXbzRM9te3ZJqyTFqXqErxiJElvhtwu+gWsYb1uUSf5GwGo4+96OtGwIKC24ZMwZKZnQ7IAY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AFqO4tOo; 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="AFqO4tOo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D36B1F000E9; Thu, 9 Jul 2026 19:20:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783624806; bh=JOoYQRRMp/4bQLfHT7UKwwFS3tOvWyyYjCNy0bIanP8=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=AFqO4tOoNNFAEoLYJmjyu/SQD3JyRwFaKveh1SXYhWsnL54mc4i5usBB7dSs3lGEc IJOQPitHiw3ugO/OuTLrMkF6AFNmiBW+Vi74v+DPCNE3309IkapjjQy22NBc0fylKM SgEGuYbm0mlnuaGAv1Fs3AbiG98ySluC+WdYPJ2iyk96K04lelrYlRizLHUfBpWjcQ /MVkPlY40+FQ6teToITEDFyWGAha+Ln1y9ajZ/CDqAn19jtzHeZaENYA6GxzTKMU1j vONODRn08j3PmYOjdRfhVKk4v5qtixPYaigf9D35RKPN4FkaRU3REjeGi2QmC1FLjT aTWzUpHHP+Zqg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 02/36] phy: rockchip: usbdp: Update mode_change after error handling Reply-To: sashiko-reviews@lists.linux.dev To: "Sebastian Reichel" Cc: olteanv@gmail.com, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org, neil.armstrong@linaro.org, vkoul@kernel.org In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-2-a149ac60f76c@collabora.com> References: <20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com> <20260709-rockchip-usbdp-cleanup-v11-2-a149ac60f76c@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 09 Jul 2026 19:20:04 +0000 Message-Id: <20260709192005.9D36B1F000E9@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 3 potential issue(= s) to consider: Pre-existing issues: - [High] When changing the PHY mode from DP-only to a state that includes U= SB (e.g., DP+USB), the U3 port remains permanently disabled, breaking USB 3= .0 functionality. - [High] The PHY is left permanently enabled and clocks leak due to flawed = mode-checking in the power off path during Type-C role switches. - [High] Re-initializing the PHY during a mode change while the USB control= ler is active disables PHY clocks without re-routing the DWC3 clock, leadin= g to a fatal SError on register access. -- --- Patch [2]: [PATCH v11 02/36] phy: rockchip: usbdp: Update mode_change a= fter error handling --- commit 1bc42e532da1064edae3f14df8f37ade40a0072d Author: Sebastian Reichel phy: rockchip: usbdp: Update mode_change after error handling If rk_udphy_init() or rk_udphy_setup() fails, the reinit will not be tried again. Fix this by only updating the variable after all potential errors have been handled. Link: https://lore.kernel.org/linux-phy/20260612163835.8D5471F000E9@smtp.ke= rnel.org/ > diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rock= chip/phy-rockchip-usbdp.c > index fba35510d88ce..a5ffdf7a6e76b 100644 > --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c > +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c > @@ -1000,15 +1000,14 @@ static int rk_udphy_power_on(struct rk_udphy *udp= hy, u8 mode) > } > =20 > if (udphy->status =3D=3D UDPHY_MODE_NONE) { > - udphy->mode_change =3D false; > ret =3D rk_udphy_setup(udphy); > if (ret) > return ret; > =20 > if (udphy->mode & UDPHY_MODE_USB) > rk_udphy_u3_port_disable(udphy, false); > - } else if (udphy->mode_change) { > udphy->mode_change =3D false; > + } else if (udphy->mode_change) { > udphy->status =3D UDPHY_MODE_NONE; > if (udphy->mode =3D=3D UDPHY_MODE_DP) > rk_udphy_u3_port_disable(udphy, true); [Severity: High] This isn't a bug introduced by this patch, but does this lead to a fatal SError when changing to a mode that includes USB? If a mode change to DP+USB triggers rk_udphy_power_on(), the code skips cal= ling rk_udphy_u3_port_disable(udphy, true). It then unconditionally calls rk_udphy_disable(udphy) below, which turns off the PHY clocks. Because the USB3 port wasn't disabled to safely re-route the clock, and the DWC3 driver isn't notified via phy_notify_reset(), the active DWC3 controll= er could crash the system when it touches its registers. > =20 > rk_udphy_disable(udphy); > ret =3D rk_udphy_setup(udphy); > if (ret) > return ret; > + udphy->mode_change =3D false; > } [Severity: High] This isn't a bug introduced by this patch, but does this skip re-enabling t= he U3 port when the new mode requires USB? When changing the PHY mode from DP-only to a state that includes USB (e.g., DP+USB), the U3 port remains permanently disabled. The mode change block fails to call rk_udphy_u3_port_disable(udphy, false) to re-enable it for the newly added USB 3.0 mode, leaving USB functionality broken until a power cy= cle. [Severity: High] This isn't a bug introduced by this patch, but can the PHY be left permanently enabled during Type-C role switches? When the Type-C mux changes mode from DP+USB to DP-only, udphy->mode loses the UDPHY_MODE_USB bit immediately. Later, when the USB core calls rk_udphy_usb3_phy_exit(): drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_usb3_phy_exit() { ... /* DP only or high-speed */ if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) goto unlock; rk_udphy_power_off(udphy, UDPHY_MODE_USB); ... } It sees the new mode and skips calling rk_udphy_power_off(). Even if it were called, rk_udphy_power_off() also refuses to act if the requested mode is absent from udphy->mode: drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_power_off() { ... if (!(udphy->mode & mode)) { dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); return; } ... } Consequently, udphy->status incorrectly retains the USB bit, preventing rk_udphy_disable() from ever powering down the PHY and leaking clocks. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260709-rockchip-u= sbdp-cleanup-v11-0-a149ac60f76c@collabora.com?part=3D2 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 89A63C43458 for ; Thu, 9 Jul 2026 19:20:07 +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=o+5eIuhbSTwVaUZ1hphm7I6NFT8YCoxYIPcpz8pkoOc=; b=ghLHMoZf7My13V Xtw6ZesW7WitLDuhy5u2quZz7RBQZ/WN/beCOz4YJXU/9EM4nNHu6grjcJg90Z73faIMO7rfQAfQF yUkddrbFDpfr1H9vKoCi7NXCpKTBOB8LDx+Otr/QL+XEV9p/p4i/23ijk5H0VZVNAXcQROWyR77PV 4fd1vNwZV65DqrydF95mSBf+O18zEHXReT3X0kyhyiayNPGbO93wT1xmzvZw6XMF3Ap7f004w+QtN ZWJ/CeR9FS2fiNf+PKkZ94USlYbb8aGv+mjAT7lKV4eP4pi9Yqau01AmI33yRxlPOOmnU7JeU2kJx jpv8Xi4Tvg8E8rHdFVTA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1whuI3-00000003Rjk-1FtV; Thu, 09 Jul 2026 19:20:07 +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 1whuI2-00000003Rjd-1ozg for linux-phy@lists.infradead.org; Thu, 09 Jul 2026 19:20:06 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 35F8042E7A; Thu, 9 Jul 2026 19:20:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D36B1F000E9; Thu, 9 Jul 2026 19:20:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783624806; bh=JOoYQRRMp/4bQLfHT7UKwwFS3tOvWyyYjCNy0bIanP8=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=AFqO4tOoNNFAEoLYJmjyu/SQD3JyRwFaKveh1SXYhWsnL54mc4i5usBB7dSs3lGEc IJOQPitHiw3ugO/OuTLrMkF6AFNmiBW+Vi74v+DPCNE3309IkapjjQy22NBc0fylKM SgEGuYbm0mlnuaGAv1Fs3AbiG98ySluC+WdYPJ2iyk96K04lelrYlRizLHUfBpWjcQ /MVkPlY40+FQ6teToITEDFyWGAha+Ln1y9ajZ/CDqAn19jtzHeZaENYA6GxzTKMU1j vONODRn08j3PmYOjdRfhVKk4v5qtixPYaigf9D35RKPN4FkaRU3REjeGi2QmC1FLjT aTWzUpHHP+Zqg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 02/36] phy: rockchip: usbdp: Update mode_change after error handling To: "Sebastian Reichel" Cc: olteanv@gmail.com, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org, neil.armstrong@linaro.org, vkoul@kernel.org In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-2-a149ac60f76c@collabora.com> References: <20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com> <20260709-rockchip-usbdp-cleanup-v11-2-a149ac60f76c@collabora.com> Date: Thu, 09 Jul 2026 19:20:04 +0000 Message-Id: <20260709192005.9D36B1F000E9@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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBXaGVuIGNoYW5naW5nIHRoZSBQSFkgbW9kZSBmcm9tIERQLW9ubHkgdG8gYSBzdGF0 ZSB0aGF0IGluY2x1ZGVzIFVTQiAoZS5nLiwgRFArVVNCKSwgdGhlIFUzIHBvcnQgcmVtYWlucyBw ZXJtYW5lbnRseSBkaXNhYmxlZCwgYnJlYWtpbmcgVVNCIDMuMCBmdW5jdGlvbmFsaXR5LgotIFtI aWdoXSBUaGUgUEhZIGlzIGxlZnQgcGVybWFuZW50bHkgZW5hYmxlZCBhbmQgY2xvY2tzIGxlYWsg ZHVlIHRvIGZsYXdlZCBtb2RlLWNoZWNraW5nIGluIHRoZSBwb3dlciBvZmYgcGF0aCBkdXJpbmcg VHlwZS1DIHJvbGUgc3dpdGNoZXMuCi0gW0hpZ2hdIFJlLWluaXRpYWxpemluZyB0aGUgUEhZIGR1 cmluZyBhIG1vZGUgY2hhbmdlIHdoaWxlIHRoZSBVU0IgY29udHJvbGxlciBpcyBhY3RpdmUgZGlz YWJsZXMgUEhZIGNsb2NrcyB3aXRob3V0IHJlLXJvdXRpbmcgdGhlIERXQzMgY2xvY2ssIGxlYWRp bmcgdG8gYSBmYXRhbCBTRXJyb3Igb24gcmVnaXN0ZXIgYWNjZXNzLgotLQoKLS0tIFBhdGNoIFsy XTogW1BBVENIIHYxMSAwMi8zNl0gcGh5OiByb2NrY2hpcDogdXNiZHA6IFVwZGF0ZSBtb2RlX2No YW5nZSBhZnRlciBlcnJvciBoYW5kbGluZyAtLS0KY29tbWl0IDFiYzQyZTUzMmRhMTA2NGVkYWUz ZjE0ZGY4ZjM3YWRlNDBhMDA3MmQKQXV0aG9yOiBTZWJhc3RpYW4gUmVpY2hlbCA8c2ViYXN0aWFu LnJlaWNoZWxAY29sbGFib3JhLmNvbT4KCnBoeTogcm9ja2NoaXA6IHVzYmRwOiBVcGRhdGUgbW9k ZV9jaGFuZ2UgYWZ0ZXIgZXJyb3IgaGFuZGxpbmcKCklmIHJrX3VkcGh5X2luaXQoKSBvciBya191 ZHBoeV9zZXR1cCgpIGZhaWxzLCB0aGUgcmVpbml0IHdpbGwgbm90IGJlCnRyaWVkIGFnYWluLiBG aXggdGhpcyBieSBvbmx5IHVwZGF0aW5nIHRoZSB2YXJpYWJsZSBhZnRlciBhbGwgcG90ZW50aWFs CmVycm9ycyBoYXZlIGJlZW4gaGFuZGxlZC4KCkxpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L2xpbnV4LXBoeS8yMDI2MDYxMjE2MzgzNS44RDU0NzFGMDAwRTlAc210cC5rZXJuZWwub3JnLwoK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLXVzYmRwLmMg Yi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtdXNiZHAuYwo+IGluZGV4IGZiYTM1 NTEwZDg4Y2UuLmE1ZmZkZjdhNmU3NmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvcm9ja2No aXAvcGh5LXJvY2tjaGlwLXVzYmRwLmMKPiArKysgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHkt cm9ja2NoaXAtdXNiZHAuYwo+IEBAIC0xMDAwLDE1ICsxMDAwLDE0IEBAIHN0YXRpYyBpbnQgcmtf dWRwaHlfcG93ZXJfb24oc3RydWN0IHJrX3VkcGh5ICp1ZHBoeSwgdTggbW9kZSkKPiAgCX0KPiAg Cj4gIAlpZiAodWRwaHktPnN0YXR1cyA9PSBVRFBIWV9NT0RFX05PTkUpIHsKPiAtCQl1ZHBoeS0+ bW9kZV9jaGFuZ2UgPSBmYWxzZTsKPiAgCQlyZXQgPSBya191ZHBoeV9zZXR1cCh1ZHBoeSk7Cj4g IAkJaWYgKHJldCkKPiAgCQkJcmV0dXJuIHJldDsKPiAgCj4gIAkJaWYgKHVkcGh5LT5tb2RlICYg VURQSFlfTU9ERV9VU0IpCj4gIAkJCXJrX3VkcGh5X3UzX3BvcnRfZGlzYWJsZSh1ZHBoeSwgZmFs c2UpOwo+IC0JfSBlbHNlIGlmICh1ZHBoeS0+bW9kZV9jaGFuZ2UpIHsKPiAgCQl1ZHBoeS0+bW9k ZV9jaGFuZ2UgPSBmYWxzZTsKPiArCX0gZWxzZSBpZiAodWRwaHktPm1vZGVfY2hhbmdlKSB7Cj4g IAkJdWRwaHktPnN0YXR1cyA9IFVEUEhZX01PREVfTk9ORTsKPiAgCQlpZiAodWRwaHktPm1vZGUg PT0gVURQSFlfTU9ERV9EUCkKPiAgCQkJcmtfdWRwaHlfdTNfcG9ydF9kaXNhYmxlKHVkcGh5LCB0 cnVlKTsKCltTZXZlcml0eTogSGlnaF0KVGhpcyBpc24ndCBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IHRo aXMgcGF0Y2gsIGJ1dCBkb2VzIHRoaXMgbGVhZCB0byBhIGZhdGFsClNFcnJvciB3aGVuIGNoYW5n aW5nIHRvIGEgbW9kZSB0aGF0IGluY2x1ZGVzIFVTQj8KCklmIGEgbW9kZSBjaGFuZ2UgdG8gRFAr VVNCIHRyaWdnZXJzIHJrX3VkcGh5X3Bvd2VyX29uKCksIHRoZSBjb2RlIHNraXBzIGNhbGxpbmcK cmtfdWRwaHlfdTNfcG9ydF9kaXNhYmxlKHVkcGh5LCB0cnVlKS4gSXQgdGhlbiB1bmNvbmRpdGlv bmFsbHkgY2FsbHMKcmtfdWRwaHlfZGlzYWJsZSh1ZHBoeSkgYmVsb3csIHdoaWNoIHR1cm5zIG9m ZiB0aGUgUEhZIGNsb2Nrcy4KCkJlY2F1c2UgdGhlIFVTQjMgcG9ydCB3YXNuJ3QgZGlzYWJsZWQg dG8gc2FmZWx5IHJlLXJvdXRlIHRoZSBjbG9jaywgYW5kIHRoZQpEV0MzIGRyaXZlciBpc24ndCBu b3RpZmllZCB2aWEgcGh5X25vdGlmeV9yZXNldCgpLCB0aGUgYWN0aXZlIERXQzMgY29udHJvbGxl cgpjb3VsZCBjcmFzaCB0aGUgc3lzdGVtIHdoZW4gaXQgdG91Y2hlcyBpdHMgcmVnaXN0ZXJzLgoK PiAgCj4gIAkJcmtfdWRwaHlfZGlzYWJsZSh1ZHBoeSk7Cj4gIAkJcmV0ID0gcmtfdWRwaHlfc2V0 dXAodWRwaHkpOwo+ICAJCWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gKwkJdWRwaHktPm1v ZGVfY2hhbmdlID0gZmFsc2U7Cj4gIAl9CgpbU2V2ZXJpdHk6IEhpZ2hdClRoaXMgaXNuJ3QgYSBi dWcgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBidXQgZG9lcyB0aGlzIHNraXAgcmUtZW5hYmxp bmcgdGhlClUzIHBvcnQgd2hlbiB0aGUgbmV3IG1vZGUgcmVxdWlyZXMgVVNCPwoKV2hlbiBjaGFu Z2luZyB0aGUgUEhZIG1vZGUgZnJvbSBEUC1vbmx5IHRvIGEgc3RhdGUgdGhhdCBpbmNsdWRlcyBV U0IgKGUuZy4sCkRQK1VTQiksIHRoZSBVMyBwb3J0IHJlbWFpbnMgcGVybWFuZW50bHkgZGlzYWJs ZWQuIFRoZSBtb2RlIGNoYW5nZSBibG9jawpmYWlscyB0byBjYWxsIHJrX3VkcGh5X3UzX3BvcnRf ZGlzYWJsZSh1ZHBoeSwgZmFsc2UpIHRvIHJlLWVuYWJsZSBpdCBmb3IgdGhlCm5ld2x5IGFkZGVk IFVTQiAzLjAgbW9kZSwgbGVhdmluZyBVU0IgZnVuY3Rpb25hbGl0eSBicm9rZW4gdW50aWwgYSBw b3dlciBjeWNsZS4KCltTZXZlcml0eTogSGlnaF0KVGhpcyBpc24ndCBhIGJ1ZyBpbnRyb2R1Y2Vk IGJ5IHRoaXMgcGF0Y2gsIGJ1dCBjYW4gdGhlIFBIWSBiZSBsZWZ0CnBlcm1hbmVudGx5IGVuYWJs ZWQgZHVyaW5nIFR5cGUtQyByb2xlIHN3aXRjaGVzPwoKV2hlbiB0aGUgVHlwZS1DIG11eCBjaGFu Z2VzIG1vZGUgZnJvbSBEUCtVU0IgdG8gRFAtb25seSwgdWRwaHktPm1vZGUgbG9zZXMKdGhlIFVE UEhZX01PREVfVVNCIGJpdCBpbW1lZGlhdGVseS4KCkxhdGVyLCB3aGVuIHRoZSBVU0IgY29yZSBj YWxscyBya191ZHBoeV91c2IzX3BoeV9leGl0KCk6Cgpkcml2ZXJzL3BoeS9yb2NrY2hpcC9waHkt cm9ja2NoaXAtdXNiZHAuYzpya191ZHBoeV91c2IzX3BoeV9leGl0KCkgewoJLi4uCgkvKiBEUCBv bmx5IG9yIGhpZ2gtc3BlZWQgKi8KCWlmICghKHVkcGh5LT5tb2RlICYgVURQSFlfTU9ERV9VU0Ip IHx8IHVkcGh5LT5ocykKCQlnb3RvIHVubG9jazsKCglya191ZHBoeV9wb3dlcl9vZmYodWRwaHks IFVEUEhZX01PREVfVVNCKTsKCS4uLgp9CgpJdCBzZWVzIHRoZSBuZXcgbW9kZSBhbmQgc2tpcHMg Y2FsbGluZyBya191ZHBoeV9wb3dlcl9vZmYoKS4gRXZlbiBpZiBpdAp3ZXJlIGNhbGxlZCwgcmtf dWRwaHlfcG93ZXJfb2ZmKCkgYWxzbyByZWZ1c2VzIHRvIGFjdCBpZiB0aGUgcmVxdWVzdGVkCm1v ZGUgaXMgYWJzZW50IGZyb20gdWRwaHktPm1vZGU6Cgpkcml2ZXJzL3BoeS9yb2NrY2hpcC9waHkt cm9ja2NoaXAtdXNiZHAuYzpya191ZHBoeV9wb3dlcl9vZmYoKSB7CgkuLi4KCWlmICghKHVkcGh5 LT5tb2RlICYgbW9kZSkpIHsKCQlkZXZfaW5mbyh1ZHBoeS0+ZGV2LCAibW9kZSAweCUwMnggaXMg bm90IHN1cHBvcnRcbiIsIG1vZGUpOwoJCXJldHVybjsKCX0KCS4uLgp9CgpDb25zZXF1ZW50bHks IHVkcGh5LT5zdGF0dXMgaW5jb3JyZWN0bHkgcmV0YWlucyB0aGUgVVNCIGJpdCwgcHJldmVudGlu Zwpya191ZHBoeV9kaXNhYmxlKCkgZnJvbSBldmVyIHBvd2VyaW5nIGRvd24gdGhlIFBIWSBhbmQg bGVha2luZyBjbG9ja3MuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtv LmRldi8jL3BhdGNoc2V0LzIwMjYwNzA5LXJvY2tjaGlwLXVzYmRwLWNsZWFudXAtdjExLTAtYTE0 OWFjNjBmNzZjQGNvbGxhYm9yYS5jb20/cGFydD0yCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlz dApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK