From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhu, Rex" Subject: RE: [PATCH 4/5] drm/amdgpu: Add fan RPM setting via sysfs Date: Mon, 1 Oct 2018 13:34:12 +0000 Message-ID: References: <1538288279-11428-1-git-send-email-Rex.Zhu@amd.com> <1538288279-11428-4-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Deucher, Alexander" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRGV1Y2hlciwgQWxleGFu ZGVyDQo+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxLCAyMDE4IDk6MTYgUE0NCj4gVG86IFpodSwg UmV4IDxSZXguWmh1QGFtZC5jb20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBD YzogWmh1LCBSZXggPFJleC5aaHVAYW1kLmNvbT4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCA0LzVd IGRybS9hbWRncHU6IEFkZCBmYW4gUlBNIHNldHRpbmcgdmlhIHN5c2ZzDQo+IA0KPiA+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogYW1kLWdmeCA8YW1kLWdmeC1ib3VuY2Vz QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmIE9mIFJleA0KPiA+IFpodQ0KPiA+IFNl bnQ6IFN1bmRheSwgU2VwdGVtYmVyIDMwLCAyMDE4IDI6MTggQU0NCj4gPiBUbzogYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gPiBDYzogWmh1LCBSZXggPFJleC5aaHVAYW1kLmNvbT4N Cj4gPiBTdWJqZWN0OiBbUEFUQ0ggNC81XSBkcm0vYW1kZ3B1OiBBZGQgZmFuIFJQTSBzZXR0aW5n IHZpYSBzeXNmcw0KPiA+DQo+ID4gQWRkIGZhbjFfdGFyZ2V0IGZvciBnZXQvc2V0IGZhbiBzcGVl ZCBpbiBSUE0gdW5pdCBBZGQNCj4gPiBmYW4xX21pbi9mYW4xX21heCBmb3IgZ2V0IG1pbiwgbWF4 IGZhbiBzcGVlZCBpbiBSUE0gdW5pdCBBZGQNCj4gPiBmYW4xX2VuYWJsZSB0byBlbmFibGUvZGlz YWJsZSB0aGUgZmFuMSBzZW5zb3INCj4gPg0KPiA+IHYyOiBxdWVyeSB0aGUgbWluL21heCBycG0g Z3B1IHN1cHBvcnQgaW5zdGFuZCBvZiBoYXJkY29kZS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IFJleCBaaHUgPFJleC5aaHVAYW1kLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2RwbS5oICAgICAgICB8ICAgMyArDQo+ID4gIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5jICAgICAgICAgfCAxOTANCj4gPiArKysrKysrKysr KysrKysrKysrKysrKystDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2RfcHBf aW50ZXJmYWNlLmggfCAgIDEgKw0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9h bWRfcG93ZXJwbGF5LmMgIHwgIDE5ICsrKw0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDIxMCBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcG0uaA0KPiA+IGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2RwbS5oDQo+ID4gaW5kZXggNDI1NjhhZS4uZjk3MmNkMSAxMDA2NDQN Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHBtLmgNCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHBtLmgNCj4gPiBAQCAtMjc4 LDYgKzI3OCw5IEBAIGVudW0gYW1kZ3B1X3BjaWVfZ2VuIHsgICNkZWZpbmUNCj4gPiBhbWRncHVf ZHBtX2dldF9mYW5fc3BlZWRfcnBtKGFkZXYsIHMpIFwNCj4gPiAgCQkoKGFkZXYpLT5wb3dlcnBs YXkucHBfZnVuY3MtDQo+ID4gPmdldF9mYW5fc3BlZWRfcnBtKSgoYWRldiktPnBvd2VycGxheS5w cF9oYW5kbGUsIChzKSkNCj4gPg0KPiA+ICsjZGVmaW5lIGFtZGdwdV9kcG1fc2V0X2Zhbl9zcGVl ZF9ycG0oYWRldiwgcykgXA0KPiA+ICsNCj4gPiArKChhZGV2KS0+cG93ZXJwbGF5LnBwX2Z1bmNz LT5zZXRfZmFuX3NwZWVkX3JwbSkoKGFkZXYpLQ0KPiA+ID5wb3dlcnBsYXkucHBfaGENCj4gPiAr bmRsZSwgKHMpKQ0KPiA+ICsNCj4gPiAgI2RlZmluZSBhbWRncHVfZHBtX2dldF9zY2xrKGFkZXYs IGwpIFwNCj4gPiAgCQkoKGFkZXYpLT5wb3dlcnBsYXkucHBfZnVuY3MtPmdldF9zY2xrKChhZGV2 KS0NCj4gPiA+cG93ZXJwbGF5LnBwX2hhbmRsZSwgKGwpKSkNCj4gPg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYw0KPiA+IGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMNCj4gPiBpbmRleCAxOGQ5ODllLi4xZDg1NzA2 IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5j DQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMNCj4gPiBA QCAtMTE3Miw2ICsxMTcyLDExIEBAIHN0YXRpYyBzc2l6ZV90DQo+ID4gYW1kZ3B1X2h3bW9uX2dl dF9mYW4xX2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiAgCXN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gIAlpbnQgZXJyOw0KPiA+ICAJ dTMyIHNwZWVkID0gMDsNCj4gPiArCXUzMiBwd21fbW9kZTsNCj4gPiArDQo+ID4gKwlwd21fbW9k ZSA9IGFtZGdwdV9kcG1fZ2V0X2Zhbl9jb250cm9sX21vZGUoYWRldik7DQo+ID4gKwlpZiAocHdt X21vZGUgIT0gQU1EX0ZBTl9DVFJMX01BTlVBTCkNCj4gPiArCQlyZXR1cm4gLUVOT0RBVEE7DQo+ ID4NCj4gPiAgCS8qIENhbid0IGFkanVzdCBmYW4gd2hlbiB0aGUgY2FyZCBpcyBvZmYgKi8NCj4g PiAgCWlmICAoKGFkZXYtPmZsYWdzICYgQU1EX0lTX1BYKSAmJg0KPiA+IEBAIC0xMTg3LDYgKzEx OTIsMTUzIEBAIHN0YXRpYyBzc2l6ZV90DQo+ID4gYW1kZ3B1X2h3bW9uX2dldF9mYW4xX2lucHV0 KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiAgCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBz cGVlZCk7DQo+ID4gIH0NCj4gPg0KPiA+ICtzdGF0aWMgc3NpemVfdCBhbWRncHVfaHdtb25fZ2V0 X2ZhbjFfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCQkgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsDQo+ID4gKwkJCQkJIGNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCXUz MiBtaW5fcnBtID0gMDsNCj4gPiArCXUzMiBzaXplID0gc2l6ZW9mKG1pbl9ycG0pOw0KPiA+ICsJ aW50IHI7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnJlYWRf c2Vuc29yKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXIgPSBhbWRncHVf ZHBtX3JlYWRfc2Vuc29yKGFkZXYsDQo+ID4gQU1ER1BVX1BQX1NFTlNPUl9NSU5fRkFOX1JQTSwN Cj4gPiArCQkJCSAgICh2b2lkICopJm1pbl9ycG0sICZzaXplKTsNCj4gPiArCWlmIChyKQ0KPiA+ ICsJCXJldHVybiByOw0KPiA+ICsNCj4gPiArCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0la RSwgIiVkXG4iLCBtaW5fcnBtKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1 X2h3bW9uX2dldF9mYW4xX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkJIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiA+ICsJCQkJCSBjaGFyICpidWYpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQo+ID4gKwl1MzIgbWF4X3JwbSA9IDA7DQo+ID4gKwl1MzIgc2l6ZSA9IHNpemVvZihtYXhfcnBt KTsNCj4gPiArCWludCByOw0KPiA+ICsNCj4gPiArCWlmICghYWRldi0+cG93ZXJwbGF5LnBwX2Z1 bmNzLT5yZWFkX3NlbnNvcikNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwly ID0gYW1kZ3B1X2RwbV9yZWFkX3NlbnNvcihhZGV2LA0KPiA+IEFNREdQVV9QUF9TRU5TT1JfTUFY X0ZBTl9SUE0sDQo+ID4gKwkJCQkgICAodm9pZCAqKSZtYXhfcnBtLCAmc2l6ZSk7DQo+ID4gKwlp ZiAocikNCj4gPiArCQlyZXR1cm4gcjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwgbWF4X3JwbSk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6 ZV90IGFtZGdwdV9od21vbl9nZXRfZmFuMV90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ ICsJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiA+ICsJCQkJCSAgIGNo YXIgKmJ1ZikNCj4gPiArew0KPiA+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCWludCBlcnI7DQo+ID4gKwl1MzIgcnBtID0gMDsNCj4g PiArCXUzMiBwd21fbW9kZTsNCj4gPiArDQo+ID4gKwlwd21fbW9kZSA9IGFtZGdwdV9kcG1fZ2V0 X2Zhbl9jb250cm9sX21vZGUoYWRldik7DQo+ID4gKwlpZiAocHdtX21vZGUgIT0gQU1EX0ZBTl9D VFJMX01BTlVBTCkNCj4gPiArCQlyZXR1cm4gLUVOT0RBVEE7DQo+ID4gKw0KPiA+ICsJLyogQ2Fu J3QgYWRqdXN0IGZhbiB3aGVuIHRoZSBjYXJkIGlzIG9mZiAqLw0KPiA+ICsJaWYgICgoYWRldi0+ ZmxhZ3MgJiBBTURfSVNfUFgpICYmDQo+ID4gKwkgICAgIChhZGV2LT5kZGV2LT5zd2l0Y2hfcG93 ZXJfc3RhdGUgIT0NCj4gPiBEUk1fU1dJVENIX1BPV0VSX09OKSkNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5nZXRfZmFu X3NwZWVkX3JwbSkgew0KPiA+ICsJCWVyciA9IGFtZGdwdV9kcG1fZ2V0X2Zhbl9zcGVlZF9ycG0o YWRldiwgJnJwbSk7DQo+ID4gKwkJaWYgKGVycikNCj4gPiArCQkJcmV0dXJuIGVycjsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcnBtKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1X2h3bW9uX3NldF9mYW4xX3Rhcmdl dChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLA0KPiA+ICsJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkg ew0KPiA+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsNCj4gPiArCWludCBlcnI7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4gKwl1MzIgcHdtX21vZGU7 DQo+ID4gKw0KPiA+ICsJcHdtX21vZGUgPSBhbWRncHVfZHBtX2dldF9mYW5fY29udHJvbF9tb2Rl KGFkZXYpOw0KPiA+ICsJaWYgKHB3bV9tb2RlICE9IEFNRF9GQU5fQ1RSTF9NQU5VQUwpDQo+ID4g KwkJcmV0dXJuIC1FTk9EQVRBOw0KPiA+ICsNCj4gPiArCS8qIENhbid0IGFkanVzdCBmYW4gd2hl biB0aGUgY2FyZCBpcyBvZmYgKi8NCj4gPiArCWlmICAoKGFkZXYtPmZsYWdzICYgQU1EX0lTX1BY KSAmJg0KPiA+ICsJICAgICAoYWRldi0+ZGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlICE9DQo+ID4g RFJNX1NXSVRDSF9QT1dFUl9PTikpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ ICsJZXJyID0ga3N0cnRvdTMyKGJ1ZiwgMTAsICZ2YWx1ZSk7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJaWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5j cy0+c2V0X2Zhbl9zcGVlZF9ycG0pIHsNCj4gPiArCQllcnIgPSBhbWRncHVfZHBtX3NldF9mYW5f c3BlZWRfcnBtKGFkZXYsIHZhbHVlKTsNCj4gPiArCQlpZiAoZXJyKQ0KPiA+ICsJCQlyZXR1cm4g ZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBjb3VudDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1X2h3bW9uX2dldF9mYW4xX2VuYWJsZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LA0KPiA+ICsJCQkJCSAgICBjaGFyICpidWYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwl1MzIgcHdtX21vZGUg PSAwOw0KPiA+ICsNCj4gPiArCWlmICghYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5nZXRfZmFu X2NvbnRyb2xfbW9kZSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlwd21f bW9kZSA9IGFtZGdwdV9kcG1fZ2V0X2Zhbl9jb250cm9sX21vZGUoYWRldik7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHB3bV9tb2RlID09IEFNRF9GQU5fQ1RSTF9B VVRPID8NCj4gPiAwIDogMSk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IGFtZGdwdV9o d21vbl9zZXRfZmFuMV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkJCSAgICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiArCQkJCQkgICAgY29uc3QgY2hhciAq YnVmLA0KPiA+ICsJCQkJCSAgICBzaXplX3QgY291bnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwlpbnQgZXJy Ow0KPiA+ICsJaW50IHZhbHVlOw0KPiA+ICsJdTMyIHB3bV9tb2RlOw0KPiA+ICsNCj4gPiArCS8q IENhbid0IGFkanVzdCBmYW4gd2hlbiB0aGUgY2FyZCBpcyBvZmYgKi8NCj4gPiArCWlmICAoKGFk ZXYtPmZsYWdzICYgQU1EX0lTX1BYKSAmJg0KPiA+ICsJICAgICAoYWRldi0+ZGRldi0+c3dpdGNo X3Bvd2VyX3N0YXRlICE9DQo+ID4gRFJNX1NXSVRDSF9QT1dFUl9PTikpDQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnNl dF9mYW5fY29udHJvbF9tb2RlKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr CWVyciA9IGtzdHJ0b2ludChidWYsIDEwLCAmdmFsdWUpOw0KPiA+ICsJaWYgKGVycikNCj4gPiAr CQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCWlmICh2YWx1ZSA9PSAwKQ0KPiA+ICsJCXB3bV9t b2RlID0gQU1EX0ZBTl9DVFJMX0FVVE87DQo+ID4gKwllbHNlIGlmICh2YWx1ZSA9PSAxKQ0KPiA+ ICsJCXB3bV9tb2RlID0gQU1EX0ZBTl9DVFJMX01BTlVBTDsNCj4gPiArCWVsc2UNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlhbWRncHVfZHBtX3NldF9mYW5fY29udHJvbF9t b2RlKGFkZXYsIHB3bV9tb2RlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY291bnQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gIHN0YXRpYyBzc2l6ZV90IGFtZGdwdV9od21vbl9zaG93X3ZkZGdmeChzdHJ1 Y3QgZGV2aWNlICpkZXYsDQo+ID4gIAkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs DQo+ID4gIAkJCQkJY2hhciAqYnVmKQ0KPiA+IEBAIC0xNDA2LDggKzE1NTgsMTYgQEAgc3RhdGlj IHNzaXplX3QNCj4gPiBhbWRncHVfaHdtb25fc2V0X3Bvd2VyX2NhcChzdHJ1Y3QgZGV2aWNlICpk ZXYsDQo+ID4gICAqDQo+ID4gICAqIC0gcHdtMV9tYXg6IHB1bHNlIHdpZHRoIG1vZHVsYXRpb24g ZmFuIGNvbnRyb2wgbWF4aW11bSBsZXZlbCAoMjU1KQ0KPiA+ICAgKg0KPiA+ICsgKiAtIGZhbjFf bWluOiBhbiBtaW5pbXVtIHZhbHVlIFVuaXQ6IHJldm9sdXRpb24vbWluIChSUE0pICgwKQ0KPiA+ ICsgKg0KPiA+ICsgKiAtIGZhbjFfbWF4OiBhbiBtYXhtdW0gdmFsdWUgVW5pdDogcmV2b2x1dGlv bi9tYXggKFJQTSkgKDYwMDApDQo+ID4gKyAqDQo+IA0KPiBUaGUgbWluIGFuZCBtYXggbWF5IG5v dCBhbHdheXMgYmUgMCBhbmQgNjAwMDsgaXQgZGVwZW5kcyBvbiB0aGUgYm9hcmQNCj4gSUlSQy4g IFByb2JhYmx5IGJldHRlciB0byBkcm9wIHRoZSAoMCkgYW5kICg2MDAwKS4NCg0KSSBmb3Jnb3Qg dG8gZHJvcCB0aGlzIGhhcmRjb2RlIHZhbHVlICBpbiBjb21tZW50cy4NClRoYW5rcyBmb3IgcG9p bnRpbmcgb3V0IHRoaXMuDQpXaWxsIGRyb3AgdGhlIHZhbHVlIGluIFYzLg0KDQpSZXgNCg0KPiBB bGV4DQo+IA0KPiA+ICAgKiAtIGZhbjFfaW5wdXQ6IGZhbiBzcGVlZCBpbiBSUE0NCj4gPiAgICoN Cj4gPiArICogLSBmYW5bMS0qXV90YXJnZXQ6IERlc2lyZWQgZmFuIHNwZWVkIFVuaXQ6IHJldm9s dXRpb24vbWluIChSUE0pDQo+ID4gKyAqDQo+ID4gKyAqIC0gZmFuWzEtKl1fZW5hYmxlOiBFbmFi bGUgb3IgZGlzYWJsZSB0aGUgc2Vuc29ycy4xOiBFbmFibGUgMDoNCj4gPiArIERpc2FibGUNCj4g PiArICoNCj4gPiAgICogWW91IGNhbiB1c2UgaHdtb24gdG9vbHMgbGlrZSBzZW5zb3JzIHRvIHZp ZXcgdGhpcyBpbmZvcm1hdGlvbiBvbg0KPiA+IHlvdXIgc3lzdGVtLg0KPiA+ICAgKg0KPiA+ICAg Ki8NCj4gPiBAQCAtMTQyMCw2ICsxNTgwLDEwIEBAIHN0YXRpYyBzc2l6ZV90DQo+ID4gYW1kZ3B1 X2h3bW9uX3NldF9wb3dlcl9jYXAoc3RydWN0IGRldmljZSAqZGV2LCAgc3RhdGljDQo+ID4gU0VO U09SX0RFVklDRV9BVFRSKHB3bTFfbWluLCBTX0lSVUdPLA0KPiBhbWRncHVfaHdtb25fZ2V0X3B3 bTFfbWluLCBOVUxMLA0KPiA+IDApOyAgc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX21h eCwgU19JUlVHTywNCj4gPiBhbWRncHVfaHdtb25fZ2V0X3B3bTFfbWF4LCBOVUxMLCAwKTsgIHN0 YXRpYw0KPiA+IFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLA0KPiBhbWRn cHVfaHdtb25fZ2V0X2ZhbjFfaW5wdXQsDQo+ID4gTlVMTCwgMCk7DQo+ID4gK3N0YXRpYyBTRU5T T1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVJVR08sDQo+ID4gYW1kZ3B1X2h3bW9uX2dldF9m YW4xX21pbiwNCj4gPiArTlVMTCwgMCk7IHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9t YXgsIFNfSVJVR08sDQo+ID4gK2FtZGdwdV9od21vbl9nZXRfZmFuMV9tYXgsIE5VTEwsIDApOyBz dGF0aWMNCj4gPiArU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfdGFyZ2V0LCBTX0lSVUdPIHwgU19J V1VTUiwNCj4gPiArYW1kZ3B1X2h3bW9uX2dldF9mYW4xX3RhcmdldCwgYW1kZ3B1X2h3bW9uX3Nl dF9mYW4xX3RhcmdldCwgMCk7DQo+ID4gc3RhdGljDQo+ID4gK1NFTlNPUl9ERVZJQ0VfQVRUUihm YW4xX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsDQo+ID4gK2FtZGdwdV9od21vbl9nZXRfZmFu MV9lbmFibGUsIGFtZGdwdV9od21vbl9zZXRfZmFuMV9lbmFibGUsDQo+ID4gMCk7DQo+ID4gIHN0 YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLA0KPiA+IGFtZGdwdV9o d21vbl9zaG93X3ZkZGdmeCwgTlVMTCwgMCk7ICBzdGF0aWMNCj4gPiBTRU5TT1JfREVWSUNFX0FU VFIoaW4wX2xhYmVsLCBTX0lSVUdPLA0KPiBhbWRncHVfaHdtb25fc2hvd192ZGRnZnhfbGFiZWws DQo+ID4gTlVMTCwgMCk7ICBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9pbnB1dCwgU19J UlVHTywNCj4gPiBhbWRncHVfaHdtb25fc2hvd192ZGRuYiwgTlVMTCwgMCk7IEBAIC0xNDM4LDYg KzE2MDIsMTAgQEAgc3RhdGljDQo+ID4gc3NpemVfdCBhbWRncHVfaHdtb25fc2V0X3Bvd2VyX2Nh cChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfbWluLmRl dl9hdHRyLmF0dHIsDQo+ID4gIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfbWF4LmRldl9hdHRyLmF0 dHIsDQo+ID4gIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4g PiArCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5z b3JfZGV2X2F0dHJfZmFuMV9tYXguZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0 dHJfZmFuMV90YXJnZXQuZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZmFu MV9lbmFibGUuZGV2X2F0dHIuYXR0ciwNCj4gPiAgCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0 LmRldl9hdHRyLmF0dHIsDQo+ID4gIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9sYWJlbC5kZXZfYXR0 ci5hdHRyLA0KPiA+ICAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwN Cj4gPiBAQCAtMTQ1NiwxMyArMTYyNCwxNiBAQCBzdGF0aWMgdW1vZGVfdA0KPiBod21vbl9hdHRy aWJ1dGVzX3Zpc2libGUoc3RydWN0DQo+ID4ga29iamVjdCAqa29iaiwNCj4gPiAgCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gIAl1bW9kZV90 IGVmZmVjdGl2ZV9tb2RlID0gYXR0ci0+bW9kZTsNCj4gPg0KPiA+IC0NCj4gPiAgCS8qIFNraXAg ZmFuIGF0dHJpYnV0ZXMgaWYgZmFuIGlzIG5vdCBwcmVzZW50ICovDQo+ID4gIAlpZiAoYWRldi0+ cG0ubm9fZmFuICYmIChhdHRyID09DQo+ID4gJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRy LmF0dHIgfHwNCj4gPiAgCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUu ZGV2X2F0dHIuYXR0ciB8fA0KPiA+ICAJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wd20x X21heC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gIAkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRy X3B3bTFfbWluLmRldl9hdHRyLmF0dHIgfHwNCj4gPiAtCSAgICBhdHRyID09ICZzZW5zb3JfZGV2 X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyKSkNCj4gPiArCSAgICBhdHRyID09ICZzZW5z b3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gKwkgICAgYXR0ciA9 PSAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIgfHwNCj4gPiArCSAgICBh dHRyID09ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9tYXguZGV2X2F0dHIuYXR0ciB8fA0KPiA+ICsJ ICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX3RhcmdldC5kZXZfYXR0ci5hdHRyIHx8 DQo+ID4gKwkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZW5hYmxlLmRldl9hdHRy LmF0dHIpKQ0KPiA+ICAJCXJldHVybiAwOw0KPiA+DQo+ID4gIAkvKiBTa2lwIGxpbWl0IGF0dHJp YnV0ZXMgaWYgRFBNIGlzIG5vdCBlbmFibGVkICovIEBAIC0xNDcyLDcNCj4gPiArMTY0MywxMiBA QCBzdGF0aWMgdW1vZGVfdCBod21vbl9hdHRyaWJ1dGVzX3Zpc2libGUoc3RydWN0IGtvYmplY3QN Cj4gKmtvYmosDQo+ID4gIAkgICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9h dHRyLmF0dHIgfHwNCj4gPiAgCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5h YmxlLmRldl9hdHRyLmF0dHIgfHwNCj4gPiAgCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRy X3B3bTFfbWF4LmRldl9hdHRyLmF0dHIgfHwNCj4gPiAtCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rl dl9hdHRyX3B3bTFfbWluLmRldl9hdHRyLmF0dHIpKQ0KPiA+ICsJICAgICBhdHRyID09ICZzZW5z b3JfZGV2X2F0dHJfcHdtMV9taW4uZGV2X2F0dHIuYXR0ciB8fA0KPiA+ICsJICAgICBhdHRyID09 ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gKwkgICAg IGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyIHx8DQo+ID4g KwkgICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21heC5kZXZfYXR0ci5hdHRyIHx8 DQo+ID4gKwkgICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX3RhcmdldC5kZXZfYXR0 ci5hdHRyIHx8DQo+ID4gKwkgICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2VuYWJs ZS5kZXZfYXR0ci5hdHRyKSkNCj4gPiAgCQlyZXR1cm4gMDsNCj4gPg0KPiA+ICAJLyogbWFzayBm YW4gYXR0cmlidXRlcyBpZiB3ZSBoYXZlIG5vIGJpbmRpbmdzIGZvciB0aGlzIGFzaWMgdG8NCj4g PiBleHBvc2UgKi8gQEAgLTE0OTcsMTAgKzE2NzMsMTggQEAgc3RhdGljIHVtb2RlX3QNCj4gPiBo d21vbl9hdHRyaWJ1dGVzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosDQo+ID4gIAkvKiBo aWRlIG1heC9taW4gdmFsdWVzIGlmIHdlIGNhbid0IGJvdGggcXVlcnkgYW5kIG1hbmFnZSB0aGUg ZmFuICovDQo+ID4gIAlpZiAoKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnNldF9mYW5fc3Bl ZWRfcGVyY2VudCAmJg0KPiA+ICAJICAgICAhYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5nZXRf ZmFuX3NwZWVkX3BlcmNlbnQpICYmDQo+ID4gKwkgICAgICghYWRldi0+cG93ZXJwbGF5LnBwX2Z1 bmNzLT5zZXRfZmFuX3NwZWVkX3JwbSAmJg0KPiA+ICsJICAgICAhYWRldi0+cG93ZXJwbGF5LnBw X2Z1bmNzLT5nZXRfZmFuX3NwZWVkX3JwbSkgJiYNCj4gPiAgCSAgICAoYXR0ciA9PSAmc2Vuc29y X2Rldl9hdHRyX3B3bTFfbWF4LmRldl9hdHRyLmF0dHIgfHwNCj4gPiAgCSAgICAgYXR0ciA9PSAm c2Vuc29yX2Rldl9hdHRyX3B3bTFfbWluLmRldl9hdHRyLmF0dHIpKQ0KPiA+ICAJCXJldHVybiAw Ow0KPiA+DQo+ID4gKwlpZiAoKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnNldF9mYW5fc3Bl ZWRfcnBtICYmDQo+ID4gKwkgICAgICFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmdldF9mYW5f c3BlZWRfcnBtKSAmJg0KPiA+ICsJICAgIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9t YXguZGV2X2F0dHIuYXR0ciB8fA0KPiA+ICsJICAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJf ZmFuMV9taW4uZGV2X2F0dHIuYXR0cikpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICAJ Lyogb25seSBBUFVzIGhhdmUgdmRkbmIgKi8NCj4gPiAgCWlmICghKGFkZXYtPmZsYWdzICYgQU1E X0lTX0FQVSkgJiYNCj4gPiAgCSAgICAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1 dC5kZXZfYXR0ci5hdHRyIHx8IGRpZmYgLS1naXQNCj4gPiBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv aW5jbHVkZS9rZ2RfcHBfaW50ZXJmYWNlLmgNCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5j bHVkZS9rZ2RfcHBfaW50ZXJmYWNlLmgNCj4gPiBpbmRleCA5NzAwMWE2Li45ODBlNjk2IDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2RfcHBfaW50ZXJmYWNl LmgNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX3BwX2ludGVyZmFj ZS5oDQo+ID4gQEAgLTIzMCw2ICsyMzAsNyBAQCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzIHsNCj4gPiAg CWVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZWwgKCpnZXRfcGVyZm9ybWFuY2VfbGV2ZWwpKHZvaWQN Cj4gKmhhbmRsZSk7DQo+ID4gIAllbnVtIGFtZF9wbV9zdGF0ZV90eXBlICgqZ2V0X2N1cnJlbnRf cG93ZXJfc3RhdGUpKHZvaWQNCj4gKmhhbmRsZSk7DQo+ID4gIAlpbnQgKCpnZXRfZmFuX3NwZWVk X3JwbSkodm9pZCAqaGFuZGxlLCB1aW50MzJfdCAqcnBtKTsNCj4gPiArCWludCAoKnNldF9mYW5f c3BlZWRfcnBtKSh2b2lkICpoYW5kbGUsIHVpbnQzMl90IHJwbSk7DQo+ID4gIAlpbnQgKCpnZXRf cHBfbnVtX3N0YXRlcykodm9pZCAqaGFuZGxlLCBzdHJ1Y3QgcHBfc3RhdGVzX2luZm8gKmRhdGEp Ow0KPiA+ICAJaW50ICgqZ2V0X3BwX3RhYmxlKSh2b2lkICpoYW5kbGUsIGNoYXIgKip0YWJsZSk7 DQo+ID4gIAlpbnQgKCpzZXRfcHBfdGFibGUpKHZvaWQgKmhhbmRsZSwgY29uc3QgY2hhciAqYnVm LCBzaXplX3Qgc2l6ZSk7DQo+ID4gZGlmZiAtLSBnaXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bv d2VycGxheS9hbWRfcG93ZXJwbGF5LmMNCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2FtZF9wb3dlcnBsYXkuYw0KPiA+IGluZGV4IDA1M2M0ODUuLjlkOGZhMmUgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jDQo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jDQo+ ID4gQEAgLTU3Niw2ICs1NzYsMjQgQEAgc3RhdGljIGludCBwcF9kcG1fZ2V0X2Zhbl9zcGVlZF9y cG0odm9pZA0KPiAqaGFuZGxlLA0KPiA+IHVpbnQzMl90ICpycG0pDQo+ID4gIAlyZXR1cm4gcmV0 Ow0KPiA+ICB9DQo+ID4NCj4gPiArc3RhdGljIGludCBwcF9kcG1fc2V0X2Zhbl9zcGVlZF9ycG0o dm9pZCAqaGFuZGxlLCB1aW50MzJfdCBycG0pIHsNCj4gPiArCXN0cnVjdCBwcF9od21nciAqaHdt Z3IgPSBoYW5kbGU7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoIWh3bWdy IHx8ICFod21nci0+cG1fZW4pDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJ aWYgKGh3bWdyLT5od21ncl9mdW5jLT5zZXRfZmFuX3NwZWVkX3JwbSA9PSBOVUxMKSB7DQo+ID4g KwkJcHJfaW5mbygiJXMgd2FzIG5vdCBpbXBsZW1lbnRlZC5cbiIsIF9fZnVuY19fKTsNCj4gPiAr CQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArCW11dGV4X2xvY2soJmh3bWdyLT5zbXVfbG9jayk7 DQo+ID4gKwlyZXQgPSBod21nci0+aHdtZ3JfZnVuYy0+c2V0X2Zhbl9zcGVlZF9ycG0oaHdtZ3Is IHJwbSk7DQo+ID4gKwltdXRleF91bmxvY2soJmh3bWdyLT5zbXVfbG9jayk7DQo+ID4gKwlyZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IHBwX2RwbV9nZXRfcHBfbnVt X3N0YXRlcyh2b2lkICpoYW5kbGUsDQo+ID4gIAkJc3RydWN0IHBwX3N0YXRlc19pbmZvICpkYXRh KQ0KPiA+ICB7DQo+ID4gQEAgLTEyOTcsNiArMTMxNSw3IEBAIHN0YXRpYyBpbnQgcHBfZW5hYmxl X21ncHVfZmFuX2Jvb3N0KHZvaWQNCj4gPiAqaGFuZGxlKQ0KPiA+ICAJLnNldF9mYW5fc3BlZWRf cGVyY2VudCA9IHBwX2RwbV9zZXRfZmFuX3NwZWVkX3BlcmNlbnQsDQo+ID4gIAkuZ2V0X2Zhbl9z cGVlZF9wZXJjZW50ID0gcHBfZHBtX2dldF9mYW5fc3BlZWRfcGVyY2VudCwNCj4gPiAgCS5nZXRf ZmFuX3NwZWVkX3JwbSA9IHBwX2RwbV9nZXRfZmFuX3NwZWVkX3JwbSwNCj4gPiArCS5zZXRfZmFu X3NwZWVkX3JwbSA9IHBwX2RwbV9zZXRfZmFuX3NwZWVkX3JwbSwNCj4gPiAgCS5nZXRfcHBfbnVt X3N0YXRlcyA9IHBwX2RwbV9nZXRfcHBfbnVtX3N0YXRlcywNCj4gPiAgCS5nZXRfcHBfdGFibGUg PSBwcF9kcG1fZ2V0X3BwX3RhYmxlLA0KPiA+ICAJLnNldF9wcF90YWJsZSA9IHBwX2RwbV9zZXRf cHBfdGFibGUsDQo+ID4gLS0NCj4gPiAxLjkuMQ0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdA0K PiA+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngK