From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH v13 13/14] drm/i915/dp: Enable Upfront link training for typeC DP support on HSW/BDW/SKL/BXT (DDI platforms) Date: Thu, 08 Sep 2016 15:10:43 +0300 Message-ID: <1473336643.9143.2.camel@intel.com> References: <1473207238-3490-4-git-send-email-manasi.d.navare@intel.com> <1473272883-28520-4-git-send-email-manasi.d.navare@intel.com> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4BBE06E0C8 for ; Thu, 8 Sep 2016 12:10:45 +0000 (UTC) In-Reply-To: <1473272883-28520-4-git-send-email-manasi.d.navare@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Manasi Navare , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTA5LTA3IGF0IDExOjI4IC0wNzAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ IEZyb206IER1cmdhZG9zcyBSIDxkdXJnYWRvc3MuckBpbnRlbC5jb20+Cj4gCj4gVG8gc3VwcG9y dCBVU0IgdHlwZSBDIGFsdGVybmF0ZSBEUCBtb2RlLCB0aGUgZGlzcGxheSBkcml2ZXIgbmVlZHMg dG8KPiBrbm93IHRoZSBudW1iZXIgb2YgbGFuZXMgcmVxdWlyZWQgYnkgdGhlIERQIHBhbmVsIGFz IHdlbGwgYXMgbnVtYmVyCj4gb2YgbGFuZXMgdGhhdCBjYW4gYmUgc3VwcG9ydGVkIGJ5IHRoZSB0 eXBlLUMgY2FibGUuIFNvbWV0aW1lcywgdGhlCj4gdHlwZS1DIGNhYmxlIG1heSBsaW1pdCB0aGUg YmFuZHdpZHRoIGV2ZW4gaWYgUGFuZWwgY2FuIHN1cHBvcnQKPiBtb3JlIGxhbmVzLiBUbyBhZGRy ZXNzIHRoZXNlIHNjZW5hcmlvcywgdGhlIGRpc3BsYXkgZHJpdmVyIHdpbGwKPiBzdGFydCBsaW5r IHRyYWluaW5nIHdpdGggbWF4IGxhbmVzLCBhbmQgaWYgdGhhdCBmYWlscywgdGhlIGRyaXZlcgo+ IGZhbGxzIGJhY2sgdG8geDIgbGFuZXM7IGFuZCByZXBlYXRzIHRoaXMgcHJvY2VkdXJlIGZvciBh bGwKPiBiYW5kd2lkdGgvbGFuZSBjb25maWd1cmF0aW9ucy4KPiAKPiAqIFNpbmNlIGxpbmsgdHJh aW5pbmcgaXMgZG9uZSBiZWZvcmUgbW9kZXNldCBvbmx5IHRoZSBwb3J0Cj4gwqAgKGFuZCBub3Qg cGlwZS9wbGFuZXMpIGFuZCBpdHMgYXNzb2NpYXRlZCBQTExzIGFyZSBlbmFibGVkLgo+ICogT24g RFAgaG90cGx1ZzogRGlyZWN0bHkgc3RhcnQgbGluayB0cmFpbmluZyBvbiB0aGUgRFAgZW5jb2Rl ci4KPiAqIE9uIENvbm5lY3RlZCBib290IHNjZW5hcmlvczogV2hlbiBib290ZWQgd2l0aCBhbiBM RlAgYW5kIGEgRFAsCj4gwqAgc29tZXRpbWVzIEJJT1MgYnJpbmdzIHVwIERQLiBJbiB0aGVzZSBj YXNlcywgd2UgZGlzYWJsZSB0aGUKPiDCoCBjcnRjIGFuZCB0aGVuIGRvIHVwZnJvbnQgbGluayB0 cmFpbmluZzsgYW5kIGJyaW5nIGl0IGJhY2sgdXAuCj4gKiBBbGwgbG9jYWwgY2hhbmdlcyBtYWRl IGZvciB1cGZyb250IGxpbmsgdHJhaW5pbmcgYXJlIHJlc2V0Cj4gwqAgdG8gdGhlaXIgcHJldmlv dXMgdmFsdWVzIG9uY2UgaXQgaXMgZG9uZTsgc28gdGhhdCB0aGUKPiDCoCBzdWJzZXF1ZW50IG1v ZGVzZXQgaXMgbm90IGF3YXJlIG9mIHRoZXNlIGNoYW5nZXMuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2 MTI6Cj4gKiBGaXggUmViYXNlIGlzc3VlcyAoTWlrYSBLYWhvbGEpCj4gQ2hhbmdlcyBzaW5jZSB2 MTE6Cj4gKiBDaGFuZ2UgdGhlIGZhbGxiYWNrIGxpbmsgcmF0ZSBsb2dpYyAoTWFuYXNpKQo+IENo YW5nZXMgc2luY2UgdjEwOgo+ICogVXNlIHRoZSBkZGkgbGluayB0cmFpbiBmdW5jdGlvbiB0aGF0 IGxvb3BzIHRocm91Z2ggYWxsIHRoZSBsaW5rCj4gcmF0ZXMKPiBhbmQgbGFuZSBjb3VudHMgc3Rh cnRpbmcgZnJvbSB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgKE1hbmFzaSkKPiAqIEZvciB1cGZyb250 IGxpbmsgdHJhaW5pbmcsIHNldCB0aGUgdXBmcm9udCBmbGFnIHNvIHRoYXQgdGhlIGxpbmsKPiBj YW4KPiBiZSBkaXNhYmxlZCBhZnRlciBjYWNoaW5nIHVwZnJvbnQgdmFsdWVzIChNYW5hc2kpCj4g Q2hhbmdlcyBzaW5jZSB2OToKPiAqIENoYW5nZSB0aGUgbWFjcm9zIHRvIHVzZSBkZXZfcHJpdiBp biBwbGFjZSBvZiBkZXYgKERhdmlkIFdlaW5laGFsbCkKPiBDaGFuZ2VzIHNpbmNlIHY4Ogo+ICog UmVzZXQgdXBmcm9udCBsYW5lIGNvdW50IGFuZCBsaW5rIHJhdGUgdmFsdWVzIG9uIEhQRAo+IGZv ciBEUCBjb25uZWN0b3IgcGh5c2ljYWwgZGlzY29ubmVjdCAoTWFuYXNpKQo+IENoYW5nZXMgc2lu Y2Ugdjc6Cj4gKiBNb3ZlIHRoZSB1cGZyb250IGxpbmsgdHJhaW5pbmcgdG8gaW50ZWxfZHBfbW9k ZV92YWxpZCgpCj4gwqAgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIERQIE1TVCBzaWRl YmFuZCBjb21tcy4gKFZpbGxlKQo+IENoYW5nZXMgc2luY2UgdjY6Cj4gKiBGaXggc29tZSBpbml0 aWFsaXphdGlvbiBidWdzIG9uIGxpbmtfcmF0ZSAoSmltIEJyaWRlKQo+ICogVXNlIGxpbmtfcmF0 ZSAoYW5kIG5vdCBsaW5rX2J3KSBmb3IgdXBmcm9udCAoVmlsbGUpCj4gKiBNYWtlIGludGVsX2Rw X3VwZnJvbnQqKCkgYXMgYSB2ZnVuYyAoQW5kZXIpCj4gKiBUaGUgdHJhaW5fc2V0X3ZhbGlkIHZh cmlhYmxlIGluIGludGVsX2RwIHdhcyByZW1vdmVkIGR1ZSB0bwo+IMKgIGlzc3VlcyBpbiBmYXN0 IGxpbmsgdHJhaW5pbmcuIFNvLCB0byBpbmRpY2F0ZSB0aGUgbGluayB0cmFpbgo+IMKgIHN0YXR1 cywgbW92ZSB0aGUgY2hhbm5lbF9lcSBpbnNpZGUgaW50ZWxfZHAuCj4gQ2hhbmdlcyBzaW5jZSB2 NToKPiAqIE1vdmVkIHJldHJ5IGxvZ2ljIGluIHVwZnJvbnQgdG8gaW50ZWxfZHAuYyBzbyB0aGF0 IGl0Cj4gwqAgY2FuIGJlIHVzZWQgZm9yIGFsbCBwbGF0Zm9ybXMuCj4gQ2hhbmdlcyBzaW5jZSB2 NDoKPiAqIFJlbW92ZWQgdXNhZ2Ugb2YgY3J0Y19zdGF0ZSBpbiB1cGZyb250IGxpbmsgdHJhaW5p bmc7Cj4gwqAgSGVuY2Ugbm8gbmVlZCB0byBmaW5kIGZyZWUgY3J0YyB0byBkbyB1cGZyb250IG5v dy4KPiAqIFJlLWVuYWJsZSBjcnRjIGlmIGl0IHdhcyBkaXNhYmxlZCBmb3IgdXBmcm9udC4KPiAq IFVzZSBzZXBhcmF0ZSB2YXJpYWJsZXMgdG8gdHJhY2sgbWF4IGxhbmUgY291bnQKPiDCoCBhbmQg bGluayByYXRlIGZvdW5kIGJ5IHVwZnJvbnQsIHdpdGhvdXQgbW9kaWZ5aW5nCj4gwqAgdGhlIG9y aWdpbmFsIERQQ0QgcmVhZCBmcm9tIHBhbmVsLgo+IENoYW5nZXMgc2luY2UgdjM6Cj4gKiBGaXhl ZCBhIHJldHVybiB2YWx1ZSBvbiBCWFQgY2hlY2sKPiAqIFJld29ya2VkIG9uIHRvcCBvZiBieHRf ZGRpX3BsbF9zZWxlY3Qgc3BsaXQgZnJvbSBBbmRlcgo+ICogUmVuYW1lZCBmcm9tIGRkaV91cGZy b250IHRvIGJ4dF91cGZyb250IHNpbmNlIHRoZQo+IMKgIHVwZnJvbnQgbG9naWMgaW5jbHVkZXMg QlhUIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3Igbm93Lgo+IENoYW5nZXMgc2luY2UgdjI6Cj4gKiBS ZWJhc2VkIG9uIHRvcCBvZiBsYXRlc3QgZHBsbF9tZ3IuYyBjb2RlIGFuZAo+IMKgIGxhdGVzdCBI UEQgcmVsYXRlZCBjbGVhbiB1cHMuCj4gKiBDb3JyZWN0ZWQgcmV0dXJuIHZhbHVlcyBmcm9tIHVw ZnJvbnQgKEFuZGVyKQo+ICogQ29ycmVjdGVkIGF0b21pYyBsb2NraW5nIGZvciB1cGZyb250IGlu IGludGVsX2RwLmMgKFZpbGxlKQo+IENoYW5nZXMgc2luY2UgdjE6Cj4gKsKgwqBhbGwgcGxsIHJl bGF0ZWQgZnVuY3Rpb25zIGluc2lkZSBkZGkuYwo+IAo+IFNpZ25lZC1vZmYtYnk6IER1cmdhZG9z cyBSIDxkdXJnYWRvc3MuckBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmltIEJyaWRlIDxq aW0uYnJpZGVAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUg PG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kZGkuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIxICstCj4gwqBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfCAzNzYKPiArKysrKysrKysrKysrKysrKysrLS0tLS0tLQo+IMKgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIHzCoMKgwqAxIC0KPiDCoGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTQg Ky0KPiDCoDQgZmlsZXMgY2hhbmdlZCwgMzEwIGluc2VydGlvbnMoKyksIDEwMiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gaW5kZXggZGEyYjgwNC4uYjMyZjdi YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gQEAgLTE2NzMsNyArMTY3Myw4IEBA IHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdAo+IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gwqAJcGxsLT5jb25maWcuY3J0Y19tYXNrID0gMDsKPiDCoAo+IMKgCS8q IElmIExpbmsgVHJhaW5pbmcgZmFpbHMsIHNlbmQgYSB1ZXZlbnQgdG8gZ2VuZXJhdGUgYQo+IGhv dHBsdWcgKi8KPiAtCWlmICghKGludGVsX2RkaV9saW5rX3RyYWluKGludGVsX2RwLCBsaW5rX3Jh dGUsIGxhbmVfY291bnQsCj4gbGlua19tc3QpKSkKPiArCWlmICghKGludGVsX2RkaV9saW5rX3Ry YWluKGludGVsX2RwLCBsaW5rX3JhdGUsIGxhbmVfY291bnQsCj4gbGlua19tc3QsCj4gKwkJCQnC oMKgwqBmYWxzZSkpKQo+IMKgCQlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGVuY29kZXIt PmJhc2UuZGV2KTsKPiDCoAlwbGwtPmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+IMKgfQo+IEBA IC0yNDYwLDcgKzI0NjEsNyBAQCBpbnRlbF9kZGlfZ2V0X2xpbmtfZHBsbChzdHJ1Y3QgaW50ZWxf ZHAKPiAqaW50ZWxfZHAsIGludCBjbG9jaykKPiDCoAo+IMKgYm9vbAo+IMKgaW50ZWxfZGRpX2xp bmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IG1heF9saW5rX3JhdGUsCj4g LQkJwqDCoMKgwqDCoHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3QpCj4gKwkJ wqDCoMKgwqDCoHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3QsIGJvb2wKPiBp c191cGZyb250KQo+IMKgewo+IMKgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IGludGVsX2RwLQo+ID5hdHRhY2hlZF9jb25uZWN0b3I7Cj4gwqAJc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7Cj4gQEAgLTI1MDYsNiArMjUwNyw3IEBA IGludGVsX2RkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gaW50IG1h eF9saW5rX3JhdGUsCj4gwqAJCQlwbGwtPmZ1bmNzLmRpc2FibGUoZGV2X3ByaXYsIHBsbCk7Cj4g wqAJCQlwbGwtPmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+IMKgCQl9Cj4gKwo+IMKgCQlpZiAo cmV0KSB7Cj4gwqAJCQlEUk1fREVCVUdfS01TKCJMaW5rIFRyYWluaW5nIHN1Y2Nlc3NmdWwgYXQK PiBsaW5rIHJhdGU6ICIKPiDCoAkJCQnCoMKgwqDCoMKgwqAiJWQgbGFuZTolZFxuIiwgbGlua19y YXRlLAo+IGxhbmVfY291bnQpOwo+IEBAIC0yNTE0LDYgKzI1MTYsMjEgQEAgaW50ZWxfZGRpX2xp bmtfdHJhaW4oc3RydWN0IGludGVsX2RwCj4gKmludGVsX2RwLCBpbnQgbWF4X2xpbmtfcmF0ZSwK PiDCoAl9Cj4gwqAJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKPiDCoAo+ICsJ aWYgKGlzX3VwZnJvbnQpIHsKPiArCQlEUk1fREVCVUdfS01TKCJVcGZyb250IGxpbmsgdHJhaW4g JXM6IGxpbmtfY2xvY2s6JWQKPiBsYW5lczolZFxuIiwKPiArCQkJwqDCoMKgwqDCoMKgcmV0ID8g IlBhc3NlZCIgOiAiRmFpbGVkIiwKPiArCQkJwqDCoMKgwqDCoMKgbGlua19yYXRlLCBsYW5lX2Nv dW50KTsKPiArCQkvKiBEaXNhYmxlIHBvcnQgZm9sbG93ZWQgYnkgUExMIGZvciBuZXh0IHJldHJ5 L2NsZWFuCj4gdXAgKi8KPiArCQlpbnRlbF9kZGlfcG9zdF9kaXNhYmxlKGVuY29kZXIsIE5VTEws IE5VTEwpOwo+ICsJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxsKTsKPiArCQlwbGwt PmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJLyogU2F2ZSB0 aGUgdXBmcm9udCB2YWx1ZXMgKi8KPiArCQkJaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250ID0g bGFuZV9jb3VudDsKPiArCQkJaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udCA9IGxpbmtf cmF0ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+IMKgCWlmICghbGFuZV9jb3VudCkKPiDCoAkJRFJNX0VS Uk9SKCJMaW5rIFRyYWluaW5nIEZhaWxlZFxuIik7Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwo+IGluZGV4IDcxNGZiZTMuLjc3OTQxODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw LmMKPiBAQCAtMTUzLDEyICsxNTMsMjEgQEAgaW50ZWxfZHBfbWF4X2xpbmtfYncoc3RydWN0Cj4g aW50ZWxfZHDCoMKgKmludGVsX2RwKQo+IMKgc3RhdGljIHU4IGludGVsX2RwX21heF9sYW5lX2Nv dW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gwqB7Cj4gwqAJc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPQo+IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsK PiAtCXU4IHNvdXJjZV9tYXgsIHNpbmtfbWF4Owo+ICsJdTggdGVtcCwgc291cmNlX21heCwgc2lu a19tYXg7Cj4gwqAKPiDCoAlzb3VyY2VfbWF4ID0gaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lczsK PiDCoAlzaW5rX21heCA9IGRybV9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcC0+ZHBjZCk7Cj4g wqAKPiAtCXJldHVybiBtaW4oc291cmNlX21heCwgc2lua19tYXgpOwo+ICsJdGVtcCA9IG1pbihz b3VyY2VfbWF4LCBzaW5rX21heCk7Cj4gKwo+ICsJLyoKPiArCcKgKiBMaW1pdCBtYXggbGFuZXMg dy5yLnQgdG8gdGhlIG1heCB2YWx1ZSBmb3VuZAo+ICsJwqAqIHVzaW5nIFVwZnJvbnQgbGluayB0 cmFpbmluZyBhbHNvLgo+ICsJwqAqLwo+ICsJaWYgKGludGVsX2RwLT5tYXhfbGFuZXNfdXBmcm9u dCkKPiArCQlyZXR1cm4gbWluKHRlbXAsIGludGVsX2RwLT5tYXhfbGFuZXNfdXBmcm9udCk7Cj4g KwllbHNlCj4gKwkJcmV0dXJuIHRlbXA7Cj4gwqB9Cj4gwqAKPiDCoC8qCj4gQEAgLTE5MCw2ICsx OTksMjI5IEBAIGludGVsX2RwX21heF9kYXRhX3JhdGUoaW50IG1heF9saW5rX2Nsb2NrLCBpbnQK PiBtYXhfbGFuZXMpCj4gwqAJcmV0dXJuIChtYXhfbGlua19jbG9jayAqIG1heF9sYW5lcyAqIDgp IC8gMTA7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIGludCBpbnRlbF9kcF91cGZyb250X2NydGNfZGlz YWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCXN0cnVjdCBkcm1fbW9kZXNldF9h Y3F1aXJlX2N0eCAqY3R4LAo+ICsJCQkJYm9vbCBlbmFibGUpCkluZGVudGF0aW9uIHNlZW1zIGEg Yml0IG9mZi4KCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiArCWVudW0gcGlwZSBwaXBlID0g Y3J0Yy0+cGlwZTsKPiArCj4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsK PiArCWlmICghc3RhdGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc3RhdGUtPmFjcXVp cmVfY3R4ID0gY3R4Owo+ICsKPiArCWNydGNfc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2NydGNf c3RhdGUoc3RhdGUsIGNydGMpOwo+ICsJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkgewo+ICsJCXJl dCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gKwkJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRl KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzYWJsaW5n IGNydGMgJWMgJXMgdXBmcm9udCBsaW5rIHRyYWluXG4iLAo+ICsJCQllbmFibGUgPyAiRW4iIDog IkRpcyIsCj4gKwkJCXBpcGVfbmFtZShwaXBlKSwKPiArCQkJZW5hYmxlID8gImFmdGVyIiA6ICJi ZWZvcmUiKTsKPiArCj4gKwljcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSA9IGVuYWJsZTsKPiArCXJl dCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJZHJtX2F0b21p Y19zdGF0ZV9mcmVlKHN0YXRlKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50Cj4gK2ludGVsX2RwX3NpbmtfcmF0ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwg Y29uc3QgaW50Cj4gKipzaW5rX3JhdGVzKQo+ICt7Cj4gKwlpZiAoaW50ZWxfZHAtPm51bV9zaW5r X3JhdGVzKSB7Cj4gKwkJKnNpbmtfcmF0ZXMgPSBpbnRlbF9kcC0+c2lua19yYXRlczsKPiArCQly ZXR1cm4gaW50ZWxfZHAtPm51bV9zaW5rX3JhdGVzOwo+ICsJfQo+ICsKPiArCSpzaW5rX3JhdGVz ID0gZGVmYXVsdF9yYXRlczsKPiArCj4gKwlyZXR1cm4gKGludGVsX2RwX21heF9saW5rX2J3KGlu dGVsX2RwKSA+PiAzKSArIDE7Cj4gK30KPiArCj4gK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBv cnRzX2hicjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPQo+IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtCj4g PmJhc2UuYmFzZS5kZXYpOwo+ICsKPiArCS8qIFdhRGlzYWJsZUhCUjI6c2tsICovCj4gKwlpZiAo SVNfU0tMX1JFVklEKGRldl9wcml2LCAwLCBTS0xfUkVWSURfQjApKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArCj4gKwlpZiAoKElTX0hBU1dFTEwoZGV2X3ByaXYpICYmICFJU19IU1dfVUxYKGRldl9w cml2KSkgfHwKPiArCcKgwqDCoMKgSVNfQlJPQURXRUxMKGRldl9wcml2KSB8fCAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5KSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWVsc2UKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfZHBfc291cmNlX3JhdGVzKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGNvbnN0IGludAo+ICoqc291cmNlX3JhdGVzKQo+ICt7 Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9Cj4gZHBfdG9fZGlnX3Bv cnQoaW50ZWxfZHApOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkaWdfcG9ydC0KPiA+YmFzZS5iYXNlLmRldik7Cj4gKwlpbnQgc2l6ZTsKPiArCj4gKwlp ZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpIHsKPiArCQkqc291cmNlX3JhdGVzID0gYnh0X3JhdGVz Owo+ICsJCXNpemUgPSBBUlJBWV9TSVpFKGJ4dF9yYXRlcyk7Cj4gKwl9IGVsc2UgaWYgKElTX1NL WUxBS0UoZGV2X3ByaXYpIHx8IElTX0tBQllMQUtFKGRldl9wcml2KSkgewo+ICsJCSpzb3VyY2Vf cmF0ZXMgPSBza2xfcmF0ZXM7Cj4gKwkJc2l6ZSA9IEFSUkFZX1NJWkUoc2tsX3JhdGVzKTsKPiAr CX0gZWxzZSB7Cj4gKwkJKnNvdXJjZV9yYXRlcyA9IGRlZmF1bHRfcmF0ZXM7Cj4gKwkJc2l6ZSA9 IEFSUkFZX1NJWkUoZGVmYXVsdF9yYXRlcyk7Cj4gKwl9Cj4gKwo+ICsJLyogVGhpcyBkZXBlbmRz IG9uIHRoZSBmYWN0IHRoYXQgNS40IGlzIGxhc3QgdmFsdWUgaW4gdGhlCj4gYXJyYXkgKi8KPiAr CWlmICghaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjIoaW50ZWxfZHApKQo+ICsJCXNpemUt LTsKPiArCj4gKwlyZXR1cm4gc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbnRlcnNlY3Rf cmF0ZXMoY29uc3QgaW50ICpzb3VyY2VfcmF0ZXMsIGludCBzb3VyY2VfbGVuLAo+ICsJCQnCoMKg wqBjb25zdCBpbnQgKnNpbmtfcmF0ZXMsIGludCBzaW5rX2xlbiwKPiArCQkJwqDCoMKgaW50ICpj b21tb25fcmF0ZXMpCj4gK3sKPiArCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOwo+ICsKPiArCXdo aWxlIChpIDwgc291cmNlX2xlbiAmJiBqIDwgc2lua19sZW4pIHsKPiArCQlpZiAoc291cmNlX3Jh dGVzW2ldID09IHNpbmtfcmF0ZXNbal0pIHsKPiArCQkJaWYgKFdBUk5fT04oayA+PSBEUF9NQVhf U1VQUE9SVEVEX1JBVEVTKSkKPiArCQkJCXJldHVybiBrOwo+ICsJCQljb21tb25fcmF0ZXNba10g PSBzb3VyY2VfcmF0ZXNbaV07Cj4gKwkJCSsrazsKPiArCQkJKytpOwo+ICsJCQkrK2o7Cj4gKwkJ fSBlbHNlIGlmIChzb3VyY2VfcmF0ZXNbaV0gPCBzaW5rX3JhdGVzW2pdKSB7Cj4gKwkJCSsraTsK PiArCQl9IGVsc2Ugewo+ICsJCQkrK2o7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIGs7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfZHBfY29tbW9uX3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAsCj4gKwkJCQnCoGludCAqY29tbW9uX3JhdGVzKQo+ICt7Cj4gKwljb25zdCBpbnQg KnNvdXJjZV9yYXRlcywgKnNpbmtfcmF0ZXM7Cj4gKwlpbnQgc291cmNlX2xlbiwgc2lua19sZW47 Cj4gKwo+ICsJc2lua19sZW4gPSBpbnRlbF9kcF9zaW5rX3JhdGVzKGludGVsX2RwLCAmc2lua19y YXRlcyk7Cj4gKwo+ICsJLyogQ2FwIHNpbmsgcmF0ZXMgdy5yLnQgdXBmcm9udCB2YWx1ZXMgKi8K PiArCWlmIChpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250KSB7Cj4gKwkJaW50IGxlbiA9 IHNpbmtfbGVuIC0gMTsKPiArCQl3aGlsZSAobGVuID4gMCAmJiBzaW5rX3JhdGVzW2xlbl0gPgo+ ICsJCcKgwqDCoMKgwqDCoMKgaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udCkKPiArCQkJ bGVuLS07Cj4gKwkJc2lua19sZW4gPSBsZW4gKyAxOwo+ICsJfQo+ICsKPiArCXNvdXJjZV9sZW4g PSBpbnRlbF9kcF9zb3VyY2VfcmF0ZXMoaW50ZWxfZHAsICZzb3VyY2VfcmF0ZXMpOwo+ICsKPiAr CXJldHVybiBpbnRlcnNlY3RfcmF0ZXMoc291cmNlX3JhdGVzLCBzb3VyY2VfbGVuLAo+ICsJCQnC oMKgwqDCoMKgwqDCoHNpbmtfcmF0ZXMsIHNpbmtfbGVuLAo+ICsJCQnCoMKgwqDCoMKgwqDCoGNv bW1vbl9yYXRlcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGludGVsX2RwX3VwZnJvbnRfbGlu a190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9Cj4gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp Owo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAmaW50ZWxfZGlnX3Bv cnQtPmJhc2U7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZW5jb2Rlci0+YmFz ZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRl dik7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZp ZzsKPiArCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4gKwlzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IE5VTEw7Cj4g KwlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbDsKPiArCXN0cnVjdCBpbnRlbF9zaGFyZWRf ZHBsbF9jb25maWcgdG1wX3BsbF9jb25maWc7Cj4gKwlib29sIGRpc2FibGVfZHBsbCA9IGZhbHNl Owo+ICsJaW50IHJldDsKPiArCWJvb2wgZG9uZSA9IGZhbHNlLCBoYXNfbXN0ID0gZmFsc2U7Cj4g Kwl1aW50OF90IG1heF9sYW5lczsKPiArCWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NVUFBPUlRF RF9SQVRFU10gPSB7fTsKPiArCWludCBjb21tb25fbGVuOwo+ICsJZW51bSBpbnRlbF9kaXNwbGF5 X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4gKwo+ICsJcG93ZXJfZG9tYWluID0KPiBpbnRl bF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOwo+ICsJaW50ZWxfZGlz cGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Cj4gKwo+ICsJY29tbW9uX2xl biA9IGludGVsX2RwX2NvbW1vbl9yYXRlcyhpbnRlbF9kcCwgY29tbW9uX3JhdGVzKTsKPiArCW1h eF9sYW5lcyA9IGludGVsX2RwX21heF9sYW5lX2NvdW50KGludGVsX2RwKTsKPiArCWlmIChXQVJO X09OKGNvbW1vbl9sZW4gPD0gMCkpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJZHJtX21vZGVz ZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ICtyZXRyeToKPiArCXJldCA9IGRybV9tb2Rlc2V0 X2xvY2soJmNvbmZpZy0+Y29ubmVjdGlvbl9tdXRleCwgJmN0eCk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZXhpdF9mYWlsOwo+ICsKPiArCWlmIChpbnRlbF9lbmNvZGVyLT5iYXNlLmNydGMpIHsK PiArCQljcnRjID0gaW50ZWxfZW5jb2Rlci0+YmFzZS5jcnRjOwo+ICsKPiArCQlyZXQgPSBkcm1f bW9kZXNldF9sb2NrKCZjcnRjLT5tdXRleCwgJmN0eCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290 byBleGl0X2ZhaWw7Cj4gKwo+ICsJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNydGMtPnByaW1h cnktPm11dGV4LCAmY3R4KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGV4aXRfZmFpbDsKPiAr Cj4gKwkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwkJcGxsID0gaW50ZWxf Y3J0Yy0+Y29uZmlnLT5zaGFyZWRfZHBsbDsKPiArCQlkaXNhYmxlX2RwbGwgPSB0cnVlOwo+ICsJ CWhhc19tc3QgPSBpbnRlbF9jcnRjX2hhc190eXBlKGludGVsX2NydGMtPmNvbmZpZywKPiArCQkJ CQnCoMKgwqDCoMKgwqBJTlRFTF9PVVRQVVRfRFBfTVNUKTsKPiArCQlyZXQgPSBpbnRlbF9kcF91 cGZyb250X2NydGNfZGlzYWJsZShpbnRlbF9jcnRjLAo+ICZjdHgsIGZhbHNlKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlnb3RvIGV4aXRfZmFpbDsKPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZkZXZf cHJpdi0+ZHBsbF9sb2NrKTsKPiArCWlmIChkaXNhYmxlX2RwbGwpIHsKPiArCQkvKiBDbGVhciB0 aGUgUExMIGNvbmZpZyBzdGF0ZSAqLwo+ICsJCXRtcF9wbGxfY29uZmlnID0gcGxsLT5jb25maWc7 Cj4gKwkJcGxsLT5jb25maWcuY3J0Y19tYXNrID0gMDsKPiArCX0KPiArCj4gKwlkb25lID0gaW50 ZWxfZHAtPnVwZnJvbnRfbGlua190cmFpbihpbnRlbF9kcCwKPiArCQkJCQnCoMKgwqDCoGNvbW1v bl9yYXRlc1tjb21tb25fbGVuLQo+IDFdLAo+ICsJCQkJCcKgwqDCoMKgbWF4X2xhbmVzLAo+ICsJ CQkJCcKgwqDCoMKgaGFzX21zdCwKPiArCQkJCQnCoMKgwqDCoHRydWUpOwo+ICsJaWYgKGRpc2Fi bGVfZHBsbCkKPiArCQlwbGwtPmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ICsKPiArCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmRwbGxfbG9jayk7Cj4gKwo+ICsJaWYgKGNydGMpCj4gKwkJcmV0 ID0gaW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoaW50ZWxfY3J0YywKPiAmY3R4LCB0cnVl KTsKPiArCj4gK2V4aXRfZmFpbDoKPiArCWlmIChyZXQgPT0gLUVERUFETEspIHsKPiArCQlkcm1f bW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+ICsJCWdvdG8gcmV0cnk7Cj4gKwl9Cj4gKwlkcm1fbW9k ZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+ICsJZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgp Owo+ICsJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Cj4g KwlyZXR1cm4gZG9uZTsKPiArfQo+ICsKPiDCoHN0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ IMKgaW50ZWxfZHBfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ IMKgCQnCoMKgwqDCoHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+IEBAIC0yMTEsNiAr NDQzLDE5IEBAIGludGVsX2RwX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IKPiAqY29u bmVjdG9yLAo+IMKgCQl0YXJnZXRfY2xvY2sgPSBmaXhlZF9tb2RlLT5jbG9jazsKPiDCoAl9Cj4g wqAKPiArCWlmIChpbnRlbF9kcC0+dXBmcm9udF9saW5rX3RyYWluICYmICFpbnRlbF9kcC0+dXBm cm9udF9kb25lKSAKPiB7Cj4gKwkJYm9vbCBkb191cGZyb250X2xpbmtfdHJhaW47Cj4gKwkJLyog RG8gbm90IGRvIHVwZnJvbnQgbGluayB0cmFpbiwgaWYgaXQgaXMgYQo+IGNvbXBsaWFuY2UKPiAr CQnCoCogcmVxdWVzdAo+ICsJCcKgKi8KPiArCQlkb191cGZyb250X2xpbmtfdHJhaW4gPSAhaW50 ZWxfZHAtPnVwZnJvbnRfZG9uZSAmJgo+ICsJCQkoaW50ZWxfZHAtPmNvbXBsaWFuY2VfdGVzdF90 eXBlICE9Cj4gKwkJCcKgRFBfVEVTVF9MSU5LX1RSQUlOSU5HKTsKPiArCj4gKwkJaWYgKGRvX3Vw ZnJvbnRfbGlua190cmFpbikKPiArCQkJaW50ZWxfZHAtPnVwZnJvbnRfZG9uZSA9Cj4gaW50ZWxf ZHBfdXBmcm9udF9saW5rX3RyYWluKGludGVsX2RwKTsKPiArCX0KPiArCj4gwqAJbWF4X2xpbmtf Y2xvY2sgPSBpbnRlbF9kcF9tYXhfbGlua19yYXRlKGludGVsX2RwKTsKPiDCoAltYXhfbGFuZXMg PSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCk7Cj4gwqAKPiBAQCAtMTI1Niw2MCAr MTUwMSw2IEBAIGludGVsX2RwX2F1eF9pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4g c3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+IMKgCWludGVsX2RwLT5hdXgudHJh bnNmZXIgPSBpbnRlbF9kcF9hdXhfdHJhbnNmZXI7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIGludAo+ IC1pbnRlbF9kcF9zaW5rX3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGNvbnN0IGlu dAo+ICoqc2lua19yYXRlcykKPiAtewo+IC0JaWYgKGludGVsX2RwLT5udW1fc2lua19yYXRlcykg ewo+IC0JCSpzaW5rX3JhdGVzID0gaW50ZWxfZHAtPnNpbmtfcmF0ZXM7Cj4gLQkJcmV0dXJuIGlu dGVsX2RwLT5udW1fc2lua19yYXRlczsKPiAtCX0KPiAtCj4gLQkqc2lua19yYXRlcyA9IGRlZmF1 bHRfcmF0ZXM7Cj4gLQo+IC0JcmV0dXJuIChpbnRlbF9kcF9tYXhfbGlua19idyhpbnRlbF9kcCkg Pj4gMykgKyAxOwo+IC19Cj4gLQo+IC1ib29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIy KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0KPiBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXY7Cj4gLQo+IC0JLyogV2FE aXNhYmxlSEJSMjpza2wgKi8KPiAtCWlmIChJU19TS0xfUkVWSUQoZGV2LCAwLCBTS0xfUkVWSURf QjApKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlpZiAoKElTX0hBU1dFTEwoZGV2KSAmJiAh SVNfSFNXX1VMWChkZXYpKSB8fAo+IElTX0JST0FEV0VMTChkZXYpIHx8Cj4gLQnCoMKgwqDCoChJ TlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KSkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCWVsc2UKPiAt CQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQKPiAtaW50ZWxfZHBfc291cmNl X3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGNvbnN0IGludAo+ICoqc291cmNlX3Jh dGVzKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9Cj4gZHBf dG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19w b3J0LT5iYXNlLmJhc2UuZGV2Owo+IC0JaW50IHNpemU7Cj4gLQo+IC0JaWYgKElTX0JST1hUT04o ZGV2KSkgewo+IC0JCSpzb3VyY2VfcmF0ZXMgPSBieHRfcmF0ZXM7Cj4gLQkJc2l6ZSA9IEFSUkFZ X1NJWkUoYnh0X3JhdGVzKTsKPiAtCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShkZXYpIHx8IElTX0tB QllMQUtFKGRldikpIHsKPiAtCQkqc291cmNlX3JhdGVzID0gc2tsX3JhdGVzOwo+IC0JCXNpemUg PSBBUlJBWV9TSVpFKHNrbF9yYXRlcyk7Cj4gLQl9IGVsc2Ugewo+IC0JCSpzb3VyY2VfcmF0ZXMg PSBkZWZhdWx0X3JhdGVzOwo+IC0JCXNpemUgPSBBUlJBWV9TSVpFKGRlZmF1bHRfcmF0ZXMpOwo+ IC0JfQo+IC0KPiAtCS8qIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0IDUuNCBpcyBsYXN0 IHZhbHVlIGluIHRoZQo+IGFycmF5ICovCj4gLQlpZiAoIWludGVsX2RwX3NvdXJjZV9zdXBwb3J0 c19oYnIyKGludGVsX2RwKSkKPiAtCQlzaXplLS07Cj4gLQo+IC0JcmV0dXJuIHNpemU7Cj4gLX0K PiAtCj4gwqBzdGF0aWMgdm9pZAo+IMKgaW50ZWxfZHBfc2V0X2Nsb2NrKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyLAo+IMKgCQnCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcpCj4gQEAgLTEzNDMsNDIgKzE1MzQsNiBAQCBpbnRlbF9kcF9zZXRfY2xvY2soc3Ry dWN0IGludGVsX2VuY29kZXIKPiAqZW5jb2RlciwKPiDCoAl9Cj4gwqB9Cj4gwqAKPiAtc3RhdGlj IGludCBpbnRlcnNlY3RfcmF0ZXMoY29uc3QgaW50ICpzb3VyY2VfcmF0ZXMsIGludCBzb3VyY2Vf bGVuLAo+IC0JCQnCoMKgwqBjb25zdCBpbnQgKnNpbmtfcmF0ZXMsIGludCBzaW5rX2xlbiwKPiAt CQkJwqDCoMKgaW50ICpjb21tb25fcmF0ZXMpCj4gLXsKPiAtCWludCBpID0gMCwgaiA9IDAsIGsg PSAwOwo+IC0KPiAtCXdoaWxlIChpIDwgc291cmNlX2xlbiAmJiBqIDwgc2lua19sZW4pIHsKPiAt CQlpZiAoc291cmNlX3JhdGVzW2ldID09IHNpbmtfcmF0ZXNbal0pIHsKPiAtCQkJaWYgKFdBUk5f T04oayA+PSBEUF9NQVhfU1VQUE9SVEVEX1JBVEVTKSkKPiAtCQkJCXJldHVybiBrOwo+IC0JCQlj b21tb25fcmF0ZXNba10gPSBzb3VyY2VfcmF0ZXNbaV07Cj4gLQkJCSsrazsKPiAtCQkJKytpOwo+ IC0JCQkrK2o7Cj4gLQkJfSBlbHNlIGlmIChzb3VyY2VfcmF0ZXNbaV0gPCBzaW5rX3JhdGVzW2pd KSB7Cj4gLQkJCSsraTsKPiAtCQl9IGVsc2Ugewo+IC0JCQkrK2o7Cj4gLQkJfQo+IC0JfQo+IC0J cmV0dXJuIGs7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaW50ZWxfZHBfY29tbW9uX3JhdGVzKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gLQkJCQnCoGludCAqY29tbW9uX3JhdGVzKQo+IC17 Cj4gLQljb25zdCBpbnQgKnNvdXJjZV9yYXRlcywgKnNpbmtfcmF0ZXM7Cj4gLQlpbnQgc291cmNl X2xlbiwgc2lua19sZW47Cj4gLQo+IC0Jc2lua19sZW4gPSBpbnRlbF9kcF9zaW5rX3JhdGVzKGlu dGVsX2RwLCAmc2lua19yYXRlcyk7Cj4gLQlzb3VyY2VfbGVuID0gaW50ZWxfZHBfc291cmNlX3Jh dGVzKGludGVsX2RwLCAmc291cmNlX3JhdGVzKTsKPiAtCj4gLQlyZXR1cm4gaW50ZXJzZWN0X3Jh dGVzKHNvdXJjZV9yYXRlcywgc291cmNlX2xlbiwKPiAtCQkJwqDCoMKgwqDCoMKgwqBzaW5rX3Jh dGVzLCBzaW5rX2xlbiwKPiAtCQkJwqDCoMKgwqDCoMKgwqBjb21tb25fcmF0ZXMpOwo+IC19Cj4g wqAKPiDCoHN0YXRpYyB2b2lkIHNucHJpbnRmX2ludF9hcnJheShjaGFyICpzdHIsIHNpemVfdCBs ZW4sCj4gwqAJCQnCoMKgwqDCoMKgwqDCoGNvbnN0IGludCAqYXJyYXksIGludCBuZWxlbSkKPiBA QCAtMTQzNiw2ICsxNTkxLDkgQEAgaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZShzdHJ1Y3QgaW50ZWxf ZHAKPiAqaW50ZWxfZHApCj4gwqAJaW50IHJhdGVzW0RQX01BWF9TVVBQT1JURURfUkFURVNdID0g e307Cj4gwqAJaW50IGxlbjsKPiDCoAo+ICsJaWYgKGludGVsX2RwLT5tYXhfbGlua19yYXRlX3Vw ZnJvbnQpCj4gKwkJcmV0dXJuIGludGVsX2RwLT5tYXhfbGlua19yYXRlX3VwZnJvbnQ7Cj4gKwo+ IMKgCWxlbiA9IGludGVsX2RwX2NvbW1vbl9yYXRlcyhpbnRlbF9kcCwgcmF0ZXMpOwo+IMKgCWlm IChXQVJOX09OKGxlbiA8PSAwKSkKPiDCoAkJcmV0dXJuIDE2MjAwMDsKPiBAQCAtMTQ4OCw3ICsx NjQ2LDcgQEAgaW50ZWxfZHBfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIKPiAq ZW5jb2RlciwKPiDCoAllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+ cG9ydDsKPiDCoAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo cGlwZV9jb25maWctCj4gPmJhc2UuY3J0Yyk7Cj4gwqAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAq aW50ZWxfY29ubmVjdG9yID0gaW50ZWxfZHAtCj4gPmF0dGFjaGVkX2Nvbm5lY3RvcjsKPiAtCWlu dCBsYW5lX2NvdW50LCBjbG9jazsKPiArCWludCBsYW5lX2NvdW50LCBjbG9jayA9IDA7Cj4gwqAJ aW50IG1pbl9sYW5lX2NvdW50ID0gMTsKPiDCoAlpbnQgbWF4X2xhbmVfY291bnQgPSBpbnRlbF9k cF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCk7Cj4gwqAJLyogQ29udmVuaWVudGx5LCB0aGUgbGlu ayBCVyBjb25zdGFudHMgYmVjb21lIGluZGljZXMgd2l0aCBhCj4gc2hpZnQuLi4qLwo+IEBAIC0x NTY3LDExICsxNzI1LDI0IEBAIGludGVsX2RwX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9l bmNvZGVyCj4gKmVuY29kZXIsCj4gwqAJZm9yICg7IGJwcCA+PSA2KjM7IGJwcCAtPSAyKjMpIHsK PiDCoAkJbW9kZV9yYXRlID0gaW50ZWxfZHBfbGlua19yZXF1aXJlZChhZGp1c3RlZF9tb2RlLQo+ ID5jcnRjX2Nsb2NrLAo+IMKgCQkJCQkJwqDCoMKgYnBwKTsKPiArCQlpZiAoIWlzX2VkcChpbnRl bF9kcCkgJiYgaW50ZWxfZHAtPnVwZnJvbnRfZG9uZSkgewo+ICsJCQljbG9jayA9IG1heF9jbG9j azsKPiArCQkJbGFuZV9jb3VudCA9IGludGVsX2RwLT5tYXhfbGFuZXNfdXBmcm9udDsKPiArCQkJ bGlua19jbG9jayA9IGludGVsX2RwLQo+ID5tYXhfbGlua19yYXRlX3VwZnJvbnQ7Cj4gKwkJCWxp bmtfYXZhaWwgPQo+IGludGVsX2RwX21heF9kYXRhX3JhdGUobGlua19jbG9jaywKPiArCQkJCQkJ CcKgwqDCoMKgbGFuZV9jb3UKPiBudCk7Cj4gKwkJCW1vZGVfcmF0ZSA9Cj4gaW50ZWxfZHBfbGlu a19yZXF1aXJlZChhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLAo+ICsJCQkJCQkJwqDCoMKgYnBw KTsKPiArCQkJaWYgKG1vZGVfcmF0ZSA8PSBsaW5rX2F2YWlsKQo+ICsJCQkJZ290byBmb3VuZDsK PiArCQkJZWxzZQo+ICsJCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiDCoAkJZm9yIChjbG9jayA9 IG1heF9jbG9jazsgY2xvY2sgPj0gbWF4X2Nsb2NrOyBjbG9jay0tKQo+IHsKPiDCoAkJCWZvciAo bGFuZV9jb3VudCA9IG1heF9sYW5lX2NvdW50Owo+IMKgCQkJwqDCoMKgwqDCoGxhbmVfY291bnQg Pj0gbWluX2xhbmVfY291bnQ7Cj4gwqAJCQnCoMKgwqDCoMKgbGFuZV9jb3VudCA+Pj0gMSkgewo+ IC0KPiDCoAkJCQlsaW5rX2Nsb2NrID0gY29tbW9uX3JhdGVzW2Nsb2NrXTsKPiDCoAkJCQlsaW5r X2F2YWlsID0KPiBpbnRlbF9kcF9tYXhfZGF0YV9yYXRlKGxpbmtfY2xvY2ssCj4gwqAJCQkJCQkJ CcKgwqDCoMKgCj4gbGFuZV9jb3VudCk7Cj4gQEAgLTE2MDAsNyArMTc3MSw2IEBAIGZvdW5kOgo+ IMKgCX0KPiDCoAo+IMKgCXBpcGVfY29uZmlnLT5sYW5lX2NvdW50ID0gbGFuZV9jb3VudDsKPiAt Cj4gwqAJcGlwZV9jb25maWctPnBpcGVfYnBwID0gYnBwOwo+IMKgCXBpcGVfY29uZmlnLT5wb3J0 X2Nsb2NrID0gY29tbW9uX3JhdGVzW2Nsb2NrXTsKPiDCoAo+IEBAIC00Mjg0LDcgKzQ0NTQsNyBA QCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IKPiAqaW50ZWxfY29u bmVjdG9yKQo+IMKgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiDC oAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1czsKPiDCoAllbnVtIGludGVsX2Rpc3Bs YXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPiAtCXU4IHNpbmtfaXJxX3ZlY3RvciA9IDA7 Cj4gKwl1OCBzaW5rX2lycV92ZWN0b3I7Cj4gwqAKPiDCoAlwb3dlcl9kb21haW4gPQo+IGludGVs X2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOwo+IMKgCWludGVs X2Rpc3BsYXlfcG93ZXJfZ2V0KHRvX2k5MTUoZGV2KSwgcG93ZXJfZG9tYWluKTsKPiBAQCAtNDM3 Nyw5ICs0NTQ3LDEyIEBAIGludGVsX2RwX2xvbmdfcHVsc2Uoc3RydWN0IGludGVsX2Nvbm5lY3Rv cgo+ICppbnRlbF9jb25uZWN0b3IpCj4gwqAJfQo+IMKgCj4gwqBvdXQ6Cj4gLQlpZiAoKHN0YXR1 cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgJiYKPiAtCcKgwqDCoMKgKGludGVsX2Rw LT5pc19tc3QgPT0gZmFsc2UpKQo+ICsJaWYgKHN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZCkgewo+IMKgCQlpbnRlbF9kcF91bnNldF9lZGlkKGludGVsX2RwKTsKPiArCQlpbnRl bF9kcC0+dXBmcm9udF9kb25lID0gZmFsc2U7Cj4gKwkJaW50ZWxfZHAtPm1heF9sYW5lc191cGZy b250ID0gMDsKPiArCQlpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250ID0gMDsKPiArCX0K PiDCoAo+IMKgCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHRvX2k5MTUoZGV2KSwgcG93ZXJfZG9t YWluKTsKPiDCoAlyZXR1cm47Cj4gQEAgLTU2MjMsNiArNTc5NiwxMyBAQCBpbnRlbF9kcF9pbml0 X2Nvbm5lY3RvcihzdHJ1Y3QKPiBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ IMKgCWlmICh0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApCj4gwqAJCWludGVsX2VuY29k ZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRURQOwo+IMKgCj4gKwkvKiBJbml0aWFsaXplIHVwZnJv bnQgbGluayB0cmFpbmluZyB2ZnVuYyBmb3IgRFAgKi8KPiArCWlmIChpbnRlbF9lbmNvZGVyLT50 eXBlICE9IElOVEVMX09VVFBVVF9FRFApIHsKPiArCQlpZiAoSVNfQlJPWFRPTihkZXZfcHJpdikg fHwgSVNfU0tZTEFLRShkZXZfcHJpdikgfHwKPiArCQnCoMKgwqDCoElTX0JST0FEV0VMTChkZXZf cHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCj4gKwkJCWludGVsX2RwLT51cGZyb250X2xp bmtfdHJhaW4gPQo+IGludGVsX2RkaV9saW5rX3RyYWluOwo+ICsJfQo+ICsKPiDCoAkvKiBlRFAg b25seSBvbiBwb3J0IEIgYW5kL29yIEMgb24gdmx2L2NodiAqLwo+IMKgCWlmIChXQVJOX09OKChJ U19WQUxMRVlWSUVXKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpKSAmJgo+IMKgCQnCoMKgwqDC oGlzX2VkcChpbnRlbF9kcCkgJiYgcG9ydCAhPSBQT1JUX0IgJiYgcG9ydCAhPQo+IFBPUlRfQykp Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5p bmcuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCj4g aW5kZXggZjFlMDhmMC4uYjZmMzgwYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiBAQCAtMzA0LDcgKzMwNCw2IEBACj4gaW50ZWxfZHBf bGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgaW50ZWxfZHAKPiAqaW50 ZWxfZHApCj4gwqAJaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gwqAK PiDCoAlyZXR1cm4gaW50ZWxfZHAtPmNoYW5uZWxfZXFfc3RhdHVzOwo+IC0KPiDCoH0KPiDCoAo+ IMKgdm9pZCBpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggYzU3MWJhZi4uYTJiYmY2OCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTg4Miw2ICs4ODIsMTIgQEAgc3Ry dWN0IGludGVsX2RwIHsKPiDCoAllbnVtIGhkbWlfZm9yY2VfYXVkaW8gZm9yY2VfYXVkaW87Cj4g wqAJYm9vbCBsaW1pdGVkX2NvbG9yX3JhbmdlOwo+IMKgCWJvb2wgY29sb3JfcmFuZ2VfYXV0bzsK PiArCj4gKwkvKiBVcGZyb250IGxpbmsgdHJhaW4gcGFyYW1ldGVycyAqLwo+ICsJaW50IG1heF9s aW5rX3JhdGVfdXBmcm9udDsKPiArCXVpbnQ4X3QgbWF4X2xhbmVzX3VwZnJvbnQ7Cj4gKwlib29s IHVwZnJvbnRfZG9uZTsKPiArCj4gwqAJdWludDhfdCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpF XTsKPiDCoAl1aW50OF90IHBzcl9kcGNkW0VEUF9QU1JfUkVDRUlWRVJfQ0FQX1NJWkVdOwo+IMKg CXVpbnQ4X3QgZG93bnN0cmVhbV9wb3J0c1tEUF9NQVhfRE9XTlNUUkVBTV9QT1JUU107Cj4gQEAg LTkzOSw2ICs5NDUsMTEgQEAgc3RydWN0IGludGVsX2RwIHsKPiDCoAkvKiBUaGlzIGlzIGNhbGxl ZCBiZWZvcmUgYSBsaW5rIHRyYWluaW5nIGlzIHN0YXJ0ZXJkICovCj4gwqAJdm9pZCAoKnByZXBh cmVfbGlua19yZXRyYWluKShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiDCoAo+ICsJLyog Rm9yIFVwZnJvbnQgbGluayB0cmFpbmluZyAqLwo+ICsJYm9vbCAoKnVwZnJvbnRfbGlua190cmFp bikoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50Cj4gY2xvY2ssCj4gKwkJCQnCoMKgwqB1 aW50OF90IGxhbmVfY291bnQsIGJvb2wKPiBsaW5rX21zdCwKPiArCQkJCcKgwqDCoGJvb2wgaXNf dXBmcm9udCk7Cj4gKwo+IMKgCS8qIERpc3BsYXlwb3J0IGNvbXBsaWFuY2UgdGVzdGluZyAqLwo+ IMKgCXVuc2lnbmVkIGxvbmcgY29tcGxpYW5jZV90ZXN0X3R5cGU7Cj4gwqAJdW5zaWduZWQgbG9u ZyBjb21wbGlhbmNlX3Rlc3RfZGF0YTsKPiBAQCAtMTE2MSw3ICsxMTcyLDggQEAgdm9pZCBpbnRl bF9kZGlfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9lbmNvZGVyCj4gKmVuY29kZXIsCj4gwqB2b2lk IGludGVsX2RkaV9zZXRfdmNfcGF5bG9hZF9hbGxvYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJv b2wKPiBzdGF0ZSk7Cj4gwqB1aW50MzJfdCBkZGlfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKPiDCoGJvb2wgaW50ZWxfZGRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgaW50Cj4gbWF4X2xpbmtfcmF0ZSwKPiAtCQkJwqDCoHVpbnQ4X3QgbWF4 X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3QpOwo+ICsJCQnCoMKgdWludDhfdCBtYXhfbGFuZV9j b3VudCwgYm9vbCBsaW5rX21zdCwKPiArCQkJwqDCoGJvb2wgaXNfdXBmcm9udCk7Cj4gwqBzdHJ1 Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKmludGVsX2RkaV9nZXRfbGlua19kcGxsKHN0cnVjdCBpbnRl bF9kcAo+ICppbnRlbF9kcCwKPiDCoAkJCQkJCcKgwqBpbnQgY2xvY2spOwo+IMKgdW5zaWduZWQg aW50IGludGVsX2ZiX2FsaWduX2hlaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotLSAKTWlr YSBLYWhvbGEgLSBJbnRlbCBPVEMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=