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 C696EC98318 for ; Fri, 25 Sep 2026 02:04: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:Cc:To:From:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yooB+gFDw27RtdiSguf5XYLYdCcIPBCdYvRXynjI1IQ=; b=Gv34CebD+o5+x+ CAUEz5ZLrFXxNlvkQOO7mALHbyoYT1UF44pGf5CC/Ks/pgW+DmwL+ezfot0OOGktU93+dhq6T4Xxb WzZlsWuYiNnF06RrNlsV+eFLXEn3nx+zuu5t+KrWzmmvbAvZmo2uFIBkq0ifH4H/VoIyHBXO0dNQI /duApPVAch1MnI+Z9Cb6qa4w80LfcIizw7h28W4Q2+ZW9OTzY9xygb8gLD3d4pFmzRRs3JjCxyoDV tG1sYK58yHXkaEGmVkMd/AzL+nZE0Vxa9tBSexx2ib1vCOmXiHA+MzxI4gqmUnFWghBkdl/5OXKOt na4+ByOowEvYwn/EnXNw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vIX-0000000CW6J-1nU8; Fri, 25 Sep 2026 02:04:25 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vHu-0000000CVmC-37V0; Fri, 25 Sep 2026 02:03:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 233756022F; Fri, 25 Sep 2026 02:03:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 525B41F000FF; Fri, 25 Sep 2026 02:03:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790301825; bh=1tnkY2s2DVVGP0iyZfDIANfzMWWEVKjrYMrG/4nzmSI=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=iNwRdyxillxQFirsyCtD7IeNn3aKwEyrLa/8xQkOE1FR53L3zpRhrjb3YU84g71Kk O+BlUBStNYsiPw4YVVAqX5K8+TPQ5Vd7c7rag+GKjlCY8nXrhIBlkq0MiyeQROUshv YwNcIsGBMKsfMEOqgvN/h/C5d/9BJ9Ximm2efgOU2J3nd7SCumKjV0WthKszIRJljv vSvFBOZ/gLgeLYFYpvoaRILt6Z3iqoi9iNG8U8rZbOXCVpg3WqmNxM1tUCz8Hw9WbW cEW/oJNZ07w9ZZwo2WYUZC27bqJdpeiO33IlUNF/olv9DN0jjEKxi57UVOXTYx1bF/ ZjFWpE6EI1dEg== Subject: Re: [PATCH net-next v10 07/11] net: pcs: xpcs: add Rockchip RK3568 platform glue driver From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, vkoul@kernel.org, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, prabhakar.mahadev-lad.rj@bp.renesas.com, romain.gantois@bootlin.com, hkallweit1@gmail.com, neil.armstrong@linaro.org, linux@armlinux.org.uk, shawn.lin@rock-chips.com, david@ixit.cz, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-renesas-soc@vger.kernel.org Date: Fri, 25 Sep 2026 02:03:43 +0000 Message-ID: <179030182389.2160803.3666914180615619528@kernel.org> In-Reply-To: <20260922200336.2201212-8-coiaprant@gmail.com> References: <20260922200336.2201212-8-coiaprant@gmail.com> X-sashiko-severity: High MIME-Version: 1.0 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: , 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 NiBwb3RlbnRpYWwKaXNzdWUocykgdG8gY29uc2lkZXIuCgpDcml0aWNhbDogMCDCtyBIaWdoOiAx IMK3IE1lZGl1bTogMyDCtyBMb3c6IDIKCklmIHlvdSBiZWxpZXZlIG5vbmUgb2YgdGhlIGlzc3Vl cyBhcmUgbGVnaXRpbWF0ZSwgcGxlYXNlIHJlcGx5IHRvIGVhY2gKaXNzdWUgb2YgTWVkaXVtIHNl dmVyaXR5IG9yIGhpZ2hlciBhbmQgZXhwbGFpbiB3aHkgdGhlIEFJIGlzIHdyb25nLgpJZiBhbnkg b2YgdGhlbSBhcmUgbGVnaXRpbWF0ZSBhbmQgeW91IHBsYW4gdG8gcmVzcGluLCBwbGVhc2UgbGV0 IHBhdGNod29yawprbm93IGJ5IGluY2x1ZGluZyAicHctYm90OiBjciIgYXMgYSBzZXBhcmF0ZSBs aW5lIGF0IHRoZSBlbmQgb2YgeW91ciByZXBseQoob25lIHN1Y2ggcmVwbHkgcGVyIHNlcmllcyBp cyBlbm91Z2gpLgoKLSBbSGlnaF0gSW4gZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMsIHhw Y3Nfcmtfc3lzdGVtX3N1c3BlbmQoKQogIHJlbGllcyBzb2xlbHkgb24gZGV2aWNlX3NldF93YWtl dXBfcGF0aCgpIHRvIGtlZXAgdGhlIFBEX1BJUEUgcG93ZXLigKYKLSBbTWVkaXVtXSB4cGNzX3Jr X21kaW9fd3JpdGVfcmVtYXBwaW5nKCkgKGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy0KICByay5j OjEzNy0xNTApIGZvcmNlcyB3cml0ZXMgb2YgRFdfVlJfTUlJX0FOX0NUUkws4oCmCi0gW01lZGl1 bV0geHBjc19ya19jcmVhdGUoKSAoZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM6NTM3LTU0 NikKICBkZXJlZmVyZW5jZXMgdGhlIHN0cnVjdCBkZXZpY2VfbGluayAqIHJldHVybmVkIGJ5IGRl dmljZV9saW5rX2FkZCgp4oCmCi0gW01lZGl1bV0gQ29uY2VybjogeHBjc19ya19jcmVhdGUoKSB2 YWxpZGF0ZXMgdGhlIHN1cHBsaWVyIHdpdGggYW4KICB1bmxvY2tlZCByZWFkIG9mIHRoZSBkcml2 ZXItY29yZS1pbnRlcm5hbCBmaWVsZOKApgotIFtMb3ddIENvbmNlcm46IHhwY3NfcmtfY3JlYXRl KCkgaXMgRVhQT1JUX1NZTUJPTF9HUEwnZWQgYW5kIHB1Ymxpc2hlZAogIGluIGEgbmV3IGhlYWRl ciBpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIHdpdGggbm8gaW4tdHJlZSBjYWxsZXLi gKYKLSBbTG93XSBJbiB4cGNzX3JrX2NyZWF0ZSgpIChkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mt cmsuYzo1MTgtNTU4KSB0aGUKICBjb21tZW50IGp1c3RpZnlpbmcgdGhlIGRldmljZV9saW5rIGhh bmRsaW5nIG1pc3N0YXRlcyB0aGUgQVBJ4oCmCgotLQoKbmV0OiBwY3M6IHhwY3M6IGFkZCBSb2Nr Y2hpcCBSSzM1NjggcGxhdGZvcm0gZ2x1ZSBkcml2ZXIKClRoaXMgYWRkcyBhIFJvY2tjaGlwIFJL MzU2OCBnbHVlIGRyaXZlciBmb3IgdGhlIERlc2lnbldhcmUgWFBDUyB0aGF0CmV4cG9zZXMgdGhl IEFQQjMtbWFwcGVkIENTUnMgdGhyb3VnaCBhIHZpcnR1YWwgTURJTyBidXMsIHNwbGl0cyB0aGUK Z2VuZXJpYyBwbGF0Zm9ybSBnbHVlIGludG8gaXRzIG93biBQQ1NfWFBDU19QTEFURk9STSBtb2R1 bGUsIGFuZCBhZGRzCnBvd2VyLW1hbmFnZW1lbnQgaGFuZGxpbmcgZm9yIHRoZSBzaGFyZWQgUERf UElQRSBwb3dlciBkb21haW4uCgpMaW5rOiBodHRwczovL2RsLnJhZHhhLmNvbS9yb2NrMy9kb2Nz L2h3L2RhdGFzaGVldC9Sb2NrY2hpcCUyMFJLMzU2OCUyMFRSTSUyMFBhcnQxJTIwVjEuMS0yMDIx MDMwMS5wZGYgKFBhZ2UgNTksIENSVV9DTEtTRUxfQ09OMjkpCkxpbms6IGh0dHBzOi8vZGwucmFk eGEuY29tL3JvY2szL2RvY3MvaHcvZGF0YXNoZWV0L1JvY2tjaGlwJTIwUkszNTY4JTIwVFJNJTIw UGFydDIlMjBWMS4xLTIwMjEwMzAxLnBkZiAoUGFnZSAyMDc4KQoKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtcmsu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uMzVlZTk4MGE3 NTllNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtcmsu Ywo+IEBAIC0wLDAgKzEsNjE5IEBACgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IHhwY3NfcmtfbWRp b19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZykKPiArewo+ICsJc3dp dGNoIChkZXYpIHsKPiArCWNhc2UgTURJT19NTURfUE1BUE1EOgo+ICsJCXJldHVybiBST0NLQ0hJ UF9NTURfUE1BUE1EOwo+ICsJY2FzZSBNRElPX01NRF9WRU5EMjoKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogUmVhZHMg YXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQncyByZWFkLW9ubHkgbWlycm9y Owo+ICsJICogb25seSB3cml0ZXMgaGF2ZSB0byBiZSB0YXJnZXRlZCBhdCBNSUkgKHNlZSB0aGUg d3JpdGUgcGF0aCkuCj4gKwkgKi8KPiArCXN3aXRjaCAoYWRkcikgewo+ICsJY2FzZSAwOgo+ICsJ CXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwo+ICsJY2FzZSAxOgo+ICsJCXJldHVybiBST0NLQ0hJ UF9NTURfTUlJMTsKPiArCWNhc2UgMjoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7Cj4g KwljYXNlIDM6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwo+ICsJZGVmYXVsdDoKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3JrX21k aW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQo+ICt7Cj4gKwlz d2l0Y2ggKGRldikgewo+ICsJY2FzZSBNRElPX01NRF9QTUFQTUQ6Cj4gKwkJcmV0dXJuIFJPQ0tD SElQX01NRF9QTUFQTUQ7Cj4gKwljYXNlIE1ESU9fTU1EX1ZFTkQyOgo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUaGVz ZSByZWdpc3RlcnMgcGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJICh0aGUgbWFuYWdlbWVudCBw b3J0KS4KPiArCSAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2Ug Yml0cywgc28gd3JpdGVzIG11c3QKPiArCSAqIGFsd2F5cyB0YXJnZXQgTUlJOyB0aGUgcmVhZCBw YXRoIHJlbWFwcyBwZXIgYWRkcmVzcyBhbmQgdGhlCj4gKwkgKiBoYXJkd2FyZSByZWRpcmVjdHMg dG8gdGhlIHBvcnQncyBtaXJyb3IuCj4gKwkgKi8KPiArCXN3aXRjaCAocmVnKSB7Cj4gKwljYXNl IERXX1ZSX01JSV9BTl9DVFJMOgo+ICsJY2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6Cj4gKwlj YXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOgo+ICsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMToK PiArCWNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01J STsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9CgpbU2V2ZXJpdHk6IE1lZGl1bV0KUmVh ZHMgYW5kIHdyaXRlcyBvZiB0aGUgc2FtZSAoYWRkciwgcmVnKSBwYWlyIHJlc29sdmUgdG8gZGlm ZmVyZW50IE1NRHMgZm9yCmFkZHJlc3NlcyAxLi4zLiAgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFw cGluZygpIHNlbmRzIEFOX0NUUkwsIEFOX0lOVFJfU1RTLApFRUVfTUNUUkwwLzEgYW5kIERJR19D VFJMMiB0byBST0NLQ0hJUF9NTURfTUlJIGJlZm9yZSB0aGUgcGVyLWFkZHJlc3Mgc3dpdGNoCmlz IHJlYWNoZWQsIHdoaWxlIHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZygpIHJldHVybnMgUk9D S0NISVBfTU1EX01JSTEvMi8zCmZvciB0aG9zZSBzYW1lIHJlZ2lzdGVycy4gIFNpbmNlIHhwY3Nf cmtfYWRkcl9mb3JtYXQoKSBmb2xkcyB0aGUgTU1EIGludG8gdGhlCkFQQiBDU1IgaW5kZXgsIHRo ZSB0d28gYWNjZXNzZXMgbGFuZCBvbiBkaWZmZXJlbnQgcGh5c2ljYWwgb2Zmc2V0cy4KClRoZSB1 bm1vZGlmaWVkIGNvcmUgZG9lcyByZWFkLW1vZGlmeS13cml0ZSBvbiBleGFjdGx5IHRoZXNlIHJl Z2lzdGVycywgZS5nLgppbiB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paSgpOgoKCXJldCA9IHhw Y3NfbW9kaWZ5KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fQ1RSTCwgbWFzaywg dmFsKTsKCS4uLgoJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJf TUlJX0FOX0lOVFJfU1RTLCAwKTsKCmFuZCBpbiB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKToK Cglhbl9pbnRyID0geHBjc19yZWFkKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5f SU5UUl9TVFMpOwoJaWYgKGFuX2ludHIgJiBEV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExUX0lO VFIpIHsKCQlhbl9pbnRyICY9IH5EV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExUX0lOVFI7CgkJ eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCBh bl9pbnRyKTsKCkZvciBwb3J0IDEuLjMsIGlzIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHBvcnQg bWlycm9yIHRoZW4gd3JpdHRlbiBiYWNrIGludG8KcG9ydCAwJ3MgcmVnaXN0ZXIsIGFuZCBpcyB0 aGUgYXV0b25lZy1jb21wbGV0ZSBsYXRjaCB0aGF0IHdhcyBvYnNlcnZlZCBhCmRpZmZlcmVudCBv bmUgZnJvbSB0aGUgbGF0Y2ggdGhhdCBnZXRzIGFja25vd2xlZGdlZD8KClR3byByZWxhdGVkIHF1 ZXN0aW9ucyBvbiB0aGUgc2FtZSBtYXBwaW5nOgoKQU5fQ1RSTCAoUENTIG1vZGUgLyBUWF9DT05G SUcpIGFuZCB0aGUgRUVFIHJlZ2lzdGVycyBiZWNvbWUgb25lIHNoYXJlZAppbnN0YW5jZSBmb3Ig YWxsIGZvdXIgcG9ydHMgd2l0aCBubyBzZXJpYWxpemF0aW9uLCB5ZXQgdGhlIGNvbW1pdCBtZXNz YWdlCnNheXMgcG9ydHMgMC4uMyBjYW4gYmUgcm91dGVkIHRvIEdNQUMwIG9yIEdNQUMxIGluZGVw ZW5kZW50bHkuICBIb3cgaXMKY3Jvc3MtcG9ydCBjbG9iYmVyaW5nIGF2b2lkZWQgd2hlbiB0d28g TUFDcyBjb25maWd1cmUgdGhlaXIgUENTPwoKRFdfVlJfTUlJX0RJR19DVFJMMSwgd2hpY2ggaG9s ZHMgVlJfUlNUIHBsdXMgMkc1X0VOL01BQ19BVVRPX1NXIGFuZCBpcwptb2RpZmllZCBieSB0aGUg Y29yZSBpbiB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paSgpIGFuZAp4cGNzX2NvbmZpZ18yNTAw YmFzZXgoKSwgaXMgbm90IGluIHRoZSBsaXN0IGFuZCB0aGVyZWZvcmUgZ29lcyB0byB0aGUKcGVy LXBvcnQgTU1ELiAgRG9lcyB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbW1lbnQncyBjbGFpbSB0aGF0 IHN1Y2ggdmVuZG9yCnJlZ2lzdGVycyAicGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJIj8KClsg Li4uIF0KCj4gKwkvKgo+ICsJICogRXN0YWJsaXNoIHRoZSBkZXZpY2UgbGluayBiZWZvcmUgcmVh ZGluZyB0aGUgc3VwcGxpZXIncyBkcnZkYXRhLgo+ICsJICogZGV2aWNlX2xpbmtfYWRkKCkgZG9l cyBub3QgZmFpbCBvbiBhIHN1cHBsaWVyIHRoYXQgaXMgdW5iaW5kaW5nOgo+ICsJICogaXQgY3Jl YXRlcyB0aGUgbGluayBpbiBETF9TVEFURV9TVVBQTElFUl9VTkJJTkQuIFdoZXRoZXIgdGhlIGxp bmsKPiArCSAqIGFjdHVhbGx5IHByb3RlY3RzIHRoZSBkcnZkYXRhIGRlcGVuZHMgb24gdGhlIHN1 cHBsaWVyJ3Mgc3RhdGUgYXQKPiArCSAqIGNyZWF0aW9uIHRpbWUuCj4gKwkgKgo+ICsJICogQ2hl Y2sgbGluay0+c3VwcGxpZXItPmxpbmtzLnN0YXR1cyByaWdodCBhZnRlciBjcmVhdGlvbi4gSWYg dGhlCj4gKwkgKiBzdXBwbGllciB3YXMgRExfREVWX0RSSVZFUl9CT1VORCwgdGhlIGxpbmsgaXMg aW4KPiArCSAqIERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIGFuZCBkZXZpY2VfbGlua3NfdW5iaW5k X2NvbnN1bWVycygpIHdpbGwKPiArCSAqIHdhaXQgZm9yIHRoaXMgcHJvYmUgdG8gZmluaXNoIGJl Zm9yZSB1bmJpbmRpbmcgdGhlIHN1cHBsaWVyLCBzbwo+ICsJICogdGhlIGRydmRhdGEgc3RheXMg dmFsaWQgZm9yIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbi4gQW55IG90aGVyCj4gKwkgKiBzdGF0 ZSBtZWFucyB0aGUgc3VwcGxpZXIgaXMgbm90IHVzYWJsZSB5ZXQ7IGRlZmVyIGFuZCByZXRyeS4K PiArCSAqCj4gKwkgKiBUaGUgbGluayBpcyByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhl IGNvbnN1bWVyIGRldmljZSBpcwo+ICsJICogZGVzdHJveWVkIChETF9GTEFHX0FVVE9SRU1PVkVf Q09OU1VNRVIpLCBzbyBubyBleHBsaWNpdAo+ICsJICogZGV2aWNlX2xpbmtfcmVtb3ZlKCkgaXMg bmVlZGVkIG9uIHRoZSBmYWlsdXJlIHBhdGhzLgo+ICsJICovCgpbU2V2ZXJpdHk6IExvd10KVHdv IGRldGFpbHMgaW4gdGhpcyBjb21tZW50IGluIHhwY3NfcmtfY3JlYXRlKCkgbG9vayBpbmFjY3Vy YXRlLgoKaW5jbHVkZS9saW51eC9kZXZpY2UuaCBkZXNjcmliZXMgdGhlIGZsYWcgYXM6CgoJLyog UmVtb3ZlIHRoZSBsaW5rIGF1dG9tYXRpY2FsbHkgb24gY29uc3VtZXIgZHJpdmVyIHVuYmluZC4g Ki8KCnNvIGlzICJyZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbnN1bWVyIGRldmlj ZSBpcyBkZXN0cm95ZWQiIHRoZQpyaWdodCB3b3JkaW5nPyAgVGhlIGNvcmUgZHJvcHMgc3VjaCBs aW5rcyBmcm9tIF9fZGV2aWNlX2xpbmtzX25vX2RyaXZlcigpIG9uCmNvbnN1bWVyIHByb2JlIGZh aWx1cmUgb3IgZHJpdmVyIHVuYmluZCwgbm90IGF0IGRldmljZSBkZXN0cnVjdGlvbi4KClRoZSBj bGFpbSB0aGF0IGEgRExfREVWX0RSSVZFUl9CT1VORCBzdXBwbGllciBpbXBsaWVzIERMX1NUQVRF X0NPTlNVTUVSX1BST0JFCm9ubHkgaG9sZHMgd2hpbGUgdGhlIGNvbnN1bWVyIGlzIERMX0RFVl9Q Uk9CSU5HOgoKZHJpdmVycy9iYXNlL2NvcmUuYzpkZXZpY2VfbGlua19pbml0X3N0YXR1cygpIHsK CWNhc2UgRExfREVWX0RSSVZFUl9CT1VORDoKCQlzd2l0Y2ggKGNvbnN1bWVyLT5saW5rcy5zdGF0 dXMpIHsKCQljYXNlIERMX0RFVl9QUk9CSU5HOgoJCQlsaW5rLT5zdGF0dXMgPSBETF9TVEFURV9D T05TVU1FUl9QUk9CRTsKCS4uLgp9CgpBbiBhbHJlYWR5LWJvdW5kIGNvbnN1bWVyIGdldHMgRExf U1RBVEVfQUNUSVZFIGFuZCBhbnl0aGluZyBlbHNlIGdldHMKRExfU1RBVEVfQVZBSUxBQkxFLiAg Q291bGQgdGhlIGNvbW1lbnQgKG9yIHRoZSBrZXJuZWwtZG9jIG9mIHRoZSBleHBvcnRlZApoZWxw ZXIpIHN0YXRlIHRoYXQgeHBjc19ya19jcmVhdGUoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBj b25zdW1lcidzIHByb2JlPwoKPiArCWxpbmsgPSBkZXZpY2VfbGlua19hZGQoZGV2LCAmcGRldi0+ ZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpOwo+ICsJaWYgKCFsaW5rKSB7Cj4gKwkJ cHV0X2RldmljZSgmcGRldi0+ZGV2KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVS KTsKPiArCX0KPiArCj4gKwlpZiAoUkVBRF9PTkNFKGxpbmstPnN1cHBsaWVyLT5saW5rcy5zdGF0 dXMpICE9IERMX0RFVl9EUklWRVJfQk9VTkQpIHsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYp Owo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ICsJfQoKW1NldmVyaXR5OiBN ZWRpdW1dCklzIGl0IHZhbGlkIHRvIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5 IGRldmljZV9saW5rX2FkZCgpIGhlcmU/CkRMX0ZMQUdfU1RBVEVMRVNTIGlzIG5vdCBwYXNzZWQs IHNvIHRoaXMgaXMgYSBtYW5hZ2VkIGxpbmssIGFuZCB0aGUKa2VybmVsLWRvYyBhYm92ZSBkZXZp Y2VfbGlua19hZGQoKSBzYXlzOgoKICogSWYgdGhhdCBmbGFnIGlzIG5vdCBzZXQsIGhvd2V2ZXIs IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBpcyBoYW5kaW5nIHRoZQogKiBtYW5hZ2VtZW50 IG9mIHRoZSBsaW5rIG92ZXIgdG8gdGhlIGRyaXZlciBjb3JlIGVudGlyZWx5IGFuZCBpdHMgcmV0 dXJuIHZhbHVlCiAqIGNhbiBvbmx5IGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgdGhl IGxpbmsgaXMgcHJlc2VudC4KCk5vIGtyZWYgaXMgdGFrZW4gZm9yIG1hbmFnZWQgbGlua3MgKGty ZWZfZ2V0KCkgb25seSBoYXBwZW5zIG9uIHRoZSBzdGF0ZWxlc3MKcGF0aCksIHNvIHRoZSBjYWxs ZXIgb3ducyBubyByZWZlcmVuY2Ugb24gdGhlIGxpbmsgb2JqZWN0LCB3aGljaCB0aGUgY29yZSBj YW4KZnJlZSBmcm9tIGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZCgpIC0+IGtyZWZfcHV0KCZsaW5r LT5rcmVmLApfX2RldmljZV9saW5rX2RlbCkgb3IgZnJvbSBkZXZpY2VfZGVsKCkgLT4gZGV2aWNl X2xpbmtzX3B1cmdlKCkuCgpTaW5jZSBsaW5rLT5zdXBwbGllciBpcyBqdXN0ICZwZGV2LT5kZXYs IGFuZCB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaG9sZHMgYQpyZWZlcmVuY2Ugb24gcGRldiBmcm9t IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoKSwgd291bGQgcmVhZGluZwpwZGV2LT5kZXYubGlua3Mu c3RhdHVzIGluc3RlYWQgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgd2l0aG91dCB0b3VjaGluZyB0aGUK bGluayBvYmplY3Q/Cgo+ICsJcHhwY3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAr CWlmICghcHhwY3MgfHwgIXB4cGNzLT5idXMpIHsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYp Owo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ICsJfQo+ICsKPiArCXhwY3Mg PSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLT5idXMsIChpbnQpcG9ydCk7CgpbU2V2ZXJpdHk6 IE1lZGl1bV0KVGhpcyBpcyBhIGNoZWNrIG9uIGEgZHJpdmVyLWNvcmUtaW50ZXJuYWwgZmllbGQg KGxpbmtzLnN0YXR1cykgZm9sbG93ZWQgYnkKdXNlIG9mIHRoZSBzdXBwbGllcidzIGRldm0tb3du ZWQgZGF0YSAocHhwY3MtPmJ1cywgcHhwY3MtPmVlZV9tdWx0X2ZhY3QpIGFuZApyZWdpc3RyYXRp b24gb2YgYW4gTURJTyBkZXZpY2Ugb24gdGhhdCBidXMuCgpGb3IgdGhlIGluLXRyZWUgY2FsbGVy IHRoZSB3aW5kb3cgZG9lcyBsb29rIGNsb3NlZDogcmtfcGNzX2luaXQoKSBydW5zIGZyb20Kc3Rt bWFjX3Bjc19zZXR1cCgpIGluIF9fc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB0aGUgY29uc3VtZXIg aXMgRExfREVWX1BST0JJTkcKYW5kIHRoZSBuZXcgbGluayBpcyBETF9TVEFURV9DT05TVU1FUl9Q Uk9CRSwgd2hpY2ggbWFrZXMgdGhlIHN1cHBsaWVyIHdhaXQ6Cgpkcml2ZXJzL2Jhc2UvY29yZS5j OmRldmljZV9saW5rc191bmJpbmRfY29uc3VtZXJzKCkgewoJaWYgKHN0YXR1cyA9PSBETF9TVEFU RV9DT05TVU1FUl9QUk9CRSkgewoJCWRldmljZV9saW5rc193cml0ZV91bmxvY2soKTsKCgkJd2Fp dF9mb3JfZGV2aWNlX3Byb2JlKCk7CgkJZ290byBzdGFydDsKCX0KfQoKQnV0IHhwY3NfcmtfY3Jl YXRlKCkgaXMgZXhwb3J0ZWQgYW5kIGRvZXMgbm90IGRvY3VtZW50IHRoYXQgcHJlY29uZGl0aW9u LgpGb3IgYSBjYWxsZXIgb3V0c2lkZSB0aGUgY29uc3VtZXIncyBwcm9iZSB0aGUgbGluayB3b3Vs ZCBiZQpETF9TVEFURV9BVkFJTEFCTEUgb3IgRExfU1RBVEVfQUNUSVZFLCBub3RoaW5nIHdvdWxk IHdhaXQgZm9yIGl0LCBhbmQgdGhlCnN1cHBsaWVyJ3MgZGV2cmVzIGNvdWxkIGJlIHJlbGVhc2Vk IHdoaWxlIHB4cGNzLT5idXMgaXMgaW4gdXNlLiAgQWxzbyBub3RlCnRoYXQgeHBjc19ya19jcmVh dGVfZGF0YSgpIHB1Ymxpc2hlcyBkcnZkYXRhIGJlZm9yZSBidXMgYW5kIGVlZV9tdWx0X2ZhY3QK ZXhpc3Q6CgoJcHhwY3MtPnBkZXYgPSBwZGV2OwoKCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2 LCBweHBjcyk7CgpzbyB0aGUgcmVhZCBoZXJlIHJlbGllcyBlbnRpcmVseSBvbiB0aGUgc3VwcGxp ZXIgYmVpbmcgZnVsbHkgYm91bmQuICBXb3VsZAppdCBiZSBwcmVmZXJhYmxlIHRvIGRvY3VtZW50 IHRoZSBwcm9iZS1jb250ZXh0IHJlcXVpcmVtZW50LCBvciB0byBhdm9pZAppbnNwZWN0aW5nIGxp bmtzLnN0YXR1cyBmcm9tIGEgZHJpdmVyIGFsdG9nZXRoZXI/Cgo+ICtFWFBPUlRfU1lNQk9MX0dQ TCh4cGNzX3JrX2NyZWF0ZSk7CgpbU2V2ZXJpdHk6IExvd10KQXQgdGhpcyBjb21taXQgeHBjc19y a19jcmVhdGUoKSBoYXMgbm8gaW4tdHJlZSBjYWxsZXIsIGFuZCB0aGUgbmV3IGhlYWRlcgppbmNs dWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGRlY2xhcmVzIGl0IHdpdGhvdXQgYQohQ09ORklH X1BDU19YUENTX1JPQ0tDSElQIHN0dWIuICBUaGUgY2FsbGVyIGRvZXMgYXJyaXZlIGxhdGVyIGlu IHRoZSBzYW1lCnNlcmllcyAocmtfcGNzX2luaXQoKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC9z dG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCmNhbGxzIGl0IGFuZCBpcyBpbnN0YWxsZWQgYXMgcGxh dF9kYXQtPnBjc19pbml0IGZvcgpQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpLCBhbmQgRFdNQUNf Uk9DS0NISVAgZG9lcyAic2VsZWN0ClBDU19YUENTX1JPQ0tDSElQIiwgd2hpY2ggZm9yY2VzIHRo ZSB0cmlzdGF0ZSB0byBhdCBsZWFzdCB0aGUgc2VsZWN0b3Incwp2YWx1ZSwgc28gdGhlcmUgaXMg bm8geS9tIGxpbmsgbWlzbWF0Y2ggZWl0aGVyLiAgTm90aW5nIGl0IG9ubHkgYmVjYXVzZSB0aGUK c3ltYm9sIGlzIHVudXNlZCBhdCB0aGlzIHBvaW50IGluIHRoZSBzZXJpZXMuCgpbIC4uLiBdCgo+ ICtzdGF0aWMgaW50IHhwY3Nfcmtfc3lzdGVtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwkvKgo+ICsJICogS2VlcCB0aGUgUERfUElQRSBwb3dlciBkb21haW4gb24gZHVyaW5n IHN5c3RlbSBzdXNwZW5kLgo+ICsJICoKPiArCSAqIFBEX1BJUEUgaXMgc2hhcmVkIHdpdGggU0FU QS9QQ0llIGFuZCB3b3VsZCBiZSBwb3dlcmVkIGRvd24gYnkKPiArCSAqIGdlbnBkIG9uY2UgYWxs IGl0cyBjb25zdW1lcnMgYXJlIHN1c3BlbmRlZCwga2lsbGluZyB0aGUgU2VyRGVzCj4gKwkgKiBh bmQgYnJlYWtpbmcgTUFDIFdvTC4gIE1hcmsgdGhlIFhQQ1MgYXMgcGFydCBvZiB0aGUgd2FrZXVw IHBhdGgKPiArCSAqIHNvIGdlbnBkIGtlZXBzIHRoZSBkb21haW4gb24uICBVbmNvbmRpdGlvbmFs IGJlY2F1c2UgdGhlIFhQQ1MKPiArCSAqIGNvcmUgaGFzIG5vIGNhbGxiYWNrIHRvIGNvbnZleSB0 aGUgTUFDIFdvTCBzdGF0ZS4KPiArCSAqLwo+ICsJZGV2aWNlX3NldF93YWtldXBfcGF0aChkZXYp Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya19zeXN0ZW1fcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KCltTZXZlcml0 eTogSGlnaF0KRG9lcyBkZXZpY2Vfc2V0X3dha2V1cF9wYXRoKCkgYWN0dWFsbHkga2VlcCBQRF9Q SVBFIHBvd2VyZWQgb24gUkszNTY4PyAgVGhlCmNvbW1pdCBtZXNzYWdlIHN0YXRlczoKCglnZW5w ZCB0aGVuIGxlYXZlcyB0aGUgZG9tYWluIHBvd2VyZWQsIGJlY2F1c2UgdGhlIFJvY2tjaGlwIHBv d2VyCglkb21haW4gZHJpdmVyIHNldHMgR0VOUERfRkxBR19BQ1RJVkVfV0FLRVVQIG9uIFBEX1BJ UEUsIHdoaWNoIG1ha2VzCglnZW5wZCBjaGVjayB0aGUgd2FrZXVwIHBhdGggb2YgaXRzIGNvbnN1 bWVycyBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuCgpQRF9QSVBFIGlzIHJlZ2lzdGVyZWQgd2l0aG91 dCBhY3RpdmUgd2FrZXVwIGluCmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvcG0tZG9tYWlucy5j OgoKCVtSSzM1NjhfUERfUElQRV0JPSBET01BSU5fUkszNTY4KCJwaXBlIiwgQklUKDgpLCBCSVQo MTEpLCBmYWxzZSwgZmFsc2UpLAoKVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHdha2V1cCBmbGFn LCBzbyBwZF9pbmZvLT5hY3RpdmVfd2FrZXVwIHN0YXlzIGZhbHNlCmFuZCBHRU5QRF9GTEFHX0FD VElWRV9XQUtFVVAgaXMgbmV2ZXIgc2V0IGZvciB0aGlzIGRvbWFpbi4gIGdlbnBkIG9ubHkKaG9u b3VycyB0aGUgY29uc3VtZXIgd2FrZXVwIHBhdGggd2hlbiB0aGF0IGZsYWcgaXMgcHJlc2VudDoK CmRyaXZlcnMvcG1kb21haW4vY29yZS5jOmdlbnBkX2ZpbmlzaF9zdXNwZW5kKCkgewoJaWYgKGRl dmljZV9hd2FrZV9wYXRoKGRldikgJiYgZ2VucGRfaXNfYWN0aXZlX3dha2V1cChnZW5wZCkgJiYK CSAgICAhZGV2aWNlX291dF9iYW5kX3dha2V1cChkZXYpKQoJCXJldHVybiAwOwp9CgpXaXRob3V0 IHRoZSBmbGFnLCBkb2VzIGdlbnBkIGZhbGwgdGhyb3VnaCB0byBnZW5wZF9zeW5jX3Bvd2VyX29m ZigpIGFuZCBwb3dlcgpQRF9QSVBFIGRvd24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHNpdHVhdGlv biB0aGUgcHJvYmUgY29tbWVudCB3YXJucyBhYm91dAooIlRoZSBkb21haW4gbXVzdCBiZSBwb3dl cmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQwp3aWxs IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCIpPwoKZGV2X3BtX2dlbnBkX3Jw bV9hbHdheXNfb24oKSBkb2VzIG5vdCBhcHBlYXIgdG8gY292ZXIgdGhlIHN5c3RlbS1zdXNwZW5k IHBhdGgKZWl0aGVyOyBnZW5wZF9zeW5jX3Bvd2VyX29mZigpIG9ubHkgY29uc3VsdHMgR0VOUERf RkxBR19BTFdBWVNfT046Cgpkcml2ZXJzL3BtZG9tYWluL2NvcmUuYzpnZW5wZF9zeW5jX3Bvd2Vy X29mZigpIHsKCWlmICghZ2VucGRfc3RhdHVzX29uKGdlbnBkKSB8fCBnZW5wZF9pc19hbHdheXNf b24oZ2VucGQpKQoJCXJldHVybjsKfQoKSWYgdGhlIGRvbWFpbiBpcyBwb3dlci1jeWNsZWQsIHdo YXQgcmVzdG9yZXMgdGhlIGhhcmR3YXJlIG9uIHRoZSB3YXkgYmFjayB1cD8KcGh5X2luaXQoKSBh bmQgcGh5X3Bvd2VyX29uKCkgYXJlIGNhbGxlZCBvbmNlIGZyb20geHBjc19ya19wcm9iZSgpIHZp YQp4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbigpLCB4cGNzX3JrX3N5c3RlbV9yZXN1bWUoKSBy ZXR1cm5zIDAgd2l0aG91dApyZS1pbml0aWFsaXNpbmcgdGhlIFNlckRlcyBvciB0aGUgUENTLCBh bmQKZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgaGFz IG5vIGRldl9wbV9vcHMgYXQgYWxsLgpEb2VzIHRoYXQgbGVhdmUgdGhlIGNvbWJwaHkgYW5kIFhQ Q1MgYXQgcG93ZXItb24tcmVzZXQgZGVmYXVsdHMgKG5vIFNlckRlcwpjb25maWd1cmF0aW9uLCBu byBTZXJEZXMgVFggY2xvY2spIGFmdGVyIHJlc3VtZSB3aGlsZSB0aGUgZHJpdmVyLCB0aGUgeHBj cwpjb3JlIGFuZCBwaHlsaW5rIHN0aWxsIGFzc3VtZSB0aGUgcHJvZ3JhbW1lZCBjb25maWd1cmF0 aW9uIGlzIGxpdmUsIGFuZCBNQUMKV29MLCB0aGUgc3RhdGVkIHJlYXNvbiBmb3IgdGhlIG1lY2hh bmlzbSwgbm9uLWZ1bmN0aW9uYWw/CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9u ZXRkZXYtYWkuYm90cy5saW51eC5kZXYvc2FzaGlrby8jL3BhdGNoc2V0LzIwMjYwOTIyMjAwMzM2 LjIyMDEyMTItMS1jb2lhcHJhbnQlNDBnbWFpbC5jb20KCi0tIApsaW51eC1waHkgbWFpbGluZyBs aXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo= 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 CC770C9831E for ; Fri, 25 Sep 2026 02:04:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-Type:References:In-Reply-To:Message-ID:Date :Cc:To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1tnkY2s2DVVGP0iyZfDIANfzMWWEVKjrYMrG/4nzmSI=; b=FAFBsY7NdfIaTbhrnCj186OlY2 LO+OOFwMf5o0il5+/Xku9ZCSx1j0GxlDVeMNsw+w1+Lpbu5udKc8/aXH3EVMB1wyLUVNN3OJlS//A +iDoEJVJ8G0zC4LTgk0r8Wvzs+x2VPm8plBEmTG+IjT0/pTdEjvZpLaiOTwsuPVO3K7sgL4VxTQAb RaGDZhqdB/ZPN3D5qoVsN3GhlswYhqmGBZ9fPRfJNU9Sx+ZkvucNHWnKEgYSkB6IakJ1yRldqd/HR fGM7H3xYe3Mjh815MlrCDeVruoDZCU198TjbLpescPv2gHvjZIsqXgBx79hUYA5Dlih/ZxC2k0zK7 bTT4PbUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vIX-0000000CW5y-1F6h; Fri, 25 Sep 2026 02:04:25 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vHu-0000000CVmC-37V0; Fri, 25 Sep 2026 02:03:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 233756022F; Fri, 25 Sep 2026 02:03:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 525B41F000FF; Fri, 25 Sep 2026 02:03:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790301825; bh=1tnkY2s2DVVGP0iyZfDIANfzMWWEVKjrYMrG/4nzmSI=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=iNwRdyxillxQFirsyCtD7IeNn3aKwEyrLa/8xQkOE1FR53L3zpRhrjb3YU84g71Kk O+BlUBStNYsiPw4YVVAqX5K8+TPQ5Vd7c7rag+GKjlCY8nXrhIBlkq0MiyeQROUshv YwNcIsGBMKsfMEOqgvN/h/C5d/9BJ9Ximm2efgOU2J3nd7SCumKjV0WthKszIRJljv vSvFBOZ/gLgeLYFYpvoaRILt6Z3iqoi9iNG8U8rZbOXCVpg3WqmNxM1tUCz8Hw9WbW cEW/oJNZ07w9ZZwo2WYUZC27bqJdpeiO33IlUNF/olv9DN0jjEKxi57UVOXTYx1bF/ ZjFWpE6EI1dEg== Subject: Re: [PATCH net-next v10 07/11] net: pcs: xpcs: add Rockchip RK3568 platform glue driver From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, vkoul@kernel.org, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, prabhakar.mahadev-lad.rj@bp.renesas.com, romain.gantois@bootlin.com, hkallweit1@gmail.com, neil.armstrong@linaro.org, linux@armlinux.org.uk, shawn.lin@rock-chips.com, david@ixit.cz, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-renesas-soc@vger.kernel.org Date: Fri, 25 Sep 2026 02:03:43 +0000 Message-ID: <179030182389.2160803.3666914180615619528@kernel.org> In-Reply-To: <20260922200336.2201212-8-coiaprant@gmail.com> References: <20260922200336.2201212-8-coiaprant@gmail.com> X-sashiko-severity: High Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit MIME-Version: 1.0 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider. Critical: 0 · High: 1 · Medium: 3 · Low: 2 If you believe none of the issues are legitimate, please reply to each issue of Medium severity or higher and explain why the AI is wrong. If any of them are legitimate and you plan to respin, please let patchwork know by including "pw-bot: cr" as a separate line at the end of your reply (one such reply per series is enough). - [High] In drivers/net/pcs/pcs-xpcs-rk.c, xpcs_rk_system_suspend() relies solely on device_set_wakeup_path() to keep the PD_PIPE power… - [Medium] xpcs_rk_mdio_write_remapping() (drivers/net/pcs/pcs-xpcs- rk.c:137-150) forces writes of DW_VR_MII_AN_CTRL,… - [Medium] xpcs_rk_create() (drivers/net/pcs/pcs-xpcs-rk.c:537-546) dereferences the struct device_link * returned by device_link_add()… - [Medium] Concern: xpcs_rk_create() validates the supplier with an unlocked read of the driver-core-internal field… - [Low] Concern: xpcs_rk_create() is EXPORT_SYMBOL_GPL'ed and published in a new header include/linux/pcs/pcs-xpcs-rk.h with no in-tree caller… - [Low] In xpcs_rk_create() (drivers/net/pcs/pcs-xpcs-rk.c:518-558) the comment justifying the device_link handling misstates the API… -- net: pcs: xpcs: add Rockchip RK3568 platform glue driver This adds a Rockchip RK3568 glue driver for the DesignWare XPCS that exposes the APB3-mapped CSRs through a virtual MDIO bus, splits the generic platform glue into its own PCS_XPCS_PLATFORM module, and adds power-management handling for the shared PD_PIPE power domain. Link: https://dl.radxa.com/rock3/docs/hw/datasheet/Rockchip%20RK3568%20TRM%20Part1%20V1.1-20210301.pdf (Page 59, CRU_CLKSEL_CON29) Link: https://dl.radxa.com/rock3/docs/hw/datasheet/Rockchip%20RK3568%20TRM%20Part2%20V1.1-20210301.pdf (Page 2078) > diff --git a/drivers/net/pcs/pcs-xpcs-rk.c b/drivers/net/pcs/pcs-xpcs-rk.c > new file mode 100644 > index 0000000000000..35ee980a759e5 > --- /dev/null > +++ b/drivers/net/pcs/pcs-xpcs-rk.c > @@ -0,0 +1,619 @@ [ ... ] > +static int xpcs_rk_mdio_read_remapping(int addr, int dev, int reg) > +{ > + switch (dev) { > + case MDIO_MMD_PMAPMD: > + return ROCKCHIP_MMD_PMAPMD; > + case MDIO_MMD_VEND2: > + break; > + default: > + return -ENXIO; > + } > + > + /* > + * Reads are redirected by hardware to the port's read-only mirror; > + * only writes have to be targeted at MII (see the write path). > + */ > + switch (addr) { > + case 0: > + return ROCKCHIP_MMD_MII; > + case 1: > + return ROCKCHIP_MMD_MII1; > + case 2: > + return ROCKCHIP_MMD_MII2; > + case 3: > + return ROCKCHIP_MMD_MII3; > + default: > + return -ENODEV; > + } > +} > + > +static int xpcs_rk_mdio_write_remapping(int addr, int dev, int reg) > +{ > + switch (dev) { > + case MDIO_MMD_PMAPMD: > + return ROCKCHIP_MMD_PMAPMD; > + case MDIO_MMD_VEND2: > + break; > + default: > + return -ENXIO; > + } > + > + /* > + * These registers physically live only in MII (the management port). > + * Ports 1-3 expose read-only mirrors of these bits, so writes must > + * always target MII; the read path remaps per address and the > + * hardware redirects to the port's mirror. > + */ > + switch (reg) { > + case DW_VR_MII_AN_CTRL: > + case DW_VR_MII_AN_INTR_STS: > + case DW_VR_MII_EEE_MCTRL0: > + case DW_VR_MII_EEE_MCTRL1: > + case DW_VR_MII_DIG_CTRL2: > + return ROCKCHIP_MMD_MII; > + default: > + break; > + } [Severity: Medium] Reads and writes of the same (addr, reg) pair resolve to different MMDs for addresses 1..3. xpcs_rk_mdio_write_remapping() sends AN_CTRL, AN_INTR_STS, EEE_MCTRL0/1 and DIG_CTRL2 to ROCKCHIP_MMD_MII before the per-address switch is reached, while xpcs_rk_mdio_read_remapping() returns ROCKCHIP_MMD_MII1/2/3 for those same registers. Since xpcs_rk_addr_format() folds the MMD into the APB CSR index, the two accesses land on different physical offsets. The unmodified core does read-modify-write on exactly these registers, e.g. in xpcs_config_aneg_c37_sgmii(): ret = xpcs_modify(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_CTRL, mask, val); ... ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); and in xpcs_get_state_c37_sgmii(): an_intr = xpcs_read(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS); if (an_intr & DW_VR_MII_AN_STS_C37_ANCMPLT_INTR) { an_intr &= ~DW_VR_MII_AN_STS_C37_ANCMPLT_INTR; xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, an_intr); For port 1..3, is the value read from the port mirror then written back into port 0's register, and is the autoneg-complete latch that was observed a different one from the latch that gets acknowledged? Two related questions on the same mapping: AN_CTRL (PCS mode / TX_CONFIG) and the EEE registers become one shared instance for all four ports with no serialization, yet the commit message says ports 0..3 can be routed to GMAC0 or GMAC1 independently. How is cross-port clobbering avoided when two MACs configure their PCS? DW_VR_MII_DIG_CTRL1, which holds VR_RST plus 2G5_EN/MAC_AUTO_SW and is modified by the core in xpcs_config_aneg_c37_sgmii() and xpcs_config_2500basex(), is not in the list and therefore goes to the per-port MMD. Does that contradict the comment's claim that such vendor registers "physically live only in MII"? [ ... ] > + /* > + * Establish the device link before reading the supplier's drvdata. > + * device_link_add() does not fail on a supplier that is unbinding: > + * it creates the link in DL_STATE_SUPPLIER_UNBIND. Whether the link > + * actually protects the drvdata depends on the supplier's state at > + * creation time. > + * > + * Check link->supplier->links.status right after creation. If the > + * supplier was DL_DEV_DRIVER_BOUND, the link is in > + * DL_STATE_CONSUMER_PROBE and device_links_unbind_consumers() will > + * wait for this probe to finish before unbinding the supplier, so > + * the drvdata stays valid for the rest of the function. Any other > + * state means the supplier is not usable yet; defer and retry. > + * > + * The link is released automatically when the consumer device is > + * destroyed (DL_FLAG_AUTOREMOVE_CONSUMER), so no explicit > + * device_link_remove() is needed on the failure paths. > + */ [Severity: Low] Two details in this comment in xpcs_rk_create() look inaccurate. include/linux/device.h describes the flag as: /* Remove the link automatically on consumer driver unbind. */ so is "released automatically when the consumer device is destroyed" the right wording? The core drops such links from __device_links_no_driver() on consumer probe failure or driver unbind, not at device destruction. The claim that a DL_DEV_DRIVER_BOUND supplier implies DL_STATE_CONSUMER_PROBE only holds while the consumer is DL_DEV_PROBING: drivers/base/core.c:device_link_init_status() { case DL_DEV_DRIVER_BOUND: switch (consumer->links.status) { case DL_DEV_PROBING: link->status = DL_STATE_CONSUMER_PROBE; ... } An already-bound consumer gets DL_STATE_ACTIVE and anything else gets DL_STATE_AVAILABLE. Could the comment (or the kernel-doc of the exported helper) state that xpcs_rk_create() must be called from the consumer's probe? > + link = device_link_add(dev, &pdev->dev, DL_FLAG_AUTOREMOVE_CONSUMER); > + if (!link) { > + put_device(&pdev->dev); > + return ERR_PTR(-EPROBE_DEFER); > + } > + > + if (READ_ONCE(link->supplier->links.status) != DL_DEV_DRIVER_BOUND) { > + put_device(&pdev->dev); > + return ERR_PTR(-EPROBE_DEFER); > + } [Severity: Medium] Is it valid to dereference the pointer returned by device_link_add() here? DL_FLAG_STATELESS is not passed, so this is a managed link, and the kernel-doc above device_link_add() says: * If that flag is not set, however, the caller of this function is handing the * management of the link over to the driver core entirely and its return value * can only be used to check whether or not the link is present. No kref is taken for managed links (kref_get() only happens on the stateless path), so the caller owns no reference on the link object, which the core can free from device_link_drop_managed() -> kref_put(&link->kref, __device_link_del) or from device_del() -> device_links_purge(). Since link->supplier is just &pdev->dev, and this function already holds a reference on pdev from of_find_device_by_node(), would reading pdev->dev.links.status instead give the same result without touching the link object? > + pxpcs = platform_get_drvdata(pdev); > + if (!pxpcs || !pxpcs->bus) { > + put_device(&pdev->dev); > + return ERR_PTR(-EPROBE_DEFER); > + } > + > + xpcs = xpcs_create_mdiodev(pxpcs->bus, (int)port); [Severity: Medium] This is a check on a driver-core-internal field (links.status) followed by use of the supplier's devm-owned data (pxpcs->bus, pxpcs->eee_mult_fact) and registration of an MDIO device on that bus. For the in-tree caller the window does look closed: rk_pcs_init() runs from stmmac_pcs_setup() in __stmmac_dvr_probe(), so the consumer is DL_DEV_PROBING and the new link is DL_STATE_CONSUMER_PROBE, which makes the supplier wait: drivers/base/core.c:device_links_unbind_consumers() { if (status == DL_STATE_CONSUMER_PROBE) { device_links_write_unlock(); wait_for_device_probe(); goto start; } } But xpcs_rk_create() is exported and does not document that precondition. For a caller outside the consumer's probe the link would be DL_STATE_AVAILABLE or DL_STATE_ACTIVE, nothing would wait for it, and the supplier's devres could be released while pxpcs->bus is in use. Also note that xpcs_rk_create_data() publishes drvdata before bus and eee_mult_fact exist: pxpcs->pdev = pdev; dev_set_drvdata(&pdev->dev, pxpcs); so the read here relies entirely on the supplier being fully bound. Would it be preferable to document the probe-context requirement, or to avoid inspecting links.status from a driver altogether? > +EXPORT_SYMBOL_GPL(xpcs_rk_create); [Severity: Low] At this commit xpcs_rk_create() has no in-tree caller, and the new header include/linux/pcs/pcs-xpcs-rk.h declares it without a !CONFIG_PCS_XPCS_ROCKCHIP stub. The caller does arrive later in the same series (rk_pcs_init() in drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c calls it and is installed as plat_dat->pcs_init for PHY_INTERFACE_MODE_SGMII), and DWMAC_ROCKCHIP does "select PCS_XPCS_ROCKCHIP", which forces the tristate to at least the selector's value, so there is no y/m link mismatch either. Noting it only because the symbol is unused at this point in the series. [ ... ] > +static int xpcs_rk_system_suspend(struct device *dev) > +{ > + /* > + * Keep the PD_PIPE power domain on during system suspend. > + * > + * PD_PIPE is shared with SATA/PCIe and would be powered down by > + * genpd once all its consumers are suspended, killing the SerDes > + * and breaking MAC WoL. Mark the XPCS as part of the wakeup path > + * so genpd keeps the domain on. Unconditional because the XPCS > + * core has no callback to convey the MAC WoL state. > + */ > + device_set_wakeup_path(dev); > + return 0; > +} > + > +static int xpcs_rk_system_resume(struct device *dev) > +{ > + return 0; > +} [Severity: High] Does device_set_wakeup_path() actually keep PD_PIPE powered on RK3568? The commit message states: genpd then leaves the domain powered, because the Rockchip power domain driver sets GENPD_FLAG_ACTIVE_WAKEUP on PD_PIPE, which makes genpd check the wakeup path of its consumers during system suspend. PD_PIPE is registered without active wakeup in drivers/pmdomain/rockchip/pm-domains.c: [RK3568_PD_PIPE] = DOMAIN_RK3568("pipe", BIT(8), BIT(11), false, false), The last argument is the wakeup flag, so pd_info->active_wakeup stays false and GENPD_FLAG_ACTIVE_WAKEUP is never set for this domain. genpd only honours the consumer wakeup path when that flag is present: drivers/pmdomain/core.c:genpd_finish_suspend() { if (device_awake_path(dev) && genpd_is_active_wakeup(genpd) && !device_out_band_wakeup(dev)) return 0; } Without the flag, does genpd fall through to genpd_sync_power_off() and power PD_PIPE down, which is exactly the situation the probe comment warns about ("The domain must be powered on before any register access, otherwise the SoC will trigger a synchronous external abort")? dev_pm_genpd_rpm_always_on() does not appear to cover the system-suspend path either; genpd_sync_power_off() only consults GENPD_FLAG_ALWAYS_ON: drivers/pmdomain/core.c:genpd_sync_power_off() { if (!genpd_status_on(genpd) || genpd_is_always_on(genpd)) return; } If the domain is power-cycled, what restores the hardware on the way back up? phy_init() and phy_power_on() are called once from xpcs_rk_probe() via xpcs_rk_serdes_phy_poweron(), xpcs_rk_system_resume() returns 0 without re-initialising the SerDes or the PCS, and drivers/phy/rockchip/phy-rockchip-naneng-combphy.c has no dev_pm_ops at all. Does that leave the combphy and XPCS at power-on-reset defaults (no SerDes configuration, no SerDes TX clock) after resume while the driver, the xpcs core and phylink still assume the programmed configuration is live, and MAC WoL, the stated reason for the mechanism, non-functional? -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260922200336.2201212-1-coiaprant%40gmail.com 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 5DF43C98318 for ; Fri, 25 Sep 2026 02:04: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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Cc:To:From:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5gfm+xll0TaqtWOoLswm/h4fUxgBzs7w2nbKmjXXPH8=; b=zOASg1irj/lU2J Z+b2LazxVtddLVhQAzexmxSaxODz2DIO1IHT4oKaW2frWiOybYAWI6r1vhZq30se0G0U9bCldbeyq eJWrnj9Y4N6z32lz1ML6SHJ4Gc1j8pp2isN9Hw/X3LcHZuhOGiXIGc6beCu5CuXYVLFSVa8joMs0r NLF+sPb70rnLvA2Zp39rLu1xAonDnisBfAPXKoH8nHtu7NKHRl7SYp3vtrC5f/YmFcWfm4KV3eNsp HLx9Edr6Vx9SO6jLTO1SOhtwLliwsiZhNBhEbfv7dUZxwMSN5XV1/cP7PgjKDGM86y+NmHL46dxn9 RYyYzzIshwIXoNjNaWKg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vIY-0000000CW79-3H3R; Fri, 25 Sep 2026 02:04:26 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9vHu-0000000CVmC-37V0; Fri, 25 Sep 2026 02:03:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 233756022F; Fri, 25 Sep 2026 02:03:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 525B41F000FF; Fri, 25 Sep 2026 02:03:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790301825; bh=1tnkY2s2DVVGP0iyZfDIANfzMWWEVKjrYMrG/4nzmSI=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=iNwRdyxillxQFirsyCtD7IeNn3aKwEyrLa/8xQkOE1FR53L3zpRhrjb3YU84g71Kk O+BlUBStNYsiPw4YVVAqX5K8+TPQ5Vd7c7rag+GKjlCY8nXrhIBlkq0MiyeQROUshv YwNcIsGBMKsfMEOqgvN/h/C5d/9BJ9Ximm2efgOU2J3nd7SCumKjV0WthKszIRJljv vSvFBOZ/gLgeLYFYpvoaRILt6Z3iqoi9iNG8U8rZbOXCVpg3WqmNxM1tUCz8Hw9WbW cEW/oJNZ07w9ZZwo2WYUZC27bqJdpeiO33IlUNF/olv9DN0jjEKxi57UVOXTYx1bF/ ZjFWpE6EI1dEg== Subject: Re: [PATCH net-next v10 07/11] net: pcs: xpcs: add Rockchip RK3568 platform glue driver From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, vkoul@kernel.org, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, prabhakar.mahadev-lad.rj@bp.renesas.com, romain.gantois@bootlin.com, hkallweit1@gmail.com, neil.armstrong@linaro.org, linux@armlinux.org.uk, shawn.lin@rock-chips.com, david@ixit.cz, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-renesas-soc@vger.kernel.org Date: Fri, 25 Sep 2026 02:03:43 +0000 Message-ID: <179030182389.2160803.3666914180615619528@kernel.org> In-Reply-To: <20260922200336.2201212-8-coiaprant@gmail.com> References: <20260922200336.2201212-8-coiaprant@gmail.com> X-sashiko-severity: High MIME-Version: 1.0 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 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NiBwb3RlbnRpYWwKaXNzdWUocykgdG8gY29uc2lkZXIuCgpDcml0aWNhbDogMCDCtyBIaWdoOiAx IMK3IE1lZGl1bTogMyDCtyBMb3c6IDIKCklmIHlvdSBiZWxpZXZlIG5vbmUgb2YgdGhlIGlzc3Vl cyBhcmUgbGVnaXRpbWF0ZSwgcGxlYXNlIHJlcGx5IHRvIGVhY2gKaXNzdWUgb2YgTWVkaXVtIHNl dmVyaXR5IG9yIGhpZ2hlciBhbmQgZXhwbGFpbiB3aHkgdGhlIEFJIGlzIHdyb25nLgpJZiBhbnkg b2YgdGhlbSBhcmUgbGVnaXRpbWF0ZSBhbmQgeW91IHBsYW4gdG8gcmVzcGluLCBwbGVhc2UgbGV0 IHBhdGNod29yawprbm93IGJ5IGluY2x1ZGluZyAicHctYm90OiBjciIgYXMgYSBzZXBhcmF0ZSBs aW5lIGF0IHRoZSBlbmQgb2YgeW91ciByZXBseQoob25lIHN1Y2ggcmVwbHkgcGVyIHNlcmllcyBp cyBlbm91Z2gpLgoKLSBbSGlnaF0gSW4gZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMsIHhw Y3Nfcmtfc3lzdGVtX3N1c3BlbmQoKQogIHJlbGllcyBzb2xlbHkgb24gZGV2aWNlX3NldF93YWtl dXBfcGF0aCgpIHRvIGtlZXAgdGhlIFBEX1BJUEUgcG93ZXLigKYKLSBbTWVkaXVtXSB4cGNzX3Jr X21kaW9fd3JpdGVfcmVtYXBwaW5nKCkgKGRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy0KICByay5j OjEzNy0xNTApIGZvcmNlcyB3cml0ZXMgb2YgRFdfVlJfTUlJX0FOX0NUUkws4oCmCi0gW01lZGl1 bV0geHBjc19ya19jcmVhdGUoKSAoZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmM6NTM3LTU0 NikKICBkZXJlZmVyZW5jZXMgdGhlIHN0cnVjdCBkZXZpY2VfbGluayAqIHJldHVybmVkIGJ5IGRl dmljZV9saW5rX2FkZCgp4oCmCi0gW01lZGl1bV0gQ29uY2VybjogeHBjc19ya19jcmVhdGUoKSB2 YWxpZGF0ZXMgdGhlIHN1cHBsaWVyIHdpdGggYW4KICB1bmxvY2tlZCByZWFkIG9mIHRoZSBkcml2 ZXItY29yZS1pbnRlcm5hbCBmaWVsZOKApgotIFtMb3ddIENvbmNlcm46IHhwY3NfcmtfY3JlYXRl KCkgaXMgRVhQT1JUX1NZTUJPTF9HUEwnZWQgYW5kIHB1Ymxpc2hlZAogIGluIGEgbmV3IGhlYWRl ciBpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIHdpdGggbm8gaW4tdHJlZSBjYWxsZXLi gKYKLSBbTG93XSBJbiB4cGNzX3JrX2NyZWF0ZSgpIChkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mt cmsuYzo1MTgtNTU4KSB0aGUKICBjb21tZW50IGp1c3RpZnlpbmcgdGhlIGRldmljZV9saW5rIGhh bmRsaW5nIG1pc3N0YXRlcyB0aGUgQVBJ4oCmCgotLQoKbmV0OiBwY3M6IHhwY3M6IGFkZCBSb2Nr Y2hpcCBSSzM1NjggcGxhdGZvcm0gZ2x1ZSBkcml2ZXIKClRoaXMgYWRkcyBhIFJvY2tjaGlwIFJL MzU2OCBnbHVlIGRyaXZlciBmb3IgdGhlIERlc2lnbldhcmUgWFBDUyB0aGF0CmV4cG9zZXMgdGhl IEFQQjMtbWFwcGVkIENTUnMgdGhyb3VnaCBhIHZpcnR1YWwgTURJTyBidXMsIHNwbGl0cyB0aGUK Z2VuZXJpYyBwbGF0Zm9ybSBnbHVlIGludG8gaXRzIG93biBQQ1NfWFBDU19QTEFURk9STSBtb2R1 bGUsIGFuZCBhZGRzCnBvd2VyLW1hbmFnZW1lbnQgaGFuZGxpbmcgZm9yIHRoZSBzaGFyZWQgUERf UElQRSBwb3dlciBkb21haW4uCgpMaW5rOiBodHRwczovL2RsLnJhZHhhLmNvbS9yb2NrMy9kb2Nz L2h3L2RhdGFzaGVldC9Sb2NrY2hpcCUyMFJLMzU2OCUyMFRSTSUyMFBhcnQxJTIwVjEuMS0yMDIx MDMwMS5wZGYgKFBhZ2UgNTksIENSVV9DTEtTRUxfQ09OMjkpCkxpbms6IGh0dHBzOi8vZGwucmFk eGEuY29tL3JvY2szL2RvY3MvaHcvZGF0YXNoZWV0L1JvY2tjaGlwJTIwUkszNTY4JTIwVFJNJTIw UGFydDIlMjBWMS4xLTIwMjEwMzAxLnBkZiAoUGFnZSAyMDc4KQoKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtcmsu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uMzVlZTk4MGE3 NTllNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtcmsu Ywo+IEBAIC0wLDAgKzEsNjE5IEBACgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IHhwY3NfcmtfbWRp b19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZykKPiArewo+ICsJc3dp dGNoIChkZXYpIHsKPiArCWNhc2UgTURJT19NTURfUE1BUE1EOgo+ICsJCXJldHVybiBST0NLQ0hJ UF9NTURfUE1BUE1EOwo+ICsJY2FzZSBNRElPX01NRF9WRU5EMjoKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogUmVhZHMg YXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQncyByZWFkLW9ubHkgbWlycm9y Owo+ICsJICogb25seSB3cml0ZXMgaGF2ZSB0byBiZSB0YXJnZXRlZCBhdCBNSUkgKHNlZSB0aGUg d3JpdGUgcGF0aCkuCj4gKwkgKi8KPiArCXN3aXRjaCAoYWRkcikgewo+ICsJY2FzZSAwOgo+ICsJ CXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwo+ICsJY2FzZSAxOgo+ICsJCXJldHVybiBST0NLQ0hJ UF9NTURfTUlJMTsKPiArCWNhc2UgMjoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7Cj4g KwljYXNlIDM6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwo+ICsJZGVmYXVsdDoKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3JrX21k aW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQo+ICt7Cj4gKwlz d2l0Y2ggKGRldikgewo+ICsJY2FzZSBNRElPX01NRF9QTUFQTUQ6Cj4gKwkJcmV0dXJuIFJPQ0tD SElQX01NRF9QTUFQTUQ7Cj4gKwljYXNlIE1ESU9fTU1EX1ZFTkQyOgo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUaGVz ZSByZWdpc3RlcnMgcGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJICh0aGUgbWFuYWdlbWVudCBw b3J0KS4KPiArCSAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1pcnJvcnMgb2YgdGhlc2Ug Yml0cywgc28gd3JpdGVzIG11c3QKPiArCSAqIGFsd2F5cyB0YXJnZXQgTUlJOyB0aGUgcmVhZCBw YXRoIHJlbWFwcyBwZXIgYWRkcmVzcyBhbmQgdGhlCj4gKwkgKiBoYXJkd2FyZSByZWRpcmVjdHMg dG8gdGhlIHBvcnQncyBtaXJyb3IuCj4gKwkgKi8KPiArCXN3aXRjaCAocmVnKSB7Cj4gKwljYXNl IERXX1ZSX01JSV9BTl9DVFJMOgo+ICsJY2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6Cj4gKwlj YXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOgo+ICsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMToK PiArCWNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01J STsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9CgpbU2V2ZXJpdHk6IE1lZGl1bV0KUmVh ZHMgYW5kIHdyaXRlcyBvZiB0aGUgc2FtZSAoYWRkciwgcmVnKSBwYWlyIHJlc29sdmUgdG8gZGlm ZmVyZW50IE1NRHMgZm9yCmFkZHJlc3NlcyAxLi4zLiAgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFw cGluZygpIHNlbmRzIEFOX0NUUkwsIEFOX0lOVFJfU1RTLApFRUVfTUNUUkwwLzEgYW5kIERJR19D VFJMMiB0byBST0NLQ0hJUF9NTURfTUlJIGJlZm9yZSB0aGUgcGVyLWFkZHJlc3Mgc3dpdGNoCmlz IHJlYWNoZWQsIHdoaWxlIHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZygpIHJldHVybnMgUk9D S0NISVBfTU1EX01JSTEvMi8zCmZvciB0aG9zZSBzYW1lIHJlZ2lzdGVycy4gIFNpbmNlIHhwY3Nf cmtfYWRkcl9mb3JtYXQoKSBmb2xkcyB0aGUgTU1EIGludG8gdGhlCkFQQiBDU1IgaW5kZXgsIHRo ZSB0d28gYWNjZXNzZXMgbGFuZCBvbiBkaWZmZXJlbnQgcGh5c2ljYWwgb2Zmc2V0cy4KClRoZSB1 bm1vZGlmaWVkIGNvcmUgZG9lcyByZWFkLW1vZGlmeS13cml0ZSBvbiBleGFjdGx5IHRoZXNlIHJl Z2lzdGVycywgZS5nLgppbiB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paSgpOgoKCXJldCA9IHhw Y3NfbW9kaWZ5KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fQ1RSTCwgbWFzaywg dmFsKTsKCS4uLgoJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJf TUlJX0FOX0lOVFJfU1RTLCAwKTsKCmFuZCBpbiB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKToK Cglhbl9pbnRyID0geHBjc19yZWFkKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5f SU5UUl9TVFMpOwoJaWYgKGFuX2ludHIgJiBEV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExUX0lO VFIpIHsKCQlhbl9pbnRyICY9IH5EV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExUX0lOVFI7CgkJ eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCBh bl9pbnRyKTsKCkZvciBwb3J0IDEuLjMsIGlzIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHBvcnQg bWlycm9yIHRoZW4gd3JpdHRlbiBiYWNrIGludG8KcG9ydCAwJ3MgcmVnaXN0ZXIsIGFuZCBpcyB0 aGUgYXV0b25lZy1jb21wbGV0ZSBsYXRjaCB0aGF0IHdhcyBvYnNlcnZlZCBhCmRpZmZlcmVudCBv bmUgZnJvbSB0aGUgbGF0Y2ggdGhhdCBnZXRzIGFja25vd2xlZGdlZD8KClR3byByZWxhdGVkIHF1 ZXN0aW9ucyBvbiB0aGUgc2FtZSBtYXBwaW5nOgoKQU5fQ1RSTCAoUENTIG1vZGUgLyBUWF9DT05G SUcpIGFuZCB0aGUgRUVFIHJlZ2lzdGVycyBiZWNvbWUgb25lIHNoYXJlZAppbnN0YW5jZSBmb3Ig YWxsIGZvdXIgcG9ydHMgd2l0aCBubyBzZXJpYWxpemF0aW9uLCB5ZXQgdGhlIGNvbW1pdCBtZXNz YWdlCnNheXMgcG9ydHMgMC4uMyBjYW4gYmUgcm91dGVkIHRvIEdNQUMwIG9yIEdNQUMxIGluZGVw ZW5kZW50bHkuICBIb3cgaXMKY3Jvc3MtcG9ydCBjbG9iYmVyaW5nIGF2b2lkZWQgd2hlbiB0d28g TUFDcyBjb25maWd1cmUgdGhlaXIgUENTPwoKRFdfVlJfTUlJX0RJR19DVFJMMSwgd2hpY2ggaG9s ZHMgVlJfUlNUIHBsdXMgMkc1X0VOL01BQ19BVVRPX1NXIGFuZCBpcwptb2RpZmllZCBieSB0aGUg Y29yZSBpbiB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paSgpIGFuZAp4cGNzX2NvbmZpZ18yNTAw YmFzZXgoKSwgaXMgbm90IGluIHRoZSBsaXN0IGFuZCB0aGVyZWZvcmUgZ29lcyB0byB0aGUKcGVy LXBvcnQgTU1ELiAgRG9lcyB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbW1lbnQncyBjbGFpbSB0aGF0 IHN1Y2ggdmVuZG9yCnJlZ2lzdGVycyAicGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJIj8KClsg Li4uIF0KCj4gKwkvKgo+ICsJICogRXN0YWJsaXNoIHRoZSBkZXZpY2UgbGluayBiZWZvcmUgcmVh ZGluZyB0aGUgc3VwcGxpZXIncyBkcnZkYXRhLgo+ICsJICogZGV2aWNlX2xpbmtfYWRkKCkgZG9l cyBub3QgZmFpbCBvbiBhIHN1cHBsaWVyIHRoYXQgaXMgdW5iaW5kaW5nOgo+ICsJICogaXQgY3Jl YXRlcyB0aGUgbGluayBpbiBETF9TVEFURV9TVVBQTElFUl9VTkJJTkQuIFdoZXRoZXIgdGhlIGxp bmsKPiArCSAqIGFjdHVhbGx5IHByb3RlY3RzIHRoZSBkcnZkYXRhIGRlcGVuZHMgb24gdGhlIHN1 cHBsaWVyJ3Mgc3RhdGUgYXQKPiArCSAqIGNyZWF0aW9uIHRpbWUuCj4gKwkgKgo+ICsJICogQ2hl Y2sgbGluay0+c3VwcGxpZXItPmxpbmtzLnN0YXR1cyByaWdodCBhZnRlciBjcmVhdGlvbi4gSWYg dGhlCj4gKwkgKiBzdXBwbGllciB3YXMgRExfREVWX0RSSVZFUl9CT1VORCwgdGhlIGxpbmsgaXMg aW4KPiArCSAqIERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIGFuZCBkZXZpY2VfbGlua3NfdW5iaW5k X2NvbnN1bWVycygpIHdpbGwKPiArCSAqIHdhaXQgZm9yIHRoaXMgcHJvYmUgdG8gZmluaXNoIGJl Zm9yZSB1bmJpbmRpbmcgdGhlIHN1cHBsaWVyLCBzbwo+ICsJICogdGhlIGRydmRhdGEgc3RheXMg dmFsaWQgZm9yIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbi4gQW55IG90aGVyCj4gKwkgKiBzdGF0 ZSBtZWFucyB0aGUgc3VwcGxpZXIgaXMgbm90IHVzYWJsZSB5ZXQ7IGRlZmVyIGFuZCByZXRyeS4K PiArCSAqCj4gKwkgKiBUaGUgbGluayBpcyByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhl IGNvbnN1bWVyIGRldmljZSBpcwo+ICsJICogZGVzdHJveWVkIChETF9GTEFHX0FVVE9SRU1PVkVf Q09OU1VNRVIpLCBzbyBubyBleHBsaWNpdAo+ICsJICogZGV2aWNlX2xpbmtfcmVtb3ZlKCkgaXMg bmVlZGVkIG9uIHRoZSBmYWlsdXJlIHBhdGhzLgo+ICsJICovCgpbU2V2ZXJpdHk6IExvd10KVHdv IGRldGFpbHMgaW4gdGhpcyBjb21tZW50IGluIHhwY3NfcmtfY3JlYXRlKCkgbG9vayBpbmFjY3Vy YXRlLgoKaW5jbHVkZS9saW51eC9kZXZpY2UuaCBkZXNjcmliZXMgdGhlIGZsYWcgYXM6CgoJLyog UmVtb3ZlIHRoZSBsaW5rIGF1dG9tYXRpY2FsbHkgb24gY29uc3VtZXIgZHJpdmVyIHVuYmluZC4g Ki8KCnNvIGlzICJyZWxlYXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbnN1bWVyIGRldmlj ZSBpcyBkZXN0cm95ZWQiIHRoZQpyaWdodCB3b3JkaW5nPyAgVGhlIGNvcmUgZHJvcHMgc3VjaCBs aW5rcyBmcm9tIF9fZGV2aWNlX2xpbmtzX25vX2RyaXZlcigpIG9uCmNvbnN1bWVyIHByb2JlIGZh aWx1cmUgb3IgZHJpdmVyIHVuYmluZCwgbm90IGF0IGRldmljZSBkZXN0cnVjdGlvbi4KClRoZSBj bGFpbSB0aGF0IGEgRExfREVWX0RSSVZFUl9CT1VORCBzdXBwbGllciBpbXBsaWVzIERMX1NUQVRF X0NPTlNVTUVSX1BST0JFCm9ubHkgaG9sZHMgd2hpbGUgdGhlIGNvbnN1bWVyIGlzIERMX0RFVl9Q Uk9CSU5HOgoKZHJpdmVycy9iYXNlL2NvcmUuYzpkZXZpY2VfbGlua19pbml0X3N0YXR1cygpIHsK CWNhc2UgRExfREVWX0RSSVZFUl9CT1VORDoKCQlzd2l0Y2ggKGNvbnN1bWVyLT5saW5rcy5zdGF0 dXMpIHsKCQljYXNlIERMX0RFVl9QUk9CSU5HOgoJCQlsaW5rLT5zdGF0dXMgPSBETF9TVEFURV9D T05TVU1FUl9QUk9CRTsKCS4uLgp9CgpBbiBhbHJlYWR5LWJvdW5kIGNvbnN1bWVyIGdldHMgRExf U1RBVEVfQUNUSVZFIGFuZCBhbnl0aGluZyBlbHNlIGdldHMKRExfU1RBVEVfQVZBSUxBQkxFLiAg Q291bGQgdGhlIGNvbW1lbnQgKG9yIHRoZSBrZXJuZWwtZG9jIG9mIHRoZSBleHBvcnRlZApoZWxw ZXIpIHN0YXRlIHRoYXQgeHBjc19ya19jcmVhdGUoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBj b25zdW1lcidzIHByb2JlPwoKPiArCWxpbmsgPSBkZXZpY2VfbGlua19hZGQoZGV2LCAmcGRldi0+ ZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpOwo+ICsJaWYgKCFsaW5rKSB7Cj4gKwkJ cHV0X2RldmljZSgmcGRldi0+ZGV2KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVS KTsKPiArCX0KPiArCj4gKwlpZiAoUkVBRF9PTkNFKGxpbmstPnN1cHBsaWVyLT5saW5rcy5zdGF0 dXMpICE9IERMX0RFVl9EUklWRVJfQk9VTkQpIHsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYp Owo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ICsJfQoKW1NldmVyaXR5OiBN ZWRpdW1dCklzIGl0IHZhbGlkIHRvIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5 IGRldmljZV9saW5rX2FkZCgpIGhlcmU/CkRMX0ZMQUdfU1RBVEVMRVNTIGlzIG5vdCBwYXNzZWQs IHNvIHRoaXMgaXMgYSBtYW5hZ2VkIGxpbmssIGFuZCB0aGUKa2VybmVsLWRvYyBhYm92ZSBkZXZp Y2VfbGlua19hZGQoKSBzYXlzOgoKICogSWYgdGhhdCBmbGFnIGlzIG5vdCBzZXQsIGhvd2V2ZXIs IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBpcyBoYW5kaW5nIHRoZQogKiBtYW5hZ2VtZW50 IG9mIHRoZSBsaW5rIG92ZXIgdG8gdGhlIGRyaXZlciBjb3JlIGVudGlyZWx5IGFuZCBpdHMgcmV0 dXJuIHZhbHVlCiAqIGNhbiBvbmx5IGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgdGhl IGxpbmsgaXMgcHJlc2VudC4KCk5vIGtyZWYgaXMgdGFrZW4gZm9yIG1hbmFnZWQgbGlua3MgKGty ZWZfZ2V0KCkgb25seSBoYXBwZW5zIG9uIHRoZSBzdGF0ZWxlc3MKcGF0aCksIHNvIHRoZSBjYWxs ZXIgb3ducyBubyByZWZlcmVuY2Ugb24gdGhlIGxpbmsgb2JqZWN0LCB3aGljaCB0aGUgY29yZSBj YW4KZnJlZSBmcm9tIGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZCgpIC0+IGtyZWZfcHV0KCZsaW5r LT5rcmVmLApfX2RldmljZV9saW5rX2RlbCkgb3IgZnJvbSBkZXZpY2VfZGVsKCkgLT4gZGV2aWNl X2xpbmtzX3B1cmdlKCkuCgpTaW5jZSBsaW5rLT5zdXBwbGllciBpcyBqdXN0ICZwZGV2LT5kZXYs IGFuZCB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaG9sZHMgYQpyZWZlcmVuY2Ugb24gcGRldiBmcm9t IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoKSwgd291bGQgcmVhZGluZwpwZGV2LT5kZXYubGlua3Mu c3RhdHVzIGluc3RlYWQgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgd2l0aG91dCB0b3VjaGluZyB0aGUK bGluayBvYmplY3Q/Cgo+ICsJcHhwY3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAr CWlmICghcHhwY3MgfHwgIXB4cGNzLT5idXMpIHsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYp Owo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ICsJfQo+ICsKPiArCXhwY3Mg PSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLT5idXMsIChpbnQpcG9ydCk7CgpbU2V2ZXJpdHk6 IE1lZGl1bV0KVGhpcyBpcyBhIGNoZWNrIG9uIGEgZHJpdmVyLWNvcmUtaW50ZXJuYWwgZmllbGQg KGxpbmtzLnN0YXR1cykgZm9sbG93ZWQgYnkKdXNlIG9mIHRoZSBzdXBwbGllcidzIGRldm0tb3du ZWQgZGF0YSAocHhwY3MtPmJ1cywgcHhwY3MtPmVlZV9tdWx0X2ZhY3QpIGFuZApyZWdpc3RyYXRp b24gb2YgYW4gTURJTyBkZXZpY2Ugb24gdGhhdCBidXMuCgpGb3IgdGhlIGluLXRyZWUgY2FsbGVy IHRoZSB3aW5kb3cgZG9lcyBsb29rIGNsb3NlZDogcmtfcGNzX2luaXQoKSBydW5zIGZyb20Kc3Rt bWFjX3Bjc19zZXR1cCgpIGluIF9fc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB0aGUgY29uc3VtZXIg aXMgRExfREVWX1BST0JJTkcKYW5kIHRoZSBuZXcgbGluayBpcyBETF9TVEFURV9DT05TVU1FUl9Q Uk9CRSwgd2hpY2ggbWFrZXMgdGhlIHN1cHBsaWVyIHdhaXQ6Cgpkcml2ZXJzL2Jhc2UvY29yZS5j OmRldmljZV9saW5rc191bmJpbmRfY29uc3VtZXJzKCkgewoJaWYgKHN0YXR1cyA9PSBETF9TVEFU RV9DT05TVU1FUl9QUk9CRSkgewoJCWRldmljZV9saW5rc193cml0ZV91bmxvY2soKTsKCgkJd2Fp dF9mb3JfZGV2aWNlX3Byb2JlKCk7CgkJZ290byBzdGFydDsKCX0KfQoKQnV0IHhwY3NfcmtfY3Jl YXRlKCkgaXMgZXhwb3J0ZWQgYW5kIGRvZXMgbm90IGRvY3VtZW50IHRoYXQgcHJlY29uZGl0aW9u LgpGb3IgYSBjYWxsZXIgb3V0c2lkZSB0aGUgY29uc3VtZXIncyBwcm9iZSB0aGUgbGluayB3b3Vs ZCBiZQpETF9TVEFURV9BVkFJTEFCTEUgb3IgRExfU1RBVEVfQUNUSVZFLCBub3RoaW5nIHdvdWxk IHdhaXQgZm9yIGl0LCBhbmQgdGhlCnN1cHBsaWVyJ3MgZGV2cmVzIGNvdWxkIGJlIHJlbGVhc2Vk IHdoaWxlIHB4cGNzLT5idXMgaXMgaW4gdXNlLiAgQWxzbyBub3RlCnRoYXQgeHBjc19ya19jcmVh dGVfZGF0YSgpIHB1Ymxpc2hlcyBkcnZkYXRhIGJlZm9yZSBidXMgYW5kIGVlZV9tdWx0X2ZhY3QK ZXhpc3Q6CgoJcHhwY3MtPnBkZXYgPSBwZGV2OwoKCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2 LCBweHBjcyk7CgpzbyB0aGUgcmVhZCBoZXJlIHJlbGllcyBlbnRpcmVseSBvbiB0aGUgc3VwcGxp ZXIgYmVpbmcgZnVsbHkgYm91bmQuICBXb3VsZAppdCBiZSBwcmVmZXJhYmxlIHRvIGRvY3VtZW50 IHRoZSBwcm9iZS1jb250ZXh0IHJlcXVpcmVtZW50LCBvciB0byBhdm9pZAppbnNwZWN0aW5nIGxp bmtzLnN0YXR1cyBmcm9tIGEgZHJpdmVyIGFsdG9nZXRoZXI/Cgo+ICtFWFBPUlRfU1lNQk9MX0dQ TCh4cGNzX3JrX2NyZWF0ZSk7CgpbU2V2ZXJpdHk6IExvd10KQXQgdGhpcyBjb21taXQgeHBjc19y a19jcmVhdGUoKSBoYXMgbm8gaW4tdHJlZSBjYWxsZXIsIGFuZCB0aGUgbmV3IGhlYWRlcgppbmNs dWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGRlY2xhcmVzIGl0IHdpdGhvdXQgYQohQ09ORklH X1BDU19YUENTX1JPQ0tDSElQIHN0dWIuICBUaGUgY2FsbGVyIGRvZXMgYXJyaXZlIGxhdGVyIGlu IHRoZSBzYW1lCnNlcmllcyAocmtfcGNzX2luaXQoKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC9z dG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCmNhbGxzIGl0IGFuZCBpcyBpbnN0YWxsZWQgYXMgcGxh dF9kYXQtPnBjc19pbml0IGZvcgpQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpLCBhbmQgRFdNQUNf Uk9DS0NISVAgZG9lcyAic2VsZWN0ClBDU19YUENTX1JPQ0tDSElQIiwgd2hpY2ggZm9yY2VzIHRo ZSB0cmlzdGF0ZSB0byBhdCBsZWFzdCB0aGUgc2VsZWN0b3Incwp2YWx1ZSwgc28gdGhlcmUgaXMg bm8geS9tIGxpbmsgbWlzbWF0Y2ggZWl0aGVyLiAgTm90aW5nIGl0IG9ubHkgYmVjYXVzZSB0aGUK c3ltYm9sIGlzIHVudXNlZCBhdCB0aGlzIHBvaW50IGluIHRoZSBzZXJpZXMuCgpbIC4uLiBdCgo+ ICtzdGF0aWMgaW50IHhwY3Nfcmtfc3lzdGVtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwkvKgo+ICsJICogS2VlcCB0aGUgUERfUElQRSBwb3dlciBkb21haW4gb24gZHVyaW5n IHN5c3RlbSBzdXNwZW5kLgo+ICsJICoKPiArCSAqIFBEX1BJUEUgaXMgc2hhcmVkIHdpdGggU0FU QS9QQ0llIGFuZCB3b3VsZCBiZSBwb3dlcmVkIGRvd24gYnkKPiArCSAqIGdlbnBkIG9uY2UgYWxs IGl0cyBjb25zdW1lcnMgYXJlIHN1c3BlbmRlZCwga2lsbGluZyB0aGUgU2VyRGVzCj4gKwkgKiBh bmQgYnJlYWtpbmcgTUFDIFdvTC4gIE1hcmsgdGhlIFhQQ1MgYXMgcGFydCBvZiB0aGUgd2FrZXVw IHBhdGgKPiArCSAqIHNvIGdlbnBkIGtlZXBzIHRoZSBkb21haW4gb24uICBVbmNvbmRpdGlvbmFs IGJlY2F1c2UgdGhlIFhQQ1MKPiArCSAqIGNvcmUgaGFzIG5vIGNhbGxiYWNrIHRvIGNvbnZleSB0 aGUgTUFDIFdvTCBzdGF0ZS4KPiArCSAqLwo+ICsJZGV2aWNlX3NldF93YWtldXBfcGF0aChkZXYp Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya19zeXN0ZW1fcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KCltTZXZlcml0 eTogSGlnaF0KRG9lcyBkZXZpY2Vfc2V0X3dha2V1cF9wYXRoKCkgYWN0dWFsbHkga2VlcCBQRF9Q SVBFIHBvd2VyZWQgb24gUkszNTY4PyAgVGhlCmNvbW1pdCBtZXNzYWdlIHN0YXRlczoKCglnZW5w ZCB0aGVuIGxlYXZlcyB0aGUgZG9tYWluIHBvd2VyZWQsIGJlY2F1c2UgdGhlIFJvY2tjaGlwIHBv d2VyCglkb21haW4gZHJpdmVyIHNldHMgR0VOUERfRkxBR19BQ1RJVkVfV0FLRVVQIG9uIFBEX1BJ UEUsIHdoaWNoIG1ha2VzCglnZW5wZCBjaGVjayB0aGUgd2FrZXVwIHBhdGggb2YgaXRzIGNvbnN1 bWVycyBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuCgpQRF9QSVBFIGlzIHJlZ2lzdGVyZWQgd2l0aG91 dCBhY3RpdmUgd2FrZXVwIGluCmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvcG0tZG9tYWlucy5j OgoKCVtSSzM1NjhfUERfUElQRV0JPSBET01BSU5fUkszNTY4KCJwaXBlIiwgQklUKDgpLCBCSVQo MTEpLCBmYWxzZSwgZmFsc2UpLAoKVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHdha2V1cCBmbGFn LCBzbyBwZF9pbmZvLT5hY3RpdmVfd2FrZXVwIHN0YXlzIGZhbHNlCmFuZCBHRU5QRF9GTEFHX0FD VElWRV9XQUtFVVAgaXMgbmV2ZXIgc2V0IGZvciB0aGlzIGRvbWFpbi4gIGdlbnBkIG9ubHkKaG9u b3VycyB0aGUgY29uc3VtZXIgd2FrZXVwIHBhdGggd2hlbiB0aGF0IGZsYWcgaXMgcHJlc2VudDoK CmRyaXZlcnMvcG1kb21haW4vY29yZS5jOmdlbnBkX2ZpbmlzaF9zdXNwZW5kKCkgewoJaWYgKGRl dmljZV9hd2FrZV9wYXRoKGRldikgJiYgZ2VucGRfaXNfYWN0aXZlX3dha2V1cChnZW5wZCkgJiYK CSAgICAhZGV2aWNlX291dF9iYW5kX3dha2V1cChkZXYpKQoJCXJldHVybiAwOwp9CgpXaXRob3V0 IHRoZSBmbGFnLCBkb2VzIGdlbnBkIGZhbGwgdGhyb3VnaCB0byBnZW5wZF9zeW5jX3Bvd2VyX29m ZigpIGFuZCBwb3dlcgpQRF9QSVBFIGRvd24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHNpdHVhdGlv biB0aGUgcHJvYmUgY29tbWVudCB3YXJucyBhYm91dAooIlRoZSBkb21haW4gbXVzdCBiZSBwb3dl cmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQwp3aWxs IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCIpPwoKZGV2X3BtX2dlbnBkX3Jw bV9hbHdheXNfb24oKSBkb2VzIG5vdCBhcHBlYXIgdG8gY292ZXIgdGhlIHN5c3RlbS1zdXNwZW5k IHBhdGgKZWl0aGVyOyBnZW5wZF9zeW5jX3Bvd2VyX29mZigpIG9ubHkgY29uc3VsdHMgR0VOUERf RkxBR19BTFdBWVNfT046Cgpkcml2ZXJzL3BtZG9tYWluL2NvcmUuYzpnZW5wZF9zeW5jX3Bvd2Vy X29mZigpIHsKCWlmICghZ2VucGRfc3RhdHVzX29uKGdlbnBkKSB8fCBnZW5wZF9pc19hbHdheXNf b24oZ2VucGQpKQoJCXJldHVybjsKfQoKSWYgdGhlIGRvbWFpbiBpcyBwb3dlci1jeWNsZWQsIHdo YXQgcmVzdG9yZXMgdGhlIGhhcmR3YXJlIG9uIHRoZSB3YXkgYmFjayB1cD8KcGh5X2luaXQoKSBh bmQgcGh5X3Bvd2VyX29uKCkgYXJlIGNhbGxlZCBvbmNlIGZyb20geHBjc19ya19wcm9iZSgpIHZp YQp4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbigpLCB4cGNzX3JrX3N5c3RlbV9yZXN1bWUoKSBy ZXR1cm5zIDAgd2l0aG91dApyZS1pbml0aWFsaXNpbmcgdGhlIFNlckRlcyBvciB0aGUgUENTLCBh bmQKZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgaGFz IG5vIGRldl9wbV9vcHMgYXQgYWxsLgpEb2VzIHRoYXQgbGVhdmUgdGhlIGNvbWJwaHkgYW5kIFhQ Q1MgYXQgcG93ZXItb24tcmVzZXQgZGVmYXVsdHMgKG5vIFNlckRlcwpjb25maWd1cmF0aW9uLCBu byBTZXJEZXMgVFggY2xvY2spIGFmdGVyIHJlc3VtZSB3aGlsZSB0aGUgZHJpdmVyLCB0aGUgeHBj cwpjb3JlIGFuZCBwaHlsaW5rIHN0aWxsIGFzc3VtZSB0aGUgcHJvZ3JhbW1lZCBjb25maWd1cmF0 aW9uIGlzIGxpdmUsIGFuZCBNQUMKV29MLCB0aGUgc3RhdGVkIHJlYXNvbiBmb3IgdGhlIG1lY2hh bmlzbSwgbm9uLWZ1bmN0aW9uYWw/CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9u ZXRkZXYtYWkuYm90cy5saW51eC5kZXYvc2FzaGlrby8jL3BhdGNoc2V0LzIwMjYwOTIyMjAwMzM2 LjIyMDEyMTItMS1jb2lhcHJhbnQlNDBnbWFpbC5jb20KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51 eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK