RE: [PATCH V2] QorIQ/TMU: add thermal management support based on TMU
From: Hongtao Jia <hidden>
Date: 2015-08-14 03:15:26
Also in:
linux-pm
SGkgRWR1YXJkbywNCg0KSW4gcHJldmlvdXMgbWFpbCBJIGFza2VkIHF1ZXN0aW9ucyBhYm91dCBp bmNsdWRpbmcgaGVhZGVyIGZpbGVzIGluIGRldmljZSB0cmVlLg0KRG9uJ3QgYm90aGVyLCBJIGhh dmUgYWxyZWFkeSBmaWd1cmVkIG91dCB0aGUgc29sdXRpb24uDQoNCkFub3RoZXIgcXVlc3Rpb25z IGlzIGFib3V0IGNwdSBjb29saW5nOg0KSSBmb3VuZCBvdXQgdGhhdCB0aGVyZSBpcyBubyBleHBs aWNpdCBjYWxsaW5nIGZvciByZWdpc3RlcmluZyBjcHUgY29vbGluZw0KZGV2aWNlIGluIHRoZSBv Zi10aGVybWFsIHN0eWxlIGRyaXZlcnMuDQoNCkFuZCBTYW1zdW5nIGRpZCBpdCBpbiBjcHVmcmVx IGRyaXZlcjogZHJpdmVycy9jcHVmcmVxL2V4eW5vcy1jcHVmcmVxLmMNCg0KU2hvdWxkIGFsbCB0 aGUgb2YtdGhlcm1hbCBkcml2ZXIgdXNlIHRoZSBzYW1lIHdheT8NCk9yIGlzIHRoZXJlIGFueSBy ZWNvbW1lbmRhdGlvbiBmb3IgcmVnaXN0ZXJpbmcgY3B1IGNvb2xpbmcgZGV2aWNlPw0KKEkgZW5h YmxlZCB0aGUgQ09ORklHX0NQVUZSRVFfRFQgYW5kIHN0aWxsIGdvdCBubyBjb29saW5nIGRldmlj ZSByZWdpc3RlcmVkKQ0KDQpUaGFua3MuDQoNCi0tLQ0KQmVzdCBSZWdhcmRzLA0KSG9uZ3Rhbw0K DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGludXhwcGMtZGV2IFtt YWlsdG86bGludXhwcGMtZGV2LQ0KPiBib3VuY2VzK2IzODk1MT1mcmVlc2NhbGUuY29tQGxpc3Rz Lm96bGFicy5vcmddIE9uIEJlaGFsZiBPZiBIb25ndGFvIEppYQ0KPiBTZW50OiBGcmlkYXksIEF1 Z3VzdCAwNywgMjAxNSA0OjE1IFBNDQo+IFRvOiBFZHVhcmRvIFZhbGVudGluDQo+IENjOiBXb29k IFNjb3R0LUIwNzQyMTsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGxpbnV4LQ0KPiBw bUB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUkU6IFtQQVRDSCBWMl0gUW9ySVEvVE1VOiBh ZGQgdGhlcm1hbCBtYW5hZ2VtZW50IHN1cHBvcnQgYmFzZWQNCj4gb24gVE1VDQo+IA0KPiBUaGFu a3MgZm9yIHlvdXIgY29tbWVudHMuDQo+IFBsZWFzZSBzZWUgbXkgcXVlc3Rpb25zIGlubGluZS4N Cj4gDQo+IFRoYW5rcy4NCj4gLS0tDQo+IEJlc3QgUmVnYXJkcywNCj4gSG9uZ3Rhbw0KPiANCj4g DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBFZHVhcmRvIFZhbGVu dGluIFttYWlsdG86ZWR1YmV6dmFsQGdtYWlsLmNvbV0NCj4gPiBTZW50OiBUaHVyc2RheSwgQXVn dXN0IDA2LCAyMDE1IDM6NDMgQU0NCj4gPiBUbzogSmlhIEhvbmd0YW8tQjM4OTUxDQo+ID4gQ2M6 IGxpbnV4LXBtQHZnZXIua2VybmVsLm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7 IFdvb2QNCj4gPiBTY290dC0NCj4gPiBCMDc0MjENCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIFYy XSBRb3JJUS9UTVU6IGFkZCB0aGVybWFsIG1hbmFnZW1lbnQgc3VwcG9ydA0KPiA+IGJhc2VkIG9u IFRNVQ0KPiA+DQo+ID4gT24gVGh1LCBKdWwgMzAsIDIwMTUgYXQgMDg6MTM6MDlBTSArMDAwMCwg SG9uZ3RhbyBKaWEgd3JvdGU6DQo+ID4gPiAtICJBbnkgc3BlY2lmaWMgcmVhc29uIHdoeSBub3Qg dXNpbmcgT0YgdGhlcm1hbD8iDQo+ID4gPiAtIE5vLCBhY3R1YWxseS4NCj4gPiA+DQo+ID4gPiBJ J2QgbGlrZSB0byB1c2UgT0YgdGhlcm1hbCBhZnRlciBzb21lIGNsYXJpZmljYXRpb24uDQo+ID4g Pg0KPiA+ID4gUmVnYXJkaW5nIHRvICJjb29saW5nLW1hcHMiLiBGb3Igc29tZSBjYXNlcyB0aGVy ZSBzaG91bGQgYmUgbW9yZQ0KPiA+ID4gdGhhbiBvbmUgY3B1cyBhcyBjb29saW5nIGRldmljZSBh bmQgdGhleSBhcmUgaW5kZXBlbmRlbnQuDQo+ID4gPiAxLiBMZXQncyBzYXkgNC4gU28gd2UgbmVl ZCB0byBwcm92aWRlIDQgbWFwcyBsaWtlIG1hcDAtbWFwMy4gUmlnaHQ/DQo+ID4NCj4gPiBUaGF0 IHdvdWxkIGRlcGVuZCBvbiB0aGUgYW1vdW50IG9mIHNlbnNvcnMgeW91IGhhdmUuIERvIHlvdSBo YXZlIG9uZQ0KPiA+IHNlbnNvciBwZXIgY3B1PyBpZiB0aGUgYW5zd2VyIGlzIHllcywgdGhlbiB5 b3UgcHJvYmFibHkgd2FudCB0byBoYXZlDQo+ID4gZm91ciBkaWZmZXJlbnQgbWFwIGVudHJpZXMs IHllcywgYnV0IG9uZSBvbiBlYWNoIHRoZXJtYWwgem9uZSBvZiBlYWNoDQo+ID4gY3B1IHRlbXBl cmF0dXJlIHNlbnNvci4gaWYgdGhlIGFuc3dlciBpcyBubywgdGhlbiB5b3Ugd291bGQgbmVlZCB0 bw0KPiA+IGhhdmUgYWxsIHRoZSBtYXBzIGluIHRoZSBzYW1lIHRoZXJtYWwgem9uZS4NCj4gPg0K PiA+ID4gMi4gImNvb2xpbmctbWF4LWxldmVsIiBtYXkgdmFyeSBkZXBlbmQgb24gc3dpdGNoIHNl dHRpbmdzIG9yIGZpcm13YXJlLg0KPiA+IElzIHRoYXQNCj4gPiA+ICAgIE9LIGlmIEkgZG8gbm90 IHByb3ZpZGUgImNvb2xpbmctbWluLWxldmVsIiBhbmQgImNvb2xpbmctbWF4LWxldmVsIg0KPiA+ IHByb3BlcnR5Pw0KPiA+DQo+ID4gVGhhdCBpcyBhbHJlYWR5IGFjaGlldmFibGUgYnkgdXNpbmcg dGhlIGNvb2xpbmctZGV2aWNlIHByb3BlcnR5IG9mIGENCj4gPiBjb29saW5nIG1hcC4NCj4gPg0K PiA+IFBsZWFzZSBoYXZlIGEgbG9vayBpbiB0aGUgZXhhbXBsZSBzZWN0aW9uIG9mIHRoZQ0KPiA+ IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL3RoZXJtYWwudHh0DQo+ IA0KPiBZZXMsIEkgcmVhZCB0aGlzIGZpbGUuDQo+IFNvIGluIG15IHVuZGVyc3RhbmRpbmc6DQo+ IFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvdmlkZSAiY29vbGluZy1taW4tbGV2ZWwiIGFuZCAiY29v bGluZy1tYXgtbGV2ZWwiDQo+IHByb3BlcnR5Lg0KPiBUSEVSTUFMX05PX0xJTUlUIHZhbHVlIGlu IGNvb2xpbmcgZGV2aWNlIG5vZGUgd2lsbCBpbmRpY2F0ZSB0aGUgZHJpdmVyIHRvDQo+IGF1dG9t YXRpY2FsbHkgcGFyc2UgdGhlIG1pbiBhbmQgbWF4IHN0YXRlLCByaWdodD8NCj4gDQo+IFRhbGtp bmcgYWJvdXQgVEhFUk1BTF9OT19MSU1JVCwgSSBuZWVkIHRvICNpbmNsdWRlIDxkdC0NCj4gYmlu ZGluZ3MvdGhlcm1hbC90aGVybWFsLmg+IHRvIHByb3ZpZGUgdGhlIGRlZmluaXRpb24uIEJ1dCBJ IGdvdA0KPiBjb21waWxpbmcgZXJyb3Igd2hlbiBidWlsZCBkdGIgZmlsZS4NCj4gSSBkaWQgc29t ZSByZXNlYXJjaCBhbmQgdXNpbmcgIm1ha2UgdDEwNDBxZHMuZHRiIiBpbiBvcmRlciB0byBpbnZv bHZlDQo+IHByZXByb2Nlc3Nvci4NCj4gQnV0IHdpdGggc2ltcGx5IGFkZGluZyAiI2luY2x1ZGUg PGR0LWJpbmRpbmdzL3RoZXJtYWwvdGhlcm1hbC5oPiIgdG8NCj4gdDEwNDBzaS1wb3N0LmR0c2kg YXQgbGluZSAzNSBJIHN0aWxsIGdvdCBlcnJvciBsaWtlIHRoaXM6DQo+IEVycm9yOiBhcmNoL3Bv d2VycGMvYm9vdC9kdHMvZnNsL3QxMDQwc2ktcG9zdC5kdHNpOjM1LjEtOSBzeW50YXggZXJyb3IN Cj4gRkFUQUwgRVJST1I6IFVuYWJsZSB0byBwYXJzZSBpbnB1dCB0cmVlDQo+IA0KPiBDb3VsZCB5 b3UgaGVscCBtZSBvdXQgaGVyZS4NCj4gVGhhbmtzLg0KPiANCj4gPg0KPiA+IExldCBtZSBrbm93 IGlmIHlvdSBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi4NCj4gPg0KPiA+DQo+ID4gQlIsDQo+ ID4NCj4gPiBFZHVhcmRvIFZhbGVudGluDQo+ID4NCj4gPiA+DQo+ID4gPiBUaGFua3MuDQo+ID4g PiAtSG9uZ3Rhbw0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+ID4gPiA+IEZyb206IEVkdWFyZG8gVmFsZW50aW4gW21haWx0bzplZHViZXp2YWxAZ21h aWwuY29tXQ0KPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgSnVseSAzMCwgMjAxNSAyOjU2IFBNDQo+ ID4gPiA+IFRvOiBKaWEgSG9uZ3Rhby1CMzg5NTENCj4gPiA+ID4gQ2M6IGxpbnV4LXBtQHZnZXIu a2VybmVsLm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IFdvb2QNCj4gPiA+ID4g U2NvdHQtDQo+ID4gPiA+IEIwNzQyMQ0KPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIFYyXSBR b3JJUS9UTVU6IGFkZCB0aGVybWFsIG1hbmFnZW1lbnQgc3VwcG9ydA0KPiA+ID4gPiBiYXNlZCBv biBUTVUNCj4gPiA+ID4NCj4gPiA+ID4gT24gV2VkLCBKdWwgMjksIDIwMTUgYXQgMDI6MTk6MzlQ TSArMDgwMCwgSmlhIEhvbmd0YW8gd3JvdGU6DQo+ID4gPiA+ID4gSXQgc3VwcG9ydHMgb25lIGNy aXRpY2FsIHRyaXAgcG9pbnQgYW5kIG9uZSBwYXNzaXZlIHRyaXAgcG9pbnQuDQo+ID4gPiA+ID4g VGhlIGNwdWZyZXEgaXMgdXNlZCBhcyB0aGUgY29vbGluZyBkZXZpY2UgdG8gdGhyb3R0bGUgQ1BV cyB3aGVuDQo+ID4gPiA+ID4gdGhlIHBhc3NpdmUgdHJpcCBpcyBjcm9zc2VkLg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSmlhIEhvbmd0YW8gPGhvbmd0YW8uamlhQGZyZWVz Y2FsZS5jb20+DQo+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gVGhpcyBwYXRjaCBiYXNlZCBvbjoN Cj4gPiA+ID4gPiBodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvNDgyOTg3Lw0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gQ2hhbmdlcyBmb3IgVjI6DQo+ID4gPiA+ID4gKiBBZGQgdG11LXJh bmdlIHBhcnNlLg0KPiA+ID4gPiA+ICogVXNlIGRlZmF1bHQgdHJlbmQgaG9vay4NCj4gPiA+ID4g PiAqIFVzaW5nIGxhdGVzdCB0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZSBBUEkuDQo+ ID4gPiA+ID4gKiBBZGQgY2FsaWJyYXRpb24gY2hlY2sgZHVyaW5nIGluaXRpYWxpemF0aW9uLg0K PiA+ID4gPiA+ICogRGlzYWJsZS9lbmFsYmUgZGV2aWNlIHdoZW4gc3VzcGVuZC9yZXN1bWUuDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiAgZHJpdmVycy90aGVybWFsL0tjb25maWcgICAgICAgICB8ICAx MSArKw0KPiA+ID4gPiA+ICBkcml2ZXJzL3RoZXJtYWwvTWFrZWZpbGUgICAgICAgIHwgICAxICsN Cj4gPiA+ID4gPiAgZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYyB8IDQwNg0KPiA+ID4g PiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiA+ID4gPiAg MyBmaWxlcyBjaGFuZ2VkLCA0MTggaW5zZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ ID4gPiA+ID4gZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYw0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnIGIvZHJpdmVycy90aGVy bWFsL0tjb25maWcNCj4gPiA+ID4gPiBpbmRleA0KPiA+ID4gPiA+IDExODkzOGUuLmEyMDA3NDUg MTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy90aGVybWFsL0tjb25maWcNCj4gPiA+ID4g PiArKysgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZw0KPiA+ID4gPiA+IEBAIC0xODAsNiArMTgw LDE3IEBAIGNvbmZpZyBJTVhfVEhFUk1BTA0KPiA+ID4gPiA+ICAJICBjcHVmcmVxIGlzIHVzZWQg YXMgdGhlIGNvb2xpbmcgZGV2aWNlIHRvIHRocm90dGxlIENQVXMgd2hlbg0KPiA+IHRoZQ0KPiA+ ID4gPiA+ICAJICBwYXNzaXZlIHRyaXAgaXMgY3Jvc3NlZC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ ICtjb25maWcgUU9SSVFfVEhFUk1BTA0KPiA+ID4gPiA+ICsJdHJpc3RhdGUgIkZyZWVzY2FsZSBR b3JJUSBUaGVybWFsIE1vbml0b3JpbmcgVW5pdCINCj4gPiA+ID4gPiArCWRlcGVuZHMgb24gQ1BV X1RIRVJNQUwNCj4gPiA+ID4gPiArCWRlcGVuZHMgb24gT0YNCj4gPiA+ID4gPiArCWRlZmF1bHQg bg0KPiA+ID4gPiA+ICsJaGVscA0KPiA+ID4gPiA+ICsJICBFbmFibGUgdGhlcm1hbCBtYW5hZ2Vt ZW50IGJhc2VkIG9uIEZyZWVzY2FsZSBRb3JJUSBUaGVybWFsDQo+ID4gPiA+IE1vbml0b3JpbmcN Cj4gPiA+ID4gPiArCSAgVW5pdCAoVE1VKS4gSXQgc3VwcG9ydHMgb25lIGNyaXRpY2FsIHRyaXAg cG9pbnQgYW5kIG9uZQ0KPiA+ID4gPiA+ICtwYXNzaXZlDQo+ID4gPiA+IHRyaXANCj4gPiA+ID4g PiArCSAgcG9pbnQuIFRoZSBjcHVmcmVxIGlzIHVzZWQgYXMgdGhlIGNvb2xpbmcgZGV2aWNlIHRv DQo+ID4gdGhyb3R0bGUNCj4gPiA+ID4gPiArQ1BVcw0KPiA+ID4gPiB3aGVuDQo+ID4gPiA+ID4g KwkgIHRoZSBwYXNzaXZlIHRyaXAgaXMgY3Jvc3NlZC4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g IGNvbmZpZyBTUEVBUl9USEVSTUFMDQo+ID4gPiA+ID4gIAlib29sICJTUEVBciB0aGVybWFsIHNl bnNvciBkcml2ZXIiDQo+ID4gPiA+ID4gIAlkZXBlbmRzIG9uIFBMQVRfU1BFQVINCj4gPiA+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL01ha2VmaWxlIGIvZHJpdmVycy90aGVybWFs L01ha2VmaWxlDQo+ID4gPiA+ID4gaW5kZXgNCj4gPiA+ID4gPiA1MzVkZmVlLi44YzI1ODU5IDEw MDY0NA0KPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvdGhlcm1hbC9NYWtlZmlsZQ0KPiA+ID4gPiA+ ICsrKyBiL2RyaXZlcnMvdGhlcm1hbC9NYWtlZmlsZQ0KPiA+ID4gPiA+IEBAIC0zMyw2ICszMyw3 IEBAIG9iai0kKENPTkZJR19ET1ZFX1RIRVJNQUwpICAJKz0NCj4gZG92ZV90aGVybWFsLm8NCj4g PiA+ID4gPiAgb2JqLSQoQ09ORklHX0RCODUwMF9USEVSTUFMKQkrPSBkYjg1MDBfdGhlcm1hbC5v DQo+ID4gPiA+ID4gIG9iai0kKENPTkZJR19BUk1BREFfVEhFUk1BTCkJKz0gYXJtYWRhX3RoZXJt YWwubw0KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfSU1YX1RIRVJNQUwpCSs9IGlteF90aGVybWFs Lm8NCj4gPiA+ID4gPiArb2JqLSQoQ09ORklHX1FPUklRX1RIRVJNQUwpCSs9IHFvcmlxX3RoZXJt YWwubw0KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfREI4NTAwX0NQVUZSRVFfQ09PTElORykJKz0N Cj4gPiBkYjg1MDBfY3B1ZnJlcV9jb29saW5nLm8NCj4gPiA+ID4gPiAgb2JqLSQoQ09ORklHX0lO VEVMX1BPV0VSQ0xBTVApCSs9IGludGVsX3Bvd2VyY2xhbXAubw0KPiA+ID4gPiA+ICBvYmotJChD T05GSUdfWDg2X1BLR19URU1QX1RIRVJNQUwpCSs9IHg4Nl9wa2dfdGVtcF90aGVybWFsLm8NCj4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYw0KPiA+ ID4gPiA+IGIvZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYyBuZXcgZmlsZSBtb2RlIDEw MDY0NCBpbmRleA0KPiA+ID4gPiA+IDAwMDAwMDAuLjA2OTRmNDINCj4gPiA+ID4gPiAtLS0gL2Rl di9udWxsDQo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYw0K PiA+ID4gPiA+IEBAIC0wLDAgKzEsNDA2IEBADQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAq IENvcHlyaWdodCAyMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuDQo+ID4gPiA+ID4g KyAqDQo+ID4gPiA+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdA0KPiA+ID4gPiA+ICthbmQvb3IgbW9kaWZ5IGl0DQo+ID4gPiA+ID4g KyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljDQo+ID4gPiA+ID4gK0xpY2Vuc2UsDQo+ID4gPiA+ID4gKyAqIHZlcnNpb24gMiwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ID4gPiA+ID4gKyAqDQo+ ID4gPiA+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwNCj4gPiA+ID4gPiArYnV0IFdJVEhPVVQNCj4gPiA+ID4gPiArICogQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiA+ID4g PiArTUVSQ0hBTlRBQklMSVRZIG9yDQo+ID4gPiA+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbA0KPiA+ID4gPiA+ICtQdWJsaWMgTGlj ZW5zZSBmb3INCj4gPiA+ID4gPiArICogbW9yZSBkZXRhaWxzLg0KPiA+ID4gPiA+ICsgKg0KPiA+ ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAqIEJh c2VkIG9uIEZyZWVzY2FsZSBRb3JJUSBUaGVybWFsIE1vbml0b3JpbmcgVW5pdCAoVE1VKSAgKi8N Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4gI2luY2x1ZGUgPGxpbnV4L2Nw dV9jb29saW5nLmg+DQo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgv ZXJyLmg+ICNpbmNsdWRlIDxsaW51eC9pby5oPiAjaW5jbHVkZQ0KPiA+ID4gPiA+ICs8bGludXgv b2YuaD4gI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4gI2luY2x1ZGUNCj4gPiA+ID4gPiAr PGxpbnV4L3RoZXJtYWwuaD4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNkZWZpbmUgU0lURVNf TUFYCQkxNg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2RlZmluZSBUTVVfVEVNUF9QQVNTSVZF CTg1MDAwDQo+ID4gPiA+ID4gKyNkZWZpbmUgVE1VX1RFTVBfQ1JJVElDQUwJOTUwMDANCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKyNkZWZpbmUgVE1VX1BBU1NJVkVfREVMQVkJMTAwMAkvKiBNaWxs aXNlY29uZHMgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBUTVVfUE9MTElOR19ERUxBWQk1MDAwDQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBUaGUgZHJpdmVyIHN1cHBvcnRzIDEgcGFzc2l2ZSB0 cmlwIHBvaW50IGFuZCAxIGNyaXRpY2FsIHRyaXANCj4gPiA+ID4gPiArcG9pbnQgKi8gZW51bSB0 bXVfdGhlcm1hbF90cmlwIHsNCj4gPiA+ID4gPiArCVRNVV9UUklQX1BBU1NJVkUsDQo+ID4gPiA+ ID4gKwlUTVVfVFJJUF9DUklUSUNBTCwNCj4gPiA+ID4gPiArCVRNVV9UUklQX05VTSwNCj4gPiA+ ID4gPiArfTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAqIFFvcklR IFRNVSBSZWdpc3RlcnMNCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0cnVjdCBxb3JpcV90 bXVfc2l0ZV9yZWdzIHsNCj4gPiA+ID4gPiArCV9fYmUzMiB0cml0c3I7CQkvKiBJbW1lZGlhdGUg VGVtcGVyYXR1cmUgU2l0ZQ0KPiA+IFJlZ2lzdGVyICovDQo+ID4gPiA+ID4gKwlfX2JlMzIgdHJh dHNyOwkJLyogQXZlcmFnZSBUZW1wZXJhdHVyZSBTaXRlIFJlZ2lzdGVyDQo+ID4gKi8NCj4gPiA+ ID4gPiArCXU4IHJlczBbMHg4XTsNCj4gPiA+ID4gPiArfSBfX3BhY2tlZDsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gK3N0cnVjdCBxb3JpcV90bXVfcmVncyB7DQo+ID4gPiA+ID4gKwlfX2JlMzIg dG1yOwkJLyogTW9kZSBSZWdpc3RlciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIFRNUl9ESVNBQkxF CTB4MA0KPiA+ID4gPiA+ICsjZGVmaW5lIFRNUl9NRQkJMHg4MDAwMDAwMA0KPiA+ID4gPiA+ICsj ZGVmaW5lIFRNUl9BTFBGCTB4MGMwMDAwMDANCj4gPiA+ID4gPiArI2RlZmluZSBUTVJfTVNJVEUJ MHgwMDAwODAwMA0KPiA+ID4gPiA+ICsjZGVmaW5lIFRNUl9BTEwJCShUTVJfTUUgfCBUTVJfQUxQ RiB8IFRNUl9NU0lURSkNCj4gPiA+ID4gPiArCV9fYmUzMiB0c3I7CQkvKiBTdGF0dXMgUmVnaXN0 ZXIgKi8NCj4gPiA+ID4gPiArCV9fYmUzMiB0bXRtaXI7CQkvKiBUZW1wZXJhdHVyZSBtZWFzdXJl bWVudCBpbnRlcnZhbA0KPiA+ID4gPiBSZWdpc3RlciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIFRN VE1JUl9ERUZBVUxUCTB4MDAwMDAwMDcNCj4gPiA+ID4gPiArCXU4IHJlczBbMHgxNF07DQo+ID4g PiA+ID4gKwlfX2JlMzIgdGllcjsJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCj4g PiA+ID4gPiArI2RlZmluZSBUSUVSX0RJU0FCTEUJMHgwDQo+ID4gPiA+ID4gKwlfX2JlMzIgdGlk cjsJCS8qIEludGVycnVwdCBEZXRlY3QgUmVnaXN0ZXIgKi8NCj4gPiA+ID4gPiArCV9fYmUzMiB0 aXNjcjsJCS8qIEludGVycnVwdCBTaXRlIENhcHR1cmUgUmVnaXN0ZXIgKi8NCj4gPiA+ID4gPiAr CV9fYmUzMiB0aWNzY3I7CQkvKiBJbnRlcnJ1cHQgQ3JpdGljYWwgU2l0ZSBDYXB0dXJlDQo+ID4g UmVnaXN0ZXINCj4gPiA+ID4gKi8NCj4gPiA+ID4gPiArCXU4IHJlczFbMHgxMF07DQo+ID4gPiA+ ID4gKwlfX2JlMzIgdG1odGNyaDsJCS8qIEhpZ2ggVGVtcGVyYXR1cmUgQ2FwdHVyZSBSZWdpc3Rl cg0KPiA+ICovDQo+ID4gPiA+ID4gKwlfX2JlMzIgdG1odGNybDsJCS8qIExvdyBUZW1wZXJhdHVy ZSBDYXB0dXJlIFJlZ2lzdGVyDQo+ID4gKi8NCj4gPiA+ID4gPiArCXU4IHJlczJbMHg4XTsNCj4g PiA+ID4gPiArCV9fYmUzMiB0bWh0aXRyOwkJLyogSGlnaCBUZW1wZXJhdHVyZSBJbW1lZGlhdGUN Cj4gPiBUaHJlc2hvbGQgKi8NCj4gPiA+ID4gPiArCV9fYmUzMiB0bWh0YXRyOwkJLyogSGlnaCBU ZW1wZXJhdHVyZSBBdmVyYWdlIFRocmVzaG9sZA0KPiA+ICovDQo+ID4gPiA+ID4gKwlfX2JlMzIg dG1odGFjdHI7CS8qIEhpZ2ggVGVtcGVyYXR1cmUgQXZlcmFnZSBDcml0IFRocmVzaG9sZA0KPiA+ ICovDQo+ID4gPiA+ID4gKwl1OCByZXMzWzB4MjRdOw0KPiA+ID4gPiA+ICsJX19iZTMyIHR0Y2Zn cjsJCS8qIFRlbXBlcmF0dXJlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCj4gPiAqLw0KPiA+ID4g PiA+ICsJX19iZTMyIHRzY2ZncjsJCS8qIFNlbnNvciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICov DQo+ID4gPiA+ID4gKwl1OCByZXM0WzB4NzhdOw0KPiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3Rt dV9zaXRlX3JlZ3Mgc2l0ZVtTSVRFU19NQVhdOw0KPiA+ID4gPiA+ICsJdTggcmVzNVsweDlmOF07 DQo+ID4gPiA+ID4gKwlfX2JlMzIgaXBicnIwOwkJLyogSVAgQmxvY2sgUmV2aXNpb24gUmVnaXN0 ZXIgMCAqLw0KPiA+ID4gPiA+ICsJX19iZTMyIGlwYnJyMTsJCS8qIElQIEJsb2NrIFJldmlzaW9u IFJlZ2lzdGVyIDEgKi8NCj4gPiA+ID4gPiArCXU4IHJlczZbMHgzMTBdOw0KPiA+ID4gPiA+ICsJ X19iZTMyIHR0cjBjcjsJCS8qIFRlbXBlcmF0dXJlIFJhbmdlIDAgQ29udHJvbA0KPiA+IFJlZ2lz dGVyICovDQo+ID4gPiA+ID4gKwlfX2JlMzIgdHRyMWNyOwkJLyogVGVtcGVyYXR1cmUgUmFuZ2Ug MSBDb250cm9sDQo+ID4gUmVnaXN0ZXIgKi8NCj4gPiA+ID4gPiArCV9fYmUzMiB0dHIyY3I7CQkv KiBUZW1wZXJhdHVyZSBSYW5nZSAyIENvbnRyb2wNCj4gPiBSZWdpc3RlciAqLw0KPiA+ID4gPiA+ ICsJX19iZTMyIHR0cjNjcjsJCS8qIFRlbXBlcmF0dXJlIFJhbmdlIDMgQ29udHJvbA0KPiA+IFJl Z2lzdGVyICovDQo+ID4gPiA+ID4gK307DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKg0KPiA+ ID4gPiA+ICsgKiBUaGVybWFsIHpvbmUgZGF0YQ0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiAr c3RydWN0IHFvcmlxX3RtdV9kYXRhIHsNCj4gPiA+ID4gPiArCXN0cnVjdCB0aGVybWFsX3pvbmVf ZGV2aWNlICp0ejsNCj4gPiA+ID4gPiArCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpj ZGV2Ow0KPiA+ID4gPiA+ICsJZW51bSB0aGVybWFsX2RldmljZV9tb2RlIG1vZGU7DQo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBsb25nIHRlbXBfcGFzc2l2ZTsNCj4gPiA+ID4gPiArCXVuc2lnbmVkIGxv bmcgdGVtcF9jcml0aWNhbDsNCj4gPiA+ID4gPiArCXN0cnVjdCBxb3JpcV90bXVfcmVncyBfX2lv bWVtICpyZWdzOyB9Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCB0bXVfZ2V0 X21vZGUoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LA0KPiA+ID4gPiA+ICsJCQllbnVt IHRoZXJtYWxfZGV2aWNlX21vZGUgKm1vZGUpIHsNCj4gPiA+ID4gPiArCXN0cnVjdCBxb3JpcV90 bXVfZGF0YSAqZGF0YSA9IHR6LT5kZXZkYXRhOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCSpt b2RlID0gZGF0YS0+bW9kZTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4g PiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCB0bXVfc2V0X21v ZGUoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LA0KPiA+ID4gPiA+ICsJCQllbnVtIHRo ZXJtYWxfZGV2aWNlX21vZGUgbW9kZSkgew0KPiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3RtdV9k YXRhICpkYXRhID0gdHotPmRldmRhdGE7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYgKG1v ZGUgPT0gVEhFUk1BTF9ERVZJQ0VfRU5BQkxFRCkgew0KPiA+ID4gPiA+ICsJCXR6LT5wb2xsaW5n X2RlbGF5ID0gVE1VX1BPTExJTkdfREVMQVk7DQo+ID4gPiA+ID4gKwkJdHotPnBhc3NpdmVfZGVs YXkgPSBUTVVfUEFTU0lWRV9ERUxBWTsNCj4gPiA+ID4gPiArCQl0aGVybWFsX3pvbmVfZGV2aWNl X3VwZGF0ZSh0eik7DQo+ID4gPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gPiA+ICsJCXR6LT5wb2xs aW5nX2RlbGF5ID0gMDsNCj4gPiA+ID4gPiArCQl0ei0+cGFzc2l2ZV9kZWxheSA9IDA7DQo+ID4g PiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZGF0YS0+bW9kZSA9IG1vZGU7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdG11X2dldF90ZW1wKHN0cnVjdCB0aGVybWFsX3pv bmVfZGV2aWNlICp0eiwNCj4gPiA+ID4gPiArdW5zaWduZWQgbG9uZw0KPiA+ID4gPiA+ICsqdGVt cCkgew0KPiA+ID4gPiA+ICsJdTggdmFsOw0KPiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3RtdV9k YXRhICpkYXRhID0gdHotPmRldmRhdGE7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJdmFsID0g aW9yZWFkMzJiZSgmZGF0YS0+cmVncy0+c2l0ZVswXS50cml0c3IpOw0KPiA+ID4gPiA+ICsJKnRl bXAgPSAodW5zaWduZWQgbG9uZyl2YWwgKiAxMDAwOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr CXJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMg aW50IHRtdV9nZXRfdHJpcF90eXBlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwNCj4g PiA+ID4gPiAraW50DQo+ID4gdHJpcCwNCj4gPiA+ID4gPiArCQkJICAgICBlbnVtIHRoZXJtYWxf dHJpcF90eXBlICp0eXBlKSB7DQo+ID4gPiA+ID4gKwkqdHlwZSA9ICh0cmlwID09IFRNVV9UUklQ X1BBU1NJVkUpID8gVEhFUk1BTF9UUklQX1BBU1NJVkUgOg0KPiA+ID4gPiA+ICsJCQkJCSAgICAg VEhFUk1BTF9UUklQX0NSSVRJQ0FMOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVybiAw Ow0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgaW50IHRtdV9n ZXRfdHJpcF90ZW1wKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwNCj4gPiA+ID4gPiAr aW50DQo+ID4gdHJpcCwNCj4gPiA+ID4gPiArCQkJICAgICB1bnNpZ25lZCBsb25nICp0ZW1wKQ0K PiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKwlzdHJ1Y3QgcW9yaXFfdG11X2RhdGEgKmRhdGEgPSB0 ei0+ZGV2ZGF0YTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkqdGVtcCA9ICh0cmlwID09IFRN VV9UUklQX1BBU1NJVkUpID8gZGF0YS0+dGVtcF9wYXNzaXZlIDoNCj4gPiA+ID4gPiArCQkJCQkg ICAgIGRhdGEtPnRlbXBfY3JpdGljYWw7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJu IDA7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdG11 X2dldF9jcml0X3RlbXAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LA0KPiA+ID4gPiA+ ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnRlbXApDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiAr CXN0cnVjdCBxb3JpcV90bXVfZGF0YSAqZGF0YSA9IHR6LT5kZXZkYXRhOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCSp0ZW1wID0gZGF0YS0+dGVtcF9jcml0aWNhbDsNCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArc3RhdGljIGludCB0bXVfYmluZChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosDQo+ ID4gPiA+ID4gKwkJICAgIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KSB7DQo+ ID4gPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldCA9IHRoZXJt YWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHR6LCBUTVVfVFJJUF9QQVNTSVZFLA0KPiA+IGNk ZXYsDQo+ID4gPiA+ID4gKwkJCQkJICAgICAgIFRIRVJNQUxfTk9fTElNSVQsDQo+ID4gPiA+ID4g KwkJCQkJICAgICAgIFRIRVJNQUxfTk9fTElNSVQsDQo+ID4gPiA+ID4gKwkJCQkJICAgICAgIFRI RVJNQUxfV0VJR0hUX0RFRkFVTFQpOw0KPiA+ID4gPiA+ICsJaWYgKHJldCkgew0KPiA+ID4gPiA+ ICsJCWRldl9lcnIoJnR6LT5kZXZpY2UsDQo+ID4gPiA+ID4gKwkJCSJCaW5kaW5nIHpvbmUgJXMg d2l0aCBjZGV2ICVzIGZhaWxlZDolZFxuIiwNCj4gPiA+ID4gPiArCQkJdHotPnR5cGUsIGNkZXYt PnR5cGUsIHJldCk7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0 dXJuIHJldDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGlu dCB0bXVfdW5iaW5kKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwNCj4gPiA+ID4gPiAr CQkgICAgICBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldikgew0KPiA+ID4gPiA+ ICsJaW50IHJldDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXQgPSB0aGVybWFsX3pvbmVf dW5iaW5kX2Nvb2xpbmdfZGV2aWNlKHR6LCBUTVVfVFJJUF9QQVNTSVZFLA0KPiA+ID4gPiBjZGV2 KTsNCj4gPiA+ID4gPiArCWlmIChyZXQpIHsNCj4gPiA+ID4gPiArCQlkZXZfZXJyKCZ0ei0+ZGV2 aWNlLA0KPiA+ID4gPiA+ICsJCQkiVW5iaW5kaW5nIHpvbmUgJXMgd2l0aCBjZGV2ICVzIGZhaWxl ZDolZFxuIiwNCj4gPiA+ID4gPiArCQkJdHotPnR5cGUsIGNkZXYtPnR5cGUsIHJldCk7DQo+ID4g PiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHJldDsNCj4gPiA+ID4g PiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBxb3JpcV90bXVfY2FsaWJy YXRpb24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ID4gPiA+ICsJaW50IGks IHZhbCwgbGVuOw0KPiA+ID4gPiA+ICsJdTMyIHJhbmdlWzRdOw0KPiA+ID4gPiA+ICsJY29uc3Qg X19iZTMyICpjYWxpYnJhdGlvbjsNCj4gPiA+ID4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZSA9IHBkZXYtPmRldi5vZl9ub2RlOw0KPiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3RtdV9kYXRh ICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArCS8qIERpc2FibGUgbW9uaXRvcmluZyBiZWZvcmUgY2FsaWJyYXRpb24gKi8NCj4gPiA+ ID4gPiArCWlvd3JpdGUzMmJlKFRNUl9ESVNBQkxFLCAmZGF0YS0+cmVncy0+dG1yKTsNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobm9kZSwg ImZzbCx0bXUtcmFuZ2UiLCByYW5nZSwNCj4gPiA0KSkNCj4gPiA+ID4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJLyogSW5pdCB0ZW1wZXJhdHVyZSByYW5nZSByZWdp c3RlcnMgKi8NCj4gPiA+ID4gPiArCWlvd3JpdGUzMmJlKHJhbmdlWzBdLCAmZGF0YS0+cmVncy0+ dHRyMGNyKTsNCj4gPiA+ID4gPiArCWlvd3JpdGUzMmJlKHJhbmdlWzFdLCAmZGF0YS0+cmVncy0+ dHRyMWNyKTsNCj4gPiA+ID4gPiArCWlvd3JpdGUzMmJlKHJhbmdlWzJdLCAmZGF0YS0+cmVncy0+ dHRyMmNyKTsNCj4gPiA+ID4gPiArCWlvd3JpdGUzMmJlKHJhbmdlWzNdLCAmZGF0YS0+cmVncy0+ dHRyM2NyKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwljYWxpYnJhdGlvbiA9IG9mX2dldF9w cm9wZXJ0eShub2RlLCAiZnNsLHRtdS1jYWxpYnJhdGlvbiIsDQo+ID4gJmxlbik7DQo+ID4gPiA+ ID4gKwlpZiAoY2FsaWJyYXRpb24gPT0gTlVMTCkNCj4gPiA+ID4gPiArCQlyZXR1cm4gLTE7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA4LCBjYWxp YnJhdGlvbiArPSAyKSB7DQo+ID4gPiA+ID4gKwkJdmFsID0gKGludClvZl9yZWFkX251bWJlcihj YWxpYnJhdGlvbiwgMSk7DQo+ID4gPiA+ID4gKwkJaW93cml0ZTMyYmUodmFsLCAmZGF0YS0+cmVn cy0+dHRjZmdyKTsNCj4gPiA+ID4gPiArCQl2YWwgPSAoaW50KW9mX3JlYWRfbnVtYmVyKGNhbGli cmF0aW9uICsgMSwgMSk7DQo+ID4gPiA+ID4gKwkJaW93cml0ZTMyYmUodmFsLCAmZGF0YS0+cmVn cy0+dHNjZmdyKTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1 cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIHZvaWQg cW9yaXFfdG11X2luaXRfZGV2aWNlKHN0cnVjdCBxb3JpcV90bXVfZGF0YSAqZGF0YSkgew0KPiA+ ID4gPiA+ICsJLyogRGlzYWJsZSBpbnRlcnJ1cHQsIHVzaW5nIHBvbGxpbmcgaW5zdGVhZCAqLw0K PiA+ID4gPiA+ICsJaW93cml0ZTMyYmUoVElFUl9ESVNBQkxFLCAmZGF0YS0+cmVncy0+dGllcik7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJLyogU2V0IHVwZGF0ZV9pbnRlcnZhbCAqLw0KPiA+ ID4gPiA+ICsJaW93cml0ZTMyYmUoVE1UTUlSX0RFRkFVTFQsICZkYXRhLT5yZWdzLT50bXRtaXIp Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIEVuYWJsZSBtb25pdG9yaW5nICovDQo+ID4g PiA+ID4gKwlpb3dyaXRlMzJiZShUTVJfQUxMLCAmZGF0YS0+cmVncy0+dG1yKTsgfQ0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlX29wcyB0 bXVfdHpfb3BzID0gew0KPiA+ID4gPiA+ICsJLmJpbmQgPSB0bXVfYmluZCwNCj4gPiA+ID4gPiAr CS51bmJpbmQgPSB0bXVfdW5iaW5kLA0KPiA+ID4gPiA+ICsJLmdldF90ZW1wID0gdG11X2dldF90 ZW1wLA0KPiA+ID4gPiA+ICsJLmdldF9tb2RlID0gdG11X2dldF9tb2RlLA0KPiA+ID4gPiA+ICsJ LnNldF9tb2RlID0gdG11X3NldF9tb2RlLA0KPiA+ID4gPiA+ICsJLmdldF90cmlwX3R5cGUgPSB0 bXVfZ2V0X3RyaXBfdHlwZSwNCj4gPiA+ID4gPiArCS5nZXRfdHJpcF90ZW1wID0gdG11X2dldF90 cmlwX3RlbXAsDQo+ID4gPiA+ID4gKwkuZ2V0X2NyaXRfdGVtcCA9IHRtdV9nZXRfY3JpdF90ZW1w LCB9Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBxb3JpcV90bXVfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ID4gPiA+ICsJaW50IHJldDsNCj4g PiA+ID4gPiArCXN0cnVjdCBjcHVtYXNrIGNsaXBfY3B1czsNCj4gPiA+ID4gPiArCXN0cnVjdCBx b3JpcV90bXVfZGF0YSAqZGF0YTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAoIWNwdWZy ZXFfZ2V0X2N1cnJlbnRfZHJpdmVyKCkpIHsNCj4gPiA+ID4gPiArCQlkZXZfZGJnKCZwZGV2LT5k ZXYsICJObyBjcHVmcmVxIGRyaXZlciB5ZXRcbiIpOw0KPiA+ID4gPiA+ICsJCXJldHVybiAtRVBS T0JFX0RFRkVSOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWlmICgh cGRldi0+ZGV2Lm9mX25vZGUpIHsNCj4gPiA+ID4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJE ZXZpY2UgT0YtTm9kZSBpcyBOVUxMIik7DQo+ID4gPiA+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZGF0YSA9IGRldm1fa3phbGxv YygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHFvcmlxX3RtdV9kYXRhKSwNCj4gPiA+ID4gPiAr CQkJICAgIEdGUF9LRVJORUwpOw0KPiA+ID4gPiA+ICsJaWYgKCFkYXRhKQ0KPiA+ID4gPiA+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWRldl9zZXRfZHJ2ZGF0 YSgmcGRldi0+ZGV2LCBkYXRhKTsNCj4gPiA+ID4gPiArCWRhdGEtPnJlZ3MgPSBvZl9pb21hcChw ZGV2LT5kZXYub2Zfbm9kZSwgMCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYgKCFkYXRh LT5yZWdzKSB7DQo+ID4gPiA+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdl dCBtZW1vcnkgcmVnaW9uXG4iKTsNCj4gPiA+ID4gPiArCQlyZXQgPSAtRU5PREVWOw0KPiA+ID4g PiA+ICsJCWdvdG8gZXJyX2lvbWFwOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArCXJldCA9IHFvcmlxX3RtdV9jYWxpYnJhdGlvbihwZGV2KTsJLyogVE1VIGNhbGlicmF0 aW9uICovDQo+ID4gPiA+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ID4gPiA+ICsJCWRldl9lcnIo JnBkZXYtPmRldiwgIlRNVSBjYWxpYnJhdGlvbiBmYWlsZWQuXG4iKTsNCj4gPiA+ID4gPiArCQly ZXQgPSAtRU5PREVWOw0KPiA+ID4gPiA+ICsJCWdvdG8gZXJyX2lvbWFwOw0KPiA+ID4gPiA+ICsJ fQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXFvcmlxX3RtdV9pbml0X2RldmljZShkYXRhKTsJ LyogVE1VIGluaXRpYWxpemF0aW9uICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJY3B1bWFz a19zZXRhbGwoJmNsaXBfY3B1cyk7DQo+ID4gPiA+ID4gKwlkYXRhLT5jZGV2ID0gY3B1ZnJlcV9j b29saW5nX3JlZ2lzdGVyKCZjbGlwX2NwdXMpOw0KPiA+ID4gPiA+ICsJaWYgKElTX0VSUihkYXRh LT5jZGV2KSkgew0KPiA+ID4gPiA+ICsJCXJldCA9IFBUUl9FUlIoZGF0YS0+Y2Rldik7DQo+ID4g PiA+ID4gKwkJZGV2X2VycigmZGF0YS0+Y2Rldi0+ZGV2aWNlLA0KPiA+ID4gPiA+ICsJCQkiRmFp bGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXEgY29vbGluZyBkZXZpY2U6ICVkXG4iLA0KPiA+IHJldCk7 DQo+ID4gPiA+ID4gKwkJZ290byBlcnJfY29vbGluZzsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKwlkYXRhLT50ZW1wX3Bhc3NpdmUgPSBUTVVfVEVNUF9QQVNTSVZFOw0K PiA+ID4gPiA+ICsJZGF0YS0+dGVtcF9jcml0aWNhbCA9IFRNVV9URU1QX0NSSVRJQ0FMOw0KPiA+ ID4gPiA+ICsJZGF0YS0+dHogPSB0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKCJ0bXVfdGhl cm1hbF96b25lIiwNCj4gPiA+ID4NCj4gPiA+ID4gQW55IHNwZWNpZmljIHJlYXNvbiB3aHkgbm90 IHVzaW5nIE9GIHRoZXJtYWw/DQo+ID4gPiA+DQo+ID4gPiA+ID4gKwkJCQkJCVRNVV9UUklQX05V TSwNCj4gPiA+ID4gPiArCQkJCQkJMCwgZGF0YSwNCj4gPiA+ID4gPiArCQkJCQkJJnRtdV90el9v cHMsIE5VTEwsDQo+ID4gPiA+ID4gKwkJCQkJCVRNVV9QQVNTSVZFX0RFTEFZLA0KPiA+ID4gPiA+ ICsJCQkJCQlUTVVfUE9MTElOR19ERUxBWSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYg KElTX0VSUihkYXRhLT50eikpIHsNCj4gPiA+ID4gPiArCQlyZXQgPSBQVFJfRVJSKGRhdGEtPnR6 KTsNCj4gPiA+ID4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsDQo+ID4gPiA+ID4gKwkJCSJGYWls ZWQgdG8gcmVnaXN0ZXIgdGhlcm1hbCB6b25lIGRldmljZSAlZFxuIiwNCj4gPiByZXQpOw0KPiA+ ID4gPiA+ICsJCWdvdG8gZXJyX3RoZXJtYWw7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJZGF0YS0+bW9kZSA9IFRIRVJNQUxfREVWSUNFX0VOQUJMRUQ7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtlcnJf dGhlcm1hbDoNCj4gPiA+ID4gPiArCWNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKGRhdGEtPmNk ZXYpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArZXJyX2Nvb2xpbmc6DQo+ID4gPiA+ID4gKwlp b3VubWFwKGRhdGEtPnJlZ3MpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArZXJyX2lvbWFwOg0K PiA+ID4gPiA+ICsJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOw0KPiA+ID4gPiA+ ICsJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkYXRhKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0 aWMgaW50IHFvcmlxX3RtdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0K PiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3RtdV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRh KCZwZGV2LT5kZXYpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIERpc2FibGUgbW9uaXRv cmluZyAqLw0KPiA+ID4gPiA+ICsJaW93cml0ZTMyYmUoVE1SX0RJU0FCTEUsICZkYXRhLT5yZWdz LT50bXIpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5y ZWdpc3RlcihkYXRhLT50eik7DQo+ID4gPiA+ID4gKwljcHVmcmVxX2Nvb2xpbmdfdW5yZWdpc3Rl cihkYXRhLT5jZGV2KTsNCj4gPiA+ID4gPiArCWlvdW5tYXAoZGF0YS0+cmVncyk7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOw0KPiA+ ID4gPiA+ICsJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkYXRhKTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr I2lmZGVmIENPTkZJR19QTV9TTEVFUA0KPiA+ID4gPiA+ICtzdGF0aWMgaW50IHFvcmlxX3RtdV9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikgew0KPiA+ID4gPiA+ICsJc3RydWN0IHFvcmlxX3Rt dV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsJLyogRGlzYWJsZSBtb25pdG9yaW5nICovDQo+ID4gPiA+ID4gKwlpb3dyaXRlMzJiZShU TVJfRElTQUJMRSwgJmRhdGEtPnJlZ3MtPnRtcik7DQo+ID4gPiA+ID4gKwlkYXRhLT5tb2RlID0g VEhFUk1BTF9ERVZJQ0VfRElTQUJMRUQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJu IDA7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcW9y aXFfdG11X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsNCj4gPiA+ID4gPiArCXN0cnVjdCBx b3JpcV90bXVfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCS8qIEVuYWJsZSBtb25pdG9yaW5nICovDQo+ID4gPiA+ID4gKwlpb3dyaXRl MzJiZShUTVJfQUxMLCAmZGF0YS0+cmVncy0+dG1yKTsNCj4gPiA+ID4gPiArCWRhdGEtPm1vZGUg PSBUSEVSTUFMX0RFVklDRV9FTkFCTEVEOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVy biAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHFvcmlxX3RtdV9wbV9vcHMsDQo+ID4gPiA+ ID4gKwkJCSBxb3JpcV90bXVfc3VzcGVuZCwgcW9yaXFfdG11X3Jlc3VtZSk7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBxb3JpcV90bXVf bWF0Y2hbXSA9IHsNCj4gPiA+ID4gPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLXRtdSIs IH0sDQo+ID4gPiA+ID4gKwl7fSwNCj4gPiA+ID4gPiArfTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHFvcmlxX3RtdSA9IHsNCj4gPiA+ID4g PiArCS5kcml2ZXIJPSB7DQo+ID4gPiA+ID4gKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLA0KPiA+ ID4gPiA+ICsJCS5uYW1lCQk9ICJxb3JpcV90aGVybWFsIiwNCj4gPiA+ID4gPiArCQkucG0gPSAm cW9yaXFfdG11X3BtX29wcywNCj4gPiA+ID4gPiArCQkub2ZfbWF0Y2hfdGFibGUJPSBxb3JpcV90 bXVfbWF0Y2gsDQo+ID4gPiA+ID4gKwl9LA0KPiA+ID4gPiA+ICsJLnByb2JlCT0gcW9yaXFfdG11 X3Byb2JlLA0KPiA+ID4gPiA+ICsJLnJlbW92ZQk9IHFvcmlxX3RtdV9yZW1vdmUsDQo+ID4gPiA+ ID4gK307DQo+ID4gPiA+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocW9yaXFfdG11KTsNCj4g PiA+ID4gPiArDQo+ID4gPiA+ID4gK01PRFVMRV9BVVRIT1IoIkppYSBIb25ndGFvIDxob25ndGFv LmppYUBmcmVlc2NhbGUuY29tPiIpOw0KPiA+ID4gPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkZy ZWVzY2FsZSBRb3JJUSBUaGVybWFsIE1vbml0b3JpbmcgVW5pdA0KPiA+ID4gPiA+ICtkcml2ZXIi KTsgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+ID4gPiA+IC0tDQo+ID4gPiA+ID4gMi4x LjAuMjcuZzk2ZGIzMjQNCj4gPiA+ID4gPg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KPiBMaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0DQo+IExpbnV4 cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+IGh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0 aW5mby9saW51eHBwYy1kZXYNCg==