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 E4173C3ABBE for ; Thu, 8 May 2025 07:28:59 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mI4/ZRnu4mBppUr0cX6nQIAJrdUUS+DJDz22Wt25IZo=; b=s8ABf96hTgSUaZ /zUpd+Eh4Sp8hqWlb+v3oT4jZE7U3m0iMVnfUh+VnuSAySV3wnAEVJqB45OgSpi5f5vZkbevnJZW+ a39hfNdW2RHN0DBwJ4EdUcIDp8/oEONB+gDGiyGfZHkCizwY8b6ShMBXEMDSDs3EDILgC729p5YJO kOeznCteTaHBE1VPMCG8c/d+WkPxvgPoG5QI1DMFruUgMmzff3CGekhvFTGlO4yaKtKrRuvP+Vulv 5La1AHHNlD+/D21r5tmLza//PkEuSqeJybFZ3MMkzwlNOQtIzCYPm5wzl7AXIu+pvtjIZpuRG9und CFpLIBzKJ1qpklOO0hfg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uCvgb-0000000Hb0H-3zrB; Thu, 08 May 2025 07:28:53 +0000 Received: from mail-m1973196.qiye.163.com ([220.197.31.96]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uCvRY-0000000HYsq-43bH; Thu, 08 May 2025 07:13:22 +0000 Received: from [172.16.12.26] (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 145a410e0; Thu, 8 May 2025 15:13:01 +0800 (GMT+08:00) Message-ID: Date: Thu, 8 May 2025 15:13:01 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 4/7] soc: rockchip: add mfpwm driver To: Nicolas Frattaroli , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= , William Breathitt Gray , Sebastian Reichel , Kever Yang , =?UTF-8?Q?Heiko_St=C3=BCbner?= Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-iio@vger.kernel.org, kernel@collabora.com, Jonas Karlman , Detlev Casanova References: <20250408-rk3576-pwm-v1-0-a49286c2ca8e@collabora.com> <20250408-rk3576-pwm-v1-4-a49286c2ca8e@collabora.com> <5559308.Sb9uPGUboI@diego> <3362145.mvXUDI8C0e@workhorse> Content-Language: en-US From: Damon Ding In-Reply-To: <3362145.mvXUDI8C0e@workhorse> X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGhlJQ1ZDGkgZT0tMS0hDHxpWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ X-HM-Tid: 0a96aebd927d03a3kunm145a410e0 X-HM-MType: 1 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6MSo6Ljo5CDJDSg8*N0kzTSk9 OFEwCxRVSlVKTE9NTUNDSENISENJVTMWGhIXVR8aFhQVVR8SFRw7CRQYEFYYExILCFUYFBZFWVdZ EgtZQVlOQ1VJSVVMVUpKT1lXWQgBWUFKSEhDTzcG DKIM-Signature: a=rsa-sha256; b=YMzoFk1Qp1pR1/JUCHh5psK6u8ofTJw+CyC3fAnpP1pldZKl7dePcu9En22Oddc2WFqgguFF3qHj9O32KbNKBUP6apGGDMECgBy1ZYSuhtwDhfAZ8FhY+EYfVU9jKdm5r0cvYe82BjbqHXFdn/4y4WzXzJVTTXzIPvQ4dhX0X58=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=q1j4CdOQSMAZG/JE09mATkCWC/+UCfMM4ry4j1wAOeo=; h=date:mime-version:subject:message-id:from; X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250508_001321_533574_04923E52 X-CRM114-Status: GOOD ( 55.85 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgTmljb2xhczoKCk9uIDIwMjUvNC85IDIxOjAxLCBOaWNvbGFzIEZyYXR0YXJvbGkgd3JvdGU6 Cj4gT24gVHVlc2RheSwgOCBBcHJpbCAyMDI1IDIyOjAzOjAxIENlbnRyYWwgRXVyb3BlYW4gU3Vt bWVyIFRpbWUgSGVpa28gU3TDvGJuZXIgd3JvdGU6Cj4+IEhpLAo+Pgo+PiBub3QgYSBmdWxsIHJl dmlldywganVzdCBtZSBtYWtpbmcgYSBmaXJzdCBwYXNzLgo+Pgo+Pj4gK3Vuc2lnbmVkIGxvbmcg bWZwd21fY2xrX2dldF9yYXRlKHN0cnVjdCByb2NrY2hpcF9tZnB3bSAqbWZwd20pCj4+PiArewo+ Pj4gKwlpZiAoIW1mcHdtIHx8ICFtZnB3bS0+Y2hvc2VuX2NsaykKPj4+ICsJCXJldHVybiAwOwo+ Pj4gKwo+Pj4gKwlyZXR1cm4gY2xrX2dldF9yYXRlKG1mcHdtLT5jaG9zZW5fY2xrKTsKPj4+ICt9 Cj4+PiArRVhQT1JUX1NZTUJPTF9OU19HUEwobWZwd21fY2xrX2dldF9yYXRlLCAiUk9DS0NISVBf TUZQV00iKTsKPj4KPj4gYXJlbid0IHlvdSBqdXN0IHJlLWltcGxlbWV0aW5nIGEgY2xrLW11eCB3 aXRoIHRoZSB3aG9sZSBjaG9zZW4tY2xrCj4+IG1lY2hhbmlzbT8gU2VlIGRyaXZlcnMvY2xrL2Ns ay1tdXguYywgc28gaW4gdGhlb3J5IHlvdSBzaG91bGQgYmUKPj4gYWJsZSB0byBqdXN0IGRvIGEg Y2xrX3JlZ2lzdGVyX211eCguLi4pIHNpbWlsYXIgdG8gZm9yIGV4YW1wbGUKPj4gc291bmQvc29j L3NhbXN1bmcvaTJzLmMgLgo+IAo+IFByb2JhYmx5IHllcy4gSSBkaWRuJ3Qga25vdyBjbGstbXV4 IHdhcyBhIHRoaW5nLiBJZiBJIGRvIGRlY2lkZSB0byBrZWVwIHRoZQo+IGNsb2NrIHN3aXRjaGlu ZyBhdCBhbGwgKG1vcmUgb24gdGhhdCBiZWxvdyksIHRoZW4gSSdsbCByZXdyaXRlIGl0IGFyb3Vu ZAo+IGNsay1tdXguCj4gCj4+PiArCj4+PiArX19hdHRyaWJ1dGVfXygobm9ubnVsbCkpCj4+PiAr c3RhdGljIGludCBtZnB3bV9kb19hY3F1aXJlKHN0cnVjdCByb2NrY2hpcF9tZnB3bV9mdW5jICpw d21mKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHJvY2tjaGlwX21mcHdtICptZnB3bSA9IHB3bWYtPnBh cmVudDsKPj4+ICsJdW5zaWduZWQgaW50IGNudDsKPj4+ICsKPj4+ICsJaWYgKG1mcHdtLT5hY3Rp dmVfZnVuYyAmJiBwd21mLT5pZCAhPSBtZnB3bS0+YWN0aXZlX2Z1bmMtPmlkKQo+Pj4gKwkJcmV0 dXJuIC1FQlVTWTsKPj4+ICsKPj4+ICsJaWYgKCFtZnB3bS0+YWN0aXZlX2Z1bmMpCj4+PiArCQlt ZnB3bS0+YWN0aXZlX2Z1bmMgPSBwd21mOwo+Pj4gKwo+Pj4gKwlpZiAoIWNoZWNrX2FkZF9vdmVy ZmxvdyhtZnB3bS0+YWNxdWlyZV9jbnQsIDEsICZjbnQpKSB7Cj4+PiArCQltZnB3bS0+YWNxdWly ZV9jbnQgPSBjbnQ7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlXQVJOKDEsICJwcmV2ZW50ZWQgYWNx dWlyZSBjb3VudGVyIG92ZXJmbG93IGluICVzXG4iLCBfX2Z1bmNfXyk7Cj4+Cj4+IGRldl93YXJu LCBhcyB5b3UgaGF2ZSB0aGUgbWZwd20gcG9pbnRpbmcgdG8gYSBwZGV2Pwo+IAo+IFdpbGwgZG8u Cj4gCj4+PiArCQlyZXR1cm4gLUVPVkVSRkxPVzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlkZXZfZGJn KCZtZnB3bS0+cGRldi0+ZGV2LCAiJWQgYWNxdWlyZWQgbWZwd20sIGFjcXVpcmVzIG5vdyBhdCAl dVxuIiwKPj4+ICsJCXB3bWYtPmlkLCBtZnB3bS0+YWNxdWlyZV9jbnQpOwo+Pj4gKwo+Pj4gKwly ZXR1cm4gY2xrX2VuYWJsZShtZnB3bS0+cGNsayk7Cj4+PiArfQo+Pgo+Pj4gKy8qKgo+Pj4gKyAq IG1mcHdtX2dldF9jbGtfc3JjIC0gcmVhZCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNsb2NrIHNv dXJjZQo+Pj4gKyAqIEBtZnB3bTogcG9pbnRlciB0byB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSAmc3Ry dWN0IHJvY2tjaGlwX21mcHdtIGluc3RhbmNlCj4+PiArICoKPj4+ICsgKiBSZWFkIHRoZSBkZXZp Y2UgcmVnaXN0ZXIgdG8gZXh0cmFjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNsb2NrIHNvdXJj ZSwKPj4+ICsgKiBhbmQgcmV0dXJuIGl0Lgo+Pj4gKyAqCj4+PiArICogUmV0dXJuczoKPj4+ICsg KiAqIHRoZSBudW1lcmljIGNsb2NrIHNvdXJjZSBJRCBvbiBzdWNjZXNzLCAwIDw9IGlkIDw9IDIK Pj4+ICsgKiAqIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yCj4+PiArICovCj4+PiArc3RhdGljIGlu dCBtZnB3bV9nZXRfY2xrX3NyYyhzdHJ1Y3Qgcm9ja2NoaXBfbWZwd20gKm1mcHdtKQo+Pj4gK3sK Pj4+ICsJdTMyIHZhbDsKPj4+ICsKPj4+ICsJY2xrX2VuYWJsZShtZnB3bS0+cGNsayk7Cj4+PiAr CXZhbCA9IG1mcHdtX3JlZ19yZWFkKG1mcHdtLT5iYXNlLCBQV01WNF9SRUdfQ0xLX0NUUkwpOwo+ Pj4gKwljbGtfZGlzYWJsZShtZnB3bS0+cGNsayk7Cj4+PiArCj4+PiArCXJldHVybiAodmFsICYg UFdNVjRfQ0xLX1NSQ19NQVNLKSA+PiBQV01WNF9DTEtfU1JDX1NISUZUOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgaW50IG1mcHdtX2Nob29zZV9jbGsoc3RydWN0IHJvY2tjaGlwX21mcHdtICpt ZnB3bSkKPj4+ICt7Cj4+PiArCWludCByZXQ7Cj4+PiArCj4+PiArCXJldCA9IG1mcHdtX2dldF9j bGtfc3JjKG1mcHdtKTsKPj4+ICsJaWYgKHJldCA8IDApIHsKPj4+ICsJCWRldl9lcnIoJm1mcHdt LT5wZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgY3VycmVudCBjbG9jayBzb3VyY2U6ICVwZVxuIiwK Pj4+ICsJCQlFUlJfUFRSKHJldCkpOwo+Pj4gKwkJcmV0dXJuIHJldDsKPj4+ICsJfQo+Pj4gKwlp ZiAocmV0ID09IFBXTVY0X0NMS19TUkNfQ1JZU1RBTCkgewo+Pj4gKwkJaWYgKG1mcHdtLT5vc2Nf Y2xrKSB7Cj4+PiArCQkJbWZwd20tPmNob3Nlbl9jbGsgPSBtZnB3bS0+b3NjX2NsazsKPj4+ICsJ CX0gZWxzZSB7Cj4+PiArCQkJZGV2X3dhcm4oJm1mcHdtLT5wZGV2LT5kZXYsICJpbml0aWFsIHN0 YXRlIHdhbnRlZCAnb3NjJyBhcyBjbG9jayBzb3VyY2UsIGJ1dCBpdCdzIHVuYXZhaWxhYmxlLiBE ZWZhdWx0aW5nIHRvICdwd20nLlxuIik7Cj4+PiArCQkJbWZwd20tPmNob3Nlbl9jbGsgPSBtZnB3 bS0+cHdtX2NsazsKPj4+ICsJCX0KPj4+ICsJfSBlbHNlIHsKPj4+ICsJCW1mcHdtLT5jaG9zZW5f Y2xrID0gbWZwd20tPnB3bV9jbGs7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIGNsa19yYXRl X2V4Y2x1c2l2ZV9nZXQobWZwd20tPmNob3Nlbl9jbGspOwo+Pj4gK30KPj4+Cj4+PiArLyoqCj4+ PiArICogbWZwd21fc3dpdGNoX2Nsa19zcmMgLSBzd2l0Y2ggYmV0d2VlbiBQV00gY2xvY2sgc291 cmNlcwo+Pj4gKyAqIEBtZnB3bTogcG9pbnRlciB0byAmc3RydWN0IHJvY2tjaGlwX21mcHdtIGRy aXZlciBkYXRhCj4+PiArICogQGNsa19zcmM6IG9uZSBvZiBlaXRoZXIgJVBXTVY0X0NMS19TUkNf Q1JZU1RBTCBvciAlUFdNVjRfQ0xLX1NSQ19QTEwKPj4+ICsgKgo+Pj4gKyAqIFN3aXRjaCBiZXR3 ZWVuIGNsb2NrIHNvdXJjZXMsIGBgX2V4Y2x1c2l2ZV9wdXRgYGluZyB0aGUgb2xkIHJhdGUsCj4+ PiArICogYGBjbGtfcmF0ZV9leGNsdXNpdmVfZ2V0YGBpbmcgdGhlIG5ldyBvbmUsIHdyaXRpbmcg dGhlIHJlZ2lzdGVycyBhbmQKPj4+ICsgKiBzd2FwcGluZyBvdXQgdGhlICZzdHJ1Y3Rfcm9ja2No aXBfbWZwd20tPmNob3Nlbl9jbGsuCj4+PiArICoKPj4+ICsgKiBSZXR1cm5zOgo+Pj4gKyAqICog JTAgICAgICAgIC0gU3VjY2Vzcwo+Pj4gKyAqICogJS1FSU5WQUwgIC0gQSB3cm9uZyBAY2xrX3Ny YyB3YXMgZ2l2ZW4gb3IgaXQgaXMgdW5hdmFpbGFibGUKPj4+ICsgKiAqICUtRUJVU1kgICAtIERl dmljZSBpcyBjdXJyZW50bHkgaW4gdXNlLCB0cnkgYWdhaW4gbGF0ZXIKPj4+ICsgKi8KPj4+ICtf X2F0dHJpYnV0ZV9fKChub25udWxsKSkKPj4+ICtzdGF0aWMgaW50IG1mcHdtX3N3aXRjaF9jbGtf c3JjKHN0cnVjdCByb2NrY2hpcF9tZnB3bSAqbWZwd20sCj4+PiArCQkJCQkgIHVuc2lnbmVkIGlu dCBjbGtfc3JjKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGNsayAqcHJldjsKPj4+ICsJaW50IHJldCA9 IDA7Cj4+PiArCj4+PiArCXNjb3BlZF9jb25kX2d1YXJkKHNwaW5sb2NrX3RyeSwgcmV0dXJuIC1F QlVTWSwgJm1mcHdtLT5zdGF0ZV9sb2NrKSB7Cj4+PiArCQkvKiBEb24ndCBmaWRkbGUgd2l0aCBh bnkgb2YgdGhpcyBzdHVmZiBpZiB0aGUgUFdNIGlzIG9uICovCj4+PiArCQlpZiAobWZwd20tPmFj dGl2ZV9mdW5jKQo+Pj4gKwkJCXJldHVybiAtRUJVU1k7Cj4+PiArCj4+PiArCQlwcmV2ID0gbWZw d20tPmNob3Nlbl9jbGs7Cj4+PiArCQlyZXQgPSBtZnB3bV9nZXRfY2xrX3NyYyhtZnB3bSk7Cj4+ PiArCQlpZiAocmV0IDwgMCkKPj4+ICsJCQlyZXR1cm4gcmV0Owo+Pj4gKwkJaWYgKHJldCA9PSBj bGtfc3JjKQo+Pj4gKwkJCXJldHVybiAwOwo+Pj4gKwo+Pj4gKwkJc3dpdGNoIChjbGtfc3JjKSB7 Cj4+PiArCQljYXNlIFBXTVY0X0NMS19TUkNfUExMOgo+Pj4gKwkJCW1mcHdtLT5jaG9zZW5fY2xr ID0gbWZwd20tPnB3bV9jbGs7Cj4+PiArCQkJYnJlYWs7Cj4+PiArCQljYXNlIFBXTVY0X0NMS19T UkNfQ1JZU1RBTDoKPj4+ICsJCQlpZiAoIW1mcHdtLT5vc2NfY2xrKQo+Pj4gKwkJCQlyZXR1cm4g LUVJTlZBTDsKPj4+ICsJCQltZnB3bS0+Y2hvc2VuX2NsayA9IG1mcHdtLT5vc2NfY2xrOwo+Pj4g KwkJCWJyZWFrOwo+Pj4gKwkJZGVmYXVsdDoKPj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4+ICsJ CX0KPj4+ICsKPj4+ICsJCWNsa19lbmFibGUobWZwd20tPnBjbGspOwo+Pj4gKwo+Pj4gKwkJbWZw d21fcmVnX3dyaXRlKG1mcHdtLT5iYXNlLCBQV01WNF9SRUdfQ0xLX0NUUkwsCj4+PiArCQkJCVBX TVY0X0NMS19TUkMoY2xrX3NyYykpOwo+Pj4gKwkJY2xrX3JhdGVfZXhjbHVzaXZlX2dldChtZnB3 bS0+Y2hvc2VuX2Nsayk7Cj4+PiArCQlpZiAocHJldikKPj4+ICsJCQljbGtfcmF0ZV9leGNsdXNp dmVfcHV0KHByZXYpOwo+Pj4gKwo+Pj4gKwkJY2xrX2Rpc2FibGUobWZwd20tPnBjbGspOwo+Pj4g Kwl9Cj4+PiArCj4+PiArCXJldHVybiByZXQ7Cj4+PiArfQo+PgoKRmlyc3Qgb2YgYWxsLCBJJ20g dHJ1bHkgZGVsaWdodGVkIHRvIHNlZSB5b3VyIG5pY2UgUFdNIHY0IGRyaXZlciBjb2Rlcy4gCkkg d2FzIG9uY2UgaW50ZW5zZWx5IHN0cnVnZ2xpbmcgd2l0aCBwb3J0aW5nIHRoZSB2NCBQV00gaW1w bGVtZW50YXRpb24gCmludG8gdGhlIExpbnV4IDYuMSDigIvigItQV00gZnJhbWV3b3JrLiA7LSkK Cj4+IG9rLCB0aGUgcmVsZXZhbnQgcGFydCBtaWdodCBiZSB0aGUKPj4gCS8qIERvbid0IGZpZGRs ZSB3aXRoIGFueSBvZiB0aGlzIHN0dWZmIGlmIHRoZSBQV00gaXMgb24gKi8KPj4gdGhpbmcsIHdo aWNoIHdpbGwgcmVxdWlyZSBzcGVjaWFsIHNldF9yYXRlIG9wZXJhdGlvbiwgYnV0IGluIGdlbmVy YWwgSQo+PiB0aGluaywgaWYgaXQgdGlja3MgbGlrZSBhIGNsb2NrLCBpdCBwcm9iYWJseSBzaG91 bGQgYmUgYSByZWFsIGNsb2NrIDstKSAuCj4gCj4gSSBhZ3JlZTsgd2UgY2FuIGd1YXJhbnRlZSBp dCBkb2Vzbid0IGdldCBjaGFuZ2VkIGFmdGVyIGFsbCBieSBqdXN0IG1hcmtpbmcgaXQKPiBhcyBl eGNsdXNpdmUgaW5zdGVhZCBvZiBtYXJraW5nIGVpdGhlciBwd21fY2xrIG9yIG9zY19jbGsgYXMg ZXhjbHVzaXZlLgo+IAo+Pj4gK3N0YXRpYyBzc2l6ZV90IGNob3Nlbl9jbG9ja19zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwKPj4+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCj4+PiArewo+Pj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfbWZwd20gKm1mcHdtID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4+PiArCXVuc2lnbmVkIGxvbmcgY2xrX3NyYyA9IDA7Cj4+PiAr Cj4+PiArCS8qCj4+PiArCSAqIFdoeSB0aGUgd2VpcmQgaW5kaXJlY3Rpb24gaGVyZT8gSSBoYXZl IHRoZSBzdXNwaWNpb24gdGhhdCBpZiB3ZQo+Pj4gKwkgKiBlbWl0dGVkIHRvIHN5c2ZzIHdpdGgg dGhlIGxvY2sgc3RpbGwgaGVsZCwgdGhlbiBhIG5lZmFyaW91cyBwcm9ncmFtCj4+PiArCSAqIGNv dWxkIGhvZyB0aGUgbG9jayBieSBzb21laG93IGZvcmNpbmcgYSBmdWxsIGJ1ZmZlciBjb25kaXRp b24gYW5kCj4+PiArCSAqIHRoZW4gcmVmdXNpbmcgdG8gcmVhZCBmcm9tIGl0LiBEb24ndCBrbm93 IHdoZXRoZXIgdGhhdCdzIGZlYXNpYmxlCj4+PiArCSAqIHRvIGFjaGlldmUgaW4gcmVhbGl0eSwg YnV0IEkgZG9uJ3Qgd2FudCB0byBmaW5kIG91dCB0aGUgaGFyZCB3YXkKPj4+ICsJICogZWl0aGVy Lgo+Pj4gKwkgKi8KPj4+ICsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmbWZwd20tPnN0YXRlX2xv Y2spIHsKPj4+ICsJCWlmIChtZnB3bS0+Y2hvc2VuX2NsayA9PSBtZnB3bS0+cHdtX2NsaykKPj4+ ICsJCQljbGtfc3JjID0gUFdNVjRfQ0xLX1NSQ19QTEw7Cj4+PiArCQllbHNlIGlmIChtZnB3bS0+ b3NjX2NsayAmJiBtZnB3bS0+Y2hvc2VuX2NsayA9PSBtZnB3bS0+b3NjX2NsaykKPj4+ICsJCQlj bGtfc3JjID0gUFdNVjRfQ0xLX1NSQ19DUllTVEFMOwo+Pj4gKwkJZWxzZQo+Pj4gKwkJCXJldHVy biAtRU5PREVWOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWlmIChjbGtfc3JjID09IFBXTVY0X0NMS19T UkNfUExMKQo+Pj4gKwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAicGxsXG4iKTsKPj4+ICsJZWxz ZSBpZiAoY2xrX3NyYyA9PSBQV01WNF9DTEtfU1JDX0NSWVNUQUwpCj4+PiArCQlyZXR1cm4gc3lz ZnNfZW1pdChidWYsICJjcnlzdGFsXG4iKTsKPj4+ICsKPj4+ICsJcmV0dXJuIC1FTk9ERVY7Cj4+ PiArfQo+Pgo+PiB3aGljaCBicmluZ3MgbWUgdG8gbXkgbWFpbiBwb2ludCBvZiBjb250ZW50aW9u LiBXaHkgZG9lcyB1c2Vyc3BhY2UKPj4gbmVlZCB0byBzZWxlY3QgYSBjbG9jayBzb3VyY2UgZm9y IHRoZSBkcml2ZXIgdmlhIHN5c2ZzLgo+IAo+IEl0IGRvZXNuJ3QgbmVlZCB0by4gQmFzaWNhbGx5 LCB0aGlzIGlzIGEgd2VpcmQgaGFyZHdhcmUgZmVhdHVyZS4gRG93bnN0cmVhbSBkaWQKPiBub3Qg Ym90aGVyIGltcGxlbWVudGluZyBpdCBhdCBhbGwsIGFuZCBJIGZvdW5kIG91dCB0aHJvdWdoIHRo ZSBUUk0ncyByZWdpc3Rlcgo+IGxpc3RpbmcgYW5kIHRob3VnaHQgInRoYXQncyB3ZWlyZCwgSSB3 b25kZXIgaWYgaXQgZXZlbiB3b3JrcyIsIGFuZCBsbyBhbmQgYmVob2xkCj4gaXQgZG9lcy4gQXQg dGhhdCBwb2ludCwgbGlrZSB0d28gcmV3cml0ZXMgYWdvLCBJIHdhcyBjb21taXR0ZWQgdG8gZW5z dXJpbmcgdGhhdAo+IHRoZSBkcml2ZXIgY2FuIGhhbmRsZSB0aGlzIGVkZ2UgY2FzZSBvZiB0aGUg UFdNIGNsb2NrIGJlaW5nIGNoYW5nZWQuIEFzIEkgbGFja2VkCj4gdGhlIGltYWdpbmF0aW9uIGFz IHRvIHdoeSBzb21lb25lIHdvdWxkIGNoYW5nZSBpdCBhbmQgdGhlIGtub3dsZWRnZSBhcyB0byB3 aGljaAo+IGtlcm5lbCBpbnRlcmZhY2VzIGV4aXN0IHRvIGNoYW5nZSBpdCwgc3lzZnMgb2ZmZXJl ZCBpdHNlbGYgYXMgYSBuYXR1cmFsIGR1bXBpbmcKPiBncm91bmQgZm9yIHN3aXRjaGVzIHRoYXQg cHJvYmFibHkgc2hvdWxkbid0IGV4aXN0Lgo+IAo+PiBOZWl0aGVyIHRoZSBjb21taXQgbWVzc2Fn ZSBub3IgdGhlIGNvZGUgZG9lcyBzZWVtIHRvIGV4cGxhaW4gdGhhdCwKPj4gb3IgSSdtIGp1c3Qg YmxpbmQgLSB3aGljaCBpcyBhbHNvIGEgcmVhbCBwb3NzaWJpbGl0eS4KPj4KPj4gSW4gZ2VuZXJh bCBJIHJlYWxseSB0aGluaywgdXNlcnNwYWNlIHNob3VsZCBub3QgbmVlZCB0byBjYXJlIGFib3V0 IGlmCj4+IGEgUExMIG9yIGRpcmVjdGx5IHRoZSBvc2NpbGxhdG9yIGlzIHVzZWQgYSBjbG9jayBp bnB1dC4KPj4gSSBhc3N1bWUgd2hpY2ggaXMgbmVlZGVkIHJlc3VsdHMgZnJvbSBzb21lIHJ1bnRp bWUgZmFjdG9yLCBzbyB0aGUKPj4gZHJpdmVyIHNob3VsZCBiZSBhYmxlIHRvIHNlbGVjdCB0aGUg Y29ycmVjdCBvbmU/Cj4+Cj4+IEEgbXV4LWNsb2NrIGNvdWxkIHVzdCB1c2UgY2xrX211eF9kZXRl cm1pbmVfcmF0ZV9mbGFncygpIHRvIHNlbGVjdAo+PiB0aGUgYmVzdCBwYXJlbnQgZGVwZW5kaW5n IG9uIGEgcmVxdWVzdGVkIHJhdGUgaW5zdGVhZC4KPiAKPiBZZWFoLCB0aGUgb25seSB1c2UtY2Fz ZSBJIGNhbiBjb21lIHVwIHdpdGggaXMgdGhhdCB3ZSByZWFsbHkgd2FudCB0byB1c2UgYW4KPiBl aXRoZXIgMTAwIE1IeiBvciA1MCBNSHogY2xvY2sgb24gb25lIGNoaXAsIGJ1dCBoYXZlIGEgY2hh bm5lbCBoaXQgYSBwcmVjaXNlCj4gdGltaW5nIHdpdGggdGhlIDI0IE1IeiBjbG9jayBvbiB0aGUg c2FtZSBjaGlwLiBJZiB0aGUgZml4ZWQgY3J5c3RhbCBvc2NpbGxhdG9yCj4gd2VyZSAyNSBNSHog aW5zdGVhZCBvZiAyNCBNSHosIHRoaXMgd291bGQgYmUgZW50aXJlbHkgcG9pbnRsZXNzLCBhcyB0 aGV5J3JlIGFsbAo+IG11bHRpcGxlcyBvZiBpdC4KPiAKClRoZSAyNE1IeiBPU0MgY2xvY2sgc291 cmNlIGlzIG1haW5seSBmb3IgdGhlIHVzZSBvZiB0aGUgSVIgaW5wdXQsIHdoaWNoIAppcyBhbHNv IGNhbGxlZCB0aGUgcG93ZXIga2V5IGNhcHR1cmUgbW9kZS4gV2hlbiB0aGUgc3lzdGVtIGVudGVy cyAKc3VzcGVuZCBzdGF0ZSwgaXQgcmVsaWVzIG9uIHRoZSBPU0MgdG8gZW5zdXJlIHRoZSBQV00g cmVtYWlucyAKb3BlcmF0aW9uYWwgYW5kIGNhbiBzZXJ2ZSBhcyBhIHN5c3RlbSB3YWtlLXVwIHNv dXJjZS4KCkluIGFkZGl0aW9uLCB0aGUgUFdNIHY0IGFsc28gc3VwcG9ydHMgdGhlIDQwMEtIeiBS QyBjbG9jayBzb3VyY2UgZm9yIHRoZSAKd2F2ZSBnZW5lcmF0b3IgbW9kZSwgYW5kIGl0IGNhbiBi ZSB1c2VkIGZvciB0aGUgZGVlcGVyIHNsZWVwIHN0YXRlLgoKPiBUaGFua3MgZm9yIHRoZSBoaW50 IGFib3V0IGNsa19tdXhfZGV0ZXJtaW5lX3JhdGVfZmxhZ3MsIGl0IGRvZXNuJ3QgYXBwZWFyIHRv IGJlCj4gZG9jdW1lbnRlZCAoY2xhc3NpYykgYnV0IGl0IGxvb2tzIHRvIGRvIGF0IGxlYXN0IGhh bGYgb2Ygd2hhdCBhIHByb3BlciBzb2x1dGlvbgo+IHdvdWxkIG5lZWQgdG8gZG8uIFRoZSBvdGhl ciBoYWxmIGlzIGZpZ3VyaW5nIG91dCB3aGF0IGlkZWFsIHRhcmdldCByYXRlIHdlCj4gYWN0dWFs bHkgd2FudCB0byBvcHRpbWlzZSBmb3IgZm9yIGEgZ2l2ZW4gZS5nLiB3YXZlZm9ybSBjb25zaXN0 aW5nIG9mIHBlcmlvZAo+IGFuZCBkdXR5IGN5Y2xlIGluIG5hbm9zZWNvbmRzLiBUaGVyZSdzIHNv bWUgbG9naWMgdG8gdGhpbmsgYWJvdXQgcmVnYXJkaW5nIHdoZXJlCj4gcm91bmRpbmcgZXJyb3Jz IGFyZSBhY2NlcHRhYmxlLCBlLmcuIGEgbG9uZyBwZXJpb2Qgd2l0aCBhIGxvdyBkdXR5IGN5Y2xl IGlzCj4gcHJvYmFibHkgYmV0dGVyIG9mZiB1c2luZyB0aGUgMTAwLTUwLTI0IG11eCB3aXRoIDEw MCBNSHogYXMgdGhlIHJhdGUuIEknbSBub3QKPiBzdXJlIGlmIDUwIE1IeiBpcyBldmVyIGEgc2Vu c2libGUgb3B0aW9uIHNpbmNlIGl0IGlzIGEgZGl2aWRlbmQgb2YgMTAwIE1IeiwgYW5kCj4gSSdt IG5vdCBhYm91dCB0byByZWFzb24gYWJvdXQgaW1hZ2luZWQgcG93ZXIgZHJhdyBvZiB0aGUgUFdN IGhhcmR3YXJlIHdpdGhvdXQKPiBsYWJvcmF0b3J5IGdyYWRlIHRlc3QgZXF1aXBtZW50Lgo+IAo+ IEZvciB3aGF0IGl0J3Mgd29ydGgsIHRoaXMgaXMgYSBuaWNoZSBlbm91Z2ggaGFyZHdhcmUgZmVh dHVyZSB0aGF0IGlmIGl0IGNhdXNlcwo+IHRvbyBtdWNoIGZyaWN0aW9uIGdldHRpbmcgaXQgc3Vw cG9ydGVkIGluIGEgZHJpdmVyLCBJJ2xsIGp1c3QgZHJvcCBpdCBlbnRpcmVseQo+IGluc3RlYWQu IEkgdHJpZWQgdG8gcHJlZW1wdGl2ZWx5IGNvbWJhdCB0ZWNobmljYWwgZGVidCBieSBzdXBwb3J0 aW5nIHRoaXMgaW4KPiBzb21lIHdheSwgYnV0IGluc3RlYWQgbWFuYWdlZCB0byBpbnRyb2R1Y2Ug c2NvcGUgY3JlZXAuCj4gCj4gT25lIG9wdGlvbiBpcyB0byBhbHdheXMganVzdCBjaG9vc2UgdGhl IFBMTCBtdXhlZCBjbG9jayBhbmQgdGhlbiBhbHdheXMgc2V0IGl0Cj4gdG8gMTAwIE1IeiwgYmVj YXVzZSBpdCdzIHByb2JhYmx5IHRoZSBiZXN0IG9wdGlvbiB1bmxlc3MgdGhlcmUgYXJlIHNwZWNp ZmljCj4gUFdNLWJhc2VkIGFwcGxpY2F0aW9ucyB0aGF0IG1ha2UgaGVhdnkgdXNlIG9mIDI0LWRl cml2ZWQgdGltaW5ncyAobWF5YmUgdGhlIElSCj4gc3R1ZmY/KQo+IAo+Pgo+Pj4gK3N0YXRpYyBz c2l6ZV90IGNob3Nlbl9jbG9ja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+PiArCQkJCSAg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+PiArCQkJCSAgY29uc3QgY2hhciAqYnVm LCBzaXplX3QgY291bnQpCj4+PiArewo+Pj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfbWZwd20gKm1mcHdt ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+PiArCWludCByZXQ7Cj4+PiArCj4+PiArCWlmIChz eXNmc19zdHJlcShidWYsICJwbGwiKSkgewo+Pj4gKwkJcmV0ID0gbWZwd21fc3dpdGNoX2Nsa19z cmMobWZwd20sIFBXTVY0X0NMS19TUkNfUExMKTsKPj4+ICsJCWlmIChyZXQpCj4+PiArCQkJcmV0 dXJuIHJldDsKPj4+ICsJCXJldHVybiBjb3VudDsKPj4+ICsJfSBlbHNlIGlmIChzeXNmc19zdHJl cShidWYsICJjcnlzdGFsIikpIHsKPj4+ICsJCXJldCA9IG1mcHdtX3N3aXRjaF9jbGtfc3JjKG1m cHdtLCBQV01WNF9DTEtfU1JDX0NSWVNUQUwpOwo+Pj4gKwkJaWYgKHJldCkKPj4+ICsJCQlyZXR1 cm4gcmV0Owo+Pj4gKwkJcmV0dXJuIGNvdW50Owo+Pj4gKwl9IGVsc2Ugewo+Pj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4+PiArCX0KPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIERFVklDRV9BVFRSX1JX KGNob3Nlbl9jbG9jayk7Cj4+PiArCj4+PiArc3RhdGljIHNzaXplX3QgYXZhaWxhYmxlX2Nsb2Nr c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+Pj4gK3sKPj4+ICsJc3RydWN0IHJvY2tjaGlwX21m cHdtICptZnB3bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwlzc2l6ZV90IHNpemUgPSAw Owo+Pj4gKwo+Pj4gKwlzaXplICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBzaXplLCAicGxsXG4iKTsK Pj4+ICsJaWYgKG1mcHdtLT5vc2NfY2xrKQo+Pj4gKwkJc2l6ZSArPSBzeXNmc19lbWl0X2F0KGJ1 Ziwgc2l6ZSwgImNyeXN0YWxcbiIpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gc2l6ZTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIERFVklDRV9BVFRSX1JPKGF2YWlsYWJsZV9jbG9ja3MpOwo+Pj4gKwo+ Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZnB3bV9hdHRyc1tdID0gewo+Pj4gKwkmZGV2 X2F0dHJfYXZhaWxhYmxlX2Nsb2Nrcy5hdHRyLAo+Pj4gKwkmZGV2X2F0dHJfY2hvc2VuX2Nsb2Nr LmF0dHIsCj4+PiArCU5VTEwsCj4+PiArfTsKPj4KPj4gTm90IHVuZGVyc3RhbmRpbmcgdGhlIG5l ZWQgZm9yIHRoZSBzeXNmcyBzdHVmZiB3YXMgbXkgbWFpbiBwb2ludCB0aGlzCj4+IGV2ZW5pbmcg Oi0pCj4+Cj4+IEhlaWtvCj4+Cj4gCj4gVGhhbmsgeW91IGZvciB5b3VyIHF1aWNrIHByZWxpbWlu YXJ5IHJldmlldyEgVGhpcyBhbHJlYWR5IGdpdmVzIG1lIHNvbWUgZ29vZAo+IHBvaW50cyB0byBs b29rIGludG8gZm9yIGEgdjIuCj4gCgpJJ20gZWFnZXJseSBsb29raW5nIGZvcndhcmQgdG8geW91 ciB2MiBwYXRjaCBzdWJtaXNzaW9uLCBhbmQgSSB3aWxsIAp0aG9yb3VnaGx5IHZhbGlkYXRlIHRo ZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIFBXTSAKYmFja2xpZ2h0L3JlZ3VsYXRvciBiYXNl ZCBvbiB5b3VyIGNvZGUgY2hhbmdlcy4KCkJlc3QgcmVnYXJkcywKRGFtb24KCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWls aW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==