From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH v3 1/7] drm/i915: setup bridge for HDMI LPE audio driver Date: Thu, 24 Nov 2016 15:31:54 +0200 Message-ID: <20161124133154.GQ31595@intel.com> References: <20161124235548.16440-1-jerome.anand@intel.com> <20161124235548.16440-2-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20161124235548.16440-2-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: Jerome Anand Cc: alsa-devel@alsa-project.org, tiwai@suse.de, intel-gfx@lists.freedesktop.org, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: alsa-devel@alsa-project.org T24gRnJpLCBOb3YgMjUsIDIwMTYgYXQgMDU6MjU6NDJBTSArMDUzMCwgSmVyb21lIEFuYW5kIHdy b3RlOgo+IEVuYWJsZSBzdXBwb3J0IGZvciBIRE1JIExQRSBhdWRpbyBtb2RlIG9uIEJheXRyYWls IGFuZAo+IENoZXJyeXRyYWlsIHdoZW4gSERhdWRpbyBjb250cm9sbGVyIGlzIG5vdCBkZXRlY3Rl ZAo+IAo+IFNldHVwIG1pbmltdW0gcmVxdWlyZWQgcmVzb3VyY2VzIGR1cmluZyBpOTE1X2RyaXZl cl9sb2FkOgo+IDEuIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSBy ZXNvdXJjZXMKPiAyLiBNYWtlIHRoZSBwbGF0Zm9ybSBkZXZpY2UgY2hpbGQgb2YgaTkxNSBkZXZp Y2UgZm9yIHJ1bnRpbWUgUE0uCj4gMy4gQ3JlYXRlIElSUSBjaGlwIHRvIGZvcndhcmQgSERNSSBM UEUgYXVkaW8gaXJxcy4KPiAKPiBIRE1JIExQRSBhdWRpbyBkcml2ZXIgKGEgc3RhbmRhbG9uZSBz b3VuZCBkcml2ZXIpIHByb2JlcyB0aGUKPiBMUEUgYXVkaW8gZGV2aWNlIGFuZCBjcmVhdGVzIGEg bmV3IHNvdW5kIGNhcmQuCj4gCj4gU2lnbmVkLW9mZi1ieTogUGllcnJlLUxvdWlzIEJvc3NhcnQg PHBpZXJyZS1sb3Vpcy5ib3NzYXJ0QGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBK ZXJvbWUgQW5hbmQgPGplcm9tZS5hbmFuZEBpbnRlbC5jb20+Cj4gLS0tCj4gIERvY3VtZW50YXRp b24vZ3B1L2k5MTUucnN0ICAgICAgICAgICAgIHwgICA5ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jICAgICAgICB8ICAgOCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICAgICAgICB8ICAxNSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAg ICB8ICAyOSArKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgfCAg IDMgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYyB8IDM2OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vaW50ZWxfbHBlX2F1 ZGlvLmggICAgICAgICAgfCAgNDUgKysrKwo+ICA4IGZpbGVzIGNoYW5nZWQsIDQ3OSBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHBlX2F1ZGlvLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv ZHJtL2ludGVsX2xwZV9hdWRpby5oCj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1 L2k5MTUucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvaTkxNS5yc3QKPiBpbmRleCAxMTdkMmFiLi5h NjcxZWVlIDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2k5MTUucnN0Cj4gKysrIGIv RG9jdW1lbnRhdGlvbi9ncHUvaTkxNS5yc3QKPiBAQCAtMjEzLDYgKzIxMywxNSBAQCBWaWRlbyBC SU9TIFRhYmxlIChWQlQpCj4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF92YnRfZGVmcy5oCj4gICAgIDppbnRlcm5hbDoKPiAgCj4gK2ludGVsIGhkbWkgbHBlIGF1 ZGlvIHN1cHBvcnQKPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArLi4ga2Vy bmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCj4gKyAgIDpk b2M6ICBMUEUgQXVkaW8gaW50ZWdyYXRpb24gZm9yIEhETUkgb3IgRFAgcGxheWJhY2sKPiArCj4g Ky4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYwo+ ICsgICA6aW50ZXJuYWw6Cj4gKwo+ICBNZW1vcnkgTWFuYWdlbWVudCBhbmQgQ29tbWFuZCBTdWJt aXNzaW9uCj4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAgCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA1ODA2MDJkLi4zYTIzNjljIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBAQCAtMTI2LDYgKzEyNiw5IEBAIGk5MTUteSArPSBpbnRlbF9ndnQubwo+ ICBpbmNsdWRlICQoc3JjKS9ndnQvTWFrZWZpbGUKPiAgZW5kaWYKPiAgCj4gKyMgTFBFIEF1ZGlv IGZvciBWTFYgYW5kIENIVAo+ICtpOTE1LXkgKz0gaW50ZWxfbHBlX2F1ZGlvLm8KPiArCj4gIG9i ai0kKENPTkZJR19EUk1fSTkxNSkgKz0gaTkxNS5vCj4gIAo+ICBDRkxBR1NfaTkxNV90cmFjZV9w b2ludHMubyA6PSAtSSQoc3JjKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGI4OTNl NjcuLjkzODExZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBAQCAtMTE0NCw3ICsx MTQ0LDggQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJaWYgKElTX0dFTjUoZGV2X3ByaXYpKQo+ICAJCWludGVs X2dwdV9pcHNfaW5pdChkZXZfcHJpdik7Cj4gIAo+IC0JaTkxNV9hdWRpb19jb21wb25lbnRfaW5p dChkZXZfcHJpdik7Cj4gKwlpZiAoaW50ZWxfbHBlX2F1ZGlvX2luaXQoZGV2X3ByaXYpIDwgMCkK PiArCQlpOTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0KGRldl9wcml2KTsKPiAgCj4gIAkvKgo+ICAJ ICogU29tZSBwb3J0cyByZXF1aXJlIGNvcnJlY3RseSBzZXQtdXAgaHBkIHJlZ2lzdGVycyBmb3Ig ZGV0ZWN0aW9uIHRvCj4gQEAgLTExNjIsNyArMTE2MywxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X2Ry aXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAqLwo+ ICBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgewo+IC0JaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChkZXZf cHJpdik7Cj4gKwlpZiAoSEFTX0xQRV9BVURJTyhkZXZfcHJpdikpCj4gKwkJaW50ZWxfbHBlX2F1 ZGlvX3RlYXJkb3duKGRldl9wcml2KTsKPiArCWVsc2UKPiArCQlpOTE1X2F1ZGlvX2NvbXBvbmVu dF9jbGVhbnVwKGRldl9wcml2KTsKPiAgCj4gIAlpbnRlbF9ncHVfaXBzX3RlYXJkb3duKCk7Cj4g IAlhY3BpX3ZpZGVvX3VucmVnaXN0ZXIoKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRl eCA5NzBlNTBiLi4yYTc5MDQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTIy ODQsNiArMjI4NCwxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAkvKiBVc2VkIHRv IHNhdmUgdGhlIHBpcGUtdG8tZW5jb2RlciBtYXBwaW5nIGZvciBhdWRpbyAqLwo+ICAJc3RydWN0 IGludGVsX2VuY29kZXIgKmF2X2VuY19tYXBbSTkxNV9NQVhfUElQRVNdOwo+ICAKPiArCS8qIG5l Y2Vzc2FyeSByZXNvdXJjZSBzaGFyaW5nIHdpdGggSERNSSBMUEUgYXVkaW8gZHJpdmVyLiAqLwo+ ICsJc3RydWN0IHsKPiArCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2Owo+ICsJCWlu dAlpcnE7Cj4gKwl9IGxwZV9hdWRpbzsKPiArCj4gIAkvKgo+ICAJICogTk9URTogVGhpcyBpcyB0 aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIgcGF0Y2gKPiAg CSAqIHdpbGwgYmUgcmVqZWN0ZWQuIEluc3RlYWQgbG9vayBmb3IgYSBiZXR0ZXIgcGxhY2UuCj4g QEAgLTI3NzMsNiArMjc3OSw4IEBAIGludGVsX2luZm8oY29uc3Qgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICAKPiAgI2RlZmluZSBIQVNfUE9PTEVEX0VVKGRldl9wcml2KQko KGRldl9wcml2KS0+aW5mby5oYXNfcG9vbGVkX2V1KQo+ICAKPiArI2RlZmluZSBIQVNfTFBFX0FV RElPKGRldl9wcml2KSAoKGRldl9wcml2KS0+bHBlX2F1ZGlvLnBsYXRkZXYgIT0gTlVMTCkKPiAr Cj4gICNkZWZpbmUgSU5URUxfUENIX0RFVklDRV9JRF9NQVNLCQkweGZmMDAKPiAgI2RlZmluZSBJ TlRFTF9QQ0hfSUJYX0RFVklDRV9JRF9UWVBFCQkweDNiMDAKPiAgI2RlZmluZSBJTlRFTF9QQ0hf Q1BUX0RFVklDRV9JRF9UWVBFCQkweDFjMDAKPiBAQCAtMzU0Nyw2ICszNTU1LDEzIEBAIGV4dGVy biBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICB2b2lk IGk5MTVfc2V0dXBfc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAg dm9pZCBpOTE1X3RlYXJkb3duX3N5c2ZzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Cj4gIAo+ICsvKiBpOTE1X2xwZV9hdWRpby5jICovCj4gK2ludCAgaW50ZWxfbHBlX2F1ZGlv X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAraW50ICBpbnRlbF9s cGVfYXVkaW9fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArdm9p ZCBpbnRlbF9scGVfYXVkaW9fdGVhcmRvd24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiArdm9pZCBpbnRlbF9scGVfYXVkaW9faXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPiArYm9vbCBpbnRlbF9scGVfYXVkaW9fZGV0ZWN0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gKwo+ICAvKiBpbnRlbF9pMmMuYyAqLwo+ ICBleHRlcm4gaW50IGludGVsX3NldHVwX2dtYnVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ ICBleHRlcm4gdm9pZCBpbnRlbF90ZWFyZG93bl9nbWJ1cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCAwN2NhNzFjLi42Yzk4YjI4IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTE4OTQsNiArMTg5NCwxNSBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgdmFsbGV5dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4g IAkJdmFsbGV5dmlld19waXBlc3RhdF9pcnFfYWNrKGRldl9wcml2LCBpaXIsIHBpcGVfc3RhdHMp Owo+ICAKPiAgCQkvKgo+ICsJCSAqIExQRSBhdWRpbyBpbnRlcnJ1cHRzIGFyZSBvbmx5IGVuYWJs ZWQgb24gQmF5dHJhaWwgYW5kCj4gKwkJICogQ2hlcnJ5VmlldyBwbGF0Zm9ybXMgd2l0aG91dCBI RGF1ZGlvCj4gKwkJICovCj4gKwkJaWYgKGlpciAmIChJOTE1X0xQRV9QSVBFX0FfSU5URVJSVVBU IHwKPiArCQkJICAgSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8Cj4gKwkJCSAgIEk5MTVfTFBF X1BJUEVfQ19JTlRFUlJVUFQpKQoKTm8gcGlwZSBDIG9uIHZsdi4KCj4gKwkJCWludGVsX2xwZV9h dWRpb19pcnFfaGFuZGxlcihkZXZfcHJpdik7Cj4gKwo+ICsJCS8qCj4gIAkJICogVkxWX0lJUiBp cyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0cyB0aGUgbGV2ZWwKPiAgCQkgKiBmcm9tIFBJ UEVTVEFUL1BPUlRfSE9UUExVR19TVEFULCBoZW5jZSBjbGVhciBpdCBsYXN0Lgo+ICAJCSAqLwo+ IEBAIC0xOTc0LDYgKzE5ODMsMTUgQEAgc3RhdGljIGlycXJldHVybl90IGNoZXJyeXZpZXdfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ICAJCXZhbGxleXZpZXdfcGlwZXN0YXRfaXJx X2FjayhkZXZfcHJpdiwgaWlyLCBwaXBlX3N0YXRzKTsKPiAgCj4gIAkJLyoKPiArCQkgKiBMUEUg YXVkaW8gaW50ZXJydXB0cyBhcmUgb25seSBlbmFibGVkIG9uIEJheXRyYWlsIGFuZAo+ICsJCSAq IENoZXJyeVZpZXcgcGxhdGZvcm1zIHdpdGhvdXQgSERhdWRpbwo+ICsJCSAqLwo+ICsJCWlmIChp aXIgJiAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8Cj4gKwkJCSAgIEk5MTVfTFBFX1BJUEVf Ql9JTlRFUlJVUFQgfAo+ICsJCQkgICBJOTE1X0xQRV9QSVBFX0NfSU5URVJSVVBUKSkKPiArCQkJ aW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKGRldl9wcml2KTsKPiArCj4gKwkJLyoKPiAgCQkg KiBWTFZfSUlSIGlzIHNpbmdsZSBidWZmZXJlZCwgYW5kIHJlZmxlY3RzIHRoZSBsZXZlbAo+ICAJ CSAqIGZyb20gUElQRVNUQVQvUE9SVF9IT1RQTFVHX1NUQVQsIGhlbmNlIGNsZWFyIGl0IGxhc3Qu Cj4gIAkJICovCj4gQEAgLTI5MzAsNiArMjk0OCwxNyBAQCBzdGF0aWMgdm9pZCB2bHZfZGlzcGxh eV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAK PiAgCVdBUk5fT04oZGV2X3ByaXYtPmlycV9tYXNrICE9IH4wKTsKPiAgCj4gKwlpZiAoSVNfVkFM TEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKClRoaXMgaXMg dmx2L2NodiBzcGVjaWZpYyBjb2RlLCBzbyBubyBuZWVkIHRvIGNoZWNrIGZvciBpdC4KCj4gKwkJ LyogYWRkIGludGVycnVwdCBtYXNrcyB1bmNvbmRpdGlhbGx5IGhlcmUsIHRoZSBhY3R1YWwgdW5t YXNrCj4gKwkJICogd2lsbCB0YWtlIHBsYWNlIG9ubHkgaWYgdGhlIExQRV9BVURJTyBtb2RlIGlz IGRldGVjdGVkCj4gKwkJICovCj4gKwkJdTMyIHZhbCA9IChJOTE1X0xQRV9QSVBFX0FfSU5URVJS VVBUIHwKPiArCQkJSTkxNV9MUEVfUElQRV9CX0lOVEVSUlVQVCB8Cj4gKwkJCUk5MTVfTFBFX1BJ UEVfQ19JTlRFUlJVUFQpOwo+ICsKPiArCQllbmFibGVfbWFzayB8PSB2YWw7Cj4gKwl9Cj4gKwo+ ICAJZGV2X3ByaXYtPmlycV9tYXNrID0gfmVuYWJsZV9tYXNrOwo+ICAKPiAgCUdFTjVfSVJRX0lO SVQoVkxWXywgZGV2X3ByaXYtPmlycV9tYXNrLCBlbmFibGVfbWFzayk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCj4gaW5kZXggZmNhZDhmYS4uNmIxNmVkMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+IEBAIC0yMzk1LDYgKzIzOTUsOSBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxz IHsKPiAgI2RlZmluZSBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDwwKQo+ICAjZGVmaW5lIEk5 MTVfQlNEX1VTRVJfSU5URVJSVVBUCQkJCSgxPDwyNSkKPiAgCj4gKyNkZWZpbmUgSTkxNV9IRE1J X0xQRV9BVURJT19CQVNFCShWTFZfRElTUExBWV9CQVNFICsgMHg2NTAwMCkKPiArI2RlZmluZSBJ OTE1X0hETUlfTFBFX0FVRElPX1NJWkUJMHgxMDAwCj4gKwo+ICAjZGVmaW5lIEdFTjZfQlNEX1JO Q0lECQkJX01NSU8oMHgxMjE5OCkKPiAgCj4gICNkZWZpbmUgR0VON19GRl9USFJFQURfTU9ERQkJ X01NSU8oMHgyMGEwKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cGVfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41MzM1ZmM2Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCj4gQEAgLTAs MCArMSwzNjkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRp b24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICog ICAgUGllcnJlLUxvdWlzIEJvc3NhcnQgPHBpZXJyZS1sb3Vpcy5ib3NzYXJ0QGxpbnV4LmludGVs LmNvbT4KPiArICogICAgSmVyb21lIEFuYW5kIDxqZXJvbWUuYW5hbmRAaW50ZWwuY29tPgo+ICsg KiAgICBiYXNlZCBvbiBWRUQgcGF0Y2hlcwo+ICsgKgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBE T0M6IExQRSBBdWRpbyBpbnRlZ3JhdGlvbiBmb3IgSERNSSBvciBEUCBwbGF5YmFjawo+ICsgKgo+ ICsgKiBNb3RpdmF0aW9uOgo+ICsgKiBBdG9tIHBsYXRmb3JtcyAoZS5nLiB2YWxsZXl2aWV3IGFu ZCBjaGVycnlUcmFpbCkgaW50ZWdyYXRlcyBhIERNQS1iYXNlZAo+ICsgKiBpbnRlcmZhY2UgYXMg YW4gYWx0ZXJuYXRpdmUgdG8gdGhlIHRyYWRpdGlvbmFsIEhEYXVkaW8gcGF0aC4gV2hpbGUgdGhp cwo+ICsgKiBtb2RlIGlzIHVucmVsYXRlZCB0byB0aGUgTFBFIGFrYSBTU1QgYXVkaW8gZW5naW5l LCB0aGUgZG9jdW1lbnRhdGlvbiByZWZlcnMKPiArICogdG8gdGhpcyBtb2RlIGFzIExQRSBzbyB3 ZSBrZWVwIHRoaXMgbm90YXRpb24gZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5Lgo+ICsgKgo+ ICsgKiBUaGUgaW50ZXJmYWNlIGlzIGhhbmRsZWQgYnkgYSBzZXBhcmF0ZSBzdGFuZGFsb25lIGRy aXZlciBtYWludGFpbmVkIGluIHRoZQo+ICsgKiBBTFNBIHN1YnN5c3RlbSBmb3Igc2ltcGxpY2l0 eS4gVG8gbWluaW1pemUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3bwo+ICsgKiBzdWJz eXN0ZW1zLCBhIGJyaWRnZSBpcyBzZXR1cCBiZXR3ZWVuIHRoZSBoZG1pLWxwZS1hdWRpbyBhbmQg aTkxNToKPiArICogMS4gQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIHRvIHNoYXJlIE1NSU8vSVJR IHJlc291cmNlcwo+ICsgKiAyLiBNYWtlIHRoZSBwbGF0Zm9ybSBkZXZpY2UgY2hpbGQgb2YgaTkx NSBkZXZpY2UgZm9yIHJ1bnRpbWUgUE0uCj4gKyAqIDMuIENyZWF0ZSBJUlEgY2hpcCB0byBmb3J3 YXJkIHRoZSBMUEUgYXVkaW8gaXJxcy4KPiArICogdGhlIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBw cm9iZXMgdGhlIGxwZSBhdWRpbyBkZXZpY2UgYW5kIGNyZWF0ZXMgYSBuZXcKPiArICogc291bmQg Y2FyZAo+ICsgKgo+ICsgKiBUaHJlYXRzOgo+ICsgKiBEdWUgdG8gdGhlIHJlc3RyaWN0aW9uIGlu IExpbnV4IHBsYXRmb3JtIGRldmljZSBtb2RlbCwgdXNlciBuZWVkIG1hbnVhbGx5Cj4gKyAqIHVu aW5zdGFsbCB0aGUgaGRtaS1scGUtYXVkaW8gZHJpdmVyIGJlZm9yZSB1bmluc3RhbGxpbmcgaTkx NSBtb2R1bGUsCj4gKyAqIG90aGVyd2lzZSB3ZSBtaWdodCBydW4gaW50byB1c2UtYWZ0ZXItZnJl ZSBpc3N1ZXMgYWZ0ZXIgaTkxNSByZW1vdmVzIHRoZQo+ICsgKiBwbGF0Zm9ybSBkZXZpY2U6IGV2 ZW4gdGhvdWdoIGhkbWktbHBlLWF1ZGlvIGRyaXZlciBpcyByZWxlYXNlZCwgdGhlIG1vZHVsZXMK PiArICogaXMgc3RpbGwgaW4gImluc3RhbGxlZCIgc3RhdHVzLgo+ICsgKgo+ICsgKiBJbXBsZW1l bnRhdGlvbjoKPiArICogVGhlIE1NSU8vUkVHIHBsYXRmb3JtIHJlc291cmNlcyBhcmUgY3JlYXRl ZCBhY2NvcmRpbmcgdG8gdGhlIHJlZ2lzdGVycwo+ICsgKiBzcGVjaWZpY2F0aW9uLgo+ICsgKiBX aGVuIGZvcndhcmRpbmcgTFBFIGF1ZGlvIGlycXMsIHRoZSBmbG93IGNvbnRyb2wgaGFuZGxlciBz ZWxlY3Rpb24gZGVwZW5kcwo+ICsgKiBvbiB0aGUgcGxhdGZvcm0sIGZvciBleGFtcGxlIG9uIHZh bGxleXZpZXcgaGFuZGxlX3NpbXBsZV9pcnEgaXMgZW5vdWdoLgo+ICsgKgo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2ludGVsX2xwZV9hdWRpby5o Pgo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqCj4gK2xwZV9hdWRpb19wbGF0 ZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKPiArCWludCByZXQ7Cj4gKwlz dHJ1Y3QgcmVzb3VyY2UgcnNjWzJdID0ge307Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw bGF0ZGV2Owo+ICsJdTY0ICpkbWFfbWFzazsKPiArCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRp b19wZGF0YSAqcGRhdGE7Cj4gKwo+ICsJaWYgKGRldl9wcml2LT5scGVfYXVkaW8uaXJxIDwgMCkK PiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCj4gKwlwbGF0ZGV2ID0gcGxhdGZvcm1f ZGV2aWNlX2FsbG9jKCJoZG1pLWxwZS1hdWRpbyIsIC0xKTsKPiArCWlmICghcGxhdGRldikgewo+ ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgTFBF IGF1ZGlvIHBsYXRmb3JtIGRldmljZVxuIik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ LyogdG8gd29yay1hcm91bmQgY2hlY2tfYWRkciBpbiBub21tdV9tYXBfc2coKSAqLwo+ICsJZG1h X21hc2sgPSBrbWFsbG9jKHNpemVvZigqcGxhdGRldi0+ZGV2LmRtYV9tYXNrKSwgR0ZQX0tFUk5F TCk7Cj4gKwlpZiAoIWRtYV9tYXNrKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWFfbWFza1xuIik7Cj4gKwkJZ290byBlcnJfcHV0X2Rl djsKPiArCX0KPiArCSpkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Cj4gKwlwbGF0ZGV2LT5k ZXYuZG1hX21hc2sgPSBkbWFfbWFzazsKPiArCXBsYXRkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFz ayA9ICpkbWFfbWFzazsKPiArCj4gKwlyc2NbMF0uc3RhcnQgICAgPSByc2NbMF0uZW5kID0gZGV2 X3ByaXYtPmxwZV9hdWRpby5pcnE7Cj4gKwlyc2NbMF0uZmxhZ3MgICAgPSBJT1JFU09VUkNFX0lS UTsKPiArCXJzY1swXS5uYW1lICAgICA9ICJoZG1pLWxwZS1hdWRpby1pcnEiOwo+ICsKPiArCXJz Y1sxXS5zdGFydCAgICA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsKPiArCQlJ OTE1X0hETUlfTFBFX0FVRElPX0JBU0U7Cj4gKwlyc2NbMV0uZW5kICAgICAgPSBwY2lfcmVzb3Vy Y2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCj4gKwkJSTkxNV9IRE1JX0xQRV9BVURJT19CQVNFICsg STkxNV9IRE1JX0xQRV9BVURJT19TSVpFIC0gMTsKPiArCXJzY1sxXS5mbGFncyAgICA9IElPUkVT T1VSQ0VfTUVNOwo+ICsJcnNjWzFdLm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLW1taW8iOwo+ ICsKPiArCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBsYXRkZXYsIHJzYywg Mik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWRkIHJlc291cmNl IGZvciBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJCWdvdG8gZXJyX3B1 dF9kZXY7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBf S0VSTkVMKTsKPiArCj4gKwlpZiAocGRhdGEgPT0gTlVMTCkgewo+ICsJCXJldCA9IC1FTk9NRU07 Cj4gKwkJZ290byBlcnJfcHV0X2RldjsKPiArCX0KPiArCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9k YXRhID0gcGRhdGE7Cj4gKwlzcGluX2xvY2tfaW5pdCgmcGRhdGEtPmxwZV9hdWRpb19zbG9jayk7 Cj4gKwo+ICsJLyogZm9yIExQRSBhdWRpbyBkcml2ZXIncyBydW50aW1lLVBNICovCj4gKwlwbGF0 ZGV2LT5kZXYucGFyZW50ID0gZGV2LT5kZXY7Cj4gKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRk KHBsYXRkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFkZCBM UEUgYXVkaW8gcGxhdGZvcm0gZGV2aWNlOiAlZFxuIiwKPiArCQkJcmV0KTsKPiArCQlnb3RvIGVy cl9wdXRfZGV2Owo+ICsJfQo+ICsKPiArCXJldHVybiBwbGF0ZGV2Owo+ICtlcnJfcHV0X2RldjoK PiArCXBsYXRmb3JtX2RldmljZV9wdXQocGxhdGRldik7Cj4gKwlrZnJlZShkbWFfbWFzayk7Cj4g K2VycjoKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxw ZV9hdWRpb19wbGF0ZGV2X2Rlc3Ryb3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICt7Cj4gKwlpZiAoIUhBU19MUEVfQVVESU8oZGV2X3ByaXYpKQo+ICsJCXJldHVybjsKPiAr CXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7 Cj4gKwlrZnJlZShkZXZfcHJpdi0+bHBlX2F1ZGlvLnBsYXRkZXYtPmRldi5kbWFfbWFzayk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGxwZV9hdWRpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0 YSAqZCkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGQtPmNoaXBfZGF0YTsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXVu c2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwl1MzIgdmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRF UlJVUFQgfAo+ICsJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQgfAo+ICsJCUk5MTVfTFBFX1BJ UEVfQ19JTlRFUlJVUFQpOwoKTm8gcGlwZSBDIG9uIHZsdi4KCj4gKwo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCS8qCj4gKwkgKiBW TFZfSUVSIGlzIGFscmVhZHkgc2V0IGluIHRoZSB2bHZfZGlzcGxheV9wb3N0aW5zdGFsbCgpLAo+ ICsJICogd2Ugb25seSBjaGFuZ2UgVkxWX0lJUiBhbmQgVkxWX0lNUgo+ICsJICovCj4gKwlkZXZf cHJpdi0+aXJxX21hc2sgJj0gfnZhbDsKPiArCUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKPiAr CUk5MTVfV1JJVEUoVkxWX0lJUiwgdmFsKTsKPiArCUk5MTVfV1JJVEUoVkxWX0lNUiwgZGV2X3By aXYtPmlycV9tYXNrKTsKPiArCVBPU1RJTkdfUkVBRChWTFZfSU1SKTsKPiArCj4gKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbHBlX2F1ZGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGQtPmNoaXBfZGF0YTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7Cj4gKwl1MzIgdmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAo+ ICsJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQgfAo+ICsJCUk5MTVfTFBFX1BJUEVfQ19JTlRF UlJVUFQpOwoKZGl0dG8KCj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFf bG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCS8qCj4gKwkgKiBWTFZfSUVSIGlzIGFscmVhZHkgc2V0 IGluIHRoZSB2bHZfZGlzcGxheV9wb3N0aW5zdGFsbCgpLAo+ICsJICogd2Ugb25seSBjaGFuZ2Ug VkxWX0lJUiBhbmQgVkxWX0lNUgo+ICsJICovCj4gKwlkZXZfcHJpdi0+aXJxX21hc2sgfD0gdmFs Owo+ICsJSTkxNV9XUklURShWTFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOwo+ICsJSTkxNV9X UklURShWTFZfSUlSLCB2YWwpOwo+ICsJSTkxNV9XUklURShWTFZfSUlSLCB2YWwpOwo+ICsJUE9T VElOR19SRUFEKFZMVl9JSVIpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9w cml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlycV9j aGlwIGxwZV9hdWRpb19pcnFjaGlwID0gewo+ICsJLm5hbWUgPSAiaGRtaV9scGVfYXVkaW9faXJx Y2hpcCIsCj4gKwkuaXJxX21hc2sgPSBscGVfYXVkaW9faXJxX21hc2ssCj4gKwkuaXJxX3VubWFz ayA9IGxwZV9hdWRpb19pcnFfdW5tYXNrLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBscGVfYXVk aW9faXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlp bnQgaXJxID0gZGV2X3ByaXYtPmxwZV9hdWRpby5pcnE7Cj4gKwo+ICsJV0FSTl9PTighaW50ZWxf aXJxc19lbmFibGVkKGRldl9wcml2KSk7Cj4gKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFt ZShpcnEsCj4gKwkJCQkmbHBlX2F1ZGlvX2lycWNoaXAsCj4gKwkJCQloYW5kbGVfc2ltcGxlX2ly cSwKPiArCQkJCSJoZG1pX2xwZV9hdWRpb19pcnFfaGFuZGxlciIpOwo+ICsKPiArCXJldHVybiBp cnFfc2V0X2NoaXBfZGF0YShpcnEsICZkZXZfcHJpdi0+ZHJtKTsKCkp1c3QgcGFzcyBkZXZfcHJp diBhcyB0aGUgY2hpcCBkYXRhLgoKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2xwZV9hdWRp b19pcnFfaGFuZGxlcigpIC0gZm9yd2FyZHMgdGhlIExQRSBhdWRpbyBpcnEKPiArICogQGRldl9w cml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQo+ICsgKgo+ICsgKiB0aGUgTFBF IEF1ZGlvIGlycSBpcyBmb3J3YXJkZWQgdG8gdGhlIGlycSBoYW5kbGVyIHJlZ2lzdGVyZWQgYnkg TFBFIGF1ZGlvCj4gKyAqIGRyaXZlci4KPiArICovCj4gK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX2ly cV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBnZW5lcmljX2hhbmRsZV9pcnEoZGV2X3ByaXYtPmxwZV9hdWRp by5pcnEpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fRVJST1JfUkFURUxJTUlURUQoImVycm9yIGhh bmRsaW5nIExQRSBhdWRpbyBpcnE6ICVkXG4iLAo+ICsJCQkJcmV0KTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGludGVsX2xwZV9hdWRpb19kZXRlY3QoKSAtIGNoZWNrICYgc2V0dXAgbHBlIGF1ZGlv IGlmIHByZXNlbnQKPiArICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUg ZGF0YQo+ICsgKgo+ICsgKiBEZXRlY3QgaWYgbHBlIGF1ZGlvIGlzIHByZXNlbnQKPiArICoKPiAr ICogUmV0dXJuOiB0cnVlIGlmIGxwZSBhdWRpbyBwcmVzZW50IGVsc2UgUmV0dXJuID0gZmFsc2UK PiArICovCj4gK2Jvb2wgaW50ZWxfbHBlX2F1ZGlvX2RldGVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWludCBscGVfcHJlc2VudCA9IGZhbHNlOwo+ICsKPiAr CWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkg ewoKQ291bGQgYXZvaWQgaW5kZW50aW5nIHRoZSB3aG9sZSB0aGlnIGJ5IHJldmVyc2luZyB0aGlz IHRlc3QgYW5kIGRvaW5nIGFuCmVhcmx5IHJldHVybi4KCj4gKwkJc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZGV2aWNlX2lkIGF0b21faGRhdWRpb19pZHNbXSA9IHsKPiArCQkJLyogQmF5dHJhaWwg Ki8KPiArCQkJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwZjA0KX0sCj4gKwkJ CS8qIEJyYXN3ZWxsICovCj4gKwkJCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4 MjI4NCl9LAo+ICsJCQl7fQo+ICsJCX07CgpJSVJDIEkgYXNrZWQgaWYgd2UgY291bGQgdXNlIGEg SERBIGNsYXNzIG1hdGNoIGluc3RlYWQuIEJ1dCBJIGZvcmdldAp3aGF0IHRoZSBhbnN3ZXIgd2Fz LiBObyBwcmVzdW1hYmx5PwoKPiArCj4gKwkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYXRvbV9oZGF1 ZGlvX2lkcykpIHsKPiArCQkJRFJNX0lORk8oIiVzJXNcbiIsICJIRGF1ZGlvIGNvbnRyb2xsZXIg bm90IGRldGVjdGVkLCIsCj4gKwkJCQkidXNpbmcgTFBFIGF1ZGlvIGluc3RlYWRcbiIpOwo+ICsJ CQlscGVfcHJlc2VudCA9IHRydWU7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIGxwZV9wcmVzZW50 Owo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfbHBlX2F1ZGlvX3NldHVwKCkgLSBzZXR1cCB0 aGUgYnJpZGdlIGJldHdlZW4gSERNSSBMUEUgQXVkaW8KPiArICogZHJpdmVyIGFuZCBpOTE1Cj4g KyAqIEBkZXZfcHJpdjogdGhlIGk5MTUgZHJtIGRldmljZSBwcml2YXRlIGRhdGEKPiArICoKPiAr ICogc2V0IHVwIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHJlc291cmNlcyBmb3IgdGhlIGJyaWRnZTog aXJxIGNoaXAsCj4gKyAqIHBsYXRmb3JtIHJlc291cmNlIGFuZCBwbGF0Zm9ybSBkZXZpY2UuIGk5 MTUgZGV2aWNlIGlzIHNldCBhcyBwYXJlbnQKPiArICogb2YgdGhlIG5ldyBwbGF0Zm9ybSBkZXZp Y2UuCj4gKyAqCj4gKyAqIFJldHVybjogMCBpZiBzdWNjZXNzZnVsLiBub24temVybyBpZiBhbGxv Y2F0aW9uL2luaXRpYWxpemF0aW9uIGZhaWxzCj4gKyAqLwo+ICtpbnQgaW50ZWxfbHBlX2F1ZGlv X3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50IHJl dDsKPiArCj4gKwlkZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSA9IGlycV9hbGxvY19kZXNjKDApOwo+ ICsJaWYgKGRldl9wcml2LT5scGVfYXVkaW8uaXJxIDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIGFsbG9jYXRlIElSUSBkZXNjOiAlZFxuIiwKPiArCQkJZGV2X3ByaXYtPmxwZV9hdWRp by5pcnEpOwo+ICsJCXJldCA9IGRldl9wcml2LT5scGVfYXVkaW8uaXJxOwo+ICsJCWdvdG8gZXJy Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVRygiaXJxID0gJWRcbiIsIGRldl9wcml2LT5scGVfYXVk aW8uaXJxKTsKPiArCj4gKwlyZXQgPSBscGVfYXVkaW9faXJxX2luaXQoZGV2X3ByaXYpOwo+ICsK PiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGlycWNo aXAgZm9yIGxwZSBhdWRpbzogJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwkJZ290byBlcnJfZnJlZV9p cnE7Cj4gKwl9Cj4gKwo+ICsJZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2ID0gbHBlX2F1ZGlv X3BsYXRkZXZfY3JlYXRlKGRldl9wcml2KTsKPiArCj4gKwlpZiAoSVNfRVJSKGRldl9wcml2LT5s cGVfYXVkaW8ucGxhdGRldikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRldl9wcml2LT5scGVfYXVk aW8ucGxhdGRldik7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGxwZSBhdWRpbyBw bGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJCWdvdG8gZXJyX2ZyZWVfaXJx Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICtlcnJfZnJlZV9pcnE6Cj4gKwlpcnFfZnJlZV9k ZXNjKGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKPiArZXJyOgo+ICsJZGV2X3ByaXYtPmxwZV9h dWRpby5pcnEgPSAtMTsKPiArCWRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldiA9IE5VTEw7Cj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIGludGVsX2xwZV9hdWRpb19p bml0KCkgLSBkZXRlY3QgYW5kIHNldHVwIHRoZSBicmlkZ2UgYmV0d2VlbiBIRE1JIExQRSBBdWRp bwo+ICsgKiBkcml2ZXIgYW5kIGk5MTUKPiArICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2 aWNlIHByaXZhdGUgZGF0YQo+ICsgKgo+ICsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzc2Z1bC4gbm9u LXplcm8gaWYgZGV0ZWN0aW9uIG9yCj4gKyAqIGxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBmYWls cwo+ICsgKi8KPiAraW50IGludGVsX2xwZV9hdWRpb19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50IHJldCA9IC1FTk9ERVY7Cj4gKwo+ICsJaWYgKGlu dGVsX2xwZV9hdWRpb19kZXRlY3QoZGV2X3ByaXYpKSB7Cj4gKwkJcmV0ID0gaW50ZWxfbHBlX2F1 ZGlvX3NldHVwKGRldl9wcml2KTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gc2V0dXAgTFBFIEF1ZGlvIGJyaWRnZVxuIik7Cj4gKwl9Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKCkgLSBkZXN0 cm95IHRoZSBicmlkZ2UgYmV0d2VlbiBIRE1JIExQRQo+ICsgKiBhdWRpbyBkcml2ZXIgYW5kIGk5 MTUKPiArICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQo+ICsg Kgo+ICsgKiByZWxlYXNlIGFsbCB0aGUgcmVzb3VyY2VzIGZvciBMUEUgYXVkaW8gPC0+IGk5MTUg YnJpZGdlLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9scGVfYXVkaW9fdGVhcmRvd24oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdz Owo+ICsJc3RydWN0IGlycV9kZXNjICpkZXNjOwo+ICsKPiArCWRlc2MgPSAoZGV2X3ByaXYtPmxw ZV9hdWRpby5pcnEgPj0gMCkgPwo+ICsJCWlycV90b19kZXNjKGRldl9wcml2LT5scGVfYXVkaW8u aXJxKSA6IE5VTEw7CgpXaHkgbm90IGp1c3QgImlmIChscGUgbm90IGluaXRpYWxpemVkKSByZXR1 cm47IiA/Cgo+ICsKPiArCS8qKgo+ICsJICogbWFzayBMUEUgYXVkaW8gaXJxIGJlZm9yZSBkZXN0 cm95aW5nCj4gKwkgKi8KPiArCWlmIChkZXNjKQo+ICsJCWxwZV9hdWRpb19pcnFfbWFzaygmZGVz Yy0+aXJxX2RhdGEpOwoKVGhpcyBzZWVtcyByYWN5LiBTaG91bGQgdW5yZWdpc3RlciB0aGUgcGxh dGRldiBmaXJzdCBJIHRoaW5rLAoKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYt PmlycV9sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsJbHBlX2F1ZGlvX3BsYXRkZXZfZGVzdHJveShk ZXZfcHJpdik7Cj4gKwo+ICsJaWYgKGRlc2MpCj4gKwkJaXJxX2ZyZWVfZGVzYyhkZXZfcHJpdi0+ bHBlX2F1ZGlvLmlycSk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PmlycV9sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaW50 ZWxfbHBlX2F1ZGlvLmggYi9pbmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8uaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTY0YzQ0OQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9pbmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8uaAo+IEBAIC0wLDAgKzEsNDUgQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElO IFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9JTlRFTF9MUEVfQVVESU9fSF8K PiArI2RlZmluZSBfSU5URUxfTFBFX0FVRElPX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KPiArCj4gKyNkZWZpbmUgSERNSV9NQVhfRUxEX0JZVEVTCTEyOAo+ICsKPiArc3RydWN0 IGludGVsX2hkbWlfbHBlX2F1ZGlvX2VsZCB7Cj4gKwlpbnQgcG9ydF9pZDsKPiArCXVuc2lnbmVk IGNoYXIgZWxkX2RhdGFbSERNSV9NQVhfRUxEX0JZVEVTXTsKPiArfTsKPiArCj4gK3N0cnVjdCBp bnRlbF9oZG1pX2xwZV9hdWRpb19wZGF0YSB7Cj4gKwlib29sIG5vdGlmeV9wZW5kaW5nOwo+ICsJ aW50IHRtZHNfY2xvY2tfc3BlZWQ7Cj4gKwlib29sIGhkbWlfY29ubmVjdGVkOwo+ICsJc3RydWN0 IGludGVsX2hkbWlfbHBlX2F1ZGlvX2VsZCBlbGQ7Cj4gKwl2b2lkICgqbm90aWZ5X2F1ZGlvX2xw ZSkodm9pZCAqYXVkaW9fcHRyKTsKPiArCXNwaW5sb2NrX3QgbHBlX2F1ZGlvX3Nsb2NrOwo+ICt9 Owo+ICsKPiArI2VuZGlmIC8qIF9JOTE1X0xQRV9BVURJT19IXyAqLwo+IC0tIAo+IDIuOS4zCgot LSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK