From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH] [v1,2/2] drm/panel:Add Boe Himax8279d MIPI-DSI LCD panel Date: Sat, 23 Feb 2019 23:38:35 +0100 Message-ID: <20190223223835.GA9326@ravnborg.org> References: <1550802728-17842-1-git-send-email-hanxu5@huaqin.corp-partner.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 29CCE8973E for ; Sat, 23 Feb 2019 22:38:38 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1550802728-17842-1-git-send-email-hanxu5@huaqin.corp-partner.google.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jerry Han Cc: Jerry Han , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgSmVycnkuCgpUaGFua3MgZm9yIHRoaXMgZHJpdmVyIHN1Ym1pc3Npb24uClBsZWFzZSBzZWUg dGhlIGZvbGxvd2luZyBmb3Igc29tZSByZXZpZXcgZmVlZGJhY2suCgoJU2FtCgpPbiBGcmksIEZl YiAyMiwgMjAxOSBhdCAxMDozMjowOEFNICswODAwLCBKZXJyeSBIYW4gd3JvdGU6Cj4gQWRkIHBh bmVsIGRyaXZlciBmb3IgaXQuCj4gCj4gU2lnbmVkLW9mZi1ieTogSmVycnkgSGFuIDxoYW54dTVA aHVhcWluLmNvcnAtcGFydG5lci5nb29nbGUuY29tPgo+IC0tLQo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEh1YXFp biBFbGVjdHJvbmljcyBDby4sIEx0ZAo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgpXaXRoIHRoZSBTUERYIGlkZW50aWZpZXIgdGhpcyBib2lsZXJwbGF0IGNhbiBiZSBk cm9wcGVkLgoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+ClBsZWFzZSBkbyBub3QgdXNlIGRybVAuaCBmb3IgbmV3IGRyaXZlcnMs IGFzIHRoaXMgaGVhZGVyIGZpbGUgaXMgZGVwcmVjYXRlZC4KCj4gKyNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KPiArCj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpQbGVhc2UgdmVyaWZ5IHRoYXQgeW91IG5lZWQgZXJyLmgg aW5jbHVkZSwgb2Z0ZW4gaXQgaXMgbm90IG5lZWRlZC4KPiArCj4gK3N0cnVjdCBkc2lfY21kX2Rl c2Mgewo+ICsJY2hhciB3YWl0Owo+ICsJY2hhciBjbWQ7Cj4gKwljaGFyIGxlbjsKPiArCWNoYXIg KnBheWxvYWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHNpX3BhbmVsX2NtZHMgewo+ICsJY2hhciAq YnVmOwo+ICsJaW50IGJsZW47Cj4gKwlzdHJ1Y3QgZHNpX2NtZF9kZXNjICpjbWRzOwo+ICsJaW50 IGNtZF9jbnQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcGFuZWxfaW5mbyB7Cj4gKwlzdHJ1Y3QgZHJt X3BhbmVsIGJhc2U7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpsaW5rOwo+ICsKPiArCXN0 cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpy ZXNldF9ncGlvOwo+ICsJc3RydWN0IGdwaW9fZGVzYyAqcHAzMzAwMF9ncGlvOwo+ICsJc3RydWN0 IGdwaW9fZGVzYyAqcHAxODAwMF9ncGlvOwo+ICsKPiArCXUzMiByc3Rfc2VxWzEwXTsKPiArCXUz MiByc3Rfc2VxX2xlbjsKPiArCj4gKwlzdHJ1Y3QgZHNpX3BhbmVsX2NtZHMgKm9uX2NtZHM7Cj4g KwlzdHJ1Y3QgZHNpX3BhbmVsX2NtZHMgKm9mZl9jbWRzOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUJKnBhbmVsX2Rpc3BsYXlfbW9kZTsKPiArCj4gKwl1bnNpZ25lZCBpbnQgcGFuZWxfd2lk dGhfbW07Cj4gKwl1bnNpZ25lZCBpbnQgcGFuZWxfaGVpZ2h0X21tOwo+ICsJdW5zaWduZWQgaW50 IHBlcl9jb2xvcl9jaGFubmVsOwo+ICsKPiArCWJvb2wgcHJlcGFyZWQ7Cj4gKwlib29sIGVuYWJs ZWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGRzaV9wYXJzZV9yZXNldF9zZXEoc3RydWN0IGRl dmljZV9ub2RlICpucCwgdTMyIHJzdF9zZXFbMTBdLAo+ICsJCXUzMiAqcnN0X2xlbiwgY29uc3Qg Y2hhciAqbmFtZSkKSW5kZW50IGZvbGxvd2luZyBsaW5lIHNvICJ1MzIiIGkgYWxpZ25lZCByaWdo dCBhZnRlciBmaXJzdCBvcGVuaW5nICcoJwpUaGlzIGNvbW1lbnQgaXMgZ2VuZXJhbCwgcGxlYXNl IGZpeCBmb3IgYWxsIGZ1bmN0aW9ucy4KPiArewo+ICsJaW50IG51bSA9IDAsIGk7Cj4gKwlpbnQg cmM7Cj4gKwlzdHJ1Y3QgcHJvcGVydHkgKmRhdGE7Cj4gKwl1MzIgdG1wWzEwXTsKPiArCSpyc3Rf bGVuID0gMDsKPiArCWRhdGEgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBuYW1lLCAmbnVtKTsKPiAr Cj4gKwludW0gLz0gc2l6ZW9mKHUzMik7Cj4gKwlpZiAoIWRhdGEgfHwgIW51bSB8fCBudW0gPiAx MCB8fCBudW0gJSAyKSB7Cj4gKwkJcHJfZXJyKCIlczolZCwgZXJyb3IgcmVhZGluZyAlcywgbGVu Z3RoIGZvdW5kID0gJWRcbiIsCj4gKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIG5hbWUsIG51bSk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMl9hcnJheShucCwgbmFtZSwgdG1wLCBudW0pOwo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZXJy KCIlczolZCwgZXJyb3IgcmVhZGluZyAlcywgcmMgPSAlZFxuIiwKPiArCQkJCQlfX2Z1bmNfXywg X19MSU5FX18sIG5hbWUsIHJjKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKPiArCQlyc3Rfc2VxW2ldID0gdG1wW2ldOwo+ICsJ CSpyc3RfbGVuID0gbnVtOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KVGhlIGFib3ZlIGZ1bmN0 aW9uIGlzIHVzZWQgb25seSB0byBwYXJzZSAiZHNpLXJlc2V0LXNlcXVlbmNlIi4KRmlyc3QgaXQg bG9va3Mgc3ViLW9wdGltYWwgdGhlIHdheSBpdCBpcyBkb25lLgpTZWNvbmQsIHRoZXJlIGlzIG5v IGRvY3VtZW50YXRpb24gb2YgImRzaS1yZXNldC1zZXF1ZW5jZSIuClBsZWFzZSB2ZXJpZnkgd2hh dCBvdGhlciBkcml2ZXJzIGRvIHRoYXQgaGFzIGEgc2ltaWxhciBuZWVkLgoKSXQgbG9va3MgbGlr ZSBvbmUgY2FuIHNwZWNpZnkgYW4gYXJyYXkgb2YgR1BJT3MgYW5kIHRoZXJlIGFyZSBvdGhlciB3 YXlzIHRvIGRvIHRoaXMuCgo+ICsKPiArc3NpemVfdCBtaXBpX2RzaV9kY3Nfd3JpdGVfZGVsYXko c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpLCB1OCBjbWQsCj4gKwkJY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbiwgc2l6ZV90IHRpbWUpCj4gK3sKPiArCXNzaXplX3QgcmV0Owo+ICsKPiAr CWlmIChsZW4gPT0gMCkKPiArCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGUoZHNpLCBjbWQsIE5V TEwsIDApOwo+ICsJZWxzZQo+ICsJCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIGNtZCwg ZGF0YSwgbGVuKTsKPiArCj4gKwltc2xlZXAodGltZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIGludCB3cml0ZV9jbWRzKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRz aV9kZXZpY2UsCj4gKwkJCQkJc3RydWN0IGRzaV9wYW5lbF9jbWRzICppbml0X2NtZHMpCj4gK3sK PiArCXN0cnVjdCBkc2lfY21kX2Rlc2MgKm9uZV9jbWQgPSBpbml0X2NtZHMtPmNtZHM7Cj4gKwlp bnQgaSA9IDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBpbml0X2NtZHMt PmNtZF9jbnQ7IGkrKykgewo+ICsJCWlmIChvbmVfY21kID09IE5VTEwpCj4gKwkJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfZGVsYXkoZHNpX2Rldmlj ZSwKPiArCQkJCW9uZV9jbWQtPmNtZCwgb25lX2NtZC0+cGF5bG9hZCwKPiArCQkJCW9uZV9jbWQt Pmxlbiwgb25lX2NtZC0+d2FpdCk7Cj4gKwkJb25lX2NtZCsrOwo+ICsJfQo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfZGNzX2NtZHMoc3RydWN0IGRldmlj ZV9ub2RlICpucCwKPiArCQkJCXN0cnVjdCBkc2lfcGFuZWxfY21kcyAqcGNtZHMsIGNoYXIgKmNt ZF9rZXkpCgpUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2Ugb24gYW5kIG9mZiBjb21tYW5k cyBmcm8gbXRoZSBEVC4KVGhpcyBpcyBjb21tYW5kcyB0aGF0IGluIG90aGVyIGRyaXZlcnMgYXJl IHBhcnQgb2YgdGhlIGRyaXZlciwgYW5kIG5vdCBzb21ldGhpbmcKdG8gYmUgcmVhZCBpbiB0aGUg RFQuCkFsc28sIHVuLWRvY3VtZW50ZWQgcHJvcGVydGllcyBhcmUgc3VlZC4KClBsZWFzZSBjb25z aWRlciB0byB1c2UgdGhlIHNhbWUgYXBwcm9hY2ggYXMgdXNlZCBpbiBvdGhlciBkcml2ZXJzLCBh bmQgYWNjZXB0IHRoYXQKdGhlIGRyaXZlciB3aWxsIGhhcmRjb2RlIG1vcmUuIEFuZCB0aGVuIGxl c3MgaW4gdGhlIERULgoKPiArewo+ICsJY29uc3QgY2hhciAqZGF0YTsKPiArCWludCBibGVuID0g MCwgbGVuLCBjbnQgPSAwOwo+ICsJY2hhciAqYnVmLCAqYnA7Cj4gKwlzdHJ1Y3QgZHNpX2NtZF9k ZXNjICp0ZW1wX2NtZDsKPiArCj4gKwlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBjbWRfa2V5 LCAmYmxlbik7Cj4gKwlpZiAoIWRhdGEpIHsKPiArCQlwcl9lcnIoIiVzOiBmYWlsZWQsIGtleT0l c1xuIiwgX19mdW5jX18sIGNtZF9rZXkpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsK PiArCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGNoYXIpICogYmxlbiwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWJ1ZikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltZW1jcHkoYnVmLCBkYXRhLCBi bGVuKTsKPiArCj4gKwkvKiBzY2FuIGRjcyBjb21tYW5kcyAqLwo+ICsJYnAgPSBidWY7Cj4gKwls ZW4gPSBibGVuOwo+ICsKPiArCS8qIGdldCBob3cgbXVjaCBjbWQgY250ICAqLwo+ICsJd2hpbGUg KGxlbiA+IDApIHsKPiArCQljbnQrKzsKPiArCQlsZW4gPSBsZW4gLSAqKGJwKTsKPiArCQlicCA9 IGJwICsgKihicCk7Cj4gKwl9Cj4gKwo+ICsJcGNtZHMtPmNtZF9jbnQgPSBjbnQ7Cj4gKwo+ICsJ cGNtZHMtPmNtZHMgPSBrY2FsbG9jKGNudCwgc2l6ZW9mKHN0cnVjdCBkc2lfY21kX2Rlc2MpLCBH RlBfS0VSTkVMKTsKPiArCWlmICghcGNtZHMtPmNtZHMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwl0ZW1wX2NtZCA9IHBjbWRzLT5jbWRzOwo+ICsKPiArCWJwID0gYnVmOwo+ICsJbGVuID0gYmxl bjsKPiArCj4gKwl3aGlsZSAoY250ICE9IDApIHsKPiArCQl0ZW1wX2NtZC0+d2FpdCA9ICooYnAr MSk7Cj4gKwkJdGVtcF9jbWQtPmNtZCA9ICooYnArMik7Cj4gKwkJdGVtcF9jbWQtPmxlbiA9ICoo YnApIC0gMzsKPiArCQl0ZW1wX2NtZC0+cGF5bG9hZCA9IGJwICsgMzsKPiArCj4gKwkJY250LS07 Cj4gKwkJdGVtcF9jbWQrKzsKPiArCQlicCA9IGJwICsgKihicCk7Cj4gKwl9Cj4gKwo+ICsJcGNt ZHMtPmJ1ZiA9IGJ1ZjsKPiArCXBjbWRzLT5ibGVuID0gYmxlbjsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBwYW5lbF9wYXJzZV9kdChzdHJ1Y3QgcGFuZWxfaW5mbyAq cGluZm8pCgpMaWtld2lzZS4KQSBsb3Qgb2YgaW5mbyBpcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQg ZnJvbSBEVCwgdGhhdCBpcyBoYXJkY29kZWQgaW4gb3RoZXIgZHJpdmVycy4KRm9sbG93IHdoYXQg b3RoZXIgZHJpdmVycyBkbyBhbmQgZHJvcCByZWFkaW5nIHRoaXMgZnJvbSBEVC4KCj4gKwo+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBwYW5lbF9pbmZvICp0b19wYW5lbF9pbmZvKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3Qg cGFuZWxfaW5mbywgYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFuZWxfZGlzYWJsZShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IHBhbmVsX2luZm8gKnBpbmZv ID0gdG9fcGFuZWxfaW5mbyhwYW5lbCk7Cj4gKwo+ICsJaWYgKCFwaW5mby0+ZW5hYmxlZCkKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwliYWNrbGlnaHRfZGlzYWJsZShwaW5mby0+YmFja2xpZ2h0KTsK VGhlcmUgaXMgcmVhbGx5ICh0byB0aGUgYmVzdCBvZiBteSBrbm93bGVkZ2UpIG5vIG5lZWQgdG8g aGF2ZSBhIGJvb2xlYW4KdG8gcHJvdGVjdCBmcm9tIGNhbGxpZ24gYmFja2xpZ2h0X2Rpc2FibGUo KSB3aGVuIGFscmVhZHkgZGlzYWJsZWQuCgo+ICsKPiArCXBpbmZvLT5lbmFibGVkID0gZmFsc2U7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFuZWxfdW5wcmVwYXJl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGlu Zm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKCFwaW5m by0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZXJyID0gd3JpdGVfY21kcyhwaW5m by0+bGluaywgcGluZm8tPm9mZl9jbWRzKTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJZGV2X2Vy cihwYW5lbC0+ZGV2LAo+ICsJCQkJImZhaWxlZCB0byBzZW5kIERDUyBPZmYgQ29kZTogJWRcbiIs IGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwg MTAwMCk7Cj4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGluZm8tPnJlc2V0X2dwaW8sIDAp Owo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5wcDMzMDAwX2dwaW8sIDApOwo+ ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5wcDE4MDAwX2dwaW8sIDApOwo+ICsK PiArCXBpbmZvLT5wcmVwYXJlZCA9IGZhbHNlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHBhbmVsX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sK PiArCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbyA9IHRvX3BhbmVsX2luZm8ocGFuZWwpOwo+ICsJ aW50IGVyciwgaTsKPiArCj4gKwlpZiAocGluZm8tPnByZXBhcmVkKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAxODAwMF9ncGlvLCAxKTsK PiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAzMzAwMF9ncGlvLCAxKTsKPiAr Cj4gKwkvKiByZXNldCBzZXF1ZW5jZSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IHBpbmZvLT5yc3Rf c2VxX2xlbjsgKytpKSB7Cj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5yZXNl dF9ncGlvLCBwaW5mby0+cnN0X3NlcVtpXSk7Cj4gKwkJaWYgKHBpbmZvLT5yc3Rfc2VxWysraV0p Cj4gKwkJCXVzbGVlcF9yYW5nZShwaW5mby0+cnN0X3NlcVtpXSAqIDEwMDAsCj4gKwkJCQkJCXBp bmZvLT5yc3Rfc2VxW2ldICogMTAwMCk7Cj4gKwl9Cj4gKwo+ICsJLyogc2VuZCBpbml0IGNvZGUg Ki8KPiArCWVyciA9IHdyaXRlX2NtZHMocGluZm8tPmxpbmssIHBpbmZvLT5vbl9jbWRzKTsKPiAr CWlmIChlcnIgPCAwKSB7Cj4gKwkJZGV2X2VycihwYW5lbC0+ZGV2LAo+ICsJCQkJImZhaWxlZCB0 byBzZW5kIERDUyBJbml0IENvZGU6ICVkXG4iLCBlcnIpOwo+ICsJCWdvdG8gcG93ZXJvZmY7Cj4g Kwl9Cj4gKwo+ICsJcGluZm8tPnByZXBhcmVkID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr Cj4gK3Bvd2Vyb2ZmOgo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBpbmZvLT5yZXNldF9n cGlvLCAwKTsKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAzMzAwMF9ncGlv LCAwKTsKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwaW5mby0+cHAxODAwMF9ncGlvLCAw KTsKVGhlIGFib3ZlIHNlcXVlbmNlIGlzIHVzZWQgaW4gdHdvIHBsYWNlZC4KUHV0IGl0IGluIGEg aGVscGVyIGZ1bmN0aW9uLgoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFu ZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKPiArCWludCByZXQ7Cj4gKwo+ ICsJaWYgKHBpbmZvLT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IGJhY2ts aWdodF9lbmFibGUocGluZm8tPmJhY2tsaWdodCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RF Vl9FUlJPUihwYW5lbC0+ZHJtLT5kZXYsCj4gKwkJCSAgICAgICJGYWlsZWQgdG8gZW5hYmxlIGJh Y2tsaWdodCAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXBpbmZv LT5lbmFibGVkID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBwYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVj dCBwYW5lbF9pbmZvICpwaW5mbyA9IHRvX3BhbmVsX2luZm8ocGFuZWwpOwo+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwo+ICsJaWYgKCFwaW5mby0+cGFuZWxfZGlzcGxheV9t b2RlKSB7Cj4gKwkJcHJfZXJyKCJHZXQgcGFuZWxfZGlzcGxheV9tb2RlIGZhaWwhXG4iKTsKPiAr CQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5l bC0+ZHJtLCBwaW5mby0+cGFuZWxfZGlzcGxheV9tb2RlKTsKPiArCWlmICghbW9kZSkgewo+ICsJ CXByX2VycigiZmFpbGVkIHRvIGFkZCBtb2RlXG4iKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr CX0KPiArCj4gKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKPiArCj4gKwlkcm1fbW9kZV9wcm9i ZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCXBhbmVsLT5jb25uZWN0b3It PmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IHBpbmZvLT5wYW5lbF93aWR0aF9tbTsKPiArCXBhbmVs LT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBwaW5mby0+cGFuZWxfaGVpZ2h0 X21tOwo+ICsJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA9IHBpbmZvLT5wZXJf Y29sb3JfY2hhbm5lbDsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgcGFuZWxfZnVuY3MgPSB7Cj4gKwkuZGlzYWJsZSA9IHBh bmVsX2Rpc2FibGUsCj4gKwkudW5wcmVwYXJlID0gcGFuZWxfdW5wcmVwYXJlLAo+ICsJLnByZXBh cmUgPSBwYW5lbF9wcmVwYXJlLAo+ICsJLmVuYWJsZSA9IHBhbmVsX2VuYWJsZSwKPiArCS5nZXRf bW9kZXMgPSBwYW5lbF9nZXRfbW9kZXMsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBwYW5lbF9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJi b2UsaGltYXg4Mjc5ZCIsIH0sCj4gKwl7IH0KVG8gbWF0Y2ggb3RoZXIgZHJpdmVycyB1c2U6Cgl7 IC8qIFNlbnRpbmVsICovIH0KCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBhbmVs X29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBpbnQgcGFuZWxfYWRkKHN0cnVjdCBwYW5lbF9pbmZv ICpwaW5mbykKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBpbmZvLT5saW5rLT5kZXY7 Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ICsJaW50IGVycjsKPiArCglwaW5mby0+cHAz MzAwMF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LAoJCQkJCQkgICAgICAicHAz MzAwMCIsCgkJCQkJCSAgICAgIEdQSU9EX09VVF9ISUdIKTsKSW5kZW50IGlzIHdyb25nIGhlcmUu ClBsZWFzZSBpbmRlbnQgYXMgc2hvd24gYWJvdmUgd2hlcmUgdGhlIHBhcmFtZXRlcnMgc3RhcnRz IHJpZ2h0IGFmdGVyCnRoZSBvcGVuaW5nICcoJwpTYW1lIGdvZXMgZm9yIHNldmVyYWwgcGxhY2Vz IGluIHRoaXMgZmlsZS4KCj4gKwlpZiAoSVNfRVJSKHBpbmZvLT5wcDMzMDAwX2dwaW8pKSB7Cj4g KwkJZXJyID0gUFRSX0VSUihwaW5mby0+cHAzMzAwMF9ncGlvKTsKPiArCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBnZXQgcHAzMzAwMCBncGlvOiAlZFxuIiwgZXJyKTsKPiArCQlwaW5mby0+cHAz MzAwMF9ncGlvID0gTlVMTDsKPiArCX0KPiArCj4gKwlwaW5mby0+cHAxODAwMF9ncGlvID0gZGV2 bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LAo+ICsJCQkJCQkJInBwMTgwMDAiLAo+ICsJCQkJCQkJ R1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUihwaW5mby0+cHAxODAwMF9ncGlvKSkgewo+ ICsJCWVyciA9IFBUUl9FUlIocGluZm8tPnBwMTgwMDBfZ3Bpbyk7Cj4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZ2V0IHBwMTgwMDAgZ3BpbzogJWRcbiIsIGVycik7Cj4gKwkJcGluZm8tPnBw MTgwMDBfZ3BpbyA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJcGluZm8tPnJlc2V0X2dwaW8gPSBkZXZt X2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJlbmFibGUiLAo+ICsJCQkJCQkJR1BJT0RfT1VUX0hJ R0gpOwo+ICsJaWYgKElTX0VSUihwaW5mby0+cmVzZXRfZ3BpbykpIHsKPiArCQllcnIgPSBQVFJf RVJSKHBpbmZvLT5yZXNldF9ncGlvKTsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQg ZW5hYmxlIGdwaW86ICVkXG4iLCBlcnIpOwo+ICsJCXBpbmZvLT5yZXNldF9ncGlvID0gTlVMTDsK PiArCX0KPiArCj4gKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xp Z2h0IiwgMCk7Cj4gKwlpZiAobnApIHsKPiArCQlwaW5mby0+YmFja2xpZ2h0ID0gb2ZfZmluZF9i YWNrbGlnaHRfYnlfbm9kZShucCk7Cj4gKwkJb2Zfbm9kZV9wdXQobnApOwo+ICsKPiArCQlpZiAo IXBpbmZvLT5iYWNrbGlnaHQpCj4gKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJfQpVc2Ug ZGV2bV9vZl9maW5kX2JhY2tsaWdodCgpLiBTZWUgb3RoZXIgZHJpdmVycyBob3cgdGhpcwpzaW1w bGlmaWVzIHRoZSBkcml2ZXJzLgpBbGwgcHV0X2RldmljZSgmcGluZm8tPmJhY2tsaWdodC0+ZGV2 KSBpbiB0aGlzIGZpbGUgY2FuIGJlIGRyb3BwZWQKYXMgaXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5 LgoKPiArCj4gK3N0YXRpYyB2b2lkIHBhbmVsX2RlbChzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8p Cj4gK3sKPiArCWlmIChwaW5mby0+YmFzZS5kZXYpCj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmcGlu Zm8tPmJhc2UpOwo+ICsKPiArCXB1dF9kZXZpY2UoJnBpbmZvLT5iYWNrbGlnaHQtPmRldik7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgcGFuZWxfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm87Cj4gKwlpbnQgZXJyOwo+ICsK PiArCXBpbmZvID0gZGV2bV9remFsbG9jKCZkc2ktPmRldiwgc2l6ZW9mKCpwaW5mbyksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFwaW5mbykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlwaW5m by0+bGluayA9IGRzaTsKPiArCXBhbmVsX3BhcnNlX2R0KHBpbmZvKTsKPiArCW1pcGlfZHNpX3Nl dF9kcnZkYXRhKGRzaSwgcGluZm8pOwo+ICsKPiArCWVyciA9IHBhbmVsX2FkZChwaW5mbyk7Cj4g KwlpZiAoZXJyIDwgMCkKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXJldHVybiBtaXBpX2RzaV9h dHRhY2goZHNpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYW5lbF9yZW1vdmUoc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSBt aXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBwYW5l bF91bnByZXBhcmUoJnBpbmZvLT5iYXNlKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCURSTV9ERVZf RVJST1IoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIHVucHJlcGFyZSBwYW5lbDogJWRcbiIsCj4gKwkJ CSAgICAgIGVycik7Ck5vIG5lZWQgdG8gd3JpdGhlIHRoaXMsIHRoZSBjYWxsZWQgZnVuY3Rpb24g ZG9lcyBpdCBhbHJlYWR5Lgo+ICsKPiArCWVyciA9IHBhbmVsX2Rpc2FibGUoJnBpbmZvLT5iYXNl KTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCURSTV9ERVZfRVJST1IoJmRzaS0+ZGV2LCAiZmFpbGVk IHRvIGRpc2FibGUgcGFuZWw6ICVkXG4iLCBlcnIpOwo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2Rl dGFjaChkc2kpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJRFJNX0RFVl9FUlJPUigmZHNpLT5kZXYs ICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVkXG4iLAo+ICsJCQkgICAgICBlcnIp Owo+ICsKPiArCWRybV9wYW5lbF9kZXRhY2goJnBpbmZvLT5iYXNlKTsKPiArCXBhbmVsX2RlbChw aW5mbyk7CklubGluZSB0aGlzIGZ1bmN0aW9uLgo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBwYW5lbF9zaHV0ZG93bihzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kp Cj4gK3sKPiArCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbyA9IG1pcGlfZHNpX2dldF9kcnZkYXRh KGRzaSk7Cj4gKwo+ICsJcGFuZWxfdW5wcmVwYXJlKCZwaW5mby0+YmFzZSk7Cj4gKwlwYW5lbF9k aXNhYmxlKCZwaW5mby0+YmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lf ZHJpdmVyIHBhbmVsX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAicGFu ZWwtaW5ub2x1eC1vdGE3MjkwYiIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gcGFuZWxfb2ZfbWF0 Y2gsCj4gKwl9LAo+ICsJLnByb2JlID0gcGFuZWxfcHJvYmUsCj4gKwkucmVtb3ZlID0gcGFuZWxf cmVtb3ZlLAo+ICsJLnNodXRkb3duID0gcGFuZWxfc2h1dGRvd24sCj4gK307Cj4gK21vZHVsZV9t aXBpX2RzaV9kcml2ZXIocGFuZWxfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkplcnJ5 IEhhbiA8aGFueHU1QGh1YXFpbi5jb3JwLXBhcnRuZXIuZ29vZ2xlLmNvbT4iKTsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJCb2UgSGltYXg4Mjc5ZCBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbA==