From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [DPU PATCH 1/2] drm/panel: Add Truly Dual DSI video mode panel Date: Sat, 7 Apr 2018 00:06:52 -0700 Message-ID: <1523084813-858-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 , manojavm-sgV2jX0FEOL9JmXXK+q4OQ@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 IGZvciB0cnVseSBkdWFsIERTSSB2aWRlbyBtb2RlIHBhbmVsCnBhbmVsIHVzZWQgaW4gTVNNIHJl ZmVyZW5jZSBwbGF0Zm9ybXMuCgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0 QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2a0Bj b2RlYXVyb3JhLm9yZz4KLS0tCiAuLi4vYmluZGluZ3MvZGlzcGxheS90cnVseSxkdWFsX3dxeGdh LnR4dCAgICAgICAgICB8ICA0NyArKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAg ICAgICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LXRydWx5LWR1YWwtZHNpLmMgICAgICAgfCA1MzAgKysrKysrKysrKysrKysrKysrKysrCiA0IGZp bGVzIGNoYW5nZWQsIDU4NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdHJ1bHksZHVhbF93cXhnYS50eHQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktZHVh bC1kc2kuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k aXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2Rpc3BsYXkvdHJ1bHksZHVhbF93cXhnYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYTFiMjRjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0CkBAIC0wLDAg KzEsNDcgQEAKK1RydWx5IG1vZGVsIE5UMzU1OTcgMTQ0MHgyNTYwIERTSSBQYW5lbAorCitSZXF1 aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInRydWx5LGR1YWxfd3F4 Z2EiCistIHZkZGEtc3VwcGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRl cyB0aGUgc3VwcGx5IHZvbHRhZ2UKKyAgUG93ZXIgSUMgc3VwcGx5CistIGxhYi1zdXBwbHk6IHBo YW5kbGUgb2YgdGhlIHJlZ3VsYXRvciB0aGF0IHByb3ZpZGVzIHRoZSBzdXBwbHkgdm9sdGFnZQor ICBmb3IgTENEIGJpYXMKKy0gaWJiLXN1cHBseTogcGhhbmRsZSBvZiB0aGUgcmVndWxhdG9yIHRo YXQgcHJvdmlkZXMgdGhlIHN1cHBseSB2b2x0YWdlCisgIGZvciBMQ0QgYmlhcworLSByZXNldC1n cGlvczogcGhhbmRsZSBvZiBncGlvIGZvciByZXNldCBsaW5lCisgIFRoaXMgc2hvdWxkIGJlIDht QSwgZ3BpbyBjYW4gYmUgY29uZmlndXJlZCB1c2luZyBtdXgsIHBpbmN0cmwsIHBpbmN0cmwtbmFt ZXMKKy0gbW9kZS1ncGlvczogcGhhbmRsZSBvZiB0aGUgZ3BpbyBmb3IgY2hvb3NpbmcgdGhlIG1v ZGUgb2YgdGhlIGRpc3BsYXkKKyAgZm9yIHNpbmdsZSBEU0kgb3IgRHVhbCBEU0kKKy0gZGlzcGxh eS10aW1pbmdzOiBOb2RlIGZvciB0aGUgUGFuZWwgdGltaW5ncworLSBsaW5rMjogcGhhbmRsZSB0 byB0aGUgc2Vjb25kYXJ5IG5vZGUgb2YgdGhlIHBhbmVsCisKK0V4YW1wbGU6CisKKwlkc2lAYWU5 NDAwMCB7CisJCXBhbmVsQDAgeworCQkJY29tcGF0aWJsZSA9ICJ0cnVseSxkdWFsX3dxeGdhIjsK KwkJCXJlZyA9IDwwPjsKKwkJCWxpbmsyID0gPCZsaW5rMj47CisJCQl2ZGRhLXN1cHBseSA9IDwm cG04OTk4X2wxND47CisKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdXNwZW5kIjsK KwkJCXBpbmN0cmwtMCA9IDwmc2RlX2RzaV9hY3RpdmU+OworCQkJcGluY3RybC0xID0gPCZzZGVf ZHNpX3N1c3BlbmQ+OworCisJCQlyZXNldC1ncGlvcyA9IDwmdGxtbSA2IDA+OworCQkJbW9kZS1n cGlvcyA9IDwmdGxtbSA1MiAwPjsKKwkJCWRpc3BsYXktdGltaW5ncyB7CisJCQkJdGltaW5nMDog dGltaW5nLTAgeworCQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjY4MzE2MTM4PjsKKwkJCQkJaGFj dGl2ZSA9IDwxNDQwPjsKKwkJCQkJdmFjdGl2ZSA9IDwyNTYwPjsKKwkJCQkJaGZyb250LXBvcmNo ID0gPDIwMD47CisJCQkJCWhiYWNrLXBvcmNoID0gPDY0PjsKKwkJCQkJaHN5bmMtbGVuID0gPDMy PjsKKwkJCQkJdmZyb250LXBvcmNoID0gPDg+OworCQkJCQl2YmFjay1wb3JjaCA9IDw3PjsKKwkJ CQkJdnN5bmMtbGVuID0gPDE+OworCQkJCX07CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnCmluZGV4IDk4ODA0OGUuLmE2M2MzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0x NjgsNCArMTY4LDExIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAgU2F5 IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4CiAJ ICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscwogCitjb25maWcgRFJN X1BBTkVMX1RSVUxZX1dRWEdBCisJdHJpc3RhdGUgIlRydWx5IFdRWEdBIgorCWRlcGVuZHMgb24g T0YKKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91 IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRydWx5IFdRWEdBIER1YWwgRFNJCisJICBWaWRl byBNb2RlIHBhbmVsCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggM2QyYTg4ZC4u NjQ4OTFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNCBAQCBvYmotJChD T05GSUdfRFJNX1BBTkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVsLXNlaWtvLTQzd3ZmMWcubwog b2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAt bHExMDFyMXN4MDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkg Kz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSVRS T05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KK29iai0kKENPTkZJR19E Uk1fUEFORUxfVFJVTFlfV1FYR0EpICs9IHBhbmVsLXRydWx5LWR1YWwtZHNpLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1kdWFsLWRzaS5jIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LWR1YWwtZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDc4OTFlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9wYW5lbC10cnVseS1kdWFsLWRzaS5jCkBAIC0wLDAgKzEsNTMwIEBACisvKiBD b3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGlu dXgvcGluY3RybC9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+ CisjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9t b2RlLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisKK3N0cnVjdCB0cnVseV93cXhnYSB7 CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7CisKKwlzdHJ1 Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1s0XTsKKworCXN0cnVjdCBncGlvX2Rlc2Mg KnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCisJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpWzJdOworCisJYm9vbCBwcmVwYXJlZDsKKwlib29sIGVu YWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9f dHJ1bHlfd3F4Z2Eoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihwYW5lbCwgc3RydWN0IHRydWx5X3dxeGdhLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQg dHJ1bHlfd3F4Z2FfcG93ZXJfb24oc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJaW50IHJl dDsKKworCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzWzFdLmNvbnN1bWVy LCA2MjAwMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9z ZXRfbG9hZChjdHgtPnN1cHBsaWVzWzJdLmNvbnN1bWVyLCAxMDAwMDApOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1sz XS5jb25zdW1lciwgMTAwMDAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g cmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3Vw cGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwKDIwKTsKKwln cGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMDAs IDIwMTAwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKKwl1c2xlZXBf cmFuZ2UoMjAwMDAsIDIwMTAwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAx KTsKKwl1c2xlZXBfcmFuZ2UoNTAwMDAsIDUwMTAwKTsKKworCS8qIGR1YWwgcG9ydCAqLworCWdw aW9kX3NldF92YWx1ZShjdHgtPm1vZGVfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB0cnVseV93cXhnYV9wb3dlcl9vZmYoc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7 CisJaW50IHJldDsKKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOworCXJl dCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzWzFdLmNvbnN1bWVyLCA2MjAwMCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZWd1bGF0b3JfYnVsa19kaXNh YmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOworfQorCitzdGF0 aWMgaW50IHRydWx5X3dxeGdhX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJ c3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7CisK KwlpZiAoIWN0eC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5iYWNrbGlnaHQp IHsKKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOwor CQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjdHgtPmJhY2tsaWdodCk7CisJfQorCisJY3R4LT5l bmFibGVkID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2Ff dW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhn YSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCXN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKipkc2lzID0gY3R4LT5kc2k7CisJaW50IHJldCA9IDAsIGk7CisKKwlpZiAoIWN0eC0+ cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJZHNpc1swXS0+bW9kZV9mbGFncyA9IDA7CisJZHNp c1sxXS0+bW9kZV9mbGFncyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAo bWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2lzW2ldKSA8IDApCisJCQlyZXQgPSAtRUNP TU07CisJbXNsZWVwKDc4KTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCWlmIChtaXBp X2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApCisJCQlyZXQgPSAtRUNPTU07 CisJbXNsZWVwKDc4KTsKKworCXRydWx5X3dxeGdhX3Bvd2VyX29mZihjdHgpOworCisJY3R4LT5w cmVwYXJlZCA9IGZhbHNlOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFYX0xFTgk1Citz dHJ1Y3QgeworCXU4IGNvbW1hbmRzW01BWF9MRU5dOworCWludCBzaXplOworfSBwYW5lbF9jbWRz W10gPSB7IC8qIENNRDJfUDAgKi8KKwkJICAgeyB7IDB4ZmYsIDB4MjAgfSwgMiB9LAorCQkgICB7 IHsgMHhmYiwgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDAwLCAweDAxIH0sIDIgfSwKKwkJICAg eyB7IDB4MDEsIDB4NTUgfSwgMiB9LAorCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCisJCSAg IHsgeyAweDA1LCAweDQwIH0sIDIgfSwKKwkJICAgeyB7IDB4MDYsIDB4MTkgfSwgMiB9LAorCQkg ICB7IHsgMHgwNywgMHgxZSB9LCAyIH0sCisJCSAgIHsgeyAweDBiLCAweDczIH0sIDIgfSwKKwkJ ICAgeyB7IDB4MGMsIDB4NzMgfSwgMiB9LAorCQkgICB7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCisJ CSAgIHsgeyAweDBmLCAweGFlIH0sIDIgfSwKKwkJICAgeyB7IDB4MTEsIDB4YjggfSwgMiB9LAor CQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDU4LCAweDgwIH0sIDIgfSwK KwkJICAgeyB7IDB4NTksIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHg1YSwgMHgwMCB9LCAyIH0s CisJCSAgIHsgeyAweDViLCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4NWMsIDB4ODAgfSwgMiB9 LAorCQkgICB7IHsgMHg1ZCwgMHg4MSB9LCAyIH0sCisJCSAgIHsgeyAweDVlLCAweDAwIH0sIDIg fSwKKwkJICAgeyB7IDB4NWYsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHg3MiwgMHgxMSB9LCAy IH0sCisJCSAgIHsgeyAweDY4LCAweDAzIH0sIDIgfSwKKwkJICAgLyogQ01EMl9QNCAqLworCQkg ICB7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCisJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKKwkJ ICAgeyB7IDB4MDAsIDB4MUMgfSwgMiB9LAorCQkgICB7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCisJ CSAgIHsgeyAweDAyLCAweDBDIH0sIDIgfSwKKwkJICAgeyB7IDB4MDMsIDB4MDEgfSwgMiB9LAor CQkgICB7IHsgMHgwNCwgMHgwRiB9LCAyIH0sCisJCSAgIHsgeyAweDA1LCAweDEwIH0sIDIgfSwK KwkJICAgeyB7IDB4MDYsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgwNywgMHgxMCB9LCAyIH0s CisJCSAgIHsgeyAweDA4LCAweDg5IH0sIDIgfSwKKwkJICAgeyB7IDB4MDksIDB4OEEgfSwgMiB9 LAorCQkgICB7IHsgMHgwQSwgMHgxMyB9LCAyIH0sCisJCSAgIHsgeyAweDBCLCAweDEzIH0sIDIg fSwKKwkJICAgeyB7IDB4MEMsIDB4MTUgfSwgMiB9LAorCQkgICB7IHsgMHgwRCwgMHgxNSB9LCAy IH0sCisJCSAgIHsgeyAweDBFLCAweDE3IH0sIDIgfSwKKwkJICAgeyB7IDB4MEYsIDB4MTcgfSwg MiB9LAorCQkgICB7IHsgMHgxMCwgMHgxQyB9LCAyIH0sCisJCSAgIHsgeyAweDExLCAweDBCIH0s IDIgfSwKKwkJICAgeyB7IDB4MTIsIDB4MEMgfSwgMiB9LAorCQkgICB7IHsgMHgxMywgMHgwMSB9 LCAyIH0sCisJCSAgIHsgeyAweDE0LCAweDBGIH0sIDIgfSwKKwkJICAgeyB7IDB4MTUsIDB4MTAg fSwgMiB9LAorCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDE3LCAweDEw IH0sIDIgfSwKKwkJICAgeyB7IDB4MTgsIDB4ODkgfSwgMiB9LAorCQkgICB7IHsgMHgxOSwgMHg4 QSB9LCAyIH0sCisJCSAgIHsgeyAweDFBLCAweDEzIH0sIDIgfSwKKwkJICAgeyB7IDB4MUIsIDB4 MTMgfSwgMiB9LAorCQkgICB7IHsgMHgxQywgMHgxNSB9LCAyIH0sCisJCSAgIHsgeyAweDFELCAw eDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MUUsIDB4MTcgfSwgMiB9LAorCQkgICB7IHsgMHgxRiwg MHgxNyB9LCAyIH0sCisJCSAgIC8qIFNUViAqLworCQkgICB7IHsgMHgyMCwgMHg0MCB9LCAyIH0s CisJCSAgIHsgeyAweDIxLCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4MjIsIDB4MDAgfSwgMiB9 LAorCQkgICB7IHsgMHgyMywgMHg0MCB9LCAyIH0sCisJCSAgIHsgeyAweDI0LCAweDQwIH0sIDIg fSwKKwkJICAgeyB7IDB4MjUsIDB4NkQgfSwgMiB9LAorCQkgICB7IHsgMHgyNiwgMHg0MCB9LCAy IH0sCisJCSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKKwkJICAgLyogVmVuZCAqLworCQkgICB7 IHsgMHhFMCwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweERDLCAweDIxIH0sIDIgfSwKKwkJICAg eyB7IDB4REQsIDB4MjIgfSwgMiB9LAorCQkgICB7IHsgMHhERSwgMHgwNyB9LCAyIH0sCisJCSAg IHsgeyAweERGLCAweDA3IH0sIDIgfSwKKwkJICAgeyB7IDB4RTMsIDB4NkQgfSwgMiB9LAorCQkg ICB7IHsgMHhFMSwgMHgwNyB9LCAyIH0sCisJCSAgIHsgeyAweEUyLCAweDA3IH0sIDIgfSwKKwkJ ICAgLyogVUQgKi8KKwkJICAgeyB7IDB4MjksIDB4RDggfSwgMiB9LAorCQkgICB7IHsgMHgyQSwg MHgyQSB9LCAyIH0sCisJCSAgIC8qIENMSyAqLworCQkgICB7IHsgMHg0QiwgMHgwMyB9LCAyIH0s CisJCSAgIHsgeyAweDRDLCAweDExIH0sIDIgfSwKKwkJICAgeyB7IDB4NEQsIDB4MTAgfSwgMiB9 LAorCQkgICB7IHsgMHg0RSwgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDRGLCAweDAxIH0sIDIg fSwKKwkJICAgeyB7IDB4NTAsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHg1MSwgMHgwMCB9LCAy IH0sCisJCSAgIHsgeyAweDUyLCAweDgwIH0sIDIgfSwKKwkJICAgeyB7IDB4NTMsIDB4MDAgfSwg MiB9LAorCQkgICB7IHsgMHg1NiwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDU0LCAweDA3IH0s IDIgfSwKKwkJICAgeyB7IDB4NTgsIDB4MDcgfSwgMiB9LAorCQkgICB7IHsgMHg1NSwgMHgyNSB9 LCAyIH0sCisJCSAgIC8qIFJlc2V0IFhET05CICovCisJCSAgIHsgeyAweDVCLCAweDQzIH0sIDIg fSwKKwkJICAgeyB7IDB4NUMsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1RiwgMHg3MyB9LCAy IH0sCisJCSAgIHsgeyAweDYwLCAweDczIH0sIDIgfSwKKwkJICAgeyB7IDB4NjMsIDB4MjIgfSwg MiB9LAorCQkgICB7IHsgMHg2NCwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDY3LCAweDA4IH0s IDIgfSwKKwkJICAgeyB7IDB4NjgsIDB4MDQgfSwgMiB9LAorCQkgICAvKiBSZXNvbHV0aW9uOjE0 NDB4MjU2MCAqLworCQkgICB7IHsgMHg3MiwgMHgwMiB9LCAyIH0sCisJCSAgIC8qIG11eCAqLwor CQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCisJCSAgIHsgeyAweDdCLCAweDkxIH0sIDIgfSwK KwkJICAgeyB7IDB4N0MsIDB4RDggfSwgMiB9LAorCQkgICB7IHsgMHg3RCwgMHg2MCB9LCAyIH0s CisJCSAgIHsgeyAweDdGLCAweDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4NzUsIDB4MTUgfSwgMiB9 LAorCQkgICAvKiBBQk9GRiAqLworCQkgICB7IHsgMHhCMywgMHhDMCB9LCAyIH0sCisJCSAgIHsg eyAweEI0LCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAorCQkgICAv KiBTb3VyY2UgRVEgKi8KKwkJICAgeyB7IDB4NzgsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg3 OSwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDgwLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4 ODMsIDB4MDAgfSwgMiB9LAorCQkgICAvKiBGUCBCUCAqLworCQkgICB7IHsgMHg5MywgMHgwQSB9 LCAyIH0sCisJCSAgIHsgeyAweDk0LCAweDBBIH0sIDIgfSwKKwkJICAgLyogSW52ZXJzaW9uIFR5 cGUgKi8KKwkJICAgeyB7IDB4OEEsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg5QiwgMHhGRiB9 LCAyIH0sCisJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRTd2FwPTEgKi8KKwkJICAgeyB7IDB4OUQs IDB4QjAgfSwgMiB9LAorCQkgICB7IHsgMHg5RiwgMHg2MyB9LCAyIH0sCisJCSAgIHsgeyAweDk4 LCAweDEwIH0sIDIgfSwKKwkJICAgLyogRlJNICovCisJCSAgIHsgeyAweEVDLCAweDAwIH0sIDIg fSwKKwkJICAgLyogQ01EMSAqLworCQkgICB7IHsgMHhGRiwgMHgxMCB9LCAyIH0sCisJCSAgICAv KiBWQlArVlNBPSxWRlAgPSAxMEggKi8KKwkJICAgeyB7IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEs IH0sIDQgfSwKKwkJICAgLyogRlRFIG9uICovCisJCSAgIHsgeyAweDM1LCAweDAwIH0sIDIgfSwK KwkJICAgLyogRU5fQksgPTEoYXV0byBibGFjaykgKi8KKwkJICAgeyB7IDB4RTUsIDB4MDEgfSwg MiB9LAorCQkgICAvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCisJCSAgIHsgeyAweEJC LCAweDAzIH0sIDIgfSwKKwkJICAgLyogTm9uIFJlbG9hZCBNVFAgKi8KKwkJICAgeyB7IDB4RkIs IDB4MDEgfSwgMiB9LAorCQkgICAvKiBTbHBPdXQgKyBEaXNwT24gKi8KKwkJICAgLy8wNSAwMSAw MCAwMCA3OCAwMCAwMiAxMSAwMAorCQkgICAvLzA1IDAxIDAwIDAwIDc4IDAwIDAyIDI5IDAwCit9 OworCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwpCit7CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShw YW5lbCk7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkOworCWludCByZXQsIGksIGo7CisKKwlpZiAoY3R4LT5wcmVw YXJlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB0cnVseV93cXhnYV9wb3dlcl9vbihjdHgpOwor CWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZHNpc1swXS0+bW9kZV9mbGFncyB8PSBN SVBJX0RTSV9NT0RFX0xQTTsKKwlkc2lzWzFdLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVf TFBNOworCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFuZWxfY21kcyk7IGorKykgewor CQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlkID0gZHNpc1tpXTsKKwkJCXJldCA9IG1p cGlfZHNpX2Rjc193cml0ZV9idWZmZXIoZHNpc1tpXSwKKwkJCQkJcGFuZWxfY21kc1tqXS5jb21t YW5kcywKKwkJCQkJcGFuZWxfY21kc1tqXS5zaXplKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJ LyogY29udGludWUgYW55d2F5ICovCisJCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBj bWQgbm8gJWQsIGVycjogJWRcbiIsCisJCQkJCQlqLCByZXQpOworCQkJfQorCQl9CisJfQorCisK Kwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAobWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBf bW9kZShkc2lzW2ldKSA8IDApIHsKKwkJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gZXhp dCBzbGVlcCBtb2RlXG4iKTsKKwkJCXJldHVybiAtRUNPTU07CisJCX0KKwltc2xlZXAoNzgpOwor CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWYgKG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxh eV9vbihkc2lzW2ldKSA8IDApIHsKKwkJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gc2Vu ZCBkaXNwbGF5IG9uXG4iKTsKKwkJCXJldHVybiAtRUNPTU07CisJCX0KKwltc2xlZXAoNzgpOwor CisJY3R4LT5wcmVwYXJlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0 cnVseV93cXhnYV9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRy dWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7CisKKwlpZiAoY3R4 LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChjdHgtPmJhY2tsaWdodCkgeworCQljdHgt PmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCQliYWNrbGlnaHRf dXBkYXRlX3N0YXR1cyhjdHgtPmJhY2tsaWdodCk7CisJfQorCWN0eC0+ZW5hYmxlZCA9IHRydWU7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9nZXRfbW9kZXMoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9IHBhbmVsLT5jb25uZWN0b3I7CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90 b190cnVseV93cXhnYShwYW5lbCk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisK Kwltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKKwlpZiAoIW1vZGUpIHsK KwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2Rl XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9k ZSgmY3R4LT52bSwgbW9kZSk7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA3 NDsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSAxMzE7CisJbW9kZS0+dHlw ZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJZHJt X21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHRydWx5X3dxeGdhX2RybV9mdW5jcyA9 IHsKKwkuZGlzYWJsZSA9IHRydWx5X3dxeGdhX2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IHRydWx5 X3dxeGdhX3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IHRydWx5X3dxeGdhX3ByZXBhcmUsCisJLmVu YWJsZSA9IHRydWx5X3dxeGdhX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0gdHJ1bHlfd3F4Z2FfZ2V0 X21vZGVzLAorfTsKKworc3RhdGljIGludCB0cnVseV93cXhnYV9wYW5lbF9hZGQoc3RydWN0IHRy dWx5X3dxeGdhICpjdHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJaW50 IHJldDsKKworCWN0eC0+c3VwcGxpZXNbMF0uc3VwcGx5ID0gInZkZGlvIjsKKwljdHgtPnN1cHBs aWVzWzFdLnN1cHBseSA9ICJ2ZGRhIjsKKwljdHgtPnN1cHBsaWVzWzJdLnN1cHBseSA9ICJsYWIi OworCWN0eC0+c3VwcGxpZXNbM10uc3VwcGx5ID0gImliYiI7CisJcmV0ID0gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAorCQkJCSAgICAgIGN0 eC0+c3VwcGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY3R4LT5yZXNl dF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7CisJ aWYgKElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdl dCByZXNldC1ncGlvcyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOworCQly ZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWN0eC0+bW9kZV9ncGlvID0g ZGV2bV9ncGlvZF9nZXQoZGV2LCAibW9kZSIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIo Y3R4LT5tb2RlX2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBtb2RlIGdwaW8g JWxkXG4iLAorCQkJUFRSX0VSUihjdHgtPm1vZGVfZ3BpbykpOworCQljdHgtPm1vZGVfZ3BpbyA9 IE5VTEw7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKTsKKwl9CisKKwlyZXQgPSBw aW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKGRldik7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gc2V0IHBpbmN0cmwgZGVmYXVsdCBzdGF0ZSwgJWRcbiIs CisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9nZXRf dmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCisJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOworCWN0eC0+cGFuZWwu ZGV2ID0gZGV2OworCWN0eC0+cGFuZWwuZnVuY3MgPSAmdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNzOwor CWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIHRydWx5X3dxeGdhX3BhbmVsX2RlbChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKK3sKKwlp ZiAoY3R4LT5wYW5lbC5kZXYpCisJCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOworCisJ aWYgKGN0eC0+YmFja2xpZ2h0KQorCQlwdXRfZGV2aWNlKCZjdHgtPmJhY2tsaWdodC0+ZGV2KTsK KworCWlmIChjdHgtPmRzaVsxXSkKKwkJcHV0X2RldmljZSgmY3R4LT5kc2lbMV0tPmRldik7Cit9 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlzdHJ1Y3QgdHJ1bHlf d3F4Z2EgKmN0eDsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpzZWNvbmRhcnkgPSBOVUxMOwor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWRzaS0+bGFuZXMgPSA0Owor CWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBN SVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAorCQkJ ICBNSVBJX0RTSV9NT0RFX0xQTTsKKworCS8qIE9ubHkgRFNJLUxJTksxIG5vZGUgaGFzICJsaW5r MiIgZW50cnkuICovCisJbnAgPSBvZl9wYXJzZV9waGFuZGxlKGRzaS0+ZGV2Lm9mX25vZGUsICJs aW5rMiIsIDApOworCWlmIChucCkgeworCQlzZWNvbmRhcnkgPSBvZl9maW5kX21pcGlfZHNpX2Rl dmljZV9ieV9ub2RlKG5wKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCisJCWlmICghc2Vjb25kYXJ5 KQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwkJY3R4ID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjdHgpIHsKKwkJCXB1dF9kZXZpY2Uo JnNlY29uZGFyeS0+ZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1pcGlfZHNpX3Nl dF9kcnZkYXRhKGRzaSwgY3R4KTsKKworCQljdHgtPmRldiA9IGRldjsKKwkJY3R4LT5kc2lbMF0g PSBkc2k7CisJCWN0eC0+ZHNpWzFdID0gc2Vjb25kYXJ5OworCisJCXJldCA9IHRydWx5X3dxeGdh X3BhbmVsX2FkZChjdHgpOworCQlpZiAocmV0KSB7CisJCQlwdXRfZGV2aWNlKCZzZWNvbmRhcnkt PmRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNo KGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHNlY29uZGFyeSkKKwkJCXRydWx5X3dxeGdh X3BhbmVsX2RlbChjdHgpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRz aSkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRz aSk7CisKKwltaXBpX2RzaV9kZXRhY2goZHNpKTsKKworCS8qIGRlbGV0ZSBwYW5lbCBvbmx5IGZv ciB0aGUgRFNJMSBpbnRlcmZhY2UgKi8KKwlpZiAoY3R4KQorCQl0cnVseV93cXhnYV9wYW5lbF9k ZWwoY3R4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCB0cnVseV93cXhnYV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidHJ1bHks ZHVhbF93cXhnYSIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHJ1bHlf d3F4Z2Ffb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciB0cnVseV93 cXhnYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfd3F4 Z2EiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVseV93cXhnYV9vZl9tYXRjaCwKKwl9LAorCS5w cm9iZSA9IHRydWx5X3dxeGdhX3Byb2JlLAorCS5yZW1vdmUgPSB0cnVseV93cXhnYV9yZW1vdmUs Cit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV93cXhnYV9kcml2ZXIpOworCitNT0RV TEVfREVTQ1JJUFRJT04oInRydWx5IHdxeGdhIERTSSBQYW5lbCBEcml2ZXIiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlv biBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZyZWVkcmVubwo=