From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH 24/60] drm/panel: Add driver for the Toppology TD043MTEA1 panel Date: Wed, 10 Jul 2019 15:09:17 +0200 Message-ID: <20190710130917.GA11170@ravnborg.org> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-21-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk3.altibox.net (asavdk3.altibox.net [109.247.116.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75C35894EA for ; Wed, 10 Jul 2019 13:09:24 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190707181937.6250-21-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Thierry Reding , Sean Paul List-Id: dri-devel@lists.freedesktop.org SGkgTGF1cmVudC4KCkkgaGFkIGFzc3VtZWQgdGhpcyBkcml2ZXIgd291bGQgbG9vayBsaWtlIHRo ZSBvdGhlciBUb3BvbG9neSBkcml2ZXIsIGJ1dAp0aGV5IGRpZmZlciBhIGxvdC4gU28gaXQgbWFr ZXMgc2Vuc2UgdG8gaGF2ZSBkaWZmZXJlbnQgZHJpdmVycy4KClRoaXMgZHJpdmVyIGltcGxlbWVu dHMgc3VzcGVuZC9yZXN1bWUuCkJ1dCB0aGUgY29ycmVjdCB3YXkgd291bGQgYmUgdG8gaW1wbG1l bnQgcHJlcGFyZS91bnByZXBhcmUuCgpUaGUgcG93ZXJfb24oKSwgcG93ZXJfb2ZmKCkgZnVuY3Rp b25zIHdvdWxkIHRoZW4gYmUgZW1iZWRkZWQgaW4KdGhlIHByZXBhcmUoKSwgdW5wcmVwYXJlKCkg ZnVuY3Rpb25zIGFzIHRoZXJlIHdvdWxkIGJlIG9ubHkgb25lIHVzZXIuCgpTZWUgYWRkaXRpb25h bCBjb21tZW50cyBpbiB0aGUgZm9sbG93aW5nLgoKCVNhbQoKT24gU3VuLCBKdWwgMDcsIDIwMTkg YXQgMDk6MTk6MDFQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiBUaGlzIHBhbmVs IGlzIHVzZWQgb24gdGhlIE9NQVAzIFBhbmRvcmEuCj4gCj4gU2lnbmVkLW9mZi1ieTogTGF1cmVu dCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgNyArCj4gIGRy aXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRwby10ZDA0M210ZWExLmMgfCA1MTAgKysrKysrKysr KysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDUxOCBpbnNlcnRpb25zKCspCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHBvLXRkMDQzbXRlYTEu Ywo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4gaW5kZXggYjcwOTlkMjExMDYxLi44ZjM2NjBjNzMw NDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IEBAIC0zMTIsNiArMzEyLDEzIEBAIGNvbmZp ZyBEUk1fUEFORUxfVFBPX1REMDI4VFRFQzEKPiAgCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0 byBlbmFibGUgc3VwcG9ydCBmb3IgVFBPIFREMDI4VFRFQzEgNDgweDY0MAo+ICAJICAyLjgiIHBh bmVsLgo+ICAKPiArY29uZmlnIERSTV9QQU5FTF9UUE9fVEQwNDNNVEVBMQo+ICsJdHJpc3RhdGUg IlRQTyBURDA0M01URUExIHBhbmVsIGRyaXZlciIKU3BlbGwgb3V0IFRQTz8KPiArCWRlcGVuZHMg b24gR1BJT0xJQiAmJiBPRiAmJiBSRUdVTEFUT1IgJiYgU1BJCj4gKwloZWxwCj4gKwkgIFNheSBZ IGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRQTyBURDA0M01URUExIDgw MHg0ODAKPiArCSAgNC4zIiBwYW5lbC4KTWF5YmUgdGVsbCBpdCBpcyB1c2VkIG9uIE9NQVAzIFBh bmRvcmEKCj4gKwo+ICBjb25maWcgRFJNX1BBTkVMX1RQT19UUEcxMTAKPiAgCXRyaXN0YXRlICJU UE8gVFBHIDgwMHg0MDAgcGFuZWwiCj4gIAlkZXBlbmRzIG9uIE9GICYmIFNQSSAmJiBHUElPTElC Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cG8tdGQwNDNtdGVh MS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRwby10ZDA0M210ZWExLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNmIxN2U0NzU4MmI4Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cG8tdGQwNDNt dGVhMS5jCj4gQEAgLTAsMCArMSw1MTAgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCkp1c3Qgbm90aWNlZCwgdGhpcyBpcyBhIGRpZmZlcmVudCBsaWNlbnNlIHRoYW4g dGhlIG90aGVycy4KQnV0IEkgZ3Vlc3MgdGhpcyBjb21lcyBmcm9tIHRoZSBvcmlnaW5hbCBmaWxl LgoKPiArLyoKPiArICogVG9wcG9sb2d5IFREMDQzTVRFQTEgUGFuZWwgRHJpdmVyClNvIEkgYWN0 dWFsbHkgYXNrZWQgR29vZ2xlIHRoaXMgdGltZSAtIHRoZSBjb3JyZWN0IHNwZWxsaW5nIGlzCiJU b3Bwb2x5Ii4KU2VlOiBodHRwOi8vd3d3Lmlubm9sdXguY29tL1BhZ2VzL0VOL0Fib3V0VXMvQ29t cGFueV9PdmVydmlld19FTi5odG1sCgoKPiArc3RydWN0IHRkMDQzbXRlYTFfZGV2aWNlIHsKPiAr CXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4gKwo+ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsK PiArCXN0cnVjdCByZWd1bGF0b3IgKnZjY19yZWc7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNl dF9ncGlvOwo+ICsKPiArCXVuc2lnbmVkIGludCBtb2RlOwo+ICsJdTE2IGdhbW1hWzEyXTsKPiAr CWJvb2wgdm1pcnJvcjsKPiArCWJvb2wgcG93ZXJlZF9vbjsKVGhpcyBmbGFnIHdpbGwgbm90IGJl IG5lZWRlZCB3aGVuIHByZXBhcmUoKSwgdW5wcmVwYXJlKCkgYXJlIHVzZWQuCgo+ICsJYm9vbCBz cGlfc3VzcGVuZGVkOwo+ICsJYm9vbCBwb3dlcl9vbl9yZXN1bWU7Cj4gK307Cj4gKwo+ICsKCj4g K3N0YXRpYyB2b2lkIHRkMDQzbXRlYTFfd3JpdGVfZ2FtbWEoc3RydWN0IHRkMDQzbXRlYTFfZGV2 aWNlICpsY2QpCj4gK3sKPiArCWNvbnN0IHUxNiAqZ2FtbWEgPSBsY2QtPmdhbW1hOwo+ICsJdW5z aWduZWQgaW50IGk7Cj4gKwl1OCB2YWw7Cj4gKwo+ICsJLyogZ2FtbWEgYml0cyBbOTo4XSAqLwo+ ICsJZm9yICh2YWwgPSBpID0gMDsgaSA8IDQ7IGkrKykKPiArCQl2YWwgfD0gKGdhbW1hW2ldICYg MHgzMDApID4+ICgoaSArIDEpICogMik7Cj4gKwl0ZDA0M210ZWExX3dyaXRlKGxjZCwgMHgxMSwg dmFsKTsKPiArCj4gKwlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQo+ICsJCXZhbCB8PSAo Z2FtbWFbaSs0XSAmIDB4MzAwKSA+PiAoKGkgKyAxKSAqIDIpOwpTcGFjZXMgYXJvdW5kIG9wZXJh dG9ycy4KCj4gKwl0ZDA0M210ZWExX3dyaXRlKGxjZCwgMHgxMiwgdmFsKTsKPiArCj4gKwlmb3Ig KHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQo+ICsJCXZhbCB8PSAoZ2FtbWFbaSs4XSAmIDB4MzAw KSA+PiAoKGkgKyAxKSAqIDIpOwpTYW1lIGhlcmUuCgo+ICsJdGQwNDNtdGVhMV93cml0ZShsY2Qs IDB4MTMsIHZhbCk7Cj4gKwo+ICsJLyogZ2FtbWEgYml0cyBbNzowXSAqLwo+ICsJZm9yICh2YWwg PSBpID0gMDsgaSA8IDEyOyBpKyspCj4gKwkJdGQwNDNtdGVhMV93cml0ZShsY2QsIDB4MTQgKyBp LCBnYW1tYVtpXSAmIDB4ZmYpOwo+ICt9ClRoaXMgZnVuY3Rpb24gKHRkMDQzbXRlYTFfd3JpdGVf Z2FtbWEoKSkgZmFpbHMgdG8gY2hlY2sgdGhlIHJlc3VsdCBvZgp0aGUgd3JpdGUgb3BlcmF0aW9u cy4gTWF5YmUgb24gcHVycG9zZS4gQnV0IGxvb2tzIHN0cmFuZ2Ugd2UgZG8gaXQgaW4Kc29tZSBw bGFjZXMgYnV0IG5vdCBhbGwuCgo+ICsKPiArc3RhdGljIGludCB0ZDA0M210ZWExX3dyaXRlX21p cnJvcihzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCkKPiArewo+ICsJdTggcmVnNCA9IFRQ T19SMDRfTkZMSVBfSCB8IFRQT19SMDRfTkZMSVBfViB8Cj4gKwkJVFBPX1IwNF9DUF9DTEtfRlJF UV8xSCB8IFRQT19SMDRfVkdMX0ZSRVFfMUg7Cj4gKwlpZiAobGNkLT52bWlycm9yKQo+ICsJCXJl ZzQgJj0gflRQT19SMDRfTkZMSVBfVjsKPiArCj4gKwlyZXR1cm4gdGQwNDNtdGVhMV93cml0ZShs Y2QsIDQsIHJlZzQpOwo+ICt9CkFkZCBhOgojZGVmaW5lIFRQT19SNAk0CkFuZCB0aGVuIHVzZSBp dCBoZXJlPwpMb29rcyBiYWQgdGhhdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGlzIGhhcmRjb2RlZC4K ClNhbWUgZ29lcyBmb3Igc2V2ZXJhbCBvdGhlciBjYWxscyB0byB0aGUgd3JpdGUoKSBmdW5jdGlv bi4KCj4gKwo+ICtzdGF0aWMgaW50IHRkMDQzbXRlYTFfcG93ZXJfb24oc3RydWN0IHRkMDQzbXRl YTFfZGV2aWNlICpsY2QpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGxjZC0+cG93ZXJl ZF9vbikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGxjZC0+ dmNjX3JlZyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIFdh aXQgZm9yIHRoZSBwYW5lbCB0byBzdGFiaWxpemUuICovCj4gKwltc2xlZXAoMTYwKTsKPiArCj4g KwlncGlvZF9zZXRfdmFsdWUobGNkLT5yZXNldF9ncGlvLCAwKTsKPiArCj4gKwl0ZDA0M210ZWEx X3dyaXRlKGxjZCwgMiwgVFBPX1IwMl9NT0RFKGxjZC0+bW9kZSkgfCBUUE9fUjAyX05DTEtfUklT SU5HKTsKPiArCXRkMDQzbXRlYTFfd3JpdGUobGNkLCAzLCBUUE9fUjAzX1ZBTF9OT1JNQUwpOwo+ ICsJdGQwNDNtdGVhMV93cml0ZShsY2QsIDB4MjAsIDB4ZjApOwo+ICsJdGQwNDNtdGVhMV93cml0 ZShsY2QsIDB4MjEsIDB4ZjApOwo+ICsJdGQwNDNtdGVhMV93cml0ZV9taXJyb3IobGNkKTsKPiAr CXRkMDQzbXRlYTFfd3JpdGVfZ2FtbWEobGNkKTsKPiArCj4gKwlsY2QtPnBvd2VyZWRfb24gPSB0 cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9ClRoZSBhYm92ZSBzaG91bGQgYmUgcGFydCBvZiBw cmVwYXJlKCkKCj4gKwo+ICtzdGF0aWMgdm9pZCB0ZDA0M210ZWExX3Bvd2VyX29mZihzdHJ1Y3Qg dGQwNDNtdGVhMV9kZXZpY2UgKmxjZCkKPiArewo+ICsJaWYgKCFsY2QtPnBvd2VyZWRfb24pCj4g KwkJcmV0dXJuOwo+ICsKPiArCXRkMDQzbXRlYTFfd3JpdGUobGNkLCAzLCBUUE9fUjAzX1ZBTF9T VEFOREJZIHwgVFBPX1IwM19FTl9QV00pOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZShsY2QtPnJl c2V0X2dwaW8sIDEpOwo+ICsKPiArCS8qIHdhaXQgZm9yIGF0IGxlYXN0IDIgdnN5bmNzIGJlZm9y ZSBjdXR0aW5nIG9mZiBwb3dlciAqLwo+ICsJbXNsZWVwKDUwKTsKPiArCj4gKwl0ZDA0M210ZWEx X3dyaXRlKGxjZCwgMywgVFBPX1IwM19WQUxfU1RBTkRCWSk7Cj4gKwo+ICsJcmVndWxhdG9yX2Rp c2FibGUobGNkLT52Y2NfcmVnKTsKPiArCj4gKwlsY2QtPnBvd2VyZWRfb24gPSBmYWxzZTsKPiAr fQpUaGUgYWJvdmUgc2hvdWxkIGJlIHBhcnQgb2YgdW5wcmVwYXJlKCkKCj4gKwo+ICsvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ICsgKiBzeXNmcwo+ICsgKi8KPiArCj4gK3N0YXRpYyBzc2l6ZV90 IHZtaXJyb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLAo+ICsJCQkgICAgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9k ZXZpY2UgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBsY2QtPnZtaXJyb3IpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3NpemVfdCB2bWlycm9yX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCj4gK3sKPiArCXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gKwlpbnQgdmFsOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBrc3RydG9p bnQoYnVmLCAwLCAmdmFsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJbGNkLT52bWlycm9yID0gISF2YWw7Cj4gKwo+ICsJcmV0ID0gdGQwNDNtdGVhMV93cml0ZV9t aXJyb3IobGNkKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBtb2RlX3Nob3coc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiArCQkJIGNoYXIgKmJ1 ZikKPiArewo+ICsJc3RydWN0IHRkMDQzbXRlYTFfZGV2aWNlICpsY2QgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwg bGNkLT5tb2RlKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgbW9kZV9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+ICsJCQkgIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZp Y2UgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJbG9uZyB2YWw7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXJldCA9IGtzdHJ0b2woYnVmLCAwLCAmdmFsKTsKPiArCWlmIChyZXQgIT0gMCB8 fCB2YWwgJiB+NykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlsY2QtPm1vZGUgPSB2YWw7 Cj4gKwo+ICsJdmFsIHw9IFRQT19SMDJfTkNMS19SSVNJTkc7Cj4gKwl0ZDA0M210ZWExX3dyaXRl KGxjZCwgMiwgdmFsKTsKPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBz c2l6ZV90IGdhbW1hX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwKPiArCQkJICBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCB0ZDA0M210ZWEx X2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzc2l6ZV90IGxlbiA9IDA7 Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUobGNkLT5nYW1tYSk7IGkrKykgewo+ICsJCXJldCA9IHNucHJpbnRmKGJ1ZiAr IGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJXUgIiwKPiArCQkJCWxjZC0+Z2FtbWFbaV0pOwo+ICsJ CWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCWxlbiArPSByZXQ7Cj4gKwl9Cj4g KwlidWZbbGVuIC0gMV0gPSAnXG4nOwo+ICsKPiArCXJldHVybiBsZW47Cj4gK30KPiArCj4gK3N0 YXRpYyBzc2l6ZV90IGdhbW1hX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50 KQo+ICt7Cj4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsJdW5zaWduZWQgaW50IGdbMTJdOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXJldCA9IHNzY2FuZihidWYsICIldSAldSAldSAldSAldSAldSAldSAl dSAldSAldSAldSAldSIsCj4gKwkJCSZnWzBdLCAmZ1sxXSwgJmdbMl0sICZnWzNdLCAmZ1s0XSwg JmdbNV0sCj4gKwkJCSZnWzZdLCAmZ1s3XSwgJmdbOF0sICZnWzldLCAmZ1sxMF0sICZnWzExXSk7 Cj4gKwlpZiAocmV0ICE9IDEyKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCAxMjsgaSsrKQo+ICsJCWxjZC0+Z2FtbWFbaV0gPSBnW2ldOwo+ICsKPiArCXRkMDQz bXRlYTFfd3JpdGVfZ2FtbWEobGNkKTsKPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4g K3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh2bWlycm9yKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JX KG1vZGUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZ2FtbWEpOwo+ICsKPiArc3RhdGljIHN0 cnVjdCBhdHRyaWJ1dGUgKnRkMDQzbXRlYTFfYXR0cnNbXSA9IHsKPiArCSZkZXZfYXR0cl92bWly cm9yLmF0dHIsCj4gKwkmZGV2X2F0dHJfbW9kZS5hdHRyLAo+ICsJJmRldl9hdHRyX2dhbW1hLmF0 dHIsCj4gKwlOVUxMLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgdGQwNDNtdGVhMV9hdHRyX2dyb3VwID0gewo+ICsJLmF0dHJzID0gdGQwNDNtdGVhMV9h dHRycywKPiArfTsKSSBzZWUgd2hhdCBpcyBkb25lIHdpdGggbWlycm9yLCBtb2RlIGFuZCBnYW1t YSAtIGJ1dCB0aGUgcXVlc3Rpb24gaXMgaWYKdGhleSBhcmUgcmVhbGx5IG5lZWRlZD8KQW5kIGlm IG5lZWRlZCwgaXMgaXQgdGhlIHJpZ2h0IHdheSB0byBjb25maWd1cmUgdGhlIHBhbmVsPwpUaGlz IGlzIGxpa2VseSBxdWVzdGlvc24gdGhhdCBhcmUgbm90IGVhc3kgdG8gYW5zd2VyIGRlZmluaXRp dmUsIHNvIGJlc3QKdG8ga2VlcCB0aGlzIGFzIGl0IHdhcyBiZWZvcmUuCgoKPiArCj4gKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAqIEJyaWRnZSBPcGVyYXRpb25zCj4gKyAqLwoKUGFuZWwg b3BlcmF0aW9ucywgbm90IGJyaWRnZSBvcGVyYXRpb25zPwoKPiArCj4gK3N0YXRpYyBpbnQgdGQw NDNtdGVhMV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3Qg dGQwNDNtdGVhMV9kZXZpY2UgKmxjZCA9IHRvX3RkMDQzbXRlYTFfZGV2aWNlKHBhbmVsKTsKPiAr Cj4gKwlpZiAoIWxjZC0+c3BpX3N1c3BlbmRlZCkKPiArCQl0ZDA0M210ZWExX3Bvd2VyX29mZihs Y2QpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRkMDQzbXRlYTFf ZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgdGQwNDNtdGVh MV9kZXZpY2UgKmxjZCA9IHRvX3RkMDQzbXRlYTFfZGV2aWNlKHBhbmVsKTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJLyoKPiArCSAqIElmIHdlIGFyZSByZXN1bWluZyBmcm9tIHN5c3RlbSBzdXNwZW5k LCBTUEkgbWlnaHQgbm90IGJlIGVuYWJsZWQKPiArCSAqIHlldCwgc28gd2UnbGwgcHJvZ3JhbSB0 aGUgTENEIGZyb20gU1BJIFBNIHJlc3VtZSBjYWxsYmFjay4KPiArCSAqLwo+ICsJaWYgKGxjZC0+ c3BpX3N1c3BlbmRlZCkKPiArCQlyZXR1cm4gMDsKSSBkbyBub3QgcmVjYWxsIHRoaXMgaXMgbmVl ZGVkIGluIG90aGVyIHBhbmVsIGRyaXZlcnMsIHNvIGxvb2sgYXQgd2hhdApvdGhlciBzcGkgYmFz ZWQgcGFuZWxzIGRvIGhlcmUuCkkgdGhpbmsgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCB0b2RheSBp cyBub3QgcmVxdWlyZWQuCgo+ICsKPiArCXJldCA9IHRkMDQzbXRlYTFfcG93ZXJfb24obGNkKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKCZsY2QtPnNwaS0+ZGV2LCAiJXM6IHBvd2VyIG9u IGZhaWxlZCAoJWQpXG4iLAo+ICsJCQlfX2Z1bmNfXywgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgdGQwNDNtdGVhMV9tb2RlID0gewo+ICsJLmNsb2NrID0gMzYwMDAsCj4g KwkuaGRpc3BsYXkgPSA4MDAsCj4gKwkuaHN5bmNfc3RhcnQgPSA4MDAgKyA2OCwKPiArCS5oc3lu Y19lbmQgPSA4MDAgKyA2OCArIDEsCj4gKwkuaHRvdGFsID0gODAwICsgNjggKyAxICsgMjE0LAo+ ICsJLnZkaXNwbGF5ID0gNDgwLAo+ICsJLnZzeW5jX3N0YXJ0ID0gNDgwICsgMzksCj4gKwkudnN5 bmNfZW5kID0gNDgwICsgMzkgKyAxLAo+ICsJLnZ0b3RhbCA9IDQ4MCArIDM5ICsgMSArIDM0LAo+ ICsJLnZyZWZyZXNoID0gNjAsCj4gKwkudHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJN X01PREVfVFlQRV9QUkVGRVJSRUQsCj4gKwkuZmxhZ3MgPSBEUk1fTU9ERV9GTEFHX05IU1lOQyB8 IERSTV9NT0RFX0ZMQUdfTlZTWU5DLAo+ICt9OwpoZWlnaHRfbW0sIHdpZHRoX21tCgo+ICsKPiAr c3RhdGljIGludCB0ZDA0M210ZWExX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK PiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0 b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCj4gKwltb2RlID0gZHJt X21vZGVfZHVwbGljYXRlKHBhbmVsLT5kcm0sICZ0ZDA0M210ZWExX21vZGUpOwo+ICsJaWYgKCFt b2RlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRybV9tb2RlX3NldF9uYW1lKG1vZGUp Owo+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCWNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gOTQ7Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlf aW5mby5oZWlnaHRfbW0gPSA1NjsKPiArCS8qCj4gKwkgKiBGSVhNRTogQWNjb3JkaW5nIHRvIHRo ZSBkYXRhc2hlZXQgc3luYyBzaWduYWxzIGFyZSBzYW1wbGVkIG9uIHRoZQo+ICsJICogcmlzaW5n IGVkZ2Ugb2YgdGhlIGNsb2NrLCBidXQgdGhlIGNvZGUgcnVubmluZyBvbiB0aGUgT01BUDMgUGFu ZG9yYQo+ICsJICogaW5kaWNhdGVzIHNhbXBsaW5nIG9uIHRoZSBmYWxsaW5nIGVkZ2UuIFRoaXMg c2hvdWxkIGJlIHRlc3RlZCBvbiBhCj4gKwkgKiByZWFsIGRldmljZS4KPiArCSAqLwo+ICsJY29u bmVjdG9yLT5kaXNwbGF5X2luZm8uYnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0gKPiAr CQkJCQkgIHwgRFJNX0JVU19GTEFHX1NZTkNfU0FNUExFX05FR0VER0UKPiArCQkJCQkgIHwgRFJN X0JVU19GTEFHX1BJWERBVEFfU0FNUExFX1BPU0VER0U7Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHRkMDQzbXRlYTFfZnVu Y3MgPSB7Cj4gKwkuZGlzYWJsZSA9IHRkMDQzbXRlYTFfZGlzYWJsZSwKPiArCS5lbmFibGUgPSB0 ZDA0M210ZWExX2VuYWJsZSwKPiArCS5nZXRfbW9kZXMgPSB0ZDA0M210ZWExX2dldF9tb2RlcywK PiArfTsKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAqIFBvd2VyIE1hbmFnZW1l bnQsIFByb2JlIGFuZCBSZW1vdmUKPiArICovCj4gKwo+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQ Cj4gK3N0YXRpYyBpbnQgdGQwNDNtdGVhMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IHRkMDQzbXRlYTFfZGV2aWNlICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiArCj4gKwlpZiAobGNkLT5wb3dlcmVkX29uKSB7Cj4gKwkJdGQwNDNtdGVhMV9wb3dlcl9v ZmYobGNkKTsKPiArCQlsY2QtPnBvd2VyZWRfb24gPSB0cnVlOwo+ICsJfQo+ICsKPiArCWxjZC0+ c3BpX3N1c3BlbmRlZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdGQwNDNtdGVhMV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50 IHJldDsKPiArCj4gKwlsY2QtPnNwaV9zdXNwZW5kZWQgPSBmYWxzZTsKPiArCj4gKwlpZiAobGNk LT5wb3dlcmVkX29uKSB7Cj4gKwkJbGNkLT5wb3dlcmVkX29uID0gZmFsc2U7Cj4gKwkJcmV0ID0g dGQwNDNtdGVhMV9wb3dlcl9vbihsY2QpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBTSU1QTEVfREVWX1BN X09QUyh0ZDA0M210ZWExX3BtX29wcywgdGQwNDNtdGVhMV9zdXNwZW5kLAo+ICsJCQkgdGQwNDNt dGVhMV9yZXN1bWUpOwo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBpbnQgdGQwNDNtdGVhMV9wcm9i ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7Cj4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZp Y2UgKmxjZDsKPiArCWludCByZXQ7Cj4gKwo+ICsJbGNkID0gZGV2bV9remFsbG9jKCZzcGktPmRl diwgc2l6ZW9mKCpsY2QpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChsY2QgPT0gTlVMTCkKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBsY2QpOwo+ICsJbGNk LT5zcGkgPSBzcGk7Cj4gKwlsY2QtPm1vZGUgPSBUUE9fUjAyX01PREVfODAweDQ4MDsKPiArCW1l bWNweShsY2QtPmdhbW1hLCB0ZDA0M210ZWExX2RlZl9nYW1tYSwgc2l6ZW9mKGxjZC0+Z2FtbWEp KTsKPiArCj4gKwlsY2QtPnZjY19yZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnNwaS0+ZGV2LCAi dmNjIik7Cj4gKwlpZiAoSVNfRVJSKGxjZC0+dmNjX3JlZykpIHsKPiArCQlkZXZfZXJyKCZzcGkt PmRldiwgImZhaWxlZCB0byBnZXQgVkNDIHJlZ3VsYXRvclxuIik7Cj4gKwkJcmV0dXJuIFBUUl9F UlIobGNkLT52Y2NfcmVnKTsKPiArCX0KPiArCj4gKwlsY2QtPnJlc2V0X2dwaW8gPSBkZXZtX2dw aW9kX2dldCgmc3BpLT5kZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKPiArCWlmIChJU19F UlIobGNkLT5yZXNldF9ncGlvKSkgewo+ICsJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRv IGdldCByZXNldCBHUElPXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihsY2QtPnJlc2V0X2dwaW8p Owo+ICsJfQo+ICsKPiArCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2Owo+ICsJc3BpLT5tb2RlID0g U1BJX01PREVfMDsKPiArCj4gKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKPiArCWlmIChyZXQgPCAw KSB7Cj4gKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgU1BJOiAlZFxuIiwg cmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHN5c2ZzX2NyZWF0ZV9n cm91cCgmc3BpLT5kZXYua29iaiwgJnRkMDQzbXRlYTFfYXR0cl9ncm91cCk7Cj4gKwlpZiAocmV0 IDwgMCkgewo+ICsJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBm aWxlc1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fcGFuZWxfaW5pdCgm bGNkLT5wYW5lbCk7Cj4gKwlsY2QtPnBhbmVsLmRldiA9ICZsY2QtPnNwaS0+ZGV2Owo+ICsJbGNk LT5wYW5lbC5mdW5jcyA9ICZ0ZDA0M210ZWExX2Z1bmNzOwo+ICsKPiArCXJldCA9IGRybV9wYW5l bF9hZGQoJmxjZC0+cGFuZWwpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlzeXNmc19yZW1vdmVf Z3JvdXAoJnNwaS0+ZGV2LmtvYmosICZ0ZDA0M210ZWExX2F0dHJfZ3JvdXApOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGQw NDNtdGVhMV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArewo+ICsJc3RydWN0IHRk MDQzbXRlYTFfZGV2aWNlICpsY2QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKPiArCj4gKwlkcm1f cGFuZWxfcmVtb3ZlKCZsY2QtPnBhbmVsKTsKPiArCXRkMDQzbXRlYTFfZGlzYWJsZSgmbGNkLT5w YW5lbCk7Cj4gKwo+ICsJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzcGktPmRldi5rb2JqLCAmdGQwNDNt dGVhMV9hdHRyX2dyb3VwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGQwNDNtdGVhMV9vZl9tYXRjaFtdID0gewo+ICsJeyAu Y29tcGF0aWJsZSA9ICJ0cG8sdGQwNDNtdGVhMSIsIH0sCj4gKwl7fSwKeyAvKiBzZW50aW5lbCAq LyB9LAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs