From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH 2/2] drm/panel: Add driver for Samsung S6E63M0 panel Date: Sat, 26 Jan 2019 22:41:49 +0100 Message-ID: <20190126214149.GB31182@ravnborg.org> References: <20190125164645.19208-1-pawel.mikolaj.chmiel@gmail.com> <20190125164645.19208-2-pawel.mikolaj.chmiel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190125164645.19208-2-pawel.mikolaj.chmiel@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?utf-8?B?UGF3ZcWC?= Chmiel Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, airlied@linux.ie, linux-kernel@vger.kernel.org, krzk@kernel.org, robh+dt@kernel.org, thierry.reding@gmail.com, dri-devel@lists.freedesktop.org, m.szyprowski@samsung.com List-Id: devicetree@vger.kernel.org SGkgUGF3ZWwuCgpUaGFua3MgZm9yIHRoaXMgbmljZSBwYXRjaCB0b28uCgpDb21tZW50IGZvbGxv d3MgYW5kIHlvdSBuZWVkIHRvIGp1ZGdlIHdoYXQgdG8gZm9sbG93LgpUaGUgdGltaW5nIHBhcnQg d2lsbCBub3QgYmUgY29tbWVudGVkIGFzIHRoaXMgd2FzIGNvdmVyZWQgaW4KZmVlZGJhY2sgb24g dGhlIGJpbmRpbmcuCgpVc2luZyBhIHN5c2ZzIGZpbGUgdG8gc2VsZWN0IHRoZSBnYW1tYSBtb2Rl IGxvb2tzIGxpa2UgYSBsb2NhbCBoYWNrLgpTb21lb25lIHdpdGggbW9yZSBkcm0ga25vd2xlZGdl IG5lZWRzIGNvbW1lbnQgb24gdGhhdC4KCgpPbiBGcmksIEphbiAyNSwgMjAxOSBhdCAwNTo0Njo0 NVBNICswMTAwLCBQYXdlxYIgQ2htaWVsIHdyb3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyBTYW1zdW5n IFM2RTYzTTAgQU1PTEVEIExDRCBwYW5lbCBkcml2ZXIsIGNvbm5lY3RlZCBvdmVyCj4gc3BpLiBJ dCdzIGJhc2VkIG9uIGFscmVhZHkgcmVtb3ZlZCwgbm9uIGR0IHM2ZTYzbTAgZHJpdmVyIGFuZAo+ IHBhbmVsLXNhbXN1bmctbGQ5MDQwLiBUaGVyZSBpcyBwb3NzaWJpbGl0eSB0byBjaG9vc2Ugb25l IGZyb20gMwo+IGRpZmZlcmVudCBnYW1tYSB0YWJsZXMuCj4gSXQgY2FuIGJlIGZvdW5kIGZvciBl eGFtcGxlIGluIHNvbWUgb2YgU2Ftc3VuZyBBcmllcyBiYXNlZCBwaG9uZXMuCj4gCj4gU2lnbmVk LW9mZi1ieTogUGF3ZcWCIENobWllbCA8cGF3ZWwubWlrb2xhai5jaG1pZWxAZ21haWwuY29tPgo+ IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAg IDcgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAg IDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2Ftc3VuZy1zNmU2M20wLmMgfCA3 MTIgKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNzIwIGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zYW1z dW5nLXM2ZTYzbTAuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtc2Ftc3VuZy1zNmU2M20wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2Ftc3Vu Zy1zNmU2M20wLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u Y2I1YzA5MDYyMWFkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC1zYW1zdW5nLXM2ZTYzbTAuYwo+IEBAIC0wLDAgKzEsNzEyIEBACj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsvKgo+ICsgKiBTNkU2M00wIEFNT0xFRCBM Q0QgZHJtX3BhbmVsIGRyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFBhd2XF giBDaG1pZWwgPHBhd2VsLm1pa29sYWouY2htaWVsQGdtYWlsLmNvbT4KPiArICogRGVyaXZlZCBm cm9tIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC1zYW1zdW5nLWxkOTA0MC5jCj4gKyAqCj4gKyAqIEFu ZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9wYW5lbC5oPgpGb3IgbmV3IGRyaXZlcnMgcGxlYXNlIGRvIG5vdCB1c2UgZHJtUC5o LCB3ZSBhcmUgd29ya2luZwpvbiBnZXR0dGluZyByaWQgb2YgaXQuClRoZSBsaXN0IGlzIHNvcnRl ZCBpbiBhbHBoYWJldGljYWwgb3JkZXIgLSBnb29kLgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Jh Y2tsaWdodC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3Bp Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKyNpbmNsdWRlIDx2 aWRlby9vZl92aWRlb21vZGUuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsK PiArLyogTWFudWZhY3R1cmVyIENvbW1hbmQgU2V0ICovCj4gKyNkZWZpbmUgTUNTX1NUQU5EX0JZ X09GRiAgICAgICAgICAgICAgICAweDExCj4gKyNkZWZpbmUgTUNTX0RJU1BMQVlfT04gICAgICAg ICAgICAgICAgICAweDI5Cj4gKyNkZWZpbmUgTUNTX0VMVlNTX09OICAgICAgICAgICAgICAgIDB4 YjEKPiArI2RlZmluZSBNQ1NfQUNMX0NUUkwgICAgICAgICAgICAgICAgMHhjMAo+ICsjZGVmaW5l IE1DU19ESVNQTEFZX0NPTkRJVElPTiAgIDB4ZjIKPiArI2RlZmluZSBNQ1NfRVRDX0NPTkRJVElP TiAgICAgICAgICAgMHhmNgo+ICsjZGVmaW5lIE1DU19QQU5FTF9DT05ESVRJT04gICAgICAgICAw eEY4Cj4gKyNkZWZpbmUgTUNTX0dBTU1BX0NUUkwgICAgICAgICAgICAgIDB4ZmEKPiArCj4gKyNk ZWZpbmUgTUFYX0dBTU1BX0xFVkVMICAgICAgICAgICAgIDExCj4gKyNkZWZpbmUgR0FNTUFfVEFC TEVfQ09VTlQgICAgICAgICAgIDIzCj4gKwo+ICsjZGVmaW5lIE1BWF9CUklHSFRORVNTICAgICAg ICAgICAgICAoTUFYX0dBTU1BX0xFVkVMIC0gMSkKPiArI2RlZmluZSBHQU1NQV9NT0RFXzIyICAg ICAgICAgICAgICAgMAo+ICsjZGVmaW5lIEdBTU1BX01PREVfMTkgICAgICAgICAgICAgICAxCj4g KyNkZWZpbmUgR0FNTUFfTU9ERV8xNyAgICAgICAgICAgICAgIDIKPiArCj4gKy8qIGFycmF5IG9m IGdhbW1hIHRhYmxlcyBmb3IgZ2FtbWEgdmFsdWUgMi4yICovCj4gK3N0YXRpYyB1OCBjb25zdCBz NmU2M20wX2dhbW1hXzE5W01BWF9HQU1NQV9MRVZFTF1bR0FNTUFfVEFCTEVfQ09VTlRdID0gewo+ ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgwOCwgMHgyNCwgMHg4NCwg MHg0NSwgMHg0RiwgMHhDQSwKPiArCSAgMHhDQiwgMHhCQywgMHhDOSwgMHhDQiwgMHhCQywgMHhE QSwgMHhEQSwKPiArCSAgMHhEMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg0RSB9 LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgwOCwgMHgyNCwgMHg3 NCwgMHg2MCwgMHg0QSwgMHhDMywKPiArCSAgMHhDNiwgMHhCNSwgMHhCRiwgMHhDMywgMHhCMiwg MHhEMiwgMHhEMywKPiArCSAgMHhDOCwgMHgwMCwgMHg1QiwgMHgwMCwgMHg1QiwgMHgwMCwgMHg4 MSB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgwOCwgMHgyNCwg MHg2RiwgMHg2NSwgMHg0NiwgMHhDMiwKPiArCSAgMHhDNCwgMHhCMywgMHhCRiwgMHhDMiwgMHhC MiwgMHhDRiwgMHhEMSwKPiArCSAgMHhDNiwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NCwgMHgwMCwg MHg4RCB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgwOCwgMHgy NCwgMHg2RSwgMHg2NSwgMHg0NSwgMHhDMCwKPiArCSAgMHhDMywgMHhCMiwgMHhCQSwgMHhCRSwg MHhBRSwgMHhDRCwgMHhEMCwKPiArCSAgMHhDNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MCwgMHgw MCwgMHg5QyB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgwOCwg MHgyNCwgMHg2OSwgMHg2NCwgMHg0MCwgMHhCRiwKPiArCSAgMHhDMSwgMHhCMCwgMHhCOSwgMHhC RSwgMHhBRCwgMHhDQiwgMHhDRCwKPiArCSAgMHhDMiwgMHgwMCwgMHg3QSwgMHgwMCwgMHg3Qiwg MHgwMCwgMHhBQSB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwgMHgw OCwgMHgyNCwgMHg2OCwgMHg2NCwgMHgzRiwgMHhCRSwKPiArCSAgMHhDMCwgMHhCMCwgMHhCNiwg MHhCQiwgMHhBQiwgMHhDOCwgMHhDQiwKPiArCSAgMHhCRiwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4 NiwgMHgwMCwgMHhCOCB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgxOCwg MHgwOCwgMHgyNCwgMHg2OCwgMHg2NCwgMHg0MCwgMHhCQywKPiArCSAgMHhCRiwgMHhBRiwgMHhC NCwgMHhCQSwgMHhBOSwgMHhDOCwgMHhDQSwKPiArCSAgMHhCRSwgMHgwMCwgMHg4QiwgMHgwMCwg MHg4QywgMHgwMCwgMHhDMCB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAgMHgx OCwgMHgwOCwgMHgyNCwgMHg2NywgMHg2NCwgMHgzRiwgMHhCQiwKPiArCSAgMHhCRSwgMHhBRCwg MHhCMywgMHhCOSwgMHhBNywgMHhDOCwgMHhDOSwKPiArCSAgMHhCRSwgMHgwMCwgMHg5MCwgMHgw MCwgMHg5MiwgMHgwMCwgMHhDOCB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiArCSAg MHgxOCwgMHgwOCwgMHgyNCwgMHg2MywgMHg2MSwgMHgzQiwgMHhCQSwKPiArCSAgMHhCRSwgMHhB QywgMHhCMywgMHhCOCwgMHhBNywgMHhDNiwgMHhDOCwKPiArCSAgMHhCRCwgMHgwMCwgMHg5Niwg MHgwMCwgMHg5OCwgMHgwMCwgMHhDRiB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwKPiAr CSAgMHgxOCwgMHgwOCwgMHgyNCwgMHg2MSwgMHg2MCwgMHgzOSwgMHhCQiwKPiArCSAgMHhCRSwg MHhBRCwgMHhCMiwgMHhCNiwgMHhBNiwgMHhDNSwgMHhDNywKPiArCSAgMHhCRCwgMHgwMCwgMHg5 QiwgMHgwMCwgMHg5RSwgMHgwMCwgMHhENSB9LAo+ICsJeyBNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwK PiArCSAgMHgxOCwgMHgwOCwgMHgyNCwgMHg2MSwgMHg1RiwgMHgzOSwgMHhCQSwKPiArCSAgMHhC RCwgMHhBRCwgMHhCMSwgMHhCNiwgMHhBNSwgMHhDNCwgMHhDNSwKPiArCSAgMHhCQywgMHgwMCwg MHhBMCwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEQiB9LAo+ICt9Owo+ICsKPiArLyogYXJyYXkgb2Yg Z2FtbWEgdGFibGVzIGZvciBnYW1tYSB2YWx1ZSAxLjcgKi8KPiArc3RhdGljIHU4IGNvbnN0IHM2 ZTYzbTBfZ2FtbWFfMTdbTUFYX0dBTU1BX0xFVkVMXVtHQU1NQV9UQUJMRV9DT1VOVF0gPSB7Cj4g Kwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4LCAweDI0LCAweDhGLCAw eDczLCAweDYzLCAweEQxLAo+ICsJICAweEQwLCAweEM1LCAweENDLCAweEQxLCAweEMyLCAweERF LCAweEUwLAo+ICsJICAweEQ2LCAweDAwLCAweDM5LCAweDAwLCAweDM2LCAweDAwLCAweDUxIH0s Cj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4LCAweDI0LCAweDgy LCAweDdBLCAweDVCLCAweEM4LAo+ICsJICAweENCLCAweEJELCAweEM1LCAweENBLCAweEJBLCAw eEQ2LCAweEQ4LAo+ICsJICAweENFLCAweDAwLCAweDVELCAweDAwLCAweDVFLCAweDAwLCAweDgy IH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4LCAweDI0LCAw eDgxLCAweDdCLCAweDVELCAweEM2LAo+ICsJICAweENBLCAweEJCLCAweEMzLCAweEM3LCAweEI4 LCAweEQ2LCAweEQ4LAo+ICsJICAweENELCAweDAwLCAweDY1LCAweDAwLCAweDY3LCAweDAwLCAw eDhEIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4LCAweDI0 LCAweDdCLCAweDc3LCAweDU4LCAweEMzLAo+ICsJICAweEM4LCAweEI4LCAweEMyLCAweEM2LCAw eEI2LCAweEQzLCAweEQ0LAo+ICsJICAweENBLCAweDAwLCAweDcxLCAweDAwLCAweDczLCAweDAw LCAweDlFIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4LCAw eDI0LCAweDc1LCAweDc3LCAweDU0LCAweEMzLAo+ICsJICAweEM3LCAweEI3LCAweEMwLCAweEMz LCAweEI0LCAweEQxLCAweEQzLAo+ICsJICAweEM5LCAweDAwLCAweDdCLCAweDAwLCAweDdFLCAw eDAwLCAweEFCIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAweDA4 LCAweDI0LCAweDcyLCAweDc1LCAweDUxLCAweEMyLAo+ICsJICAweEM2LCAweEI1LCAweEJGLCAw eEMxLCAweEIzLCAweENFLCAweEQxLAo+ICsJICAweEM2LCAweDAwLCAweDg1LCAweDAwLCAweDg4 LCAweDAwLCAweEJBIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4LCAw eDA4LCAweDI0LCAweDcxLCAweDczLCAweDRGLCAweEMyLAo+ICsJICAweEM1LCAweEI1LCAweEJE LCAweEMwLCAweEIyLCAweENELCAweEQxLAo+ICsJICAweEM1LCAweDAwLCAweDhCLCAweDAwLCAw eDhFLCAweDAwLCAweEMyIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAweDE4 LCAweDA4LCAweDI0LCAweDcxLCAweDcyLCAweDRGLCAweEMyLAo+ICsJICAweEM0LCAweEI1LCAw eEJCLCAweEJGLCAweEIwLCAweENDLCAweENGLAo+ICsJICAweEMzLCAweDAwLCAweDkxLCAweDAw LCAweDk1LCAweDAwLCAweENBIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJICAw eDE4LCAweDA4LCAweDI0LCAweDcyLCAweDcyLCAweDUwLCAweEMwLAo+ICsJICAweEMzLCAweEI0 LCAweEI5LCAweEJFLCAweEFFLCAweENDLCAweENGLAo+ICsJICAweEM0LCAweDAwLCAweDk3LCAw eDAwLCAweDlBLCAweDAwLCAweEQxIH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ICsJ ICAweDE4LCAweDA4LCAweDI0LCAweDcxLCAweDcxLCAweDUwLCAweEJGLAo+ICsJICAweEMyLCAw eEIyLCAweEJBLCAweEJFLCAweEFFLCAweENCLCAweENELAo+ICsJICAweEMzLCAweDAwLCAweDlD LCAweDAwLCAweDlGLCAweDAwLCAweEQ2IH0sCj4gKwl7IE1DU19HQU1NQV9DVFJMLCAweDAwLAo+ ICsJICAweDE4LCAweDA4LCAweDI0LCAweDcwLCAweDcwLCAweDRGLCAweEJGLAo+ICsJICAweEMy LCAweEIyLCAweEI4LCAweEJDLCAweEFDLCAweENCLCAweENELAo+ICsJICAweEMzLCAweDAwLCAw eEEwLCAweDAwLCAweEE0LCAweDAwLCAweERCIH0sCj4gK307CkFsbCB0aGUgZ2FtYSBlbnRyaWVz IHN0YXJ0cyB3aXRoOgpNQ1NfR0FNTUFfQ1RSTCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgyNCwKClRo YXQgY291bGQgYmUgZG9jdW1lbnRlZCB1c2luZyBhICNkZWZpbmUgYnV0IHRhaHQgbWF5IGFsc28K Y29uZnVzZS4KCgo+ICsKPiArI2RlZmluZSBTNkU2M00wX1NUQVRFX0JJVF9FTkFCTEVEICAgICAg IDAKClBsZWFzZSB1c2UgQklUKDApIGhlcmUgYXMgaXQgaXMgYSBiaXQgdGhhdCBpcyBwb2ludGVk IG91dC4KCj4gKwo+ICtzdHJ1Y3QgczZlNjNtMCB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4g KwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOwo+ICsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19k YXRhIHN1cHBsaWVzWzJdOwo+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPiArCXUz MiBwb3dlcl9vbl9kZWxheTsKPiArCXUzMiBwb3dlcl9vZmZfZGVsYXk7Cj4gKwl1MzIgcmVzZXRf ZGVsYXk7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsJdTMyIHdpZHRoX21tOwo+ICsJdTMy IGhlaWdodF9tbTsKPiArCj4gKwl1bnNpZ25lZCBsb25nIHN0YXRlOwo+ICsJdW5zaWduZWQgaW50 IGdhbW1hX21vZGU7Cj4gKwlpbnQgYnJpZ2h0bmVzczsKPiArCj4gKwkvKiBUaGlzIGZpZWxkIGlz IHRlc3RlZCBieSBmdW5jdGlvbnMgZGlyZWN0bHkgYWNjZXNzaW5nIGJ1cyBiZWZvcmUKPiArCSAq IHRyYW5zZmVyLCB0cmFuc2ZlciBpcyBza2lwcGVkIGlmIGl0IGlzIHNldC4gSW4gY2FzZSBvZiB0 cmFuc2Zlcgo+ICsJICogZmFpbHVyZSBvciB1bmV4cGVjdGVkIHJlc3BvbnNlIHRoZSBmaWVsZCBp cyBzZXQgdG8gZXJyb3IgdmFsdWUuCj4gKwkgKiBTdWNoIGNvbnN0cnVjdCBhbGxvd3MgdG8gZWxp bWluYXRlIG1hbnkgY2hlY2tzIGluIGhpZ2hlciBsZXZlbAo+ICsJICogZnVuY3Rpb25zLgo+ICsJ ICovCmtlcm5lbCBzdHlsZSByZXF1aXJlIHRoYXQgbXVsdGkgbGluZSBjb21tZW50cyBzdGFydHMg d2l0aAoJLyoKCSAqIEhlcmUgZ29lcyBibGFoIGJsYWguCgo+ICsJaW50IGVycm9yOwo+ICt9Owo+ ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgczZlNjNtMCAqcGFuZWxfdG9fczZlNjNtMChzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwg c3RydWN0IHM2ZTYzbTAsIHBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBzNmU2M20wX2Ns ZWFyX2Vycm9yKHN0cnVjdCBzNmU2M20wICpjdHgpCj4gK3sKPiArCWludCByZXQgPSBjdHgtPmVy cm9yOwo+ICsKPiArCWN0eC0+ZXJyb3IgPSAwOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBzNmU2M20wX3NwaV93cml0ZV93b3JkKHN0cnVjdCBzNmU2M20wICpjdHgsIHUx NiBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShj dHgtPmRldik7Cj4gKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXIgPSB7Cj4gKwkJLmxlbgk9IDIs Cj4gKwkJLnR4X2J1ZiA9ICZkYXRhLAo+ICsJfTsKPiArCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7 Cj4gKwo+ICsJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKPiArCXNwaV9tZXNzYWdlX2FkZF90YWls KCZ4ZmVyLCAmbXNnKTsKPiArCj4gKwlyZXR1cm4gc3BpX3N5bmMoc3BpLCAmbXNnKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgczZlNjNtMF9kY3Nfd3JpdGUoc3RydWN0IHM2ZTYzbTAgKmN0eCwg Y29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiAr CWlmIChjdHgtPmVycm9yIDwgMCB8fCBsZW4gPT0gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZGV2 X2RiZyhjdHgtPmRldiwgIndyaXRpbmcgZGNzIHNlcTogJSpwaFxuIiwgKGludClsZW4sIGRhdGEp OwpVc2UgRFJNX0RFVl9FUlJPUigpIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgRFJNIHN1YnN5 c3RlbS4KR2VuZXJhbCBjb21tZW50IHRoYXQgZ29lcyBmb3IgYWxsIHVzZXMgb2YgZGV2X3h4eCgp LgoKPiArCXJldCA9IHM2ZTYzbTBfc3BpX3dyaXRlX3dvcmQoY3R4LCAqZGF0YSk7Cj4gKwo+ICsJ d2hpbGUgKCFyZXQgJiYgLS1sZW4pIHsKPiArCQkrK2RhdGE7Cj4gKwkJcmV0ID0gczZlNjNtMF9z cGlfd3JpdGVfd29yZChjdHgsICpkYXRhIHwgMHgxMDApOwpDb25zaWRlciBhIGNvbnN0YW50IGZv ciB0aGUgdG9kYXkgaGFyZGNvZGVkIDB4MTAwCgo+ICsJfQo+ICsKPiArCWlmIChyZXQpIHsKPiAr CQlkZXZfZXJyKGN0eC0+ZGV2LCAiZXJyb3IgJWQgd3JpdGluZyBkY3Mgc2VxOiAlKnBoXG4iLCBy ZXQsCj4gKwkJCShpbnQpbGVuLCBkYXRhKTsKPiArCQljdHgtPmVycm9yID0gcmV0Owo+ICsJfQo+ ICsKPiArCXVzbGVlcF9yYW5nZSgzMDAsIDMxMCk7Cj4gK30KPiArCj4gKyNkZWZpbmUgczZlNjNt MF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIHNlcSAuLi4pIFwKPiArCSh7IFwKPiArCQlzdGF0 aWMgY29uc3QgdTggZFtdID0geyBzZXEgfTsgXAo+ICsJCXM2ZTYzbTBfZGNzX3dyaXRlKGN0eCwg ZCwgQVJSQVlfU0laRShkKSk7IFwKPiArCX0pCj4gKwo+ICtzdGF0aWMgdm9pZCBzNmU2M20wX2Jy aWdodG5lc3Nfc2V0KHN0cnVjdCBzNmU2M20wICpjdHgpCj4gK3sKPiArCS8qIGRpc2FibGUgYW5k IHNldCBuZXcgZ2FtbWEgKi8KPiArCXN3aXRjaCAoY3R4LT5nYW1tYV9tb2RlKSB7Cj4gKwljYXNl IEdBTU1BX01PREVfMjI6Cj4gKwkJczZlNjNtMF9kY3Nfd3JpdGUoY3R4LAo+ICsJCQkJICBzNmU2 M20wX2dhbW1hXzIyW2N0eC0+YnJpZ2h0bmVzc10sCj4gKwkJCQkgIEFSUkFZX1NJWkUoczZlNjNt MF9nYW1tYV8yMltjdHgtPmJyaWdodG5lc3NdKQo+ICsJCQkJICApOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBHQU1NQV9NT0RFXzE5Ogo+ICsJCXM2ZTYzbTBfZGNzX3dyaXRlKGN0eCwKPiArCQkJCSAg czZlNjNtMF9nYW1tYV8xOVtjdHgtPmJyaWdodG5lc3NdLAo+ICsJCQkJICBBUlJBWV9TSVpFKHM2 ZTYzbTBfZ2FtbWFfMTlbY3R4LT5icmlnaHRuZXNzXSkKPiArCQkJCSAgKTsKPiArCQlicmVhazsK PiArCWNhc2UgR0FNTUFfTU9ERV8xNzoKPiArCQlzNmU2M20wX2Rjc193cml0ZShjdHgsCj4gKwkJ CQkgIHM2ZTYzbTBfZ2FtbWFfMTdbY3R4LT5icmlnaHRuZXNzXSwKPiArCQkJCSAgQVJSQVlfU0la RShzNmU2M20wX2dhbW1hXzE3W2N0eC0+YnJpZ2h0bmVzc10pCj4gKwkJCQkgICk7Cj4gKwkJYnJl YWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9pbmZvKGN0eC0+ZGV2LAo+ICsJCQkgImdhbW1hIG1v ZGUgY291bGQgYmUgMDoyLjIsIDE6MS45IG9yIDI6MS43LkFzc3VtaW5nIDIuMlxuIgo+ICsJCQkg KTsKPiArCQlzNmU2M20wX2Rjc193cml0ZShjdHgsCj4gKwkJCQkgIHM2ZTYzbTBfZ2FtbWFfMjJb Y3R4LT5icmlnaHRuZXNzXSwKPiArCQkJCSAgQVJSQVlfU0laRShzNmU2M20wX2dhbW1hXzIyW2N0 eC0+YnJpZ2h0bmVzc10pCj4gKwkJCQkgICk7Cj4gKwkJYnJlYWs7Cj4gKwl9CkRvIHNvbWV0aGlu ZyBsaWtlOgoKCXU4ICp0Ymw7CglzaXplX3QgbGVuOwoKCWNhc2UgR0FNTUFfTU9ERV8yMjoKCQl0 YmwgPSBzNmU2M20wX2dhbW1hXzIyW2N0eC0+YnJpZ2h0bmVzc107CgkJbGVuID0gQVJSQVlfU0la RShzNmU2M20wX2dhbW1hXzIyW2N0eC0+YnJpZ2h0bmVzc107CgkJYnJlYWs7CgljYXNlIEdBTU1B X01PREVfMTk6CgkJLi4uCgl9CgoJczZlNjNtMF9kY3Nfd3JpdGUoY3R4LCB0YmwsIGxlbik7CgoK SW1wcm92ZXMgcmVhZGFiaWxpdHksIHNhbWUgZnVuY3Rpb24uCgo+ICsKPiArCS8qIHVwZGF0ZSBn YW1tYSB0YWJsZS4gKi8KPiArCXM2ZTYzbTBfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBNQ1Nf R0FNTUFfQ1RSTCwgMHgwMSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHM2ZTYzbTBfaW5pdChz dHJ1Y3QgczZlNjNtMCAqY3R4KQo+ICt7Cj4gKwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3RhdGlj KGN0eCwgTUNTX1BBTkVMX0NPTkRJVElPTiwKPiArCQkJCSAgICAgMHgwMSwgMHgyNywgMHgyNywg MHgwNywgMHgwNywgMHg1NCwgMHg5ZiwKPiArCQkJCSAgICAgMHg2MywgMHg4NiwgMHgxYSwgMHgz MywgMHgwZCwgMHgwMCwgMHgwMCk7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRp YyhjdHgsIE1DU19ESVNQTEFZX0NPTkRJVElPTiwKPiArCQkJCSAgICAgMHgwMiwgMHgwMywgMHgx YywgMHgxMCwgMHgxMCk7Cj4gKwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhm NywKPiArCQkJCSAgICAgMHgwMywgMHgwMCwgMHgwMCk7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3Jp dGVfc2VxX3N0YXRpYyhjdHgsIE1DU19HQU1NQV9DVFJMLAo+ICsJCQkJICAgICAweDAwLCAweDE4 LCAweDA4LCAweDI0LCAweDY0LCAweDU2LCAweDMzLAo+ICsJCQkJICAgICAweGI2LCAweGJhLCAw eGE4LCAweGFjLCAweGIxLCAweDlkLCAweGMxLAo+ICsJCQkJICAgICAweGMxLCAweGI3LCAweDAw LCAweDljLCAweDAwLCAweDlmLCAweDAwLAo+ICsJCQkJICAgICAweGQ2KTsKPiArCXM2ZTYzbTBf ZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBNQ1NfR0FNTUFfQ1RSTCwKPiArCQkJCSAgICAgMHgw MSk7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1DU19FVENfQ09O RElUSU9OLAo+ICsJCQkJICAgICAweDAwLCAweDhjLCAweDA3KTsKPiArCXM2ZTYzbTBfZGNzX3dy aXRlX3NlcV9zdGF0aWMoY3R4LCAweGIzLAo+ICsJCQkJICAgICAweGMpOwo+ICsKPiArCXM2ZTYz bTBfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCAweGI1LAo+ICsJCQkJICAgICAweDJjLCAweDEy LCAweDBjLCAweDBhLCAweDEwLCAweDBlLCAweDE3LAo+ICsJCQkJICAgICAweDEzLCAweDFmLCAw eDFhLCAweDJhLCAweDI0LCAweDFmLCAweDFiLAo+ICsJCQkJICAgICAweDFhLCAweDE3LCAweDJi LCAweDI2LCAweDIyLCAweDIwLCAweDNhLAo+ICsJCQkJICAgICAweDM0LCAweDMwLCAweDJjLCAw eDI5LCAweDI2LCAweDI1LCAweDIzLAo+ICsJCQkJICAgICAweDIxLCAweDIwLCAweDFlLCAweDFl KTsKPiArCj4gKwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhiNiwKPiArCQkJ CSAgICAgMHgwMCwgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg0NCwKPiArCQkJCSAg ICAgMHg0NCwgMHg1NSwgMHg1NSwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwKPiArCQkJCSAgICAg MHg2NiwgMHg2Nik7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4 YjcsCj4gKwkJCQkgICAgIDB4MmMsIDB4MTIsIDB4MGMsIDB4MGEsIDB4MTAsIDB4MGUsIDB4MTcs Cj4gKwkJCQkgICAgIDB4MTMsIDB4MWYsIDB4MWEsIDB4MmEsIDB4MjQsIDB4MWYsIDB4MWIsCj4g KwkJCQkgICAgIDB4MWEsIDB4MTcsIDB4MmIsIDB4MjYsIDB4MjIsIDB4MjAsIDB4M2EsCj4gKwkJ CQkgICAgIDB4MzQsIDB4MzAsIDB4MmMsIDB4MjksIDB4MjYsIDB4MjUsIDB4MjMsCj4gKwkJCQkg ICAgIDB4MjEsIDB4MjAsIDB4MWUsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MTEsCj4gKwkJCQkgICAg IDB4MjIsIDB4MzMsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NTUsIDB4NTUsCj4gKwkJCQkgICAgIDB4 NjYsIDB4NjYsIDB4NjYsIDB4NjYsIDB4NjYsIDB4NjYpOwo+ICsKPiArCXM2ZTYzbTBfZGNzX3dy aXRlX3NlcV9zdGF0aWMoY3R4LCAweGI5LAo+ICsJCQkJICAgICAweDJjLCAweDEyLCAweDBjLCAw eDBhLCAweDEwLCAweDBlLCAweDE3LAo+ICsJCQkJICAgICAweDEzLCAweDFmLCAweDFhLCAweDJh LCAweDI0LCAweDFmLCAweDFiLAo+ICsJCQkJICAgICAweDFhLCAweDE3LCAweDJiLCAweDI2LCAw eDIyLCAweDIwLCAweDNhLAo+ICsJCQkJICAgICAweDM0LCAweDMwLCAweDJjLCAweDI5LCAweDI2 LCAweDI1LCAweDIzLAo+ICsJCQkJICAgICAweDIxLCAweDIwLCAweDFlLCAweDFlKTsKPiArCj4g KwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhiYSwKPiArCQkJCSAgICAgMHgw MCwgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg0NCwKPiArCQkJCSAgICAgMHg0NCwg MHg1NSwgMHg1NSwgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwKPiArCQkJCSAgICAgMHg2NiwgMHg2 Nik7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4YzEsCj4gKwkJ CQkgICAgIDB4NGQsIDB4OTYsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZGYsCj4gKwkJCQkg ICAgIDB4MDAsIDB4MDAsIDB4MDMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkJCQkgICAg IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDYsCj4gKwkJCQkgICAgIDB4 MDksIDB4MGQsIDB4MGYsIDB4MTIsIDB4MTUsIDB4MTgpOwo+ICsKPiArCXM2ZTYzbTBfZGNzX3dy aXRlX3NlcV9zdGF0aWMoY3R4LCAweGIyLAo+ICsJCQkJICAgICAweDEwLCAweDEwLCAweDBiLCAw eDA1KTsKPiArCj4gKwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgTUNTX0FDTF9D VFJMLAo+ICsJCQkJICAgICAweDAxKTsKPiArCj4gKwlzNmU2M20wX2Rjc193cml0ZV9zZXFfc3Rh dGljKGN0eCwgTUNTX0VMVlNTX09OLAo+ICsJCQkJICAgICAweDBiKTsKPiArCj4gKwlzNmU2M20w X2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgTUNTX1NUQU5EX0JZX09GRik7Cj4gKwo+ICsJczZl NjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1DU19ESVNQTEFZX09OKTsKPiArCj4gKwlz NmU2M20wX2JyaWdodG5lc3Nfc2V0KGN0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgczZlNjNt MF9wb3dlcl9vbihzdHJ1Y3QgczZlNjNtMCAqY3R4KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBj dHgtPnN1cHBsaWVzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ bXNsZWVwKGN0eC0+cG93ZXJfb25fZGVsYXkpOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgt PnJlc2V0X2dwaW8sIDEpOwo+ICsJbXNsZWVwKGN0eC0+cmVzZXRfZGVsYXkpOwpJdCBzaG91bGQg cmVhbGx5IG5vdCBiZSByZXF1aXJlZCB0byBzZXQgcmVzZXQgdG8gJzEnIGhlcmUuCklmIGl0IGlz IHJlcXVpcmVkIHRoZW4gbW92ZSBpdCBiZWZvcmUgcG93ZXIgaXMgdHVybmVkIG9uLCBzbyB3ZSBh dm9pZAp0aGUgcGFuZWwgaXMgc3RhcnRpbmcgdXAsIHJlc2V0IGFuZCB0aGVuIHN0YXJ0aW5nIHVw LgoKPiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+ICsJbXNsZWVwKGN0 eC0+cmVzZXRfZGVsYXkpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHM2ZTYzbTBfcG93ZXJfb2ZmKHN0cnVjdCBzNmU2M20wICpjdHgpCj4gK3sKPiArCW1zbGVlcChj dHgtPnBvd2VyX29mZl9kZWxheSk7Cj4gKwo+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2Fi bGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cj4gK30KV2UgZGVh c3NlcnQgcmVzZXQgYXQgcG93ZXJfb24sIHNvIGl0IHN1cHJpc2VzIHdlIGRvIG5vdCBhc3NlcnQg cmVzZXQgaGVyZT8KCj4gKwo+ICtzdGF0aWMgaW50IHM2ZTYzbTBfZGlzYWJsZShzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KU2hvdWxkIHlvdSBub3QgdHVy biBicmlnaHRuZXNzIGRvd24gaGVyZT8KQW5kIHR1cm4gb2ZmIHRoZSBkaXNwbGF5IG9yIGdvIHRv IHNsZWVwIG1vZGU/Cgo+ICsKPiArc3RhdGljIGludCBzNmU2M20wX3VucHJlcGFyZShzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IHM2ZTYzbTAgKmN0eCA9IHBhbmVsX3Rv X3M2ZTYzbTAocGFuZWwpOwo+ICsKPiArCWNsZWFyX2JpdChTNkU2M00wX1NUQVRFX0JJVF9FTkFC TEVELCAmY3R4LT5zdGF0ZSk7Cj4gKwo+ICsJczZlNjNtMF9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhj dHgsIE1JUElfRENTX0VOVEVSX1NMRUVQX01PREUpOwo+ICsKPiArCXM2ZTYzbTBfY2xlYXJfZXJy b3IoY3R4KTsKPiArCj4gKwlyZXR1cm4gczZlNjNtMF9wb3dlcl9vZmYoY3R4KTsKPiArfQo+ICsK PiArc3RhdGljIGludCBzNmU2M20wX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4g K3sKPiArCXN0cnVjdCBzNmU2M20wICpjdHggPSBwYW5lbF90b19zNmU2M20wKHBhbmVsKTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gczZlNjNtMF9wb3dlcl9vbihjdHgpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlzNmU2M20wX2luaXQoY3R4KTsKPiArCj4g KwlyZXQgPSBzNmU2M20wX2NsZWFyX2Vycm9yKGN0eCk7Cj4gKwo+ICsJaWYgKHJldCA8IDApCj4g KwkJczZlNjNtMF91bnByZXBhcmUocGFuZWwpOwo+ICsJZWxzZQo+ICsJCXNldF9iaXQoUzZFNjNN MF9TVEFURV9CSVRfRU5BQkxFRCwgJmN0eC0+c3RhdGUpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgczZlNjNtMF9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9ClRoaXMgbG9va3MgbGlrZSB0aGUgcmlnaHQgc3Bv dCB0byB0dXJuIG9uIGJyaWdodG5lc3MKQW5kIHRvIHR1bnIgb24gdGhlIGRpc3BsYXkuCgo+ICsK PiArc3RhdGljIGludCBzNmU2M20wX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK PiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0 b3I7Cj4gKwlzdHJ1Y3QgczZlNjNtMCAqY3R4ID0gcGFuZWxfdG9fczZlNjNtMChwYW5lbCk7Cj4g KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCj4gKwltb2RlID0gZHJtX21vZGVf Y3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKPiArCWlmICghbW9kZSkgewo+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNwbGF5IG1vZGVcbiIpOwo+ICsJCXJldHVybiAwOwo+ ICsJfQo+ICsKPiArCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJmN0eC0+dm0sIG1v ZGUpOwo+ICsJbW9kZS0+d2lkdGhfbW0gPSBjdHgtPndpZHRoX21tOwo+ICsJbW9kZS0+aGVpZ2h0 X21tID0gY3R4LT5oZWlnaHRfbW07Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9t bSA9IG1vZGUtPndpZHRoX21tOwo+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21t ID0gbW9kZS0+aGVpZ2h0X21tOwo+ICsKPiArCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RS SVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+ICsJbW9kZS0+ZmxhZ3MgPSBEUk1fTU9E RV9GTEFHX05WU1lOQyB8IERSTV9NT0RFX0ZMQUdfTkhTWU5DOwo+ICsJZHJtX21vZGVfcHJvYmVk X2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBzNmU2M20wX2RybV9mdW5jcyA9IHsKPiAr CS5kaXNhYmxlCT0gczZlNjNtMF9kaXNhYmxlLAo+ICsJLnVucHJlcGFyZQk9IHM2ZTYzbTBfdW5w cmVwYXJlLAo+ICsJLnByZXBhcmUJPSBzNmU2M20wX3ByZXBhcmUsCj4gKwkuZW5hYmxlCQk9IHM2 ZTYzbTBfZW5hYmxlLAo+ICsJLmdldF9tb2Rlcwk9IHM2ZTYzbTBfZ2V0X21vZGVzLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCBzNmU2M20wX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRf ZGV2aWNlICpiZCkKPiArewo+ICsJcmV0dXJuIGJkLT5wcm9wcy5icmlnaHRuZXNzOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHM2ZTYzbTBfc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9k ZXZpY2UgKmJkKQo+ICt7Cj4gKwlzdHJ1Y3QgczZlNjNtMCAqY3R4ID0gYmxfZ2V0X2RhdGEoYmQp Owo+ICsKPiArCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Cj4gKwlpZiAoY3R4 LT5icmlnaHRuZXNzICE9IGJkLT5wcm9wcy5icmlnaHRuZXNzKSB7Cj4gKwkJY3R4LT5icmlnaHRu ZXNzID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Cj4gKwkJaWYgKHRlc3RfYml0KFM2RTYzTTBfU1RB VEVfQklUX0VOQUJMRUQsICZjdHgtPnN0YXRlKSkKPiArCQkJczZlNjNtMF9icmlnaHRuZXNzX3Nl dChjdHgpOwo+ICsJfQo+ICsKPiArCXJldHVybiBzNmU2M20wX2NsZWFyX2Vycm9yKGN0eCk7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBzNmU2M20wX2JhY2ts aWdodF9vcHMgPSB7Cj4gKwkuZ2V0X2JyaWdodG5lc3MgPSBzNmU2M20wX2dldF9icmlnaHRuZXNz LAo+ICsJLnVwZGF0ZV9zdGF0dXMJPSBzNmU2M20wX3NldF9icmlnaHRuZXNzLAo+ICt9Owo+ICsK PiArc3RhdGljIHZvaWQgczZlNjNtMF9iYWNrbGlnaHRfcmVnaXN0ZXIoc3RydWN0IHM2ZTYzbTAg KmN0eCkKPiArewo+ICsJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzID0gewo+ICsJ CS50eXBlCQk9IEJBQ0tMSUdIVF9SQVcsCj4gKwkJLmJyaWdodG5lc3MJPSBjdHgtPmJyaWdodG5l c3MsCj4gKwkJLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1MKPiArCX07Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi ZDsKPiArCj4gKwliZCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihkZXYsICJwYW5l bCIsIGRldiwgY3R4LAo+ICsJCQkJCSAgICAmczZlNjNtMF9iYWNrbGlnaHRfb3BzLCAmcHJvcHMp Owo+ICsJaWYgKElTX0VSUihiZCkpCj4gKwkJZGV2X2VycihkZXYsICJlcnJvciByZWdpc3Rlcmlu ZyBiYWNrbGlnaHQgZGV2aWNlICglbGQpXG4iLAo+ICsJCQlQVFJfRVJSKGJkKSk7Cj4gK30KPiAr Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBzNmU2M20wX3N5c2ZzX2dhbW1hX21vZGVfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwKPiArCQkJCQkgICAgIGNoYXIgKmJ1ZikKPiArewo+ICsJc3RydWN0IHM2ZTYzbTAgKmN0eCA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJY2hhciB0ZW1wWzEwXTsKPiArCj4gKwlzd2l0Y2gg KGN0eC0+Z2FtbWFfbW9kZSkgewo+ICsJY2FzZSBHQU1NQV9NT0RFXzIyOgo+ICsJCXNwcmludGYo dGVtcCwgIjIuMiBtb2RlXG4iKTsKPiArCQlzdHJjYXQoYnVmLCB0ZW1wKTsKPiArCQlicmVhazsK PiArCWNhc2UgR0FNTUFfTU9ERV8xOToKPiArCQlzcHJpbnRmKHRlbXAsICIxLjkgbW9kZVxuIik7 Cj4gKwkJc3RyY2F0KGJ1ZiwgdGVtcCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEdBTU1BX01PREVf MTc6Cj4gKwkJc3ByaW50Zih0ZW1wLCAiMS43IG1vZGVcbiIpOwo+ICsJCXN0cmNhdChidWYsIHRl bXApOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfaW5mbyhkZXYsICJnYW1tYSBt b2RlIGNvdWxkIGJlIDA6Mi4yLCAxOjEuOSBvciAyOjEuNyluIik7Cj4gKwkJYnJlYWs7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHN0cmxlbihidWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBz NmU2M20wX3N5c2ZzX2dhbW1hX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJ CSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+ICsJCQkJCSAgICAgIGNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKPiArewo+ICsJc3RydWN0IHM2ZTYzbTAgKmN0eCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IHJjOwo+ICsKPiArCXJjID0ga3N0cnRvdWludChi dWYsIDAsICZjdHgtPmdhbW1hX21vZGUpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlyZXR1cm4gcmM7 Cj4gKwo+ICsJczZlNjNtMF9icmlnaHRuZXNzX3NldChjdHgpOwo+ICsJcmV0dXJuIGxlbjsKPiAr fQo+ICsKPiArc3RhdGljIERFVklDRV9BVFRSKGdhbW1hX21vZGUsIDA2NDQsCj4gKwkJICAgczZl NjNtMF9zeXNmc19nYW1tYV9tb2RlX3Nob3csCj4gKwkJICAgczZlNjNtMF9zeXNmc19nYW1tYV9t b2RlX3N0b3JlKTsKCkl0IGxvb2tzIGxpa2UgYSBsb2NhbCBoYWNrIHRvIHVzZSBhIHN5c2ZzIGZp bGUgdG8gc2VsZWN0IGJldHdlZW4KdGhlIGRpZmZlcmVudCBnYW1tYSBtb2Rlcy4KU29tZW9uZSB3 aXRoIG1vcmUgZHJtIGtub3dsZWRnZSBuZWVkcyB0byBjb21tZW50IGlmIHRoaXMgaXMgYW4gT0sg d2F5IHRvIGRvIGl0LgoKPiArCj4gK3N0YXRpYyBpbnQgczZlNjNtMF9wYXJzZV9kdChzdHJ1Y3Qg czZlNjNtMCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKPiAr CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCXJldCA9IG9mX2dldF92aWRlb21vZGUobnAsICZjdHgtPnZtLCAwKTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo bnAsICJwb3dlci1vbi1kZWxheSIsICZjdHgtPnBvd2VyX29uX2RlbGF5KTsKPiArCWlmIChyZXQp IHsKPiArCQlkZXZfaW5mbyhjdHgtPmRldiwgInVzaW5nIGRlZmF1bHQgcG93ZXItb24tZGVsYXkg b2YgMjVtcyIpOwo+ICsJCWN0eC0+cG93ZXJfb25fZGVsYXkgPSAyNTsKPiArCX0KPiArCj4gKwly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInBvd2VyLW9mZi1kZWxheSIsCj4gKwkJCQkg ICAmY3R4LT5wb3dlcl9vZmZfZGVsYXkpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9pbmZvKGN0 eC0+ZGV2LCAidXNpbmcgZGVmYXVsdCBwb3dlci1vZi1kZWxheSBvZiAyMDBtcyIpOwo+ICsJCWN0 eC0+cG93ZXJfb2ZmX2RlbGF5ID0gMjAwOwo+ICsJfQo+ICsKPiArCXJldCA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCAicmVzZXQtZGVsYXkiLCAmY3R4LT5yZXNldF9kZWxheSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJZGV2X2luZm8oY3R4LT5kZXYsICJ1c2luZyBkZWZhdWx0IHJlc2V0LWRlbGF5 IG9mIDEyMG1zIik7Cj4gKwkJY3R4LT5yZXNldF9kZWxheSA9IDEyMDsKPiArCX0KPiArCj4gKwlv Zl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInBhbmVsLXdpZHRoLW1tIiwgJmN0eC0+d2lkdGhfbW0p Owo+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJwYW5lbC1oZWlnaHQtbW0iLCAmY3R4LT5o ZWlnaHRfbW0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHM2ZTYz bTBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArewo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJnNwaS0+ZGV2Owo+ICsJc3RydWN0IHM2ZTYzbTAgKmN0eDsKPiArCWludCByZXQ7Cj4g Kwo+ICsJY3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBzNmU2M20wKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIWN0eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGlf c2V0X2RydmRhdGEoc3BpLCBjdHgpOwo+ICsKPiArCWN0eC0+ZGV2ID0gZGV2Owo+ICsJY3R4LT5i cmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7Cj4gKwljdHgtPmdhbW1hX21vZGUgPSBHQU1NQV9N T0RFXzIyOwo+ICsKPiArCXJldCA9IHM2ZTYzbTBfcGFyc2VfZHQoY3R4KTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJY3R4LT5zdXBwbGllc1swXS5zdXBwbHkgPSAi dmRkMyI7Cj4gKwljdHgtPnN1cHBsaWVzWzFdLnN1cHBseSA9ICJ2Y2kiOwo+ICsJcmV0ID0gZGV2 bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAo+ICsJ CQkJICAgICAgY3R4LT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwg InJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3Bpbykp IHsKPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgcmVzZXQtZ3Bpb3MgJWxkXG4iLAo+ICsJ CQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOwo+ICsJCXJldHVybiBQVFJfRVJSKGN0eC0+cmVz ZXRfZ3Bpbyk7Cj4gKwl9Cj4gKwo+ICsJc3BpLT5iaXRzX3Blcl93b3JkID0gOTsKPiArCXNwaS0+ bW9kZSA9IFNQSV9NT0RFXzM7Cj4gKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJzcGkgc2V0dXAgZmFpbGVkLlxuIik7Cj4gKwkJcmV0 dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2 X2F0dHJfZ2FtbWFfbW9kZSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBhZGQgc3lzZnMgZW50cmllc1xuIik7Cj4gKwo+ICsJZHJtX3BhbmVsX2luaXQoJmN0 eC0+cGFuZWwpOwo+ICsJY3R4LT5wYW5lbC5kZXYgPSBkZXY7Cj4gKwljdHgtPnBhbmVsLmZ1bmNz ID0gJnM2ZTYzbTBfZHJtX2Z1bmNzOwo+ICsKPiArCXJldCA9IGRybV9wYW5lbF9hZGQoJmN0eC0+ cGFuZWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBlcnJfcmVtb3ZlX2ZpbGU7Cj4gKwo+ ICsJczZlNjNtMF9iYWNrbGlnaHRfcmVnaXN0ZXIoY3R4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr Cj4gK2Vycl9yZW1vdmVfZmlsZToKPiArCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0 cl9nYW1tYV9tb2RlKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHM2ZTYzbTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4gK3sKPiArCXN0cnVjdCBz NmU2M20wICpjdHggPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKPiArCj4gKwlzNmU2M20wX3Bvd2Vy X29mZihjdHgpOwo+ICsJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7Cj4gKwlkZXZpY2Vf cmVtb3ZlX2ZpbGUoY3R4LT5kZXYsICZkZXZfYXR0cl9nYW1tYV9tb2RlKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgczZlNjNt MF9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM2ZTYzbTAiIH0s Cj4gKwl7IH0KPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgczZlNjNtMF9vZl9tYXRj aCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgczZlNjNtMF9kcml2ZXIgPSB7Cj4g KwkucHJvYmUJCQk9IHM2ZTYzbTBfcHJvYmUsCj4gKwkucmVtb3ZlCQkJPSBzNmU2M20wX3JlbW92 ZSwKPiArCS5kcml2ZXIJCQk9IHsKPiArCQkubmFtZQkJPSAicGFuZWwtc2Ftc3VuZy1zNmU2M20w IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBzNmU2M20wX29mX21hdGNoLAo+ICsJfSwKPiArfTsK PiArbW9kdWxlX3NwaV9kcml2ZXIoczZlNjNtMF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhP UigiUGF3ZcWCIENobWllbCA8cGF3ZWwubWlrb2xhai5jaG1pZWxAZ21haWwuY29tPiIpOwo+ICtN T0RVTEVfREVTQ1JJUFRJT04oInM2ZTYzbTAgTENEIERyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7ClRoaXMgc2VlbXMgbm90IHRvIG1hdGNoIHRoZSBTUERYIHRhZywgcGxlYXNl IHZlcmlmeS4KCglTYW0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=