From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [DPU PATCH v2 1/2] drm/panel: Add Truly NT35597 panel Date: Sat, 14 Apr 2018 00:25:12 -0700 Message-ID: <1523690713-22543-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Archit Taneja , jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, Abhinav Kumar , robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KCkFkZCBzdXBwb3J0 IGZvciBUcnVseSBOVDM1NTk3IHBhbmVsIHVzZWQKaW4gTVNNIHJlZmVyZW5jZSBwbGF0Zm9ybXMu CgpDaGFuZ2VzIGluIHYyOgotIFJlbmFtZWQgcGFuZWwgdG8gdHJ1bHksbnQzNTU5NwotIEFkZGVk IFNQRFggbGljZW5zZQotIFVzZWQgZW5kcG9pbnRzIGluc3RlYWQgb2YgY3VzdG9tIG5vZGUKLSBS ZW5hbWVkIGFuZCBjbGVhbmVkIHVwIHBvd2VyIHN1cHBsaWVzCgpTaWduZWQtb2ZmLWJ5OiBBcmNo aXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBYmhpbmF2 IEt1bWFyIDxhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZz4KLS0tCiAuLi4vZGV2aWNldHJlZS9iaW5k aW5ncy9kaXNwbGF5L3RydWx5LG50MzU1OTcudHh0ICB8ICA0NyArKwogZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUv ZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9n cHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyAgICAgICAgfCA1OTcgKysrKysrKysr KysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDY1MiBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdHJ1 bHksbnQzNTU5Ny50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwv cGFuZWwtdHJ1bHktbnQzNTU5Ny5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdHJ1bHksbnQzNTU5Ny50eHQgYi9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90cnVseSxudDM1NTk3LnR4dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmI2ZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdHJ1bHksbnQzNTU5Ny50eHQKQEAg LTAsMCArMSw0NyBAQAorVHJ1bHkgbW9kZWwgTlQzNTU5NyAxNDQweDI1NjAgRFNJIFBhbmVsCisK K1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNob3VsZCBiZSAidHJ1bHksbnQz NTU5NyIKKy0gdmRkYS1zdXBwbHk6IHBoYW5kbGUgb2YgdGhlIHJlZ3VsYXRvciB0aGF0IHByb3Zp ZGVzIHRoZSBzdXBwbHkgdm9sdGFnZQorICBQb3dlciBJQyBzdXBwbHkKKy0gdmRpc3BwLXN1cHBs eTogcGhhbmRsZSBvZiB0aGUgcmVndWxhdG9yIHRoYXQgcHJvdmlkZXMgdGhlIHN1cHBseSB2b2x0 YWdlCisgIGZvciBwb3NpdGl2ZSBMQ0QgYmlhcworLSB2ZGlzcG4tc3VwcGx5OiBwaGFuZGxlIG9m IHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRlcyB0aGUgc3VwcGx5IHZvbHRhZ2UKKyAgZm9yIG5l Z2F0aXZlIExDRCBiaWFzCistIHJlc2V0LWdwaW9zOiBwaGFuZGxlIG9mIGdwaW8gZm9yIHJlc2V0 IGxpbmUKKyAgVGhpcyBzaG91bGQgYmUgOG1BLCBncGlvIGNhbiBiZSBjb25maWd1cmVkIHVzaW5n IG11eCwgcGluY3RybCwgcGluY3RybC1uYW1lcworLSBtb2RlLWdwaW9zOiBwaGFuZGxlIG9mIHRo ZSBncGlvIGZvciBjaG9vc2luZyB0aGUgbW9kZSBvZiB0aGUgZGlzcGxheQorICBmb3Igc2luZ2xl IERTSSBvciBEdWFsIERTSQorICBUaGlzIHNob3VsZCBiZSBsb3cgZm9yIGR1YWwgRFNJIGFuZCBo aWdoIGZvciBzaW5nbGUgRFNJIG1vZGUKKy0gZGlzcGxheS10aW1pbmdzOiBOb2RlIGZvciB0aGUg UGFuZWwgdGltaW5ncworCitFeGFtcGxlOgorCisJZHNpQGFlOTQwMDAgeworCQlwYW5lbEAwIHsK KwkJCWNvbXBhdGlibGUgPSAidHJ1bHksbnQzNTU5NyI7CisJCQlyZWcgPSA8MD47CisJCQl2ZGRh LXN1cHBseSA9IDwmcG04OTk4X2wxND47CisJCQl2ZGlzcHAtc3VwcGx5ID0gPCZsYWJfcmVndWxh dG9yPjsKKwkJCXZkaXNwbi1zdXBwbHkgPSA8JmliYl9yZWd1bGF0b3I+OworCQkJcGluY3RybC1u YW1lcyA9ICJkZWZhdWx0IiwgInN1c3BlbmQiOworCQkJcGluY3RybC0wID0gPCZzZGVfZHNpX2Fj dGl2ZT47CisJCQlwaW5jdHJsLTEgPSA8JnNkZV9kc2lfc3VzcGVuZD47CisKKwkJCXJlc2V0LWdw aW9zID0gPCZ0bG1tIDYgMD47CisJCQltb2RlLWdwaW9zID0gPCZ0bG1tIDUyIDA+OworCQkJZGlz cGxheS10aW1pbmdzIHsKKwkJCQl0aW1pbmcwOiB0aW1pbmctMCB7CisJCQkJCWNsb2NrLWZyZXF1 ZW5jeSA9IDwyNjgzMTYxMzg+OworCQkJCQloYWN0aXZlID0gPDE0NDA+OworCQkJCQl2YWN0aXZl ID0gPDI1NjA+OworCQkJCQloZnJvbnQtcG9yY2ggPSA8MjAwPjsKKwkJCQkJaGJhY2stcG9yY2gg PSA8NjQ+OworCQkJCQloc3luYy1sZW4gPSA8MzI+OworCQkJCQl2ZnJvbnQtcG9yY2ggPSA8OD47 CisJCQkJCXZiYWNrLXBvcmNoID0gPDc+OworCQkJCQl2c3luYy1sZW4gPSA8MT47CisJCQkJfTsK KwkJCX07CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggOTg4MDQ4ZS4uOWYwYzQ5 MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE2OCw0ICsxNjgsMTEgQEAgY29uZmlnIERSTV9Q QU5FTF9TSVRST05JWF9TVDc3ODlWCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJs ZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgKIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQw eDMyMCBMQ0QgcGFuZWxzCiAKK2NvbmZpZyBEUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQQor CXRyaXN0YXRlICJUcnVseSBXUVhHQSIKKwlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBEUk1f TUlQSV9EU0kKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBw b3J0IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1YWwgRFNJCisJICBWaWRlbyBNb2RlIHBhbmVs CiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggM2QyYTg4ZC4uYjViNGI2MCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNCBAQCBvYmotJChDT05GSUdfRFJNX1BB TkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVsLXNlaWtvLTQzd3ZmMWcubwogb2JqLSQoQ09ORklH X0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEu bwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hh cnAtbHMwNDN0MWxlMDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlW KSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfVFJV TFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQzNTU5Ny5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41YmQ1ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwpAQCAtMCwwICsxLDU5NyBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxp bnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5o PgorI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVv bW9kZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVs Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorCitzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IHJlZ3VsYXRvcl9uYW1lc1tdID0geworCSJ2ZGRhIiwKKwkidmRpc3BwIiwKKwkidmRp c3BuIgorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1td ID0geworCTYyMDAwLAorCTEwMDAwMCwKKwkxMDAwMDB9OworCitzdGF0aWMgdW5zaWduZWQgbG9u ZyByZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tdID0geworCTgwLAorCTEwMCwKKwkxMDB9OworCitz dHJ1Y3QgdHJ1bHlfd3F4Z2EgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3Bh bmVsIHBhbmVsOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlf U0laRShyZWd1bGF0b3JfbmFtZXMpXTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87 CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZp Y2UgKmJhY2tsaWdodDsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCisJc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpWzJdOworCisJYm9vbCBwcmVwYXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9Owor CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwg c3RydWN0IHRydWx5X3dxeGdhLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2Ff cG93ZXJfb24oc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJaW50IHJldCwgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKKwkJcmV0ID0g cmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJcmVndWxh dG9yX2VuYWJsZV9sb2Fkc1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBj dHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcCgy MCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7CisJdXNsZWVwX3Jhbmdl KDIwMDAwLCAyMDEwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJ dXNsZWVwX3JhbmdlKDIwMDAwLCAyMDEwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRf Z3BpbywgMSk7CisJdXNsZWVwX3JhbmdlKDUwMDAwLCA1MDEwMCk7CisKKwkvKiBkdWFsIHBvcnQg Ki8KKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV93cXhnYSAq Y3R4KQoreworCWludCByZXQsIGk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlv LCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKysp IHsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIs CisJCQkJcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0 eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKK30KKworc3RhdGljIGludCB0cnVseV93cXhn YV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhn YSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCisJaWYgKCFjdHgtPmVuYWJs ZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7CisJCWN0eC0+YmFja2xp Z2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwkJYmFja2xpZ2h0X3VwZGF0 ZV9zdGF0dXMoY3R4LT5iYWNrbGlnaHQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IGZhbHNlOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3VucHJlcGFyZShzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3Rv X3RydWx5X3dxeGdhKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0 eC0+ZHNpOworCWludCByZXQgPSAwLCBpOworCisJaWYgKCFjdHgtPnByZXBhcmVkKQorCQlyZXR1 cm4gMDsKKworCWRzaXNbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWRzaXNbMV0tPm1vZGVfZmxhZ3Mg PSAwOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWYgKG1pcGlfZHNpX2Rjc19zZXRf ZGlzcGxheV9vZmYoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCW1zbGVlcCg3OCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAobWlwaV9kc2lfZGNzX2VudGVyX3Ns ZWVwX21vZGUoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCW1zbGVlcCg3OCk7CisK Kwl0cnVseV93cXhnYV9wb3dlcl9vZmYoY3R4KTsKKworCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsK KwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BWF9MRU4JNQorc3RydWN0IHsKKwl1OCBjb21t YW5kc1tNQVhfTEVOXTsKKwlpbnQgc2l6ZTsKK30gcGFuZWxfY21kc1tdID0geyAvKiBDTUQyX1Aw ICovCisJCSAgIHsgeyAweGZmLCAweDIwIH0sIDIgfSwKKwkJICAgeyB7IDB4ZmIsIDB4MDEgfSwg MiB9LAorCQkgICB7IHsgMHgwMCwgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDAxLCAweDU1IH0s IDIgfSwKKwkJICAgeyB7IDB4MDIsIDB4NDUgfSwgMiB9LAorCQkgICB7IHsgMHgwNSwgMHg0MCB9 LCAyIH0sCisJCSAgIHsgeyAweDA2LCAweDE5IH0sIDIgfSwKKwkJICAgeyB7IDB4MDcsIDB4MWUg fSwgMiB9LAorCQkgICB7IHsgMHgwYiwgMHg3MyB9LCAyIH0sCisJCSAgIHsgeyAweDBjLCAweDcz IH0sIDIgfSwKKwkJICAgeyB7IDB4MGUsIDB4YjAgfSwgMiB9LAorCQkgICB7IHsgMHgwZiwgMHhh ZSB9LCAyIH0sCisJCSAgIHsgeyAweDExLCAweGI4IH0sIDIgfSwKKwkJICAgeyB7IDB4MTMsIDB4 MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1OCwgMHg4MCB9LCAyIH0sCisJCSAgIHsgeyAweDU5LCAw eDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4NWEsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1Yiwg MHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDVjLCAweDgwIH0sIDIgfSwKKwkJICAgeyB7IDB4NWQs IDB4ODEgfSwgMiB9LAorCQkgICB7IHsgMHg1ZSwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDVm LCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4NzIsIDB4MTEgfSwgMiB9LAorCQkgICB7IHsgMHg2 OCwgMHgwMyB9LCAyIH0sCisJCSAgIC8qIENNRDJfUDQgKi8KKwkJICAgeyB7IDB4RkYsIDB4MjQg fSwgMiB9LAorCQkgICB7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDAwLCAweDFD IH0sIDIgfSwKKwkJICAgeyB7IDB4MDEsIDB4MEIgfSwgMiB9LAorCQkgICB7IHsgMHgwMiwgMHgw QyB9LCAyIH0sCisJCSAgIHsgeyAweDAzLCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4MDQsIDB4 MEYgfSwgMiB9LAorCQkgICB7IHsgMHgwNSwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDA2LCAw eDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4MDcsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgwOCwg MHg4OSB9LCAyIH0sCisJCSAgIHsgeyAweDA5LCAweDhBIH0sIDIgfSwKKwkJICAgeyB7IDB4MEEs IDB4MTMgfSwgMiB9LAorCQkgICB7IHsgMHgwQiwgMHgxMyB9LCAyIH0sCisJCSAgIHsgeyAweDBD LCAweDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MEQsIDB4MTUgfSwgMiB9LAorCQkgICB7IHsgMHgw RSwgMHgxNyB9LCAyIH0sCisJCSAgIHsgeyAweDBGLCAweDE3IH0sIDIgfSwKKwkJICAgeyB7IDB4 MTAsIDB4MUMgfSwgMiB9LAorCQkgICB7IHsgMHgxMSwgMHgwQiB9LCAyIH0sCisJCSAgIHsgeyAw eDEyLCAweDBDIH0sIDIgfSwKKwkJICAgeyB7IDB4MTMsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsg MHgxNCwgMHgwRiB9LCAyIH0sCisJCSAgIHsgeyAweDE1LCAweDEwIH0sIDIgfSwKKwkJICAgeyB7 IDB4MTYsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgxNywgMHgxMCB9LCAyIH0sCisJCSAgIHsg eyAweDE4LCAweDg5IH0sIDIgfSwKKwkJICAgeyB7IDB4MTksIDB4OEEgfSwgMiB9LAorCQkgICB7 IHsgMHgxQSwgMHgxMyB9LCAyIH0sCisJCSAgIHsgeyAweDFCLCAweDEzIH0sIDIgfSwKKwkJICAg eyB7IDB4MUMsIDB4MTUgfSwgMiB9LAorCQkgICB7IHsgMHgxRCwgMHgxNSB9LCAyIH0sCisJCSAg IHsgeyAweDFFLCAweDE3IH0sIDIgfSwKKwkJICAgeyB7IDB4MUYsIDB4MTcgfSwgMiB9LAorCQkg ICAvKiBTVFYgKi8KKwkJICAgeyB7IDB4MjAsIDB4NDAgfSwgMiB9LAorCQkgICB7IHsgMHgyMSwg MHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDIyLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4MjMs IDB4NDAgfSwgMiB9LAorCQkgICB7IHsgMHgyNCwgMHg0MCB9LCAyIH0sCisJCSAgIHsgeyAweDI1 LCAweDZEIH0sIDIgfSwKKwkJICAgeyB7IDB4MjYsIDB4NDAgfSwgMiB9LAorCQkgICB7IHsgMHgy NywgMHg0MCB9LCAyIH0sCisJCSAgIC8qIFZlbmQgKi8KKwkJICAgeyB7IDB4RTAsIDB4MDAgfSwg MiB9LAorCQkgICB7IHsgMHhEQywgMHgyMSB9LCAyIH0sCisJCSAgIHsgeyAweERELCAweDIyIH0s IDIgfSwKKwkJICAgeyB7IDB4REUsIDB4MDcgfSwgMiB9LAorCQkgICB7IHsgMHhERiwgMHgwNyB9 LCAyIH0sCisJCSAgIHsgeyAweEUzLCAweDZEIH0sIDIgfSwKKwkJICAgeyB7IDB4RTEsIDB4MDcg fSwgMiB9LAorCQkgICB7IHsgMHhFMiwgMHgwNyB9LCAyIH0sCisJCSAgIC8qIFVEICovCisJCSAg IHsgeyAweDI5LCAweEQ4IH0sIDIgfSwKKwkJICAgeyB7IDB4MkEsIDB4MkEgfSwgMiB9LAorCQkg ICAvKiBDTEsgKi8KKwkJICAgeyB7IDB4NEIsIDB4MDMgfSwgMiB9LAorCQkgICB7IHsgMHg0Qywg MHgxMSB9LCAyIH0sCisJCSAgIHsgeyAweDRELCAweDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4NEUs IDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHg0RiwgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDUw LCAweDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4NTEsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1 MiwgMHg4MCB9LCAyIH0sCisJCSAgIHsgeyAweDUzLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4 NTYsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1NCwgMHgwNyB9LCAyIH0sCisJCSAgIHsgeyAw eDU4LCAweDA3IH0sIDIgfSwKKwkJICAgeyB7IDB4NTUsIDB4MjUgfSwgMiB9LAorCQkgICAvKiBS ZXNldCBYRE9OQiAqLworCQkgICB7IHsgMHg1QiwgMHg0MyB9LCAyIH0sCisJCSAgIHsgeyAweDVD LCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NUYsIDB4NzMgfSwgMiB9LAorCQkgICB7IHsgMHg2 MCwgMHg3MyB9LCAyIH0sCisJCSAgIHsgeyAweDYzLCAweDIyIH0sIDIgfSwKKwkJICAgeyB7IDB4 NjQsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg2NywgMHgwOCB9LCAyIH0sCisJCSAgIHsgeyAw eDY4LCAweDA0IH0sIDIgfSwKKwkJICAgLyogUmVzb2x1dGlvbjoxNDQweDI1NjAgKi8KKwkJICAg eyB7IDB4NzIsIDB4MDIgfSwgMiB9LAorCQkgICAvKiBtdXggKi8KKwkJICAgeyB7IDB4N0EsIDB4 ODAgfSwgMiB9LAorCQkgICB7IHsgMHg3QiwgMHg5MSB9LCAyIH0sCisJCSAgIHsgeyAweDdDLCAw eEQ4IH0sIDIgfSwKKwkJICAgeyB7IDB4N0QsIDB4NjAgfSwgMiB9LAorCQkgICB7IHsgMHg3Riwg MHgxNSB9LCAyIH0sCisJCSAgIHsgeyAweDc1LCAweDE1IH0sIDIgfSwKKwkJICAgLyogQUJPRkYg Ki8KKwkJICAgeyB7IDB4QjMsIDB4QzAgfSwgMiB9LAorCQkgICB7IHsgMHhCNCwgMHgwMCB9LCAy IH0sCisJCSAgIHsgeyAweEI1LCAweDAwIH0sIDIgfSwKKwkJICAgLyogU291cmNlIEVRICovCisJ CSAgIHsgeyAweDc4LCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NzksIDB4MDAgfSwgMiB9LAor CQkgICB7IHsgMHg4MCwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDgzLCAweDAwIH0sIDIgfSwK KwkJICAgLyogRlAgQlAgKi8KKwkJICAgeyB7IDB4OTMsIDB4MEEgfSwgMiB9LAorCQkgICB7IHsg MHg5NCwgMHgwQSB9LCAyIH0sCisJCSAgIC8qIEludmVyc2lvbiBUeXBlICovCisJCSAgIHsgeyAw eDhBLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4OUIsIDB4RkYgfSwgMiB9LAorCQkgICAvKiBJ TUdTV0FQID0xIEBQb3J0U3dhcD0xICovCisJCSAgIHsgeyAweDlELCAweEIwIH0sIDIgfSwKKwkJ ICAgeyB7IDB4OUYsIDB4NjMgfSwgMiB9LAorCQkgICB7IHsgMHg5OCwgMHgxMCB9LCAyIH0sCisJ CSAgIC8qIEZSTSAqLworCQkgICB7IHsgMHhFQywgMHgwMCB9LCAyIH0sCisJCSAgIC8qIENNRDEg Ki8KKwkJICAgeyB7IDB4RkYsIDB4MTAgfSwgMiB9LAorCQkgICAgLyogVkJQK1ZTQT0sVkZQID0g MTBIICovCisJCSAgIHsgeyAweDNCLCAweDAzLCAweDBBLCAweDBBLCB9LCA0IH0sCisJCSAgIC8q IEZURSBvbiAqLworCQkgICB7IHsgMHgzNSwgMHgwMCB9LCAyIH0sCisJCSAgIC8qIEVOX0JLID0x KGF1dG8gYmxhY2spICovCisJCSAgIHsgeyAweEU1LCAweDAxIH0sIDIgfSwKKwkJICAgLyogQ01E IG1vZGUoMTApIFZETyBtb2RlKDAzKSAqLworCQkgICB7IHsgMHhCQiwgMHgwMyB9LCAyIH0sCisJ CSAgIC8qIE5vbiBSZWxvYWQgTVRQICovCisJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKK307 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBh bmVsKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0eC0+ZHNpOworCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmQ7CisJaW50IHJldCwgaSwgajsKKworCWlmIChjdHgtPnByZXBh cmVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRydWx5X3dxeGdhX3Bvd2VyX29uKGN0eCk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkc2lzWzBdLT5tb2RlX2ZsYWdzIHw9IE1J UElfRFNJX01PREVfTFBNOworCWRzaXNbMV0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9M UE07CisKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwYW5lbF9jbWRzKTsgaisrKSB7CisJ CWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWQgPSBkc2lzW2ldOworCQkJcmV0ID0gbWlw aV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2lzW2ldLAorCQkJCQlwYW5lbF9jbWRzW2pdLmNvbW1h bmRzLAorCQkJCQlwYW5lbF9jbWRzW2pdLnNpemUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlk ZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNtZCBubyAlZCwgZXJyOiAlZFxuIiwKKwkJCQkJ CWosIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCisJZm9yIChpID0g MDsgaSA8IDI7IGkrKykKKwkJaWYgKG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoZHNpc1tp XSkgPCAwKSB7CisJCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9k ZVxuIik7CisJCQlyZXR1cm4gLUVDT01NOworCQl9CisJbXNsZWVwKDc4KTsKKworCWZvciAoaSA9 IDA7IGkgPCAyOyBpKyspCisJCWlmIChtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpc1tp XSkgPCAwKSB7CisJCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNlbmQgZGlzcGxheSBv blxuIik7CisJCQlyZXR1cm4gLUVDT01NOworCQl9CisJbXNsZWVwKDc4KTsKKworCWN0eC0+cHJl cGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2Ff ZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAq Y3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCisJaWYgKGN0eC0+ZW5hYmxlZCkK KwkJcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKKwkJY3R4LT5iYWNrbGlnaHQt PnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0 dXMoY3R4LT5iYWNrbGlnaHQpOworCX0KKwljdHgtPmVuYWJsZWQgPSB0cnVlOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+ Y29ubmVjdG9yOworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4 Z2EocGFuZWwpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRy bV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7CisJaWYgKCFtb2RlKSB7CisJCWRldl9lcnIo Y3R4LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRpc3BsYXkgbW9kZVxuIik7CisJCXJl dHVybiAwOworCX0KKworCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJmN0eC0+dm0s IG1vZGUpOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gNzQ7CisJY29ubmVj dG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gMTMxOworCW1vZGUtPnR5cGUgPSBEUk1fTU9E RV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2RlX3Byb2Jl ZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wYW5lbF9mdW5jcyB0cnVseV93cXhnYV9kcm1fZnVuY3MgPSB7CisJLmRpc2Fi bGUgPSB0cnVseV93cXhnYV9kaXNhYmxlLAorCS51bnByZXBhcmUgPSB0cnVseV93cXhnYV91bnBy ZXBhcmUsCisJLnByZXBhcmUgPSB0cnVseV93cXhnYV9wcmVwYXJlLAorCS5lbmFibGUgPSB0cnVs eV93cXhnYV9lbmFibGUsCisJLmdldF9tb2RlcyA9IHRydWx5X3dxeGdhX2dldF9tb2RlcywKK307 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcGFuZWxfYWRkKHN0cnVjdCB0cnVseV93cXhnYSAq Y3R4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWludCByZXQsIGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKQorCQljdHgt PnN1cHBsaWVzW2ldLnN1cHBseSA9IHJlZ3VsYXRvcl9uYW1lc1tpXTsKKworCXJldCA9IGRldm1f cmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKKwkJCQkg ICAgICBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWN0 eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJ R0gpOworCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlkZXZfZXJyKGRldiwgImNh bm5vdCBnZXQgcmVzZXQtZ3Bpb3MgJWxkXG4iLAorCQkJUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8p KTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsKKwl9CisKKwljdHgtPm1vZGVf Z3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1vZGUiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAo SVNfRVJSKGN0eC0+bW9kZV9ncGlvKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgbW9k ZSBncGlvICVsZFxuIiwKKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKKwkJY3R4LT5tb2Rl X2dwaW8gPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPm1vZGVfZ3Bpbyk7CisJfQorCisJ cmV0ID0gcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihkZXYsICIlczogZmFpbGVkIHRvIHNldCBwaW5jdHJsIGRlZmF1bHQgc3RhdGUs ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g b2ZfZ2V0X3ZpZGVvbW9kZShkZXYtPm9mX25vZGUsICZjdHgtPnZtLCAwKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgt PnBhbmVsLmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJnRydWx5X3dxeGdhX2RybV9m dW5jczsKKwlkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCB0cnVseV93cXhnYV9wYW5lbF9kZWwoc3RydWN0IHRydWx5X3dxeGdhICpjdHgp Cit7CisJaWYgKGN0eC0+cGFuZWwuZGV2KQorCQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVs KTsKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2OworCXN0cnVjdCB0 cnVseV93cXhnYSAqY3R4OworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKnNlY29uZGFyeSA9IE5V TEw7CisJc3RydWN0IGRldmljZV9ub2RlICpkc2kxOworCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpk c2kxX2hvc3Q7CisJaW50IHJldCA9IDA7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9p bmZvIGluZm8gPSB7LnR5cGUgPSAidHJ1bHludDM1NTk3IiwKKwkJLmNoYW5uZWwgPSAwLAorCQku bm9kZSA9IE5VTEwsCisJfTsKKworCS8qIFRoaXMgZGV2aWNlIHJlcHJlc2VudHMgaXRzZWxmIGFz IG9uZSB3aXRoCisJICogdHdvIGlucHV0IHBvcnRzIHdoaWNoIGFyZSBmZWQgYnkgdGhlIG91dHB1 dAorCSAqIHBvcnRzIG9mIHRoZSB0d28gRFNJIGNvbnRyb2xsZXJzIC4gVGhlIERTSTAKKwkgKiBp cyB0aGUgbWFzdGVyIGNvbnRyb2xsZXIgYW5kIGhhcyBtb3N0IG9mIHRoZQorCSAqIHBhbmVsIHJl bGF0ZWQgaW5mbyBpbiBpdHMgY2hpbGQgbm9kZS4KKwkgKi8KKworCS8qIGNvbmZpZ3VyZSBtYXN0 ZXIgRFNJIGRldmljZSAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9E U0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwg TUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAorCU1JUElfRFNJX01PREVfTFBNOworCisJ LyogZ2V0IHRoZSBkc2kxIG91dHB1dCBwb3J0IG5vZGUgKi8KKwlkc2kxID0gb2ZfZ3JhcGhfZ2V0 X3JlbW90ZV9ub2RlKGRzaS0+ZGV2Lm9mX25vZGUsIDEsIC0xKTsKKwlpZiAoIWRzaTEpIHsKKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlbW90ZSBub2RlXG4iKTsKKwkJcmV0dXJuIC1F Tk9ERVY7CisJfQorCisJZHNpMV9ob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUo ZHNpMSk7CisJaWYgKCFkc2kxX2hvc3QpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmlu ZCBkc2kgaG9zdFxuIik7CisJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8gZXJyX2hvc3Q7 CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIHNlY29uZCBEU0kgZGV2aWNlICovCisJc2Vjb25kYXJ5 ID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoZHNpMV9ob3N0LAorCQkmaW5mbyk7CisK KwlpZiAoSVNfRVJSKHNlY29uZGFyeSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3Jl YXRlIGRzaSBkZXZpY2VcbiIpOworCQlyZXQgPSBQVFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2Rz aV9kZXZpY2U7CisJfQorCisJLyogY29uZmlndXJlIHNlY29uZGFyeSBEU0kgZGV2aWNlICovCisJ c2Vjb25kYXJ5LT5sYW5lcyA9IDQ7CisJc2Vjb25kYXJ5LT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf UkdCODg4OworCXNlY29uZGFyeS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfAor CQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUyB8CisJCU1JUElfRFNJX01PREVfTFBNOwor CisJY3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwor CWlmICghY3R4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2RzaV9jdHg7CisJfQor CisJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOworCisJY3R4LT5kZXYgPSBkZXY7CisJ Y3R4LT5kc2lbMF0gPSBkc2k7CisJY3R4LT5kc2lbMV0gPSBzZWNvbmRhcnk7CisKKwlyZXQgPSB0 cnVseV93cXhnYV9wYW5lbF9hZGQoY3R4KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGFkZCBwYW5lbFxuIik7CisJCWdvdG8gZXJyX3BhbmVsX2FkZDsKKwl9CisKKwly ZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl diwgIm1hc3RlciBkc2kgYXR0YWNoIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2RzaV9hdHRhY2g7 CisJfQorCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKHNlY29uZGFyeSk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkZXYsICJtaXBpX2RzaV9hdHRhY2ggb24gc2Vjb25kYXJ5IGZhaWxlZFxu Iik7CisJCWdvdG8gZXJyX2RzaV9hdHRhY2hfc2VjOworCX0KKworCW9mX25vZGVfcHV0KGRzaTEp OworCisJcmV0dXJuIDA7CisKK2Vycl9kc2lfYXR0YWNoX3NlYzoKKwltaXBpX2RzaV9kZXRhY2go Y3R4LT5kc2lbMF0pOworZXJyX2RzaV9hdHRhY2g6CisJdHJ1bHlfd3F4Z2FfcGFuZWxfZGVsKGN0 eCk7CitlcnJfcGFuZWxfYWRkOgorCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHNlY29uZGFy eSk7CitlcnJfZHNpX2N0eDoKK2Vycl9kc2lfZGV2aWNlOgorZXJyX2hvc3Q6CisJb2Zfbm9kZV9w dXQoZHNpMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9yZW1v dmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAq Y3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCWlmIChjdHgpIHsKKwkJaWYgKGN0 eC0+ZHNpWzBdKQorCQkJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzBdKTsKKwkJaWYgKGN0eC0+ ZHNpWzFdKSB7CisJCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOworCQkJbWlwaV9kc2lf ZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5kc2lbMV0pOworCQl9CisJCXRydWx5X3dxeGdhX3BhbmVs X2RlbChjdHgpOworCQlrZnJlZShjdHgpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0cnVseV93cXhnYV9vZl9tYXRjaFtdID0geworCXsg LmNvbXBhdGlibGUgPSAidHJ1bHksbnQzNTU5NyIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgdHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG1pcGlf ZHNpX2RyaXZlciB0cnVseV93cXhnYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUg PSAicGFuZWxfdHJ1bHlfbnQzNTU5NyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHRydWx5X3dxeGdh X29mX21hdGNoLAorCX0sCisJLnByb2JlID0gdHJ1bHlfd3F4Z2FfcHJvYmUsCisJLnJlbW92ZSA9 IHRydWx5X3dxeGdhX3JlbW92ZSwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKHRydWx5X3dx eGdhX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigidHJ1bHkgbnQzNTU5NyBEU0kgUGFu ZWwgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApUaGUgUXVhbGNvbW0g SW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZv cnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBs aXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K