From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabio Estevam Subject: Re: [PATCH 3/3] drm/bridge: Add NWL MIPI DSI host controller support Date: Fri, 26 Jul 2019 17:01:52 -0300 Message-ID: References: <3158f4f8c97c21f98c394e5631d74bc60d796522.1563983037.git.agx@sigxcpu.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <3158f4f8c97c21f98c394e5631d74bc60d796522.1563983037.git.agx@sigxcpu.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?Q?Guido_G=C3=BCnther?= Cc: Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Jernej Skrabec , Pengutronix Kernel Team , Neil Armstrong , David Airlie , Lee Jones , Jonas Karlman , linux-kernel , DRI mailing list , Rob Herring , NXP Linux Team , Robert Chiras , Chris Healy , Shawn Guo , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , Laurent Pinchart List-Id: devicetree@vger.kernel.org SGkgR3VpZG8sCgpUaGFua3MgZm9yIHlvdXIgd29yayBvbiB0aGlzIGRyaXZlciEKCk9uIFdlZCwg SnVsIDI0LCAyMDE5IGF0IDEyOjUyIFBNIEd1aWRvIEfDvG50aGVyIDxhZ3hAc2lneGNwdS5vcmc+ IHdyb3RlOgoKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p bXgtbndsL0tjb25maWcKPiBAQCAtMCwwICsxLDE1IEBACj4gK2NvbmZpZyBEUk1fSU1YX05XTF9E U0kKPiArICAgICAgIHRyaXN0YXRlICJTdXBwb3J0IGZvciBOb3J0aHdlc3QgTG9naWMgTUlQSSBE U0kgSG9zdCBjb250cm9sbGVyIgo+ICsgICAgICAgZGVwZW5kcyBvbiBEUk0gJiYgKEFSQ0hfTVhD IHx8IEFSQ0hfTVVMVElQTEFURk9STSB8fCBDT01QSUxFX1RFU1QpCgoKVGhpcyBJUCBjb3VsZCBw b3RlbnRpYWxseSBiZSBmb3VuZCBvbiBvdGhlciBTb0NzLCBzbyBubyBuZWVkIHRvIG1ha2UKaXQg ZGVwZW5kIG9uIEFSQ0hfTVhDLgoKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9i ZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ICsjaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KCkkgZGlkIG5vdCBmaW5kIGdwaW8gQVAgdXNlZCBp biB0aGlzIGRyaXZlci4KCj4gK3N0YXRpYyB2b2lkIGlteF9ud2xfZHNpX3NldF9jbG9ja3Moc3Ry dWN0IGlteF9ud2xfZHNpICpkc2ksIGJvb2wgZW5hYmxlKQoKQmV0dGVyIG1ha2UgaXQgdG8gcmV0 dXJuICdpbnQnIGluc3RlYWQuLi4KCj4gK3sKPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9 IGRzaS0+ZGV2Owo+ICsgICAgICAgY29uc3QgY2hhciAqaWQ7Cj4gKyAgICAgICBzdHJ1Y3QgY2xr ICpjbGs7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIG5ld19yYXRlLCBjdXJfcmF0ZTsKPiArICAg ICAgIGJvb2wgZW5hYmxlZDsKPiArICAgICAgIHNpemVfdCBpOwo+ICsgICAgICAgaW50IHJldDsK PiArCj4gKyAgICAgICBEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlc2FibGluZyBwbGF0Zm9y bSBjbG9ja3MiLAoKUGxlYXNlIHJlbW92ZSB0aGUgbGV0dGVyICdzJyBmcm9tICdzYWJsaW5nJy4K Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgPyAiZW4iIDogImRpcyIpOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgY2xv Y2sgJXMiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZCk7CgphbmQgcHJvcGFnYXRlIHRoZSBlcnJvciBpbiBjYXNlIG9mIGNsa19wcmVwYXJlX2VuYWJs ZSgpIGZhaWx1cmUuCgo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg ICAgICAgICAgICBkc2ktPmNsa19jb25maWdbaV0uZW5hYmxlZCA9IHRydWU7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgY3VyX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKPiArICAgICAgICAg ICAgICAgICAgICAgICBEUk1fREVWX0RFQlVHX0RSSVZFUigKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldiwgIkVuYWJsZWQgJXMgY2xrIChyYXRlOiByZXE9JWx1IGFjdD0lbHUp XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsIG5ld19yYXRlLCBjdXJf cmF0ZSk7Cj4gKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5hYmxlZCkgewo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOwo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRzaS0+Y2xrX2NvbmZpZ1tpXS5lbmFibGVkID0gZmFsc2U7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRGlzYWJsZWQgJXMg Y2xrXG4iLCBpZCk7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaW14X253bF9kc2lfZW5hYmxlKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQoK U2FtZSBoZXJlLiBQbGVhc2UgcmV0dXJuICdpbnQnIGluc3RlYWQuCgo+ICt7Cj4gKyAgICAgICBz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsg ICAgICAgaW14X253bF9kc2lfc2V0X2Nsb2Nrcyhkc2ksIHRydWUpOwo+ICsKPiArICAgICAgIHJl dCA9IGRzaS0+cGRhdGEtPnBvd2Vyb24oZHNpKTsKPiArICAgICAgIGlmIChyZXQgPCAwKQo+ICsg ICAgICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwb3dlciBvbiBEU0kg KCVkKVxuIiwgcmV0KTsKCklmIHRoZSBwb3dlciBkb21haW4gZmFpbGVkIHRvIHR1cm4gb24sIGl0 IGlzIGJldHRlciB0byBwcm9wYWdhdGUgdGhlIGVycm9yLgoKPiArICAgICAgIHBoeV9yZWZfcmF0 ZSA9IGNsa19nZXRfcmF0ZShkc2ktPnBoeV9yZWZfY2xrKTsKPiArICAgICAgIERSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIlBIWSBhdCByZWYgcmF0ZTogJWx1XG4iLCBwaHlfcmVmX3JhdGUpOwo+ ICsgICAgICAgaWYgKHJldCA8IDApIHsKClRoaXMgY2hlY2sgbG9va3Mgd3JvbmcuIEF0IHRoaXMg cG9pbnQgcmV0IGlzIGFsd2F5cyAwLgoKPiArICAgICAgICAgICAgICAgRFJNX0RFVl9FUlJPUihk c2ktPmRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNldHVwIFBI WSBmb3IgbW9kZTogJXV4JXUgQCVkIEh6XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5LCBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZF9tb2RlLT5jbG9jayk7Cj4gKyAg ICAgICAgICAgICAgIERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJQSFkgcmVmIGNsazogJWx1LCBi aXQgY2xrOiAlbHVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X3JlZl9y YXRlLCBuZXdfY2ZnLm1pcGlfZHBoeS5oc19jbGtfcmF0ZSk7Cj4gKyAgICAgICB9IGVsc2Ugewo+ ICsgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSBuZXcgZGVzaXJlZCBwaHkgY29uZmlnICovCj4g KyAgICAgICAgICAgICAgIG1lbWNweSgmZHNpLT5waHlfY2ZnLCAmbmV3X2NmZywgc2l6ZW9mKG5l d19jZmcpKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBMQ0RJRiArIE5XTCBuZWVkcyBh Y3RpdmUgaGlnaCBzeW5jICovCgpXb3VsZCB0aGlzIHN0aWxsIHdvcmsgaWYgRENTUyBpcyB1c2Vk IGluc3RlYWQ/Cgo+ICsgICAgICAgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgfD0gKERSTV9NT0RFX0ZM QUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpOwo+ICsgICAgICAgYWRqdXN0ZWRfbW9k ZS0+ZmxhZ3MgJj0gfihEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5D KTsKPiArCj4gKyAgICAgICBkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShhZGp1c3RlZF9t b2RlLCAmZHNpLT52bSk7Cj4gKyAgICAgICBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFk anVzdGVkX21vZGUpOwo+ICsKPiArICAgICAgIHJldHVybiByZXQgPT0gMDsKCkF0IHRoaXMgcG9p bnQgcmV0IGlzIGFsd2F5cyAwLgoKPiArc3RhdGljIHZvaWQgaW14X253bF9kc2lfYnJpZGdlX3By ZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsgICAgICAgc3RydWN0 IGlteF9ud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gKwo+ICsgICAgICAg aWYgKGRzaS0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNfT04pCj4gKyAgICAgICAgICAgICAg IHJldHVybjsKPiArCj4gKyAgICAgICBpbXhfbndsX3NlbGVjdF9pbnB1dF9zb3VyY2UoZHNpKTsK ClRoaXMgZnVuY3Rpb24gaXMgaS5NWDhNIHNwZWNpZmljLCBzbyBiZXR0ZXIgcHJvdGVjdCBpdCB0 byBydW4gb25seSBmb3IKdGhlIGkuTVg4TSB2YXJpYW50LgoKPiArICAgICAgIHBtX3J1bnRpbWVf Z2V0X3N5bmMoZHNpLT5kZXYpOwo+ICsgICAgICAgaW14X253bF9kc2lfZW5hYmxlKGRzaSk7Cj4g KyAgICAgICBud2xfZHNpX2VuYWJsZShkc2kpOwoKUGxlYXNlIGNoZWNrIHRoZSBlcnJvciBhbmQg cHJvcGFnYXRlIGluIHRoZSBjYXNlIG9mIGZhaWx1cmUuCgo+ICsgICAgICAgZHNpLT5kcG1zX21v ZGUgPSBEUk1fTU9ERV9EUE1TX09OOwo+ICt9Cj4gKwoKPiArICAgICAgIGRzaS0+Y3NyID0gc3lz Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgImNzciIpOwo+ICsgICAgICAgaWYgKElT X0VSUihkc2ktPmNzcikgJiYgZHNpLT5wZGF0YS0+ZXh0X3JlZ3MgJiBJTVhfUkVHX0NTUikgewo+ ICsgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKGRzaS0+Y3NyKTsKPiArICAgICAgICAgICAg ICAgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgQ1NSIHJlZ21hcDogJWRc biIsCgpJbiB0aGlzIGZ1bmN0aW9uIChhbmQgZ2xvYmFsbHkgaW4gdGhlIGRyaXZlcikgdGhlcmUg aXMgYSBtaXggb2YKRFJNX0RFVl9FUlJPUigpIGFuZCBkZXZfZXJyKCkuCgpDYW4gd2UganVzdCBw aWNrIG9uZSBvZiB0aGUgdHdvIGFuZCB1c2UgaXQgY29uc2lzdGVudGx5PwoKTm90IHN1cmUgd2hh dCBpcyB0aGUgbm9ybSBpbiBkcm0gY29kZSwgYnV0IElNSE8gZGV2X2VycigpIGxvb2tzIHByZXR0 aWVyIDotKQoKPiArCj4gKyAgICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOwo+ICsgICAgICAgYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJj ZShkc2ktPmRldiwgcmVzKTsKCkNvdWxkIHVzZSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3Vy Y2UoKSwgd2hpY2ggbWFrZXMgaXQgc2ltcGxlci4KCj4gK2Vycl9jbGVhbnVwOgo+ICsgICAgICAg ZGV2bV9mcmVlX2lycShkZXYsIGRzaS0+aXJxLCBkc2kpOwoKTm8gbmVlZCB0byBjYWxsIGRldm1f ZnJlZV9pcnEoKSBoZXJlLiBUaGUgZGV2bSBmdW5jdGlvbnMgZG8gbm90IG5lZWQKdG8gYmUgZnJl ZWQgb24gcHJvYmUuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2lteC1u d2wvbndsLWRzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL253bC1kc2kuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZTE0NjNhZjE2MmYK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pbXgtbndsL253 bC1kc2kuYwo+IEBAIC0wLDAgKzEsNzQ1IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKwo+ICsvKgo+ICsgKiBOV0wgRFNJIGhvc3QgZHJpdmVyCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoQykgMjAxNyBOWFAKPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMK PiArICovCj4gKwo+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgoKSXMgdGhpcyBhc20gaGVh ZGVyIHJlcXVpcmVkPwoKPiArLyoKPiArICogRFNJIFZpZGVvIG1vZGUKPiArICovCgpTaW5nbGUg bGluZSBjb21tZW50IHdvdWxkIHN1ZmZpY2UuCgo+ICsjZGVmaW5lIFZJREVPX01PREVfQlVSU1Rf TU9ERV9XSVRIX1NZTkNfUFVMU0VTICAgICAgICAgMAo+ICsjZGVmaW5lIFZJREVPX01PREVfTk9O X0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UUyAgICAgQklUKDApCj4gKyNkZWZpbmUgVklERU9f TU9ERV9CVVJTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMSkKPiArCj4gKy8q Cj4gKyAqIERQSSBjb2xvciBjb2RpbmcKPiArICovCgpEaXR0by4KCj4gKyNkZWZpbmUgRFBJXzE2 X0JJVF81NjVfUEFDS0VEICAwCj4gKyNkZWZpbmUgRFBJXzE2X0JJVF81NjVfQUxJR05FRCAxCj4g KyNkZWZpbmUgRFBJXzE2X0JJVF81NjVfU0hJRlRFRCAyCj4gKyNkZWZpbmUgRFBJXzE4X0JJVF9Q QUNLRUQgICAgICAzCj4gKyNkZWZpbmUgRFBJXzE4X0JJVF9BTElHTkVEICAgICA0Cj4gKyNkZWZp bmUgRFBJXzI0X0JJVCAgICAgICAgICAgICA1Cj4gKwo+ICsvKgo+ICsgKiBEUEkgUGl4ZWwgZm9y bWF0Cj4gKyAqLwoKRGl0dG8uCgo+ICsjZGVmaW5lIFBJWEVMX0ZPUk1BVF8xNiAgMAo+ICsjZGVm aW5lIFBJWEVMX0ZPUk1BVF8xOCAgQklUKDApCj4gKyNkZWZpbmUgUElYRUxfRk9STUFUXzE4TCBC SVQoMSkKPiArI2RlZmluZSBQSVhFTF9GT1JNQVRfMjQgIChCSVQoMCkgfCBCSVQoMSkpCj4gKwo+ ICtlbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiB7IERTSV9QQUNLRVRfU0VORCwgRFNJX1BBQ0tFVF9S RUNFSVZFIH07Cj4gKwo+ICtzdHJ1Y3QgbWlwaV9kc2lfdHJhbnNmZXIgewo+ICsgICAgICAgY29u c3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnOwo+ICsgICAgICAgc3RydWN0IG1pcGlfZHNpX3Bh Y2tldCBwYWNrZXQ7Cj4gKyAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZWQ7Cj4gKwo+ ICsgICAgICAgaW50IHN0YXR1czsgLyogc3RhdHVzIG9mIHRyYW5zbWlzc2lvbiAqLwo+ICsgICAg ICAgZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOwo+ICsgICAgICAgYm9vbCBuZWVk X2J0YTsKPiArICAgICAgIHU4IGNtZDsKPiArICAgICAgIHUxNiByeF93b3JkX2NvdW50Owo+ICsg ICAgICAgc2l6ZV90IHR4X2xlbjsgLyogYnl0ZXMgc2VudCAqLwo+ICsgICAgICAgc2l6ZV90IHJ4 X2xlbjsgLyogYnl0ZXMgcmVjZWl2ZWQgKi8KPiArfTsKClRoZSBjb21tZW50cyBoZXJlIGFyZSBr aW5kIG9mIG9idmlvdXMsIHNvIEkgd291bGQganVzdCByZW1vdmUgdGhlbS4KCj4gK3N0YXRpYyBp bmxpbmUgaW50IG53bF9kc2lfd3JpdGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2ksIHVuc2lnbmVk IGludCByZWcsCgppbmxpbmUgY2FuIGJlIGRyb3BwZWQuCgo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTMyIHZhbCkKPiArewo+ICsgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAg ICByZXQgPSByZWdtYXBfd3JpdGUoZHNpLT5yZWdtYXAsIHJlZywgdmFsKTsKPiArICAgICAgIGlm IChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gd3JpdGUgTldMIERTSSByZWcg MHgleDogJWRcbiIsIHJlZywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQpOwo+ ICsgICAgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgbndsX2Rz aV9yZWFkKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpLCB1MzIgcmVnKQoKU2FtZSBoZXJlLgoKPiAr ewo+ICsgICAgICAgdW5zaWduZWQgaW50IHZhbDsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsg ICAgICAgcmV0ID0gcmVnbWFwX3JlYWQoZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7Cj4gKyAgICAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwg IkZhaWxlZCB0byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlZywgcmV0KTsKPiArCj4gKyAgICAgICByZXR1cm4gdmFsOwo+ICt9 CgpJdCBzZWVtcyB0aGF0IHdlIGNvdWxkIHNpbXBseSB1c2UgcmVnbWFwX3JlYWQvd3JpdGUoKSBk aXJlY3RseSBpbnN0ZWFkCm9mIHRoZXNlIGZ1bmN0aW9ucy4KCj4gK2ludCBud2xfZHNpX2dldF9k cGh5X3BhcmFtcyhzdHJ1Y3QgaW14X253bF9kc2kgKmRzaSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5X29wdHMpCj4g K3sKPiArICAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZTsKPiArCj4gKyAgICAgICBpZiAoZHNpLT5s YW5lcyA8IDEgfHwgZHNpLT5sYW5lcyA+IDQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBTbyBmYXIgdGhlIERQSFkgc3BlYyBt aW5pbWFsIHRpbWluZ3Mgd29yayBmb3IgYm90aCBtaXhlbAo+ICsgICAgICAgICogZHBoeSBhbmQg bndsIGRzaSBob3N0Cj4gKyAgICAgICAgKi8KPiArICAgICAgIHBoeV9taXBpX2RwaHlfZ2V0X2Rl ZmF1bHRfY29uZmlnKAo+ICsgICAgICAgICAgICAgICBtb2RlLT5jcnRjX2Nsb2NrICogMTAwMCwK PiArICAgICAgICAgICAgICAgbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1h dCksIGRzaS0+bGFuZXMsCj4gKyAgICAgICAgICAgICAgICZwaHlfb3B0cy0+bWlwaV9kcGh5KTsK PiArICAgICAgIHJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKTsKPiArICAgICAg IERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiTFAgY2xrIGlzIEAlbHUgSHpcbiIsIHJh dGUpOwo+ICsgICAgICAgcGh5X29wdHMtPm1pcGlfZHBoeS5scF9jbGtfcmF0ZSA9IHJhdGU7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwobndsX2RzaV9n ZXRfZHBoeV9wYXJhbXMpOwoKRG9lcyBpdCByZWFsbHkgbmVlZCB0byBiZSBleHBvcnRlZD8gV2h5 IGNhbid0IGl0IGJlIHBsYWNlZCBpbnNpZGUKbndsLWRydi5jIGFuZCBiZSBtYWRlIHN0YXRpYz8K Cj4gKy8qKgoKLyogaXMgZW5vdWdoCgoKPiArICogdWkyYmMgLSBVSSB0aW1lIHBlcmlvZHMgdG8g Ynl0ZSBjbG9jayBjeWNsZXMKPiArICovCj4gK3N0YXRpYyB1MzIgdWkyYmMoc3RydWN0IGlteF9u d2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyB1aSkKPiArewo+ICsgICAgICAgaW50IGJw cCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOwo+ICsKPiArICAg ICAgIHJldHVybiBESVZfUk9VTkRfVVAodWkgKiBkc2ktPmxhbmVzLCBkc2ktPnZtLnBpeGVsY2xv Y2sgKiBicHApOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFVTRUNfUEVSX1NFQyAxMDAwMDAwTAoKVGhp cyBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzIGluIGluY2x1ZGUvbGludXgvdGltZTY0LmguIE5v IG5lZWQgdG8KcmVkZWZpbmUgaXQuCgo+ICtzdGF0aWMgaW50IG53bF9kc2lfZW5hYmxlX3R4X2Ns b2NrKHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBkc2ktPmRldjsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dHhfZXNjX2Nsayk7Cj4gKyAgICAgICBpZiAocmV0IDwg MCkgewo+ICsgICAgICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFi bGUgdHhfZXNjIGNsazogJWRcbiIsIHJldCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRW5h YmxlZCB0eF9lc2MgY2xrIEAlbHUgSHpcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKSk7Cj4gKyAgICAgICByZXR1cm4gMDsKPiAr fQoKRG8gd2UgcmVhbGx5IG5lZWQgdGhpcyBmdW5jdGlvbj8gSXQgbG9va3MgbGlrZSBpdCB3b3Vs ZCBiZSBzaW1wbGVyCmp1c3QgdG8gY2FsbCBjbGtfcHJlcGFyZV9lbmFibGUoKSBkaXJlY3RseS4K Cj4gKwo+ICtzdGF0aWMgaW50IG53bF9kc2lfZW5hYmxlX3J4X2Nsb2NrKHN0cnVjdCBpbXhfbnds X2RzaSAqZHNpKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsK PiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGRzaS0+cnhfZXNjX2Nsayk7Cj4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAg ICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcnhfZXNjIGNsazogJWRc biIsIHJldCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRW5hYmxlZCByeF9lc2MgY2xrIEAl bHUgSHpcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGtfZ2V0X3JhdGUoZHNp LT5yeF9lc2NfY2xrKSk7Cj4gKyAgICAgICByZXR1cm4gMDsKPiArfQoKU2FtZSBoZXJlLgoKPiAr c3RhdGljIHNzaXplX3QgbndsX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0 ICpkc2lfaG9zdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW14X253bF9k c2kgKmRzaSA9Cj4gKyAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0 IGlteF9ud2xfZHNpLCBkc2lfaG9zdCk7Cj4gKyAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfdHJhbnNm ZXIgeGZlcjsKPiArICAgICAgIHNzaXplX3QgcmV0ID0gMDsKPiArCj4gKyAgICAgICAvKiBDcmVh dGUgcGFja2V0IHRvIGJlIHNlbnQgKi8KPiArICAgICAgIGRzaS0+eGZlciA9ICZ4ZmVyOwo+ICsg ICAgICAgcmV0ID0gbWlwaV9kc2lfY3JlYXRlX3BhY2tldCgmeGZlci5wYWNrZXQsIG1zZyk7Cj4g KyAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICAgICBkc2ktPnhmZXIgPSBOVUxM Owo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAg IGlmICgobXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTSB8 fAo+ICsgICAgICAgICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVT VF8xX1BBUkFNIHx8Cj4gKyAgICAgICAgICAgIG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNf UkVBRF9SRVFVRVNUXzJfUEFSQU0gfHwKPiArICAgICAgICAgICAgbXNnLT50eXBlICYgTUlQSV9E U0lfRENTX1JFQUQpICYmCj4gKyAgICAgICAgICAgbXNnLT5yeF9sZW4gPiAwICYmIG1zZy0+cnhf YnVmICE9IE5VTEwpCj4gKyAgICAgICAgICAgICAgIHhmZXIuZGlyZWN0aW9uID0gRFNJX1BBQ0tF VF9SRUNFSVZFOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICB4ZmVyLmRpcmVjdGlv biA9IERTSV9QQUNLRVRfU0VORDsKPiArCj4gKyAgICAgICB4ZmVyLm5lZWRfYnRhID0gKHhmZXIu ZGlyZWN0aW9uID09IERTSV9QQUNLRVRfUkVDRUlWRSk7Cj4gKyAgICAgICB4ZmVyLm5lZWRfYnRh IHw9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spID8gMSA6IDA7Cj4gKyAgICAg ICB4ZmVyLm1zZyA9IG1zZzsKPiArICAgICAgIHhmZXIuc3RhdHVzID0gLUVUSU1FRE9VVDsKPiAr ICAgICAgIHhmZXIucnhfd29yZF9jb3VudCA9IDA7Cj4gKyAgICAgICB4ZmVyLnJ4X2xlbiA9IDA7 Cj4gKyAgICAgICB4ZmVyLmNtZCA9IDB4MDA7Cj4gKyAgICAgICBpZiAobXNnLT50eF9sZW4gPiAw KQo+ICsgICAgICAgICAgICAgICB4ZmVyLmNtZCA9ICgodTggKikobXNnLT50eF9idWYpKVswXTsK PiArICAgICAgIGluaXRfY29tcGxldGlvbigmeGZlci5jb21wbGV0ZWQpOwo+ICsKPiArICAgICAg IG53bF9kc2lfZW5hYmxlX3J4X2Nsb2NrKGRzaSk7CgpUaGlzIG1heSBmYWlsLCBzbyBiZXR0ZXIg Y2hlY2sgdGhlIGVycm9yLgoKcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKCkKaWYgKHJldCA8IDAp CiAgIHJldHVybiByZXQ7Cgo+ICtpcnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRhdGEpCj4gK3sKPiArICAgICAgIHUzMiBpcnFfc3RhdHVzOwo+ICsgICAgICAg c3RydWN0IGlteF9ud2xfZHNpICpkc2kgPSBkYXRhOwo+ICsKPiArICAgICAgIGlycV9zdGF0dXMg PSBud2xfZHNpX3JlYWQoZHNpLCBJUlFfU1RBVFVTKTsKPiArCj4gKyAgICAgICBpZiAoaXJxX3N0 YXR1cyAmIFRYX1BLVF9ET05FIHx8IGlycV9zdGF0dXMgJiBSWF9QS1RfSERSX1JDVkQgfHwKPiAr ICAgICAgICAgICBpcnFfc3RhdHVzICYgUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEKQo+ICsgICAg ICAgICAgICAgICBud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oZHNpLCBpcnFfc3RhdHVzKTsK PiArCj4gKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwobndsX2RzaV9pcnFfaGFuZGxlcik7CgpXaGF0IGFib3V0IHBsYWNpbmcgdGhpcyBmdW5jdGlv biBpbnNpZGUgbndsLWRydi5jIGFuZCBtYWtlIGl0IHN0YXRpYz8KCj4gKwo+ICtpbnQgbndsX2Rz aV9lbmFibGUoc3RydWN0IGlteF9ud2xfZHNpICpkc2kpCj4gK3sKPiArICAgICAgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owo+ICsgICAgICAgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRz ICpwaHlfY2ZnID0gJmRzaS0+cGh5X2NmZzsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAg ICAgaWYgKCFkc2ktPmxhbmVzKSB7Cj4gKyAgICAgICAgICAgICAgIERSTV9ERVZfRVJST1IoZGV2 LCAiTmVlZCBEU0kgbGFuZXM6ICVkXG4iLCBkc2ktPmxhbmVzKTsKPiArICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gcGh5X2luaXQo ZHNpLT5waHkpOwo+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgICAgRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdCBEU0kgcGh5OiAlZFxuIiwgcmV0KTsKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXQg PSBwaHlfY29uZmlndXJlKGRzaS0+cGh5LCBwaHlfY2ZnKTsKPiArICAgICAgIGlmIChyZXQgPCAw KSB7Cj4gKyAgICAgICAgICAgICAgIERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNvbmZp Z3VyZSBEU0kgcGh5OiAlZFxuIiwgcmV0KTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXQgPSBud2xfZHNpX2VuYWJsZV90eF9jbG9jayhk c2kpOwo+ICsgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgICAgRFJNX0RFVl9F UlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHR4IGNsb2NrOiAlZFxuIiwgcmV0KTsKPiArICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXQgPSBu d2xfZHNpX2NvbmZpZ19ob3N0KGRzaSk7Cj4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAgRFNJOiAlZCIs IHJldCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsg ICAgICAgcmV0ID0gbndsX2RzaV9jb25maWdfZHBpKGRzaSk7Cj4gKyAgICAgICBpZiAocmV0IDwg MCkgewo+ICsgICAgICAgICAgICAgICBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQg dXAgRFBJOiAlZCIsIHJldCk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAg ICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKPiArICAgICAg IGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgICAgIERSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwgcmV0KTsKPiArICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBud2xfZHNpX2luaXRfaW50ZXJydXB0 cyhkc2kpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BM KG53bF9kc2lfZW5hYmxlKTsKClNhbWUgaGVyZS4KCj4gKwo+ICtpbnQgbndsX2RzaV9kaXNhYmxl KHN0cnVjdCBpbXhfbndsX2RzaSAqZHNpKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBkc2ktPmRldjsKPiArCj4gKyAgICAgICBEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJE aXNhYmxpbmcgY2xvY2tzIGFuZCBwaHlcbiIpOwo+ICsKPiArICAgICAgIHBoeV9wb3dlcl9vZmYo ZHNpLT5waHkpOwo+ICsgICAgICAgcGh5X2V4aXQoZHNpLT5waHkpOwo+ICsKPiArICAgICAgIC8q IERpc2FibGluZyB0aGUgY2xvY2sgYmVmb3JlIHRoZSBwaHkgYnJlYWtzIGVuYWJsaW5nIGRzaSBh Z2FpbiAqLwo+ICsgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dHhfZXNjX2Nsayk7 Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwobndsX2Rz aV9kaXNhYmxlKTsKClNhbWUgaGVyZS4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVs