From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v9,1/2] dmaengine: 8250_mtk_dma: add MediaTek uart DMA support From: Long Cheng Message-Id: <1547108685.3831.21.camel@mhfsdcap03> Date: Thu, 10 Jan 2019 16:24:45 +0800 To: Nicolas Boichat Cc: Vinod Koul , Randy Dunlap , Rob Herring , Mark Rutland , Ryder Lee , Sean Wang , Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , Sean Wang , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm Mailing List , linux-mediatek@lists.infradead.org, lkml , linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, Yingjoe Chen , YT Shen , Zhenbao Liu , Long Cheng List-ID: T24gVGh1LCAyMDE5LTAxLTAzIGF0IDA5OjM5ICswODAwLCBOaWNvbGFzIEJvaWNoYXQgd3JvdGU6 Cj4gT24gV2VkLCBKYW4gMiwgMjAxOSBhdCAxMDoxMyBBTSBMb25nIENoZW5nIDxsb25nLmNoZW5n QG1lZGlhdGVrLmNvbT4gd3JvdGU6Cj4gPgoKLi4uLi4KCj4gPiArLyogaW50ZXJydXB0IHRyaWdn ZXIgbGV2ZWwgZm9yIHR4ICovCj4gPiArI2RlZmluZSBWRkZfVFhfVEhSRShuKSAgICAgICAgICgo bikgKiA3IC8gOCkKPiA+ICsvKiBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCBmb3IgcnggKi8KPiA+ ICsjZGVmaW5lIFZGRl9SWF9USFJFKG4pICAgICAgICAgKChuKSAqIDMgLyA0KQo+ID4gKwo+ID4g KyNkZWZpbmUgVkZGX1JJTkdfU0laRSAgMHhmZmZmVQo+IAo+IFdlbGwsIHRoZSBzaXplIGlzIGFj dHVhbGx5IDB4MTAwMDAuIE1heWJlIGNhbGwgdGhpcyBWRkZfUklOR19TSVpFX01BU0s/Cj4gCgp0 aGUgbWF4IGxlbmd0aCBpcyAweGZmZmYuICB0aGUgYml0IDE2IGlzIHdyYXAgYml0LiBvdXIgYnVm ZmVyIGlzIHJpbmcKYnVmZmVyLiBTbyBub3QgbWFzay4KCj4gPiArLyogaW52ZXJ0IHRoaXMgYml0 IHdoZW4gd3JhcCByaW5nIGhlYWQgYWdhaW4qLwo+ID4gKyNkZWZpbmUgVkZGX1JJTkdfV1JBUCAg MHgxMDAwMFUKPiA+ICsKPiA+ICsgICAgICAgd3JpdGVsKHZhbCwgYy0+YmFzZSArIHJlZyk7Cj4g PiArfQo+ID4gKwoKLi4uLi4uCgo+ID4gK3N0YXRpYyB2b2lkIG10a191YXJ0X2FwZG1hX3N0YXJ0 X3R4KHN0cnVjdCBtdGtfY2hhbiAqYykKPiA+ICt7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBs ZW4sIHNlbmQsIGxlZnQsIHdwdCwgZF93cHQsIHRtcDsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ ICsKPiA+ICsgICAgICAgbGVmdCA9IG10a191YXJ0X2FwZG1hX3JlYWQoYywgVkZGX0xFRlRfU0la RSk7Cj4gPiArICAgICAgIGlmICghbGVmdCkgewo+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0 X2FwZG1hX3dyaXRlKGMsIFZGRl9JTlRfRU4sIFZGRl9UWF9JTlRfRU5fQik7Cj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8qIFdhaXQg MXNlYyBmb3IgZmx1c2gsICBjYW4ndCBzbGVlcCovCj4gCj4gbml0OiBvbmUgc3BhY2UgYWZ0ZXIg JywnLCBwZXJpb2QgYWZ0ZXIgJ3NsZWVwJywgc3BhY2UgYmVmb3JlICcqJy4KPiAKPiA+ICsgICAg ICAgcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLCBjLT5iYXNlICsgVkZGX0ZMVVNILCB0 bXAsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0bXAgIT0gVkZGX0ZMVVNIX0IsIDAsIDEw MDAwMDApOwo+ID4gKyAgICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgIGRldl93YXJu KGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsICJ0eDogZmFpbCwgZGVidWc9MHgleFxuIiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX3JlYWQoYywgVkZGX0RFQlVHX1NU QVRVUykpOwo+IAo+IFdoeSBkbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGZsdXNoIG5vdz8gVGhlIHBy ZXZpb3VzIGltcGxlbWVudGF0aW9uIGRpZAo+IG5vdCByZXF1aXJlIHRoaXMuLi4KPiAKCmJlY2F1 c2Ugb3VyIEhXIGJ1ZmZlciBpcyBjeWNsaWMuIGF0IG9uZSB0eCwgaWYgdGhlIHNpemUgb2YgZGF0 YSBpcwpiaWdnZXIsIGRhdGEgbWF5YmUgY292ZXIuIFNvIG11c3Qgd2FpdCBmbHVzaCBmaW5pc2gu IGNvbmZpcm0gdGhlIGRhdGEgaXMKcmlnaHQuIGxpa2UgMTI4IGJ5dGVzIHNpemUsIHNtYWxsIGxl bmd0aCBjYW4ndCByZXByb2R1Y2UgdGhlIGlzc3VlLgoKPiA+ICsKPiA+ICsgICAgICAgc2VuZCA9 IG1pbl90KHVuc2lnbmVkIGludCwgbGVmdCwgYy0+ZGVzYy0+YXZhaWxfbGVuKTsKPiA+ICsgICAg ICAgd3B0ID0gbXRrX3VhcnRfYXBkbWFfcmVhZChjLCBWRkZfV1BUKTsKPiA+ICsgICAgICAgbGVu ID0gbXRrX3VhcnRfYXBkbWFfcmVhZChjLCBWRkZfTEVOKTsKPiA+ICsKPiA+ICsgICAgICAgZF93 cHQgPSB3cHQgKyBzZW5kOwo+ID4gKyAgICAgICBpZiAoKGRfd3B0ICYgVkZGX1JJTkdfU0laRSkg Pj0gbGVuKSB7Cj4gCj4gSSBkb24ndCBnZXQgd2h5IHlvdSBuZWVkIHRvIGFkZCAiJiBWRkZfUklO R19TSVpFIi4gSWYgd3B0ICsgc2VuZCA+Cj4gVkZGX1JJTkdfU0laRSwgZG9uJ3QgeW91IG5lZWQg dG8gdG9nZ2xlIFZGRl9SSU5HX1dSQVAgdG9vPwoKdGhlIGxvbmdlc3QgYWN0dWFsIGxlbmd0aCBp cyBWRkZfUklOR19TSVpFLiBvbmUgY3ljbGljLCB3aWxsIHNldCBiaXRbMTZdCnRvIH5iaXRbMTZd LiB0aGUgYml0WzAgfiAxNV0gaXMgYWN0dWFsIGFkZHJlc3MuIFNvIG5lZWQgZ2V0IHJpZCBvZgpi aXRbMTZdCgo+IAo+ID4gKyAgICAgICAgICAgICAgIGRfd3B0ID0gZF93cHQgLSBsZW47Cj4gPiAr ICAgICAgICAgICAgICAgZF93cHQgPSBkX3dwdCBeIFZGRl9SSU5HX1dSQVA7Cj4gPiArICAgICAg IH0KPiA+ICsgICAgICAgbXRrX3VhcnRfYXBkbWFfd3JpdGUoYywgVkZGX1dQVCwgZF93cHQpOwo+ ID4gKwo+ID4gKyAgICAgICBjLT5kZXNjLT5hdmFpbF9sZW4gLT0gc2VuZDsKPiA+ICsKPiA+ICsg ICAgICAgbXRrX3VhcnRfYXBkbWFfd3JpdGUoYywgVkZGX0lOVF9FTiwgVkZGX1RYX0lOVF9FTl9C KTsKPiA+ICsgICAgICAgaWYgKG10a191YXJ0X2FwZG1hX3JlYWQoYywgVkZGX0ZMVVNIKSA9PSAw VSkKPiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV93cml0ZShjLCBWRkZfRkxVU0gs IFZGRl9GTFVTSF9CKTsKPiA+ICt9Cj4gCj4gKHRoYW5rcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNo YW5nZXMsIHRoaXMgbG9va3MgbXVjaCBtb3JlIHJlYWRhYmxlKQo+IAo+ID4gKwouLi4uLi4KCj4g PiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9kZXZpY2VfcGF1c2Uoc3RydWN0IGRt YV9jaGFuICpjaGFuKQo+ID4gK3sKPiA+ICsgICAgICAgLyoganVzdCBmb3IgY2hlY2sgY2FwcyBw YXNzICovCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiAKPiBUaGlzIGlzIHN0aWxsIG5v dCByaWdodC4uLiBIb3BlZnVsbHkgc29tZWJvZHkgbW9yZSBmYW1pbGlhciB3aXRoIHRoZQo+IERN QSBzdWJzeXN0ZW0gY2FuIHdlaWdoIGluLCBidXQgbWF5YmUgaXQncyBlbm91Z2ggdG8gd2FpdCBm b3IgdGhlCj4gY3VycmVudCB0cmFuc2ZlciB0byBiZSBmbHVzaGVkIGFuZCB0ZW1wb3JhcmlseSBk aXNhYmxlIGludGVycnVwdHM/Cj4gZS5nLiBjYWxsIG10a191YXJ0X2FwZG1hX3Rlcm1pbmF0ZV9h bGwgYWJvdmU/Cj4gCgppIGhhZCByZXZpZXcgdGhlIDgyNTAgVUFSVCBmcmFtZXdvcmsuIGp1c3Qg Y2hlY2sgdGhlIGZ1bmN0aW9uIHBvaW50ZXIsCm5vdCB1c2UuIGFuZCBvdXIgSFcgY2FuJ3Qgc3Vw cG9ydCB0aGUgZmVhdHVyZS4gU28gaSBqdXN0IGtlZXAgaXQgYXQKZmlyc3QgdmVyc2lvbi4KCj4g PiArCj4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBk bWFfY2hhbiAqY2hhbikKPiA+ICt7Cj4gPiArICAgICAgIC8qIGp1c3QgZm9yIGNoZWNrIGNhcHMg cGFzcyAqLwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gCj4gRHJvcCB0aGlzIG9uZSBz aW5jZSB5b3UgZG9uJ3QgcmVhbGx5IG5lZWQgaXQuCj4gCgpvaywgaSB3aWxsIHJlbW92ZSBpdC4K Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRrX3VhcnRfYXBkbWFfZnJlZShzdHJ1Y3QgbXRrX3Vh cnRfYXBkbWFkZXYgKm10a2QpCj4gPiArewo+ID4gKyAgICAgICB3aGlsZSAobGlzdF9lbXB0eSgm bXRrZC0+ZGRldi5jaGFubmVscykgPT0gMCkgewo+IAo+ICFsaXN0X2VtcHR5KAo+IAo+ID4gKyAg ICAgICAgICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IGxpc3RfZmlyc3RfZW50cnkoJm10a2Qt PmRkZXYuY2hhbm5lbHMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRrX2No YW4sIHZjLmNoYW4uZGV2aWNlX25vZGUpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGxpc3Rf ZGVsKCZjLT52Yy5jaGFuLmRldmljZV9ub2RlKTsKPiA+ICsgICAgICAgICAgICAgICB0YXNrbGV0 X2tpbGwoJmMtPnZjLnRhc2spOwo+ID4gKyAgICAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a191YXJ0X2FwZG1hX21hdGNoW10gPSB7Cj4g PiArICAgICAgIHsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LXVhcnQtZG1hIiwgfSwK PiA+ICsgICAgICAgeyAvKiBzZW50aW5lbCAqLyB9LAo+ID4gK307Cj4gPiArTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgbXRrX3VhcnRfYXBkbWFfbWF0Y2gpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg bXRrX3VhcnRfYXBkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZDsKPiA+ICsgICAgICAg c3RydWN0IHJlc291cmNlICpyZXM7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYzsKPiA+ ICsgICAgICAgdW5zaWduZWQgaW50IGk7Cj4gPiArICAgICAgIGludCByYzsKPiA+ICsKPiA+ICsg ICAgICAgbXRrZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm10a2QpLCBHRlBf S0VSTkVMKTsKPiA+ICsgICAgICAgaWYgKCFtdGtkKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOwo+ID4gKwo+ID4gKyAgICAgICBtdGtkLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgTlVMTCk7Cj4gPiArICAgICAgIGlmIChJU19FUlIobXRrZC0+Y2xrKSkgewo+ID4g KyAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGNsb2NrIHNwZWNpZmllZFxu Iik7Cj4gPiArICAgICAgICAgICAgICAgcmMgPSBQVFJfRVJSKG10a2QtPmNsayk7Cj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIHJjOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGlm IChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9mX25vZGUsICJkbWEtMzNiaXRzIikp Cj4gPiArICAgICAgICAgICAgICAgbXRrZC0+c3VwcG9ydF8zM2JpdHMgPSB0cnVlOwo+IAo+IEkg ZG9uJ3QgdGhpbmsgdGhpcyBzaG91bGQgYmUgYSBkZXZpY2UgdHJlZSBwcm9wZXJ0eS4gVHlwaWNh bGx5IHdlJ2QKPiBoYXZlIG11bHRpcGxlIGNvbXBhdGlibGUgc3RyaW5ncyBmb3IgKHNsaWdodGx5 KSBkaWZmZXJlbnQgSFcgYmxvY2tzLAo+IGFuZCBlbmFibGUgMzNiaXRzIG9ubHkgb24gSFcgdGhh dCBoYXZlIHN1cHBvcnQuCj4gCj4gU2VlIGhvdyBpdCdzIGRvbmUgaW4gZHJpdmVycy9pMmMvYnVz c2VzL2kyYy1tdDY1eHguYywgZm9yIGV4YW1wbGUuCj4gCgppbiBNZWRpYVRlaywgbm90IGFsbCBJ QyBjYW4gc3VwcG9ydCAzM2JpdC4gU28gaSB3YW50IHRvIGNvbmZpZ3VyZSBieSBEVC4KU28gZG9u J3QgbmVlZCB0byBtb2RpZnkgY29kZSBpbiBOZXcgSUMuCgo+ID4gKwo+ID4gKyAgICAgICByYyA9 IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBkZXYtPmRldiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRE1BX0JJVF9NQVNLKDMyIHwgbXRrZC0+c3VwcG9ydF8zM2JpdHMp KTsKPiAKPiBJJ2QgZmVlbCBhIGxpdHRsZSBtb3JlIGNvbmZvcnRhYmxlIGlmIHlvdSB1c2VkIGEg dmFyaWFibGUgaW5zdGVhZDoKPiAKPiBpbnQgZG1hX2JpdHMgPSAzMjsKPiAKPiBpZiAoc3VwcG9y dF8zM2JpdHMpCj4gICAgZG1hX2JpdHMgPSAzMzsKPiAKPiAuLi4sIERNQV9CSVRfTUFTSyhkbWFf Yml0cykpOwo+IAoKT0ssIGkgY2FuIG1vZGlmeSBpdC4gdGhhbmtzLgoKPiA+ICsgICAgICAgaWYg KHJjKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByYzsKPiA+ICsKPiA+ICsgICAgICAgZG1h X2NhcF9zZXQoRE1BX1NMQVZFLCBtdGtkLT5kZGV2LmNhcF9tYXNrKTsKPiA+ICsgICAgICAgbXRr ZC0+ZGRldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKPiA+ ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2ZyZWVfY2hhbl9yZXNv dXJjZXM7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX3R4X3N0YXR1cyA9IG10a191YXJ0 X2FwZG1hX3R4X3N0YXR1czsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfaXNzdWVfcGVu ZGluZyA9IG10a191YXJ0X2FwZG1hX2lzc3VlX3BlbmRpbmc7Cj4gPiArICAgICAgIG10a2QtPmRk ZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBtdGtfdWFydF9hcGRtYV9wcmVwX3NsYXZlX3NnOwo+ ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV9jb25maWcgPSBtdGtfdWFydF9hcGRtYV9zbGF2 ZV9jb25maWc7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX3BhdXNlID0gbXRrX3VhcnRf YXBkbWFfZGV2aWNlX3BhdXNlOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV9yZXN1bWUg PSBtdGtfdWFydF9hcGRtYV9kZXZpY2VfcmVzdW1lOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRl dmljZV90ZXJtaW5hdGVfYWxsID0gbXRrX3VhcnRfYXBkbWFfdGVybWluYXRlX2FsbDsKPiA+ICsg ICAgICAgbXRrZC0+ZGRldi5zcmNfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRI XzFfQllURSk7Cj4gPiArICAgICAgIG10a2QtPmRkZXYuZHN0X2FkZHJfd2lkdGhzID0gQklUKERN QV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpOwo+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRpcmVjdGlv bnMgPSBCSVQoRE1BX0RFVl9UT19NRU0pIHwgQklUKERNQV9NRU1fVE9fREVWKTsKPiA+ICsgICAg ICAgbXRrZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJ VFlfU0VHTUVOVDsKPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXYgPSAmcGRldi0+ZGV2Owo+ID4g KyAgICAgICBJTklUX0xJU1RfSEVBRCgmbXRrZC0+ZGRldi5jaGFubmVscyk7Cj4gPiArCj4gPiAr ICAgICAgIGZvciAoaSA9IDA7IGkgPCBNVEtfVUFSVF9BUERNQV9DSEFOTkVMUzsgaSsrKSB7Cj4g PiArICAgICAgICAgICAgICAgYyA9IGRldm1fa3phbGxvYyhtdGtkLT5kZGV2LmRldiwgc2l6ZW9m KCpjKSwgR0ZQX0tFUk5FTCk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKCFjKSB7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICByYyA9IC1FTk9ERVY7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICAgICAgICAgIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgaSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKCFyZXMpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gLUVOT0RFVjsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZXJyX25vX2RtYTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgYy0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwo+ ID4gKyAgICAgICAgICAgICAgIGlmIChJU19FUlIoYy0+YmFzZSkpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gUFRSX0VSUihjLT5iYXNlKTsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZXJyX25vX2RtYTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg ICAgICAgICAgYy0+cmVxdWVzdGVkID0gZmFsc2U7Cj4gPiArICAgICAgICAgICAgICAgYy0+dmMu ZGVzY19mcmVlID0gbXRrX3VhcnRfYXBkbWFfZGVzY19mcmVlOwo+ID4gKyAgICAgICAgICAgICAg IHZjaGFuX2luaXQoJmMtPnZjLCAmbXRrZC0+ZGRldik7Cj4gPiArCj4gPiArICAgICAgICAgICAg ICAgbXRrZC0+ZG1hX2lycVtpXSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7Cj4gPiArICAg ICAgICAgICAgICAgaWYgKChpbnQpbXRrZC0+ZG1hX2lycVtpXSA8IDApIHsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSVJRWyVk XVxuIiwgaSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiArICAgICAgICAgICAg ICAgfQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHBtX3J1bnRpbWVfZW5hYmxlKCZw ZGV2LT5kZXYpOwo+ID4gKyAgICAgICBwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7 Cj4gPiArCj4gPiArICAgICAgIHJjID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmbXRrZC0+ ZGRldik7Cj4gPiArICAgICAgIGlmIChyYykKPiA+ICsgICAgICAgICAgICAgICBnb3RvIHJwbV9k aXNhYmxlOwo+ID4gKwo+ID4gKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtdGtk KTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7Cj4gPiArICAgICAg ICAgICAgICAgLyogRGV2aWNlLXRyZWUgRE1BIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uICovCj4g PiArICAgICAgICAgICAgICAgcmMgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3RlcihwZGV2LT5k ZXYub2Zfbm9kZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9mX2RtYV94bGF0ZV9ieV9jaGFuX2lkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRrZCk7Cj4gPiArICAgICAgICAgICAgICAgaWYg KHJjKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBkbWFfcmVtb3ZlOwo+ID4gKyAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiByYzsKPiA+ICsKPiA+ICtkbWFfcmVtb3Zl Ogo+ID4gKyAgICAgICBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm10a2QtPmRkZXYpOwo+ ID4gK3JwbV9kaXNhYmxlOgo+ID4gKyAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRl dik7Cj4gPiArZXJyX25vX2RtYToKPiA+ICsgICAgICAgbXRrX3VhcnRfYXBkbWFfZnJlZShtdGtk KTsKPiA+ICsgICAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKCi4uLi4uLgo=