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 79B35C54F54 for ; Fri, 31 Jul 2026 09:24:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BB6D710E1C9; Fri, 31 Jul 2026 09:24:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; secure) header.d=sntech.de header.i=@sntech.de header.b="B/JJqca+"; dkim-atps=neutral Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id 57DC110E1C9 for ; Fri, 31 Jul 2026 09:24:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=oFHrJog3XUbgCM9lluuv2EFqo2uk4k0XFykLEC/aems=; b=B/JJqca+bPMKWjUiWl5Ddpdrou /GV08FXx0rPSiUWzPmjNIMqI0Yz+rT5qhA02yhHndBqmS2OD2DhNX0ahpXwavNj+e48+Tv0Gu0y71 MEH4nbUPhcSxHaH8jdJWMPrtTNN2OFIsS9o1gN33KtBkmdPy/a+fJsy+yYUODYWD9AP0zO0/mHM0W pLY1m4cyT75b+EinDrycvjePS+9ujH0A4J8QhevV9UaGdtEdMVp8cWWDMIagU5ZIk32lZ0FmauK+P qLHJatO/RaIwRJoVgGawN2vA34bmRRp1/xn7+1xhIbaqtC60E0hRPMZwIpW+ACoiynPNImVx9KOAY Fv9/JhCA==; From: Heiko =?UTF-8?B?U3TDvGJuZXI=?= To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andy Yan , Damon Ding Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , Marek Szyprowski , Sebastian Reichel , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v1 0/7] Add HPD support for Rockchip Analogix DP Date: Fri, 31 Jul 2026 11:23:43 +0200 Message-ID: <24131962.ssLaC8jLEa@diego> In-Reply-To: References: <20260730032744.381566-1-damon.ding@rock-chips.com> <2014349.VZ3vTMCxA0@diego> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi Damon, Am Freitag, 31. Juli 2026, 05:08:45 Mitteleurop=C3=A4ische Sommerzeit schri= eb Damon Ding: > On 7/31/2026 2:49 AM, Heiko St=C3=BCbner wrote: > > Am Donnerstag, 30. Juli 2026, 05:27:37 Mitteleurop=C3=A4ische Sommerzei= t schrieb Damon Ding: > >> This series improves the HPD (Hotplug Detect) interrupt handling in > >> the Analogix DP driver to enable reliable native HPD pin detection on > >> Rockchip platforms, and introduces platform-specific HPD detection > >> schemes with fine-grained interrupt control. > >=20 > > [...] > >=20 > >> Tested on RK3576 with both native HPD pin and GPIO HPD configurations. > >> > >> Native HPD pin mode: > >> > >> &edp { > >> status =3D "okay"; > >> pinctrl-names =3D "default"; > >> pinctrl-0 =3D <&edp_txm0_pins>; > >> }; > >> > >> GPIO HPD mode: > >> > >> &edp { > >> status =3D "okay"; > >> pinctrl-names =3D "default"; > >> pinctrl-0 =3D <&edp0_hpd>; > >> hpd-gpios =3D <&gpio4 RK_PC1 GPIO_ACTIVE_HIGH>; > >> }; > >> > >> &pinctrl { > >> edp { > >> edp0_hpd: edp0-hpd { > >> rockchip,pins =3D <4 RK_PC1 0 &pcfg_pull_none>; > >> }; > >> }; > >> }; > >=20 > > Yay and thanks a lot for working on that. > >=20 > > If I roll my display-port carrier board back to the analogix-dp being > > the endpoint, this works exactly as expected :-) . > >=20 > > I can plug in the display at some point after the boot and have it > > detected and setup correctly. Same with unplugging it while > > the system is running. The connection status is correctly reported > > in sysfs. > >=20 > >=20 > > Though there is a caveat. When the eDP is not the last part, this does = not > > work anymore. The detect function always returns "connected" if there is > > a next bridge available. > >=20 > > My board [0] has a physical DP connector on it, so models it as > > dp-connector, but in that case the Analogix driver always reports being > > connected. > >=20 > >=20 > > [0] https://lore.kernel.org/linux-rockchip/20251009225050.88192-3-heiko= @sntech.de/ > > ... same effect with hpd-gpios in either the edp node or dp-connector n= ode > >=20 > >=20 >=20 > My previous tests were carried out on the modified RK3576 IOTEST board=20 > DTS based on RK3576 EVB1, which includes dp-connector by default. I also= =20 > did extra verification without dp-connector, and HPD detection works=20 > correctly in both cases. >=20 > I've taken a look at the Tiger board DT configuration. The pinctrl=20 > settings for the eDP HPD GPIO may need adjustment: >=20 > &pinctrl { > edp0 { > edp0_hpd_l: edp0-hpd-l-pin { > rockchip,pins =3D <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>; > }; > }; > }; >=20 > It is recommended to configure GPIO4B5 as pull-down or pll-none. Pull-up= =20 > configuration may prevent GPIO interrupts from being triggered properly,= =20 > resulting in a permanent "connected" status. At least on that DP-carrier the pin direction is different. I.e. it is active-low, meaning 0 for plugged in. In the schematics I do see a hw pull up too - so pull-none in the pinconfig would also be possible, but pull-down is definitly wrong on _this_ board. So we're talking about the same code, I put the dts up on [0] . I'm currently running with a printk diff [1] to showcase the issue. So on boot, with the display unplugged I get: [ 14.757911] ---> drm_bridge_connector_detect: detect [ 14.757914] ---> analogix_dp_bridge_detect a [ 14.757918] ---> drm_bridge_connector_detect: detect [ 14.773779] ---> analogix_dp_bridge_detect a [ 14.838658] rockchip-dp fdec0000.edp: failed to read dpcd caps: -110 [ 14.838662] [drm:analogix_dp_bridge_atomic_enable [analogix_dp]] *ERROR*= dp commit error, ret =3D -110 [ 14.838670] rockchip-dp fdec0000.edp: failed to set bridge, retry: 0 [ 14.884791] rockchip-dp fdec0000.edp: failed to read dpcd caps: -110 [ 14.884793] [drm:analogix_dp_bridge_atomic_enable [analogix_dp]] *ERROR*= dp commit error, ret =3D -110 [ 14.884796] rockchip-dp fdec0000.edp: failed to set bridge, retry: 1 [ 14.930925] rockchip-dp fdec0000.edp: failed to read dpcd caps: -110 [ 14.930927] [drm:analogix_dp_bridge_atomic_enable [analogix_dp]] *ERROR*= dp commit error, ret =3D -110 [ 14.930930] rockchip-dp fdec0000.edp: failed to set bridge, retry: 2 [ 14.977032] rockchip-dp fdec0000.edp: failed to read dpcd caps: -110 [ 14.977034] [drm:analogix_dp_bridge_atomic_enable [analogix_dp]] *ERROR*= dp commit error, ret =3D -110 [ 14.977037] rockchip-dp fdec0000.edp: failed to set bridge, retry: 3 [ 15.023150] rockchip-dp fdec0000.edp: failed to read dpcd caps: -110 [ 15.023152] [drm:analogix_dp_bridge_atomic_enable [analogix_dp]] *ERROR*= dp commit error, ret =3D -110 [ 15.023155] rockchip-dp fdec0000.edp: failed to set bridge, retry: 4 [ 15.023168] rockchip-dp fdec0000.edp: too many times retry set bridge, g= ive it up [ 15.052485] Console: switching to colour frame buffer device 80x30 [ 15.210457] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb fra= me buffer device [ 15.223444] ---> drm_bridge_connector_detect: detect [ 15.231974] ---> analogix_dp_bridge_detect a [ 15.239587] ---> drm_bridge_connector_detect: detect [ 15.245341] ---> analogix_dp_bridge_detect a So analogix_dp_bridge_detect() is called and always returns connected. Plugging in the the display, I get: [ 290.592096] ---> display_connector_detect gpio value is 1 {display-con= nector returning connected} [ 290.598648] ---> drm_bridge_connector_detect: detect [ 290.604637] ---> analogix_dp_bridge_detect a [ 290.609826] ---> drm_bridge_connector_detect: detect [ 290.615784] ---> analogix_dp_bridge_detect a Unplugging the display, I get: [ 302.081444] ---> display_connector_detect gpio value is 0 {display-con= nector returning disconnected} [ 302.087996] ---> drm_bridge_connector_detect: detect [ 302.093945] ---> analogix_dp_bridge_detect a [ 302.099131] ---> drm_bridge_connector_detect: detect [ 302.105090] ---> analogix_dp_bridge_detect a [ 302.144834] ---> drm_bridge_connector_detect: detect [ 302.150784] ---> analogix_dp_bridge_detect a [ 302.155933] ---> drm_bridge_connector_detect: detect [ 302.161859] ---> analogix_dp_bridge_detect a So it looks like on the gpio-side the detection is correct and/but analogix_dp_bridge_detect() is always returning a connected state ("b" output is never reached). I'm still working on understanding how the whole detection logic works in drm ;-) . Heiko [0] https://github.com/mmind/linux-rockchip/blob/dev/v7.3/rk3588-tiger-dp-c= arrier-v5/arch/arm64/boot/dts/rockchip/rk3588-tiger-displayport-carrier.dts [1] diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 7a89548a7a885..0accdf62637ae 100644 =2D-- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -915,8 +915,10 @@ analogix_dp_bridge_detect(struct drm_bridge *bridge, s= truct drm_connector *conne struct analogix_dp_device *dp =3D to_dp(bridge); enum drm_connector_status status =3D connector_status_disconnected; =20 +printk("---> %s a\n", __func__); if (dp->plat_data->next_bridge) return connector_status_connected; +printk("---> %s b\n", __func__); =20 if (!analogix_dp_detect_hpd(dp)) status =3D connector_status_connected; diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/b= ridge/display-connector.c index 16c0631adeb18..b0c07694b82e3 100644 =2D-- a/drivers/gpu/drm/bridge/display-connector.c +++ b/drivers/gpu/drm/bridge/display-connector.c @@ -45,6 +45,7 @@ static enum drm_connector_status display_connector_detect= (struct drm_bridge *bri struct display_connector *conn =3D to_display_connector(bridge); =20 if (conn->hpd_gpio) { +printk("---> %s gpio value is %d\n", __func__, gpiod_get_value_cansleep(co= nn->hpd_gpio)); if (gpiod_get_value_cansleep(conn->hpd_gpio)) return connector_status_connected; else @@ -84,6 +85,7 @@ static enum drm_connector_status display_connector_detect= (struct drm_bridge *bri static enum drm_connector_status display_connector_bridge_detect(struct drm_bridge *bridge, struct drm_conn= ector *connector) { +printk("---> %s\n", __func__); return display_connector_detect(bridge); } =20 diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 649969fca1413..8816d837c9a77 100644 =2D-- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -218,6 +218,7 @@ drm_bridge_connector_detect(struct drm_connector *conne= ctor, bool force) enum drm_connector_status status; =20 if (detect) { +printk("---> %s: detect\n", __func__); status =3D detect->funcs->detect(detect, connector); =20 if (hdmi) 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 12332C55167 for ; Fri, 31 Jul 2026 09:24:25 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tziGDubTQvuMlp7Ph43jpS9n/H7UEP5w0lG5F/i8OgE=; b=k90pIbnuibHXgw /R7D5wJRcM8OUbEPcHkW82Fm406L60mejURtSc7Lf6myq6+/yeDW2LYXpZxl8WH/OufwcEkSfhsTg HbtmBtjhcr4/9rVsrca1hy4fBwt7OME0z0qPr941NbTnPtAWPjDUXWew7EgoJrzTmbP7R7nm0x6L4 26Iq+QTaXnLDco2yyv/jErL2mRQXV037+mpln9uMLmGW4W850eTPUJEPXKX77Rnps+EIHmvru0Klu HTggeQc7p0k2DwWwPgwErcUVAl1GjhPsL7BvvVuq43SEtDtKeuumLn+TvHiBOtab8RhibV0Qj2L/k qiH+x6+X0Gu0PvXj+2ew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpjTa-0000000CBHl-0iY7; Fri, 31 Jul 2026 09:24:22 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpjTX-0000000CBGk-12a0; Fri, 31 Jul 2026 09:24:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=oFHrJog3XUbgCM9lluuv2EFqo2uk4k0XFykLEC/aems=; b=B/JJqca+bPMKWjUiWl5Ddpdrou /GV08FXx0rPSiUWzPmjNIMqI0Yz+rT5qhA02yhHndBqmS2OD2DhNX0ahpXwavNj+e48+Tv0Gu0y71 MEH4nbUPhcSxHaH8jdJWMPrtTNN2OFIsS9o1gN33KtBkmdPy/a+fJsy+yYUODYWD9AP0zO0/mHM0W pLY1m4cyT75b+EinDrycvjePS+9ujH0A4J8QhevV9UaGdtEdMVp8cWWDMIagU5ZIk32lZ0FmauK+P qLHJatO/RaIwRJoVgGawN2vA34bmRRp1/xn7+1xhIbaqtC60E0hRPMZwIpW+ACoiynPNImVx9KOAY Fv9/JhCA==; From: Heiko =?UTF-8?B?U3TDvGJuZXI=?= To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andy Yan , Damon Ding Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , Marek Szyprowski , Sebastian Reichel , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v1 0/7] Add HPD support for Rockchip Analogix DP Date: Fri, 31 Jul 2026 11:23:43 +0200 Message-ID: <24131962.ssLaC8jLEa@diego> In-Reply-To: References: <20260730032744.381566-1-damon.ding@rock-chips.com> <2014349.VZ3vTMCxA0@diego> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260731_022419_500781_DB6F04E3 X-CRM114-Status: GOOD ( 34.72 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgRGFtb24sCgpBbSBGcmVpdGFnLCAzMS4gSnVsaSAyMDI2LCAwNTowODo0NSBNaXR0ZWxldXJv cMOkaXNjaGUgU29tbWVyemVpdCBzY2hyaWViIERhbW9uIERpbmc6Cj4gT24gNy8zMS8yMDI2IDI6 NDkgQU0sIEhlaWtvIFN0w7xibmVyIHdyb3RlOgo+ID4gQW0gRG9ubmVyc3RhZywgMzAuIEp1bGkg MjAyNiwgMDU6Mjc6MzcgTWl0dGVsZXVyb3DDpGlzY2hlIFNvbW1lcnplaXQgc2NocmllYiBEYW1v biBEaW5nOgo+ID4+IFRoaXMgc2VyaWVzIGltcHJvdmVzIHRoZSBIUEQgKEhvdHBsdWcgRGV0ZWN0 KSBpbnRlcnJ1cHQgaGFuZGxpbmcgaW4KPiA+PiB0aGUgQW5hbG9naXggRFAgZHJpdmVyIHRvIGVu YWJsZSByZWxpYWJsZSBuYXRpdmUgSFBEIHBpbiBkZXRlY3Rpb24gb24KPiA+PiBSb2NrY2hpcCBw bGF0Zm9ybXMsIGFuZCBpbnRyb2R1Y2VzIHBsYXRmb3JtLXNwZWNpZmljIEhQRCBkZXRlY3Rpb24K PiA+PiBzY2hlbWVzIHdpdGggZmluZS1ncmFpbmVkIGludGVycnVwdCBjb250cm9sLgo+ID4gCj4g PiBbLi4uXQo+ID4gCj4gPj4gVGVzdGVkIG9uIFJLMzU3NiB3aXRoIGJvdGggbmF0aXZlIEhQRCBw aW4gYW5kIEdQSU8gSFBEIGNvbmZpZ3VyYXRpb25zLgo+ID4+Cj4gPj4gTmF0aXZlIEhQRCBwaW4g bW9kZToKPiA+Pgo+ID4+ICAgICZlZHAgewo+ID4+ICAgICAgICBzdGF0dXMgPSAib2theSI7Cj4g Pj4gICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Cj4gPj4gICAgICAgIHBpbmN0cmwt MCA9IDwmZWRwX3R4bTBfcGlucz47Cj4gPj4gICAgfTsKPiA+Pgo+ID4+IEdQSU8gSFBEIG1vZGU6 Cj4gPj4KPiA+PiAgICAmZWRwIHsKPiA+PiAgICAgICAgc3RhdHVzID0gIm9rYXkiOwo+ID4+ICAg ICAgICBwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwo+ID4+ICAgICAgICBwaW5jdHJsLTAgPSA8 JmVkcDBfaHBkPjsKPiA+PiAgICAgICAgaHBkLWdwaW9zID0gPCZncGlvNCBSS19QQzEgR1BJT19B Q1RJVkVfSElHSD47Cj4gPj4gICAgfTsKPiA+Pgo+ID4+ICAgICZwaW5jdHJsIHsKPiA+PiAgICAg ICAgZWRwIHsKPiA+PiAgICAgICAgICAgIGVkcDBfaHBkOiBlZHAwLWhwZCB7Cj4gPj4gICAgICAg ICAgICAgICAgcm9ja2NoaXAscGlucyA9IDw0IFJLX1BDMSAwICZwY2ZnX3B1bGxfbm9uZT47Cj4g Pj4gICAgICAgICAgICB9Owo+ID4+ICAgICAgICB9Owo+ID4+ICAgIH07Cj4gPiAKPiA+IFlheSBh bmQgdGhhbmtzIGEgbG90IGZvciB3b3JraW5nIG9uIHRoYXQuCj4gPiAKPiA+IElmIEkgcm9sbCBt eSBkaXNwbGF5LXBvcnQgY2FycmllciBib2FyZCBiYWNrIHRvIHRoZSBhbmFsb2dpeC1kcCBiZWlu Zwo+ID4gdGhlIGVuZHBvaW50LCB0aGlzIHdvcmtzIGV4YWN0bHkgYXMgZXhwZWN0ZWQgOi0pIC4K PiA+IAo+ID4gSSBjYW4gcGx1ZyBpbiB0aGUgZGlzcGxheSBhdCBzb21lIHBvaW50IGFmdGVyIHRo ZSBib290IGFuZCBoYXZlIGl0Cj4gPiBkZXRlY3RlZCBhbmQgc2V0dXAgY29ycmVjdGx5LiBTYW1l IHdpdGggdW5wbHVnZ2luZyBpdCB3aGlsZQo+ID4gdGhlIHN5c3RlbSBpcyBydW5uaW5nLiBUaGUg Y29ubmVjdGlvbiBzdGF0dXMgaXMgY29ycmVjdGx5IHJlcG9ydGVkCj4gPiBpbiBzeXNmcy4KPiA+ IAo+ID4gCj4gPiBUaG91Z2ggdGhlcmUgaXMgYSBjYXZlYXQuIFdoZW4gdGhlIGVEUCBpcyBub3Qg dGhlIGxhc3QgcGFydCwgdGhpcyBkb2VzIG5vdAo+ID4gd29yayBhbnltb3JlLiBUaGUgZGV0ZWN0 IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zICJjb25uZWN0ZWQiIGlmIHRoZXJlIGlzCj4gPiBhIG5l eHQgYnJpZGdlIGF2YWlsYWJsZS4KPiA+IAo+ID4gTXkgYm9hcmQgWzBdIGhhcyBhIHBoeXNpY2Fs IERQIGNvbm5lY3RvciBvbiBpdCwgc28gbW9kZWxzIGl0IGFzCj4gPiBkcC1jb25uZWN0b3IsIGJ1 dCBpbiB0aGF0IGNhc2UgdGhlIEFuYWxvZ2l4IGRyaXZlciBhbHdheXMgcmVwb3J0cyBiZWluZwo+ ID4gY29ubmVjdGVkLgo+ID4gCj4gPiAKPiA+IFswXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9s aW51eC1yb2NrY2hpcC8yMDI1MTAwOTIyNTA1MC44ODE5Mi0zLWhlaWtvQHNudGVjaC5kZS8KPiA+ IC4uLiBzYW1lIGVmZmVjdCB3aXRoIGhwZC1ncGlvcyBpbiBlaXRoZXIgdGhlIGVkcCBub2RlIG9y IGRwLWNvbm5lY3RvciBub2RlCj4gPiAKPiA+IAo+IAo+IE15IHByZXZpb3VzIHRlc3RzIHdlcmUg Y2FycmllZCBvdXQgb24gdGhlIG1vZGlmaWVkIFJLMzU3NiBJT1RFU1QgYm9hcmQgCj4gRFRTIGJh c2VkIG9uIFJLMzU3NiBFVkIxLCB3aGljaCBpbmNsdWRlcyBkcC1jb25uZWN0b3IgYnkgZGVmYXVs dC4gSSBhbHNvIAo+IGRpZCBleHRyYSB2ZXJpZmljYXRpb24gd2l0aG91dCBkcC1jb25uZWN0b3Is IGFuZCBIUEQgZGV0ZWN0aW9uIHdvcmtzIAo+IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLgo+IAo+ IEkndmUgdGFrZW4gYSBsb29rIGF0IHRoZSBUaWdlciBib2FyZCBEVCBjb25maWd1cmF0aW9uLiBU aGUgcGluY3RybCAKPiBzZXR0aW5ncyBmb3IgdGhlIGVEUCBIUEQgR1BJTyBtYXkgbmVlZCBhZGp1 c3RtZW50Ogo+IAo+ICZwaW5jdHJsIHsKPiAJZWRwMCB7Cj4gCQllZHAwX2hwZF9sOiBlZHAwLWhw ZC1sLXBpbiB7Cj4gCQkJcm9ja2NoaXAscGlucyA9IDw0IFJLX1BCNSBSS19GVU5DX0dQSU8gJnBj ZmdfcHVsbF9kb3duPjsKPiAJCX07Cj4gCX07Cj4gfTsKPiAKPiBJdCBpcyByZWNvbW1lbmRlZCB0 byBjb25maWd1cmUgR1BJTzRCNSBhcyBwdWxsLWRvd24gb3IgcGxsLW5vbmUuIFB1bGwtdXAgCj4g Y29uZmlndXJhdGlvbiBtYXkgcHJldmVudCBHUElPIGludGVycnVwdHMgZnJvbSBiZWluZyB0cmln Z2VyZWQgcHJvcGVybHksIAo+IHJlc3VsdGluZyBpbiBhIHBlcm1hbmVudCAiY29ubmVjdGVkIiBz dGF0dXMuCgpBdCBsZWFzdCBvbiB0aGF0IERQLWNhcnJpZXIgdGhlIHBpbiBkaXJlY3Rpb24gaXMg ZGlmZmVyZW50LgpJLmUuIGl0IGlzIGFjdGl2ZS1sb3csIG1lYW5pbmcgMCBmb3IgcGx1Z2dlZCBp bi4KCkluIHRoZSBzY2hlbWF0aWNzIEkgZG8gc2VlIGEgaHcgcHVsbCB1cCB0b28gLSBzbyBwdWxs LW5vbmUgaW4gdGhlIHBpbmNvbmZpZwp3b3VsZCBhbHNvIGJlIHBvc3NpYmxlLCBidXQgcHVsbC1k b3duIGlzIGRlZmluaXRseSB3cm9uZyBvbiBfdGhpc18gYm9hcmQuCgpTbyB3ZSdyZSB0YWxraW5n IGFib3V0IHRoZSBzYW1lIGNvZGUsIEkgcHV0IHRoZSBkdHMgdXAgb24gWzBdIC4KCkknbSBjdXJy ZW50bHkgcnVubmluZyB3aXRoIGEgcHJpbnRrIGRpZmYgWzFdIHRvIHNob3djYXNlIHRoZSBpc3N1 ZS4KClNvIG9uIGJvb3QsIHdpdGggdGhlIGRpc3BsYXkgdW5wbHVnZ2VkIEkgZ2V0OgpbICAgMTQu NzU3OTExXSAtLS0+IGRybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdDogZGV0ZWN0ClsgICAxNC43 NTc5MTRdIC0tLT4gYW5hbG9naXhfZHBfYnJpZGdlX2RldGVjdCBhClsgICAxNC43NTc5MThdIC0t LT4gZHJtX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0OiBkZXRlY3QKWyAgIDE0Ljc3Mzc3OV0gLS0t PiBhbmFsb2dpeF9kcF9icmlkZ2VfZGV0ZWN0IGEKWyAgIDE0LjgzODY1OF0gcm9ja2NoaXAtZHAg ZmRlYzAwMDAuZWRwOiBmYWlsZWQgdG8gcmVhZCBkcGNkIGNhcHM6IC0xMTAKWyAgIDE0LjgzODY2 Ml0gW2RybTphbmFsb2dpeF9kcF9icmlkZ2VfYXRvbWljX2VuYWJsZSBbYW5hbG9naXhfZHBdXSAq RVJST1IqIGRwIGNvbW1pdCBlcnJvciwgcmV0ID0gLTExMApbICAgMTQuODM4NjcwXSByb2NrY2hp cC1kcCBmZGVjMDAwMC5lZHA6IGZhaWxlZCB0byBzZXQgYnJpZGdlLCByZXRyeTogMApbICAgMTQu ODg0NzkxXSByb2NrY2hpcC1kcCBmZGVjMDAwMC5lZHA6IGZhaWxlZCB0byByZWFkIGRwY2QgY2Fw czogLTExMApbICAgMTQuODg0NzkzXSBbZHJtOmFuYWxvZ2l4X2RwX2JyaWRnZV9hdG9taWNfZW5h YmxlIFthbmFsb2dpeF9kcF1dICpFUlJPUiogZHAgY29tbWl0IGVycm9yLCByZXQgPSAtMTEwClsg ICAxNC44ODQ3OTZdIHJvY2tjaGlwLWRwIGZkZWMwMDAwLmVkcDogZmFpbGVkIHRvIHNldCBicmlk Z2UsIHJldHJ5OiAxClsgICAxNC45MzA5MjVdIHJvY2tjaGlwLWRwIGZkZWMwMDAwLmVkcDogZmFp bGVkIHRvIHJlYWQgZHBjZCBjYXBzOiAtMTEwClsgICAxNC45MzA5MjddIFtkcm06YW5hbG9naXhf ZHBfYnJpZGdlX2F0b21pY19lbmFibGUgW2FuYWxvZ2l4X2RwXV0gKkVSUk9SKiBkcCBjb21taXQg ZXJyb3IsIHJldCA9IC0xMTAKWyAgIDE0LjkzMDkzMF0gcm9ja2NoaXAtZHAgZmRlYzAwMDAuZWRw OiBmYWlsZWQgdG8gc2V0IGJyaWRnZSwgcmV0cnk6IDIKWyAgIDE0Ljk3NzAzMl0gcm9ja2NoaXAt ZHAgZmRlYzAwMDAuZWRwOiBmYWlsZWQgdG8gcmVhZCBkcGNkIGNhcHM6IC0xMTAKWyAgIDE0Ljk3 NzAzNF0gW2RybTphbmFsb2dpeF9kcF9icmlkZ2VfYXRvbWljX2VuYWJsZSBbYW5hbG9naXhfZHBd XSAqRVJST1IqIGRwIGNvbW1pdCBlcnJvciwgcmV0ID0gLTExMApbICAgMTQuOTc3MDM3XSByb2Nr Y2hpcC1kcCBmZGVjMDAwMC5lZHA6IGZhaWxlZCB0byBzZXQgYnJpZGdlLCByZXRyeTogMwpbICAg MTUuMDIzMTUwXSByb2NrY2hpcC1kcCBmZGVjMDAwMC5lZHA6IGZhaWxlZCB0byByZWFkIGRwY2Qg Y2FwczogLTExMApbICAgMTUuMDIzMTUyXSBbZHJtOmFuYWxvZ2l4X2RwX2JyaWRnZV9hdG9taWNf ZW5hYmxlIFthbmFsb2dpeF9kcF1dICpFUlJPUiogZHAgY29tbWl0IGVycm9yLCByZXQgPSAtMTEw ClsgICAxNS4wMjMxNTVdIHJvY2tjaGlwLWRwIGZkZWMwMDAwLmVkcDogZmFpbGVkIHRvIHNldCBi cmlkZ2UsIHJldHJ5OiA0ClsgICAxNS4wMjMxNjhdIHJvY2tjaGlwLWRwIGZkZWMwMDAwLmVkcDog dG9vIG1hbnkgdGltZXMgcmV0cnkgc2V0IGJyaWRnZSwgZ2l2ZSBpdCB1cApbICAgMTUuMDUyNDg1 XSBDb25zb2xlOiBzd2l0Y2hpbmcgdG8gY29sb3VyIGZyYW1lIGJ1ZmZlciBkZXZpY2UgODB4MzAK WyAgIDE1LjIxMDQ1N10gcm9ja2NoaXAtZHJtIGRpc3BsYXktc3Vic3lzdGVtOiBbZHJtXSBmYjA6 IHJvY2tjaGlwZHJtZmIgZnJhbWUgYnVmZmVyIGRldmljZQpbICAgMTUuMjIzNDQ0XSAtLS0+IGRy bV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdDogZGV0ZWN0ClsgICAxNS4yMzE5NzRdIC0tLT4gYW5h bG9naXhfZHBfYnJpZGdlX2RldGVjdCBhClsgICAxNS4yMzk1ODddIC0tLT4gZHJtX2JyaWRnZV9j b25uZWN0b3JfZGV0ZWN0OiBkZXRlY3QKWyAgIDE1LjI0NTM0MV0gLS0tPiBhbmFsb2dpeF9kcF9i cmlkZ2VfZGV0ZWN0IGEKClNvIGFuYWxvZ2l4X2RwX2JyaWRnZV9kZXRlY3QoKSBpcyBjYWxsZWQg YW5kIGFsd2F5cyByZXR1cm5zIGNvbm5lY3RlZC4KClBsdWdnaW5nIGluIHRoZSB0aGUgZGlzcGxh eSwgSSBnZXQ6ClsgIDI5MC41OTIwOTZdIC0tLT4gZGlzcGxheV9jb25uZWN0b3JfZGV0ZWN0IGdw aW8gdmFsdWUgaXMgMSAgIHtkaXNwbGF5LWNvbm5lY3RvciByZXR1cm5pbmcgY29ubmVjdGVkfQpb ICAyOTAuNTk4NjQ4XSAtLS0+IGRybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdDogZGV0ZWN0Clsg IDI5MC42MDQ2MzddIC0tLT4gYW5hbG9naXhfZHBfYnJpZGdlX2RldGVjdCBhClsgIDI5MC42MDk4 MjZdIC0tLT4gZHJtX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0OiBkZXRlY3QKWyAgMjkwLjYxNTc4 NF0gLS0tPiBhbmFsb2dpeF9kcF9icmlkZ2VfZGV0ZWN0IGEKClVucGx1Z2dpbmcgdGhlIGRpc3Bs YXksIEkgZ2V0OgpbICAzMDIuMDgxNDQ0XSAtLS0+IGRpc3BsYXlfY29ubmVjdG9yX2RldGVjdCBn cGlvIHZhbHVlIGlzIDAgICB7ZGlzcGxheS1jb25uZWN0b3IgcmV0dXJuaW5nIGRpc2Nvbm5lY3Rl ZH0KWyAgMzAyLjA4Nzk5Nl0gLS0tPiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Q6IGRldGVj dApbICAzMDIuMDkzOTQ1XSAtLS0+IGFuYWxvZ2l4X2RwX2JyaWRnZV9kZXRlY3QgYQpbICAzMDIu MDk5MTMxXSAtLS0+IGRybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdDogZGV0ZWN0ClsgIDMwMi4x MDUwOTBdIC0tLT4gYW5hbG9naXhfZHBfYnJpZGdlX2RldGVjdCBhClsgIDMwMi4xNDQ4MzRdIC0t LT4gZHJtX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0OiBkZXRlY3QKWyAgMzAyLjE1MDc4NF0gLS0t PiBhbmFsb2dpeF9kcF9icmlkZ2VfZGV0ZWN0IGEKWyAgMzAyLjE1NTkzM10gLS0tPiBkcm1fYnJp ZGdlX2Nvbm5lY3Rvcl9kZXRlY3Q6IGRldGVjdApbICAzMDIuMTYxODU5XSAtLS0+IGFuYWxvZ2l4 X2RwX2JyaWRnZV9kZXRlY3QgYQoKClNvIGl0IGxvb2tzIGxpa2Ugb24gdGhlIGdwaW8tc2lkZSB0 aGUgZGV0ZWN0aW9uIGlzIGNvcnJlY3QgYW5kL2J1dAphbmFsb2dpeF9kcF9icmlkZ2VfZGV0ZWN0 KCkgaXMgYWx3YXlzIHJldHVybmluZyBhIGNvbm5lY3RlZCBzdGF0ZQooImIiIG91dHB1dCBpcyBu ZXZlciByZWFjaGVkKS4KCkknbSBzdGlsbCB3b3JraW5nIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRo ZSB3aG9sZSBkZXRlY3Rpb24gbG9naWMgd29ya3MKaW4gZHJtIDstKSAuCgoKSGVpa28KCgpbMF0g aHR0cHM6Ly9naXRodWIuY29tL21taW5kL2xpbnV4LXJvY2tjaGlwL2Jsb2IvZGV2L3Y3LjMvcmsz NTg4LXRpZ2VyLWRwLWNhcnJpZXItdjUvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1 ODgtdGlnZXItZGlzcGxheXBvcnQtY2Fycmllci5kdHMKWzFdCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jCmluZGV4IDdhODk1NDhhN2E4 ODUuLjBhY2NkZjYyNjM3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5h bG9naXgvYW5hbG9naXhfZHBfY29yZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5h bG9naXgvYW5hbG9naXhfZHBfY29yZS5jCkBAIC05MTUsOCArOTE1LDEwIEBAIGFuYWxvZ2l4X2Rw X2JyaWRnZV9kZXRlY3Qoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwgc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lCiAgICAgICAgc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAgPSB0b19k cChicmlkZ2UpOwogICAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKK3ByaW50aygiLS0tPiAlcyBhXG4iLCBfX2Z1 bmNfXyk7CiAgICAgICAgaWYgKGRwLT5wbGF0X2RhdGEtPm5leHRfYnJpZGdlKQogICAgICAgICAg ICAgICAgcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworcHJpbnRrKCItLS0+ICVz IGJcbiIsIF9fZnVuY19fKTsKIAogICAgICAgIGlmICghYW5hbG9naXhfZHBfZGV0ZWN0X2hwZChk cCkpCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZGlzcGxheS1jb25uZWN0b3IuYyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZGlzcGxheS1jb25uZWN0b3IuYwppbmRleCAxNmMwNjMx YWRlYjE4Li5iMGMwNzY5NGI4MmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2Rpc3BsYXktY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kaXNwbGF5 LWNvbm5lY3Rvci5jCkBAIC00NSw2ICs0NSw3IEBAIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIGRpc3BsYXlfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpCiAg ICAgICAgc3RydWN0IGRpc3BsYXlfY29ubmVjdG9yICpjb25uID0gdG9fZGlzcGxheV9jb25uZWN0 b3IoYnJpZGdlKTsKIAogICAgICAgIGlmIChjb25uLT5ocGRfZ3BpbykgeworcHJpbnRrKCItLS0+ ICVzIGdwaW8gdmFsdWUgaXMgJWRcbiIsIF9fZnVuY19fLCBncGlvZF9nZXRfdmFsdWVfY2Fuc2xl ZXAoY29ubi0+aHBkX2dwaW8pKTsKICAgICAgICAgICAgICAgIGlmIChncGlvZF9nZXRfdmFsdWVf Y2Fuc2xlZXAoY29ubi0+aHBkX2dwaW8pKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAgICAgICAgICAgICAgICBlbHNlCkBAIC04NCw2 ICs4NSw3IEBAIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGRpc3BsYXlfY29ubmVj dG9yX2RldGVjdChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpCiBzdGF0aWMgZW51bSBkcm1fY29ubmVj dG9yX3N0YXR1cwogZGlzcGxheV9jb25uZWN0b3JfYnJpZGdlX2RldGVjdChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogeworcHJpbnRr KCItLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CiAgICAgICAgcmV0dXJuIGRpc3BsYXlfY29ubmVjdG9y X2RldGVjdChicmlkZ2UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxh eS9kcm1fYnJpZGdlX2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2Jy aWRnZV9jb25uZWN0b3IuYwppbmRleCA2NDk5NjlmY2ExNDEzLi44ODE2ZDgzN2M5YTc3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fYnJpZGdlX2Nvbm5lY3Rvci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9icmlkZ2VfY29ubmVjdG9yLmMKQEAgLTIx OCw2ICsyMTgsNyBAQCBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKICAgICAgICBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIHN0YXR1czsKIAogICAgICAgIGlmIChkZXRlY3QpIHsKK3ByaW50aygiLS0tPiAlczog ZGV0ZWN0XG4iLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSBkZXRlY3QtPmZ1 bmNzLT5kZXRlY3QoZGV0ZWN0LCBjb25uZWN0b3IpOwogCiAgICAgICAgICAgICAgICBpZiAoaGRt aSkKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxp bnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9j a2NoaXAK