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 EACE2449990 for ; Thu, 9 Jul 2026 19:18:27 +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=1783624709; cv=none; b=ZOkobb2GatwltOKOYw76Fi1KbwVz/R+n1K+5N1kk+/M/46+BF7beuP2jL2Ic+kuU5K8szZ3hqIwZpWeWDaeJpJEyZCjKfazqKgx2pyVDjajgi3kx+9mYB7JuCSPrtp47lK/ZKQGcmDGz9GNV43kM/MMuYzmZSXoNu+4SbPH2PnE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783624709; c=relaxed/simple; bh=Ig1r9p1Z+FUPDZwXV940iwqpp1f+SwGSC0/u1O4y+nk=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=UoIFt7Z4fXRtycNXFHjEfWGni9Rkc9LKvX+LM/2IUzw3mVBC+9WOaI13GfO76+l5tKYMxMvJhHaRjQTPO+bp85GaVh95Q+sXjpFD0N3g6UUPkKlh3qZCcVZ9w4mVFlXeA1opmjpfAm/1QHHePKEq1hVz7pEkr0/nkGkhMfmZJzA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eATCDbB/; 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="eATCDbB/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 080291F000E9; Thu, 9 Jul 2026 19:18:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783624707; bh=WsrB3XUH4fJ4nQ7zyDo33pCbgs15xIKA0URJ9X4XOMg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=eATCDbB/EF90iE7Jfoliqb1QuF9pU5J70z+BSgzzDxBBbxkQveCeIkZuY5t9dD60A xWz2teVTqbzjdWHAGrWrMPrFjQC8G1qwcTH3gZKp8ROXgvpGENe/tL6V6335hlWPEl 96gM4UDLM3m8lgGkN6JqYlAP5XGSzKbRdlvad9p1j+vCfKnWi7zAfUhZjp5StjIHak 5p9ac1EX2sLl/gGiyJnlGLP2hoOunruOCsKqDkby5xpVkKsdH4wkkSo6COpU79Wxqx llR/8dSMoZQxrCQMZG/J5F3RMjgzbUKyRNAGXT5OK22CVsvvdnSQMG22zSN9VjD9P3 mTvJ+gBfHxo3w== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init Reply-To: sashiko-reviews@lists.linux.dev To: "Sebastian Reichel" Cc: olteanv@gmail.com, neil.armstrong@linaro.org, robh@kernel.org, vkoul@kernel.org, linux-phy@lists.infradead.org, conor+dt@kernel.org, devicetree@vger.kernel.org In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com> References: <20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com> <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 09 Jul 2026 19:18:26 +0000 Message-Id: <20260709191827.080291F000E9@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] The USB3 (U3) port is not re-enabled when the PHY dynamically swit= ches from DP-only mode to DP+USB mode, breaking USB3 functionality. - [High] PHY clock and power leak due to early exit during power off based = on current mode instead of active status. - [High] The DisplayPort PHY init function fails to replay a cached HPD (Ho= t Plug Detect) event if the Type-C cable was connected before the DP contro= ller probed. -- --- Patch [7]: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running = on PHY re-init --- commit 79bb98238750965863b0b02f66603b673864fa91 Author: Sebastian Reichel phy: rockchip: usbdp: Keep clocks running on PHY re-init This commit optimizes PHY re-initialization by avoiding the redundant disab= le and re-enable of clocks. Instead of calling rk_udphy_disable() and rk_udphy_setup(), it directly calls rk_udphy_init(). > diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rock= chip/phy-rockchip-usbdp.c > index 6cb9f6b4dbf6d..e3f5a26c876a5 100644 > --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c > +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c > @@ -987,8 +987,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) > if (udphy->mode =3D=3D UDPHY_MODE_DP) > rk_udphy_u3_port_disable(udphy, true); > =20 > - rk_udphy_disable(udphy); > - ret =3D rk_udphy_setup(udphy); > + ret =3D rk_udphy_init(udphy); [Severity: High] This isn't a bug introduced by this patch, but does this logic leave the US= B3 port disabled when dynamically switching from DP-only back to DP+USB mode? When the Type-C mux transitions from DP+USB to DP-only mode, rk_udphy_power_on() executes rk_udphy_u3_port_disable(udphy, true) because udphy->mode =3D=3D UDPHY_MODE_DP. If the mux later switches back to DP+USB mode (where udphy->mode =3D=3D UDPHY_MODE_DP_USB), rk_udphy_power_on() is called again = with udphy->mode_change =3D=3D true, but there is no corresponding rk_udphy_u3_port_disable(udphy, false) call here to re-enable the U3 port. Consequently, the USB 3.0 port appears to remain disabled in the GRF regist= ers until a full PHY power cycle. > if (ret) > return ret; > udphy->mode_change =3D false; There are also two other pre-existing issues in this file that might need attention. [Severity: High] This is a pre-existing issue, but does rk_udphy_usb3_phy_exit() permanently leak PHY clock and power resources if the Type-C mode changes before the USB controller exits? If the mode changes (e.g., from DP+USB to DP-only) before the USB controller calls phy_exit, the mode will be updated. When rk_udphy_usb3_phy_exit() is subsequently called: static int rk_udphy_usb3_phy_exit(struct phy *phy) { ... /* DP only or high-speed */ if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) goto unlock; rk_udphy_power_off(udphy, UDPHY_MODE_USB); ... } Since udphy->mode was already updated, this condition evaluates to true, causing an early return. The UDPHY_MODE_USB bit is never cleared from udphy->status, permanently skipping rk_udphy_disable() and leaving clocks running even when all devices detach. The same logic flaw exists in rk_udphy_power_off(): static void rk_udphy_power_off(struct rk_udphy *udphy, u8 mode) { if (!(udphy->mode & mode)) { dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); return; } ... } Checking udphy->mode instead of the active udphy->status prevents the status bit from being cleared. [Severity: High] This is a pre-existing issue, but does rk_udphy_dp_phy_init() silently miss the initial connection event if the Type-C cable is connected before the DisplayPort controller driver probes? When a connection occurs, rk_udphy_dp_hpd_event_trigger() is called: static void rk_udphy_dp_hpd_event_trigger(struct rk_udphy *udphy, bool hpd) { ... udphy->dp_sink_hpd_sel =3D true; udphy->dp_sink_hpd_cfg =3D hpd; if (!udphy->dp_in_use) return; rk_udphy_grfreg_write(udphy->vogrf, &cfg->vogrfcfg[udphy->id].hpd_trigger,= hpd); } If the DP controller hasn't probed yet, the event is merely cached and not written to the GRF register. When the DP controller later probes and calls rk_udphy_dp_phy_init(): static int rk_udphy_dp_phy_init(struct phy *phy) { ... udphy->dp_in_use =3D true; ... return 0; } The init function sets dp_in_use to true but never checks or applies the cached HPD state (dp_sink_hpd_sel and dp_sink_hpd_cfg), leaving the display blank until a physical replug. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260709-rockchip-u= sbdp-cleanup-v11-0-a149ac60f76c@collabora.com?part=3D7 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 3D14CC43458 for ; Thu, 9 Jul 2026 19:18:29 +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=PkJy6oU3w1iUZL/jztERD2g+MsUi59IqhW5dmL/yzKU=; b=fRjp06yQ/0P6qz fhUOg+/d5vmQMHjEqyJuc1DJOxQhxpX28sfmpdZGZlIOy+Mt1NE6uFgTc6jH7fwZqYgh/xBTQB7Xm NdCyPBYtkLWEY3wz2Maiyz/ByI9FRbYD3CfPlPk5HRS4AmB04XFbZDj+UE12Nk+V5wTMtGrxiOlXe 0HgADgia8fBoTtKAwS6bRy/c/zEWwXCaiYtio+1GtiGBSFDjGYGt776pDcdyVoF+/gmwytMiKHVif DYyNDIaziV3MVuy+u23aOmV0qphWk8xFqu55UeZOgqzw2Zy23WmlKVc3fLgQwO94XK5My5ODTfJIZ sMvfwh3SKZA8GICRcJcQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1whuGS-00000003RRD-3Un8; Thu, 09 Jul 2026 19:18:28 +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 1whuGS-00000003RQn-0e5S for linux-phy@lists.infradead.org; Thu, 09 Jul 2026 19:18:28 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9548E40A5E; Thu, 9 Jul 2026 19:18:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 080291F000E9; Thu, 9 Jul 2026 19:18:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783624707; bh=WsrB3XUH4fJ4nQ7zyDo33pCbgs15xIKA0URJ9X4XOMg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=eATCDbB/EF90iE7Jfoliqb1QuF9pU5J70z+BSgzzDxBBbxkQveCeIkZuY5t9dD60A xWz2teVTqbzjdWHAGrWrMPrFjQC8G1qwcTH3gZKp8ROXgvpGENe/tL6V6335hlWPEl 96gM4UDLM3m8lgGkN6JqYlAP5XGSzKbRdlvad9p1j+vCfKnWi7zAfUhZjp5StjIHak 5p9ac1EX2sLl/gGiyJnlGLP2hoOunruOCsKqDkby5xpVkKsdH4wkkSo6COpU79Wxqx llR/8dSMoZQxrCQMZG/J5F3RMjgzbUKyRNAGXT5OK22CVsvvdnSQMG22zSN9VjD9P3 mTvJ+gBfHxo3w== From: sashiko-bot@kernel.org Subject: Re: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init To: "Sebastian Reichel" Cc: olteanv@gmail.com, neil.armstrong@linaro.org, robh@kernel.org, vkoul@kernel.org, linux-phy@lists.infradead.org, conor+dt@kernel.org, devicetree@vger.kernel.org In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com> References: <20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com> <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com> Date: Thu, 09 Jul 2026 19:18:26 +0000 Message-Id: <20260709191827.080291F000E9@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 IFtIaWdoXSBUaGUgVVNCMyAoVTMpIHBvcnQgaXMgbm90IHJlLWVuYWJsZWQgd2hlbiB0aGUgUEhZ IGR5bmFtaWNhbGx5IHN3aXRjaGVzIGZyb20gRFAtb25seSBtb2RlIHRvIERQK1VTQiBtb2RlLCBi cmVha2luZyBVU0IzIGZ1bmN0aW9uYWxpdHkuCi0gW0hpZ2hdIFBIWSBjbG9jayBhbmQgcG93ZXIg bGVhayBkdWUgdG8gZWFybHkgZXhpdCBkdXJpbmcgcG93ZXIgb2ZmIGJhc2VkIG9uIGN1cnJlbnQg bW9kZSBpbnN0ZWFkIG9mIGFjdGl2ZSBzdGF0dXMuCi0gW0hpZ2hdIFRoZSBEaXNwbGF5UG9ydCBQ SFkgaW5pdCBmdW5jdGlvbiBmYWlscyB0byByZXBsYXkgYSBjYWNoZWQgSFBEIChIb3QgUGx1ZyBE ZXRlY3QpIGV2ZW50IGlmIHRoZSBUeXBlLUMgY2FibGUgd2FzIGNvbm5lY3RlZCBiZWZvcmUgdGhl IERQIGNvbnRyb2xsZXIgcHJvYmVkLgotLQoKLS0tIFBhdGNoIFs3XTogW1BBVENIIHYxMSAwNy8z Nl0gcGh5OiByb2NrY2hpcDogdXNiZHA6IEtlZXAgY2xvY2tzIHJ1bm5pbmcgb24gUEhZIHJlLWlu aXQgLS0tCmNvbW1pdCA3OWJiOTgyMzg3NTA5NjU4NjNiMGIwMmY2NjYwM2I2NzM4NjRmYTkxCkF1 dGhvcjogU2ViYXN0aWFuIFJlaWNoZWwgPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxhYm9yYS5jb20+ CgpwaHk6IHJvY2tjaGlwOiB1c2JkcDogS2VlcCBjbG9ja3MgcnVubmluZyBvbiBQSFkgcmUtaW5p dAoKVGhpcyBjb21taXQgb3B0aW1pemVzIFBIWSByZS1pbml0aWFsaXphdGlvbiBieSBhdm9pZGlu ZyB0aGUgcmVkdW5kYW50IGRpc2FibGUKYW5kIHJlLWVuYWJsZSBvZiBjbG9ja3MuIEluc3RlYWQg b2YgY2FsbGluZyBya191ZHBoeV9kaXNhYmxlKCkgYW5kCnJrX3VkcGh5X3NldHVwKCksIGl0IGRp cmVjdGx5IGNhbGxzIHJrX3VkcGh5X2luaXQoKS4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5 L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5 LXJvY2tjaGlwLXVzYmRwLmMKPiBpbmRleCA2Y2I5ZjZiNGRiZjZkLi5lM2Y1YTI2Yzg3NmE1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5jCj4g KysrIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLXVzYmRwLmMKPiBAQCAtOTg3 LDggKzk4Nyw3IEBAIHN0YXRpYyBpbnQgcmtfdWRwaHlfcG93ZXJfb24oc3RydWN0IHJrX3VkcGh5 ICp1ZHBoeSwgdTggbW9kZSkKPiAgCQlpZiAodWRwaHktPm1vZGUgPT0gVURQSFlfTU9ERV9EUCkK PiAgCQkJcmtfdWRwaHlfdTNfcG9ydF9kaXNhYmxlKHVkcGh5LCB0cnVlKTsKPiAgCj4gLQkJcmtf dWRwaHlfZGlzYWJsZSh1ZHBoeSk7Cj4gLQkJcmV0ID0gcmtfdWRwaHlfc2V0dXAodWRwaHkpOwo+ ICsJCXJldCA9IHJrX3VkcGh5X2luaXQodWRwaHkpOwoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlz bid0IGEgYnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGRvZXMgdGhpcyBsb2dpYyBs ZWF2ZSB0aGUgVVNCMwpwb3J0IGRpc2FibGVkIHdoZW4gZHluYW1pY2FsbHkgc3dpdGNoaW5nIGZy b20gRFAtb25seSBiYWNrIHRvIERQK1VTQiBtb2RlPwoKV2hlbiB0aGUgVHlwZS1DIG11eCB0cmFu c2l0aW9ucyBmcm9tIERQK1VTQiB0byBEUC1vbmx5IG1vZGUsCnJrX3VkcGh5X3Bvd2VyX29uKCkg ZXhlY3V0ZXMgcmtfdWRwaHlfdTNfcG9ydF9kaXNhYmxlKHVkcGh5LCB0cnVlKSBiZWNhdXNlCnVk cGh5LT5tb2RlID09IFVEUEhZX01PREVfRFAuCgpJZiB0aGUgbXV4IGxhdGVyIHN3aXRjaGVzIGJh Y2sgdG8gRFArVVNCIG1vZGUgKHdoZXJlCnVkcGh5LT5tb2RlID09IFVEUEhZX01PREVfRFBfVVNC KSwgcmtfdWRwaHlfcG93ZXJfb24oKSBpcyBjYWxsZWQgYWdhaW4gd2l0aAp1ZHBoeS0+bW9kZV9j aGFuZ2UgPT0gdHJ1ZSwgYnV0IHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcKcmtfdWRwaHlfdTNf cG9ydF9kaXNhYmxlKHVkcGh5LCBmYWxzZSkgY2FsbCBoZXJlIHRvIHJlLWVuYWJsZSB0aGUgVTMg cG9ydC4KCkNvbnNlcXVlbnRseSwgdGhlIFVTQiAzLjAgcG9ydCBhcHBlYXJzIHRvIHJlbWFpbiBk aXNhYmxlZCBpbiB0aGUgR1JGIHJlZ2lzdGVycwp1bnRpbCBhIGZ1bGwgUEhZIHBvd2VyIGN5Y2xl LgoKPiAgCQlpZiAocmV0KQo+ICAJCQlyZXR1cm4gcmV0Owo+ICAJCXVkcGh5LT5tb2RlX2NoYW5n ZSA9IGZhbHNlOwoKVGhlcmUgYXJlIGFsc28gdHdvIG90aGVyIHByZS1leGlzdGluZyBpc3N1ZXMg aW4gdGhpcyBmaWxlIHRoYXQgbWlnaHQgbmVlZAphdHRlbnRpb24uCgpbU2V2ZXJpdHk6IEhpZ2hd ClRoaXMgaXMgYSBwcmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBkb2VzIHJrX3VkcGh5X3VzYjNfcGh5 X2V4aXQoKSBwZXJtYW5lbnRseQpsZWFrIFBIWSBjbG9jayBhbmQgcG93ZXIgcmVzb3VyY2VzIGlm IHRoZSBUeXBlLUMgbW9kZSBjaGFuZ2VzIGJlZm9yZSB0aGUgVVNCCmNvbnRyb2xsZXIgZXhpdHM/ CgpJZiB0aGUgbW9kZSBjaGFuZ2VzIChlLmcuLCBmcm9tIERQK1VTQiB0byBEUC1vbmx5KSBiZWZv cmUgdGhlIFVTQiBjb250cm9sbGVyCmNhbGxzIHBoeV9leGl0LCB0aGUgbW9kZSB3aWxsIGJlIHVw ZGF0ZWQuIFdoZW4gcmtfdWRwaHlfdXNiM19waHlfZXhpdCgpIGlzCnN1YnNlcXVlbnRseSBjYWxs ZWQ6CgpzdGF0aWMgaW50IHJrX3VkcGh5X3VzYjNfcGh5X2V4aXQoc3RydWN0IHBoeSAqcGh5KQp7 CgkuLi4KCS8qIERQIG9ubHkgb3IgaGlnaC1zcGVlZCAqLwoJaWYgKCEodWRwaHktPm1vZGUgJiBV RFBIWV9NT0RFX1VTQikgfHwgdWRwaHktPmhzKQoJCWdvdG8gdW5sb2NrOwoKCXJrX3VkcGh5X3Bv d2VyX29mZih1ZHBoeSwgVURQSFlfTU9ERV9VU0IpOwoJLi4uCn0KClNpbmNlIHVkcGh5LT5tb2Rl IHdhcyBhbHJlYWR5IHVwZGF0ZWQsIHRoaXMgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLApj YXVzaW5nIGFuIGVhcmx5IHJldHVybi4gVGhlIFVEUEhZX01PREVfVVNCIGJpdCBpcyBuZXZlciBj bGVhcmVkIGZyb20KdWRwaHktPnN0YXR1cywgcGVybWFuZW50bHkgc2tpcHBpbmcgcmtfdWRwaHlf ZGlzYWJsZSgpIGFuZCBsZWF2aW5nIGNsb2NrcwpydW5uaW5nIGV2ZW4gd2hlbiBhbGwgZGV2aWNl cyBkZXRhY2guCgpUaGUgc2FtZSBsb2dpYyBmbGF3IGV4aXN0cyBpbiBya191ZHBoeV9wb3dlcl9v ZmYoKToKCnN0YXRpYyB2b2lkIHJrX3VkcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcmtfdWRwaHkgKnVk cGh5LCB1OCBtb2RlKQp7CglpZiAoISh1ZHBoeS0+bW9kZSAmIG1vZGUpKSB7CgkJZGV2X2luZm8o dWRwaHktPmRldiwgIm1vZGUgMHglMDJ4IGlzIG5vdCBzdXBwb3J0XG4iLCBtb2RlKTsKCQlyZXR1 cm47Cgl9CgkuLi4KfQoKQ2hlY2tpbmcgdWRwaHktPm1vZGUgaW5zdGVhZCBvZiB0aGUgYWN0aXZl IHVkcGh5LT5zdGF0dXMgcHJldmVudHMgdGhlIHN0YXR1cwpiaXQgZnJvbSBiZWluZyBjbGVhcmVk LgoKCltTZXZlcml0eTogSGlnaF0KVGhpcyBpcyBhIHByZS1leGlzdGluZyBpc3N1ZSwgYnV0IGRv ZXMgcmtfdWRwaHlfZHBfcGh5X2luaXQoKSBzaWxlbnRseSBtaXNzCnRoZSBpbml0aWFsIGNvbm5l Y3Rpb24gZXZlbnQgaWYgdGhlIFR5cGUtQyBjYWJsZSBpcyBjb25uZWN0ZWQgYmVmb3JlIHRoZQpE aXNwbGF5UG9ydCBjb250cm9sbGVyIGRyaXZlciBwcm9iZXM/CgpXaGVuIGEgY29ubmVjdGlvbiBv Y2N1cnMsIHJrX3VkcGh5X2RwX2hwZF9ldmVudF90cmlnZ2VyKCkgaXMgY2FsbGVkOgoKc3RhdGlj IHZvaWQgcmtfdWRwaHlfZHBfaHBkX2V2ZW50X3RyaWdnZXIoc3RydWN0IHJrX3VkcGh5ICp1ZHBo eSwgYm9vbCBocGQpCnsKCS4uLgoJdWRwaHktPmRwX3NpbmtfaHBkX3NlbCA9IHRydWU7Cgl1ZHBo eS0+ZHBfc2lua19ocGRfY2ZnID0gaHBkOwoKCWlmICghdWRwaHktPmRwX2luX3VzZSkKCQlyZXR1 cm47CgoJcmtfdWRwaHlfZ3JmcmVnX3dyaXRlKHVkcGh5LT52b2dyZiwgJmNmZy0+dm9ncmZjZmdb dWRwaHktPmlkXS5ocGRfdHJpZ2dlciwgaHBkKTsKfQoKSWYgdGhlIERQIGNvbnRyb2xsZXIgaGFz bid0IHByb2JlZCB5ZXQsIHRoZSBldmVudCBpcyBtZXJlbHkgY2FjaGVkIGFuZCBub3QKd3JpdHRl biB0byB0aGUgR1JGIHJlZ2lzdGVyLgoKV2hlbiB0aGUgRFAgY29udHJvbGxlciBsYXRlciBwcm9i ZXMgYW5kIGNhbGxzIHJrX3VkcGh5X2RwX3BoeV9pbml0KCk6CgpzdGF0aWMgaW50IHJrX3VkcGh5 X2RwX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKewoJLi4uCgl1ZHBoeS0+ZHBfaW5fdXNlID0g dHJ1ZTsKCS4uLgoJcmV0dXJuIDA7Cn0KClRoZSBpbml0IGZ1bmN0aW9uIHNldHMgZHBfaW5fdXNl IHRvIHRydWUgYnV0IG5ldmVyIGNoZWNrcyBvciBhcHBsaWVzIHRoZQpjYWNoZWQgSFBEIHN0YXRl IChkcF9zaW5rX2hwZF9zZWwgYW5kIGRwX3NpbmtfaHBkX2NmZyksIGxlYXZpbmcgdGhlIGRpc3Bs YXkKYmxhbmsgdW50aWwgYSBwaHlzaWNhbCByZXBsdWcuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcg wrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNzA5LXJvY2tjaGlwLXVzYmRw LWNsZWFudXAtdjExLTAtYTE0OWFjNjBmNzZjQGNvbGxhYm9yYS5jb20/cGFydD03CgotLSAKbGlu dXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK