From mboxrd@z Thu Jan 1 00:00:00 1970 From: andrew-sh.cheng Subject: Re: [PATCH v2 4/4] devfreq: add mediatek cci devfreq Date: Fri, 10 May 2019 17:24:32 +0800 Message-ID: <1557480272.7664.3.camel@mtksdaap41> References: <1553841972-19737-1-git-send-email-andrew-sh.cheng@mediatek.com> <1553841972-19737-5-git-send-email-andrew-sh.cheng@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Chanwoo Choi Cc: Mark Rutland , devicetree@vger.kernel.org, srv_heupstream@mediatek.com, linux-pm@vger.kernel.org, Viresh Kumar , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, Rob Herring , fan.chen@mediatek.com, Kyungmin Park , MyungJoo Ham , linux-mediatek@lists.infradead.org, Matthias Brugger , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gVHVlLCAyMDE5LTA0LTE2IGF0IDE4OjA1ICswOTAwLCBDaGFud29vIENob2kgd3JvdGU6Cj4g SGkgQW5kcmV3LXNoLkNoZW5nLAo+IAo+IFBsZWFzZSBhZGQgdGhlIGR0LWJpbmRpbmcgZG9jdW1l bnRhdGlvbi4KPiAKPiBPbiAxOS4gMy4gMjkuIOyYpO2bhCAzOjQ2LCBBbmRyZXctc2guQ2hlbmcg d3JvdGU6Cj4gPiBUaGlzIGFkZHMgYSBkZXZmcmVxIGRyaXZlciBmb3IgdGhlIENhY2hlIENvaGVy ZW50IEludGVyY29ubmVjdCAoQ0NJKQo+ID4gb2YgdGhlIE1lZGlhdGVrIE1UODE4My4KPiA+IAo+ ID4gT24gdGhlIE1UODE4MyB0aGUgQ0NJIGlzIHN1cHBsaWVkIGJ5IHRoZSBzYW1lIHJlZ3VsYXRv ciBhcyB0aGUgTElUVExFCj4gPiBjb3Jlcy4gVGhlIGRyaXZlciBpcyBub3RpZmllZCB3aGVuIHRo ZSByZWd1bGF0b3Igdm9sdGFnZSBjaGFuZ2VzCj4gPiAoZHJpdmVuIGJ5IGNwdWZyZXEpIGFuZCBh ZGp1c3RzIHRoZSBDQ0kgZnJlcXVlbmN5IHRvIHRoZSBtYXhpbXVtCj4gPiBwb3NzaWJsZSB2YWx1 ZS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogQW5kcmV3LXNoLkNoZW5nIDxhbmRyZXctc2guY2hl bmdAbWVkaWF0ZWsuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9kZXZmcmVxL0tjb25maWcgICAg ICAgICAgICAgIHwgIDEwICsrCj4gPiAgZHJpdmVycy9kZXZmcmVxL01ha2VmaWxlICAgICAgICAg ICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2RldmZyZXEvbXQ4MTgzLWNjaS1kZXZmcmVxLmMgfCAy MzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAzIGZpbGVzIGNoYW5n ZWQsIDI0NiBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZGV2 ZnJlcS9tdDgxODMtY2NpLWRldmZyZXEuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9k ZXZmcmVxL0tjb25maWcgYi9kcml2ZXJzL2RldmZyZXEvS2NvbmZpZwo+ID4gaW5kZXggNmExNzJk My4uZGEyZjhlYyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZGV2ZnJlcS9LY29uZmlnCj4gPiAr KysgYi9kcml2ZXJzL2RldmZyZXEvS2NvbmZpZwo+ID4gQEAgLTkxLDYgKzkxLDE2IEBAIGNvbmZp ZyBBUk1fRVhZTk9TX0JVU19ERVZGUkVRCj4gPiAgCSAgYW5kIGFkanVzdHMgdGhlIG9wZXJhdGlu ZyBmcmVxdWVuY2llcyBhbmQgdm9sdGFnZXMgd2l0aCBPUFAgc3VwcG9ydC4KPiA+ICAJICBUaGlz IGRvZXMgbm90IHlldCBvcGVyYXRlIHdpdGggb3B0aW1hbCB2b2x0YWdlcy4KPiA+ICAKPiA+ICtj b25maWcgQVJNX01UODE4M19DQ0lfREVWRlJFUQo+ID4gKwl0cmlzdGF0ZSAiTVQ4MTgzIENDSSBE RVZGUkVRIERyaXZlciIKPiA+ICsJZGVwZW5kcyBvbiBBUk1fTUVESUFURUtfQ1BVRlJFUQo+ID4g KwloZWxwCj4gPiArCQlUaGlzIGFkZHMgYSBkZXZmcmVxIGRyaXZlciBmb3IgQ2FjaGUgQ29oZXJl bnQgSW50ZXJjb25uZWN0Cj4gPiArCQlvZiBNZWRpYXRlayBNVDgxODMsIHdoaWNoIGlzIHNoYXJl ZCB0aGUgc2FtZSByZWd1bGF0b3IKPiA+ICsJCXdpdGggY3B1IGNsdXN0ZXIuCj4gPiArCQlJdCBj YW4gdHJhY2sgYnVjayB2b2x0YWdlIGFuZCB1cGRhdGUgYSBwcm9wZXIgY2NpIGZyZXF1ZW5jeS4K PiA+ICsJCVVzZSBub3RpZmljYXRpb24gdG8gZ2V0IHJlZ3VsYXRvciBzdGF0dXMuCj4gPiArCj4g PiAgY29uZmlnIEFSTV9URUdSQV9ERVZGUkVRCj4gPiAgCXRyaXN0YXRlICJUZWdyYSBERVZGUkVR IERyaXZlciIKPiA+ICAJZGVwZW5kcyBvbiBBUkNIX1RFR1JBXzEyNF9TT0MKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2RldmZyZXEvTWFrZWZpbGUgYi9kcml2ZXJzL2RldmZyZXEvTWFrZWZpbGUK PiA+IGluZGV4IDMyYjhkNGQuLjgxN2RkZTcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2RldmZy ZXEvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZGV2ZnJlcS9NYWtlZmlsZQo+ID4gQEAgLTks NiArOSw3IEBAIG9iai0kKENPTkZJR19ERVZGUkVRX0dPVl9QQVNTSVZFKQkrPSBnb3Zlcm5vcl9w YXNzaXZlLm8KPiA+ICAKPiA+ICAjIERFVkZSRVEgRHJpdmVycwo+ID4gIG9iai0kKENPTkZJR19B Uk1fRVhZTk9TX0JVU19ERVZGUkVRKQkrPSBleHlub3MtYnVzLm8KPiA+ICtvYmotJChDT05GSUdf QVJNX01UODE4M19DQ0lfREVWRlJFUSkgICAgKz0gbXQ4MTgzLWNjaS1kZXZmcmVxLm8KPiA+ICBv YmotJChDT05GSUdfQVJNX1JLMzM5OV9ETUNfREVWRlJFUSkJKz0gcmszMzk5X2RtYy5vCj4gPiAg b2JqLSQoQ09ORklHX0FSTV9URUdSQV9ERVZGUkVRKQkJKz0gdGVncmEtZGV2ZnJlcS5vCj4gPiAg Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL210ODE4My1jY2ktZGV2ZnJlcS5jIGIv ZHJpdmVycy9kZXZmcmVxL210ODE4My1jY2ktZGV2ZnJlcS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uYWY4MmQyZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysr IGIvZHJpdmVycy9kZXZmcmVxL210ODE4My1jY2ktZGV2ZnJlcS5jCj4gPiBAQCAtMCwwICsxLDIz NSBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLyoKPiA+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLgo+IAo+IFlvdSBjYW4gYWRkIHRo ZSBhdXRob3IgaW5mb3JtYXRpb24gdW5kZXIgY29weXJpZ2h0IGluZm9ybWF0aW9uLgpva34KPiAK PiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2RldmZyZXEuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiA+ICsKPiA+ICsj aW5jbHVkZSAiZ292ZXJub3IuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgY2NpX2RldmZyZXEgewo+ID4g KwlzdHJ1Y3QgZGV2ZnJlcQkJKmRldmZyZXE7Cj4gPiArCXN0cnVjdCByZWd1bGF0b3IJKnByb2Nf cmVnOwo+ID4gKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBwcm9jX3JlZ191VjsKPiA+ICsJc3Ry dWN0IGNsawkJKmNjaV9jbGs7Cj4gPiArCXN0cnVjdCBub3RpZmllcl9ibG9jawluYjsKPiAKPiBK dXN0IHVzZSB0aGUgc3BhY2UgaW5zdGVhZCBvZiB0YWIgYXMgZm9sbG93aW5nOgo+IAo+IAlzdHJ1 Y3QgZGV2ZnJlcSAqZGV2ZnJlcTsKPiAJc3RydWN0IHJlZ3VsYXRvciAqcHJvY19yZWc7Cj4gCXVu c2lnbmVkIGxvbmcgcHJvY19yZWdfdVY7Cj4gCXN0cnVjdCBjbGsgKmNjaV9jbGs7Cj4gCXN0cnVj dCBub3RpZmllcl9ibG9jayBuYjsKPiAKT0ssIEkgd2lsbCBtb2RpZnkgYXQgbmV4dCBwYXRjaC4K PiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgY2NpX2RldmZyZXFfcmVndWxhdG9yX25vdGlm aWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCj4gPiArCQkJCQkgIHVuc2lnbmVkIGxvbmcg dmFsLCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNjaV9kZXZmcmVxICpjY2lfZGYg PQo+ID4gKwkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgY2NpX2RldmZyZXEsIG5iKTsKPiA+ICsK PiA+ICsJLyogZGVhbCB3aXRoIHJlZHVjZSBmcmVxdWVuY3kgKi8KPiA+ICsJaWYgKHZhbCAmIFJF R1VMQVRPUl9FVkVOVF9QUkVfVk9MVEFHRV9DSEFOR0UpIHsKPiA+ICsJCXN0cnVjdCBwcmVfdm9s dGFnZV9jaGFuZ2VfZGF0YSAqcHZjX2RhdGEgPSBkYXRhOwo+ID4gKwo+ID4gKwkJaWYgKHB2Y19k YXRhLT5taW5fdVYgPCBwdmNfZGF0YS0+b2xkX3VWKSB7Cj4gPiArCQkJY2NpX2RmLT5wcm9jX3Jl Z191ViA9Cj4gPiArCQkJCSh1bnNpZ25lZCBsb25nKShwdmNfZGF0YS0+bWluX3VWKTsKPiA+ICsJ CQltdXRleF9sb2NrKCZjY2lfZGYtPmRldmZyZXEtPmxvY2spOwo+ID4gKwkJCXVwZGF0ZV9kZXZm cmVxKGNjaV9kZi0+ZGV2ZnJlcSk7Cj4gCj4gUGxlYXNlIGhhbmRsZSB0aGUgcmV0dXJuIHZhbHVl IG9mIHVwZGF0ZV9kZXZmcmVxKCkgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4KT0ssIEkgd2lsbCBt b2RpZnkgYXQgbmV4dCBwYXRjaC4KPiAKPiA+ICsJCQltdXRleF91bmxvY2soJmNjaV9kZi0+ZGV2 ZnJlcS0+bG9jayk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCh2YWwgJiBSRUdV TEFUT1JfRVZFTlRfQUJPUlRfVk9MVEFHRV9DSEFOR0UpICYmCj4gCj4gaWYgLT4gZWxzZSBpZgo+ IAo+IEF0IHRoZSBzYW1lIHRpbWUsIHJlY2VpdmVzIG9ubHkgb25lIG5vdGlmaWNhdGlvbi4KPiBJ dCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIHRoZSB0d28gaWYgc3RhdGVtZW50IGFsd2F5cywg LgpPSywgSSB3aWxsIG1vZGlmeSBhdCBuZXh0IHBhdGNoLgo+IAo+IAo+ID4gKwkgICAgKCh1bnNp Z25lZCBsb25nKWRhdGEgPiBjY2lfZGYtPnByb2NfcmVnX3VWKSkgewo+ID4gKwkJY2NpX2RmLT5w cm9jX3JlZ191ViA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Cj4gPiArCQltdXRleF9sb2NrKCZjY2lf ZGYtPmRldmZyZXEtPmxvY2spOwo+ID4gKwkJdXBkYXRlX2RldmZyZXEoY2NpX2RmLT5kZXZmcmVx KTsKPiAKPiBkaXR0by4gUGxlYXNlIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgdXBkYXRlX2Rl dmZyZXEuCk9LLCBJIHdpbGwgbW9kaWZ5IGF0IG5leHQgcGF0Y2guCj4gCj4gPiArCQltdXRleF91 bmxvY2soJmNjaV9kZi0+ZGV2ZnJlcS0+bG9jayk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogZGVh bCB3aXRoIGluY3JlYXNlIGZyZXF1ZW5jeSAqLwo+ID4gKwlpZiAoKHZhbCAmIFJFR1VMQVRPUl9F VkVOVF9WT0xUQUdFX0NIQU5HRSkgJiYKPiAKPiBkaXR0by4KPiBpZiAtPiBlbHNlIGlmCj4gCj4g QXQgdGhlIHNhbWUgdGltZSwgcmVjZWl2ZXMgb25seSBvbmUgbm90aWZpY2F0aW9uLgo+IEl0IGlz IG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIHR3byBpZiBzdGF0ZW1lbnQgYWx3YXlzLCAuCk9L LCBJIHdpbGwgbW9kaWZ5IGF0IG5leHQgcGF0Y2guCj4gCj4gCj4gPiArCSAgICAoY2NpX2RmLT5w cm9jX3JlZ191ViA8ICh1bnNpZ25lZCBsb25nKWRhdGEpKSB7Cj4gPiArCQljY2lfZGYtPnByb2Nf cmVnX3VWID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKPiA+ICsJCW11dGV4X2xvY2soJmNjaV9kZi0+ ZGV2ZnJlcS0+bG9jayk7Cj4gPiArCQl1cGRhdGVfZGV2ZnJlcShjY2lfZGYtPmRldmZyZXEpOwo+ IAo+IGRpdHRvLiBQbGVhc2UgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiB1cGRhdGVfZGV2ZnJl cS4KT0ssIEkgd2lsbCBtb2RpZnkgYXQgbmV4dCBwYXRjaC4KPiAKPiA+ICsJCW11dGV4X3VubG9j aygmY2NpX2RmLT5kZXZmcmVxLT5sb2NrKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtdGtfY2NpX2dvdmVybm9yX2dldF90YXJnZXQo c3RydWN0IGRldmZyZXEgKmRldmZyZXEsCj4gPiArCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpm cmVxKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNjaV9kZXZmcmVxICpjY2lfZGY7Cj4gPiArCXN0cnVj dCBkZXZfcG1fb3BwICpvcHA7Cj4gPiArCj4gPiArCWNjaV9kZiA9IGRldl9nZXRfZHJ2ZGF0YShk ZXZmcmVxLT5kZXYucGFyZW50KTsKPiA+ICsKPiA+ICsJLyogZmluZCBhdmFpbGFibGUgZnJlcXVl bmN5ICovCj4gPiArCW9wcCA9IGRldl9wbV9vcHBfZmluZF9tYXhfZnJlcV9ieV92b2x0KGRldmZy ZXEtPmRldi5wYXJlbnQsCj4gPiArCQkJCQkJIGNjaV9kZi0+cHJvY19yZWdfdVYpOwo+ID4gKwkq ZnJlcSA9IGRldl9wbV9vcHBfZ2V0X2ZyZXEob3BwKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX2NjaV9nb3Zlcm5vcl9ldmVudF9oYW5kbGVy KHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxLAo+ID4gKwkJCQkJICB1bnNpZ25lZCBpbnQgZXZlbnQs IHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlzdHJ1Y3QgY2NpX2RldmZyZXEgKmNjaV9kZjsKPiA+ ICsJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYjsKPiA+ICsKPiA+ICsJY2NpX2RmID0gZGV2X2dl dF9kcnZkYXRhKGRldmZyZXEtPmRldi5wYXJlbnQpOwo+ID4gKwluYiA9ICZjY2lfZGYtPm5iOwo+ ID4gKwo+ID4gKwlzd2l0Y2ggKGV2ZW50KSB7Cj4gPiArCWNhc2UgREVWRlJFUV9HT1ZfU1RBUlQ6 Cj4gPiArCWNhc2UgREVWRlJFUV9HT1ZfUkVTVU1FOgo+ID4gKwkJbmItPm5vdGlmaWVyX2NhbGwg PSBjY2lfZGV2ZnJlcV9yZWd1bGF0b3Jfbm90aWZpZXI7Cj4gPiArCQlyZWd1bGF0b3JfcmVnaXN0 ZXJfbm90aWZpZXIoY2NpX2RmLT5wcm9jX3JlZywKPiA+ICsJCQkJCSAgICBuYik7Cj4gCj4gUGxl YXNlIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgcmVndWxhdG9yX3JlZ2lzdGVyX25vdGlmaWVy Cj4gaW4gb3JkZXIgdG8gaGFuZGxlIHRoZSBleGNlcHRpb24gaGFuZGxpbmcuCk9LLCBJIHdpbGwg bW9kaWZ5IGF0IG5leHQgcGF0Y2guCj4gCj4gCj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2Fz ZSBERVZGUkVRX0dPVl9TVE9QOgo+ID4gKwljYXNlIERFVkZSRVFfR09WX1NVU1BFTkQ6Cj4gPiAr CQlyZWd1bGF0b3JfdW5yZWdpc3Rlcl9ub3RpZmllcihjY2lfZGYtPnByb2NfcmVnLAo+ID4gKwkJ CQkJICAgIG5iKTsKPiAKPiBkaXR0by4KPiAKPiA+ICsKPiAKPiBSZW1vdmUgdW5uZWVkZWQgYmxh bmsgbGluZS4KT0ssIEkgd2lsbCBtb2RpZnkgYXQgbmV4dCBwYXRjaC4KPiAKPiA+ICsJCWJyZWFr Owo+ID4gKwo+ID4gKwlkZWZhdWx0Ogo+ID4gKwkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZGV2ZnJlcV9nb3Zlcm5v ciBtdGtfY2NpX2RldmZyZXFfZ292ZXJub3IgPSB7Cj4gPiArCS5uYW1lID0gIm10a19jY2lfdm1v biIsCj4gCj4gSG93IGFib3V0IGVkaXRpbmcgdGhlIG5hbWUgZnJvbSBtdGtfY2NpX3Ztb24gdG8g bWVkaWF0ZWtfY2NpX3ZvbHRhZ2VfbW9uaXRvcgo+IGZvciB0aGUgcmVhZGFiaWxpdHk/IEFjdHVh bGx5LCAnbXRrJyBhbmQgJ3Ztb24nIGFyZSBub3Qgc3RhbmRhcmQgZXhwcmVzc2lvbi4KVGhlIHNy dGluZyBvZiBuYW1lIGlzIG9ubHkgWzE2XSwgSSdsbCBsZWF2ZSBpdCBhcyBtdGtfY2NpX3Ztb24u Cj4gCj4gPiArCS5nZXRfdGFyZ2V0X2ZyZXEgPSBtdGtfY2NpX2dvdmVybm9yX2dldF90YXJnZXQs Cj4gPiArCS5ldmVudF9oYW5kbGVyID0gbXRrX2NjaV9nb3Zlcm5vcl9ldmVudF9oYW5kbGVyLAo+ IAo+IFBsZWFzZSBhZGQgZm9sbG93aW5nIGNvZGUgdG8gbWFrZSBpdCBhcyB0aGUgaW1tdXRhYmxl Cj4gYmVjYXVzZSB0aGUgZ292ZXJub3IgZm9yIHRoaXMgZHJpdmVyIHdpbGwgbm90IGJlIGNoYW5n ZWQKPiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZS4KPiAKPiAJLmltbXV0YWJsZSA9IHRydWUKT0ss IEkgd2lsbCBtb2RpZnkgYXQgbmV4dCBwYXRjaC4KPiAKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgbXRrX2NjaV9kZXZmcmVxX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVk IGxvbmcgKmZyZXEsCj4gPiArCQkJCSAgdTMyIGZsYWdzKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNj aV9kZXZmcmVxICpjY2lfZGYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsKPiA+ICsJaWYg KCFjY2lfZGYpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJY2xrX3NldF9yYXRl KGNjaV9kZi0+Y2NpX2NsaywgKmZyZXEpOwo+IAo+IFBsZWFzZSBjaGVjayB0aGUgcmV0dXJuIHZh bHVlIG9mIGNsa19zZXRfcmF0ZSgpLgpPSywgSSB3aWxsIG1vZGlmeSBhdCBuZXh0IHBhdGNoLgo+ IAo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBk ZXZmcmVxX2Rldl9wcm9maWxlIGNjaV9kZXZmcmVxX3Byb2ZpbGUgPSB7Cj4gPiArCS50YXJnZXQJ CT0gbXRrX2NjaV9kZXZmcmVxX3RhcmdldCwKPiAKPiBKdXN0IHVzZSB0aGUgc3BhY2UgaW5zdGVh ZCBvZiB0YWIgYmVjYXVzZSBjY2lfZGV2ZnJlcV9wcm9maWxlCj4gb25seSBoYXMgb25lIHJlY29y ZC4KPiAKPiAJLnRhcmdldCA9IG10a19jY2lfZGV2ZnJlcV90YXJnZXQsCk9LLCBJIHdpbGwgbW9k aWZ5IGF0IG5leHQgcGF0Y2guCj4gCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19j Y2lfZGV2ZnJlcV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRldmljZSAqY2NpX2RldiA9ICZwZGV2LT5kZXY7Cj4gPiArCXN0cnVjdCBjY2lf ZGV2ZnJlcSAqY2NpX2RmOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwljY2lfZGYgPSBkZXZt X2t6YWxsb2MoY2NpX2Rldiwgc2l6ZW9mKCpjY2lfZGYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYg KCFjY2lfZGYpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJY2NpX2RmLT5jY2lf Y2xrID0gY2xrX2dldChjY2lfZGV2LCAiY2NpX2Nsb2NrIik7Cj4gCj4gY2xrX2dldCAtPiBkZXZt X2Nsa19nZXQoKQpPSywgSSB3aWxsIG1vZGlmeSBhdCBuZXh0IHBhdGNoLgo+IAo+ID4gKwlyZXQg PSBQVFJfRVJSX09SX1pFUk8oY2NpX2RmLT5jY2lfY2xrKTsKPiA+ICsJaWYgKHJldCkgewo+ID4g KwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQo+ID4gKwkJCWRldl9lcnIoY2NpX2RldiwgImZh aWxlZCB0byBnZXQgY2xvY2sgZm9yIENDSTogJWRcbiIsCj4gPiArCQkJCXJldCk7Cj4gPiArCj4g Cj4gUmVtb3ZlIHVubmVlZGVkIGJsYW5rIGxpbmUuCj4gCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4g Kwl9PiArCj4gPiArCWNjaV9kZi0+cHJvY19yZWcgPSByZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGNj aV9kZXYsICJwcm9jIik7Cj4gCj4gCj4gcmVndWxhdG9yX2dldF9vcHRpb25hbCAtPiBkZXZtX3Jl Z3VsYXRvcl9nZXRfb3B0aW9uYWwKT0ssIEkgd2lsbCBtb2RpZnkgYXQgbmV4dCBwYXRjaC4KPiAK PiA+ICsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKGNjaV9kZi0+cHJvY19yZWcpOwo+ID4gKwlpZiAo cmV0KSB7Cj4gPiArCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCj4gPiArCQkJZGV2X2Vycihj Y2lfZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3IgZm9yIENDSTogJWRcbiIsCj4gPiArCQkJ CXJldCk7Cj4gPiArCj4gCj4gUmVtb3ZlIHVubmVlZGVkIGJsYW5rIGxpbmUuCj4gCj4gPiArCQln b3RvIGVycl9wdXRfY2xrOwo+IAo+IElmIHlvdSB1c2UgZGV2bV9jbGtfZ2V0KCksIGp1c3QgcmV0 dXJuIGluc3RlYWQgb2YgZ290by4KT0ssIEkgd2lsbCByZXdyaXRlIHRoZXNlIGNvZGUuCj4gCj4g PiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gZGV2X3BtX29wcF9vZl9hZGRfdGFibGUoJnBkZXYtPmRl dik7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoY2NpX2RldiwgIkZhaWwgdG8gaW5p dCBDQ0kgT1BQIHRhYmxlXG4iKTsKPiA+ICsJCWdvdG8gZXJyX3B1dF9yZWc7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2NpX2RmKTsKPiA+ICsKPiA+ICsJ Y2NpX2RmLT5kZXZmcmVxID0gZGV2bV9kZXZmcmVxX2FkZF9kZXZpY2UoY2NpX2RldiwKPiA+ICsJ CQkJCQkgICAgICAgJmNjaV9kZXZmcmVxX3Byb2ZpbGUsCj4gPiArCQkJCQkJICAgICAgICJtdGtf Y2NpX3Ztb24iLAo+ID4gKwkJCQkJCSAgICAgICBOVUxMKTsKPiA+ICsJaWYgKElTX0VSUihjY2lf ZGYtPmRldmZyZXEpKSB7Cj4gPiArCQlkZXZfZXJyKGNjaV9kZXYsICJjYW5ub3QgY3JlYXRlIGNj aSBkZXZmcmVxIGRldmljZVxuIiwgcmV0KTsKPiA+ICsJCWdvdG8gZXJyX3B1dF9yZWc7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX3B1dF9yZWc6Cj4gPiArCXJl Z3VsYXRvcl9wdXQoY2NpX2RmLT5wcm9jX3JlZyk7Cj4gPiArZXJyX3B1dF9jbGs6Cj4gPiArCWNs a19wdXQoY2NpX2RmLT5jY2lfY2xrKTsKPiAKPiBJZiB5b3UgdXNlIGRldm1fY2xrX2dldCgpL2Rl dm1fcmVndWxhdG9yX2dldCgpLAo+ICdlcnJfcHV0X3JlZycgYW5kICdlcnJfcHV0X2NsaycgYXJl IHVubmVlZGVkLgpPSywgSSB3aWxsIHJld3JpdGUgdGhlc2UgY29kZS4KPiAKPiA+ICsKPiA+ICsJ cmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgbWVkaWF0ZWtfY2NpX2RldmZyZXFfb2ZfbWF0Y2hbXSA9IHsKPiA+ICsJeyAuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtY2NpIiB9LAo+ID4gKwl7IH0sCj4gPiArfTsKPiA+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtZWRpYXRla19jY2lfZGV2ZnJlcV9vZl9tYXRjaCk7Cj4g PiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2NpX2RldmZyZXFfZHJpdmVy ID0gewo+ID4gKwkucHJvYmUJPSBtdGtfY2NpX2RldmZyZXFfcHJvYmUsCj4gPiArCS5kcml2ZXIg PSB7Cj4gPiArCQkubmFtZSA9ICJtZWRpYXRlay1jY2ktZGV2ZnJlcSIsCj4gPiArCQkub2ZfbWF0 Y2hfdGFibGUgPSBtZWRpYXRla19jY2lfZGV2ZnJlcV9vZl9tYXRjaCwKPiA+ICsJfSwKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19pbml0IG10a19jY2lfZGV2ZnJlcV9pbml0KHZvaWQp Cj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBkZXZmcmVxX2FkZF9nb3Zl cm5vcigmbXRrX2NjaV9kZXZmcmVxX2dvdmVybm9yKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJ cHJfZXJyKCIlczogZmFpbGVkIHRvIGFkZCBnb3Zlcm5vcjogJWRcbiIsIF9fZnVuY19fLCByZXQp Owo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBwbGF0Zm9ybV9k cml2ZXJfcmVnaXN0ZXIoJmNjaV9kZXZmcmVxX2RyaXZlcik7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlkZXZmcmVxX3JlbW92ZV9nb3Zlcm5vcigmbXRrX2NjaV9kZXZmcmVxX2dvdmVybm9yKTsKPiA+ ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArbW9kdWxlX2luaXQobXRrX2NjaV9kZXZm cmVxX2luaXQpCj4gPiArCj4gPiArc3RhdGljIHZvaWQgX19leGl0IG10a19jY2lfZGV2ZnJlcV9l eGl0KHZvaWQpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBkZXZmcmVx X3JlbW92ZV9nb3Zlcm5vcigmbXRrX2NjaV9kZXZmcmVxX2dvdmVybm9yKTsKPiA+ICsJaWYgKHJl dCkKPiA+ICsJCXByX2VycigiJXM6IGZhaWxlZCB0byByZW1vdmUgZ292ZXJub3I6ICVkXG4iLCBf X2Z1bmNfXywgcmV0KTsKPiA+ICsKPiA+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNj aV9kZXZmcmVxX2RyaXZlcik7Cj4gPiArfQo+ID4gK21vZHVsZV9leGl0KG10a19jY2lfZGV2ZnJl cV9leGl0KQo+ID4gKwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgQ0NJIGRldmZy ZXEgZHJpdmVyIik7Cj4gPiArTU9EVUxFX0FVVEhPUigiQW5kcmV3LXNoLkNoZW5nIDxhbmRyZXct c2guY2hlbmdAbWVkaWF0ZWsuY29tPiIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK PiA+IAo+IAo+IAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==