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 F12F2C433F5 for ; Wed, 23 Feb 2022 10:45:03 +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=+rIUuaJH42PSCn0UJ9AykNt5P31wf4mrBzOSVuhx9j4=; b=Hbd7OGvy99otL4 3tKnfW5rbmap1HimFBSKOuR2pnTsiZRhVn+pdQlVRvN94IZPY9igXpGJmpyqo8NCTi+gwLxOxj1vr T6C8hehQMLbIXutWh/rwSsB2UL16wkyeX1hr5xVUuIS15v1a3IrVKba8rriQ7do313w2q1xUMZZXd n1lgwra2CGnnfbsY7Yz9uYZSnMT1mmSBXQIQYW/r1nUWfveq8wECcMp1UtG5DWnb9MlRxd4CyMZcw gJXBQ82Lwgt9oCAsojTv6wf5QpuWgMJ30nUetH4FZJ8dJw2UqTS7ctA6g8uy9APiXXv8SQ5xJgzxZ uaDzdJ1hYyRI2vFHnpJQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nMp7K-00Dikp-PW; Wed, 23 Feb 2022 10:43:32 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nMp79-00Dij1-Hg for linux-arm-kernel@lists.infradead.org; Wed, 23 Feb 2022 10:43:22 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nMp6z-0002iI-GX; Wed, 23 Feb 2022 11:43:09 +0100 Received: from sha by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1nMp6y-00055q-Kh; Wed, 23 Feb 2022 11:43:08 +0100 Date: Wed, 23 Feb 2022 11:43:08 +0100 From: Sascha Hauer To: "Peng Fan (OSS)" Cc: sboyd@kernel.org, robh+dt@kernel.org, shawnguo@kernel.org, abel.vesa@nxp.com, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Peng Fan Subject: Re: [PATCH V3 4/5] clk: imx: support fracn gppll Message-ID: <20220223104308.GI22780@pengutronix.de> References: <20220223064358.4097307-1-peng.fan@oss.nxp.com> <20220223064358.4097307-5-peng.fan@oss.nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220223064358.4097307-5-peng.fan@oss.nxp.com> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 11:20:37 up 74 days, 19:06, 87 users, load average: 0.24, 0.16, 0.17 User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220223_024319_944585_5C6805C5 X-CRM114-Status: GOOD ( 47.64 ) 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 SGksCgpTb3JyeSBmb3IgdGhlIGxhdGUgcmV2aWV3LCBidXQgdGhpcyBQTEwgc2VlbXMgdG8gaGF2 ZSBzb21lIGNvcHktcGFzdGVkCmNvZGUgSSBqdXN0IGNsZWFuZWQgdXAgaW4gYW5vdGhlciBQTEws IHNvIEkgdGhvdWdodCBJIGhhdmUgYSBjbG9zZXIKbG9vay4KCgpPbiBXZWQsIEZlYiAyMywgMjAy MiBhdCAwMjo0Mzo1N1BNICswODAwLCBQZW5nIEZhbiAoT1NTKSB3cm90ZToKPiBGcm9tOiBQZW5n IEZhbiA8cGVuZy5mYW5AbnhwLmNvbT4KPiAKPiBUaGlzIFBMTCBtb2R1bGUgaXMgYSBGcmFjdGlv bmFsLU4gc3ludGhlc2l6ZXIsCj4gc3VwcG9ydGluZyAzMC1iaXQgbnVtZXJhdG9yIGFuZCBkZW5v bWluYXRvci4gTnVtZXJhdG9yIGlzIGEgc2lnbmVkCj4gbnVtYmVyLiBJdCBoYXMgZmVhdHVyZSB0 byBhZGp1c3QgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIGZlZWRiYWNrCj4gZGl2aWRlciBkeW5hbWlj YWxseS4gVGhpcyBmcmFjbiBncHBsbCBpcyB1c2VkIGluIGkuTVg5My4KPiAKPiBTaWduZWQtb2Zm LWJ5OiBQZW5nIEZhbiA8cGVuZy5mYW5AbnhwLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9jbGsvaW14 L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9jbGsvaW14L2Nsay1mcmFjbi1n cHBsbC5jIHwgMzI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2Ns ay9pbXgvY2xrLmggICAgICAgICAgICAgfCAgMjEgKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAzNTAg aW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvaW14L2Nsay1m cmFjbi1ncHBsbC5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2lteC9NYWtlZmlsZSBi L2RyaXZlcnMvY2xrL2lteC9NYWtlZmlsZQo+IGluZGV4IDM2YzA0OTIyZDc4OS4uNjBjOGE0YmI3 NTc0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY2xrL2lteC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZl cnMvY2xrL2lteC9NYWtlZmlsZQo+IEBAIC01LDYgKzUsNyBAQCBteGMtY2xrLW9ianMgKz0gY2xr LWJ1c3kubwo+ICBteGMtY2xrLW9ianMgKz0gY2xrLWNvbXBvc2l0ZS03dWxwLm8KPiAgbXhjLWNs ay1vYmpzICs9IGNsay1jb21wb3NpdGUtOG0ubwo+ICBteGMtY2xrLW9ianMgKz0gY2xrLWNvbXBv c2l0ZS05My5vCj4gK214Yy1jbGstb2JqcyArPSBjbGstZnJhY24tZ3BwbGwubwo+ICBteGMtY2xr LW9ianMgKz0gY2xrLWNwdS5vCj4gIG14Yy1jbGstb2JqcyArPSBjbGstZGl2aWRlci1nYXRlLm8K PiAgbXhjLWNsay1vYmpzICs9IGNsay1maXh1cC1kaXYubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay9pbXgvY2xrLWZyYWNuLWdwcGxsLmMgYi9kcml2ZXJzL2Nsay9pbXgvY2xrLWZyYWNuLWdw cGxsLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNmM5OTQ2 YTRiZGI3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvY2xrL2lteC9jbGstZnJhY24t Z3BwbGwuYwo+IEBAIC0wLDAgKzEsMzI4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDIxIE5YUAo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Cj4gKwo+ ICsjaW5jbHVkZSAiY2xrLmgiCj4gKwo+ICsjZGVmaW5lIFBMTF9DVFJMCQkweDAKPiArI2RlZmlu ZSBDTEtNVVhfQllQQVNTCQlCSVQoMikKPiArI2RlZmluZSBDTEtNVVhfRU4JCUJJVCgxKQo+ICsj ZGVmaW5lIFBPV0VSVVBfTUFTSwkJQklUKDApCj4gKwo+ICsjZGVmaW5lIFBMTF9BTkFfUFJHCQkw eDEwCj4gKyNkZWZpbmUgUExMX1NQUkVBRF9TUEVDVFJVTQkweDMwCj4gKwo+ICsjZGVmaW5lIFBM TF9OVU1FUkFUT1IJCTB4NDAKPiArI2RlZmluZSBQTExfTUZOX01BU0sJCUdFTk1BU0soMzEsIDIp Cj4gKyNkZWZpbmUgUExMX01GTl9TSElGVAkJMgo+ICsKPiArI2RlZmluZSBQTExfREVOT01JTkFU T1IJCTB4NTAKPiArI2RlZmluZSBQTExfTUZEX01BU0sJCUdFTk1BU0soMjksIDApCj4gKwo+ICsj ZGVmaW5lIFBMTF9ESVYJCQkweDYwCj4gKyNkZWZpbmUgUExMX01GSV9NQVNLCQlHRU5NQVNLKDI0 LCAxNikKPiArI2RlZmluZSBQTExfTUZJX1NISUZUCQkxNgo+ICsjZGVmaW5lIFBMTF9SRElWX01B U0sJCUdFTk1BU0soMTUsIDEzKQo+ICsjZGVmaW5lIFBMTF9SRElWX1NISUZUCQkxMwo+ICsjZGVm aW5lIFBMTF9PRElWX01BU0sJCUdFTk1BU0soNywgMCkKPiArCj4gKyNkZWZpbmUgUExMX0RGU19D VFJMKHgpCQkoMHg3MCArICh4KSAqIDB4MTApCj4gKwo+ICsjZGVmaW5lIFBMTF9TVEFUVVMJCTB4 RjAKPiArI2RlZmluZSBMT0NLX1NUQVRVUwkJQklUKDApCj4gKwo+ICsjZGVmaW5lIERGU19TVEFU VVMJCTB4RjQKPiArCj4gKyNkZWZpbmUgTE9DS19USU1FT1VUX1VTCQkyMDAKPiArCj4gKyNkZWZp bmUgUExMX0ZSQUNOX0dQKF9yYXRlLCBfbWZpLCBfbWZuLCBfbWZkLCBfcmRpdiwgX29kaXYpCVwK PiArCXsJCQkJCQkJXAo+ICsJCS5yYXRlCT0JKF9yYXRlKSwJCQlcCj4gKwkJLm1maQk9CShfbWZp KSwJCQkJXAo+ICsJCS5tZm4JPQkoX21mbiksCQkJCVwKPiArCQkubWZkCT0JKF9tZmQpLAkJCQlc Cj4gKwkJLnJkaXYJPQkoX3JkaXYpLAkJCVwKPiArCQkub2Rpdgk9CShfb2RpdiksCQkJXAo+ICsJ fQo+ICsKPiArc3RydWN0IGNsa19mcmFjbl9ncHBsbCB7Cj4gKwlzdHJ1Y3QgY2xrX2h3CQkJaHc7 Cj4gKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKPiArCWNvbnN0IHN0cnVjdCBpbXhfZnJhY25fZ3Bw bGxfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZTsKPiArCWludCByYXRlX2NvdW50Owo+ICt9Owo+ICsK PiArI2RlZmluZSB0b19jbGtfZnJhY25fZ3BwbGwoX2h3KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1 Y3QgY2xrX2ZyYWNuX2dwcGxsLCBodykKCkNvbnNpZGVyIHVzaW5nIGEgc3RhdGljIGlubGluZSBm dW5jdGlvbiBpbnN0ZWFkLgoKPiArCj4gKy8qCj4gKyAqIEZ2Y28gPSDwnZC58J2Rn/CdkZLwnZGT 4oiZKPCdkYDwnZC58J2QvCvwnZGA8J2QufCdkYEv8J2RgPCdkLnwnZC3KQo+ICsgKiBGb3V0ID0g RnZjbyAvIChyZGl2ICogb2RpdikKPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14X2Zy YWNuX2dwcGxsX3JhdGVfdGFibGUgZnJhY25fdGJsW10gPSB7Cj4gKwlQTExfRlJBQ05fR1AoNjUw MDAwMDAwVSwgODEsIDAsIDAsIDAsIDMpLAo+ICsJUExMX0ZSQUNOX0dQKDU5NDAwMDAwMFUsIDE5 OCwgMCwgMCwgMCwgOCksCj4gKwlQTExfRlJBQ05fR1AoNTYwMDAwMDAwVSwgNzAsIDAsIDAsIDAs IDMpLAo+ICsJUExMX0ZSQUNOX0dQKDQwMDAwMDAwMFUsIDUwLCAwLCAwLCAwLCAzKSwKPiArCVBM TF9GUkFDTl9HUCgzOTMyMTYwMDBVLCA4MSwgOTIsIDEwMCwgMCwgNSkKPiArfTsKPiArCj4gK3N0 cnVjdCBpbXhfZnJhY25fZ3BwbGxfY2xrIGlteF9mcmFjbl9ncHBsbCA9IHsKPiArCS5yYXRlX3Rh YmxlID0gZnJhY25fdGJsLAo+ICsJLnJhdGVfY291bnQgPSBBUlJBWV9TSVpFKGZyYWNuX3RibCks Cj4gK307Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGlteF9mcmFjbl9ncHBsbCk7Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGlteF9mcmFjbl9ncHBsbF9yYXRlX3RhYmxlICoKPiAraW14X2dldF9w bGxfc2V0dGluZ3Moc3RydWN0IGNsa19mcmFjbl9ncHBsbCAqcGxsLCB1bnNpZ25lZCBsb25nIHJh dGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbXhfZnJhY25fZ3BwbGxfcmF0ZV90YWJsZSAqcmF0 ZV90YWJsZSA9IHBsbC0+cmF0ZV90YWJsZTsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBwbGwtPnJhdGVfY291bnQ7IGkrKykKPiArCQlpZiAocmF0ZSA9PSByYXRlX3RhYmxlW2ld LnJhdGUpCj4gKwkJCXJldHVybiAmcmF0ZV90YWJsZVtpXTsKPiArCj4gKwlyZXR1cm4gTlVMTDsK PiArfQo+ICsKPiArc3RhdGljIGxvbmcgY2xrX2ZyYWNuX2dwcGxsX3JvdW5kX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBs b25nICpwcmF0ZSkKPiArewo+ICsJc3RydWN0IGNsa19mcmFjbl9ncHBsbCAqcGxsID0gdG9fY2xr X2ZyYWNuX2dwcGxsKGh3KTsKPiArCWNvbnN0IHN0cnVjdCBpbXhfZnJhY25fZ3BwbGxfcmF0ZV90 YWJsZSAqcmF0ZV90YWJsZSA9IHBsbC0+cmF0ZV90YWJsZTsKPiArCWludCBpOwo+ICsKPiArCS8q IEFzc3VtbWluZyByYXRlX3RhYmxlIGlzIGluIGRlc2NlbmRpbmcgb3JkZXIgKi8KCnMvQXNzdW1t aW5nL0Fzc3VtaW5nLwoKPiArCWZvciAoaSA9IDA7IGkgPCBwbGwtPnJhdGVfY291bnQ7IGkrKykK PiArCQlpZiAocmF0ZSA+PSByYXRlX3RhYmxlW2ldLnJhdGUpCj4gKwkJCXJldHVybiByYXRlX3Rh YmxlW2ldLnJhdGU7Cj4gKwo+ICsJaWYgKGkgPT0gcGxsLT5yYXRlX2NvdW50KQoKVGhpcyBpcyBh bHdheXMgdHJ1ZSB3aGVuIHlvdSdyZSBoZXJlLAoKPiArCQlwcl9lcnIoIk5vdCBhYmxlIHRvIHJv dW5kIHJhdGUgZm9yICVzOiAlbHVcbiIsIGNsa19od19nZXRfbmFtZShodyksIHJhdGUpOwoKYnV0 IHRoaXMgbWVzc2FnZSBzaG91bGRuJ3QgYmUgbmVlZGVkIGF0IGFsbC4gV2hlbiBhIHJhdGUgaXMg cGFzc2VkIGluCmhlcmUgdGhhdCBpcyB0b28gbG93IHRoZW4gdGhlIGRyaXZlciBzaG91bGQgc2ls ZW50bHkgcm91bmQgdXAgdG8gdGhlCmxvd2VzdCBzdXBwb3J0ZWQgcmF0ZS4KCj4gKwo+ICsJLyog cmV0dXJuIG1pbmltdW0gc3VwcG9ydGVkIHZhbHVlICovCj4gKwlyZXR1cm4gcmF0ZV90YWJsZVtp IC0gMV0ucmF0ZTsKCklNTyByYXRlX3RhYmxlW3BsbC0+cmF0ZV9jb3VudCAtIDFdLnJhdGUgbWFr ZXMgaXQgY2xlYXJlciB3aGF0IGlzIG1lYW50CmhlcmUuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5z aWduZWQgbG9uZyBjbGtfZnJhY25fZ3BwbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcs IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVjdCBjbGtfZnJhY25fZ3Bw bGwgKnBsbCA9IHRvX2Nsa19mcmFjbl9ncHBsbChodyk7Cj4gKwljb25zdCBzdHJ1Y3QgaW14X2Zy YWNuX2dwcGxsX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBwbGwtPnJhdGVfdGFibGU7Cj4gKwl1 MzIgcGxsX251bWVyYXRvciwgcGxsX2Rlbm9taW5hdG9yLCBwbGxfZGl2Owo+ICsJdTMyIG1maSwg bWZuLCBtZmQsIHJkaXYsIG9kaXY7Cj4gKwl1NjQgZnZjbyA9IHBhcmVudF9yYXRlOwo+ICsJbG9u ZyByYXRlID0gMDsKPiArCWludCBpOwo+ICsKPiArCXBsbF9udW1lcmF0b3IgPSByZWFkbF9yZWxh eGVkKHBsbC0+YmFzZSArIFBMTF9OVU1FUkFUT1IpOwo+ICsJbWZuID0gKHBsbF9udW1lcmF0b3Ig JiBQTExfTUZOX01BU0spID4+IFBMTF9NRk5fU0hJRlQ7CgpIYXZlIGEgbG9vayBhdCBGSUVMRF9H RVQvRklFTERfUFJFUCwgaXQgcmVhbGx5IG1ha2VzIHNldHRpbmcgYW5kIHJlYWRpbmcKZmllbGRz IGVhc2llciBhbmQgbmljZXIgdG8gbG9vayBhdC4KCj4gKwo+ICsJcGxsX2Rlbm9taW5hdG9yID0g cmVhZGxfcmVsYXhlZChwbGwtPmJhc2UgKyBQTExfREVOT01JTkFUT1IpOwo+ICsJbWZkID0gcGxs X2Rlbm9taW5hdG9yICYgUExMX01GRF9NQVNLOwo+ICsKPiArCXBsbF9kaXYgPSByZWFkbF9yZWxh eGVkKHBsbC0+YmFzZSArIFBMTF9ESVYpOwo+ICsJbWZpID0gKHBsbF9kaXYgJiBQTExfTUZJX01B U0spID4+IFBMTF9NRklfU0hJRlQ7Cj4gKwo+ICsJcmRpdiA9IChwbGxfZGl2ICYgUExMX1JESVZf TUFTSykgPj4gUExMX1JESVZfU0hJRlQ7Cj4gKwlyZGl2ID0gcmRpdiArIDE7Cj4gKwlvZGl2ID0g cGxsX2RpdiAmIFBMTF9PRElWX01BU0s7Cj4gKwlzd2l0Y2ggKG9kaXYpIHsKPiArCWNhc2UgMDoK PiArCQlvZGl2ID0gMjsKPiArCQlicmVhazsKPiArCWNhc2UgMToKPiArCQlvZGl2ID0gMzsKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAq IFNvbWV0aW1lcywgdGhlIHJlY2FsY3VsYXRlZCByYXRlIGhhcyBkZXZpYXRpb24gZHVlIHRvCj4g KwkgKiB0aGUgZnJhYyBwYXJ0LiBTbyBmaW5kIHRoZSBhY2N1cmF0ZSBwbGwgcmF0ZSBmcm9tIHRo ZSB0YWJsZQo+ICsJICogZmlyc3QsIGlmIG5vIG1hdGNoIHJhdGUgaW4gdGhlIHRhYmxlLCB1c2Ug dGhlIHJhdGUgY2FsY3VsYXRlZAo+ICsJICogZnJvbSB0aGUgZXF1YXRpb24gYmVsb3cuCj4gKwkg Ki8KPiArCWZvciAoaSA9IDA7IGkgPCBwbGwtPnJhdGVfY291bnQ7IGkrKykgewo+ICsJCWlmIChy YXRlX3RhYmxlW2ldLm1mbiA9PSBtZm4gJiYgcmF0ZV90YWJsZVtpXS5tZmkgPT0gbWZpICYmCj4g KwkJICAgIHJhdGVfdGFibGVbaV0ubWZkID09IG1mZCAmJiByYXRlX3RhYmxlW2ldLnJkaXYgPT0g cmRpdiAmJgo+ICsJCSAgICByYXRlX3RhYmxlW2ldLm9kaXYgPT0gb2RpdikKPiArCQkJcmF0ZSA9 IHJhdGVfdGFibGVbaV0ucmF0ZTsKPiArCX0KPiArCj4gKwkvKiBGdmNvID0g8J2QufCdkZ/wnZGS 8J2Rk+KImSjwnZGA8J2QufCdkLwr8J2RgPCdkLnwnZGBL/CdkYDwnZC58J2QtykgKi8KPiArCWZ2 Y28gPSBmdmNvICogbWZpICsgZnZjbyAqIG1mbiAvIG1mZDsKPiArCj4gKwlkb19kaXYoZnZjbywg cmRpdiAqIG9kaXYpOwo+ICsKPiArCXJldHVybiByYXRlID8gKHVuc2lnbmVkIGxvbmcpIHJhdGUg OiAodW5zaWduZWQgbG9uZylmdmNvOwoKWW91IGNvdWxkIGJhaWwgb3V0IGVhcmx5IGhlcmUgaW5z dGVhZCBvZiBjYWxjdWxhdGluZyBmdmNvIHdoaWNoIHlvdSB0aGVuCmRvbid0IHVzZS4KCj4gK30K PiArCj4gK3N0YXRpYyBpbnQgY2xrX2ZyYWNuX2dwcGxsX3dhaXRfbG9jayhzdHJ1Y3QgY2xrX2Zy YWNuX2dwcGxsICpwbGwpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJcmV0dXJuIHJlYWRsX3Bv bGxfdGltZW91dChwbGwtPmJhc2UgKyBQTExfU1RBVFVTLCB2YWwsCj4gKwkJCQkgIHZhbCAmIExP Q0tfU1RBVFVTLCAwLCBMT0NLX1RJTUVPVVRfVVMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNs a19mcmFjbl9ncHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBk cmF0ZSwKPiArCQkJCSAgICB1bnNpZ25lZCBsb25nIHByYXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgY2xr X2ZyYWNuX2dwcGxsICpwbGwgPSB0b19jbGtfZnJhY25fZ3BwbGwoaHcpOwo+ICsJY29uc3Qgc3Ry dWN0IGlteF9mcmFjbl9ncHBsbF9yYXRlX3RhYmxlICpyYXRlOwo+ICsJdTMyIHRtcCwgcGxsX2Rp diwgYW5hX21mbjsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmF0ZSA9IGlteF9nZXRfcGxsX3NldHRp bmdzKHBsbCwgZHJhdGUpOwo+ICsJaWYgKCFyYXRlKSB7Cj4gKwkJcHJfZXJyKCIlczogSW52YWxp ZCByYXRlIDogJWx1IGZvciBwbGwgY2xrICVzXG4iLCBfX2Z1bmNfXywKPiArCQkJZHJhdGUsIGNs a19od19nZXRfbmFtZShodykpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQoKVGhlIGNvcmUg ZG9lcyBhIHJvdW5kX3JhdGUoKSBiZWZvcmUgZG9pbmcgYSBzZXRfcmF0ZSgpLCBzbyB0aGlzIHNo b3VsZApuZXZlciBoYXBwZW4uIEkgdGhpbmsgdGhpcyBjYW4gYmUgZHJvcHBlZCwgaW4gZG91YnQg dGhlIHJlc3VsdGluZyBOVUxMCnBvaW50ZXIgZGVyZWYgcHJvdmlkZXMgZW5vdWdoIGRldmVsb3Bl ciBpbmZvcm1hdGlvbiB0byBkZWJ1ZyB0aGlzCmludGVybmFsIGVycm9yLgoKPiArCj4gKwkvKiBE aXNhYmxlIG91dHB1dCAqLwo+ICsJdG1wID0gcmVhZGxfcmVsYXhlZChwbGwtPmJhc2UgKyBQTExf Q1RSTCk7Cj4gKwl0bXAgJj0gfkNMS01VWF9FTjsKPiArCXdyaXRlbF9yZWxheGVkKHRtcCwgcGxs LT5iYXNlICsgUExMX0NUUkwpOwo+ICsKPiArCS8qIFBvd2VyIERvd24gKi8KPiArCXRtcCAmPSB+ UE9XRVJVUF9NQVNLOwo+ICsJd3JpdGVsX3JlbGF4ZWQodG1wLCBwbGwtPmJhc2UgKyBQTExfQ1RS TCk7Cj4gKwo+ICsJLyogRGlzYWJsZSBCWVBBU1MgKi8KPiArCXRtcCAmPSB+Q0xLTVVYX0JZUEFT UzsKPiArCXdyaXRlbF9yZWxheGVkKHRtcCwgcGxsLT5iYXNlICsgUExMX0NUUkwpOwo+ICsKPiAr CXBsbF9kaXYgPSAocmF0ZS0+cmRpdiA8PCBQTExfUkRJVl9TSElGVCkgfCByYXRlLT5vZGl2IHwg KHJhdGUtPm1maSA8PCBQTExfTUZJX1NISUZUKTsKPiArCXdyaXRlbF9yZWxheGVkKHBsbF9kaXYs IHBsbC0+YmFzZSArIFBMTF9ESVYpOwo+ICsJd3JpdGVsX3JlbGF4ZWQocmF0ZS0+bWZkLCBwbGwt PmJhc2UgKyBQTExfREVOT01JTkFUT1IpOwo+ICsJd3JpdGVsX3JlbGF4ZWQocmF0ZS0+bWZuIDw8 IFBMTF9NRk5fU0hJRlQsIHBsbC0+YmFzZSArIFBMTF9OVU1FUkFUT1IpOwo+ICsKPiArCS8qIFdh aXQgZm9yIDV1cyBhY2NvcmRpbmcgdG8gZnJhY24gbW9kZSBwbGwgZG9jICovCj4gKwl1ZGVsYXko NSk7Cj4gKwo+ICsJLyogRW5hYmxlIFBvd2VydXAgKi8KPiArCXRtcCB8PSBQT1dFUlVQX01BU0s7 Cj4gKwl3cml0ZWxfcmVsYXhlZCh0bXAsIHBsbC0+YmFzZSArIFBMTF9DVFJMKTsKPiArCj4gKwkv KiBXYWl0IExvY2sqLwoKTml0cGljazogU3BhY2UgbWlzc2luZyBhdCBlbmQgb2YgY29tbWVudC4K Cj4gKwlyZXQgPSBjbGtfZnJhY25fZ3BwbGxfd2FpdF9sb2NrKHBsbCk7Cj4gKwlpZiAocmV0KQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogRW5hYmxlIG91dHB1dCAqLwo+ICsJdG1wIHw9IENM S01VWF9FTjsKPiArCXdyaXRlbF9yZWxheGVkKHRtcCwgcGxsLT5iYXNlICsgUExMX0NUUkwpOwo+ ICsKPiArCWFuYV9tZm4gPSAocmVhZGxfcmVsYXhlZChwbGwtPmJhc2UgKyBQTExfU1RBVFVTKSAm IFBMTF9NRk5fTUFTSykgPj4gUExMX01GTl9TSElGVDsKPiArCj4gKwlXQVJOKGFuYV9tZm4gIT0g cmF0ZS0+bWZuLCAiYW5hX21mbiAhPSByYXRlLT5tZm5cbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNsa19mcmFjbl9ncHBsbF9wcmVwYXJlKHN0cnVjdCBjbGtf aHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgY2xrX2ZyYWNuX2dwcGxsICpwbGwgPSB0b19jbGtfZnJh Y25fZ3BwbGwoaHcpOwo+ICsJdTMyIHZhbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJdmFsID0gcmVh ZGxfcmVsYXhlZChwbGwtPmJhc2UgKyBQTExfQ1RSTCk7Cj4gKwlpZiAodmFsICYgUE9XRVJVUF9N QVNLKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXZhbCB8PSBDTEtNVVhfQllQQVNTOwo+ICsJd3Jp dGVsX3JlbGF4ZWQodmFsLCBwbGwtPmJhc2UgKyBQTExfQ1RSTCk7Cj4gKwo+ICsJdmFsIHw9IFBP V0VSVVBfTUFTSzsKPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcGxsLT5iYXNlICsgUExMX0NUUkwp Owo+ICsKPiArCXZhbCB8PSBDTEtNVVhfRU47Cj4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBsbC0+ YmFzZSArIFBMTF9DVFJMKTsKPiArCj4gKwlyZXQgPSBjbGtfZnJhY25fZ3BwbGxfd2FpdF9sb2Nr KHBsbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJdmFsICY9IH5DTEtN VVhfQllQQVNTOwo+ICsJd3JpdGVsX3JlbGF4ZWQodmFsLCBwbGwtPmJhc2UgKyBQTExfQ1RSTCk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2xrX2ZyYWNuX2dwcGxs X2lzX3ByZXBhcmVkKHN0cnVjdCBjbGtfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgY2xrX2ZyYWNu X2dwcGxsICpwbGwgPSB0b19jbGtfZnJhY25fZ3BwbGwoaHcpOwo+ICsJdTMyIHZhbDsKPiArCj4g Kwl2YWwgPSByZWFkbF9yZWxheGVkKHBsbC0+YmFzZSArIFBMTF9DVFJMKTsKPiArCj4gKwlyZXR1 cm4gKHZhbCAmIFBPV0VSVVBfTUFTSykgPyAxIDogMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y2xrX2ZyYWNuX2dwcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJc3Ry dWN0IGNsa19mcmFjbl9ncHBsbCAqcGxsID0gdG9fY2xrX2ZyYWNuX2dwcGxsKGh3KTsKPiArCXUz MiB2YWw7Cj4gKwo+ICsJdmFsID0gcmVhZGxfcmVsYXhlZChwbGwtPmJhc2UgKyBQTExfQ1RSTCk7 Cj4gKwl2YWwgJj0gflBPV0VSVVBfTUFTSzsKPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcGxsLT5i YXNlICsgUExMX0NUUkwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMg Y2xrX2ZyYWNuX2dwcGxsX29wcyA9IHsKPiArCS5wcmVwYXJlCT0gY2xrX2ZyYWNuX2dwcGxsX3By ZXBhcmUsCj4gKwkudW5wcmVwYXJlCT0gY2xrX2ZyYWNuX2dwcGxsX3VucHJlcGFyZSwKPiArCS5p c19wcmVwYXJlZAk9IGNsa19mcmFjbl9ncHBsbF9pc19wcmVwYXJlZCwKPiArCS5yZWNhbGNfcmF0 ZQk9IGNsa19mcmFjbl9ncHBsbF9yZWNhbGNfcmF0ZSwKPiArCS5yb3VuZF9yYXRlCT0gY2xrX2Zy YWNuX2dwcGxsX3JvdW5kX3JhdGUsCj4gKwkuc2V0X3JhdGUJPSBjbGtfZnJhY25fZ3BwbGxfc2V0 X3JhdGUsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2xrX2h3ICppbXhfY2xrX2ZyYWNuX2dwcGxsKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB2b2lkIF9faW9tZW0gKmJh c2UsCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW14X2ZyYWNuX2dwcGxsX2NsayAqcGxsX2NsaykK PiArewo+ICsJc3RydWN0IGNsa19mcmFjbl9ncHBsbCAqcGxsOwo+ICsJc3RydWN0IGNsa19odyAq aHc7Cj4gKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owo+ICsJaW50IHJldDsKPiArCXUzMiB2 YWw7Cj4gKwo+ICsJcGxsID0ga3phbGxvYyhzaXplb2YoKnBsbCksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFwbGwpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJaW5pdC5uYW1l ID0gbmFtZTsKPiArCWluaXQuZmxhZ3MgPSBwbGxfY2xrLT5mbGFnczsKPiArCWluaXQucGFyZW50 X25hbWVzID0gJnBhcmVudF9uYW1lOwo+ICsJaW5pdC5udW1fcGFyZW50cyA9IDE7Cj4gKwlpbml0 Lm9wcyA9ICZjbGtfZnJhY25fZ3BwbGxfb3BzOwo+ICsKPiArCXBsbC0+YmFzZSA9IGJhc2U7Cj4g KwlwbGwtPmh3LmluaXQgPSAmaW5pdDsKPiArCXBsbC0+cmF0ZV90YWJsZSA9IHBsbF9jbGstPnJh dGVfdGFibGU7Cj4gKwlwbGwtPnJhdGVfY291bnQgPSBwbGxfY2xrLT5yYXRlX2NvdW50Owo+ICsK PiArCWh3ID0gJnBsbC0+aHc7Cj4gKwo+ICsJcmV0ID0gY2xrX2h3X3JlZ2lzdGVyKE5VTEwsIGh3 KTsKPiArCWlmIChyZXQpIHsKPiArCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgcGxs ICVzICVkXG4iLCBfX2Z1bmNfXywgbmFtZSwgcmV0KTsKPiArCQlrZnJlZShwbGwpOwo+ICsJCXJl dHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGh3Owo+ICt9Cj4gK0VYUE9S VF9TWU1CT0xfR1BMKGlteF9jbGtfZnJhY25fZ3BwbGwpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2Nsay9pbXgvY2xrLmggYi9kcml2ZXJzL2Nsay9pbXgvY2xrLmgKPiBpbmRleCA2M2ViN2M1M2Ix MjMuLmE3Y2JiY2QxYTNmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2Nsay9pbXgvY2xrLmgKPiAr KysgYi9kcml2ZXJzL2Nsay9pbXgvY2xrLmgKPiBAQCAtNzIsNiArNzIsMjcgQEAgZXh0ZXJuIHN0 cnVjdCBpbXhfcGxsMTR4eF9jbGsgaW14XzE0MTZ4X3BsbDsKPiAgZXh0ZXJuIHN0cnVjdCBpbXhf cGxsMTR4eF9jbGsgaW14XzE0NDN4X3BsbDsKPiAgZXh0ZXJuIHN0cnVjdCBpbXhfcGxsMTR4eF9j bGsgaW14XzE0NDN4X2RyYW1fcGxsOwo+ICAKPiArLyogTk9URTogUmF0ZSB0YWJsZSBzaG91bGQg YmUga2VwdCBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlci4gKi8KPiArc3RydWN0IGlteF9mcmFj bl9ncHBsbF9yYXRlX3RhYmxlIHsKPiArCXVuc2lnbmVkIGludCByYXRlOwo+ICsJdW5zaWduZWQg aW50IG1maTsKPiArCXVuc2lnbmVkIGludCBtZm47Cj4gKwl1bnNpZ25lZCBpbnQgbWZkOwo+ICsJ dW5zaWduZWQgaW50IHJkaXY7Cj4gKwl1bnNpZ25lZCBpbnQgb2RpdjsKPiArfTsKPiArCj4gK3N0 cnVjdCBpbXhfZnJhY25fZ3BwbGxfY2xrIHsKPiArCWNvbnN0IHN0cnVjdCBpbXhfZnJhY25fZ3Bw bGxfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZTsKPiArCWludCByYXRlX2NvdW50Owo+ICsJaW50IGZs YWdzOwo+ICt9Owo+ICsKPiArc3RydWN0IGNsa19odyAqaW14X2Nsa19mcmFjbl9ncHBsbChjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdm9pZCBfX2lvbWVtICpiYXNl LAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IGlteF9mcmFjbl9ncHBsbF9jbGsgKnBsbF9jbGspOwo+ ICsKPiArZXh0ZXJuIHN0cnVjdCBpbXhfZnJhY25fZ3BwbGxfY2xrIGlteF9mcmFjbl9ncHBsbDsK PiArCj4gICNkZWZpbmUgaW14X2Nsa19jcHUobmFtZSwgcGFyZW50X25hbWUsIGRpdiwgbXV4LCBw bGwsIHN0ZXApIFwKPiAgCXRvX2NsayhpbXhfY2xrX2h3X2NwdShuYW1lLCBwYXJlbnRfbmFtZSwg ZGl2LCBtdXgsIHBsbCwgc3RlcCkpCj4gIAo+IC0tIAo+IDIuMjUuMQo+IAo+IAoKLS0gClBlbmd1 dHJvbml4IGUuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ClN0ZXVlcndhbGRlciBTdHIuIDIxICAgICAgICAgICAgICAgICAgICAgICB8 IGh0dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8CjMxMTM3IEhpbGRlc2hlaW0sIEdlcm1hbnkg ICAgICAgICAgICAgICAgICB8IFBob25lOiArNDktNTEyMS0yMDY5MTctMCAgICB8CkFtdHNnZXJp Y2h0IEhpbGRlc2hlaW0sIEhSQSAyNjg2ICAgICAgICAgICB8IEZheDogICArNDktNTEyMS0yMDY5 MTctNTU1NSB8CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==