From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandipan Patra Subject: RE: [PATCH V2] pwm: tegra: dynamic clk freq configuration by PWM driver Date: Fri, 22 May 2020 12:12:58 +0000 Message-ID: References: <1587398043-18767-1-git-send-email-spatra@nvidia.com> <34ae18f5-494c-7bc7-0f30-2d1455bbcb55@nvidia.com> <21428954-41cc-c01a-bca2-7eb19f444272@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <21428954-41cc-c01a-bca2-7eb19f444272@nvidia.com> Content-Language: en-US Sender: linux-pwm-owner@vger.kernel.org To: Jonathan Hunter , Thierry Reding , "robh+dt@kernel.org" , "u.kleine-koenig@pengutronix.de" Cc: Bibek Basu , Laxman Dewangan , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-tegra@vger.kernel.org" , "linux-kernel@vger.kernel.org" List-Id: linux-tegra@vger.kernel.org SGkgSm9uLA0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSm9uYXRo YW4gSHVudGVyIDxqb25hdGhhbmhAbnZpZGlhLmNvbT4NCj4gU2VudDogRnJpZGF5LCBNYXkgMjIs IDIwMjAgNToyMCBQTQ0KPiBUbzogU2FuZGlwYW4gUGF0cmEgPHNwYXRyYUBudmlkaWEuY29tPjsg VGhpZXJyeSBSZWRpbmcNCj4gPHRyZWRpbmdAbnZpZGlhLmNvbT47IHJvYmgrZHRAa2VybmVsLm9y ZzsgdS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlDQo+IENjOiBCaWJlayBCYXN1IDxiYmFz dUBudmlkaWEuY29tPjsgTGF4bWFuIERld2FuZ2FuDQo+IDxsZGV3YW5nYW5AbnZpZGlhLmNvbT47 IGxpbnV4LXB3bUB2Z2VyLmtlcm5lbC5vcmc7DQo+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3Jn OyBsaW51eC10ZWdyYUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJu ZWwub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggVjJdIHB3bTogdGVncmE6IGR5bmFtaWMgY2xr IGZyZXEgY29uZmlndXJhdGlvbiBieSBQV00NCj4gZHJpdmVyDQo+IA0KPiANCj4gDQo+IE9uIDIy LzA1LzIwMjAgMTI6MDEsIFNhbmRpcGFuIFBhdHJhIHdyb3RlOg0KPiA+IFRoYW5rcyBKb25hdGhh biwNCj4gPiBQbGVhc2UgaGVscCByZXZpZXdpbmcgZnVydGhlciB3aXRoIG15IHJlcGxpZXMgaW5s aW5lLg0KPiA+DQo+ID4NCj4gPiBUaGFua3MgJiBSZWdhcmRzLA0KPiA+IFNhbmRpcGFuDQo+ID4N Cj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogSm9uYXRoYW4gSHVu dGVyIDxqb25hdGhhbmhAbnZpZGlhLmNvbT4NCj4gPj4gU2VudDogRnJpZGF5LCBNYXkgMjIsIDIw MjAgMzo1NCBQTQ0KPiA+PiBUbzogU2FuZGlwYW4gUGF0cmEgPHNwYXRyYUBudmlkaWEuY29tPjsg VGhpZXJyeSBSZWRpbmcNCj4gPj4gPHRyZWRpbmdAbnZpZGlhLmNvbT47IHJvYmgrZHRAa2VybmVs Lm9yZzsNCj4gPj4gdS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlDQo+ID4+IENjOiBCaWJl ayBCYXN1IDxiYmFzdUBudmlkaWEuY29tPjsgTGF4bWFuIERld2FuZ2FuDQo+ID4+IDxsZGV3YW5n YW5AbnZpZGlhLmNvbT47IGxpbnV4LXB3bUB2Z2VyLmtlcm5lbC5vcmc7DQo+ID4+IGRldmljZXRy ZWVAdmdlci5rZXJuZWwub3JnOyBsaW51eC10ZWdyYUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0K PiA+PiBrZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggVjJd IHB3bTogdGVncmE6IGR5bmFtaWMgY2xrIGZyZXEgY29uZmlndXJhdGlvbiBieQ0KPiA+PiBQV00g ZHJpdmVyDQo+ID4+DQo+ID4+DQo+ID4+IE9uIDIwLzA0LzIwMjAgMTY6NTQsIFNhbmRpcGFuIFBh dHJhIHdyb3RlOg0KPiA+Pj4gQWRkZWQgc3VwcG9ydCBmb3IgZHluYW1pYyBjbG9jayBmcmVxIGNv bmZpZ3VyYXRpb24gaW4gcHdtIGtlcm5lbCBkcml2ZXIuDQo+ID4+PiBFYXJsaWVyIHRoZSBwd20g ZHJpdmVyIHVzZWQgdG8gY2FjaGUgYm9vdCB0aW1lIGNsb2NrIHJhdGUgYnkgcHdtDQo+ID4+PiBj bG9jayBwYXJlbnQgZHVyaW5nIHByb2JlLiBIZW5jZSBkeW5hbWljYWxseSBjaGFuZ2luZyBwd20g ZnJlcXVlbmN5DQo+ID4+PiB3YXMgbm90IHBvc3NpYmxlIGZvciBhbGwgdGhlIHBvc3NpYmxlIHJh bmdlcy4gV2l0aCB0aGlzIGNoYW5nZSwNCj4gPj4+IGR5bmFtaWMgY2FsY3VsYXRpb24gaXMgZW5h YmxlZCBhbmQgaXQgaXMgYWJsZSB0byBzZXQgdGhlIHJlcXVlc3RlZA0KPiA+Pj4gcGVyaW9kIGZy b20gc3lzZnMga25vYiBwcm92aWRlZCB0aGUgdmFsdWUgaXMgc3VwcG9ydGVkIGJ5IGNsb2NrIHNv dXJjZS4NCj4gPj4+DQo+ID4+PiBDaGFuZ2VzIG1haW5seSBoYXZlIDIgcGFydHM6DQo+ID4+PiAg IC0gVDE4NiBhbmQgbGF0ZXIgY2hpcHMgWzFdDQo+ID4+PiAgIC0gVDIxMCBhbmQgcHJpb3IgY2hp cHMgWzJdDQo+ID4+Pg0KPiA+Pj4gRm9yIFsxXSAtIENoYW5nZXMgaW1wbGVtZW50ZWQgdG8gc2V0 IHB3bSBwZXJpb2QgZHluYW1pY2FsbHkgYW5kDQo+ID4+PiAgICAgICAgICAgYWxzbyBjaGVja3Mg YWRkZWQgdG8gYWxsb3cgb25seSBpZiByZXF1ZXN0ZWQgcGVyaW9kKG5zKSBpcw0KPiA+Pj4gICAg ICAgICAgIGJlbG93IG9yIGVxdWFscyB0byBoaWdoZXIgcmFuZ2UuDQo+ID4+Pg0KPiA+Pj4gRm9y IFsyXSAtIE9ubHkgY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgcGVyaW9kKG5zKSBpcyBiZWxvdyBv ciBlcXVhbHMNCj4gPj4+ICAgICAgICAgICB0byBoaWdoZXIgcmFuZ2UgZGVmaW5lZCBieSBtYXgg Y2xvY2sgbGltaXQuIFRoZSBsaW1pdGF0aW9uDQo+ID4+PiAgICAgICAgICAgaW4gVDIxMCBvciBw cmlvciBjaGlwcyBhcmUgZHVlIHRvIHRoZSByZWFzb24gb2YgaGF2aW5nIG9ubHkNCj4gPj4+ICAg ICAgICAgICBvbmUgcHdtLWNvbnRyb2xsZXIgc3VwcG9ydGluZyBtdWx0aXBsZSBjaGFubmVscy4g QnV0IGxhdGVyDQo+ID4+PiAgICAgICAgICAgY2hpcHMgaGF2ZSBtdWx0aXBsZSBwd20gY29udHJv bGxlciBpbnN0YW5jZXMgZWFjaCBoYXZpbmcNCj4gPj4+IAkgIHNpbmdsZSBjaGFubmVsIHN1cHBv cnQuDQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogU2FuZGlwYW4gUGF0cmEgPHNwYXRyYUBu dmlkaWEuY29tPg0KPiA+Pj4gLS0tDQo+ID4+PiBWMjoNCj4gPj4+IDEuIE1pbiBwZXJpb2RfbnMg Y2FsY3VsYXRpb24gaXMgbW92ZWQgdG8gcHJvYmUuDQo+ID4+PiAyLiBBZGRlZCBkZXNjcmlwdGlv aW5zIGZvciBQV00gcmVnaXN0ZXIgYml0cyBhbmQgcmVnYXJkaW5nIGJlaGF2aW91cg0KPiA+Pj4g ICAgb2YgdGhlIGNvbnRyb2xsZXIgd2hlbiBuZXcgY29uZmlndXJhdGlvbiBpcyBhcHBsaWVkIG9y IHB3bSBpcyBkaXNhYmxlZC4NCj4gPj4+IDMuIFNldHRpbmcgcGVyaW9kIHdpdGggcG9zc2libGUg dmFsdWUgd2hlbiBzdXBwbGllZCBwZXJpb2QgaXMgYmVsb3cgbGltaXQuDQo+ID4+PiA0LiBDb3Jy ZWN0ZWQgdGhlIGVhcmxpZXIgY29kZSBjb21tZW50Og0KPiA+Pj4gICAgcGx1cyAxIGluc3RlYWQg b2YgbWludXMgMSBkdXJpbmcgcHdtIGNhbGN1bGF0aW9uDQo+ID4+Pg0KPiA+Pj4gIGRyaXZlcnMv cHdtL3B3bS10ZWdyYS5jIHwgMTEwDQo+ID4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0NCj4gPj4+ICAxIGZpbGUgY2hhbmdlZCwgOTQgaW5zZXJ0aW9u cygrKSwgMTYgZGVsZXRpb25zKC0pDQo+ID4+Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cHdtL3B3bS10ZWdyYS5jIGIvZHJpdmVycy9wd20vcHdtLXRlZ3JhLmMgaW5kZXgNCj4gPj4+IGQy NmVkOGYuLjdhMzYzMjUgMTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL3B3bS9wd20tdGVncmEu Yw0KPiA+Pj4gKysrIGIvZHJpdmVycy9wd20vcHdtLXRlZ3JhLmMNCj4gPj4+IEBAIC00LDggKzQs MzkgQEANCj4gPj4+ICAgKg0KPiA+Pj4gICAqIFRlZ3JhIHB1bHNlLXdpZHRoLW1vZHVsYXRpb24g Y29udHJvbGxlciBkcml2ZXINCj4gPj4+ICAgKg0KPiA+Pj4gLSAqIENvcHlyaWdodCAoYykgMjAx MCwgTlZJRElBIENvcnBvcmF0aW9uLg0KPiA+Pj4gLSAqIEJhc2VkIG9uIGFyY2gvYXJtL3BsYXQt bXhjL3B3bS5jIGJ5IFNhc2NoYSBIYXVlcg0KPiA+Pj4gPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+ DQo+ID4+PiArICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMjAsIE5WSURJQSBDb3Jwb3JhdGlvbi4N Cj4gPj4+ICsgKg0KPiA+Pj4gKyAqIE92ZXJ2aWV3IG9mIFRlZ3JhIFB1bHNlIFdpZHRoIE1vZHVs YXRvciBSZWdpc3RlcjoNCj4gPj4+ICsgKiAxLiAxMy1iaXQ6IEZyZXF1ZW5jeSBkaXZpc2lvbiAo U0NBTEUpDQo+ID4+PiArICogMi4gOC1iaXQgOiBQdWxzIGRpdmlzaW9uIChEVVRZKQ0KPiA+Pj4g KyAqIDMuIDEtYml0IDogRW5hYmxlIGJpdA0KPiA+Pj4gKyAqDQo+ID4+PiArICogVGhlIFBXTSBj bG9jayBmcmVxdWVuY3kgaXMgZGl2aWRlZCBieSAyNTYgYmVmb3JlIHN1YmRpdmlkaW5nIGl0DQo+ ID4+PiArIGJhc2VkDQo+ID4+PiArICogb24gdGhlIHByb2dyYW1tYWJsZSBmcmVxdWVuY3kgZGl2 aXNpb24gdmFsdWUgdG8gZ2VuZXJhdGUgdGhlDQo+ID4+PiArIHJlcXVpcmVkDQo+ID4+PiArICog ZnJlcXVlbmN5IGZvciBQV00gb3V0cHV0LiBUaGUgbWF4aW11bSBvdXRwdXQgZnJlcXVlbmN5IHRo YXQgY2FuDQo+ID4+PiArIGJlDQo+ID4+PiArICogYWNoaWV2ZWQgaXMgKG1heCByYXRlIG9mIHNv dXJjZSBjbG9jaykgLyAyNTYuDQo+ID4+PiArICogaS5lLiBpZiBzb3VyY2UgY2xvY2sgcmF0ZSBp cyA0MDggTUh6LCBtYXhpbXVtIG91dHB1dCBmcmVxdWVuY3kgY2FiIGJlOg0KPiA+Pj4gKyAqIDQw OCBNSHovMjU2ID0gMS42IE1Iei4NCj4gPj4+ICsgKiBUaGlzIDEuNiBNSHogZnJlcXVlbmN5IGNh biBmdXJ0aGVyIGJlIGRpdmlkZWQgdXNpbmcgU0NBTEUgdmFsdWUgaW4NCj4gUFdNLg0KPiA+Pj4g KyAqDQo+ID4+PiArICogUFdNIHB1bHNlIHdpZHRoOiA4IGJpdHMgYXJlIHVzYWJsZSBbMjM6MTZd IGZvciB2YXJ5aW5nIHB1bHNlIHdpZHRoLg0KPiA+Pj4gKyAqIFRvIGFjaGlldmUgMTAwJSBkdXR5 IGN5Y2xlLCBwcm9ncmFtIEJpdCBbMjRdIG9mIHRoaXMgcmVnaXN0ZXIgdG8NCj4gPj4+ICsgKiAx 4oCZYjEuIEluIHdoaWNoIGNhc2UgdGhlIG90aGVyIGJpdHMgWzIzOjE2XSBhcmUgc2V0IHRvIGRv bid0IGNhcmUuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBMaW1pdGF0aW9ucyBhbmQga25vd24gZmFj dHM6DQo+ID4+PiArICogLQlXaGVuIFBXTSBpcyBkaXNhYmxlZCwgdGhlIG91dHB1dCBpcyBkcml2 ZW4gdG8gMC4NCj4gPj4+ICsgKiAtCUl0IGRvZXMgbm90IGFsbG93IHRoZSBjdXJyZW50IFBXTSBw ZXJpb2QgdG8gY29tcGxldGUgYW5kDQo+ID4+PiArICoJc3RvcHMgYWJydXB0bHkuDQo+ID4+PiAr ICoNCj4gPj4+ICsgKiAtCUlmIHRoZSByZWdpc3RlciBpcyByZWNvbmZpZ3VyZWQgd2hpbGUgcHdt IGlzIHJ1bm5pbmcsDQo+ID4+PiArICoJSXQgZG9lcyBub3QgbGV0IHRoZSBjdXJyZW50bHkgcnVu bmluZyBwZXJpb2QgdG8gY29tcGxldGUuDQo+ID4+PiArICoNCj4gPj4+ICsgKiAtCVB1bHNlIHdp ZHRoIG9mIHRoZSBwd20gY2FuIG5ldmVyIGJlIG91dCBvZiBib3VuZC4NCj4gPj4+ICsgKglJdCdz IHRha2VuIGNhcmUgYXQgSFcgYW5kIFNXDQo+ID4+PiArICogLQlJZiB0aGUgdXNlciBpbnB1dCBk dXR5IGlzIGJlbG93IGxpbWl0LCB0aGVuIGRyaXZlciBzZXRzIGl0IHRvDQo+ID4+PiArICoJbWlu aW11bSBwb3NzaWJsZSB2YWx1ZS4NCj4gPj4+ICsgKiAtCUlmIGFueXRoaW5nIGVsc2UgZ29lcyB3 cm9uZyBmb3Igc2V0dGluZyBkdXR5IG9yIHBlcmlvZCwNCj4gPj4+ICsgKgktRUlOVkFMIGlzIHJl dHVybmVkLg0KPiA+Pj4gICAqLw0KPiA+Pj4NCj4gPj4+ICAjaW5jbHVkZSA8bGludXgvY2xrLmg+ DQo+ID4+PiBAQCAtNDEsNiArNzIsNyBAQCBzdHJ1Y3QgdGVncmFfcHdtX2NoaXAgew0KPiA+Pj4g IAlzdHJ1Y3QgcmVzZXRfY29udHJvbCpyc3Q7DQo+ID4+Pg0KPiA+Pj4gIAl1bnNpZ25lZCBsb25n IGNsa19yYXRlOw0KPiA+Pj4gKwl1bnNpZ25lZCBsb25nIG1pbl9wZXJpb2RfbnM7DQo+ID4+Pg0K PiA+Pj4gIAl2b2lkIF9faW9tZW0gKnJlZ3M7DQo+ID4+Pg0KPiA+Pj4gQEAgLTY3LDggKzk5LDkg QEAgc3RhdGljIGludCB0ZWdyYV9wd21fY29uZmlnKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4g Pj4gc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCj4gPj4+ICAJCQkgICAgaW50IGR1dHlfbnMsIGlu dCBwZXJpb2RfbnMpDQo+ID4+PiAgew0KPiA+Pj4gIAlzdHJ1Y3QgdGVncmFfcHdtX2NoaXAgKnBj ID0gdG9fdGVncmFfcHdtX2NoaXAoY2hpcCk7DQo+ID4+PiAtCXVuc2lnbmVkIGxvbmcgbG9uZyBj ID0gZHV0eV9ucywgaHo7DQo+ID4+PiAtCXVuc2lnbmVkIGxvbmcgcmF0ZTsNCj4gPj4+ICsJdW5z aWduZWQgbG9uZyBsb25nIHBfd2lkdGggPSBkdXR5X25zLCBwZXJpb2RfaHo7DQo+ID4+PiArCXVu c2lnbmVkIGxvbmcgcmF0ZSwgcmVxdWlyZWRfY2xrX3JhdGU7DQo+ID4+PiArCXVuc2lnbmVkIGxv bmcgcGZtOyAvKiBGcmVxdWVuY3kgZGl2aWRlciAqLw0KPiA+Pg0KPiA+PiBJZiBpdCBpcyBub3Qg bmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgdmFyaWFibGUgbmFtZXMsIHRoZW4gSSB3b3VsZA0KPiA+ PiBwcmVmZXIgd2Uga2VlcCB0aGVtIGFzIGlzIGFzIHRoZW4gY2hhbmdlcyB3b3VsZCBiZSBsZXNz Lg0KPiA+DQo+ID4gVGhlIGVhcmxpZXIgbmFtZSB3YXMgbWlzbGVhZGluZyBzbyB0aG91Z2h0IHRv IHVzZSBhIHNwZWNpZmljIG5hbWUgZm9yDQo+ID4gd2hpY2ggaXQgY2FuIGJlIGhlbHBmdWwgdG8g Zm9sbG93IHVwIHdpdGggdGhlIFRSTS4gU2luY2UgaXRzDQo+ID4gcmVjb21tZW5kZWQgdG8gcmV0 YWluIHRoZSB2YXJpYWJsZSBuYW1lcywgSSB3aWxsIGNoYW5nZSB0aGlzIGluIG5leHQgcGF0Y2gu DQo+IA0KPiBJIHdhcyBqdXN0IHdvbmRlcmluZyBpZiB3YXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSAn YycgdG8gJ3Bfd2lkdGgnLiBUaGlzIGNvdWxkDQo+IHJlZHVjZSB0aGUgZGlmZiBhIGJpdC4NCg0K WWVzLCBub3RlZCB0byByZXZlcnQgYmFjayBib3RoIHRoZSB2YXJpYWJsZXMgbmFtZSBjaGFuZ2Uu DQoNCj4gDQo+ID4+DQo+ID4+PiAgCXUzMiB2YWwgPSAwOw0KPiA+Pj4gIAlpbnQgZXJyOw0KPiA+ Pj4NCj4gPj4+IEBAIC03NywzNyArMTEwLDc3IEBAIHN0YXRpYyBpbnQgdGVncmFfcHdtX2NvbmZp ZyhzdHJ1Y3QgcHdtX2NoaXANCj4gPj4+ICpjaGlwLA0KPiA+PiBzdHJ1Y3QgcHdtX2RldmljZSAq cHdtLA0KPiA+Pj4gIAkgKiBwZXIgKDEgPDwgUFdNX0RVVFlfV0lEVEgpIGN5Y2xlcyBhbmQgbWFr ZSBzdXJlIHRvIHJvdW5kIHRvIHRoZQ0KPiA+Pj4gIAkgKiBuZWFyZXN0IGludGVnZXIgZHVyaW5n IGRpdmlzaW9uLg0KPiA+Pj4gIAkgKi8NCj4gPj4+IC0JYyAqPSAoMSA8PCBQV01fRFVUWV9XSURU SCk7DQo+ID4+PiAtCWMgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoYywgcGVyaW9kX25zKTsNCj4g Pj4+ICsJcF93aWR0aCAqPSAoMSA8PCBQV01fRFVUWV9XSURUSCk7DQo+ID4+PiArCXBfd2lkdGgg PSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwocF93aWR0aCwgcGVyaW9kX25zKTsNCj4gPj4+DQo+ID4+ PiAtCXZhbCA9ICh1MzIpYyA8PCBQV01fRFVUWV9TSElGVDsNCj4gPj4+ICsJdmFsID0gKHUzMilw X3dpZHRoIDw8IFBXTV9EVVRZX1NISUZUOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkg KiAgUGVyaW9kIGluIG5hbm8gc2Vjb25kIGhhcyB0byBiZSA8PSBoaWdoZXN0IGFsbG93ZWQgcGVy aW9kDQo+ID4+PiArCSAqICBiYXNlZCBvbiBtYXggY2xvY2sgcmF0ZSBvZiB0aGUgcHdtIGNvbnRy b2xsZXIuDQo+ID4+PiArCSAqDQo+ID4+PiArCSAqICBoaWdoZXIgbGltaXQgPSBtYXggY2xvY2sg bGltaXQgPj4gUFdNX0RVVFlfV0lEVEgNCj4gPj4+ICsJICogIGxvd2VyIGxpbWl0ID0gbWluIGNs b2NrIGxpbWl0ID4+IFBXTV9EVVRZX1dJRFRIID4+DQo+ID4+IFBXTV9TQ0FMRV9XSURUSA0KPiA+ Pj4gKwkgKi8NCj4gPj4+ICsJaWYgKHBlcmlvZF9ucyA8IHBjLT5taW5fcGVyaW9kX25zKSB7DQo+ ID4+PiArCQlwZXJpb2RfbnMgPSBwYy0+bWluX3BlcmlvZF9uczsNCj4gPj4+ICsJCXByX3dhcm4o IlBlcmlvZCBpcyBhZGp1c3RlZCB0byBhbGxvd2VkIHZhbHVlICglZCBucylcbiIsDQo+ID4+PiAr CQkJCXBlcmlvZF9ucyk7DQo+ID4+DQo+ID4+IEkgc2VlIHRoYXQgb3RoZXIgZHJpdmVycyAocHdt LWltZy5jKSBjb25zaWRlciB0aGlzIHRvIGJlIGFuIGVycm9yIGFuZA0KPiA+PiByZXR1cm4gYW4g ZXJyb3IuIEkgd29uZGVyIGlmIGFkanVzdGluZyB0aGUgcGVyaW9kIG1ha2VzIHNlbnNlIGhlcmU/ DQo+ID4+DQo+ID4+IEkgd29uZGVyIGlmIHRoZSBoYW5kbGluZyBvZiB0aGUgbWluX3BlcmlvZCwg c2hvdWxkIGJlIGEgc2VwYXJhdGUgY2hhbmdlPw0KPiA+DQo+ID4gSSB0aGluayBJIG1pc3VuZGVy c3Rvb2Qgb25lIG9mIHRoZSBkaXNjdXNzaW9ucyBpbiBpbml0aWFsIHBhdGNoIGFuZA0KPiA+IGFk ZGVkIHRoaXMgY2hhbmdlIHRvIGFwcGx5IHRoZSBtaW5pbXVtIHBvc3NpYmxlIHZhbHVlLiBVbmRl cnN0b29kIGFuZA0KPiA+IHdpbGwgcmV2ZXJ0IHRoaXMgY2hhbmdlIHdpdGggcmV0dXJuaW5nIGVy cm9yIGluIHN1Y2ggY2FzZS4NCj4gPg0KPiA+Pg0KPiA+Pj4gKwl9DQo+ID4+Pg0KPiA+Pj4gIAkv Kg0KPiA+Pj4gIAkgKiBDb21wdXRlIHRoZSBwcmVzY2FsZXIgdmFsdWUgZm9yIHdoaWNoICgxIDw8 IFBXTV9EVVRZX1dJRFRIKQ0KPiA+Pj4gIAkgKiBjeWNsZXMgYXQgdGhlIFBXTSBjbG9jayByYXRl IHdpbGwgdGFrZSBwZXJpb2RfbnMgbmFub3NlY29uZHMuDQo+ID4+PiAgCSAqLw0KPiA+Pj4gLQly YXRlID0gcGMtPmNsa19yYXRlID4+IFBXTV9EVVRZX1dJRFRIOw0KPiA+Pj4gKwlpZiAocGMtPnNv Yy0+bnVtX2NoYW5uZWxzID09IDEpIHsNCj4gPj4NCj4gPj4gQXJlIHlvdSB1c2luZyBudW1fY2hh bm5lbHMgdG8gZGV0ZXJtaW5lIGlmIFRlZ3JhIHVzZXMgdGhlIEJQTVA/IElmIHNvDQo+ID4+IHRo ZW4gdGhlIGFib3ZlIGlzIG5vdCByZWFsbHkgY29ycmVjdCwgYmVjYXVzZSBudW1fY2hhbm5lbHMg aXMgbm90DQo+ID4+IHJlYWxseSByZWxhdGVkIHRvIHdoYXQgaXMgYmVpbmcgZG9uZSBoZXJlLiBT byBtYXliZSB5b3UgbmVlZCBhIG5ldyBTb0MNCj4gYXR0cmlidXRlIGluIHRoZSBzb2MgZGF0YS4N Cj4gPg0KPiA+IEhlcmUsIGl0IHRyaWVzIHRvIGZpbmQgaWYgcHdtIGNvbnRyb2xsZXIgdXNlcyBt dWx0aXBsZSBjaGFubmVscyAobGlrZQ0KPiA+IGluIFRlZ3JhMjEwIG9yIG9sZGVyKSBvciBzaW5n bGUgY2hhbm5lbCBmb3IgZXZlcnkgcHdtIGluc3RhbmNlIChpLmUuDQo+ID4gVDE4NiwgVDE5NCku IElmIGZvdW5kIG11bHRpcGxlIGNoYW5uZWxzIG9uIGEgc2luZ2xlIGNvbnRyb2xsZXIgdGhlbiBp dA0KPiA+IGlzIG5vdCBjb3JyZWN0IHRvIGNvbmZpZ3VyZSBzZXBhcmF0ZSBjbG9jayByYXRlcyB0 byBlYWNoIG9mIHRoZSBjaGFubmVscy4gU28gdG8NCj4gZGlzdGluZ3Vpc2ggdGhlIGNvbnRyb2xs ZXIgYW5kIGNoYW5uZWwgdHlwZSwgbnVtX2NoYW5uZWxzIGlzIHJlZmVycmVkLg0KPiANCj4gT0ss IHRoZW4gdGhhdCBtYWtlcyBzZW5zZS4gTWF5YmUgYWRkIHRoaXMgZGV0YWlsIHRvIHRoZSBjb21t ZW50IGFib3V0IHdoeQ0KPiBudW1fY2hhbm5lbHMgaXMgdXNlZC4NCg0KT2suIFdpbGwgdXBkYXRl IGNvbW1lbnQuDQogDQo+IA0KPiA+Pg0KPiA+Pj4gKwkJLyoNCj4gPj4+ICsJCSAqIFJhdGUgaXMg bXVsdGlwbGllZCB3aXRoIDJeUFdNX0RVVFlfV0lEVEggc28gdGhhdCBpdA0KPiA+PiBtYXRjaGVz DQo+ID4+PiArCQkgKiB3aXRoIHRoZSBoaWVnaGVzdCBhcHBsaWNhYmxlIHJhdGUgdGhhdCB0aGUg Y29udHJvbGxlciBjYW4NCj4gPj4NCj4gPj4gcy9oaWVnaGVzdC9oaWdoZXN0Lw0KPiA+DQo+ID4g R290IGl0Lg0KPiA+DQo+ID4+DQo+ID4+PiArCQkgKiBwcm92aWRlLiBBbnkgZnVydGhlciBsb3dl ciB2YWx1ZSBjYW4gYmUgZGVyaXZlZCBieSBzZXR0aW5nDQo+ID4+PiArCQkgKiBQRk0gYml0c1sw OjEyXS4NCj4gPj4+ICsJCSAqIEhpZ2hlciBtYXJrIGlzIHRha2VuIHNpbmNlIEJQTVAgaGFzIHJv dW5kLXVwIG1lY2hhbmlzbQ0KPiA+Pj4gKwkJICogaW1wbGVtZW50ZWQuDQo+ID4+PiArCQkgKi8N Cj4gPj4+ICsJCXJlcXVpcmVkX2Nsa19yYXRlID0NCj4gPj4+ICsJCQkoTlNFQ19QRVJfU0VDIC8g cGVyaW9kX25zKSA8PCBQV01fRFVUWV9XSURUSDsNCj4gPj4+ICsNCj4gPj4NCj4gPj4gU2hvdWxk IGJlIHdlIGNoZWNraW5nIHRoZSByYXRlIGFnYWluc3QgdGhlIG1heCByYXRlIHN1cHBvcnRlZD8N Cj4gPg0KPiA+IElmIHRoZSByZXF1ZXN0IHJhdGUgaXMgYmV5b25kIG1heCBzdXBwb3J0ZWQgcmF0 ZSwgdGhlbiB0aGUNCj4gPiBjbGtfc2V0X3JhdGUgd2lsbCBiZSBmYWlsaW5nIGFuZCBjYW4gZ2V0 IGNhdWdodCB3aXRoIGVycm9yIGNoZWNrDQo+ID4gZm9sbG93ZWQgYnkuIE90aGVyd2lzZSBpdCB3 aWxsIGZhaWwgdGhyb3VnaCBmaXR0aW5nIGluIHRoZSByZWdpc3RlcidzIGZyZXF1ZW5jeQ0KPiBk aXZpZGVyIGZpbGVkLiBTbyBJIHRoaW5rIGl0IGlzIG5vdCByZXF1aXJlZCB0byBjaGVjayBhZ2Fp bnN0IG1heCByYXRlLg0KPiA+IFBsZWFzZSBhZHZpc2UgaWYgSSBhbSBub3QgYWJsZSB0byBmb2xs b3cgd2l0aCB3aGF0IHlvdSBhcmUgc3VnZ2VzdGluZy4NCj4gDQo+IEkgdGhpbmsgdGhhdCBpdCB3 b3VsZCBiZSBiZXR0ZXIgdG8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgc28gdGhhdCBpdCBpcyBu b3QNCj4gaW5jb3JyZWN0bHkgdXNlZCBlbHNlIHdoZXJlIGJ5IGFueSBmdXR1cmUgY2hhbmdlLiBG dXJ0aGVybW9yZSwgdGhpcyBzaW1wbGlmaWVzDQo+IG1hdHRlcnMgYSBiaXQgYmVjYXVzZSB5b3Ug Y2FuIGRvIHRoZSBmb2xsb3dpbmcgZm9yIGFsbCBkZXZpY2VzLCBidXQgb25seSB1cGRhdGUNCj4g dGhlIGNsa19yYXRlIGZvciB0aG9zZSB5b3Ugd2lzaCB0byAuLi4NCj4gDQo+ICAgICByYXRlID0g cGMtPmNsa19yYXRlID4+IFBXTV9EVVRZX1dJRFRIOw0KPiANCldoYXQgSSB1bmRlcnN0b29kIGZy b20gYWJvdmUgaXMsIHdlIHdpbGwgYWx3YXlzIHVzZSBtYXggcmF0ZSBmb3IgYW55IGZ1cnRoZXIg Y29uZmlndXJhdGlvbnMuDQpJZiB0aGlzIGlzIHRoZSBzdWdnZXN0aW9uIGFib3ZlLCB0aGVuIEkg dGhpbmsgaXRzIG5vdCB0aGUgcmlnaHQgd2F5Lg0KSWYgd2UgY29uc2lkZXIgb25seSBtYXggcmF0 ZSB0aGVuIHRoZSBwd20gb3V0cHV0IGNhbiBvbmx5IGJlIHJhbmdpbmcgZnJvbToNClBvc3NpYmxl IG1heCBvdXRwdXQgcmF0ZTogcmF0ZQ0KUG9zc2libGUgbWluIG91dHB1dCByYXRlOiByYXRlLzJe MTMgKDEzIGJpdHMgZnJlcXVlbmN5IGRpdmlzb3IpDQoNCkJ1dCBpZiB3ZSBjb25zaWRlciB0aGUg bWluIHJhdGUgc3VwcG9ydGVkIGJ5IHRoZSBzb3VyY2UgY2xvY2sgdGhlbiwNCm1pbiBvdXRwdXQg cmF0ZSBjYW4gZ28gYmV5b25kIHRoZSBjdXJyZW50IG1pbiBwb3NzaWJsZSBhbmQgDQp0aGF0IHNo b3VsZCBiZSBjb25zaWRlcmVkIGZvciBmaW5kaW5nIGFjdHVhbCBsaW1pdCBvZiBtaW4gb3V0cHV0 IHJhdGUuDQoNCkJhc2VkIG9uIHRoaXMsIGluIHRoZSBkcml2ZXIgaXQgdHJpZXMgdG8gZmluZCBh IHN1aXRhYmxlIGNsb2NrIHJhdGUgdG8gYWNoaWV2ZQ0KcmVxdWVzdGVkIG91dHB1dCByYXRlLg0K UGxlYXNlIHN1Z2dlc3QgaWYgeW91IHRoaW5rIHdlIGNhbiBzdGlsbCBpbXByb3ZlIHRoaXMgZnVy dGhlci4NCg0KPiA+Pg0KPiA+Pj4gKwkJZXJyID0gY2xrX3NldF9yYXRlKHBjLT5jbGssIHJlcXVp cmVkX2Nsa19yYXRlKTsNCj4gPj4+ICsJCWlmIChlcnIgPCAwKQ0KPiA+Pj4gKwkJCXJldHVybiAt RUlOVkFMOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmF0ZSA9IGNsa19nZXRfcmF0ZShwYy0+Y2xrKSA+ PiBQV01fRFVUWV9XSURUSDsNCj4gPj4NCj4gPj4gRG8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHB3 bS0+Y2xrX3JhdGUgaGVyZT8NCj4gPg0KPiA+IFRoaXMgcmV0dXJuIHJhdGUgaXMgYmFzaWNhbGx5 IGZyb20gdGhlIGZhY3RvciB0aGF0IHJlcXVlc3RlZA0KPiA+IGNsa19zZXRfcmF0ZSBhbmQgdGhl IGFjdHVhbCByYXRlIHNldCBtb3N0bHkgd2lsbCBoYXZlIGEgbGl0dGxlDQo+ID4gZGV2aWF0aW9u IGJhc2VkIG9uIHRoZSBjbG9jayBkaXZpZGVyIGFuZCBvdGhlciBmYWN0b3JzIHdoaWxlIHNldHRp bmcgYSBuZXcNCj4gcmF0ZS4gU28gY2FwdHVyaW5nIHRoZSBhY3R1YWwgcmF0ZSBmb3IgZnVydGhl ciBjYWxjdWxhdGlvbiBhbmQgY29udmVyc2lvbiB0byBIei4NCj4gPiBXaGVuZXZlciBpdCBpcyBy ZXF1aXJlZCB0byB1c2UgcHdtLT5jbGtfcmF0ZSB3ZSBhcmUgbm8gbG9uZ2VyDQo+ID4gZGVwZW5k aW5nIHVwb24gdGhlIGNhY2hlZCB2YWx1ZSBmb3IgbnVtX2NoYW5uZWxzID09IDEuIFNvIGluIG15 DQo+ID4gb3BpbmlvbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhY2hlZC4gSG93ZXZlciBpdCBp cyBrZXB0IHN0b3JlZCBmb3IgdGhlIFNvQ3MNCj4gaGF2aW5nIG51bV9jaGFubmVscyA+IDEuDQo+ ID4gUGxlYXNlIHN1Z2dlc3QgaWYgSSBhbSBtaXNzaW5nIGFueSBjYXNlIHdoZXJlIHdlIG5lZWQg dG8ga2VlcCB0aGUgdmFsdWUNCj4gc3RvcmVkLg0KPiANCj4gT0sgc291bmRzIGZpbmUuDQo+IA0K PiA+Pg0KPiA+Pj4gKwl9IGVsc2Ugew0KPiA+Pj4gKwkJLyoNCj4gPj4+ICsJCSAqIFRoaXMgaXMg dGhlIGNhc2UgZm9yIFNvQ3Mgd2hvIHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHM6DQo+ID4+PiAr CQkgKg0KPiA+Pj4gKwkJICogY2xrX3NldF9yYXRlKCkgY2FuIG5vdCBiZSBjYWxsZWQgYWdhaW4g aW4gY29uZmlnIGJlY2F1c2UNCj4gPj4+ICsJCSAqIFQyMTAgb3IgYW55IHByaW9yIGNoaXAgc3Vw cG9ydHMgb25lIHB3bS1jb250cm9sbGVyIGFuZA0KPiA+Pj4gKwkJICogbXVsdGlwbGUgY2hhbm5l bHMuIEhlbmNlIGluIHRoaXMgY2FzZSBjYWNoZWQgY2xvY2sgcmF0ZQ0KPiA+Pj4gKwkJICogd2ls bCBiZSBjb25zaWRlcmVkIHdoaWNoIHdhcyBzdG9yZWQgZHVyaW5nIHByb2JlLg0KPiA+Pj4gKwkJ ICovDQo+ID4+PiArCQlyYXRlID0gcGMtPmNsa19yYXRlID4+IFBXTV9EVVRZX1dJRFRIOw0KPiA+ Pj4gKwl9DQo+ID4+Pg0KPiA+Pj4gIAkvKiBDb25zaWRlciBwcmVjaXNpb24gaW4gUFdNX1NDQUxF X1dJRFRIIHJhdGUgY2FsY3VsYXRpb24gKi8NCj4gPj4+IC0JaHogPSBESVZfUk9VTkRfQ0xPU0VT VF9VTEwoMTAwVUxMICogTlNFQ19QRVJfU0VDLCBwZXJpb2RfbnMpOw0KPiA+Pj4gLQlyYXRlID0g RElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIHJhdGUsIGh6KTsNCj4gPj4+ICsJcGVyaW9k X2h6ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAqIE5TRUNfUEVSX1NFQywNCj4gPj4g cGVyaW9kX25zKTsNCj4gPj4+ICsJcGZtID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKDEwMFVMTCAq IHJhdGUsIHBlcmlvZF9oeik7DQo+ID4+Pg0KPiA+Pj4gIAkvKg0KPiA+Pj4gIAkgKiBTaW5jZSB0 aGUgYWN0dWFsIFBXTSBkaXZpZGVyIGlzIHRoZSByZWdpc3RlcidzIGZyZXF1ZW5jeSBkaXZpZGVy DQo+ID4+PiAtCSAqIGZpZWxkIG1pbnVzIDEsIHdlIG5lZWQgdG8gZGVjcmVtZW50IHRvIGdldCB0 aGUgY29ycmVjdCB2YWx1ZSB0bw0KPiA+Pj4gKwkgKiBmaWVsZCBwbHVzIDEsIHdlIG5lZWQgdG8g ZGVjcmVtZW50IHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSB0bw0KPiA+Pj4gIAkgKiB3cml0ZSB0 byB0aGUgcmVnaXN0ZXIuDQo+ID4+PiAgCSAqLw0KPiA+Pj4gLQlpZiAocmF0ZSA+IDApDQo+ID4+ PiAtCQlyYXRlLS07DQo+ID4+PiArCWlmIChwZm0gPiAwKQ0KPiA+Pj4gKwkJcGZtLS07DQo+ID4+ Pg0KPiA+Pj4gIAkvKg0KPiA+Pj4gLQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmF0ZSB3aWxsIGZp dCBpbiB0aGUgcmVnaXN0ZXIncyBmcmVxdWVuY3kNCj4gPj4+ICsJICogTWFrZSBzdXJlIHRoYXQg cGZtIHdpbGwgZml0IGluIHRoZSByZWdpc3RlcidzIGZyZXF1ZW5jeQ0KPiA+Pj4gIAkgKiBkaXZp ZGVyIGZpZWxkLg0KPiA+Pj4gIAkgKi8NCj4gPj4+IC0JaWYgKHJhdGUgPj4gUFdNX1NDQUxFX1dJ RFRIKQ0KPiA+Pj4gKwlpZiAocGZtID4+IFBXTV9TQ0FMRV9XSURUSCkNCj4gPj4+ICAJCXJldHVy biAtRUlOVkFMOw0KPiA+Pj4NCj4gPj4+IC0JdmFsIHw9IHJhdGUgPDwgUFdNX1NDQUxFX1NISUZU Ow0KPiA+Pj4gKwl2YWwgfD0gcGZtIDw8IFBXTV9TQ0FMRV9TSElGVDsNCj4gPj4+DQo+ID4+PiAg CS8qDQo+ID4+PiAgCSAqIElmIHRoZSBQV00gY2hhbm5lbCBpcyBkaXNhYmxlZCwgbWFrZSBzdXJl IHRvIHR1cm4gb24gdGhlIGNsb2NrDQo+ID4+PiBAQA0KPiA+Pj4gLTIwNSw2ICsyNzgsMTAgQEAg c3RhdGljIGludCB0ZWdyYV9wd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZQ0KPiA+PiAq cGRldikNCj4gPj4+ICAJICovDQo+ID4+PiAgCXB3bS0+Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUo cHdtLT5jbGspOw0KPiA+Pj4NCj4gPj4+ICsJLyogU2V0IG1pbmltdW0gbGltaXQgb2YgUFdNIHBl cmlvZCBmb3IgdGhlIElQICovDQo+ID4+PiArCXB3bS0+bWluX3BlcmlvZF9ucyA9DQo+ID4+PiAr CSAgICAoTlNFQ19QRVJfU0VDIC8gKHB3bS0+c29jLT5tYXhfZnJlcXVlbmN5ID4+DQo+ID4+IFBX TV9EVVRZX1dJRFRIKSkgKw0KPiA+Pj4gKzE7DQo+ID4+PiArDQo+ID4+PiAgCXB3bS0+cnN0ID0g ZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoJnBkZXYtPmRldiwgInB3bSIpOw0KPiA+ Pj4gIAlpZiAoSVNfRVJSKHB3bS0+cnN0KSkgew0KPiA+Pj4gIAkJcmV0ID0gUFRSX0VSUihwd20t PnJzdCk7DQo+ID4+PiBAQCAtMzEzLDQgKzM5MCw1IEBAIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIo dGVncmFfcHdtX2RyaXZlcik7DQo+ID4+Pg0KPiA+Pj4gIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsN Cj4gPj4+ICBNT0RVTEVfQVVUSE9SKCJOVklESUEgQ29ycG9yYXRpb24iKTsNCj4gPj4+ICtNT0RV TEVfQVVUSE9SKCJTYW5kaXBhbiBQYXRyYSA8c3BhdHJhQG52aWRpYS5jb20+Iik7DQo+ID4+PiAg TU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0ZWdyYS1wd20iKTsNCj4gPj4+DQo+ID4+DQo+ID4+IC0t DQo+ID4+IG52cHVibGljDQo+IA0KPiAtLQ0KPiBudnB1YmxpYw0K