From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [PATCH 1/7] drm/i915: setup bridge for HDMI LPE audio driver Date: Mon, 12 Dec 2016 23:40:37 +0530 Message-ID: <20161212181043.12512-2-jerome.anand@intel.com> References: <20161212181043.12512-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161212181043.12512-1-jerome.anand@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, alsa-devel@alsa-project.org Cc: tiwai@suse.de, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: alsa-devel@alsa-project.org RW5hYmxlIHN1cHBvcnQgZm9yIEhETUkgTFBFIGF1ZGlvIG1vZGUgb24gQmF5dHJhaWwgYW5kCkNo ZXJyeXRyYWlsIHdoZW4gSERhdWRpbyBjb250cm9sbGVyIGlzIG5vdCBkZXRlY3RlZAoKU2V0dXAg bWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZHVyaW5nIGk5MTVfZHJpdmVyX2xvYWQ6CjEuIENy ZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSByZXNvdXJjZXMKMi4gTWFr ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGNoaWxkIG9mIGk5MTUgZGV2aWNlIGZvciBydW50aW1lIFBN LgozLiBDcmVhdGUgSVJRIGNoaXAgdG8gZm9yd2FyZCBIRE1JIExQRSBhdWRpbyBpcnFzLgoKSERN SSBMUEUgYXVkaW8gZHJpdmVyIChhIHN0YW5kYWxvbmUgc291bmQgZHJpdmVyKSBwcm9iZXMgdGhl CkxQRSBhdWRpbyBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcgc291bmQgY2FyZC4KClNpZ25lZC1v ZmYtYnk6IFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5p bnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVs LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL2dwdS9pOTE1LnJzdCAgICAgICAgICAgICB8ICAgOSAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgfCAgMTUgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfaXJxLmMgICAgICAgIHwgIDI3ICsrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBlX2F1ZGlvLmMg fCAzNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9pbnRl bF9scGVfYXVkaW8uaCAgICAgICAgICB8ICA0NSArKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ3MSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9p OTE1LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CmluZGV4IDM4NDNlZjYuLmY5NGE0 ZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CisrKyBiL0RvY3VtZW50 YXRpb24vZ3B1L2k5MTUucnN0CkBAIC0yMTMsNiArMjEzLDE1IEBAIFZpZGVvIEJJT1MgVGFibGUg KFZCVCkKIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92YnRfZGVm cy5oCiAgICA6aW50ZXJuYWw6CiAKK2ludGVsIGhkbWkgbHBlIGF1ZGlvIHN1cHBvcnQKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCisgICA6ZG9jOiAgTFBFIEF1ZGlvIGludGVncmF0aW9u IGZvciBIRE1JIG9yIERQIHBsYXliYWNrCisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYworICAgOmludGVybmFsOgorCiBNZW1vcnkgTWFuYWdl bWVudCBhbmQgQ29tbWFuZCBTdWJtaXNzaW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggM2MzMDkxNi4uOWQ0NzhjNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTEyNyw2ICsxMjcsOSBAQCBpOTE1LXkgKz0gaW50ZWxf Z3Z0Lm8KIGluY2x1ZGUgJChzcmMpL2d2dC9NYWtlZmlsZQogZW5kaWYKIAorIyBMUEUgQXVkaW8g Zm9yIFZMViBhbmQgQ0hUCitpOTE1LXkgKz0gaW50ZWxfbHBlX2F1ZGlvLm8KKwogb2JqLSQoQ09O RklHX0RSTV9JOTE1KSArPSBpOTE1Lm8KIAogQ0ZMQUdTX2k5MTVfdHJhY2VfcG9pbnRzLm8gOj0g LUkkKHNyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDY0Mjg1ODguLjkyNzk2ZmQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTEzMiw3ICsxMTMyLDggQEAgc3RhdGljIHZvaWQg aTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CWlmIChJU19HRU41KGRldl9wcml2KSkKIAkJaW50ZWxfZ3B1X2lwc19pbml0KGRldl9wcml2KTsK IAotCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3ByaXYpOworCWlmIChpbnRlbF9scGVf YXVkaW9faW5pdChkZXZfcHJpdikgPCAwKQorCQlpOTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0KGRl dl9wcml2KTsKIAogCS8qCiAJICogU29tZSBwb3J0cyByZXF1aXJlIGNvcnJlY3RseSBzZXQtdXAg aHBkIHJlZ2lzdGVycyBmb3IgZGV0ZWN0aW9uIHRvCkBAIC0xMTUwLDcgKzExNTEsMTAgQEAgc3Rh dGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogICovCiBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlpOTE1X2F1ZGlvX2NvbXBvbmVudF9jbGVh bnVwKGRldl9wcml2KTsKKwlpZiAoSEFTX0xQRV9BVURJTyhkZXZfcHJpdikpCisJCWludGVsX2xw ZV9hdWRpb190ZWFyZG93bihkZXZfcHJpdik7CisJZWxzZQorCQlpOTE1X2F1ZGlvX2NvbXBvbmVu dF9jbGVhbnVwKGRldl9wcml2KTsKIAogCWludGVsX2dwdV9pcHNfdGVhcmRvd24oKTsKIAlhY3Bp X3ZpZGVvX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDQwYzU1Yzku LjEzMTc4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjUxNCw2ICsyNTE0LDEyIEBA IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAkvKiBVc2VkIHRvIHNhdmUgdGhlIHBpcGUtdG8t ZW5jb2RlciBtYXBwaW5nIGZvciBhdWRpbyAqLwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICphdl9l bmNfbWFwW0k5MTVfTUFYX1BJUEVTXTsKIAorCS8qIG5lY2Vzc2FyeSByZXNvdXJjZSBzaGFyaW5n IHdpdGggSERNSSBMUEUgYXVkaW8gZHJpdmVyLiAqLworCXN0cnVjdCB7CisJCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBsYXRkZXY7CisJCWludAlpcnE7CisJfSBscGVfYXVkaW87CisKIAkvKgog CSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBo ZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBh IGJldHRlciBwbGFjZS4KQEAgLTI5MTIsNiArMjkxOCw4IEBAIGludGVsX2luZm8oY29uc3Qgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAjZGVmaW5lIEhBU19QT09MRURfRVUo ZGV2X3ByaXYpCSgoZGV2X3ByaXYpLT5pbmZvLmhhc19wb29sZWRfZXUpCiAKKyNkZWZpbmUgSEFT X0xQRV9BVURJTyhkZXZfcHJpdikgKChkZXZfcHJpdiktPmxwZV9hdWRpby5wbGF0ZGV2ICE9IE5V TEwpCisKICNkZWZpbmUgSU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKICNkZWZpbmUg SU5URUxfUENIX0lCWF9ERVZJQ0VfSURfVFlQRQkJMHgzYjAwCiAjZGVmaW5lIElOVEVMX1BDSF9D UFRfREVWSUNFX0lEX1RZUEUJCTB4MWMwMApAQCAtMzY4Miw2ICszNjkwLDEzIEBAIGV4dGVybiBp bnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiB2b2lkIGk5MTVfc2V0dXBfc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKIHZvaWQgaTkxNV90ZWFyZG93bl9zeXNmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwogCisvKiBpOTE1X2xwZV9hdWRpby5jICovCitpbnQgIGludGVsX2xwZV9hdWRpb19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitpbnQgIGludGVsX2xwZV9h dWRpb19zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRl bF9scGVfYXVkaW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK K3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Citib29sIGludGVsX2xwZV9hdWRpb19kZXRlY3Qoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKKwogLyogaW50ZWxfaTJjLmMgKi8KIGV4dGVybiBpbnQgaW50 ZWxfc2V0dXBfZ21idXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVy biB2b2lkIGludGVsX3RlYXJkb3duX2dtYnVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBhMGU3MGY1Li45YjcyZTc3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTE4OTQsNiArMTg5NCwxNCBAQCBzdGF0aWMgaXJxcmV0 dXJuX3QgdmFsbGV5dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCXZhbGxl eXZpZXdfcGlwZXN0YXRfaXJxX2FjayhkZXZfcHJpdiwgaWlyLCBwaXBlX3N0YXRzKTsKIAogCQkv KgorCQkgKiBMUEUgYXVkaW8gaW50ZXJydXB0cyBhcmUgb25seSBlbmFibGVkIG9uIEJheXRyYWls IGFuZAorCQkgKiBDaGVycnlWaWV3IHBsYXRmb3JtcyB3aXRob3V0IEhEYXVkaW8KKwkJICovCisJ CWlmIChpaXIgJiAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8CisJCQkgICBJOTE1X0xQRV9Q SVBFX0JfSU5URVJSVVBUKSkKKwkJCWludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcihkZXZfcHJp dik7CisKKwkJLyoKIAkJICogVkxWX0lJUiBpcyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0 cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBFU1RBVC9QT1JUX0hPVFBMVUdfU1RBVCwgaGVuY2Ug Y2xlYXIgaXQgbGFzdC4KIAkJICovCkBAIC0xOTc0LDYgKzE5ODIsMTUgQEAgc3RhdGljIGlycXJl dHVybl90IGNoZXJyeXZpZXdfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogCQl2YWxs ZXl2aWV3X3BpcGVzdGF0X2lycV9hY2soZGV2X3ByaXYsIGlpciwgcGlwZV9zdGF0cyk7CiAKIAkJ LyoKKwkJICogTFBFIGF1ZGlvIGludGVycnVwdHMgYXJlIG9ubHkgZW5hYmxlZCBvbiBCYXl0cmFp bCBhbmQKKwkJICogQ2hlcnJ5VmlldyBwbGF0Zm9ybXMgd2l0aG91dCBIRGF1ZGlvCisJCSAqLwor CQlpZiAoaWlyICYgKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAorCQkJICAgSTkxNV9MUEVf UElQRV9CX0lOVEVSUlVQVCB8CisJCQkgICBJOTE1X0xQRV9QSVBFX0NfSU5URVJSVVBUKSkKKwkJ CWludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcihkZXZfcHJpdik7CisKKwkJLyoKIAkJICogVkxW X0lJUiBpcyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJv bSBQSVBFU1RBVC9QT1JUX0hPVFBMVUdfU1RBVCwgaGVuY2UgY2xlYXIgaXQgbGFzdC4KIAkJICov CkBAIC0yOTE0LDYgKzI5MzEsNyBAQCBzdGF0aWMgdm9pZCB2bHZfZGlzcGxheV9pcnFfcG9zdGlu c3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXUzMiBwaXBlc3RhdF9t YXNrOwogCXUzMiBlbmFibGVfbWFzazsKIAllbnVtIHBpcGUgcGlwZTsKKwl1MzIgdmFsOwogCiAJ cGlwZXN0YXRfbWFzayA9IFBMQU5FX0ZMSVBfRE9ORV9JTlRfU1RBVFVTX1ZMViB8CiAJCQlQSVBF X0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVM7CkBAIC0yOTMwLDYgKzI5NDgsMTUgQEAgc3RhdGlj IHZvaWQgdmx2X2Rpc3BsYXlfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIAogCVdBUk5fT04oZGV2X3ByaXYtPmlycV9tYXNrICE9IH4wKTsKIAorCS8q IGFkZCBpbnRlcnJ1cHQgbWFza3MgdW5jb25kaXRpYWxseSBoZXJlLCB0aGUgYWN0dWFsIHVubWFz aworCSAqIHdpbGwgdGFrZSBwbGFjZSBvbmx5IGlmIHRoZSBMUEVfQVVESU8gbW9kZSBpcyBkZXRl Y3RlZAorCSAqLworCXZhbCA9IChJOTE1X0xQRV9QSVBFX0FfSU5URVJSVVBUIHwKKwkJSTkxNV9M UEVfUElQRV9CX0lOVEVSUlVQVCB8CisJCUk5MTVfTFBFX1BJUEVfQ19JTlRFUlJVUFQpOworCisJ ZW5hYmxlX21hc2sgfD0gdmFsOworCiAJZGV2X3ByaXYtPmlycV9tYXNrID0gfmVuYWJsZV9tYXNr OwogCiAJR0VONV9JUlFfSU5JVChWTFZfLCBkZXZfcHJpdi0+aXJxX21hc2ssIGVuYWJsZV9tYXNr KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDkwNjg1ZDIuLjZmYTBlMjUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaApAQCAtMjQyNCw2ICsyNDI0LDkgQEAgZW51bSBza2xfZGlzcF9wb3dl cl93ZWxscyB7CiAjZGVmaW5lIEk5MTVfQVNMRV9JTlRFUlJVUFQJCQkJKDE8PDApCiAjZGVmaW5l IEk5MTVfQlNEX1VTRVJfSU5URVJSVVBUCQkJCSgxPDwyNSkKIAorI2RlZmluZSBJOTE1X0hETUlf TFBFX0FVRElPX0JBU0UJKFZMVl9ESVNQTEFZX0JBU0UgKyAweDY1MDAwKQorI2RlZmluZSBJOTE1 X0hETUlfTFBFX0FVRElPX1NJWkUJMHgxMDAwCisKICNkZWZpbmUgR0VONl9CU0RfUk5DSUQJCQlf TU1JTygweDEyMTk4KQogCiAjZGVmaW5lIEdFTjdfRkZfVEhSRUFEX01PREUJCV9NTUlPKDB4MjBh MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHBlX2F1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZTEyZTVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCkBAIC0wLDAgKzEsMzYzIEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFBpZXJyZS1Mb3Vp cyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5pbnRlbC5jb20+CisgKiAgICBK ZXJvbWUgQW5hbmQgPGplcm9tZS5hbmFuZEBpbnRlbC5jb20+CisgKiAgICBiYXNlZCBvbiBWRUQg cGF0Y2hlcworICoKKyAqLworCisvKioKKyAqIERPQzogTFBFIEF1ZGlvIGludGVncmF0aW9uIGZv ciBIRE1JIG9yIERQIHBsYXliYWNrCisgKgorICogTW90aXZhdGlvbjoKKyAqIEF0b20gcGxhdGZv cm1zIChlLmcuIHZhbGxleXZpZXcgYW5kIGNoZXJyeVRyYWlsKSBpbnRlZ3JhdGVzIGEgRE1BLWJh c2VkCisgKiBpbnRlcmZhY2UgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIHRyYWRpdGlvbmFsIEhE YXVkaW8gcGF0aC4gV2hpbGUgdGhpcworICogbW9kZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIExQRSBh a2EgU1NUIGF1ZGlvIGVuZ2luZSwgdGhlIGRvY3VtZW50YXRpb24gcmVmZXJzCisgKiB0byB0aGlz IG1vZGUgYXMgTFBFIHNvIHdlIGtlZXAgdGhpcyBub3RhdGlvbiBmb3IgdGhlIHNha2Ugb2YgY29u c2lzdGVuY3kuCisgKgorICogVGhlIGludGVyZmFjZSBpcyBoYW5kbGVkIGJ5IGEgc2VwYXJhdGUg c3RhbmRhbG9uZSBkcml2ZXIgbWFpbnRhaW5lZCBpbiB0aGUKKyAqIEFMU0Egc3Vic3lzdGVtIGZv ciBzaW1wbGljaXR5LiBUbyBtaW5pbWl6ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdHdv CisgKiBzdWJzeXN0ZW1zLCBhIGJyaWRnZSBpcyBzZXR1cCBiZXR3ZWVuIHRoZSBoZG1pLWxwZS1h dWRpbyBhbmQgaTkxNToKKyAqIDEuIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBN TUlPL0lSUSByZXNvdXJjZXMKKyAqIDIuIE1ha2UgdGhlIHBsYXRmb3JtIGRldmljZSBjaGlsZCBv ZiBpOTE1IGRldmljZSBmb3IgcnVudGltZSBQTS4KKyAqIDMuIENyZWF0ZSBJUlEgY2hpcCB0byBm b3J3YXJkIHRoZSBMUEUgYXVkaW8gaXJxcy4KKyAqIHRoZSBoZG1pLWxwZS1hdWRpbyBkcml2ZXIg cHJvYmVzIHRoZSBscGUgYXVkaW8gZGV2aWNlIGFuZCBjcmVhdGVzIGEgbmV3CisgKiBzb3VuZCBj YXJkCisgKgorICogVGhyZWF0czoKKyAqIER1ZSB0byB0aGUgcmVzdHJpY3Rpb24gaW4gTGludXgg cGxhdGZvcm0gZGV2aWNlIG1vZGVsLCB1c2VyIG5lZWQgbWFudWFsbHkKKyAqIHVuaW5zdGFsbCB0 aGUgaGRtaS1scGUtYXVkaW8gZHJpdmVyIGJlZm9yZSB1bmluc3RhbGxpbmcgaTkxNSBtb2R1bGUs CisgKiBvdGhlcndpc2Ugd2UgbWlnaHQgcnVuIGludG8gdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFm dGVyIGk5MTUgcmVtb3ZlcyB0aGUKKyAqIHBsYXRmb3JtIGRldmljZTogZXZlbiB0aG91Z2ggaGRt aS1scGUtYXVkaW8gZHJpdmVyIGlzIHJlbGVhc2VkLCB0aGUgbW9kdWxlcworICogaXMgc3RpbGwg aW4gImluc3RhbGxlZCIgc3RhdHVzLgorICoKKyAqIEltcGxlbWVudGF0aW9uOgorICogVGhlIE1N SU8vUkVHIHBsYXRmb3JtIHJlc291cmNlcyBhcmUgY3JlYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJl Z2lzdGVycworICogc3BlY2lmaWNhdGlvbi4KKyAqIFdoZW4gZm9yd2FyZGluZyBMUEUgYXVkaW8g aXJxcywgdGhlIGZsb3cgY29udHJvbCBoYW5kbGVyIHNlbGVjdGlvbiBkZXBlbmRzCisgKiBvbiB0 aGUgcGxhdGZvcm0sIGZvciBleGFtcGxlIG9uIHZhbGxleXZpZXcgaGFuZGxlX3NpbXBsZV9pcnEg aXMgZW5vdWdoLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSAiaTkx NV9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGRybS9pbnRlbF9s cGVfYXVkaW8uaD4KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqCitscGVfYXVkaW9f cGxhdGRldl9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKKwlpbnQgcmV0OworCXN0cnVj dCByZXNvdXJjZSByc2NbMl0gPSB7fTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2 OworCXU2NCAqZG1hX21hc2s7CisJc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlvX3BkYXRhICpw ZGF0YTsKKworCWlmIChkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSA8IDApCisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCisJcGxhdGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaGRtaS1s cGUtYXVkaW8iLCAtMSk7CisJaWYgKCFwbGF0ZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCURS TV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIExQRSBhdWRpbyBwbGF0Zm9ybSBkZXZpY2VcbiIp OworCQlnb3RvIGVycjsKKwl9CisKKwkvKiB0byB3b3JrLWFyb3VuZCBjaGVja19hZGRyIGluIG5v bW11X21hcF9zZygpICovCisJZG1hX21hc2sgPSBrbWFsbG9jKHNpemVvZigqcGxhdGRldi0+ZGV2 LmRtYV9tYXNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFfbWFzaykgeworCQlyZXQgPSAtRU5P TUVNOworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWFfbWFza1xuIik7CisJCWdv dG8gZXJyX3B1dF9kZXY7CisJfQorCSpkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJcGxh dGRldi0+ZGV2LmRtYV9tYXNrID0gZG1hX21hc2s7CisJcGxhdGRldi0+ZGV2LmNvaGVyZW50X2Rt YV9tYXNrID0gKmRtYV9tYXNrOworCisJcnNjWzBdLnN0YXJ0ICAgID0gcnNjWzBdLmVuZCA9IGRl dl9wcml2LT5scGVfYXVkaW8uaXJxOworCXJzY1swXS5mbGFncyAgICA9IElPUkVTT1VSQ0VfSVJR OworCXJzY1swXS5uYW1lICAgICA9ICJoZG1pLWxwZS1hdWRpby1pcnEiOworCisJcnNjWzFdLnN0 YXJ0ICAgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKworCQlJOTE1X0hETUlf TFBFX0FVRElPX0JBU0U7CisJcnNjWzFdLmVuZCAgICAgID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRl di0+cGRldiwgMCkgKworCQlJOTE1X0hETUlfTFBFX0FVRElPX0JBU0UgKyBJOTE1X0hETUlfTFBF X0FVRElPX1NJWkUgLSAxOworCXJzY1sxXS5mbGFncyAgICA9IElPUkVTT1VSQ0VfTUVNOworCXJz Y1sxXS5uYW1lICAgICA9ICJoZG1pLWxwZS1hdWRpby1tbWlvIjsKKworCXJldCA9IHBsYXRmb3Jt X2RldmljZV9hZGRfcmVzb3VyY2VzKHBsYXRkZXYsIHJzYywgMik7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBhZGQgcmVzb3VyY2UgZm9yIHBsYXRmb3JtIGRldmljZTogJWRc biIsCisJCQlyZXQpOworCQlnb3RvIGVycl9wdXRfZGV2OworCX0KKworCXBkYXRhID0ga3phbGxv YyhzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgewor CQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wdXRfZGV2OworCX0KKwlwbGF0ZGV2LT5kZXYu cGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bHBlX2F1ZGlv X3Nsb2NrKTsKKworCS8qIGZvciBMUEUgYXVkaW8gZHJpdmVyJ3MgcnVudGltZS1QTSAqLworCXBs YXRkZXYtPmRldi5wYXJlbnQgPSBkZXYtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRk KHBsYXRkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWRkIExQRSBh dWRpbyBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfcHV0X2Rl djsKKwl9CisKKwlyZXR1cm4gcGxhdGRldjsKK2Vycl9wdXRfZGV2OgorCXBsYXRmb3JtX2Rldmlj ZV9wdXQocGxhdGRldik7CisJa2ZyZWUoZG1hX21hc2spOworZXJyOgorCXJldHVybiBFUlJfUFRS KHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwZV9hdWRpb19wbGF0ZGV2X2Rlc3Ryb3koc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lz dGVyKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7CisJa2ZyZWUoZGV2X3ByaXYtPmxwZV9h dWRpby5wbGF0ZGV2LT5kZXYuZG1hX21hc2spOworfQorCitzdGF0aWMgdm9pZCBscGVfYXVkaW9f aXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZC0+Y2hpcF9kYXRhOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJ dTMyIHZhbCA9IChJOTE1X0xQRV9QSVBFX0FfSU5URVJSVVBUIHwKKwkJSTkxNV9MUEVfUElQRV9C X0lOVEVSUlVQVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBp cnFmbGFncyk7CisKKwkvKgorCSAqIFZMVl9JRVIgaXMgYWxyZWFkeSBzZXQgaW4gdGhlIHZsdl9k aXNwbGF5X3Bvc3RpbnN0YWxsKCksCisJICogd2Ugb25seSBjaGFuZ2UgVkxWX0lJUiBhbmQgVkxW X0lNUgorCSAqLworCWRldl9wcml2LT5pcnFfbWFzayAmPSB+dmFsOworCUk5MTVfV1JJVEUoVkxW X0lJUiwgdmFsKTsKKwlJOTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7CisJSTkxNV9XUklURShWTFZf SU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCVBPU1RJTkdfUkVBRChWTFZfSU1SKTsKKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworfQor CitzdGF0aWMgdm9pZCBscGVfYXVkaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGQtPmNoaXBfZGF0YTsKKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOworCXUzMiB2YWwgPSAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQ VCB8CisJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJLyoKKwkgKiBWTFZfSUVSIGlzIGFs cmVhZHkgc2V0IGluIHRoZSB2bHZfZGlzcGxheV9wb3N0aW5zdGFsbCgpLAorCSAqIHdlIG9ubHkg Y2hhbmdlIFZMVl9JSVIgYW5kIFZMVl9JTVIKKwkgKi8KKwlkZXZfcHJpdi0+aXJxX21hc2sgfD0g dmFsOworCUk5MTVfV1JJVEUoVkxWX0lNUiwgZGV2X3ByaXYtPmlycV9tYXNrKTsKKwlJOTE1X1dS SVRFKFZMVl9JSVIsIHZhbCk7CisJSTkxNV9XUklURShWTFZfSUlSLCB2YWwpOworCVBPU1RJTkdf UkVBRChWTFZfSUlSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFf bG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxwZV9hdWRpb19p cnFjaGlwID0geworCS5uYW1lID0gImhkbWlfbHBlX2F1ZGlvX2lycWNoaXAiLAorCS5pcnFfbWFz ayA9IGxwZV9hdWRpb19pcnFfbWFzaywKKwkuaXJxX3VubWFzayA9IGxwZV9hdWRpb19pcnFfdW5t YXNrLAorfTsKKworc3RhdGljIGludCBscGVfYXVkaW9faXJxX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBpcnEgPSBkZXZfcHJpdi0+bHBlX2F1ZGlvLmly cTsKKworCVdBUk5fT04oIWludGVsX2lycXNfZW5hYmxlZChkZXZfcHJpdikpOworCWlycV9zZXRf Y2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmbHBlX2F1ZGlvX2lycWNoaXAsCisJCQkJ aGFuZGxlX3NpbXBsZV9pcnEsCisJCQkJImhkbWlfbHBlX2F1ZGlvX2lycV9oYW5kbGVyIik7CisK KwlyZXR1cm4gaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkZXZfcHJpdik7Cit9CisKKy8qKgorICog aW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKCkgLSBmb3J3YXJkcyB0aGUgTFBFIGF1ZGlvIGly cQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAq IHRoZSBMUEUgQXVkaW8gaXJxIGlzIGZvcndhcmRlZCB0byB0aGUgaXJxIGhhbmRsZXIgcmVnaXN0 ZXJlZCBieSBMUEUgYXVkaW8KKyAqIGRyaXZlci4KKyAqLwordm9pZCBpbnRlbF9scGVfYXVkaW9f aXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBy ZXQ7CisKKwlyZXQgPSBnZW5lcmljX2hhbmRsZV9pcnEoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEp OworCWlmIChyZXQpCisJCURSTV9FUlJPUl9SQVRFTElNSVRFRCgiZXJyb3IgaGFuZGxpbmcgTFBF IGF1ZGlvIGlycTogJWRcbiIsCisJCQkJcmV0KTsKK30KKworLyoqCisgKiBpbnRlbF9scGVfYXVk aW9fZGV0ZWN0KCkgLSBjaGVjayAmIHNldHVwIGxwZSBhdWRpbyBpZiBwcmVzZW50CisgKiBAZGV2 X3ByaXY6IHRoZSBpOTE1IGRybSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogRGV0ZWN0IGlm IGxwZSBhdWRpbyBpcyBwcmVzZW50CisgKgorICogUmV0dXJuOiB0cnVlIGlmIGxwZSBhdWRpbyBw cmVzZW50IGVsc2UgUmV0dXJuID0gZmFsc2UKKyAqLworYm9vbCBpbnRlbF9scGVfYXVkaW9fZGV0 ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgbHBlX3ByZXNl bnQgPSBmYWxzZTsKKworCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllW SUVXKGRldl9wcml2KSkgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRv bV9oZGF1ZGlvX2lkc1tdID0geworCQkJLyogQmF5dHJhaWwgKi8KKwkJCXtQQ0lfREVWSUNFKFBD SV9WRU5ET1JfSURfSU5URUwsIDB4MGYwNCl9LAorCQkJLyogQnJhc3dlbGwgKi8KKwkJCXtQQ0lf REVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjI4NCl9LAorCQkJe30KKwkJfTsKKworCQlp ZiAoIXBjaV9kZXZfcHJlc2VudChhdG9tX2hkYXVkaW9faWRzKSkgeworCQkJRFJNX0lORk8oIiVz JXNcbiIsICJIRGF1ZGlvIGNvbnRyb2xsZXIgbm90IGRldGVjdGVkLCIsCisJCQkJInVzaW5nIExQ RSBhdWRpbyBpbnN0ZWFkXG4iKTsKKwkJCWxwZV9wcmVzZW50ID0gdHJ1ZTsKKwkJfQorCX0KKwly ZXR1cm4gbHBlX3ByZXNlbnQ7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1ZGlvX3NldHVwKCkg LSBzZXR1cCB0aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBhbmQg aTkxNQorICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoK KyAqIHNldCB1cCB0aGUgbWluaW11bSByZXF1aXJlZCByZXNvdXJjZXMgZm9yIHRoZSBicmlkZ2U6 IGlycSBjaGlwLAorICogcGxhdGZvcm0gcmVzb3VyY2UgYW5kIHBsYXRmb3JtIGRldmljZS4gaTkx NSBkZXZpY2UgaXMgc2V0IGFzIHBhcmVudAorICogb2YgdGhlIG5ldyBwbGF0Zm9ybSBkZXZpY2Uu CisgKgorICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24v aW5pdGlhbGl6YXRpb24gZmFpbHMKKyAqLworaW50IGludGVsX2xwZV9hdWRpb19zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCWRldl9wcml2 LT5scGVfYXVkaW8uaXJxID0gaXJxX2FsbG9jX2Rlc2MoMCk7CisJaWYgKGRldl9wcml2LT5scGVf YXVkaW8uaXJxIDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlEgZGVz YzogJWRcbiIsCisJCQlkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisJCXJldCA9IGRldl9wcml2 LT5scGVfYXVkaW8uaXJxOworCQlnb3RvIGVycjsKKwl9CisKKwlEUk1fREVCVUcoImlycSA9ICVk XG4iLCBkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisKKwlyZXQgPSBscGVfYXVkaW9faXJxX2lu aXQoZGV2X3ByaXYpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXplIGlycWNoaXAgZm9yIGxwZSBhdWRpbzogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVy cl9mcmVlX2lycTsKKwl9CisKKwlkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYgPSBscGVfYXVk aW9fcGxhdGRldl9jcmVhdGUoZGV2X3ByaXYpOworCisJaWYgKElTX0VSUihkZXZfcHJpdi0+bHBl X2F1ZGlvLnBsYXRkZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2X3ByaXYtPmxwZV9hdWRpby5w bGF0ZGV2KTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGxwZSBhdWRpbyBwbGF0Zm9y bSBkZXZpY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJ cmV0dXJuIDA7CitlcnJfZnJlZV9pcnE6CisJaXJxX2ZyZWVfZGVzYyhkZXZfcHJpdi0+bHBlX2F1 ZGlvLmlycSk7CitlcnI6CisJZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEgPSAtMTsKKwlkZXZfcHJp di0+bHBlX2F1ZGlvLnBsYXRkZXYgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisg KiBpbnRlbF9scGVfYXVkaW9faW5pdCgpIC0gZGV0ZWN0IGFuZCBzZXR1cCB0aGUgYnJpZGdlIGJl dHdlZW4gSERNSSBMUEUgQXVkaW8KKyAqIGRyaXZlciBhbmQgaTkxNQorICogQGRldl9wcml2OiB0 aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIFJldHVybjogMCBpZiBzdWNj ZXNzZnVsLiBub24temVybyBpZiBkZXRlY3Rpb24gb3IKKyAqIGxsb2NhdGlvbi9pbml0aWFsaXph dGlvbiBmYWlscworICovCitpbnQgaW50ZWxfbHBlX2F1ZGlvX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKGludGVs X2xwZV9hdWRpb19kZXRlY3QoZGV2X3ByaXYpKSB7CisJCXJldCA9IGludGVsX2xwZV9hdWRpb19z ZXR1cChkZXZfcHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g c2V0dXAgTFBFIEF1ZGlvIGJyaWRnZVxuIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgor ICogaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKCkgLSBkZXN0cm95IHRoZSBicmlkZ2UgYmV0d2Vl biBIRE1JIExQRQorICogYXVkaW8gZHJpdmVyIGFuZCBpOTE1CisgKiBAZGV2X3ByaXY6IHRoZSBp OTE1IGRybSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogcmVsZWFzZSBhbGwgdGhlIHJlc291 cmNlcyBmb3IgTFBFIGF1ZGlvIDwtPiBpOTE1IGJyaWRnZS4KKyAqLwordm9pZCBpbnRlbF9scGVf YXVkaW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJaWYgKCFI QVNfTFBFX0FVRElPKGRldl9wcml2KSkKKwkJcmV0dXJuOworCisJZGVzYyA9IGlycV90b19kZXNj KGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKKworCS8qKgorCSAqIG1hc2sgTFBFIGF1ZGlvIGly cSBiZWZvcmUgZGVzdHJveWluZworCSAqLworCWxwZV9hdWRpb19pcnFfbWFzaygmZGVzYy0+aXJx X2RhdGEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxh Z3MpOworCisJbHBlX2F1ZGlvX3BsYXRkZXZfZGVzdHJveShkZXZfcHJpdik7CisKKwlpcnFfZnJl ZV9kZXNjKGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmggYi9pbmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjRjNDQ5Ci0tLSAvZGV2L251bGwK KysrIGIvaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0lOVEVMX0xQRV9B VURJT19IXworI2RlZmluZSBfSU5URUxfTFBFX0FVRElPX0hfCisKKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorCisjZGVmaW5lIEhETUlfTUFYX0VMRF9CWVRFUwkxMjgKKworc3RydWN0IGludGVs X2hkbWlfbHBlX2F1ZGlvX2VsZCB7CisJaW50IHBvcnRfaWQ7CisJdW5zaWduZWQgY2hhciBlbGRf ZGF0YVtIRE1JX01BWF9FTERfQllURVNdOworfTsKKworc3RydWN0IGludGVsX2hkbWlfbHBlX2F1 ZGlvX3BkYXRhIHsKKwlib29sIG5vdGlmeV9wZW5kaW5nOworCWludCB0bWRzX2Nsb2NrX3NwZWVk OworCWJvb2wgaGRtaV9jb25uZWN0ZWQ7CisJc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlvX2Vs ZCBlbGQ7CisJdm9pZCAoKm5vdGlmeV9hdWRpb19scGUpKHZvaWQgKmF1ZGlvX3B0cik7CisJc3Bp bmxvY2tfdCBscGVfYXVkaW9fc2xvY2s7Cit9OworCisjZW5kaWYgLyogX0k5MTVfTFBFX0FVRElP X0hfICovCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==