From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH v2 1/8] drm/i915: setup bridge for HDMI LPE audio driver Date: Tue, 11 Oct 2016 12:15:01 +0300 Message-ID: <20161011091501.GN4329@intel.com> References: <20161001002242.31025-1-jerome.anand@intel.com> <20161001002242.31025-2-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3915F6E1B1 for ; Tue, 11 Oct 2016 09:15:06 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20161001002242.31025-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: tiwai@suse.de, intel-gfx@lists.freedesktop.org, broonie@opensource.wolfsonmicro.com List-Id: intel-gfx@lists.freedesktop.org T24gU2F0LCBPY3QgMDEsIDIwMTYgYXQgMDU6NTI6MzVBTSArMDUzMCwgSmVyb21lIEFuYW5kIHdy b3RlOgo+IEVuYWJsZSBzdXBwb3J0IGZvciBIRE1JIExQRSBhdWRpbyBtb2RlIG9uIEJheXRyYWls IGFuZAo+IENoZXJyeXRyYWlsIHdoZW4gSERhdWRpbyBjb250cm9sbGVyIGlzIG5vdCBkZXRlY3Rl ZAo+IAo+IFNldHVwIG1pbmltdW0gcmVxdWlyZWQgcmVzb3VyY2VzIGR1cmluZyBpOTE1X2RyaXZl cl9sb2FkOgo+IDEuIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSB0byBzaGFyZSBNTUlPL0lSUSBy ZXNvdXJjZXMKPiAyLiBNYWtlIHRoZSBwbGF0Zm9ybSBkZXZpY2UgY2hpbGQgb2YgaTkxNSBkZXZp Y2UgZm9yIHJ1bnRpbWUgUE0uCj4gMy4gQ3JlYXRlIElSUSBjaGlwIHRvIGZvcndhcmQgSERNSSBM UEUgYXVkaW8gaXJxcy4KPiAKPiBIRE1JIExQRSBhdWRpbyBkcml2ZXIgKGEgc3RhbmRhbG9uZSBz b3VuZCBkcml2ZXIpIHByb2JlcyB0aGUKPiBMUEUgYXVkaW8gZGV2aWNlIGFuZCBjcmVhdGVzIGEg bmV3IHNvdW5kIGNhcmQuCj4gCj4gU2lnbmVkLW9mZi1ieTogUGllcnJlLUxvdWlzIEJvc3NhcnQg PHBpZXJyZS1sb3Vpcy5ib3NzYXJ0QGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBK ZXJvbWUgQW5hbmQgPGplcm9tZS5hbmFuZEBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgIHwgICAzICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyAgICAgICAgfCAgMTMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCAgICAgICAgfCAgMTkgKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEu YyAgICAgICAgfCAgMTQgKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAg ICAgfCAgIDMgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scGVfYXVkaW8uYyB8IDM1 NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vaW50ZWxf bHBlX2F1ZGlvLmggICAgICAgICAgfCAgNDUgKysrKysKPiAgNyBmaWxlcyBjaGFuZ2VkLCA0NTIg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBp bmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8uaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5k ZXggZTZmZTAwNC4uMTFmOTc0MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTExNSw2 ICsxMTUsOSBAQCBpOTE1LXkgKz0gaW50ZWxfZ3Z0Lm8KPiAgaW5jbHVkZSAkKHNyYykvZ3Z0L01h a2VmaWxlCj4gIGVuZGlmCj4gIAo+ICsjIExQRSBBdWRpbyBmb3IgVkxWIGFuZCBDSFQKPiAraTkx NS15ICs9IGludGVsX2xwZV9hdWRpby5vCj4gKwo+ICBvYmotJChDT05GSUdfRFJNX0k5MTUpICs9 IGk5MTUubwo+ICAKPiAgQ0ZMQUdTX2k5MTVfdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAzMWIyYjYzLi5hYjFlNDc2OCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0xMTQxLDcgKzExNDEsMTMgQEAgc3RhdGljIHZvaWQg aTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICAJaWYgKElTX0dFTjUoZGV2X3ByaXYpKQo+ICAJCWludGVsX2dwdV9pcHNfaW5pdChkZXZfcHJp dik7Cj4gIAo+IC0JaTkxNV9hdWRpb19jb21wb25lbnRfaW5pdChkZXZfcHJpdik7Cj4gKwlpZiAo aW50ZWxfbHBlX2F1ZGlvX2RldGVjdChkZXZfcHJpdikpIHsKPiArCQlpZiAoaW50ZWxfbHBlX2F1 ZGlvX3NldHVwKGRldl9wcml2KSA8IDApCj4gKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVw IExQRSBBdWRpbyBicmlkZ2VcbiIpOwo+ICsJfQoKSSdkIG1vdmUgYWxsIHRoYXQgaW50byB0aGUg bHBlIGF1ZGlvIGNvZGUuIE5vIG5lZWQgdG8gaGF2ZSBhbnl0aGluZyBoZXJlCmJ1dCBhIHNpbmds ZSBmdW5jdGlvbiBjYWxsIElNTy4KCj4gKwo+ICsJaWYgKCFJU19MUEVfQVVESU9fRU5BQkxFRChk ZXZfcHJpdikpCgpJIGRvbid0IGxpa2UgdGhhdCB0b28gbXVjaC4gSSB0aGluayBJIHdvdWxkIGp1 c3QgbWFrZQp0aGF0IEhBU19MUEVfQVVESU8oKS4gVGhlIGN1cnJlbnQgSVNfVkxWfHxJU19DSFYg Y2hlY2sgY2FuIGp1c3QgYmUKaW5saW5lZCBpbnRvIHRoZSBpbml0IGZ1bmN0aW9uLgoKPiArCQlp OTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0KGRldl9wcml2KTsKPiAgCj4gIAkvKgo+ICAJICogU29t ZSBwb3J0cyByZXF1aXJlIGNvcnJlY3RseSBzZXQtdXAgaHBkIHJlZ2lzdGVycyBmb3IgZGV0ZWN0 aW9uIHRvCj4gQEAgLTExNTksNyArMTE2NSwxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9y ZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAqLwo+ICBzdGF0 aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgewo+IC0JaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChkZXZfcHJpdik7 Cj4gKwlpZiAoSVNfTFBFX0FVRElPX0VOQUJMRUQoZGV2X3ByaXYpKQo+ICsJCWludGVsX2xwZV9h dWRpb190ZWFyZG93bihkZXZfcHJpdik7Cj4gKwllbHNlCj4gKwkJaTkxNV9hdWRpb19jb21wb25l bnRfY2xlYW51cChkZXZfcHJpdik7Cj4gIAo+ICAJaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwo+ ICAJYWNwaV92aWRlb191bnJlZ2lzdGVyKCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5k ZXggOTFmZjNkNy4uMzk5YThlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0y MDg3LDYgKzIwODcsMTIgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAJLyogVXNlZCB0 byBzYXZlIHRoZSBwaXBlLXRvLWVuY29kZXIgbWFwcGluZyBmb3IgYXVkaW8gKi8KPiAgCXN0cnVj dCBpbnRlbF9lbmNvZGVyICphdl9lbmNfbWFwW0k5MTVfTUFYX1BJUEVTXTsKPiAgCj4gKwkvKiBu ZWNlc3NhcnkgcmVzb3VyY2Ugc2hhcmluZyB3aXRoIEhETUkgTFBFIGF1ZGlvIGRyaXZlci4gKi8K PiArCXN0cnVjdCB7Cj4gKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKPiArCQlp bnQJaXJxOwo+ICsJfSBscGVfYXVkaW87Cj4gKwo+ICAJLyoKPiAgCSAqIE5PVEU6IFRoaXMgaXMg dGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3VyIHBhdGNoCj4g IAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0dGVyIHBsYWNlLgo+ IEBAIC0yODI3LDYgKzI4MzMsMTMgQEAgc3RydWN0IGRybV9pOTE1X2NtZF90YWJsZSB7Cj4gIAo+ ICAjZGVmaW5lIEhBU19QT09MRURfRVUoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5oYXNfcG9vbGVk X2V1KQo+ICAKPiArI2RlZmluZSBIQVNfTFBFX0FVRElPKGRldikJKElTX1ZBTExFWVZJRVcoZGV2 KSB8fCBJU19DSEVSUllWSUVXKGRldikpCj4gKyNkZWZpbmUgSVNfTFBFX0FVRElPX0VOQUJMRUQo ZGV2X3ByaXYpIFwKPiArCQkJCShfX0k5MTVfXyhkZXZfcHJpdiktPmxwZV9hdWRpby5wbGF0ZGV2 ICE9IE5VTEwpCj4gKyNkZWZpbmUgSVNfTFBFX0FVRElPX0lSUV9WQUxJRChkZXZfcHJpdikgXAo+ ICsJCQkJKF9fSTkxNV9fKGRldl9wcml2KS0+bHBlX2F1ZGlvLmlycSA+PSAwKQoKU2VlbXMgdXNl bGVzcy4gV2Ugc2hvdWxkIGp1c3Qgbm90IHJlZ2lzdGVyIHRoZSBscGUgYXVkaW8gdGhpbmcgaWYg d2UKaGF2ZSBubyBpcnEuCgo+ICsKPiArCj4gICNkZWZpbmUgSU5URUxfUENIX0RFVklDRV9JRF9N QVNLCQkweGZmMDAKPiAgI2RlZmluZSBJTlRFTF9QQ0hfSUJYX0RFVklDRV9JRF9UWVBFCQkweDNi MDAKPiAgI2RlZmluZSBJTlRFTF9QQ0hfQ1BUX0RFVklDRV9JRF9UWVBFCQkweDFjMDAKPiBAQCAt MzU3OSw2ICszNTkyLDEyIEBAIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+ICB2b2lkIGk5MTVfc2V0dXBfc3lzZnMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpOTE1X3RlYXJkb3duX3N5c2ZzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIAo+ICsvKiBpOTE1X2xwZV9hdWRpby5jICov Cj4gK2ludCAgaW50ZWxfbHBlX2F1ZGlvX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7Cj4gK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX3RlYXJkb3duKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Cj4gK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gK2ludCBpbnRlbF9scGVfYXVk aW9fZGV0ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gKwo+ICAvKiBp bnRlbF9pMmMuYyAqLwo+ICBleHRlcm4gaW50IGludGVsX3NldHVwX2dtYnVzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwo+ICBleHRlcm4gdm9pZCBpbnRlbF90ZWFyZG93bl9nbWJ1cyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCA2ZWQ1YjI0 Li5kOGY1MTVmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTE4MjcsNiArMTgy NywxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5dmlld19pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICphcmcpCj4gIAkJICogc2lnbmFsbGVkIGluIGlpciAqLwo+ICAJCXZhbGxleXZpZXdf cGlwZXN0YXRfaXJxX2FjayhkZXZfcHJpdiwgaWlyLCBwaXBlX3N0YXRzKTsKPiAgCj4gKwkJaWYg KElTX0xQRV9BVURJT19FTkFCTEVEKGRldl9wcml2KSkKPiArCQkJaWYgKElTX0xQRV9BVURJT19J UlFfVkFMSUQoZGV2X3ByaXYpKQoKSSB0aGluayBib3RoIG9mIHRoZXNlIGNoZWNrcyBjYW4gYmUg cmVtb3ZlZC4gV2Ugd29uJ3QgdW5tYXNrIHRoZQppbnRlcnJ1cHRzIHVubGVzcyBscGUgaXMgZW5h YmxlZCwgc28gdGhlIElJUiBiaXRzIHdpbGwgbmV2ZXIgYmUgc2V0IGluCnRoYXQgY2FzZS4KCj4g KwkJCQlpZiAoaWlyICYgKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAo+ICsJCQkJCUk5MTVf TFBFX1BJUEVfQl9JTlRFUlJVUFQgfAo+ICsJCQkJCUk5MTVfTFBFX1BJUEVfQ19JTlRFUlJVUFQp KQo+ICsJCQkJCWludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcihkZXZfcHJpdik7Cj4gKwo+ICAJ CS8qCj4gIAkJICogVkxWX0lJUiBpcyBzaW5nbGUgYnVmZmVyZWQsIGFuZCByZWZsZWN0cyB0aGUg bGV2ZWwKPiAgCQkgKiBmcm9tIFBJUEVTVEFUL1BPUlRfSE9UUExVR19TVEFULCBoZW5jZSBjbGVh ciBpdCBsYXN0Lgo+IEBAIC0xOTA3LDYgKzE5MTQsMTMgQEAgc3RhdGljIGlycXJldHVybl90IGNo ZXJyeXZpZXdfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ICAJCSAqIHNpZ25hbGxl ZCBpbiBpaXIgKi8KPiAgCQl2YWxsZXl2aWV3X3BpcGVzdGF0X2lycV9hY2soZGV2X3ByaXYsIGlp ciwgcGlwZV9zdGF0cyk7Cj4gIAo+ICsJCWlmIChJU19MUEVfQVVESU9fRU5BQkxFRChkZXZfcHJp dikpCj4gKwkJCWlmIChJU19MUEVfQVVESU9fSVJRX1ZBTElEKGRldl9wcml2KSkKPiArCQkJCWlm IChpaXIgJiAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8Cj4gKwkJCQkJSTkxNV9MUEVfUElQ RV9CX0lOVEVSUlVQVCB8Cj4gKwkJCQkJSTkxNV9MUEVfUElQRV9DX0lOVEVSUlVQVCkpCj4gKwkJ CQkJaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKGRldl9wcml2KTsKPiArCgpkaXR0bwoKPiAg CQkvKgo+ICAJCSAqIFZMVl9JSVIgaXMgc2luZ2xlIGJ1ZmZlcmVkLCBhbmQgcmVmbGVjdHMgdGhl IGxldmVsCj4gIAkJICogZnJvbSBQSVBFU1RBVC9QT1JUX0hPVFBMVUdfU1RBVCwgaGVuY2UgY2xl YXIgaXQgbGFzdC4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBpbmRleCA4ZDQ0Y2VlLi5mYjcz NGYyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gQEAgLTIxMzcsNiArMjEzNyw5IEBA IGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewo+ICAjZGVmaW5lIEk5MTVfQVNMRV9JTlRFUlJV UFQJCQkJKDE8PDApCj4gICNkZWZpbmUgSTkxNV9CU0RfVVNFUl9JTlRFUlJVUFQJCQkJKDE8PDI1 KQo+ICAKPiArI2RlZmluZSBJOTE1X0hETUlfTFBFX0FVRElPX0JBU0UJKFZMVl9ESVNQTEFZX0JB U0UgKyAweDY1MDAwKQo+ICsjZGVmaW5lIEk5MTVfSERNSV9MUEVfQVVESU9fU0laRQkweDEwMDAK PiArCj4gICNkZWZpbmUgR0VONl9CU0RfUk5DSUQJCQlfTU1JTygweDEyMTk4KQo+ICAKPiAgI2Rl ZmluZSBHRU43X0ZGX1RIUkVBRF9NT0RFCQlfTU1JTygweDIwYTApCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xwZV9hdWRpby5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHBlX2F1ZGlvLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLmFjZmUyMmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHBlX2F1ZGlvLmMKPiBAQCAtMCwwICsxLDM1NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJl Lgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBQaWVycmUtTG91aXMgQm9zc2FydCA8cGllcnJl LWxvdWlzLmJvc3NhcnRAbGludXguaW50ZWwuY29tPgo+ICsgKiAgICBKZXJvbWUgQW5hbmQgPGpl cm9tZS5hbmFuZEBpbnRlbC5jb20+Cj4gKyAqICAgIGJhc2VkIG9uIFZFRCBwYXRjaGVzCj4gKyAq Cj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIERPQzogTFBFIEF1ZGlvIGludGVncmF0aW9uIGludGVn cmF0aW9uIGZvciBIRE1JIG9yIERQIHBsYXliYWNrCj4gKyAqCj4gKyAqIE1vdGl2YXRpb246Cj4g KyAqIEF0b20gcGxhdGZvcm1zIChlLmcuIHZhbGxleXZpZXcgYW5kIGNoZXJyeVRyYWlsKSBpbnRl Z3JhdGVzIGEgRE1BLWJhc2VkCj4gKyAqIGludGVyZmFjZSBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0 aGUgdHJhZGl0aW9uYWwgSERhdWRpbyBwYXRoLiBXaGlsZSB0aGlzCj4gKyAqIG1vZGUgaXMgdW5y ZWxhdGVkIHRvIHRoZSBMUEUgYWthIFNTVCBhdWRpbyBlbmdpbmUsIHRoZSBkb2N1bWVudGF0aW9u IHJlZmVycwo+ICsgKiB0byB0aGlzIG1vZGUgYXMgTFBFIHNvIHdlIGtlZXAgdGhpcyBub3RhdGlv biBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3kuCj4gKyAqCj4gKyAqIFRoZSBpbnRlcmZhY2Ug aXMgaGFuZGxlZCBieSBhIHNlcGFyYXRlIHN0YW5kYWxvbmUgZHJpdmVyIG1haW50YWluZWQgaW4g dGhlCj4gKyAqIEFMU0Egc3Vic3lzdGVtIGZvciBzaW1wbGljaXR5LiBUbyBtaW5pbWl6ZSB0aGUg aW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdHdvCj4gKyAqIHN1YnN5c3RlbXMsIGEgYnJpZGdlIGlz IHNldHVwIGJldHdlZW4gdGhlIGhkbWktbHBlLWF1ZGlvIGFuZCBpOTE1Ogo+ICsgKiAxLiBDcmVh dGUgYSBwbGF0Zm9ybSBkZXZpY2UgdG8gc2hhcmUgTU1JTy9JUlEgcmVzb3VyY2VzCj4gKyAqIDIu IE1ha2UgdGhlIHBsYXRmb3JtIGRldmljZSBjaGlsZCBvZiBpOTE1IGRldmljZSBmb3IgcnVudGlt ZSBQTS4KPiArICogMy4gQ3JlYXRlIElSUSBjaGlwIHRvIGZvcndhcmQgdGhlIExQRSBhdWRpbyBp cnFzLgo+ICsgKiB0aGUgaGRtaS1scGUtYXVkaW8gZHJpdmVyIHByb2JlcyB0aGUgbHBlIGF1ZGlv IGRldmljZSBhbmQgY3JlYXRlcyBhIG5ldwo+ICsgKiBzb3VuZCBjYXJkCj4gKyAqCj4gKyAqIFRo cmVhdHM6Cj4gKyAqIER1ZSB0byB0aGUgcmVzdHJpY3Rpb24gaW4gTGludXggcGxhdGZvcm0gZGV2 aWNlIG1vZGVsLCB1c2VyIG5lZWQgbWFudWFsbHkKPiArICogdW5pbnN0YWxsIHRoZSBoZG1pLWxw ZS1hdWRpbyBkcml2ZXIgYmVmb3JlIHVuaW5zdGFsbGluZyBpOTE1IG1vZHVsZSwKPiArICogb3Ro ZXJ3aXNlIHdlIG1pZ2h0IHJ1biBpbnRvIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhZnRlciBpOTE1 IHJlbW92ZXMgdGhlCj4gKyAqIHBsYXRmb3JtIGRldmljZTogZXZlbiB0aG91Z2ggaGRtaS1scGUt YXVkaW8gZHJpdmVyIGlzIHJlbGVhc2VkLCB0aGUgbW9kdWxlcwo+ICsgKiBpcyBzdGlsbCBpbiAi aW5zdGFsbGVkIiBzdGF0dXMuCj4gKyAqCj4gKyAqIEltcGxlbWVudGF0aW9uOgo+ICsgKiBUaGUg TU1JTy9SRUcgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSBjcmVhdGVkIGFjY29yZGluZyB0byB0aGUg cmVnaXN0ZXJzCj4gKyAqIHNwZWNpZmljYXRpb24uCj4gKyAqIFdoZW4gZm9yd2FyZGluZyBMUEUg YXVkaW8gaXJxcywgdGhlIGZsb3cgY29udHJvbCBoYW5kbGVyIHNlbGVjdGlvbiBkZXBlbmRzCj4g KyAqIG9uIHRoZSBwbGF0Zm9ybSwgZm9yIGV4YW1wbGUgb24gdmFsbGV5dmlldyBoYW5kbGVfc2lt cGxlX2lycSBpcyBlbm91Z2guCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Fj cGkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNp Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vaW50ZWxfbHBlX2F1ZGlvLmg+Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSoKPiArbHBlX2F1ZGlvX3BsYXRkZXZfY3JlYXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9ICZkZXZfcHJpdi0+ZHJtOwo+ICsJaW50IHJldDsKPiArCXN0cnVjdCByZXNvdXJjZSByc2Nb Ml0gPSB7fTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXY7Cj4gKwl1NjQgKmRt YV9tYXNrOwo+ICsJc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlvX3BkYXRhICpwZGF0YTsKPiAr Cj4gKwlpZiAoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEgPCAwKQo+ICsJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwo+ICsKPiArCXBsYXRkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImhkbWkt bHBlLWF1ZGlvIiwgLTEpOwo+ICsJaWYgKCFwbGF0ZGV2KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsK PiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBMUEUgYXVkaW8gcGxhdGZvcm0gZGV2 aWNlXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwkvKiB0byB3b3JrLWFyb3VuZCBj aGVja19hZGRyIGluIG5vbW11X21hcF9zZygpICovCgpXaGF0J3MgdGhpcyBhYm91dD8KCj4gKwlk bWFfbWFzayA9IGttYWxsb2Moc2l6ZW9mKCpwbGF0ZGV2LT5kZXYuZG1hX21hc2spLCBHRlBfS0VS TkVMKTsKPiArCWlmICghZG1hX21hc2spIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCURSTV9F UlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYV9tYXNrXG4iKTsKPiArCQlnb3RvIGVycl9wdXRf ZGV2Owo+ICsJfQo+ICsJKmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKPiArCXBsYXRkZXYt PmRldi5kbWFfbWFzayA9IGRtYV9tYXNrOwo+ICsJcGxhdGRldi0+ZGV2LmNvaGVyZW50X2RtYV9t YXNrID0gKmRtYV9tYXNrOwo+ICsKPiArCXJzY1swXS5zdGFydCAgICA9IHJzY1swXS5lbmQgPSBk ZXZfcHJpdi0+bHBlX2F1ZGlvLmlycTsKPiArCXJzY1swXS5mbGFncyAgICA9IElPUkVTT1VSQ0Vf SVJROwo+ICsJcnNjWzBdLm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLWlycSI7Cj4gKwo+ICsJ RFJNX0RFQlVHKCIlczogSERNSV9BVURJTyByc2Muc3RhcnRbMF0gPSAweCV4XG4iLAo+ICsJCV9f ZnVuY19fLCAoaW50KShyc2NbMF0uc3RhcnQpKTsKCl9fZnVuY19fIHBvaW50bGVzcyBzaW5jZSBE Uk1fREVCVUcgYWxyZWF5IGFkZHMgaXQuIEFsc28gc2F5aW5nCiJyc2Muc3RhcnRbMF0iIGluIHRo ZSBtZXNzYWdlIGRvZXNuJ3QgdGVsbCBhbnlvbmUgYW55dGhpbmcgdXNlZnVsLgpBbmQgSSB0aGlu ayBpcnEgbnVtYmVycyBhcmUgdXN1YWxseSBwcmludGVkIGluIGRlY2ltYWwuCgo+ICsKPiArCXJz Y1sxXS5zdGFydCAgICA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsKPiArCQlJ OTE1X0hETUlfTFBFX0FVRElPX0JBU0U7Cj4gKwlyc2NbMV0uZW5kICAgICAgPSBwY2lfcmVzb3Vy Y2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCj4gKwkJSTkxNV9IRE1JX0xQRV9BVURJT19CQVNFICsg STkxNV9IRE1JX0xQRV9BVURJT19TSVpFIC0gMTsKPiArCXJzY1sxXS5mbGFncyAgICA9IElPUkVT T1VSQ0VfTUVNOwo+ICsJcnNjWzFdLm5hbWUgICAgID0gImhkbWktbHBlLWF1ZGlvLW1taW8iOwo+ ICsKPiArCURSTV9ERUJVRygiJXM6IEhETUlfQVVESU8gcnNjLnN0YXJ0WzFdID0gMHgleFxuIiwK PiArCQlfX2Z1bmNfXywgKGludCkocnNjWzFdLnN0YXJ0KSk7CgpBZ2FpbiAicnNjWzBdLnN0YXJ0 IiBkb2Vzbid0IHNlZW0gbGlrZSBhbnl0aGluZyB1c2VmdWwgdG8gcHJpbnQgaW4gYQpkZWJ1ZyBt ZXNzYWdlLiBEb24ndCBzZWUgbXVjaCBwb2ludCBpbiB0aGUgd2hvbGUgZGVidWcgbWVzc2FnZSBU Qkggc2luY2UKdGhlIHN0YXJ0L2VuZCBhcmUgZml4ZWQuCgo+ICsKPiArCXJldCA9IHBsYXRmb3Jt X2RldmljZV9hZGRfcmVzb3VyY2VzKHBsYXRkZXYsIHJzYywgMik7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWRkIHJlc291cmNlIGZvciBwbGF0Zm9ybSBkZXZpY2U6 ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJCWdvdG8gZXJyX3B1dF9kZXY7Cj4gKwl9Cj4gKwo+ICsJ cGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwlpZiAo cGRhdGEgPT0gTlVMTCkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfcHV0X2Rl djsKPiArCX0KPiArCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7Cj4gKwo+ICsJ LyogZm9yIExQRSBhdWRpbyBkcml2ZXIncyBydW50aW1lLVBNICovCj4gKwlwbGF0ZGV2LT5kZXYu cGFyZW50ID0gZGV2LT5kZXY7Cj4gKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBsYXRkZXYp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFkZCBMUEUgYXVkaW8g cGxhdGZvcm0gZGV2aWNlOiAlZFxuIiwKPiArCQkJcmV0KTsKPiArCQlnb3RvIGVycl9wdXRfZGV2 Owo+ICsJfQo+ICsJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5scGVfYXVkaW9fc2xvY2spOwoKU2hv dWxkIGluaXQgaXQgYmVmb3JlIGFkZGluZyB0aGUgZGV2aWNlIEkgc3VwcG9zZT8gSXQncyBub3Qg dXNlZCBpbiB0aGUKcGF0Y2ggc28gaGFyZCB0byBzYXkuIEluIGdlbmVyYWwgdGhlIHBhdGNoIHNw bGl0IGlzIG5vdCB0aGUgYmVzdCBkdWUgdG8Kbm90IGJlaW5nIGFibGUgdG8gc2VlIHRoZSB1c2Ug b2YgdGhpbmdzLgoKPiArCj4gKwlyZXR1cm4gcGxhdGRldjsKPiArZXJyX3B1dF9kZXY6Cj4gKwlw bGF0Zm9ybV9kZXZpY2VfcHV0KHBsYXRkZXYpOwo+ICsJa2ZyZWUoZG1hX21hc2spOwo+ICtlcnI6 Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBscGVfYXVk aW9fcGxhdGRldl9kZXN0cm95KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJaWYgKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldikgewo+ICsJCXBsYXRmb3JtX2Rl dmljZV91bnJlZ2lzdGVyKGRldl9wcml2LT5scGVfYXVkaW8ucGxhdGRldik7Cj4gKwkJa2ZyZWUo ZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2LT5kZXYuZG1hX21hc2spOwo+ICsJfQoKSSB1c3Vh bGx5IHByZWZlciAKCnsKCWlmICghc3R1ZmYpCgkJcmV0dXJuOwoKCW90aGVyIHN0dWZmOwp9Cgpq dXN0IHRvIGtlZXAgdGhlIGluZGVudGF0aW9uIGJldHRlciBpbiBjaGVjay4KCj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGxwZV9hdWRpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGQtPmNoaXBfZGF0YTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7Cj4gKwl1MzIgdmFsID0gKEk5MTVfTFBFX1BJUEVfQV9JTlRFUlJVUFQgfAo+ ICsJCUk5MTVfTFBFX1BJUEVfQl9JTlRFUlJVUFQgfAo+ICsJCUk5MTVfTFBFX1BJUEVfQ19JTlRF UlJVUFQpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGly cWZsYWdzKTsKPiArCj4gKwkvKgo+ICsJICogVkxWX0lFUiBpcyBhbHJlYWR5IHNldCBpbiB0aGUg dmx2X2Rpc3BsYXlfcG9zdGluc3RhbGwoKSwKPiArCSAqIHdlIG9ubHkgY2hhbmdlIFZMVl9JSVIg YW5kIFZMVl9JTVIKPiArCSAqLwo+ICsJZGV2X3ByaXYtPmlycV9tYXNrICY9IH52YWw7Cj4gKwlJ OTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7Cj4gKwlJOTE1X1dSSVRFKFZMVl9JSVIsIHZhbCk7Cj4g KwlJOTE1X1dSSVRFKFZMVl9JTVIsIGRldl9wcml2LT5pcnFfbWFzayk7Cj4gKwoKRXh0cmEgbmV3 bGluZSBoZXJlIGZvciBzb21lIHJlYXNvbi4gTm8gc3VjaCB0aGluZyBpbiB0aGUgY291bnRlcnBh cnQuCgo+ICsJUE9TVElOR19SRUFEKFZMVl9JTVIpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBscGVfYXVkaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gZC0+Y2hpcF9kYXRhOwo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFn czsKPiArCXUzMiB2YWwgPSAoSTkxNV9MUEVfUElQRV9BX0lOVEVSUlVQVCB8Cj4gKwkJSTkxNV9M UEVfUElQRV9CX0lOVEVSUlVQVCB8Cj4gKwkJSTkxNV9MUEVfUElQRV9DX0lOVEVSUlVQVCk7Cj4g Kwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwo+ ICsKPiArCS8qCj4gKwkgKiBWTFZfSUVSIGlzIGFscmVhZHkgc2V0IGluIHRoZSB2bHZfZGlzcGxh eV9wb3N0aW5zdGFsbCgpLAo+ICsJICogd2Ugb25seSBjaGFuZ2UgVkxWX0lJUiBhbmQgVkxWX0lN Ugo+ICsJICovCj4gKwlkZXZfcHJpdi0+aXJxX21hc2sgfD0gdmFsOwo+ICsJSTkxNV9XUklURShW TFZfSU1SLCBkZXZfcHJpdi0+aXJxX21hc2spOwo+ICsJSTkxNV9XUklURShWTFZfSUlSLCB2YWwp Owo+ICsJSTkxNV9XUklURShWTFZfSUlSLCB2YWwpOwo+ICsJUE9TVElOR19SRUFEKFZMVl9JSVIp Owo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJx ZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxwZV9hdWRpb19pcnFj aGlwID0gewo+ICsJLm5hbWUgPSAiaGRtaV9scGVfYXVkaW9faXJxY2hpcCIsCj4gKwkuaXJxX21h c2sgPSBscGVfYXVkaW9faXJxX21hc2ssCj4gKwkuaXJxX3VubWFzayA9IGxwZV9hdWRpb19pcnFf dW5tYXNrLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBscGVfYXVkaW9faXJxX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpbnQgaXJxID0gZGV2X3ByaXYt PmxwZV9hdWRpby5pcnE7Cj4gKwo+ICsJV0FSTl9PTighaW50ZWxfaXJxc19lbmFibGVkKGRldl9w cml2KSk7CgpDb3VsZCBsZWF2ZSBhIGJsYW5rIGxpa2UgaGVyZSB0byBtYWtlIHRoaW5ncyBsb29r IGxlc3MgY29udm9sdXRlZC4KCj4gKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEs Cj4gKwkJJmxwZV9hdWRpb19pcnFjaGlwLAo+ICsJCWhhbmRsZV9zaW1wbGVfaXJxLAo+ICsJCSJo ZG1pX2xwZV9hdWRpb19pcnFfaGFuZGxlciIpOwoKSW5kZW50YXRpb24gaXNuJ3QgcXVpdGUgcmln aHQuCgo+ICsKPiArCXJldHVybiBpcnFfc2V0X2NoaXBfZGF0YShpcnEsICZkZXZfcHJpdi0+ZHJt KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2xwZV9hdWRpb19pcnFfaGFuZGxlcigpIC0g Zm9yd2FyZHMgdGhlIExQRSBhdWRpbyBpcnEKPiArICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0g ZGV2aWNlIHByaXZhdGUgZGF0YQo+ICsgKgo+ICsgKiB0aGUgTFBFIEF1ZGlvIGlycSBpcyBmb3J3 YXJkZWQgdG8gdGhlIGlycSBoYW5kbGVyIHJlZ2lzdGVyZWQgYnkgTFBFIGF1ZGlvCj4gKyAqIGRy aXZlci4KPiArICovCj4gK3ZvaWQgaW50ZWxfbHBlX2F1ZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBnZW5lcmljX2hhbmRsZV9pcnEoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOwo+ICsJaWYgKHJl dCkKPiArCQlEUk1fRVJST1JfUkFURUxJTUlURUQoImVycm9yIGhhbmRsaW5nIExQRSBhdWRpbyBp cnE6ICVkXG4iLAo+ICsJCQkJcmV0KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2xwZV9h dWRpb19kZXRlY3QoKSAtIGNoZWNrICYgc2V0dXAgbHBlIGF1ZGlvIGlmIHByZXNlbnQKPiArICog QGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHByaXZhdGUgZGF0YQo+ICsgKgo+ICsgKiBE ZXRlY3QgaWYgbHBlIGF1ZGlvIGlzIHByZXNlbnQKPiArICoKPiArICogUmV0dXJuOiB0cnVlIGlm IGxwZSBhdWRpbyBwcmVzZW50IGVsc2UgUmV0dXJuID0gZmFsc2UKPiArICovCj4gK2ludCBpbnRl bF9scGVfYXVkaW9fZGV0ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJaW50IGxwZV9wcmVzZW50ID0gZmFsc2U7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gJmRldl9wcml2LT5kcm07Cj4gKwo+ICsJaWYgKEhBU19MUEVfQVVESU8oZGV2KSkgewo+ICsJ CXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdG9tX2hkYXVkaW9faWRzW10gPSB7 Cj4gKwkJCS8qIEJheXRyYWlsICovCj4gKwkJCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5U RUwsIDB4MGYwNCl9LAo+ICsJCQkvKiBCcmFzd2VsbCAqLwo+ICsJCQl7UENJX0RFVklDRShQQ0lf VkVORE9SX0lEX0lOVEVMLCAweDIyODQpfSwKPiArCQkJe30KPiArCQl9OwoKSG1tLiBNYXliZSBJ IGFza2VkIGFscmVhZHksIGJ1dCBjb3VsZCB3ZSB1c2UgYSBjbGFzcyBtYXRjaCBpbnN0ZWFkPwpU aGVyZSdzIHNvbWUga2luZCBvZiBIREEgY2xhc3MgcmlnaHQ/Cgo+ICsKPiArCQlpZiAoIXBjaV9k ZXZfcHJlc2VudChhdG9tX2hkYXVkaW9faWRzKSkgewo+ICsJCQlEUk1fSU5GTygiJXMlc1xuIiwg IkhEYXVkaW8gY29udHJvbGxlciBub3QgZGV0ZWN0ZWQsIiwKPiArCQkJCSJ1c2luZyBMUEUgYXVk aW8gaW5zdGVhZFxuIik7Cj4gKwkJCWxwZV9wcmVzZW50ID0gdHJ1ZTsKPiArCQl9Cj4gKwl9Cj4g KwlyZXR1cm4gbHBlX3ByZXNlbnQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9scGVfYXVk aW9fc2V0dXAoKSAtIHNldHVwIHRoZSBicmlkZ2UgYmV0d2VlbiBIRE1JIExQRSBBdWRpbwo+ICsg KiBkcml2ZXIgYW5kIGk5MTUKPiArICogQGRldl9wcml2OiB0aGUgaTkxNSBkcm0gZGV2aWNlIHBy aXZhdGUgZGF0YQo+ICsgKgo+ICsgKiBzZXQgdXAgdGhlIG1pbmltdW0gcmVxdWlyZWQgcmVzb3Vy Y2VzIGZvciB0aGUgYnJpZGdlOiBpcnEgY2hpcCwKPiArICogcGxhdGZvcm0gcmVzb3VyY2UgYW5k IHBsYXRmb3JtIGRldmljZS4gaTkxNSBkZXZpY2UgaXMgc2V0IGFzIHBhcmVudAo+ICsgKiBvZiB0 aGUgbmV3IHBsYXRmb3JtIGRldmljZS4KPiArICoKPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3Nm dWwuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gZmFpbHMKPiArICovCj4g K2ludCBpbnRlbF9scGVfYXVkaW9fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldl9wcml2LT5scGVfYXVkaW8uaXJxID0g aXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCAxLCAwKTsKCmFrYS4gaXJxX2FsbG9jX2Rlc2MoKSA/Cgo+ ICsJaWYgKGRldl9wcml2LT5scGVfYXVkaW8uaXJxIDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIGFsbG9jYXRlIElSUSBkZXNjOiAlZFxuIiwKPiArCQkJZGV2X3ByaXYtPmxwZV9hdWRp by5pcnEpOwo+ICsJCXJldCA9IGRldl9wcml2LT5scGVfYXVkaW8uaXJxOwo+ICsJCWdvdG8gZXJy Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVRygiJXMgOiBpcnEgPSAlZFxuIiwgX19mdW5jX18sIGRl dl9wcml2LT5scGVfYXVkaW8uaXJxKTsKCkFub3RoZXIgX19mdW5jX18gdGhhdCdzIG5vdCBuZWVk ZWQuIEFuZCB3ZSdyZSBwcmludGluZyB0aGUgaXJxIHR3aWNlCm5vdz8KCj4gKwo+ICsJcmV0ID0g bHBlX2F1ZGlvX2lycV9pbml0KGRldl9wcml2KTsKPiArCj4gKwlpZiAocmV0KSB7Cj4gKwo+ICsJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgaXJxY2hpcCBmb3IgbHBlIGF1ZGlvOiAl ZFxuIiwKPiArCQkJcmV0KTsKCkluZGVudGF0aW9uIGxvb2tzIG9mZi4KCj4gKwkJZ290byBlcnJf ZnJlZV9pcnE7Cj4gKwl9Cj4gKwo+ICsJZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0ZGV2ID0gbHBl X2F1ZGlvX3BsYXRkZXZfY3JlYXRlKGRldl9wcml2KTsKPiArCj4gKwlpZiAoSVNfRVJSKGRldl9w cml2LT5scGVfYXVkaW8ucGxhdGRldikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRldl9wcml2LT5s cGVfYXVkaW8ucGxhdGRldik7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGxwZSBh dWRpbyBwbGF0Zm9ybSBkZXZpY2U6ICVkXG4iLAo+ICsJCQlyZXQpOwoKZGl0dG8KCj4gKwkJZ290 byBlcnJfZnJlZV9pcnE7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2Vycl9mcmVlX2lycToK PiArCWlycV9mcmVlX2Rlc2MoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpOwo+ICtlcnI6Cj4gKwlk ZXZfcHJpdi0+bHBlX2F1ZGlvLmlycSA9IC0xOwo+ICsJZGV2X3ByaXYtPmxwZV9hdWRpby5wbGF0 ZGV2ID0gTlVMTDsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9s cGVfYXVkaW9fdGVhcmRvd24oKSAtIGRlc3Ryb3kgdGhlIGJyaWRnZSBiZXR3ZWVuIEhETUkgTFBF Cj4gKyAqIGF1ZGlvIGRyaXZlciBhbmQgaTkxNQo+ICsgKiBAZGV2X3ByaXY6IHRoZSBpOTE1IGRy bSBkZXZpY2UgcHJpdmF0ZSBkYXRhCj4gKyAqCj4gKyAqIHJlbGVhc2UgYWxsIHRoZSByZXNvdXJj ZXMgZm9yIExQRSBhdWRpbyA8LT4gaTkxNSBicmlkZ2UuCj4gKyAqLwo+ICt2b2lkIGludGVsX2xw ZV9hdWRpb190ZWFyZG93bihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sK PiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Cj4g Kwo+ICsJZGVzYyA9IElTX0xQRV9BVURJT19JUlFfVkFMSUQoZGV2X3ByaXYpID8KPiArCQkJaXJx X3RvX2Rlc2MoZGV2X3ByaXYtPmxwZV9hdWRpby5pcnEpIDogTlVMTDsKPiArCj4gKwkvKioKPiAr CSAqIG1hc2sgTFBFIGF1ZGlvIGlycSBiZWZvcmUgZGVzdHJveWluZwo+ICsJICovCj4gKwlpZiAo ZGVzYykKClNlZW1zIG92ZXJseSBkZWZlbnNpdmUuIFNob3VsZCBqdXN0IGNoZWNrIGlmIHdlIGhh dmUgdGhlIHBsYXRmb3JtIGRldmljZQphdCB0aGUgc3RhcnQsIGFuZCBvdGhlcndpc2Ugd2UgY2Fu IGFzc3VtZSB0aGF0IGFsbCB0aGUgdGhpbmdzIHdlIG5lZWQgdG8KZnJlZSBhcmUgdGhlcmUuCgpU aGlzIGxvb2tzIHJhY3kgdG9vLiBXZSBzaG91bGQgdW5yZWdpc3RlciB0aGUgcGxhdGZvcm0gZGV2 aWNlIGFzIHRoZQpmaXJzdCB0aGluZywgYW5kIG9ubHkgdGhlbiBmcmVlIHVwIHRoZSByZXNvdXJj ZXMgYW5kIHdoYXRub3QuCgo+ICsJCWxwZV9hdWRpb19pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEp Owo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdz KTsKPiArCj4gKwlscGVfYXVkaW9fcGxhdGRldl9kZXN0cm95KGRldl9wcml2KTsKPiArCj4gKwlp ZiAoZGVzYykKPiArCQlpcnFfZnJlZV9kZXNjKGRldl9wcml2LT5scGVfYXVkaW8uaXJxKTsKPiAr Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdz KTsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pbnRlbF9scGVfYXVkaW8uaCBiL2lu Y2x1ZGUvZHJtL2ludGVsX2xwZV9hdWRpby5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5hNjRjNDQ5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL2lu dGVsX2xwZV9hdWRpby5oCj4gQEAgLTAsMCArMSw0NSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQg wqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX0lOVEVMX0xQRV9BVURJT19IXwo+ICsjZGVmaW5lIF9JTlRFTF9M UEVfQVVESU9fSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2RlZmlu ZSBIRE1JX01BWF9FTERfQllURVMJMTI4Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfaGRtaV9scGVfYXVk aW9fZWxkIHsKPiArCWludCBwb3J0X2lkOwo+ICsJdW5zaWduZWQgY2hhciBlbGRfZGF0YVtIRE1J X01BWF9FTERfQllURVNdOwo+ICt9Owo+ICsKPiArc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlv X3BkYXRhIHsKPiArCWJvb2wgbm90aWZ5X3BlbmRpbmc7Cj4gKwlpbnQgdG1kc19jbG9ja19zcGVl ZDsKPiArCWJvb2wgaGRtaV9jb25uZWN0ZWQ7Cj4gKwlzdHJ1Y3QgaW50ZWxfaGRtaV9scGVfYXVk aW9fZWxkIGVsZDsKPiArCXZvaWQgKCpub3RpZnlfYXVkaW9fbHBlKSh2b2lkICphdWRpb19wdHIp Owo+ICsJc3BpbmxvY2tfdCBscGVfYXVkaW9fc2xvY2s7Cj4gK307Cj4gKwo+ICsjZW5kaWYgLyog X0k5MTVfTFBFX0FVRElPX0hfICovCj4gLS0gCj4gMi45LjMKCi0tIApWaWxsZSBTeXJqw6Rsw6QK SW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=