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 C38CEC6FD19 for ; Thu, 16 Mar 2023 13:35:37 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JlJkh9p8qiDAgJfl1zQo4U0ByoGEuPJIDRj9bncDjHA=; b=TsZzbZGLvPZS2v F6nHyTDuv1s1kEO39wAEDrX186kFsFoJ58hUbU69yECNPvhf+94QPZANqXwIfmAnyhLSl+aIuGleS ILIXlUnoyMPJP2LpriI0D7UuwEzjpbj6y//rp6bOeakqYOj+85VPciYT6WPih+616byRNK8taVpYB N/xwz9mlmZKFgCaHra7yT50sdVCSm5w9lt3E11d/TNmIWQYUMtgUBSntJlkElO2TdkGz4df7K0Ya0 4kq9Z1Kb5G6/Ittw+jqm40PIU10VVZpJRNZ68dKS+N5CwZqDiWqOW8YdFvX3Z6s9p+EVmDMfUSAyc UZkRiIgYEKRnBAiOC5kg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pcnkc-00GXhX-2P; Thu, 16 Mar 2023 13:34:38 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pcnkY-00GXg8-0C; Thu, 16 Mar 2023 13:34:36 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 58C7EB82173; Thu, 16 Mar 2023 13:34:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B5A99C433D2; Thu, 16 Mar 2023 13:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1678973670; bh=qAdEOK4xXU5XBmMSBAwSRPhqlisfmLCDUAov97N9xA4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=AzP5xsEFCnyyDDWq4PkrPTE1OruLkwS3MaOeOW3sTsePcWw+j1BwlFV9rLcOCvu6Z ChB89CxENq6Z/iZl4W5WDQBD22MCitj/+d5Rs/c5c7NLNLBVohrPlLvOOHbntbPUsq QGsumB2Pj36JbzHFK6pA3cTp/6Q2fO9OXcg8q7h1EzrlVPTiA8Dqz7EwdNxmw8P5Qk OabjH8o/RKaAyWwNMpUqhD/1gWbOX5Pc9NOguj8WvIrWYe7O8sLy9YPKjL7m7QjAwu opEmEQTKLcstTx/6llTcOop/2c1wqj0l4zETudIhGzMZJg/xsi9kfi8gjIrMOs0dNJ jIfZ0lKgbMvOA== Date: Thu, 16 Mar 2023 13:34:22 +0000 From: Lee Jones To: Samuel Holland Cc: Pavel Machek , linux-leds@vger.kernel.org, Chen-Yu Tsai , Jernej Skrabec , Albert Ou , Conor Dooley , Guo Ren , Heiko Stuebner , Heiko Stuebner , Jisheng Zhang , Krzysztof Kozlowski , Palmer Dabbelt , Paul Walmsley , Philipp Zabel , Rob Herring , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: Re: [RESEND PATCH v7 2/5] leds: sun50i-a100: New driver for the A100 LED controller Message-ID: <20230316133422.GM9667@google.com> References: <20221231235541.13568-1-samuel@sholland.org> <20221231235541.13568-3-samuel@sholland.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20221231235541.13568-3-samuel@sholland.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230316_063434_383411_62E2DEED X-CRM114-Status: GOOD ( 42.60 ) 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCAzMSBEZWMgMjAyMiwgU2FtdWVsIEhvbGxhbmQgd3JvdGU6Cgo+IFNvbWUgQWxsd2lu bmVyIHN1bnhpIFNvQ3MsIHN0YXJ0aW5nIHdpdGggdGhlIEExMDAsIGNvbnRhaW4gYW4gTEVECj4g Y29udHJvbGxlciBkZXNpZ25lZCB0byBkcml2ZSBSR0IgTEVEIHBpeGVscy4gQWRkIGEgZHJpdmVy IGZvciBpdCB1c2luZwo+IHRoZSBtdWx0aWNvbG9yIExFRCBmcmFtZXdvcmssIGFuZCB3aXRoIExF RHMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUuCj4KPiBBY2tlZC1ieTogSmVybmVqIFNrcmFi ZWMgPGplcm5lai5za3JhYmVjQGdtYWlsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgSG9s bGFuZCA8c2FtdWVsQHNob2xsYW5kLm9yZz4KPiAtLS0KPgo+IENoYW5nZXMgaW4gdjc6Cj4gIC0g VXNlIERFRklORV9TSU1QTEVfREVWX1BNX09QUwo+Cj4gQ2hhbmdlcyBpbiB2NToKPiAgLSBSZW5h bWUgdGhlIGRyaXZlciBSMzI5IC0+IEExMDAsIHNpbmNlIHRoYXQgaXMgdGhlIGFjdHVhbCBvcmln aW5hbAo+ICAgIGltcGxlbWVudGF0aW9uCj4KPiBDaGFuZ2VzIGluIHY0Ogo+ICAtIERlcGVuZCBv biBMRURTX0NMQVNTX01VTFRJQ09MT1IKPgo+IENoYW5nZXMgaW4gdjM6Cj4gIC0gQWRkZWQgdmVu ZG9yIHByZWZpeCB0byB0aW1pbmcvZm9ybWF0IHByb3BlcnRpZXMKPiAgLSBSZW5hbWVkICJmb3Jt YXQiIHByb3BlcnR5IHRvICJwaXhlbC1mb3JtYXQiIGZvciBjbGFyaXR5Cj4gIC0gRHJvcHBlZCAi dmxlZC1zdXBwbHkiIGFzIGl0IGlzIHVucmVsYXRlZCB0byB0aGUgY29udHJvbGxlciBoYXJkd2Fy ZQo+ICAtIENoYW5nZWQgIndyaXRlc2wiIHRvICJpb3dyaXRlMzJfcmVwIiBzbyB0aGUgZHJpdmVy IGJ1aWxkcyBvbiBocHBhCj4KPiBDaGFuZ2VzIGluIHYyOgo+ICAtIFJlbmFtZWQgZnJvbSBzdW54 aS1sZWRjIHRvIHN1bjUwaS1yMzI5LWxlZGMKPiAgLSBBZGRlZCBtaXNzaW5nICJzdGF0aWMiIHRv IGZ1bmN0aW9ucy9nbG9iYWxzIGFzIHJlcG9ydGVkIGJ5IDBkYXkgYm90Cj4KPiAgZHJpdmVycy9s ZWRzL0tjb25maWcgICAgICAgICAgICB8ICAgOSArCj4gIGRyaXZlcnMvbGVkcy9NYWtlZmlsZSAg ICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2xlZHMvbGVkcy1zdW41MGktYTEwMC5jIHwgNTU1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNTY1 IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9sZWRzLXN1 bjUwaS1hMTAwLmMKCk5pY2UgZHJpdmVyLiAgSnVzdCBzb21lIG5pdHMgYmVsb3cuCgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCj4gaW5k ZXggNDk5ZDBmMjE1YThiLi40ZjRjNTE1ZWQ3ZDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9sZWRz L0tjb25maWcKPiArKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwo+IEBAIC0yODEsNiArMjgxLDE1 IEBAIGNvbmZpZyBMRURTX0NPQkFMVF9SQVEKPiAgCWhlbHAKPiAgCSAgVGhpcyBvcHRpb24gZW5h YmxlcyBzdXBwb3J0IGZvciB0aGUgQ29iYWx0IFJhcSBzZXJpZXMgTEVEcy4KPgo+ICtjb25maWcg TEVEU19TVU41MElfQTEwMAo+ICsJdHJpc3RhdGUgIkxFRCBzdXBwb3J0IGZvciBBbGx3aW5uZXIg QTEwMCBSR0IgTEVEIGNvbnRyb2xsZXIiCj4gKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1NfTVVMVElD T0xPUiAmJiBPRgo+ICsJZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVAo+ICsJ aGVscAo+ICsJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBSR0IgTEVEIGNv bnRyb2xsZXIgZm91bmQKPiArCSAgaW4gc29tZSBBbGx3aW5uZXIgc3VueGkgU29DcywgaW5jbHVk ZWluZyBBMTAwLCBSMzI5LCBhbmQgRDEuCj4gKwkgIEl0IHVzZXMgYSBvbmUtd2lyZSBpbnRlcmZh Y2UgdG8gY29udHJvbCB1cCB0byAxMDI0IExFRHMuCgpEaWQgeW91IHJ1biBzcGVsbGNoZWNrIG9u IHRoaXM/Cgo+ICBjb25maWcgTEVEU19TVU5GSVJFCj4gIAl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQg Zm9yIFN1bkZpcmUgc2VydmVycy4iCj4gIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gaW5k ZXggNGZkMmY5MmNkMTk4Li5hNmVlM2Y1Y2Y3YmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9sZWRz L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCj4gQEAgLTc2LDYgKzc2LDcg QEAgb2JqLSQoQ09ORklHX0xFRFNfUFdNKQkJCSs9IGxlZHMtcHdtLm8KPiAgb2JqLSQoQ09ORklH X0xFRFNfUkVHVUxBVE9SKQkJKz0gbGVkcy1yZWd1bGF0b3Iubwo+ICBvYmotJChDT05GSUdfTEVE U19TM0MyNFhYKQkJKz0gbGVkcy1zM2MyNHh4Lm8KPiAgb2JqLSQoQ09ORklHX0xFRFNfU0MyN1hY X0JMVEMpCQkrPSBsZWRzLXNjMjd4eC1ibHRjLm8KPiArb2JqLSQoQ09ORklHX0xFRFNfU1VONTBJ X0ExMDApCQkrPSBsZWRzLXN1bjUwaS1hMTAwLm8KPiAgb2JqLSQoQ09ORklHX0xFRFNfU1VORklS RSkJCSs9IGxlZHMtc3VuZmlyZS5vCj4gIG9iai0kKENPTkZJR19MRURTX1NZU0NPTikJCSs9IGxl ZHMtc3lzY29uLm8KPiAgb2JqLSQoQ09ORklHX0xFRFNfVENBNjUwNykJCSs9IGxlZHMtdGNhNjUw Ny5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXN1bjUwaS1hMTAwLmMgYi9kcml2 ZXJzL2xlZHMvbGVkcy1zdW41MGktYTEwMC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjMwZmE5YmUyY2YyZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2xlZHMvbGVkcy1zdW41MGktYTEwMC5jCj4gQEAgLTAsMCArMSw1NTUgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLy8KPiArLy8gQ29weXJpZ2h0IChjKSAy MDIxLTIwMjIgU2FtdWVsIEhvbGxhbmQgPHNhbXVlbEBzaG9sbGFuZC5vcmc+CgpQbGVhc2UgdXBk YXRlLgoKPiArLy8gUGFydGx5IGJhc2VkIG9uIGRyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5p YS5jLCB3aGljaCBpczoKPiArLy8gICAgIENvcHlyaWdodCAoYykgMjAyMCBieSBNYXJlayBCZWjD um4gPGthYmVsQGtlcm5lbC5vcmc+Cj4gKy8vCgpXaGF0IGlzIHRoaXMgbGluZSBjb21tZW50aW5n PwoKQ291bGQgeW91IHBsZWFzZSByZS1kbyB0aGlzIGhlYWRlciB0byB1c2UgQy1zdHlsZSBjb21t ZW50cyBwbGVhc2UuCgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9kbWEtbWFwcGluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9sZWQtY2xhc3MtbXVsdGljb2xvci5oPgo+ICsjaW5jbHVkZSA8bGludXgvbGVk cy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9wbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Nw aW5sb2NrLmg+Cj4gKwo+ICsjZGVmaW5lIExFRENfQ1RSTF9SRUcJCQkweDAwMDAKPiArI2RlZmlu ZSBMRURDX0NUUkxfUkVHX0RBVEFfTEVOR1RICQkoMHgxZmZmIDw8IDE2KQo+ICsjZGVmaW5lIExF RENfQ1RSTF9SRUdfUkdCX01PREUJCQkoMHg3IDw8IDYpCj4gKyNkZWZpbmUgTEVEQ19DVFJMX1JF R19MRURDX0VOCQkJQklUKDApCj4gKyNkZWZpbmUgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHCTB4 MDAwNAo+ICsjZGVmaW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFR19UMUgJCSgweDNmIDw8IDIx KQo+ICsjZGVmaW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFR19UMUwJCSgweDFmIDw8IDE2KQo+ ICsjZGVmaW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFR19UMEgJCSgweDFmIDw8IDYpCj4gKyNk ZWZpbmUgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHX1QwTAkJKDB4M2YgPDwgMCkKPiArI2RlZmlu ZSBMRURDX1JFU0VUX1RJTUlOR19DVFJMX1JFRwkweDAwMGMKPiArI2RlZmluZSBMRURDX1JFU0VU X1RJTUlOR19DVFJMX1JFR19MRURfTlVNCSgweDNmZiA8PCAwKQo+ICsjZGVmaW5lIExFRENfREFU QV9SRUcJCQkweDAwMTQKPiArI2RlZmluZSBMRURDX0RNQV9DVFJMX1JFRwkJMHgwMDE4Cj4gKyNk ZWZpbmUgTEVEQ19ETUFfQ1RSTF9SRUdfRklGT19UUklHX0xFVkVMCSgweDFmIDw8IDApCj4gKyNk ZWZpbmUgTEVEQ19JTlRfQ1RSTF9SRUcJCTB4MDAxYwo+ICsjZGVmaW5lIExFRENfSU5UX0NUUkxf UkVHX0dMT0JBTF9JTlRfRU4JCUJJVCg1KQo+ICsjZGVmaW5lIExFRENfSU5UX0NUUkxfUkVHX0ZJ Rk9fQ1BVUkVRX0lOVF9FTglCSVQoMSkKPiArI2RlZmluZSBMRURDX0lOVF9DVFJMX1JFR19UUkFO U19GSU5JU0hfSU5UX0VOCUJJVCgwKQo+ICsjZGVmaW5lIExFRENfSU5UX1NUU19SRUcJCTB4MDAy MAo+ICsjZGVmaW5lIExFRENfSU5UX1NUU19SRUdfRklGT19DUFVSRVFfSU5UCUJJVCgxKQo+ICsj ZGVmaW5lIExFRENfSU5UX1NUU19SRUdfVFJBTlNfRklOSVNIX0lOVAlCSVQoMCkKPiArCj4gKyNk ZWZpbmUgTEVEQ19GSUZPX0RFUFRICQkJMzIKPiArI2RlZmluZSBMRURDX01BWF9MRURTCQkJMTAy NAo+ICsKPiArI2RlZmluZSBMRURTX1RPX0JZVEVTKG4pCQkoKG4pICogc2l6ZW9mKHUzMikpCj4g Kwo+ICtzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY19sZWQgewoKSXMgdGhpcyBpbmZvcm1hdGlvbiBs aWtlbHkgdG8gY2hhbmdlIG9uIGEgcGVyLUxFRCBiYXNpcz8KCj4gKwlzdHJ1Y3QgbGVkX2NsYXNz ZGV2X21jIG1jX2NkZXY7Cj4gKwlzdHJ1Y3QgbWNfc3VibGVkIHN1YmxlZF9pbmZvWzNdOwoKV2hh dCBpcyAzPwoKPiArfTsKPiArCj4gKyNkZWZpbmUgdG9fbGVkY19sZWQobWMpIGNvbnRhaW5lcl9v ZihtYywgc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfbGVkLCBtY19jZGV2KQo+ICsKPiArc3RydWN0 IHN1bjUwaV9hMTAwX2xlZGNfdGltaW5nIHsKPiArCXUzMiB0MGhfbnM7Cj4gKwl1MzIgdDBsX25z Owo+ICsJdTMyIHQxaF9uczsKPiArCXUzMiB0MWxfbnM7Cj4gKwl1MzIgdHJlc2V0X25zOwo+ICt9 Owo+ICsKPiArc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgewo+ICsJc3RydWN0IGRldmljZSAqZGV2 Owo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJc3RydWN0IGNsayAqYnVzX2NsazsKPiArCXN0 cnVjdCBjbGsgKm1vZF9jbGs7Cj4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7Cj4gKwo+ ICsJdTMyICpidWZmZXI7Cj4gKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOwo+ICsJZG1hX2Fk ZHJfdCBkbWFfaGFuZGxlOwo+ICsJaW50IHBpb19sZW5ndGg7Cj4gKwlpbnQgcGlvX29mZnNldDsK PiArCj4gKwlzcGlubG9ja190IGxvY2s7Cj4gKwlpbnQgbmV4dF9sZW5ndGg7Cj4gKwlib29sIHhm ZXJfYWN0aXZlOwo+ICsKPiArCXUzMiBmb3JtYXQ7Cj4gKwlzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVk Y190aW1pbmcgdGltaW5nOwo+ICsKPiArCWludCBudW1fbGVkczsKPiArCXN0cnVjdCBzdW41MGlf YTEwMF9sZWRjX2xlZCBsZWRzW107Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN1bjUwaV9hMTAw X2xlZGNfZG1hX3hmZXIoc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYsIGludCBsZW5ndGgp Cj4gK3sKPiArCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKPiArCWRtYV9j b29raWVfdCBjb29raWU7Cj4gKwo+ICsJZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3Npbmds ZShwcml2LT5kbWFfY2hhbiwgcHJpdi0+ZG1hX2hhbmRsZSwKPiArCQkJCQkgICBMRURTX1RPX0JZ VEVTKGxlbmd0aCksCj4gKwkJCQkJICAgRE1BX01FTV9UT19ERVYsIDApOwo+ICsJaWYgKCFkZXNj KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWNvb2tpZSA9IGRtYWVuZ2luZV9zdWJtaXQo ZGVzYyk7Cj4gKwlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKQo+ICsJCXJldHVybiAtRUlP Owo+ICsKPiArCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHByaXYtPmRtYV9jaGFuKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3VuNTBpX2ExMDBfbGVkY19waW9f eGZlcihzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkYyAqcHJpdiwgaW50IGxlbmd0aCkKPiArewo+ICsJ dTMyIGJ1cnN0LCBvZmZzZXQsIHZhbDsKPiArCj4gKwlpZiAobGVuZ3RoKSB7Cj4gKwkJLyogTmV3 IHRyYW5zZmVyIChGSUZPIGlzIGVtcHR5KS4gKi8KPiArCQlvZmZzZXQgPSAwOwo+ICsJCWJ1cnN0 ICA9IG1pbihsZW5ndGgsIExFRENfRklGT19ERVBUSCk7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIEV4 aXN0aW5nIHRyYW5zZmVyIChGSUZPIGlzIGhhbGYtZnVsbCkuICovCj4gKwkJbGVuZ3RoID0gcHJp di0+cGlvX2xlbmd0aDsKPiArCQlvZmZzZXQgPSBwcml2LT5waW9fb2Zmc2V0Owo+ICsJCWJ1cnN0 ICA9IG1pbihsZW5ndGgsIExFRENfRklGT19ERVBUSCAvIDIpOwoKRGlkbid0IHdlIGFscmVhZHkg ZXN0YWJsaXNoIHRoYXQgbGVuZ3RoIHdhcyAwPwoKPiArCX0KPiArCj4gKwlpb3dyaXRlMzJfcmVw KHByaXYtPmJhc2UgKyBMRURDX0RBVEFfUkVHLCBwcml2LT5idWZmZXIgKyBvZmZzZXQsIGJ1cnN0 KTsKPiArCj4gKwlpZiAoYnVyc3QgPCBsZW5ndGgpIHsKPiArCQlwcml2LT5waW9fbGVuZ3RoID0g bGVuZ3RoIC0gYnVyc3Q7Cj4gKwkJcHJpdi0+cGlvX29mZnNldCA9IG9mZnNldCArIGJ1cnN0Owo+ ICsKPiArCQlpZiAoIW9mZnNldCkgewo+ICsJCQl2YWwgPSByZWFkbChwcml2LT5iYXNlICsgTEVE Q19JTlRfQ1RSTF9SRUcpOwo+ICsJCQl2YWwgfD0gTEVEQ19JTlRfQ1RSTF9SRUdfRklGT19DUFVS RVFfSU5UX0VOOwo+ICsJCQl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19JTlRfQ1RSTF9S RUcpOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJLyogRGlzYWJsZSB0aGUgcmVxdWVzdCBJUlEg b25jZSBhbGwgZGF0YSBpcyB3cml0dGVuLiAqLwo+ICsJCXZhbCA9IHJlYWRsKHByaXYtPmJhc2Ug KyBMRURDX0lOVF9DVFJMX1JFRyk7Cj4gKwkJdmFsICY9IH5MRURDX0lOVF9DVFJMX1JFR19GSUZP X0NQVVJFUV9JTlRfRU47Cj4gKwkJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5UX0NU UkxfUkVHKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3VuNTBpX2ExMDBfbGVkY19z dGFydF94ZmVyKHN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2LAo+ICsJCQkJCWludCBsZW5n dGgpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJZGV2X2RiZyhwcml2LT5kZXYsICJVcGRhdGlu ZyAlZCBMRURzXG4iLCBsZW5ndGgpOwoKSG93IHVzZWZ1bCBpcyB0aGlzLCByZWFsbHk/CgpDb3Vs ZCB5b3UgY29uc2lkZXIgcmVtb3ZpbmcgaXQ/Cgo+ICsJdmFsID0gcmVhZGwocHJpdi0+YmFzZSAr IExFRENfQ1RSTF9SRUcpOwo+ICsJdmFsICY9IH5MRURDX0NUUkxfUkVHX0RBVEFfTEVOR1RIOwo+ ICsJdmFsIHw9IGxlbmd0aCA8PCAxNiB8IExFRENfQ1RSTF9SRUdfTEVEQ19FTjsKCldoeSAxNj8g IFBsZWFzZSBjb25zaWRlciBkZWZpbmluZyBhbGwgbWFnaWMgbnVtYmVycy4KCiAgQkxBSF9CTEFI X1NISUZUID8KCj4gKwl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19DVFJMX1JFRyk7Cj4g Kwo+ICsJaWYgKGxlbmd0aCA+IExFRENfRklGT19ERVBUSCkgewo+ICsJCWludCByZXQgPSBzdW41 MGlfYTEwMF9sZWRjX2RtYV94ZmVyKHByaXYsIGxlbmd0aCk7CgpMb29rcyBvZGQuICBJdCdzIHdh eSBtb3JlIGNvbW1vbiB0byBzZXBhcmF0ZSB0aGUgY2FsbCBmcm9tIHRoZSBkZWNsYXJhdGlvbi4K Cj4gKwkJaWYgKCFyZXQpCj4gKwkJCXJldHVybjsKPiArCj4gKwkJZGV2X3dhcm4ocHJpdi0+ZGV2 LCAiRmFpbGVkIHRvIHNldCB1cCBETUE6ICVkXG4iLCByZXQpOwoKVGhpcyBsb29rcyBsaWtlIGFu IGVycm9yLgoKUGxlYXNlIHRlbGwgdGhlIHVzZXIgd2UncmUgZmFsbGluZyBiYWNrIHRvIFBJTy4K Cj4gKwl9Cj4gKwo+ICsJc3VuNTBpX2ExMDBfbGVkY19waW9feGZlcihwcml2LCBsZW5ndGgpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuNTBpX2ExMDBfbGVkY19pcnEoaW50IGly cSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkYyAqcHJpdiA9 IGRldl9pZDsKClRoaXMgaXMgY2xlYXJseSBub3QgYSBkZWZfaWQuICAnZGF0YScgbG9va3MgbGlr ZSBhIGNvbW1vbiBhbHRlcm5hdGl2ZS4KCj4gKwl1MzIgdmFsOwo+ICsKPiArCXZhbCA9IHJlYWRs KHByaXYtPmJhc2UgKyBMRURDX0lOVF9TVFNfUkVHKTsKCid2YWwnIGlzIGEgdGVycmlibGUgdmFy aWFibGUgbmFtZS4gICdzdGF0dXMnPwoKPiArCWlmICh2YWwgJiBMRURDX0lOVF9TVFNfUkVHX1RS QU5TX0ZJTklTSF9JTlQpIHsKPiArCQlpbnQgbmV4dF9sZW5ndGg7Cj4gKwo+ICsJCS8qIFN0YXJ0 IHRoZSBuZXh0IHRyYW5zZmVyIGlmIG5lZWRlZC4gKi8KPiArCQlzcGluX2xvY2soJnByaXYtPmxv Y2spOwo+ICsJCW5leHRfbGVuZ3RoID0gcHJpdi0+bmV4dF9sZW5ndGg7Cj4gKwkJaWYgKG5leHRf bGVuZ3RoKQo+ICsJCQlwcml2LT5uZXh0X2xlbmd0aCA9IDA7Cj4gKwkJZWxzZQo+ICsJCQlwcml2 LT54ZmVyX2FjdGl2ZSA9IGZhbHNlOwo+ICsJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKPiAr Cj4gKwkJaWYgKG5leHRfbGVuZ3RoKQo+ICsJCQlzdW41MGlfYTEwMF9sZWRjX3N0YXJ0X3hmZXIo cHJpdiwgbmV4dF9sZW5ndGgpOwo+ICsJfSBlbHNlIGlmICh2YWwgJiBMRURDX0lOVF9TVFNfUkVH X0ZJRk9fQ1BVUkVRX0lOVCkgewo+ICsJCS8qIENvbnRpbnVlIHRoZSBjdXJyZW50IHRyYW5zZmVy LiAqLwo+ICsJCXN1bjUwaV9hMTAwX2xlZGNfcGlvX3hmZXIocHJpdiwgMCk7Cj4gKwl9Cj4gKwo+ ICsJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5UX1NUU19SRUcpOwoKRGlkICd2YWwn IGNoYW5nZT8gIElmIHRoaXMgaXMgaW50ZW50aW9uYWwsIHBlcmhhcHMgYSBjb21tZW50IHRvIGNs YXJpZnkuCgo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBz dW41MGlfYTEwMF9sZWRjX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYs Cj4gKwkJCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKPiArewo+ICsJc3Ry dWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY2Rldi0+ZGV2LT5w YXJlbnQpOwo+ICsJc3RydWN0IGxlZF9jbGFzc2Rldl9tYyAqbWNfY2RldiA9IGxjZGV2X3RvX21j Y2RldihjZGV2KTsKPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjX2xlZCAqbGVkID0gdG9fbGVk Y19sZWQobWNfY2Rldik7Cj4gKwlpbnQgYWRkciA9IGxlZCAtIHByaXYtPmxlZHM7CgpOb3QgcmVh bGx5IGFuIGFkZHJlc3MgaXMgaXQ/ICAnb2Zmc2V0JyBvciBzb21ldGhpbmcgYmV0dGVyPwoKPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlib29sIHhmZXJfYWN0aXZlOwo+ICsJaW50IG5leHRf bGVuZ3RoOwo+ICsKPiArCWxlZF9tY19jYWxjX2NvbG9yX2NvbXBvbmVudHMobWNfY2RldiwgYnJp Z2h0bmVzcyk7Cj4gKwo+ICsJcHJpdi0+YnVmZmVyW2FkZHJdID0gbGVkLT5zdWJsZWRfaW5mb1sw XS5icmlnaHRuZXNzIDw8IDE2IHwKPiArCQkJICAgICBsZWQtPnN1YmxlZF9pbmZvWzFdLmJyaWdo dG5lc3MgPDwgIDggfAo+ICsJCQkgICAgIGxlZC0+c3VibGVkX2luZm9bMl0uYnJpZ2h0bmVzczsK PiArCj4gKwlkZXZfZGJnKHByaXYtPmRldiwgIkxFRCAlZCAtPiAjJTA2eFxuIiwgYWRkciwgcHJp di0+YnVmZmVyW2FkZHJdKTsKCkFzIGFib3ZlLgoKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2 LT5sb2NrLCBmbGFncyk7Cj4gKwluZXh0X2xlbmd0aCA9IG1heChwcml2LT5uZXh0X2xlbmd0aCwg YWRkciArIDEpOwo+ICsJeGZlcl9hY3RpdmUgPSBwcml2LT54ZmVyX2FjdGl2ZTsKPiArCWlmICh4 ZmVyX2FjdGl2ZSkKPiArCQlwcml2LT5uZXh0X2xlbmd0aCA9IG5leHRfbGVuZ3RoOwo+ICsJZWxz ZQo+ICsJCXByaXYtPnhmZXJfYWN0aXZlID0gdHJ1ZTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKCkNyYW1wZWQgY29kZSBpcyBub3QgZWFzeSB0byByZWFk LiAgUGxlYXNlIGNvbnNpZGVyIHNvbWUgJ1xuJ3MuCgo+ICsJaWYgKCF4ZmVyX2FjdGl2ZSkKPiAr CQlzdW41MGlfYTEwMF9sZWRjX3N0YXJ0X3hmZXIocHJpdiwgbmV4dF9sZW5ndGgpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3VuNTBpX2ExMDBfbGVkY19mb3JtYXRzW10g PSB7Cj4gKwkicmdiIiwKPiArCSJyYmciLAo+ICsJImdyYiIsCj4gKwkiZ2JyIiwKPiArCSJicmci LAo+ICsJImJnciIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN1bjUwaV9hMTAwX2xlZGNfcGFy c2VfZm9ybWF0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gKwkJCQkJIHN0cnVjdCBz dW41MGlfYTEwMF9sZWRjICpwcml2KQo+ICt7Cj4gKwljb25zdCBjaGFyICpmb3JtYXQgPSAiZ3Ji IjsKPiArCXUzMiBpOwo+ICsKPiArCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiYWxsd2lu bmVyLHBpeGVsLWZvcm1hdCIsICZmb3JtYXQpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHN1bjUwaV9hMTAwX2xlZGNfZm9ybWF0cyk7ICsraSkgewoKRG9lcyB0aGUgcHJlLWlu Y3JlbWVudCBob2xkIGFueSBzaWduaWZpY2FuY2U/CgpJZiBub3QsIHBsZWFzZSB1c2UgdGhlIG1v cmUgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHBvc3QtaW5jcmVtZW50aW5nLgoKPiArCQlpZiAo IXN0cmNtcChmb3JtYXQsIHN1bjUwaV9hMTAwX2xlZGNfZm9ybWF0c1tpXSkpIHsKPiArCQkJcHJp di0+Zm9ybWF0ID0gaTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRldl9l cnIocHJpdi0+ZGV2LCAiQmFkIHBpeGVsIGZvcm1hdCAnJXMnXG4iLCBmb3JtYXQpOwo+ICsKPiAr CXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdW41MGlfYTEwMF9sZWRj X3NldF9mb3JtYXQoc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYpCj4gK3sKPiArCXUzMiB2 YWw7Cj4gKwo+ICsJdmFsID0gcmVhZGwocHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOwo+ICsJ dmFsICY9IH5MRURDX0NUUkxfUkVHX1JHQl9NT0RFOwo+ICsJdmFsIHw9IHByaXYtPmZvcm1hdCA8 PCA2Owo+ICsJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfdGltaW5nIHN1bjUwaV9h MTAwX2xlZGNfZGVmYXVsdF90aW1pbmcgPSB7Cj4gKwkudDBoX25zID0gMzM2LAo+ICsJLnQwbF9u cyA9IDg0MCwKPiArCS50MWhfbnMgPSA4ODIsCj4gKwkudDFsX25zID0gMjk0LAo+ICsJLnRyZXNl dF9ucyA9IDMwMDAwMCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgc3VuNTBpX2ExMDBfbGVkY19w YXJzZV90aW1pbmcoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKPiArCQkJCQkgc3RydWN0 IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYpCj4gK3sKPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRj X3RpbWluZyAqdGltaW5nID0gJnByaXYtPnRpbWluZzsKPiArCj4gKwkqdGltaW5nID0gc3VuNTBp X2ExMDBfbGVkY19kZWZhdWx0X3RpbWluZzsKPiArCj4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgImFsbHdpbm5lcix0MGgtbnMiLCAmdGltaW5nLT50MGhfbnMpOwo+ICsJb2ZfcHJvcGVydHlf cmVhZF91MzIobnAsICJhbGx3aW5uZXIsdDBsLW5zIiwgJnRpbWluZy0+dDBsX25zKTsKPiArCW9m X3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWxsd2lubmVyLHQxaC1ucyIsICZ0aW1pbmctPnQxaF9u cyk7Cj4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsbHdpbm5lcix0MWwtbnMiLCAmdGlt aW5nLT50MWxfbnMpOwo+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhbGx3aW5uZXIsdHJl c2V0LW5zIiwgJnRpbWluZy0+dHJlc2V0X25zKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgc3VuNTBpX2ExMDBfbGVkY19zZXRfdGltaW5nKHN0cnVjdCBzdW41MGlf YTEwMF9sZWRjICpwcml2KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY190 aW1pbmcgKnRpbWluZyA9ICZwcml2LT50aW1pbmc7Cj4gKwl1bnNpZ25lZCBsb25nIG1vZF9mcmVx ID0gY2xrX2dldF9yYXRlKHByaXYtPm1vZF9jbGspOwo+ICsJdTMyIGN5Y2xlX25zID0gTlNFQ19Q RVJfU0VDIC8gbW9kX2ZyZXE7Cj4gKwl1MzIgdmFsOwoKJ3RpbWluZycKCj4gKwl2YWwgPSAodGlt aW5nLT50MWhfbnMgLyBjeWNsZV9ucykgPDwgMjEgfAo+ICsJICAgICAgKHRpbWluZy0+dDFsX25z IC8gY3ljbGVfbnMpIDw8IDE2IHwKPiArCSAgICAgICh0aW1pbmctPnQwaF9ucyAvIGN5Y2xlX25z KSA8PCAgNiB8Cj4gKwkgICAgICAodGltaW5nLT50MGxfbnMgLyBjeWNsZV9ucyk7Cj4gKwl3cml0 ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHKTsKPiArCj4gKwl2 YWwgPSAodGltaW5nLT50cmVzZXRfbnMgLyBjeWNsZV9ucykgPDwgMTYgfAo+ICsJICAgICAgKHBy aXYtPm51bV9sZWRzIC0gMSk7Cj4gKwl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19SRVNF VF9USU1JTkdfQ1RSTF9SRUcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHN1bjUwaV9hMTAwX2xl ZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHN1bjUwaV9hMTAw X2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXUzMiB2YWw7Cj4gKwlpbnQg cmV0OwoKJ2NvbnRyb2wnCgo+ICsJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5y ZXNldCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKHByaXYtPmJ1c19jbGspOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9h c3NlcnRfcmVzZXQ7Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPm1vZF9j bGspOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9kaXNhYmxlX2J1c19jbGs7Cj4gKwo+ICsJ c3VuNTBpX2ExMDBfbGVkY19zZXRfZm9ybWF0KHByaXYpOwo+ICsJc3VuNTBpX2ExMDBfbGVkY19z ZXRfdGltaW5nKHByaXYpOwo+ICsKPiArCS8qIFRoZSB0cmlnZ2VyIGxldmVsIG11c3QgYmUgYXQg bGVhc3QgdGhlIGJ1cnN0IGxlbmd0aC4gKi8KPiArCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBM RURDX0RNQV9DVFJMX1JFRyk7Cj4gKwl2YWwgJj0gfkxFRENfRE1BX0NUUkxfUkVHX0ZJRk9fVFJJ R19MRVZFTDsKPiArCXZhbCB8PSBMRURDX0ZJRk9fREVQVEggLyAyOwo+ICsJd3JpdGVsKHZhbCwg cHJpdi0+YmFzZSArIExFRENfRE1BX0NUUkxfUkVHKTsKPiArCj4gKwl2YWwgPSBMRURDX0lOVF9D VFJMX1JFR19HTE9CQUxfSU5UX0VOIHwKPiArCSAgICAgIExFRENfSU5UX0NUUkxfUkVHX1RSQU5T X0ZJTklTSF9JTlRfRU47Cj4gKwl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19JTlRfQ1RS TF9SRUcpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2Rpc2FibGVfYnVzX2NsazoKPiAr CWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5idXNfY2xrKTsKPiArZXJyX2Fzc2VydF9yZXNl dDoKPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnJlc2V0KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHN1bjUwaV9hMTAwX2xlZGNfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2ID0g ZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYt Pm1vZF9jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmJ1c19jbGspOwo+ICsJ cmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cmVzZXQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdW41MGlfYTEwMF9sZWRjX2RtYV9jbGVhbnVwKHZvaWQgKmRh dGEpCj4gK3sKPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2ID0gZGF0YTsKPiArCXN0 cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBkbWFlbmdpbmVfZ2V0X2RtYV9kZXZpY2UocHJpdi0+ZG1h X2NoYW4pOwoKV2hhdCBoYXBwZW5zIGlmIHRoaXMgaXMgTlVMTCBvciBhbiBlcnJvcj8KCj4gKwlp ZiAocHJpdi0+YnVmZmVyKQo+ICsJCWRtYV9mcmVlX3djKGRtYV9kZXYsIExFRFNfVE9fQllURVMo cHJpdi0+bnVtX2xlZHMpLAo+ICsJCQkgICAgcHJpdi0+YnVmZmVyLCBwcml2LT5kbWFfaGFuZGxl KTsKCidcbicKCj4gKwlkbWFfcmVsZWFzZV9jaGFubmVsKHByaXYtPmRtYV9jaGFuKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBzdW41MGlfYTEwMF9sZWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2 LT5kZXYub2Zfbm9kZTsKPiArCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIGRtYV9jZmcgPSB7fTsK PiArCXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YSA9IHt9Owo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7Cj4gKwlz dHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkYyAqcHJpdjsKPiArCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+ ICsJaW50IGNvdW50LCBpcnEsIHJldDsKPiArCj4gKwljb3VudCA9IG9mX2dldF9hdmFpbGFibGVf Y2hpbGRfY291bnQobnApOwo+ICsJaWYgKCFjb3VudCkKPiArCQlyZXR1cm4gLUVOT0RFVjsKCidc bicKCj4gKwlpZiAoY291bnQgPiBMRURDX01BWF9MRURTKSB7Cj4gKwkJZGV2X2VycihkZXYsICJU b28gbWFueSBMRURzISAobWF4IGlzICVkKVxuIiwgTEVEQ19NQVhfTEVEUyk7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHN0cnVjdF9z aXplKHByaXYsIGxlZHMsIGNvdW50KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXByaXYpCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcHJpdi0+ZGV2ID0gZGV2Owo+ICsJcHJpdi0+bnVtX2xl ZHMgPSBjb3VudDsKPiArCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKPiArCWRldl9zZXRf ZHJ2ZGF0YShkZXYsIHByaXYpOwo+ICsKPiArCXJldCA9IHN1bjUwaV9hMTAwX2xlZGNfcGFyc2Vf Zm9ybWF0KG5wLCBwcml2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwly ZXQgPSBzdW41MGlfYTEwMF9sZWRjX3BhcnNlX3RpbWluZyhucCwgcHJpdik7Cj4gKwlpZiAocmV0 KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcHJpdi0+YmFzZSA9IGRldm1fcGxhdGZvcm1fZ2V0 X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZtZW0pOwo+ICsJaWYgKElTX0VSUihwcml2 LT5iYXNlKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2LT5iYXNlKTsKPiArCj4gKwlwcml2LT5i dXNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImJ1cyIpOwo+ICsJaWYgKElTX0VSUihwcml2LT5i dXNfY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2LT5idXNfY2xrKTsKPiArCj4gKwlwcml2 LT5tb2RfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1vZCIpOwo+ICsJaWYgKElTX0VSUihwcml2 LT5tb2RfY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2LT5tb2RfY2xrKTsKPiArCj4gKwlw cml2LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7 Cj4gKwlpZiAoSVNfRVJSKHByaXYtPnJlc2V0KSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2LT5y ZXNldCk7Cj4gKwo+ICsJcHJpdi0+ZG1hX2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgInR4 Iik7Cj4gKwlpZiAoSVNfRVJSKHByaXYtPmRtYV9jaGFuKSkKPiArCQlyZXR1cm4gUFRSX0VSUihw cml2LT5kbWFfY2hhbik7Cj4gKwo+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRl diwgc3VuNTBpX2ExMDBfbGVkY19kbWFfY2xlYW51cCwgcHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJZG1hX2NmZy5kc3RfYWRkcgk9IG1lbS0+c3RhcnQgKyBMRURD X0RBVEFfUkVHOwo+ICsJZG1hX2NmZy5kc3RfYWRkcl93aWR0aAk9IERNQV9TTEFWRV9CVVNXSURU SF80X0JZVEVTOwo+ICsJZG1hX2NmZy5kc3RfbWF4YnVyc3QJPSBMRURDX0ZJRk9fREVQVEggLyAy OwoKJ1xuJwoKPiArCXJldCA9IGRtYWVuZ2luZV9zbGF2ZV9jb25maWcocHJpdi0+ZG1hX2NoYW4s ICZkbWFfY2ZnKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlwcml2LT5i dWZmZXIgPSBkbWFfYWxsb2Nfd2MoZG1hZW5naW5lX2dldF9kbWFfZGV2aWNlKHByaXYtPmRtYV9j aGFuKSwKPiArCQkJCSAgICBMRURTX1RPX0JZVEVTKHByaXYtPm51bV9sZWRzKSwKPiArCQkJCSAg ICAmcHJpdi0+ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXByaXYtPmJ1ZmZlcikK PiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYs IDApOwo+ICsJaWYgKGlycSA8IDApCj4gKwkJcmV0dXJuIGlycTsKPiArCj4gKwlyZXQgPSBkZXZt X3JlcXVlc3RfaXJxKGRldiwgaXJxLCBzdW41MGlfYTEwMF9sZWRjX2lycSwKPiArCQkJICAgICAg IDAsIGRldl9uYW1lKGRldiksIHByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXJldCA9IHN1bjUwaV9hMTAwX2xlZGNfcmVzdW1lKGRldik7Cj4gKwlpZiAocmV0KQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUo bnAsIGNoaWxkKSB7Cj4gKwkJc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfbGVkICpsZWQ7Cj4gKwkJ c3RydWN0IGxlZF9jbGFzc2RldiAqY2RldjsKPiArCQl1MzIgYWRkciwgY29sb3I7Cj4gKwo+ICsJ CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJmFkZHIpOwo+ICsJCWlm IChyZXQgfHwgYWRkciA+PSBjb3VudCkgewo+ICsJCQlkZXZfZXJyKGRldiwgIkxFRCAncmVnJyB2 YWx1ZXMgbXVzdCBiZSBmcm9tIDAgdG8gJWRcbiIsCgpEb2Vzbid0IHNvdW5kcyBsaWtlIGFuIGFk ZHJlc3MuCgo+ICsJCQkJcHJpdi0+bnVtX2xlZHMgLSAxKTsKCjEwMC1jaGFycyAtIG5vIG5lZWQg dG8gd3JhcC4KClBsZWFzZSBhcHBseSB0aGlzIGV2ZXJ5d2hlcmUuCgo+ICsJCQlyZXQgPSAtRUlO VkFMOwo+ICsJCQlnb3RvIGVycl9wdXRfY2hpbGQ7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgImNvbG9yIiwgJmNvbG9yKTsKPiArCQlpZiAocmV0IHx8 IGNvbG9yICE9IExFRF9DT0xPUl9JRF9SR0IpIHsKPiArCQkJZGV2X2VycihkZXYsICJMRUQgJ2Nv bG9yJyBtdXN0IGJlIExFRF9DT0xPUl9JRF9SR0JcbiIpOwoKVGhlbiB3aHkgZXZlbiBwcm92aWRl IHRoZSBvcHRpb24/Cgo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlnb3RvIGVycl9wdXRfY2hp bGQ7Cj4gKwkJfQo+ICsKPiArCQlsZWQgPSAmcHJpdi0+bGVkc1thZGRyXTsKPiArCj4gKwkJbGVk LT5zdWJsZWRfaW5mb1swXS5jb2xvcl9pbmRleCA9IExFRF9DT0xPUl9JRF9SRUQ7Cj4gKwkJbGVk LT5zdWJsZWRfaW5mb1swXS5jaGFubmVsID0gMDsKPiArCQlsZWQtPnN1YmxlZF9pbmZvWzFdLmNv bG9yX2luZGV4ID0gTEVEX0NPTE9SX0lEX0dSRUVOOwo+ICsJCWxlZC0+c3VibGVkX2luZm9bMV0u Y2hhbm5lbCA9IDE7Cj4gKwkJbGVkLT5zdWJsZWRfaW5mb1syXS5jb2xvcl9pbmRleCA9IExFRF9D T0xPUl9JRF9CTFVFOwo+ICsJCWxlZC0+c3VibGVkX2luZm9bMl0uY2hhbm5lbCA9IDI7Cj4gKwo+ ICsJCWxlZC0+bWNfY2Rldi5udW1fY29sb3JzID0gQVJSQVlfU0laRShsZWQtPnN1YmxlZF9pbmZv KTsKPiArCQlsZWQtPm1jX2NkZXYuc3VibGVkX2luZm8gPSBsZWQtPnN1YmxlZF9pbmZvOwo+ICsK PiArCQljZGV2ID0gJmxlZC0+bWNfY2Rldi5sZWRfY2RldjsKPiArCQljZGV2LT5tYXhfYnJpZ2h0 bmVzcyA9IFU4X01BWDsKPiArCQljZGV2LT5icmlnaHRuZXNzX3NldCA9IHN1bjUwaV9hMTAwX2xl ZGNfYnJpZ2h0bmVzc19zZXQ7Cj4gKwo+ICsJCWluaXRfZGF0YS5md25vZGUgPSBvZl9md25vZGVf aGFuZGxlKGNoaWxkKTsKPiArCj4gKwkJcmV0ID0gZGV2bV9sZWRfY2xhc3NkZXZfbXVsdGljb2xv cl9yZWdpc3Rlcl9leHQoZGV2LAo+ICsJCQkJCQkJCSZsZWQtPm1jX2NkZXYsCj4gKwkJCQkJCQkJ JmluaXRfZGF0YSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byByZWdpc3RlciBMRUQgJXU6ICVkXG4iLAoKIm11bHRpY29sb3IgTEVEIgoKPiArCQkJCWFkZHIs IHJldCk7Cj4gKwkJCWdvdG8gZXJyX3B1dF9jaGlsZDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZGV2 X2luZm8oZGV2LCAiUmVnaXN0ZXJlZCAlZCBMRURzXG4iLCBwcml2LT5udW1fbGVkcyk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfcHV0X2NoaWxkOgo+ICsJb2Zfbm9kZV9wdXQoY2hpbGQp Owo+ICsJc3VuNTBpX2ExMDBfbGVkY19zdXNwZW5kKCZwZGV2LT5kZXYpOwo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc3VuNTBpX2ExMDBfbGVkY19yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3VuNTBpX2ExMDBfbGVkY19zdXNw ZW5kKCZwZGV2LT5kZXYpOwo+ICsKPiArCXJldHVybiAwOwoKcmV0dXJuIHN1bjUwaV9hMTAwX2xl ZGNfc3VzcGVuZCgmcGRldi0+ZGV2KTsKCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN1bjUwaV9h MTAwX2xlZGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJ c3VuNTBpX2ExMDBfbGVkY19zdXNwZW5kKCZwZGV2LT5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW41MGlfYTEwMF9sZWRjX29mX21hdGNoW10gPSB7 Cj4gKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41MGktYTEwMC1sZWRjIiB9LAo+ICsJ e30KPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3VuNTBpX2ExMDBfbGVkY19vZl9t YXRjaCk7Cj4gKwo+ICtzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKHN1bjUwaV9hMTAw X2xlZGNfcG0sCj4gKwkJCQlzdW41MGlfYTEwMF9sZWRjX3N1c3BlbmQsCj4gKwkJCQlzdW41MGlf YTEwMF9sZWRjX3Jlc3VtZSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBz dW41MGlfYTEwMF9sZWRjX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSBzdW41MGlfYTEwMF9sZWRj X3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBzdW41MGlfYTEwMF9sZWRjX3JlbW92ZSwKPiArCS5zaHV0 ZG93bgk9IHN1bjUwaV9hMTAwX2xlZGNfc2h1dGRvd24sCj4gKwkuZHJpdmVyCQk9IHsKPiArCQku bmFtZQkJPSAic3VuNTBpLWExMDAtbGVkYyIsCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNTBp X2ExMDBfbGVkY19vZl9tYXRjaCwKPiArCQkucG0JCT0gcG1fcHRyKCZzdW41MGlfYTEwMF9sZWRj X3BtKSwKPiArCX0sCj4gK307Cj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNTBpX2ExMDBf bGVkY19kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiU2FtdWVsIEhvbGxhbmQgPHNhbXVl bEBzaG9sbGFuZC5vcmc+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIEExMDAg TEVEIGNvbnRyb2xsZXIgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAtLQo+ IDIuMzcuNAo+CgotLQpMZWUgSm9uZXMgW+adjueQvOaWr10KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK