From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jitao Shi Subject: Re: [PATCH v14 2/2] drm/bridge: Add I2C based driver for ps8640 bridge Date: Thu, 28 Apr 2016 09:32:48 +0800 Message-ID: <1461807168.3563.20.camel@mszsdhlt06> References: <1459657245-8971-1-git-send-email-jitao.shi@mediatek.com> <1459657245-8971-2-git-send-email-jitao.shi@mediatek.com> <20160414142826.GC32237@ulmo.ba.sec> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160414142826.GC32237@ulmo.ba.sec> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: Mark Rutland , stonea168@163.com, dri-devel@lists.freedesktop.org, yingjoe.chen@mediatek.com, Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, Russell King , devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Andy Yan , Matthias Brugger , eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Sascha Hauer , Kumar Gala List-Id: devicetree@vger.kernel.org T24gVGh1LCAyMDE2LTA0LTE0IGF0IDE2OjI4ICswMjAwLCBUaGllcnJ5IFJlZGluZyB3cm90ZToK PiBPbiBTdW4sIEFwciAwMywgMjAxNiBhdCAxMjoyMDo0NVBNICswODAwLCBKaXRhbyBTaGkgd3Jv dGU6Cj4gWy4uLl0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFk ZS1wczg2NDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uODdmOGJjNwo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMK PiA+IEBAIC0wLDAgKzEsMTA2NiBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE0 IE1lZGlhVGVrIEluYy4KPiAKPiBQcmVzdW1hYmx5IHRoZSBjb3B5cmlnaHQgaGVyZSBzaG91bGQg YmUgdXBkYXRlZD8KClRoYW5rcyBmb3IgeW91ciByZXZpZXcuIEknbGwgdXBkYXRlIGl0IG5leHQg dmVyc2lvbi4KCj4gCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9ncGlvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlv Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ID4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4g PiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtUC5o Pgo+ID4gKyNpbmNsdWRlIDxkcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm1f Y3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtX2NydGMuaD4KPiA+ICsjaW5jbHVkZSA8 ZHJtX2VkaWQuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtX21pcGlfZHNpLmg+Cj4gPiArCj4gPiArI2Rl ZmluZSBQQUdFMl9TUElfQ0ZHMwkJMHg4Mgo+ID4gKyNkZWZpbmUgSTJDX1RPX1NQSV9SRVNFVAkw eDIwCj4gPiArI2RlZmluZSBQQUdFMl9ST01BRERfQllURTEJMHg4ZQo+ID4gKyNkZWZpbmUgUEFH RTJfUk9NQUREX0JZVEUyCTB4OGYKPiA+ICsjZGVmaW5lIFBBR0UyX1NXU1BJX1dEQVRBCTB4OTAK PiA+ICsjZGVmaW5lIFBBR0UyX1NXU1BJX1JEQVRBCTB4OTEKPiA+ICsjZGVmaW5lIFBBR0UyX1NX U1BJX0xFTgkJMHg5Mgo+ID4gKyNkZWZpbmUgUEFHRTJfU1dTUElfQ1RMCQkweDkzCj4gPiArI2Rl ZmluZSBUUklHR0VSX05PX1JFQURCQUNLCTB4MDUKPiA+ICsjZGVmaW5lIFRSSUdHRVJfUkVBREJB Q0sJMHgwMQo+ID4gKyNkZWZpbmUgUEFHRTJfU1BJX1NUQVRVUwkweDllCj4gPiArI2RlZmluZSBQ QUdFMl9HUElPX0wJCTB4YTYKPiA+ICsjZGVmaW5lIFBBR0UyX0dQSU9fSAkJMHhhNwo+ID4gKyNk ZWZpbmUgUFNfR1BJTzkJCUJJVCgxKQo+ID4gKyNkZWZpbmUgUEFHRTJfSVJPTV9DVFJMCQkweGIw Cj4gPiArI2RlZmluZSBJUk9NX0VOQUJMRQkJMHhjMAo+ID4gKyNkZWZpbmUgSVJPTV9ESVNBQkxF CQkweDgwCj4gPiArI2RlZmluZSBQQUdFMl9TV19SRVNFVAkJMHhiYwo+ID4gKyNkZWZpbmUgU1BJ X1NXX1JFU0VUCQlCSVQoNykKPiA+ICsjZGVmaW5lIE1QVV9TV19SRVNFVAkJQklUKDYpCj4gPiAr I2RlZmluZSBQQUdFMl9FTkNUTFNQSV9XUgkweGRhCj4gPiArI2RlZmluZSBQQUdFMl9JMkNfQllQ QVNTCTB4ZWEKPiA+ICsjZGVmaW5lIEkyQ19CWVBBU1NfRU4JCTB4ZDAKPiA+ICsjZGVmaW5lIFBB R0UzX1NFVF9BREQJCTB4ZmUKPiA+ICsjZGVmaW5lIFBBR0UzX1NFVF9WQUwJCTB4ZmYKPiA+ICsj ZGVmaW5lIFZET19DVExfQURECQkweDEzCj4gPiArI2RlZmluZSBWRE9fRElTCQkJMHgxOAo+ID4g KyNkZWZpbmUgVkRPX0VOCQkJMHgxYwo+ID4gKyNkZWZpbmUgUEFHRTRfUkVWX0wJCTB4ZjAKPiA+ ICsjZGVmaW5lIFBBR0U0X1JFVl9ICQkweGYxCj4gPiArI2RlZmluZSBQQUdFNF9DSElQX0wJCTB4 ZjIKPiA+ICsjZGVmaW5lIFBBR0U0X0NISVBfSAkJMHhmMwo+ID4gKwo+ID4gKy8qIEZpcm13YXJl ICovCj4gPiArI2RlZmluZSBTUElfTUFYX1JFVFJZX0NOVAk4Cj4gPiArI2RlZmluZSBQU19GV19O QU1FCQkicHM4NjR4X2Z3LmJpbiIKPiA+ICsKPiA+ICsjZGVmaW5lIEZXX0NISVBfSURfT0ZGU0VU CTAKPiA+ICsjZGVmaW5lIEZXX1ZFUlNJT05fT0ZGU0VUCTIKPiA+ICsjZGVmaW5lIEVESURfSTJD X0FERFIJCTB4NTAKPiA+ICsKPiA+ICsjZGVmaW5lIFdSSVRFX1NUQVRVU19SRUdfQ01ECTB4MDEK PiA+ICsjZGVmaW5lIFJFQURfU1RBVFVTX1JFR19DTUQJMHgwNQo+ID4gKyNkZWZpbmUgQlVTWQkJ CUJJVCgwKQo+ID4gKyNkZWZpbmUgQ0xFQVJfQUxMX1BST1RFQ1QJMHgwMAo+ID4gKyNkZWZpbmUg QkxLX1BST1RFQ1RfQklUUwkweDBjCj4gPiArI2RlZmluZSBTVEFUVVNfUkVHX1BST1RFQ1QJQklU KDcpCj4gPiArI2RlZmluZSBXUklURV9FTkFCTEVfQ01ECTB4MDYKPiA+ICsjZGVmaW5lIENISVBf RVJBU0VfQ01ECQkweGM3Cj4gPiArCj4gPiArI2RlZmluZSBicmlkZ2VfdG9fcHM4NjQwKGUpCWNv bnRhaW5lcl9vZihlLCBzdHJ1Y3QgcHM4NjQwLCBicmlkZ2UpCj4gPiArI2RlZmluZSBjb25uZWN0 b3JfdG9fcHM4NjQwKGUpCWNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgcHM4NjQwLCBjb25uZWN0b3Ip Cj4gCj4gSSdkIHByZWZlciB0aGVzZSB0byBiZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4KSSds bCB1cGRhdGUgaXQgbmV4dCB2ZXJzaW9uLgpUaGFua3MKPiAKPiA+ICsKPiA+ICtzdHJ1Y3QgcHM4 NjQwX2luZm8gewo+ID4gKwl1OCBmYW1pbHlfaWQ7Cj4gPiArCXU4IHZhcmlhbnRfaWQ7Cj4gPiAr CXUxNiB2ZXJzaW9uOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHBzODY0MCB7Cj4gPiArCXN0 cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiA+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJp ZGdlOwo+ID4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPiA+ICsJc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSBkc2k7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpwYWdlWzhdOwo+ID4gKwlzdHJ1Y3QgaTJj X2NsaWVudCAqZGRjX2kyYzsKPiA+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxp ZXNbMl07Cj4gPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwo+ID4gKwlzdHJ1Y3QgZ3Bpb19k ZXNjICpncGlvX3JzdF9uOwo+ID4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3NscF9uOwo+ID4g KwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX21vZGVfc2VsX247Cj4gPiArCWJvb2wgZW5hYmxlZDsK PiA+ICsKPiA+ICsJLyogZmlybXdhcmUgZmlsZSBpbmZvICovCj4gPiArCWJvb2wgaW5fZndfdXBk YXRlOwo+ID4gKwlzdHJ1Y3QgcHM4NjQwX2luZm8gaW5mbzsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCB1OCBlbmNfY3RybF9jb2RlWzZdID0gezB4YWEsIDB4NTUsIDB4NTAsIDB4NDEs IDB4NTIsIDB4NDR9Owo+ID4gK3N0YXRpYyBjb25zdCB1OCBod19jaGlwX2lkWzRdID0gezB4MDAs IDB4MGEsIDB4MDAsIDB4MzB9Owo+IAo+IFNwYWNlcyBhZnRlciB7IGFuZCBiZWZvcmUgfSwgcGxl YXNlLgoKSSdsbCBmaXggdGhlbSBuZXh0IHZlcnNpb24sIHRoYW5rcy4KCj4gPiArCj4gPiArc3Rh dGljIGludCBwczg2NDBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4 ICpkYXRhLAo+ID4gKwkJICAgICAgIHUxNiBkYXRhX2xlbikKPiA+ICt7Cj4gPiArCWludCByZXQ7 Cj4gPiArCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKPiA+ICsJCXsKPiA+ICsJCSAuYWRkciA9 IGNsaWVudC0+YWRkciwKPiA+ICsJCSAuZmxhZ3MgPSAwLAo+ID4gKwkJIC5sZW4gPSAxLAo+ID4g KwkJIC5idWYgPSAmcmVnLAo+ID4gKwkJIH0sCj4gPiArCQl7Cj4gPiArCQkgLmFkZHIgPSBjbGll bnQtPmFkZHIsCj4gPiArCQkgLmZsYWdzID0gSTJDX01fUkQsCj4gPiArCQkgLmxlbiA9IGRhdGFf bGVuLAo+ID4gKwkJIC5idWYgPSBkYXRhLAo+ID4gKwkJIH0KPiAKPiBQbGVhc2UgaW5kZW50IHBy b3Blcmx5IGhlcmUuIFRoaXMgdXNlcyBhIHdlaXJkIG1peCBvZiB0YWJzIGFuZCBzcGFjZXMsCj4g d2hlcmUgaXQgc2hvdWxkIGJlIHRhYnMgb25seS4KCkknbGwgZml4IGl0IG5leHQgdmVyc2lvbi4K VGhhbmtzCj4gCj4gPiArCX07Cj4gPiArCj4gPiArCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQt PmFkYXB0ZXIsIG1zZ3MsIDIpOwo+ID4gKwo+ID4gKwlpZiAocmV0ID09IDIpCj4gPiArCQlyZXR1 cm4gMDsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwllbHNlCj4g PiArCQlyZXR1cm4gLUVJTzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2NDBfd3Jp dGVfYnl0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsCj4gPiAr CQkJICAgICAgdTE2IGRhdGFfbGVuKQo+ID4gK3sKPiA+ICsJaW50IHJldDsKPiA+ICsJc3RydWN0 IGkyY19tc2cgbXNnOwo+ID4gKwo+ID4gKwltc2cuYWRkciA9IGNsaWVudC0+YWRkcjsKPiA+ICsJ bXNnLmZsYWdzID0gMDsKPiA+ICsJbXNnLmxlbiA9IGRhdGFfbGVuOwo+ID4gKwltc2cuYnVmID0g KHU4ICopZGF0YTsKPiA+ICsKPiA+ICsJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRl ciwgJm1zZywgMSk7Cj4gPiArCWlmIChyZXQgPT0gMSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwlp ZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCWVsc2UKPiA+ICsJCXJldHVybiAt RUlPOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBzODY0MF93cml0ZV9ieXRlKHN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgIHU4IGRhdGEpCj4gPiArewo+ID4gKwl1OCBi dWZbXSA9IHtyZWcsIGRhdGF9Owo+IAo+IFNwYWNlcyBhZnRlciB7IGFuZCBiZWZvcmUgfSwgcGxl YXNlLiBUaGVyZSBhcmUgYSBidW5jaCBtb3JlIG9mIHRob3NlCj4gYmVsb3csIHBsZWFzZSBmaXgg dGhvc2UgdXAgYXMgd2VsbC4KCkknbGwgZml4IHRoZW0gbmV4dCB2ZXJzaW9uLgpUaGFua3MKCj4g Cj4gPiArCj4gPiArCXJldHVybiBwczg2NDBfd3JpdGVfYnl0ZXMoY2xpZW50LCBidWYsIHNpemVv ZihidWYpKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgcHM4NjQwX2dldF9tY3VfZndf dmVyc2lvbihzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzVdOwo+ID4gKwl1OCBmd192ZXJbMl07 Cj4gPiArCj4gPiArCXBzODY0MF9yZWFkKGNsaWVudCwgMHg0LCBmd192ZXIsIDIpOwo+IAo+IHNp emVvZihmd192ZXIpIHBlcmhhcHMgYW5kIGNoZWNrIGZvciBlcnJvcnM/CkknbGwgZml4IGl0IG5l eHQgdmVyc2lvbi4KVGhhbmtzCj4gCj4gPiArCXBzX2JyaWRnZS0+aW5mby52ZXJzaW9uID0gKGZ3 X3ZlclswXSA8PCA4KSB8IGZ3X3ZlclsxXTsKPiA+ICsKPiA+ICsJRFJNX0lORk9fT05DRSgicHM4 NjQwIHJvbSBmdyB2ZXJzaW9uICVkLiVkXG4iLCBmd192ZXJbMF0sIGZ3X3ZlclsxXSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX2JyaWRnZV9lbmFibGUoc3RydWN0IHBzODY0 MCAqcHNfYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBz X2JyaWRnZS0+cGFnZVszXTsKPiA+ICsJdTggdmRvX2N0cmxfYnVmWzNdID0ge1BBR0UzX1NFVF9B REQsIFZET19DVExfQURELCBWRE9fRU59Owo+ID4gKwo+ID4gKwlyZXR1cm4gcHM4NjQwX3dyaXRl X2J5dGVzKGNsaWVudCwgdmRvX2N0cmxfYnVmLCAzKTsKPiAKPiBzaXplb2YodmRvX2N0cmxfYnVm KT8gVGhlcmUgYXJlIG1vcmUgb2YgdGhlc2UgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLgpJJ2xsIGZp eCBpdCBuZXh0IHZlcnNpb24uClRoYW5rcwo+IAo+ID4gK3N0YXRpYyB2b2lkIHBzODY0MF9wb3N0 X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBw czg2NDAgKnBzX2JyaWRnZSA9IGJyaWRnZV90b19wczg2NDAoYnJpZGdlKTsKPiA+ICsJaW50IGVy cjsKPiA+ICsKPiA+ICsJaWYgKHBzX2JyaWRnZS0+aW5fZndfdXBkYXRlKQo+ID4gKwkJcmV0dXJu Owo+IAo+IEkgZG9uJ3QgbGlrZSBob3cgdGhpcyBpcyBoYW5kbGVkLiBDb25zaWRlciB3aGF0IGhh cHBlbnMgaWYgeW91IGFyZSBpbgo+IHRoZSBwcm9jZXNzIG9mIHVwZGF0aW5nIHRoZSBmaXJtd2Fy ZS4gVGhlIGFib3ZlIGNvZGUgYWxvbmcgd2l0aCB0aGF0IGluCj4gb3RoZXIgcGFydHMgb2YgdGhl IGRyaXZlciB3aWxsIHNpbGVudGx5IGlnbm9yZSBhbGwgb3BlcmF0aW9ucyBvbiB0aGUKPiBicmlk Z2UgZHVyaW5nIGFuIHVwZGF0ZS4gSSB0aGluayB0aGVzZSBwbGFjZXMgc2hvdWxkIGJlIHVwZGF0 ZWQgdG8KPiByZXR1cm4gYW4gZXJyb3IgY29kZSAoLUVBR0FJTiwgLUVCVVNZIG9yIHRoZSBsaWtl KSBvciB0aGV5IHNob3VsZCBibG9jawo+IGFsbCBvcGVyYXRpb25zIChwZXJoYXBzIHZpYSBhIG11 dGV4KSB1bnRpbCB0aGUgZmlybXdhcmUgdXBkYXRlIGlzCj4gY29tcGxldGUuCj4gCgpJJ2xsIGFk ZCBtdXRleCB3aGVuIGZpcm13YXJlIHVwZGF0ZSBuZXh0IHZlcnNpb24uIAoKPiA+ICtzdGF0aWMg aW50IHBzODY0MF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGNvbm5lY3Rvcl90b19wczg2NDAo Y29ubmVjdG9yKTsKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBzX2JyaWRnZS0+cGFnZVsw XS0+ZGV2Owo+ID4gKwl1OCAqZWRpZDsKPiA+ICsJaW50IHJldCwgbnVtX21vZGVzID0gMDsKPiA+ ICsJYm9vbCBwb3dlcl9vZmY7Cj4gPiArCj4gPiArCWlmIChwc19icmlkZ2UtPmVkaWQpCj4gPiAr CQlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgcHNfYnJpZGdlLT5lZGlkKTsK PiA+ICsKPiA+ICsJcG93ZXJfb2ZmID0gIXBzX2JyaWRnZS0+ZW5hYmxlZDsKPiA+ICsJcHM4NjQw X3ByZV9lbmFibGUoJnBzX2JyaWRnZS0+YnJpZGdlKTsKPiA+ICsKPiA+ICsJZWRpZCA9IGRldm1f a21hbGxvYyhkZXYsIEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFlZGlkKSB7 Cj4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBFRElEXG4iKTsKPiA+ICsJCXJl dHVybiAwOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IHBzODY0MF9yZWFkKHBzX2JyaWRnZS0+ ZGRjX2kyYywgMCwgZWRpZCwgRURJRF9MRU5HVEgpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290 byBvdXQ7Cj4gCj4gVGhpcyBzaG91bGQgYmUgdXNpbmcgdGhlIHN0YW5kYXJkIEVESUQgaGVscGVy cy4KCkknbGwgZml4IGl0IG5leHQgdmVyc2lvbi4KVGhhbmtzCj4gCj4gPiArLyogRmlybXdhcmUg VmVyc2lvbiBpcyByZXR1cm5lZCBhcyBNYWpvci5NaW5vci5CdWlsZCAqLwo+IAo+IE5vLCBpdCBp c24ndC4gVGhlIGJlbG93IHJldHVybnMgIngueSIgKHdoaWNoIEkgYXNzdW1lIGlzICJtYWpvci5t aW5vciIpLgo+IApJJ2xsIGZpeCBpdCBuZXh0IHZlcnNpb24uClRoYW5rcwoKPiA+ICtzdGF0aWMg c3NpemVfdCBwczg2NDBfZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICsJ CQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ICt7 Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ ID4gKwlzdHJ1Y3QgcHM4NjQwX2luZm8gKmluZm8gPSAmcHNfYnJpZGdlLT5pbmZvOwo+ID4gKwo+ ID4gKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXUuJXVcbiIsIGluZm8tPnZl cnNpb24gPj4gOCwKPiA+ICsJCQkgaW5mby0+dmVyc2lvbiAmIDB4ZmYpOwo+ID4gK30KPiBbLi4u XQo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX3NwaV9zZW5kX2NtZChzdHJ1Y3QgcHM4NjQwICpwc19i cmlkZ2UsIHU4ICpjbWQsIHU4IGNtZF9sZW4pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzJdOwo+ID4gKwl1OCBpLCBidWZbM10gPSB7UEFH RTJfU1dTUElfTEVOLCBjbWRfbGVuIC0gMSwgVFJJR0dFUl9OT19SRUFEQkFDS307Cj4gPiArCWlu dCByZXQ7Cj4gPiArCj4gPiArCXJldCA9IHBzODY0MF93cml0ZV9ieXRlKGNsaWVudCwgUEFHRTJf SVJPTV9DVFJMLCBJUk9NX0VOQUJMRSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycjsK PiA+ICsKPiA+ICsJLyogd3JpdGUgY29tbWFuZCBpbiB3cml0ZSBwb3J0ICovCj4gPiArCWZvciAo aSA9IDA7IGkgPCBjbWRfbGVuOyBpKyspIHsKPiA+ICsJCXJldCA9IHBzODY0MF93cml0ZV9ieXRl KGNsaWVudCwgUEFHRTJfU1dTUElfV0RBVEEsIGNtZFtpXSk7Cj4gPiArCQlpZiAocmV0KSB7Cj4g PiArCQkJcHM4NjQwX3dyaXRlX2J5dGUoY2xpZW50LCBQQUdFMl9JUk9NX0NUUkwsCj4gPiArCQkJ CQkgIElST01fRElTQUJMRSk7Cj4gPiArCQkJZ290byBlcnI7Cj4gCj4gQ2FuJ3QgdGhpcyBzaW1w bHkgYmUgImdvdG8gZXJyX2lyb21fZGlzYWJsZTsiPwoKSSdsbCBmaXggaXQgbmV4dCB2ZXJzaW9u LgpUaGFua3MKPiAKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfd3Jp dGVfYnl0ZXMoY2xpZW50LCBidWYsIDMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJf aXJvbV9kaXNhYmxlOwo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfd3JpdGVfYnl0ZShjbGllbnQs IFBBR0UyX0lST01fQ1RSTCwgSVJPTV9ESVNBQkxFKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdv dG8gZXJyOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICtlcnJfaXJvbV9kaXNhYmxlOgo+ID4g Kwlwczg2NDBfd3JpdGVfYnl0ZShjbGllbnQsIFBBR0UyX0lST01fQ1RSTCwgSVJPTV9ESVNBQkxF KTsKPiA+ICtlcnI6Cj4gPiArCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAic2VuZCBjb21tYW5kIGVy cjogJWRcbiIsIHJldCk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgcHM4NjQwX3dhaXRfc3BpX3JlYWR5KHN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19icmlkZ2UtPnBhZ2VbMl07 Cj4gPiArCXU4IHNwaV9yZHlfc3Q7Cj4gPiArCWt0aW1lX3QgdGltZW91dDsKPiA+ICsKPiA+ICsJ dGltZW91dCA9IGt0aW1lX2FkZF9tcyhrdGltZV9nZXQoKSwgMjAwKTsKPiA+ICsJZm9yICg7Oykg ewo+ID4gKwkJcHM4NjQwX3JlYWQoY2xpZW50LCBQQUdFMl9TUElfU1RBVFVTLCAmc3BpX3JkeV9z dCwgMSk7Cj4gPiArCQlpZiAoKHNwaV9yZHlfc3QgJiAweDBjKSAhPSAweDBjKQo+IAo+IENhbiB3 ZSBnZXQgc3ltYm9saWMgbmFtZXMgZm9yIDB4MGMsIHBsZWFzZT8KSSdsbCBmaXggaXQgbmV4dCB2 ZXJzaW9uLgpUaGFua3MKPiAKPiA+ICsJCQlicmVhazsKPiA+ICsKPiA+ICsJCWlmIChrdGltZV9j b21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApIHsKPiA+ICsJCQlkZXZfZXJyKCZjbGll bnQtPmRldiwgIndhaXQgc3BpIHJlYWR5IHRpbWVvdXRcbiIpOwo+ID4gKwkJCXJldHVybiAtRUJV U1k7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQltc2xlZXAoMjApOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiBbLi4uXQo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX3dyaXRlX3Jv bShzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCj4g PiArewo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzBd Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gPiArCXN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQyID0gcHNfYnJpZGdlLT5wYWdlWzJdOwo+ID4gKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50NyA9IHBzX2JyaWRnZS0+cGFnZVs3XTsKPiA+ICsJdW5zaWduZWQgaW50 IHBvcyA9IDA7Cj4gCj4gTWFrZSB0aGlzIHNpemVfdCBzaW5jZSB5b3UgY29tcGFyZSBpdCB0byBm dy0+c2l6ZSwgd2hpY2ggaXMgc2l6ZV90IGFzCj4gd2VsbC4KCkknbGwgZml4IGl0IG5leHQgdmVy c2lvbi4KVGhhbmtzCj4gCj4gPiArCXU4IGJ1ZlsyNTddLCByb21fcGFnZV9pZF9idWZbM107Cj4g PiArCWludCByZXQ7Cj4gPiArCXUxNiBjcHlfbGVuOwo+ID4gKwo+ID4gKwlwczg2NDBfd3JpdGVf Ynl0ZShjbGllbnQyLCBQQUdFMl9TUElfQ0ZHMywgSTJDX1RPX1NQSV9SRVNFVCk7Cj4gPiArCW1z bGVlcCgxMDApOwo+ID4gKwlwczg2NDBfd3JpdGVfYnl0ZShjbGllbnQyLCBQQUdFMl9TUElfQ0ZH MywgMHgwMCk7Cj4gPiArCj4gPiArCWZvciAocG9zID0gMDsgcG9zIDwgZnctPnNpemU7IHBvcyAr PSBjcHlfbGVuKSB7Cj4gPiArCQlyb21fcGFnZV9pZF9idWZbMF0gPSBQQUdFMl9ST01BRERfQllU RTE7Cj4gPiArCQlyb21fcGFnZV9pZF9idWZbMV0gPSBwb3MgPj4gODsKPiA+ICsJCXJvbV9wYWdl X2lkX2J1ZlsyXSA9IHBvcyA+PiAxNjsKPiA+ICsJCXJldCA9IHBzODY0MF93cml0ZV9ieXRlcyhj bGllbnQyLCByb21fcGFnZV9pZF9idWYsIDMpOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlnb3Rv IGVycm9yOwo+ID4gKwkJY3B5X2xlbiA9IGZ3LT5zaXplID49IDI1NiArIHBvcyA/IDI1NiA6IGZ3 LT5zaXplIC0gcG9zOwo+ID4gKwkJYnVmWzBdID0gMDsKPiA+ICsJCW1lbWNweShidWYgKyAxLCBm dy0+ZGF0YSArIHBvcywgY3B5X2xlbik7Cj4gPiArCQlyZXQgPSBwczg2NDBfd3JpdGVfYnl0ZXMo Y2xpZW50NywgYnVmLCBjcHlfbGVuICsgMSk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCWdvdG8g ZXJyb3I7Cj4gPiArCj4gPiArCQlkZXZfZGJnKGRldiwgImZ3IHVwZGF0ZSBjb21wbGV0ZWQgJXUg LyAlenUgYnl0ZXNcbiIsIHBvcywKPiA+ICsJCQlmdy0+c2l6ZSk7Cj4gPiArCX0KPiA+ICsJcmV0 dXJuIDA7Cj4gPiArCj4gPiArZXJyb3I6Cj4gPiArCWRldl9lcnIoZGV2LCAiZmFpbGVkIHdyaXRl IGV4dGVuYWwgZmxhc2gsICVkXG4iLCByZXQpOwo+IAo+ICJleHRlcm5hbCIKSSdsbCBmaXggaXQg bmV4dCB2ZXJzaW9uLgpUaGFua3MKPiAKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBwczg2NDBfc3BpX25vcm1hbF9tb2RlKHN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSkKPiA+ICt7Cj4gPiArCXU4IGNtZFsyXTsKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHBzX2JyaWRnZS0+cGFnZVsyXTsKPiA+ICsKPiA+ICsJLyogRW5hYmxlLVdyaXRlLVN0 YXR1cy1SZWdpc3RlciAqLwo+ID4gKwljbWRbMF0gPSBXUklURV9FTkFCTEVfQ01EOwo+ID4gKwlw czg2NDBfc3BpX3NlbmRfY21kKHBzX2JyaWRnZSwgY21kLCAxKTsKPiA+ICsKPiA+ICsJLyogcHJv dGVjdCBCUEwvQlAwL0JQMSAqLwo+ID4gKwljbWRbMF0gPSBXUklURV9TVEFUVVNfUkVHX0NNRDsK PiA+ICsJY21kWzFdID0gQkxLX1BST1RFQ1RfQklUUyB8IFNUQVRVU19SRUdfUFJPVEVDVDsKPiA+ ICsJcHM4NjQwX3NwaV9zZW5kX2NtZChwc19icmlkZ2UsIGNtZCwgMik7Cj4gPiArCj4gPiArCS8q IHdhaXQgZm9yIFNQSSByb20gcmVhZHkgKi8KPiA+ICsJcHM4NjQwX3dhaXRfcm9tX2lkbGUocHNf YnJpZGdlKTsKPiA+ICsKPiA+ICsJLyogZGlzYWJsZSBQUzg2NDAgbWFwcGluZyBmdW5jdGlvbiAq Lwo+ID4gKwlwczg2NDBfd3JpdGVfYnl0ZShjbGllbnQsIFBBR0UyX0VOQ1RMU1BJX1dSLCAweDAw KTsKPiA+ICsKPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHBzX2JyaWRnZS0+Z3Bpb19tb2RlX3NlbF9u LCAxKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQw X2VudGVyX2JsKHN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSkKPiA+ICt7Cj4gPiArCXBzX2JyaWRn ZS0+aW5fZndfdXBkYXRlID0gdHJ1ZTsKPiAKPiBCZXNpZGVzIG15IG90aGVyIGNvbW1lbnRzIG9u IHRoaXMsIEkgdGhpbmsgeW91J2xsIG5lZWQgcHJvcGVyIGxvY2tpbmcKPiBoZXJlLCBvdGhlcndp c2UgeW91IG1pZ2h0IGVuZCB1cCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB5b3UgY2FuIHN0aWxsCj4g cG93ZXIgb2ZmIHRoZSBjaGlwIGR1cmluZyBmaXJtd2FyZSB1cGRhdGUuIENvbnNpZGVyIHRoZSBj YXNlIHdoZXJlIHlvdQo+IHBvd2VyIG9mZiB0aGUgY2hpcCwgcGFzcyB0aGUgaW5fZndfdXBkYXRl IGNoZWNrIGJ1dCB0aGVuIGltbWVkaWF0ZWx5Cj4gdHJpZ2dlciB0aGUgZmlybXdhcmUgdXBkYXRl IHZpYSBzeXNmcyBhbmQgc3RhcnQgdXBkYXRpbmcgd2hpbGUgdGhlIGNoaXAKPiBpcyBiZWluZyBz aHV0IGRvd24uCj4gCgpJJ2xsIGZpeCBpdCBuZXh0IHZlcnNpb24uIEknbGwgYWRkIG11dGV4IHdo b2xlIGZpcm13YXJlIHVwZGF0aW5nIHRvCnByb3RlY3QuClRoYW5rcwoKPiA+ICsJcmV0dXJuIHBz ODY0MF9zcGlfZGxfbW9kZShwc19icmlkZ2UpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBwczg2NDBfZXhpdF9ibChzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UsIGNvbnN0IHN0cnVjdCBm aXJtd2FyZSAqZncpCj4gPiArewo+ID4gKwlwczg2NDBfc3BpX25vcm1hbF9tb2RlKHBzX2JyaWRn ZSk7Cj4gPiArCXBzX2JyaWRnZS0+aW5fZndfdXBkYXRlID0gZmFsc2U7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgcHM4NjQwX2xvYWRfZncoc3RydWN0IHBzODY0MCAqcHNfYnJpZGdlLCBj b25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCA9IHBzX2JyaWRnZS0+cGFnZVswXTsKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JmNsaWVudC0+ZGV2Owo+ID4gKwlpbnQgcmV0Owo+ID4gKwlib29sIHBzODY0MF9zdGF0dXNfYmFj a3VwID0gcHNfYnJpZGdlLT5lbmFibGVkOwo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfdmFsaWRh dGVfZmlybXdhcmUocHNfYnJpZGdlLCBmdyk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4g cmV0Owo+ID4gKwo+ID4gKwlpZiAoIXBzX2JyaWRnZS0+aW5fZndfdXBkYXRlKSB7Cj4gPiArCQlp ZiAoIXBzODY0MF9zdGF0dXNfYmFja3VwKQo+ID4gKwkJCXBzODY0MF9wcmVfZW5hYmxlKCZwc19i cmlkZ2UtPmJyaWRnZSk7Cj4gPiArCj4gPiArCQlyZXQgPSBwczg2NDBfZW50ZXJfYmwocHNfYnJp ZGdlKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4g PiArCXJldCA9IHBzODY0MF9yb21fcHJlcGFyZShwc19icmlkZ2UpOwo+ID4gKwlpZiAocmV0KQo+ ID4gKwkJZ290byBleGl0Owo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfd3JpdGVfcm9tKHBzX2Jy aWRnZSwgZncpOwo+ID4gKwo+ID4gK2V4aXQ6Cj4gPiArCWlmIChyZXQpCj4gPiArCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlLCAlZFxuIiwgcmV0KTsKPiA+ICsKPiA+ICsJ cHM4NjQwX2V4aXRfYmwocHNfYnJpZGdlLCBmdyk7Cj4gPiArCWlmICghcHM4NjQwX3N0YXR1c19i YWNrdXApCj4gPiArCQlwczg2NDBfcG9zdF9kaXNhYmxlKCZwc19icmlkZ2UtPmJyaWRnZSk7Cj4g PiArCXJldHVybiByZXQ7Cj4gCj4gVGFraW5nIGEgbXV0ZXggYXJvdW5kIGFsbCBvZiB0aGlzIGNv ZGUgbWlnaHQgYmUgdGhlIGVhc2llc3Qgd2F5IHRvCj4gYWNoaWV2ZSB0aGlzLgoKSSdsbCBmaXgg aXQgbmV4dCB2ZXJzaW9uLiBJJ2xsIGFkZCBtdXRleCB3aGVuIGZpcm13YXJlIHVwZGF0aW5nClRo YW5rcwo+IAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBwczg2NDBfdXBkYXRlX2Z3 X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICsJCQkJICAgICAgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCj4gPiArCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv dW50KQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGll bnQoZGV2KTsKPiA+ICsJc3RydWN0IHBzODY0MCAqcHNfYnJpZGdlID0gaTJjX2dldF9jbGllbnRk YXRhKGNsaWVudCk7Cj4gPiArCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cj4gPiArCWludCBl cnJvcjsKPiA+ICsKPiA+ICsJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgUFNfRldfTkFN RSwgZGV2KTsKPiA+ICsJaWYgKGVycm9yKSB7Cj4gPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0 byBvcGVuIGZpcm13YXJlICVzOiAlZFxuIiwKPiA+ICsJCQlQU19GV19OQU1FLCBlcnJvcik7Cj4g PiArCQlyZXR1cm4gZXJyb3I7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZXJyb3IgPSBwczg2NDBfbG9h ZF9mdyhwc19icmlkZ2UsIGZ3KTsKPiA+ICsJaWYgKGVycm9yKQo+ID4gKwkJZGV2X2VycihkZXYs ICJUaGUgZmlybXdhcmUgdXBkYXRlIGZhaWxlZCglZClcbiIsIGVycm9yKTsKPiA+ICsJZWxzZQo+ ID4gKwkJZGV2X2luZm8oZGV2LCAiVGhlIGZpcm13YXJlIHVwZGF0ZSBzdWNjZWVkZWRcbiIpOwo+ ID4gKwo+ID4gKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKPiA+ICsJcmV0dXJuIGVycm9yID8gZXJy b3IgOiBjb3VudDsKPiA+ICt9Cj4gCj4gVGhpcyBzeXNmcyBpbnRlcmZhY2UgaXMgc29tZXdoYXQg dW5pbnR1aXRpdmUgYmVjYXVzZSBpdCB0cmlnZ2VycyBubwo+IG1hdHRlciB3aGF0IHlvdSB3cml0 ZSB0byB0aGUgZmlsZS4gSSBmaW5kIGl0IGFsc28gYSBsaXR0bGUgdW51c3VhbCB0aGF0Cj4geW91 IHdvdWxkIHRyaWdnZXIgYSBmaXJtd2FyZSB1cGRhdGUgdGhyb3VnaCBzeXNmcywgYnV0IHRoZW4g Z28gdGhyb3VnaAo+IHRoZSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gb2J0YWluIGl0LiBJcyB0aGlz IGEgY29tbW9uIG1ldGhvZCwgb3IgZG8KPiBvdGhlciBkcml2ZXJzIGRvIHNvbWV0aGluZyBkaWZm ZXJlbnQ/Cj4gCgoKVGhhbmtzLCBpIHRoaW5rIGl0IGlzIGEgY29tbW9uIG1ldGhvZC4KT3RoZXIg ZHJpdmVycyBhcmUgc2FtZSBleC4gdGhlIGRyaXZlcnNcaW5wdXRcbW91c2VcZWxhbl9pMmNfY29y ZS5jCgoKPiA+ICtzdGF0aWMgaW50IHBzODY0MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50LAo+ID4gKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiA+ICsJc3RydWN0IHBzODY0MCAq cHNfYnJpZGdlOwo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQsICpvdXRfZXA7Cj4gPiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqcGFuZWxfbm9kZSA9IE5VTEw7Cj4gPiArCWludCBpLCByZXQ7Cj4gCj4gaSBjb3Vs ZCBiZSB1bnNpZ25lZC4KCkknbGwgZml4IGl0IG5leHQgdmVyc2lvbi4KVGhhbmtzCj4gCj4gPiAr Cj4gPiArCXBzX2JyaWRnZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHNfYnJpZGdlKSwg R0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghcHNfYnJpZGdlKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07 Cj4gPiArCj4gPiArCS8qIHBvcnRAMSBpcyBwczg2NDAgb3V0cHV0IHBvcnQgKi8KPiA+ICsJcG9y dCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKG5wLCAxKTsKPiA+ICsJaWYgKHBvcnQpIHsKPiA+ ICsJCW91dF9lcCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwo+ID4g KwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gPiArCQlpZiAob3V0X2VwKSB7Cj4gPiArCQkJcGFuZWxf bm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQob3V0X2VwKTsKPiA+ICsJCQlv Zl9ub2RlX3B1dChvdXRfZXApOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCWlmIChwYW5lbF9ub2Rl KSB7Cj4gPiArCQlwc19icmlkZ2UtPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocGFuZWxfbm9k ZSk7Cj4gPiArCQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKPiA+ICsJCWlmICghcHNfYnJpZGdl LT5wYW5lbCkKPiA+ICsJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiA+ICsJfQo+ID4gKwo+ID4g Kwlwc19icmlkZ2UtPnN1cHBsaWVzWzBdLnN1cHBseSA9ICJ2ZGQzMyI7Cj4gPiArCXBzX2JyaWRn ZS0+c3VwcGxpZXNbMV0uc3VwcGx5ID0gInZkZDEyIjsKPiA+ICsJcmV0ID0gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKHBzX2JyaWRnZS0+c3VwcGxpZXMpLAo+ID4gKwkJ CQkgICAgICBwc19icmlkZ2UtPnN1cHBsaWVzKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2 X2luZm8oZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcmV0KTsKPiA+ICsJ CXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcHNfYnJpZGdlLT5ncGlvX21vZGVfc2Vs X24gPSBkZXZtX2dwaW9kX2dldCgmY2xpZW50LT5kZXYsICJtb2RlLXNlbCIsCj4gPiArCQkJCQkJ ICAgIEdQSU9EX09VVF9ISUdIKTsKPiAKPiBUaGlzIEdQSU8gaXMgdXNlZCB0byBlbmFibGUgcHJv Z3JhbW1pbmcgbW9kZS4gUGVyaGFwcyBpdCBzaG91bGQgYmUgbWFkZQo+IG9wdGlvbmFsLCBhbmQg dGhlIHByb2dyYW1taW5nIG1vZGUgcmVmdXNlIHRvIHJ1biBpZiBpdCBpc24ndCBzcGVjaWZpZWQ/ CgpJJ2xsIGZpeCBpdCBuZXh0IHZlcnNpb24uClRoYW5rcwo+IAo+ID4gKwlpZiAoSVNfRVJSKHBz X2JyaWRnZS0+Z3Bpb19tb2RlX3NlbF9uKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihwc19icmlk Z2UtPmdwaW9fbW9kZV9zZWxfbik7Cj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgbW9k ZS1zZWwgJWRcbiIsIHJldCk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiAr CXBzX2JyaWRnZS0+Z3Bpb19zbHBfbiA9IGRldm1fZ3Bpb2RfZ2V0KCZjbGllbnQtPmRldiwgInNs ZWVwIiwKPiA+ICsJCQkJCSAgICAgICBHUElPRF9PVVRfTE9XKTsKPiA+ICsJaWYgKElTX0VSUihw c19icmlkZ2UtPmdwaW9fc2xwX24pKSB7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKHBzX2JyaWRnZS0+ Z3Bpb19zbHBfbik7Cj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgc2xlZXA6ICVkXG4i LCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKgo+ID4gKwkg KiBSZXF1ZXN0IHRoZSByZXNldCBwaW4gbG93IHRvIGF2b2lkIHRoZSBicmlkZ2UgYmVpbmcKPiA+ ICsJICogaW5pdGlhbGl6ZWQgcHJlbWF0dXJlbHkKPiA+ICsJICovCj4gPiArCXBzX2JyaWRnZS0+ Z3Bpb19yc3RfbiA9IGRldm1fZ3Bpb2RfZ2V0KCZjbGllbnQtPmRldiwgInJlc2V0IiwKPiA+ICsJ CQkJCSAgICAgICBHUElPRF9PVVRfTE9XKTsKPiA+ICsJaWYgKElTX0VSUihwc19icmlkZ2UtPmdw aW9fcnN0X24pKSB7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKHBzX2JyaWRnZS0+Z3Bpb19yc3Rfbik7 Cj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgcmVzZXQ6ICVkXG4iLCByZXQpOwo+ID4g KwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwc19icmlkZ2UtPmJyaWRnZS5mdW5j cyA9ICZwczg2NDBfYnJpZGdlX2Z1bmNzOwo+ID4gKwlwc19icmlkZ2UtPmJyaWRnZS5vZl9ub2Rl ID0gZGV2LT5vZl9ub2RlOwo+ID4gKwlyZXQgPSBkcm1fYnJpZGdlX2FkZCgmcHNfYnJpZGdlLT5i cmlkZ2UpOwo+IAo+IFBlcmhhcHMgcG9zdHBvbmUgdGhlIGNhbGwgdG8gZHJtX2JyaWRnZV9hZGQo KSB1bnRpbCBldmVyeXRoaW5nIGhhcyBiZWVuCj4gcHJvcGVybHkgc2V0IHVwPyBUaGF0IHdheSB5 b3UgZG9uJ3QgaGF2ZSB0byB1bmRvIGl0IGFnYWluIGlmIHNvbWV0aGluZwo+IGdvZXMgd3Jvbmcg aW4gdGhlIG1vcmUgbGlrZWx5IHBsYWNlcy4KCkknbGwgZml4IGl0IG5leHQgdmVyc2lvbi4KVGhh bmtzCj4gCj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBicmlkZ2U6ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlwc19icmlkZ2UtPnBhZ2VbMF0gPSBjbGllbnQ7Cj4gPiArCXBzX2JyaWRnZS0+ZGRjX2ky YyA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLCBFRElEX0kyQ19BRERSKTsKPiA+ICsJ aWYgKCFwc19icmlkZ2UtPmRkY19pMmMpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGRk Y19pMmMgZHVtbXkgZGV2aWNlLCBhZGRyZXNzJTAyeFxuIiwKPiA+ICsJCQlFRElEX0kyQ19BRERS KTsKPiA+ICsJCXJldCA9IC1FQlVTWTsKPiA+ICsJCWdvdG8gZXhpdF9kZGNfaTJjX2R1bW15Owo+ ID4gKwl9Cj4gPiArCS8qCj4gPiArCSAqIHBzODY0MCB1c2VzIG11bHRpcGxlIGFkZHJlc3Nlcywg dXNlIGR1bW15IGRldmljZXMgZm9yIHRoZW0KPiA+ICsJICogcGFnZVswXTogZm9yIERQIGNvbnRy b2wKPiA+ICsJICogcGFnZVsxXTogZm9yIFZJREVPIEJyaWRnZQo+ID4gKwkgKiBwYWdlWzJdOiBm b3IgY29udHJvbCB0b3AKPiA+ICsJICogcGFnZVszXTogZm9yIERTSSBMaW5rIENvbnRyb2wxCj4g PiArCSAqIHBhZ2VbNF06IGZvciBNSVBJIFBoeQo+ID4gKwkgKiBwYWdlWzVdOiBmb3IgVlBMTAo+ ID4gKwkgKiBwYWdlWzZdOiBmb3IgRFNJIExpbmsgQ29udHJvbDIKPiA+ICsJICogcGFnZVs3XTog Zm9yIHNwaSByb20gbWFwcGluZwo+ID4gKwkgKi8KPiA+ICsJZm9yIChpID0gMTsgaSA8IDg7IGkr Kykgewo+ID4gKwkJcHNfYnJpZGdlLT5wYWdlW2ldID0gaTJjX25ld19kdW1teShjbGllbnQtPmFk YXB0ZXIsCj4gPiArCQkJCQkJICAgY2xpZW50LT5hZGRyICsgaSk7Cj4gPiArCQlpZiAoIXBzX2Jy aWRnZS0+cGFnZVtpXSkgewo+ID4gKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIGkyYyBkdW1teSBk ZXZpY2UsIGFkZHJlc3MlMDJ4XG4iLAo+ID4gKwkJCQljbGllbnQtPmFkZHIgKyBpKTsKPiA+ICsJ CQlyZXQgPSAtRUJVU1k7Cj4gPiArCQkJZ290byBleGl0X2R1bW15Owo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBzX2JyaWRnZSk7Cj4gPiArCj4gPiAr CXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBzODY0MF9hdHRy X2dyb3VwKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g Y3JlYXRlIHN5c2ZzIGVudHJpZXM6ICVkXG4iLCByZXQpOwo+ID4gKwkJZ290byBleGl0X2R1bW15 Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRldm1fYWRkX2FjdGlvbihkZXYsIHBzODY0MF9y ZW1vdmVfc3lzZnNfZ3JvdXAsIHBzX2JyaWRnZSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBzeXNmcyBjbGVhbnVwIGFjdGlvbjogJWRcbiIsIHJl dCk7Cj4gPiArCQlnb3RvIGV4aXRfcmVtb3ZlX3N5c2ZzOwo+ID4gKwl9Cj4gPiArCXJldHVybiAw Owo+ID4gKwo+ID4gK2V4aXRfcmVtb3ZlX3N5c2ZzOgo+ID4gKwlzeXNmc19yZW1vdmVfZ3JvdXAo JnBzX2JyaWRnZS0+cGFnZVswXS0+ZGV2LmtvYmosICZwczg2NDBfYXR0cl9ncm91cCk7Cj4gPiAr ZXhpdF9kdW1teToKPiA+ICsJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKPiA+ICsJCWlmIChwc19i cmlkZ2UtPnBhZ2VbaV0pCj4gPiArCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHBzX2JyaWRnZS0+ cGFnZVtpXSk7Cj4gCj4gTWlnaHQgYmUgYmV0dGVyIHRvIG1ha2UgdGhpcyBpbnRvIHNvbWV0aGlu ZyBsaWtlOgo+IAo+IAl3aGlsZSAoLS1pKQo+IAkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHBzX2Jy aWRnZS0+cGFnZVtpXSk7Cj4gCj4gVGhhdCB3YXkgeW91IGNhbiBvbWl0IHRoZSBjaGVjayBmb3Ig dmFsaWQgcGFnZSBiZWNhdXNlIHlvdSBvbmx5Cj4gdW5yZWdpc3RlciB0aGUgb25lcyB5b3UndmUg c3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlLgo+IAoKR290IGl0LCBJJ2xsIGZpeCBpdCBu ZXh0IHZlcnNpb24uClRoYW5rcwoKPiA+ICsJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHBzX2JyaWRn ZS0+ZGRjX2kyYyk7Cj4gPiArZXhpdF9kZGNfaTJjX2R1bW15Ogo+ID4gKwlkcm1fYnJpZGdlX3Jl bW92ZSgmcHNfYnJpZGdlLT5icmlkZ2UpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IHBzODY0MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkK PiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMTsgaSA8IDg7IGkr KykKPiA+ICsJCWkyY191bnJlZ2lzdGVyX2RldmljZShwc19icmlkZ2UtPnBhZ2VbaV0pOwo+ID4g Kwo+ID4gKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UocHNfYnJpZGdlLT5kZGNfaTJjKTsKPiA+ICsJ ZHJtX2JyaWRnZV9yZW1vdmUoJnBzX2JyaWRnZS0+YnJpZGdlKTsKPiA+ICsKPiA+ICsJcmV0dXJu IDA7Cj4gPiArfQo+IAo+IFRoZSBvcmRlcmluZyBoZXJlIHNob3VsZCBiZSB0aGUgcmV2ZXJzZSBv ZiB0aGF0IGluIC0+cHJvYmUoKS4KPiAKCkknbGwgZml4IGl0IG5leHQgdmVyc2lvbi4KVGhhbmtz Cgo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwczg2NDBfaTJj X3RhYmxlW10gPSB7Cj4gPiArCXsicGFyYWRlLHBzODY0MCIsIDB9LAo+ID4gKwl7fSwKPiAKPiBT cGFjZXMgYWZ0ZXIgeyBhbmQgYmVmb3JlIH0uIEFsc28gaXMgdGhpcyByZWFsbHkgY29ycmVjdD8g SSB0aG91Z2h0IGZvcgo+IEkyQyBkZXZpY2UgSURzIHdlIGRpZG4ndCBuZWVkIGEgdmVuZG9yIHBy ZWZpeC4KPiAKSSByZWZlciBvdGhlciBpMmMgZGV2aWNlLCB0aGV5IGFsc28gY29udGFpbiB0aGUg dmVuZG9yIHByZWZpeC4KCj4gVGhpZXJyeQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=