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: [v5,1/2] dmaengine: 8250_mtk_dma: add Mediatek uart DMA support From: Long Cheng Message-Id: <1545035989.28871.41.camel@mhfsdcap03> Date: Mon, 17 Dec 2018 16:39:49 +0800 To: Sean Wang Cc: vkoul@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, Ryder Lee =?UTF-8?Q?=28=E6=9D=8E=E5=BA=9A=E8=AB=BA=29?= , Matthias Brugger , dan.j.williams@intel.com, gregkh@linuxfoundation.org, jslaby@suse.com, Sean Wang =?UTF-8?Q?=28=E7=8E=8B=E5=BF=97=E4=BA=98=29?= , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, yingjoe.chen@mediatek.com, YT Shen List-ID: T24gRnJpLCAyMDE4LTEyLTE0IGF0IDEyOjA5IC0wODAwLCBTZWFuIFdhbmcgd3JvdGU6Cgp0aGFu a3MgZm9yIHlvdXIgcmVwbHkuCgo+IE9uIFRodSwgRGVjIDEzLCAyMDE4IGF0IDM6MzYgQU0gTG9u ZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+IHdyb3RlOgo+IAo+IEhvcGUgdGhvc2Ug Y29tbWVudHMgZGlkIG5vdCBnZXQgYSByZXNwb25zZSB0aGF0IG1lYW5zIHRoZXkncmUgZmluZSB3 aXRoIHlvdS4KPiAKPiA8IC4uLiA+Cj4gCj4gPiA+ID4gK3N0cnVjdCBtdGtfZG1hZGV2IHsKPiA+ ID4gPiArICAgICAgIHN0cnVjdCBkbWFfZGV2aWNlIGRkZXY7Cj4gPiA+ID4gKyAgICAgICB2b2lk IF9faW9tZW0gKm1lbV9iYXNlW01US19BUERNQV9DSEFOTkVMU107Cj4gPiA+ID4gKyAgICAgICBz cGlubG9ja190IGxvY2s7IC8qIGRtYSBkZXYgbG9jayAqLwo+ID4gPiA+ICsgICAgICAgc3RydWN0 IHRhc2tsZXRfc3RydWN0IHRhc2s7Cj4gPiA+Cj4gPiA+IHdlIGNhbiBkcm9wIHRhc2tsZXQgYW5k IGluc3RlYWQgYWxsb3dzIGRlc2NyaXB0b3JzIHRvIGJlIGhhbmRsZWQgYXMKPiA+ID4gZmFzdCBh cyBwb3NzaWJsZS4KPiA+ID4gc2ltaWxhciBzdWdnZXN0aW9ucyBoYXZlIGJlZW4gbWFkZSBpbiB0 aGUgb3RoZXIgZG1hZW5naW5lIFsxXSBhbmQgbXRrLWhzZG1hLmMKPiA+ID4KPiA+Cj4gPiBPSywg aSB3aWxsIHJlbW92ZSB0aGVzZSwgYW5kIGltcHJvdmUgaXQuCj4gPgo+IAo+IFRoYW5rcywgdGhh dCB3b3VsZCBiZSBncmVhdC4KPiAKPiA+ID4gWzFdIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE4 LzExLzExLzE0Ngo+ID4gPgo+ID4gPiA+ICsgICAgICAgc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5n Owo+ID4gPiA+ICsgICAgICAgc3RydWN0IGNsayAqY2xrOwo+ID4gPiA+ICsgICAgICAgdW5zaWdu ZWQgaW50IGRtYV9yZXF1ZXN0czsKPiA+ID4gPiArICAgICAgIGJvb2wgc3VwcG9ydF8zM2JpdHM7 Cj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZG1hX2lycVtNVEtfQVBETUFfQ0hBTk5FTFNd Owo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjaFtNVEtfQVBETUFfQ0hBTk5FTFNd Owo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiAKPiA8IC4uLiA+Cj4gCj4gPiA+ID4gK3N0YXRpYyBz dHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm10a19kbWFfcHJlcF9zbGF2ZV9zZwo+ID4g PiA+ICsgICAgICAgKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z2wsCj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgc2dsZW4sICAgICBlbnVtIGRtYV90cmFu c2Zlcl9kaXJlY3Rpb24gZGlyLAo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyB0eF9mbGFn cywgdm9pZCAqY29udGV4dCkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a19j aGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOwo+ID4gPiA+ICsgICAgICAgc3RydWN0IHNj YXR0ZXJsaXN0ICpzZ2VudDsKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfZG1hX2Rlc2MgKmQ7 Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYV9zZyAqc2c7Cj4gPiA+ID4gKyAgICAgICB1 bnNpZ25lZCBpbnQgc2l6ZSwgaSwgaiwgZW47Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgZW4g PSAxOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICgoZGlyICE9IERNQV9ERVZfVE9fTUVN KSAmJgo+ID4gPiA+ICsgICAgICAgICAgICAgICAoZGlyICE9IERNQV9NRU1fVE9fREVWKSkgewo+ ID4gPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiYmFkIGRp cmVjdGlvblxuIik7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4gPiA+ ICsgICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIC8qIE5vdyBhbGxvY2F0ZSBhbmQg c2V0dXAgdGhlIGRlc2NyaXB0b3IuICovCj4gPiA+ID4gKyAgICAgICBkID0ga3phbGxvYyhzaXpl b2YoKmQpICsgc2dsZW4gKiBzaXplb2YoZC0+c2dbMF0pLCBHRlBfQVRPTUlDKTsKPiA+ID4gPiAr ICAgICAgIGlmICghZCkKPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+ ID4gKwo+ID4gPiA+ICsgICAgICAgZC0+ZGlyID0gZGlyOwo+ID4gPiA+ICsKPiA+ID4gPiArICAg ICAgIGogPSAwOwo+ID4gPiA+ICsgICAgICAgZm9yX2VhY2hfc2coc2dsLCBzZ2VudCwgc2dsZW4s IGkpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgZC0+c2dbal0uYWRkciA9IHNnX2RtYV9hZGRy ZXNzKHNnZW50KTsKPiA+ID4gPiArICAgICAgICAgICAgICAgZC0+c2dbal0uZW4gPSBlbjsKPiA+ ID4gPiArICAgICAgICAgICAgICAgZC0+c2dbal0uZm4gPSBzZ19kbWFfbGVuKHNnZW50KSAvIGVu Owo+ID4gPiA+ICsgICAgICAgICAgICAgICBqKys7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgZC0+c2dsZW4gPSBqOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAg IGlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgZm9y IChzaXplID0gaSA9IDA7IGkgPCBkLT5zZ2xlbjsgaSsrKSB7Cj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2cgPSAmZC0+c2dbaV07Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZSArPSBzZy0+ZW4gKiBzZy0+Zm47Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ ID4gPiArICAgICAgICAgICAgICAgZC0+bGVuID0gc2l6ZTsKPiA+ID4gPiArICAgICAgIH0KPiA+ ID4gPiArCj4gPiA+Cj4gPiA+IFRoZSBkcml2ZXIgYWx3YXlzIG9ubHkgaGFuZGxlcyBkYXRhIG1v dmUgZm9yIHRoZSBzaW5nbGUgY29udGlndW91cwo+ID4gPiBhcmVhLCBidXQgaXQgc2VlbXMgdGhl IGNhbGxiYWNrIG11c3QgcHJvdmlkZSB0aGUgc2NhdHRlci1nYXRoZXIKPiA+ID4gZnVuY3Rpb24g dG8gdGhlIGRtYWVnaW5lLiBvdGhlcndpc2UsIHdoeSBpcyB0aGUgY2FsbGJhY2sgYmUgY2FsbGVk Cj4gPiA+IGRldmljZV9wcmVwX3NsYXZlX3NnPwo+ID4gPgo+ID4KPiA+IGJlY2F1c2UgaW4gODI1 MCBVQVJUIG5hdGl2ZSBjb2RlLCBjYWxsIHRoZSBkZXZpY2VfcHJlcF9zbGF2ZV9zZy4gd2UganVz dAo+ID4gdXNlIG9uZSByaW5nIGJ1ZmZlci4KPiA+Cj4gCj4gSWYgaXQgcmVhbGx5IGRpZCBzcGVj aWZpY2FsbHkgZm9yIFVBUlQsIHlvdSBzaG91bGQgc2hvdyB0aGUgZnVuY3Rpb24KPiBvbmx5IGNh biBoYW5kbGUgb25seSBvbmUgZW50cnkgaW4gc2cgZm9yIHRoZSBETUEgaW4gYSBmZXcgY29tbWVu dHMgYW5kCj4gYSBzYW5pdHkgY2hlY2sgZm9yIHRoZXNlIGludmFsaWQgcmVxdWVzdHMgKG1vcmUg b25lIGVudHJpZXMgaW4gc2cpLgo+IE90aGVyd2lzZSwgdGhlIGhhcmR3YXJlIHdpbGwgZ2V0IGEg ZmFpbHVyZSBhbmQgZXZlbiBmdW5jdGlvbiBkb2Vzbid0Cj4gY29tcGxhaW4gb3Igd2FybiBhbnl0 aGluZyBpZiBtb3JlIG9uZSBlbnRyaWVzIGluIHNnIHJlcXVlc3RlZCBpbi4KPiBBZGRpdGlvbmFs bHksIHRoZSBjb2RlIGNhbiBiZSBzaW1wbGlmaWVkIG11Y2ggaWYgaXQncyBqdXN0IGZvciB0aGUK PiBzcGVjaWZpYyB1c2UgY2FzZS4KPiAKCm9rLiBpIHdpbGwgYWRkIHNvbWUgY29tbWVudHMuIGFu ZCBsZXQgdGhlIGNvZGUgYmUgc2ltcGxpZmllZC4KCj4gPiA+ID4gKyAgICAgICByZXR1cm4gdmNo YW5fdHhfcHJlcCgmYy0+dmMsICZkLT52ZCwgdHhfZmxhZ3MpOwo+ID4gPiA+ICt9Cj4gPiA+ID4g Kwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBtdGtfZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9j aGFuICpjaGFuKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmMg PSB0b19tdGtfZG1hX2NoYW4oY2hhbik7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmQ7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZDsKPiA+ID4g PiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAg c3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKPiA+ID4gPiArICAgICAgIGlm IChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7Cj4gPiA+ID4gKyAgICAgICAg ICAgICAgIG10a2QgPSB0b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOwo+ID4gPgo+ID4gPiBt dGtkIGNhbiBiZSBkcm9wcGVkIGFzIGl0IHNlZW1zIG5vIHVzZXJzCj4gPiA+Cj4gCj4gPCAuLi4g Pgo+IAo+ID4gPiA+ICtzdGF0aWMgaW50IG10a19kbWFfc2xhdmVfY29uZmlnKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkbWFfc2xhdmVfY29uZmlnICpjZmcpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVj dCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKPiA+ID4gPiArICAgICAgIHN0 cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gdG9fbXRrX2RtYV9kZXYoYy0+dmMuY2hhbi5kZXZpY2Up Owo+ID4gPiA+ICsgICAgICAgaW50IHJldDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBjLT5j ZmcgPSAqY2ZnOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChjZmctPmRpcmVjdGlvbiA9 PSBETUFfREVWX1RPX01FTSkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg cnhfbGVuID0gY2ZnLT5zcmNfYWRkcl93aWR0aCAqIDEwMjQ7Cj4gPiA+Cj4gPiA+IGl0IHNlZW1z IHlvdSBzaG91bGQgdXNlIGNmZy0+c3JjX3BvcnRfd2luZG93X3NpemUgYXMgdGhlIGNvbW1lbnRz IGV4cGxhaW5zCj4gPiA+Cj4gPiA+ICogQHNyY19wb3J0X3dpbmRvd19zaXplOiBUaGUgbGVuZ3Ro IG9mIHRoZSByZWdpc3RlciBhcmVhIGluIHdvcmRzIHRoZSBkYXRhIG5lZWQKPiA+ID4gICogdG8g YmUgYWNjZXNzZWQgb24gdGhlIGRldmljZSBzaWRlLiBJdCBpcyBvbmx5IHVzZWQgZm9yIGRldmlj ZXMgd2hpY2ggaXMgdXNpbmcKPiA+ID4gICogYW4gYXJlYSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJl Z2lzdGVyIHRvIHJlY2VpdmUgdGhlIGRhdGEuIFR5cGljYWxseSB0aGUgRE1BCj4gPiA+ICAqIGxv b3BzIGluIHRoaXMgYXJlYSBpbiBvcmRlciB0byB0cmFuc2ZlciB0aGUgZGF0YS4KPiA+ID4gICog QGRzdF9wb3J0X3dpbmRvd19zaXplOiBzYW1lIGFzIHNyY19wb3J0X3dpbmRvd19zaXplIGJ1dCBm b3IgdGhlIGRlc3RpbmF0aW9uCj4gPiA+ICAqIHBvcnQuCj4gPiA+Cj4gPgo+ID4gaW4gODI1MCBV QVJUIG5hdGl2ZSBjb2RlLCB3aWxsIHNldCB0aGUgcGFyYW1ldGVyLiBpZiB3YW50IHRvIG1vZGlm eQo+ID4gdGhpcywgaSB0aGluayB0aGF0IG1heWJlIGF0IG5leHQga2VybmVsIHJlbGVhc2UsIHdl IGNhbiBtb2RpZnkgaXQuIGkKPiA+IHN1Z2dlc3QgdGhhdCBub3QgbW9kaWZ5IGl0IGF0IHRoaXMg cGF0Y2guIGJlY2F1c2UgaXQgcmVsYXRlIG9mIDgyNTAgdWFydAo+ID4gY29kZS4gdGhhbmtzLgo+ ID4KPiAKPiBZb3UgY2FuIGZpeCBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9uIGFuZCBhIHNlcGFyYXRl IGZvbGxvdy11cCBwYXRjaCBmb3IKPiB0aGUgY2xpZW50IGRyaXZlci4KPiAKPiA+ID4gPiArCj4g PiA+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2Zn LT5zcmNfYWRkcik7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShj LCBWRkZfTEVOLCByeF9sZW4pOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5f d3JpdGUoYywgVkZGX1RIUkUsIFZGRl9SWF9USFJFKHJ4X2xlbikpOwo+ID4gPiA+ICsgICAgICAg ICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywKPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZGRl9JTlRfRU4sIFZGRl9SWF9JTlRfRU4wX0IKPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVkZGX1JYX0lOVF9FTjFfQik7Cj4gPiA+ ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0ZMQUcsIFZG Rl9SWF9JTlRfRkxBR19DTFJfQik7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10a19kbWFfY2hh bl93cml0ZShjLCBWRkZfRU4sIFZGRl9FTl9CKTsKPiA+ID4KPiA+ID4gSSdkIHByZWZlciB0byBt b3ZlIHRob3NlIGNoYW5uZWwgaW50ZXJydXB0IGVuYWJsZW1lbnQgdG8KPiA+ID4gLmRldmljZV9h bGxvY19jaGFuX3Jlc291cmNlcwo+ID4gPiBhbmQgcmVsYXRlZCBkaXNhYmxlbWVudCB0byAuZGV2 aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMKPiA+ID4KPiA+Cj4gPiBpIHRoaW5rIHRoYXQsIGZpcnN0 IG5lZWQgc2V0IHRoZSBjb25maWcgdG8gSFcsIGFuZCB0aGUgZW5hYmxlIHRoZSBETUEuCj4gPgo+ IAo+IEkndmUgcmVhZCB0aHJvdWdoIHRoZSBjbGllbnQgZHJpdmVyIGFuZCB0aGUgZG1hZW5naW5l LCBJIHByb2JhYmx5IGtub3cKPiBob3cgaW50ZXJhY3Rpb24gdGhleSB3b3JrIGFuZCBmaW5kIG91 dCB0aGVyZSBpcyBzb21ldGhpbmcgeW91IHNlZW0KPiBjb21wbGV0ZWx5IG1ha2UgYSB3cm9uZy4K PiAKPiBZb3UgY2FuJ3QgZG8gZW5hYmxlIERNQSB3aXRoIGVuYWJsaW5nIFZGRiBoZXJlLiBUaGF0 IGNhdXNlcyBhIGJpZwo+IHByb2JsZW0sIERNQSB3b3VsZCBzZWxmIGRlY2lkZSB0byBtb3ZlIGRh dGEgYW5kIG5vdCBtYW5hZ2VkIGFuZCBpc3N1ZWQKPiBieSB0aGUgZG1hZW5naW5lIGZyYW1ld29y ay4gRm9yIGluc3RhbmNlIGluIERNQSBUeCBwYXRoLCBiZWNhdXNlIHlvdQo+IGVuYWJsZSB0aGUg RE1BIGFuZCBETUEgIGJ1ZmZlciAoVkZGKSBhbmQgVUFSVCBUeCByaW5nIHVzZXMgdGhlIHNhbWUK PiBtZW1vcnkgYXJlYSwgIERNQSB3b3VsZCBzZWxmIHN0YXJ0IHRvIG1vdmUgZGF0YSBvbmNlIGRh dGEgZnJvbQo+IHVzZXJsYW5kIGdvIGluIFR4IHJpbmcgZXZlbiB3aXRob3V0IGJlaW5nIGlzc3Vl ZCBieSBkbWFlbmdpbmUuCj4gCj4gSW5zdGVhZCwgeW91IHNob3VsZCBlbnN1cmUgYWxsIGRlc2Ny aXB0b3JzIGFyZSBiZWluZyBiYXRjaGVkIGJ5Cj4gLmRldmljZV9wcmVwX3NsYXZlX3NnIGFuZCBE TUEgZG9lcyBub3Qgc3RhcnQgbW92aW5nIGRhdGEgdW50aWwKPiAuZGV2aWNlX2lzc3VlX3BlbmRp bmcgZG9uZSBhbmQgb25jZSBkZXNjcmlwdG9ycyBhcmUgaXNzdWVkLCBETUEKPiBoYXJkd2FyZSBv ciBzb2Z0d2FyZSBoYXZlIHRvIGRvIGl0IGFzIGZhc3QgYXMgcG9zc2libGUuCj4gCgp0aGUgVkZG IGVuYWJsZSBqdXN0IGVuYWJsZSB0aGUgRE1BIGZ1bmN0aW9uLiBETUEgY2FuJ3QgbW92ZSBkYXRh IGhlcmUuCk5vdywgdGhlIGNvZGUgZ2V0IGxlbmd0aCBvZiB0aGUgZGF0YSBpbiAnLmRldmljZV9w cmVwX3NsYXZlX3NnJy4KQW5kIGxldCBETUEgbW92ZSBkYXRhIGluICcuZGV2aWNlX2lzc3VlX3Bl bmRpbmcgZnVuY3Rpb24nLiBpbiBoZXJlLCBqdXN0CmVuYWJsZSB0aGUgZnVuY3Rpb24uCgo+ID4g PiA+ICsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFjLT5yZXF1ZXN0ZWQpIHsKPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICBjLT5yZXF1ZXN0ZWQgPSB0cnVlOwo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJlcXVlc3RfaXJxKG10a2QtPmRtYV9pcnFbY2hh bi0+Y2hhbl9pZF0sCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbXRrX2RtYV9yeF9pbnRlcnJ1cHQsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSVJRRl9UUklHR0VSX05PTkUsCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0JVSUxEX01PRE5BTUUsIGNoYW4pOwo+ ID4gPgo+ID4gPiBJU1IgcmVnaXN0cmF0aW9uIHVzdWFsbHkgaGFwcGVucyBhcyB0aGUgZHJpdmVy IGdvdCBwcm9iZSwgaXQgY2FuIGdpdmUKPiA+ID4gdGhlIHN5c3RlbSBtb3JlIGZsZXhpYmlsaXR5 IHRvIG1hbmFnZSBzdWNoIElSUSBhZmZpbml0eSBvbiB0aGUgZmx5Lgo+ID4gPgo+ID4KPiA+IGkg d2lsbCBtb3ZlIHRoZSByZXF1ZXN0IGlycSB0byBhbGxvYyBjaGFubmVsLgo+ID4KPiAKPiB3aHkg ZG9uJ3QgbGV0IGl0IGRvbmUgaW4gZHJpdmVyIHByb2JlPwo+IAp0aGVyZSBhcmUgbWFueSB1YXJ0 IHBvcnRzLCBsaWtlIFVBUlRbMC01XS4gaW4gcHJvYmUsIGp1c3QgZ2V0IHRoZSBhbGwKaXJxIG9m IHBvcnRzLiB3aGljaCBwb3J0IGlzIHVzaW5nLCB3aG8gcmVxdWVzdCBpcnEuIGV4YW1wbGUsIFVB UlQxIGlzCnVzaW5nLiB3ZSBqdXN0IHJlcXVlc3QgaXJxIG9mIHVhcnQxLiB1YXJ0MCwgdWFydFsy LTVdIGRvbid0IG5lZWQgcmVxdWVzdAppcnEuCgo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3QgcmVxdWVzdCByeCBkbWEgSVJRXG4i KTsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Owo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiA+ID4gPiArICAgICAgICAgICAg ICAgfQo+ID4gPiA+ICsgICAgICAgfSBlbHNlIGlmIChjZmctPmRpcmVjdGlvbiA9PSBETUFfTUVN X1RPX0RFVikgICAgewo+ID4gPiA+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHhfbGVu ID0gY2ZnLT5kc3RfYWRkcl93aWR0aCAqIDEwMjQ7Cj4gPiA+Cj4gPiA+IERpdHRvIGFzIGFib3Zl LCBpdCBzZWVtcyB5b3Ugc2hvdWxkIHVzZSBjZmctPmRzdF9wb3J0X3dpbmRvd19zaXplCj4gPiA+ Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywg VkZGX0FERFIsIGNmZy0+ZHN0X2FkZHIpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfZG1h X2NoYW5fd3JpdGUoYywgVkZGX0xFTiwgdHhfbGVuKTsKPiA+ID4gPiArICAgICAgICAgICAgICAg bXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9USFJFLCBWRkZfVFhfVEhSRSh0eF9sZW4pKTsKPiA+ ID4gPiArICAgICAgICAgICAgICAgbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRkxBRywg VkZGX1RYX0lOVF9GTEFHX0NMUl9CKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgbXRrX2RtYV9j aGFuX3dyaXRlKGMsIFZGRl9FTiwgVkZGX0VOX0IpOwo+ID4gPgo+ID4gPiBkaXR0bywgSSdkIHBy ZWZlciB0byBtb3ZlIHRob3NlIGNoYW5uZWwgaW50ZXJydXB0IGVuYWJsZW1lbnQgdG8KPiA+ID4g LmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyBhbmQgcmVsYXRlZCBkaXNhYmxlbWVudCB0bwo+ ID4gPiAuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMKPiA+ID4KPiA+ID4gPiArCj4gPiA+ID4g KyAgICAgICAgICAgICAgIGlmICghYy0+cmVxdWVzdGVkKSB7Cj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgYy0+cmVxdWVzdGVkID0gdHJ1ZTsKPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICByZXQgPSByZXF1ZXN0X2lycShtdGtkLT5kbWFfaXJxW2NoYW4tPmNoYW5faWRdLAo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10a19kbWFf dHhfaW50ZXJydXB0LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElSUUZfVFJJR0dFUl9OT05FLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEtCVUlMRF9NT0ROQU1FLCBjaGFuKTsKPiA+ID4KPiA+ID4gZGl0 dG8sIHdlIGNhbiByZXF1ZXN0IElTUiB3aXRoIGRldm1fcmVxdWVzdF9pcnEgaW4gdGhlIGRyaXZl ciBnb3QKPiA+ID4gcHJvYmUgYW5kIHRyaW0gdGhlIGMtPnJlcXVlc3QgbWVtYmVyCj4gPiA+Cj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsICJD YW4ndCByZXF1ZXN0IHR4IGRtYSBJUlFcbiIpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgfQo+ID4gPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgaWYgKG10a2QtPnN1cHBvcnRfMzNiaXRzKQo+ID4gPiA+ICsgICAg ICAgICAgICAgICBtdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGXzRHX1NVUFBPUlQsIFZGRl80R19T VVBQT1JUX0IpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChtdGtfZG1hX2NoYW5fcmVh ZChjLCBWRkZfRU4pICE9IFZGRl9FTl9CKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGRldl9l cnIoY2hhbi0+ZGV2aWNlLT5kZXYsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgImNv bmZpZyBkbWEgZGlyWyVkXSBmYWlsXG4iLCBjZmctPmRpcmVjdGlvbik7Cj4gPiA+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsKPiA+ ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0 aWMgaW50IG10a19kbWFfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCj4gPiA+ ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hh bihjaGFuKTsKPiA+ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ID4gKwo+ ID4gPiA+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKPiA+ ID4gPiArICAgICAgIGxpc3RfZGVsX2luaXQoJmMtPm5vZGUpOwo+ID4gPiA+ICsgICAgICAgbXRr X2RtYV9zdG9wKGMpOwo+ID4gPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+ dmMubG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4g PiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IG10a19kbWFfZGV2aWNlX3BhdXNl KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgLyoganVz dCBmb3IgY2hlY2sgY2FwcyBwYXNzICovCj4gPiA+ID4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsK PiA+ID4KPiA+ID4gYWx3YXlzIHJldHVybiBlcnJvciBjb2RlIHNlZW1zIG5vdCB0aGUgY2xpZW50 IGRyaXZlciB3YW50cyB1cyB0byBkby4KPiA+ID4KPiA+ID4gbWF5YmUgaWYgdGhlIGhhcmR3YXJl IGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSwgd2UgY2FuIG1ha2UgYSBzb2Z0d2FyZQo+ID4gPiBwYXVz ZSwgdGhhdCB3YWl0cyB1bnRpbCBhbGwgYWN0aXZlIGRlc2NyaXB0b3JzIGluIGhhcmR3YXJlIGRv bmUsIHRoZW4KPiA+ID4gZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHRoZW4gc3RvcCBoYW5kbGluZyB0 aGUgZm9sbG93aW5nIHZkIGluIHRoZQo+ID4gPiB2Y2hhbi4KPiA+ID4KPiA+ID4gPiArfQo+ID4K PiA+IHRoZSBjb2RlIGNhbid0IHJ1bi4ganVzdCBmb3IgODI1MCBuYXRpdmUgY29kZSB0byBjaGVj ayB0aGUgZnVuY3Rpb24KPiA+IHBvaW50ZXIuIGluIHRoZSBmdXR1cmUsIGlmIHRoZSBmdW5jdGlv biB1c2VmdWwsIHdlIGNhbiByZWFsaXplLiB0aGFua3MuCj4gPgo+IAo+IEFsd2F5cyByZXR1cm4g YW4gZXJyb3IgY29kZSBsb29rcyBsaWtlIGl0J3MgYSBmYWtlZCBmdW5jdGlvbiBqdXN0IHRvCj4g cGFzcyB0aGUgY3JpdGVyaWEgY2hlY2suIEl0IHNlZW1zIG5vdCBhIGdvb2QgaWRlYS4KPiAKCnll cywgdGhlIGZ1bmN0aW9uIGlzIGZha2UuIGkganVzdCByZXZpZXcgdGhlIDgyNTAgdWFydCBmcmFt ZXdvcmsuIHRoZXJlCm5vIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLiBz byBpIGNhbiBtb2RpZnkgaXQgdG8gJ3JldHVybgowJwoKPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRp YyBpbnQgbXRrX2RtYV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiA+ID4g PiArewo+ID4gPiA+ICsgICAgICAgLyoganVzdCBmb3IgY2hlY2sgY2FwcyBwYXNzICovCj4gPiA+ ID4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAKPiA8IC4uLiA+Cj4gCj4gPiA+ID4gK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kbWFfZHJpdmVyID0gewo+ID4gPgo+ID4gPiBt dGtfZG1hIGlzIG11Y2ggZ2VuZXJhbCBhbmQgYWxsIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyBp biB0aGUgZHJpdmVyCj4gPiA+IHNob3VsZCBiZSBhbGwgY29uc2lzdGVudC4gIEknZCBwcmVmZXIg dG8gaGF2ZSBhbGwgbmFtaW5nIHN0YXJ0cyB3aXRoCj4gPiA+IG10a191YXJ0X2FwZG1hLgo+ID4g Pgo+ID4KPiA+IHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBwYXJhbWV0ZXJzJyBuYW1lLCBpIHdpbGwg bW9kaWZ5IGl0LiBidXQgYmVmb3JlIHRoZQo+ID4gODI1MF9tdGsuYyBhbmQgdGhlIERvYy4gYXJl IHJlY29yZGVkLiBpZiBtb2RpZnkgZmlsZSBuYW1lIGFuZCBLY29uZmlnLAo+ID4gd2lsbCBicmlu ZyBhYm91dCB0aGUgZGlzb3JkZXIuIGkgc3VnZ2VzdCB0aGF0IGFmdGVyIHRoZSBwYXRjaCBpcwo+ ID4gcmVjb3JkZWQsIG1vZGlmeSB0aGlzLiB0aGFua3MuCj4gPgo+IAo+IFdlIGNhbiBkbyBpdCBp biBzZXBhcmF0ZSBwYXRjaGVzIGFuZCBpbiBhIGxvZ2ljYWwgb3JkZXIgZm9yIHRoZQo+IGNoYW5n ZXMgcmVxdWlyZWQgYWNyb3NzIGRpZmZlcmVudCBzdWJzeXN0ZW1zLgo+IAo+ID4gPiA+ICsgICAg ICAgLnByb2JlICA9IG10a19hcGRtYV9wcm9iZSwKPiA+ID4KPiA+ID4gc3VjaCAgYXMKPiA+ID4g bXRrX3VhcnRfYXBkbWFfcHJvYmUKPiA+ID4KPiA+ID4gPiArICAgICAgIC5yZW1vdmUgPSBtdGtf YXBkbWFfcmVtb3ZlLAo+ID4gPgo+ID4gPiBtdGtfdWFydF9hcGRtYV9yZW1vdmUKPiA+ID4KPiA+ ID4gPiArICAgICAgIC5kcml2ZXIgPSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIC5uYW1lICAg ICAgICAgICA9IEtCVUlMRF9NT0ROQU1FLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAucG0gICAg ICAgICAgICAgPSAmbXRrX2RtYV9wbV9vcHMsCj4gPiA+Cj4gPiA+IG10a191YXJ0X2FwZG1hX3Bt X29wcwo+ID4gPgo+ID4gPiA+ICsgICAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9t YXRjaF9wdHIobXRrX3VhcnRfZG1hX21hdGNoKSwKPiA+ID4KPiA+ID4gbXRrX3VhcnRfYXBkbWFf bWF0Y2gKPiA+ID4KPiA+ID4gPiArICAgICAgIH0sCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4g PiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a19kbWFfZHJpdmVyKTsKPiA+ID4KPiA+ID4g bXRrX3VhcnRfYXBkbWFfZHJpdmVyCj4gPiA+Cj4gPiA+ID4gKwo+ID4gPiA+ICtNT0RVTEVfREVT Q1JJUFRJT04oIk1lZGlhVGVrIFVBUlQgQVBETUEgQ29udHJvbGxlciBEcml2ZXIiKTsKPiA+ID4g PiArTU9EVUxFX0FVVEhPUigiTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Iik7 Cj4gPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+ID4gPiArCj4gPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2RtYS9tZWRp YXRlay9LY29uZmlnCj4gPiA+ID4gaW5kZXggMjdiYWMwYi4uZDM5OTYyNCAxMDA2NDQKPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCj4gPiA+ID4gKysrIGIvZHJpdmVy cy9kbWEvbWVkaWF0ZWsvS2NvbmZpZwo+ID4gPiA+IEBAIC0xLDQgKzEsMTUgQEAKPiA+ID4gPgo+ ID4gPiA+ICtjb25maWcgRE1BX01US19VQVJUCj4gPiA+Cj4gPiA+IE1US19VQVJUX0FQRE1BIHRv IGFsaWduIHRoZSBvdGhlciBkcml2ZXJzCj4gPiA+Cj4gPiA+ID4gKyAgICAgICB0cmlzdGF0ZSAi TWVkaWFUZWsgU29DcyBBUERNQSBzdXBwb3J0IGZvciBVQVJUIgo+ID4gPiA+ICsgICAgICAgZGVw ZW5kcyBvbiBPRiAmJiBTRVJJQUxfODI1MF9NVDY1NzcKPiA+ID4gPiArICAgICAgIHNlbGVjdCBE TUFfRU5HSU5FCj4gPiA+ID4gKyAgICAgICBzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKPiA+ ID4gPiArICAgICAgIGhlbHAKPiA+ID4gPiArICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFVBUlQg RE1BIGVuZ2luZSBmb3VuZCBvbiBNZWRpYVRlayBNVEsgU29Dcy4KPiA+ID4gPiArICAgICAgICAg d2hlbiA4MjUwIG10ayB1YXJ0IGlzIGVuYWJsZWQsIGFuZCBpZiB5b3Ugd2FudCB0byB1c2luZyBE TUEsCj4gPiA+Cj4gPiA+IDgyNTAgbXRrIHVhcnQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gU0VSSUFM XzgyNTBfTVQ2NTc3IHRvIGJlIG1vcmUgaW50dWl0aXZlCj4gPiA+Cj4gPiA+ID4gKyAgICAgICAg IHlvdSBjYW4gZW5hYmxlIHRoZSBjb25maWcuIHRoZSBETUEgZW5naW5lIGp1c3Qgb25seSBiZSB1 c2VkCj4gPiA+ID4gKyAgICAgICAgIHdpdGggTWVkaWFUZWsgU29jcy4KPiA+ID4KPiA+ID4gU29D cwo+ID4gPgo+ID4gPiA+ICsKPiA+ID4gPiAgY29uZmlnIE1US19IU0RNQQo+ID4gPiA+ICAgICAg ICAgdHJpc3RhdGUgIk1lZGlhVGVrIEhpZ2gtU3BlZWQgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydCIK PiA+ID4gPiAgICAgICAgIGRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QK PiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2 ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gPiA+IGluZGV4IDZlNzc4ZjguLjJmMmVmZDkg MTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUKPiA+ID4g PiArKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gPiA+IEBAIC0xICsxLDIg QEAKPiA+ID4gPiArb2JqLSQoQ09ORklHX0RNQV9NVEtfVUFSVCkgKz0gODI1MF9tdGtfZG1hLm8K PiA+ID4KPiA+ID4gb2JqLSQoQ09ORklHX01US19VQVJUX0FQRE1BKSArPSBtdGstdWFydC1hcGRt YS5vCj4gPiA+IHRvIGFsaWduIHRoZSBvdGhlciBkaXJ2ZXJzCj4gPiA+Cj4gPiA+ID4gIG9iai0k KENPTkZJR19NVEtfSFNETUEpICs9IG10ay1oc2RtYS5vCj4gPiA+ID4gLS0KPiA+ID4gPiAxLjcu OS41Cj4gPiA+ID4KPiA+Cj4gPgo=