From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [PATCH V2 1/7] drm/i915: setup bridge for HDMI LPE audio driver Date: Sat, 7 Jan 2017 06:51:03 +0530 Message-ID: <20170107012109.25744-2-jerome.anand@intel.com> References: <20170107012109.25744-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: <20170107012109.25744-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 MTVfaXJxLmMgICAgICAgIHwgIDE2ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o ICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYyB8 IDM1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZHJtL2ludGVs X2xwZV9hdWRpby5oICAgICAgICAgIHwgIDQ1ICsrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ1MiBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9kcm0vaW50ZWxfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9p OTE1LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CmluZGV4IDEwNDI5NmQuLmJkOWI3 NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0CisrKyBiL0RvY3VtZW50 YXRpb24vZ3B1L2k5MTUucnN0CkBAIC0yMjUsNiArMjI1LDE1IEBAIERpc3BsYXkgUExMcwogLi4g a2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwbGxfbWdyLmgKICAgIDpp bnRlcm5hbDoKIAoraW50ZWwgaGRtaSBscGUgYXVkaW8gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHBlX2F1ZGlvLmMKKyAgIDpkb2M6ICBMUEUgQXVkaW8gaW50ZWdyYXRpb24gZm9yIEhETUkg b3IgRFAgcGxheWJhY2sKKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xwZV9hdWRpby5jCisgICA6aW50ZXJuYWw6CisKIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBD b21tYW5kIFN1Ym1pc3Npb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA1MTk2NTA5Li4yYmNhMjM5IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQpAQCAtMTI3LDYgKzEyNyw5IEBAIGk5MTUteSArPSBpbnRlbF9ndnQubwogaW5j bHVkZSAkKHNyYykvZ3Z0L01ha2VmaWxlCiBlbmRpZgogCisjIExQRSBBdWRpbyBmb3IgVkxWIGFu ZCBDSFQKK2k5MTUteSArPSBpbnRlbF9scGVfYXVkaW8ubworCiBvYmotJChDT05GSUdfRFJNX0k5 MTUpICs9IGk5MTUubwogCiBDRkxBR1NfaTkxNV90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNGQyMmI0Yi4uNzBkNzI4YiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jCkBAIC0xMTMxLDcgKzExMzEsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZl cl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYgKElTX0dF TjUoZGV2X3ByaXYpKQogCQlpbnRlbF9ncHVfaXBzX2luaXQoZGV2X3ByaXYpOwogCi0JaTkxNV9h dWRpb19jb21wb25lbnRfaW5pdChkZXZfcHJpdik7CisJaWYgKGludGVsX2xwZV9hdWRpb19pbml0 KGRldl9wcml2KSA8IDApCisJCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3ByaXYpOwog CiAJLyoKIAkgKiBTb21lIHBvcnRzIHJlcXVpcmUgY29ycmVjdGx5IHNldC11cCBocGQgcmVnaXN0 ZXJzIGZvciBkZXRlY3Rpb24gdG8KQEAgLTExNDksNyArMTE1MCwxMCBAQCBzdGF0aWMgdm9pZCBp OTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAg Ki8KIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogewotCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoZGV2X3By aXYpOworCWlmIChIQVNfTFBFX0FVRElPKGRldl9wcml2KSkKKwkJaW50ZWxfbHBlX2F1ZGlvX3Rl YXJkb3duKGRldl9wcml2KTsKKwllbHNlCisJCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAo ZGV2X3ByaXYpOwogCiAJaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwogCWFjcGlfdmlkZW9fdW5y ZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggN2I0MzY2Mi4uMmY4MTY1ZSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yNDYwLDYgKzI0NjAsMTIgQEAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewogCS8qIFVzZWQgdG8gc2F2ZSB0aGUgcGlwZS10by1lbmNvZGVyIG1h cHBpbmcgZm9yIGF1ZGlvICovCiAJc3RydWN0IGludGVsX2VuY29kZXIgKmF2X2VuY19tYXBbSTkx NV9NQVhfUElQRVNdOwogCisJLyogbmVjZXNzYXJ5IHJlc291cmNlIHNoYXJpbmcgd2l0aCBIRE1J IExQRSBhdWRpbyBkcml2ZXIuICovCisJc3RydWN0IHsKKwkJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGxhdGRldjsKKwkJaW50CWlycTsKKwl9IGxwZV9hdWRpbzsKKwogCS8qCiAJICogTk9URTog VGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIg cGF0Y2gKIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBs YWNlLgpAQCAtMjg1OSw2ICsyODY1LDggQEAgaW50ZWxfaW5mbyhjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKICNkZWZpbmUgSEFTX1BPT0xFRF9FVShkZXZfcHJpdikJ KChkZXZfcHJpdiktPmluZm8uaGFzX3Bvb2xlZF9ldSkKIAorI2RlZmluZSBIQVNfTFBFX0FVRElP KGRldl9wcml2KSAoKGRldl9wcml2KS0+bHBlX2F1ZGlvLnBsYXRkZXYgIT0gTlVMTCkKKwogI2Rl ZmluZSBJTlRFTF9QQ0hfREVWSUNFX0lEX01BU0sJCTB4ZmYwMAogI2RlZmluZSBJTlRFTF9QQ0hf SUJYX0RFVklDRV9JRF9UWVBFCQkweDNiMDAKICNkZWZpbmUgSU5URUxfUENIX0NQVF9ERVZJQ0Vf SURfVFlQRQkJMHgxYzAwCkBAIC0zNjIwLDYgKzM2MjgsMTMgQEAgZXh0ZXJuIGludCBpOTE1X3Jl c3RvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkx NV9zZXR1cF9zeXNmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBp OTE1X3RlYXJkb3duX3N5c2ZzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAK Ky8qIGk5MTVfbHBlX2F1ZGlvLmMgKi8KK2ludCAgaW50ZWxfbHBlX2F1ZGlvX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCAgaW50ZWxfbHBlX2F1ZGlvX3NldHVw KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGludGVsX2xwZV9hdWRp b190ZWFyZG93bihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpbnRl bF9scGVfYXVkaW9faXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKK2Jvb2wgaW50ZWxfbHBlX2F1ZGlvX2RldGVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOworCiAvKiBpbnRlbF9pMmMuYyAqLwogZXh0ZXJuIGludCBpbnRlbF9zZXR1cF9n bWJ1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaW50 ZWxfdGVhcmRvd25fZ21idXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGEwZTcwZjUuLmQ5MzkzZDZhIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmMKQEAgLTE4OTMsNiArMTg5MywxMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFs bGV5dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCSAqIHNpZ25hbGxlZCBp biBpaXIgKi8KIAkJdmFsbGV5dmlld19waXBlc3RhdF9pcnFfYWNrKGRldl9wcml2LCBpaXIsIHBp cGVfc3RhdHMpOwogCisJCWlmIChpaXIgJiAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8CisJ CQkgICBJOTE1X0xQRV9QSVBFX0JfSU5URVJSVVBUKSkKKwkJCWludGVsX2xwZV9hdWRpb19pcnFf aGFuZGxlcihkZXZfcHJpdik7CisKIAkJLyoKIAkJICogVkxWX0lJUiBpcyBzaW5nbGUgYnVmZmVy ZWQsIGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKIAkJICogZnJvbSBQSVBFU1RBVC9QT1JUX0hPVFBM VUdfU1RBVCwgaGVuY2UgY2xlYXIgaXQgbGFzdC4KQEAgLTE5NzMsNiArMTk3NywxMSBAQCBzdGF0 aWMgaXJxcmV0dXJuX3QgY2hlcnJ5dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcp CiAJCSAqIHNpZ25hbGxlZCBpbiBpaXIgKi8KIAkJdmFsbGV5dmlld19waXBlc3RhdF9pcnFfYWNr KGRldl9wcml2LCBpaXIsIHBpcGVfc3RhdHMpOwogCisJCWlmIChpaXIgJiAoSTkxNV9MUEVfUElQ RV9BX0lOVEVSUlVQVCB8CisJCQkgICBJOTE1X0xQRV9QSVBFX0JfSU5URVJSVVBUIHwKKwkJCSAg IEk5MTVfTFBFX1BJUEVfQ19JTlRFUlJVUFQpKQorCQkJaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5k bGVyKGRldl9wcml2KTsKKwogCQkvKgogCQkgKiBWTFZfSUlSIGlzIHNpbmdsZSBidWZmZXJlZCwg YW5kIHJlZmxlY3RzIHRoZSBsZXZlbAogCQkgKiBmcm9tIFBJUEVTVEFUL1BPUlRfSE9UUExVR19T VEFULCBoZW5jZSBjbGVhciBpdCBsYXN0LgpAQCAtMjkxNCw2ICsyOTIzLDcgQEAgc3RhdGljIHZv aWQgdmx2X2Rpc3BsYXlfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAl1MzIgcGlwZXN0YXRfbWFzazsKIAl1MzIgZW5hYmxlX21hc2s7CiAJZW51bSBw aXBlIHBpcGU7CisJdTMyIHZhbDsKIAogCXBpcGVzdGF0X21hc2sgPSBQTEFORV9GTElQX0RPTkVf SU5UX1NUQVRVU19WTFYgfAogCQkJUElQRV9DUkNfRE9ORV9JTlRFUlJVUFRfU1RBVFVTOwpAQCAt MjkzMCw2ICsyOTQwLDEyIEBAIHN0YXRpYyB2b2lkIHZsdl9kaXNwbGF5X2lycV9wb3N0aW5zdGFs bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAlXQVJOX09OKGRldl9wcml2 LT5pcnFfbWFzayAhPSB+MCk7CiAKKwl2YWwgPSAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8 CisJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQgfAorCQlJOTE1X0xQRV9QSVBFX0NfSU5URVJS VVBUKTsKKworCWVuYWJsZV9tYXNrIHw9IHZhbDsKKwogCWRldl9wcml2LT5pcnFfbWFzayA9IH5l bmFibGVfbWFzazsKIAogCUdFTjVfSVJRX0lOSVQoVkxWXywgZGV2X3ByaXYtPmlycV9tYXNrLCBl bmFibGVfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAwMDk3MGFhLi42NDNiYzZl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTI0MjgsNiArMjQyOCw5IEBAIGVudW0gc2ts X2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDww KQogI2RlZmluZSBJOTE1X0JTRF9VU0VSX0lOVEVSUlVQVAkJCQkoMTw8MjUpCiAKKyNkZWZpbmUg STkxNV9IRE1JX0xQRV9BVURJT19CQVNFCShWTFZfRElTUExBWV9CQVNFICsgMHg2NTAwMCkKKyNk ZWZpbmUgSTkxNV9IRE1JX0xQRV9BVURJT19TSVpFCTB4MTAwMAorCiAjZGVmaW5lIEdFTjZfQlNE X1JOQ0lECQkJX01NSU8oMHgxMjE5OCkKIAogI2RlZmluZSBHRU43X0ZGX1RIUkVBRF9NT0RFCQlf TU1JTygweDIwYTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVf YXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYwpAQCAtMCwwICsxLDM1NSBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBQ aWVycmUtTG91aXMgQm9zc2FydCA8cGllcnJlLWxvdWlzLmJvc3NhcnRAbGludXguaW50ZWwuY29t PgorICogICAgSmVyb21lIEFuYW5kIDxqZXJvbWUuYW5hbmRAaW50ZWwuY29tPgorICogICAgYmFz ZWQgb24gVkVEIHBhdGNoZXMKKyAqCisgKi8KKworLyoqCisgKiBET0M6IExQRSBBdWRpbyBpbnRl Z3JhdGlvbiBmb3IgSERNSSBvciBEUCBwbGF5YmFjaworICoKKyAqIE1vdGl2YXRpb246CisgKiBB dG9tIHBsYXRmb3JtcyAoZS5nLiB2YWxsZXl2aWV3IGFuZCBjaGVycnlUcmFpbCkgaW50ZWdyYXRl cyBhIERNQS1iYXNlZAorICogaW50ZXJmYWNlIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSB0cmFk aXRpb25hbCBIRGF1ZGlvIHBhdGguIFdoaWxlIHRoaXMKKyAqIG1vZGUgaXMgdW5yZWxhdGVkIHRv IHRoZSBMUEUgYWthIFNTVCBhdWRpbyBlbmdpbmUsIHRoZSBkb2N1bWVudGF0aW9uIHJlZmVycwor ICogdG8gdGhpcyBtb2RlIGFzIExQRSBzbyB3ZSBrZWVwIHRoaXMgbm90YXRpb24gZm9yIHRoZSBz YWtlIG9mIGNvbnNpc3RlbmN5LgorICoKKyAqIFRoZSBpbnRlcmZhY2UgaXMgaGFuZGxlZCBieSBh IHNlcGFyYXRlIHN0YW5kYWxvbmUgZHJpdmVyIG1haW50YWluZWQgaW4gdGhlCisgKiBBTFNBIHN1 YnN5c3RlbSBmb3Igc2ltcGxpY2l0eS4gVG8gbWluaW1pemUgdGhlIGludGVyYWN0aW9uIGJldHdl ZW4gdGhlIHR3bworICogc3Vic3lzdGVtcywgYSBicmlkZ2UgaXMgc2V0dXAgYmV0d2VlbiB0aGUg aGRtaS1scGUtYXVkaW8gYW5kIGk5MTU6CisgKiAxLiBDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ug dG8gc2hhcmUgTU1JTy9JUlEgcmVzb3VyY2VzCisgKiAyLiBNYWtlIHRoZSBwbGF0Zm9ybSBkZXZp Y2UgY2hpbGQgb2YgaTkxNSBkZXZpY2UgZm9yIHJ1bnRpbWUgUE0uCisgKiAzLiBDcmVhdGUgSVJR IGNoaXAgdG8gZm9yd2FyZCB0aGUgTFBFIGF1ZGlvIGlycXMuCisgKiB0aGUgaGRtaS1scGUtYXVk aW8gZHJpdmVyIHByb2JlcyB0aGUgbHBlIGF1ZGlvIGRldmljZSBhbmQgY3JlYXRlcyBhIG5ldwor ICogc291bmQgY2FyZAorICoKKyAqIFRocmVhdHM6CisgKiBEdWUgdG8gdGhlIHJlc3RyaWN0aW9u IGluIExpbnV4IHBsYXRmb3JtIGRldmljZSBtb2RlbCwgdXNlciBuZWVkIG1hbnVhbGx5CisgKiB1 bmluc3RhbGwgdGhlIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBiZWZvcmUgdW5pbnN0YWxsaW5nIGk5 MTUgbW9kdWxlLAorICogb3RoZXJ3aXNlIHdlIG1pZ2h0IHJ1biBpbnRvIHVzZS1hZnRlci1mcmVl IGlzc3VlcyBhZnRlciBpOTE1IHJlbW92ZXMgdGhlCisgKiBwbGF0Zm9ybSBkZXZpY2U6IGV2ZW4g dGhvdWdoIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBpcyByZWxlYXNlZCwgdGhlIG1vZHVsZXMKKyAq IGlzIHN0aWxsIGluICJpbnN0YWxsZWQiIHN0YXR1cy4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbjoK KyAqIFRoZSBNTUlPL1JFRyBwbGF0Zm9ybSByZXNvdXJjZXMgYXJlIGNyZWF0ZWQgYWNjb3JkaW5n IHRvIHRoZSByZWdpc3RlcnMKKyAqIHNwZWNpZmljYXRpb24uCisgKiBXaGVuIGZvcndhcmRpbmcg TFBFIGF1ZGlvIGlycXMsIHRoZSBmbG93IGNvbnRyb2wgaGFuZGxlciBzZWxlY3Rpb24gZGVwZW5k cworICogb24gdGhlIHBsYXRmb3JtLCBmb3IgZXhhbXBsZSBvbiB2YWxsZXl2aWV3IGhhbmRsZV9z aW1wbGVfaXJxIGlzIGVub3VnaC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxk cm0vaW50ZWxfbHBlX2F1ZGlvLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoK K2xwZV9hdWRpb19wbGF0ZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCWludCBy ZXQ7CisJc3RydWN0IHJlc291cmNlIHJzY1syXSA9IHt9OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBsYXRkZXY7CisJdTY0ICpkbWFfbWFzazsKKwlzdHJ1Y3QgaW50ZWxfaGRtaV9scGVfYXVk aW9fcGRhdGEgKnBkYXRhOworCisJaWYgKGRldl9wcml2LT5scGVfYXVkaW8uaXJxIDwgMCkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlwbGF0ZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2Fs bG9jKCJoZG1pLWxwZS1hdWRpbyIsIC0xKTsKKwlpZiAoIXBsYXRkZXYpIHsKKwkJcmV0ID0gLUVO T01FTTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgTFBFIGF1ZGlvIHBsYXRmb3Jt IGRldmljZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHRvIHdvcmstYXJvdW5kIGNoZWNr X2FkZHIgaW4gbm9tbXVfbWFwX3NnKCkgKi8KKwlkbWFfbWFzayA9IGttYWxsb2Moc2l6ZW9mKCpw bGF0ZGV2LT5kZXYuZG1hX21hc2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRtYV9tYXNrKSB7CisJ CXJldCA9IC1FTk9NRU07CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYV9tYXNr XG4iKTsKKwkJZ290byBlcnJfcHV0X2RldjsKKwl9CisJKmRtYV9tYXNrID0gRE1BX0JJVF9NQVNL KDMyKTsKKwlwbGF0ZGV2LT5kZXYuZG1hX21hc2sgPSBkbWFfbWFzazsKKwlwbGF0ZGV2LT5kZXYu Y29oZXJlbnRfZG1hX21hc2sgPSAqZG1hX21hc2s7CisKKwlyc2NbMF0uc3RhcnQgICAgPSByc2Nb MF0uZW5kID0gZGV2X3ByaXYtPmxwZV9hdWRpby5pcnE7CisJcnNjWzBdLmZsYWdzICAgID0gSU9S RVNPVVJDRV9JUlE7CisJcnNjWzBdLm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLWlycSI7CisK Kwlyc2NbMV0uc3RhcnQgICAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCisJ CUk5MTVfSERNSV9MUEVfQVVESU9fQkFTRTsKKwlyc2NbMV0uZW5kICAgICAgPSBwY2lfcmVzb3Vy Y2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCisJCUk5MTVfSERNSV9MUEVfQVVESU9fQkFTRSArIEk5 MTVfSERNSV9MUEVfQVVESU9fU0laRSAtIDE7CisJcnNjWzFdLmZsYWdzICAgID0gSU9SRVNPVVJD RV9NRU07CisJcnNjWzFdLm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLW1taW8iOworCisJcmV0 ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGxhdGRldiwgcnNjLCAyKTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFkZCByZXNvdXJjZSBmb3IgcGxhdGZvcm0g ZGV2aWNlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX3B1dF9kZXY7CisJfQorCisJcGRh dGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKworCWlmIChwZGF0YSA9 PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B1dF9kZXY7CisJfQorCXBs YXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CisJc3Bpbl9sb2NrX2luaXQoJnBkYXRh LT5scGVfYXVkaW9fc2xvY2spOworCisJLyogZm9yIExQRSBhdWRpbyBkcml2ZXIncyBydW50aW1l LVBNICovCisJcGxhdGRldi0+ZGV2LnBhcmVudCA9IGRldi0+ZGV2OworCXJldCA9IHBsYXRmb3Jt X2RldmljZV9hZGQocGxhdGRldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBhZGQgTFBFIGF1ZGlvIHBsYXRmb3JtIGRldmljZTogJWRcbiIsCisJCQlyZXQpOworCQlnb3Rv IGVycl9wdXRfZGV2OworCX0KKworCXJldHVybiBwbGF0ZGV2OworZXJyX3B1dF9kZXY6CisJcGxh dGZvcm1fZGV2aWNlX3B1dChwbGF0ZGV2KTsKKwlrZnJlZShkbWFfbWFzayk7CitlcnI6CisJcmV0 dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RhdGljIHZvaWQgbHBlX2F1ZGlvX3BsYXRkZXZfZGVz dHJveShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJcGxhdGZvcm1fZGV2 aWNlX3VucmVnaXN0ZXIoZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2KTsKKwlrZnJlZShkZXZf cHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYtPmRldi5kbWFfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lk IGxwZV9hdWRpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkLT5jaGlwX2RhdGE7CisJdW5zaWduZWQgbG9uZyBp cnFmbGFnczsKKwl1MzIgdmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAorCQlJOTE1 X0xQRV9QSVBFX0JfSU5URVJSVVBUKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ aXJxX2xvY2ssIGlycWZsYWdzKTsKKworCWRldl9wcml2LT5pcnFfbWFzayAmPSB+dmFsOworCUk5 MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKKwlJOTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7CisJSTkx NV9XUklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOworCVBPU1RJTkdfUkVBRChWTFZf SU1SKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJx ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBscGVfYXVkaW9faXJxX21hc2soc3RydWN0IGlycV9k YXRhICpkKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGQtPmNoaXBf ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXUzMiB2YWwgPSAoSTkxNV9MUEVfUElQ RV9BX0lOVEVSUlVQVCB8CisJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQpOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJZGV2X3ByaXYt PmlycV9tYXNrIHw9IHZhbDsKKwlJOTE1X1dSSVRFKFZMVl9JTVIsIGRldl9wcml2LT5pcnFfbWFz ayk7CisJSTkxNV9XUklURShWTFZfSUlSLCB2YWwpOworCUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFs KTsKKwlQT1NUSU5HX1JFQUQoVkxWX0lJUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hp cCBscGVfYXVkaW9faXJxY2hpcCA9IHsKKwkubmFtZSA9ICJoZG1pX2xwZV9hdWRpb19pcnFjaGlw IiwKKwkuaXJxX21hc2sgPSBscGVfYXVkaW9faXJxX21hc2ssCisJLmlycV91bm1hc2sgPSBscGVf YXVkaW9faXJxX3VubWFzaywKK307CisKK3N0YXRpYyBpbnQgbHBlX2F1ZGlvX2lycV9pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgaXJxID0gZGV2X3ByaXYt PmxwZV9hdWRpby5pcnE7CisKKwlXQVJOX09OKCFpbnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYp KTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmxwZV9hdWRpb19p cnFjaGlwLAorCQkJCWhhbmRsZV9zaW1wbGVfaXJxLAorCQkJCSJoZG1pX2xwZV9hdWRpb19pcnFf aGFuZGxlciIpOworCisJcmV0dXJuIGlycV9zZXRfY2hpcF9kYXRhKGlycSwgZGV2X3ByaXYpOwor fQorCisvKioKKyAqIGludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcigpIC0gZm9yd2FyZHMgdGhl IExQRSBhdWRpbyBpcnEKKyAqIEBkZXZfcHJpdjogdGhlIGk5MTUgZHJtIGRldmljZSBwcml2YXRl IGRhdGEKKyAqCisgKiB0aGUgTFBFIEF1ZGlvIGlycSBpcyBmb3J3YXJkZWQgdG8gdGhlIGlycSBo YW5kbGVyIHJlZ2lzdGVyZWQgYnkgTFBFIGF1ZGlvCisgKiBkcml2ZXIuCisgKi8KK3ZvaWQgaW50 ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFIQVNfTFBFX0FVRElPKGRldl9wcml2KSkKKwkJcmV0 dXJuOworCisJcmV0ID0gZ2VuZXJpY19oYW5kbGVfaXJxKGRldl9wcml2LT5scGVfYXVkaW8uaXJx KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1JfUkFURUxJTUlURUQoImVycm9yIGhhbmRsaW5nIExQ RSBhdWRpbyBpcnE6ICVkXG4iLAorCQkJCXJldCk7Cit9CisKKy8qKgorICogaW50ZWxfbHBlX2F1 ZGlvX2RldGVjdCgpIC0gY2hlY2sgJiBzZXR1cCBscGUgYXVkaW8gaWYgcHJlc2VudAorICogQGRl dl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIERldGVjdCBp ZiBscGUgYXVkaW8gaXMgcHJlc2VudAorICoKKyAqIFJldHVybjogdHJ1ZSBpZiBscGUgYXVkaW8g cHJlc2VudCBlbHNlIFJldHVybiA9IGZhbHNlCisgKi8KK2Jvb2wgaW50ZWxfbHBlX2F1ZGlvX2Rl dGVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IGxwZV9wcmVz ZW50ID0gZmFsc2U7CisKKwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpIHsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0 b21faGRhdWRpb19pZHNbXSA9IHsKKwkJCS8qIEJheXRyYWlsICovCisJCQl7UENJX0RFVklDRShQ Q0lfVkVORE9SX0lEX0lOVEVMLCAweDBmMDQpfSwKKwkJCS8qIEJyYXN3ZWxsICovCisJCQl7UENJ X0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDIyODQpfSwKKwkJCXt9CisJCX07CisKKwkJ aWYgKCFwY2lfZGV2X3ByZXNlbnQoYXRvbV9oZGF1ZGlvX2lkcykpIHsKKwkJCURSTV9JTkZPKCIl cyVzXG4iLCAiSERhdWRpbyBjb250cm9sbGVyIG5vdCBkZXRlY3RlZCwiLAorCQkJCSJ1c2luZyBM UEUgYXVkaW8gaW5zdGVhZFxuIik7CisJCQlscGVfcHJlc2VudCA9IHRydWU7CisJCX0KKwl9CisJ cmV0dXJuIGxwZV9wcmVzZW50OworfQorCisvKioKKyAqIGludGVsX2xwZV9hdWRpb19zZXR1cCgp IC0gc2V0dXAgdGhlIGJyaWRnZSBiZXR3ZWVuIEhETUkgTFBFIEF1ZGlvCisgKiBkcml2ZXIgYW5k IGk5MTUKKyAqIEBkZXZfcHJpdjogdGhlIGk5MTUgZHJtIGRldmljZSBwcml2YXRlIGRhdGEKKyAq CisgKiBzZXQgdXAgdGhlIG1pbmltdW0gcmVxdWlyZWQgcmVzb3VyY2VzIGZvciB0aGUgYnJpZGdl OiBpcnEgY2hpcCwKKyAqIHBsYXRmb3JtIHJlc291cmNlIGFuZCBwbGF0Zm9ybSBkZXZpY2UuIGk5 MTUgZGV2aWNlIGlzIHNldCBhcyBwYXJlbnQKKyAqIG9mIHRoZSBuZXcgcGxhdGZvcm0gZGV2aWNl LgorICoKKyAqIFJldHVybjogMCBpZiBzdWNjZXNzZnVsLiBub24temVybyBpZiBhbGxvY2F0aW9u L2luaXRpYWxpemF0aW9uIGZhaWxzCisgKi8KK2ludCBpbnRlbF9scGVfYXVkaW9fc2V0dXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQ7CisKKwlkZXZfcHJp di0+bHBlX2F1ZGlvLmlycSA9IGlycV9hbGxvY19kZXNjKDApOworCWlmIChkZXZfcHJpdi0+bHBl X2F1ZGlvLmlycSA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgSVJRIGRl c2M6ICVkXG4iLAorCQkJZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOworCQlyZXQgPSBkZXZfcHJp di0+bHBlX2F1ZGlvLmlycTsKKwkJZ290byBlcnI7CisJfQorCisJRFJNX0RFQlVHKCJpcnEgPSAl ZFxuIiwgZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOworCisJcmV0ID0gbHBlX2F1ZGlvX2lycV9p bml0KGRldl9wcml2KTsKKworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5p dGlhbGl6ZSBpcnFjaGlwIGZvciBscGUgYXVkaW86ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBl cnJfZnJlZV9pcnE7CisJfQorCisJZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2ID0gbHBlX2F1 ZGlvX3BsYXRkZXZfY3JlYXRlKGRldl9wcml2KTsKKworCWlmIChJU19FUlIoZGV2X3ByaXYtPmxw ZV9hdWRpby5wbGF0ZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKGRldl9wcml2LT5scGVfYXVkaW8u cGxhdGRldik7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBscGUgYXVkaW8gcGxhdGZv cm0gZGV2aWNlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKwor CXJldHVybiAwOworZXJyX2ZyZWVfaXJxOgorCWlycV9mcmVlX2Rlc2MoZGV2X3ByaXYtPmxwZV9h dWRpby5pcnEpOworZXJyOgorCWRldl9wcml2LT5scGVfYXVkaW8uaXJxID0gLTE7CisJZGV2X3By aXYtPmxwZV9hdWRpby5wbGF0ZGV2ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgor ICogaW50ZWxfbHBlX2F1ZGlvX2luaXQoKSAtIGRldGVjdCBhbmQgc2V0dXAgdGhlIGJyaWRnZSBi ZXR3ZWVuIEhETUkgTFBFIEF1ZGlvCisgKiBkcml2ZXIgYW5kIGk5MTUKKyAqIEBkZXZfcHJpdjog dGhlIGk5MTUgZHJtIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBSZXR1cm46IDAgaWYgc3Vj Y2Vzc2Z1bC4gbm9uLXplcm8gaWYgZGV0ZWN0aW9uIG9yCisgKiBsbG9jYXRpb24vaW5pdGlhbGl6 YXRpb24gZmFpbHMKKyAqLworaW50IGludGVsX2xwZV9hdWRpb19pbml0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChpbnRl bF9scGVfYXVkaW9fZGV0ZWN0KGRldl9wcml2KSkgeworCQlyZXQgPSBpbnRlbF9scGVfYXVkaW9f c2V0dXAoZGV2X3ByaXYpOworCQlpZiAocmV0IDwgMCkKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRv IHNldHVwIExQRSBBdWRpbyBicmlkZ2VcbiIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioK KyAqIGludGVsX2xwZV9hdWRpb190ZWFyZG93bigpIC0gZGVzdHJveSB0aGUgYnJpZGdlIGJldHdl ZW4gSERNSSBMUEUKKyAqIGF1ZGlvIGRyaXZlciBhbmQgaTkxNQorICogQGRldl9wcml2OiB0aGUg aTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQorICoKKyAqIHJlbGVhc2UgYWxsIHRoZSByZXNv dXJjZXMgZm9yIExQRSBhdWRpbyA8LT4gaTkxNSBicmlkZ2UuCisgKi8KK3ZvaWQgaW50ZWxfbHBl X2F1ZGlvX3RlYXJkb3duKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1 bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWlmICgh SEFTX0xQRV9BVURJTyhkZXZfcHJpdikpCisJCXJldHVybjsKKworCWRlc2MgPSBpcnFfdG9fZGVz YyhkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisKKwlscGVfYXVkaW9faXJxX21hc2soJmRlc2Mt PmlycV9kYXRhKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGly cWZsYWdzKTsKKworCWxwZV9hdWRpb19wbGF0ZGV2X2Rlc3Ryb3koZGV2X3ByaXYpOworCisJaXJx X2ZyZWVfZGVzYyhkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSk7CisKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZHJtL2ludGVsX2xwZV9hdWRpby5oIGIvaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1ZGlv LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0YzQ0OQotLS0gL2Rldi9u dWxsCisrKyBiL2luY2x1ZGUvZHJtL2ludGVsX2xwZV9hdWRpby5oCkBAIC0wLDAgKzEsNDUgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9JTlRFTF9M UEVfQVVESU9fSF8KKyNkZWZpbmUgX0lOVEVMX0xQRV9BVURJT19IXworCisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKworI2RlZmluZSBIRE1JX01BWF9FTERfQllURVMJMTI4CisKK3N0cnVjdCBp bnRlbF9oZG1pX2xwZV9hdWRpb19lbGQgeworCWludCBwb3J0X2lkOworCXVuc2lnbmVkIGNoYXIg ZWxkX2RhdGFbSERNSV9NQVhfRUxEX0JZVEVTXTsKK307CisKK3N0cnVjdCBpbnRlbF9oZG1pX2xw ZV9hdWRpb19wZGF0YSB7CisJYm9vbCBub3RpZnlfcGVuZGluZzsKKwlpbnQgdG1kc19jbG9ja19z cGVlZDsKKwlib29sIGhkbWlfY29ubmVjdGVkOworCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRp b19lbGQgZWxkOworCXZvaWQgKCpub3RpZnlfYXVkaW9fbHBlKSh2b2lkICphdWRpb19wdHIpOwor CXNwaW5sb2NrX3QgbHBlX2F1ZGlvX3Nsb2NrOworfTsKKworI2VuZGlmIC8qIF9JOTE1X0xQRV9B VURJT19IXyAqLwotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=