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: [4/4] usb: musb: Add support for MediaTek musb controller From: min.guo@mediatek.com Message-Id: <1547037068.4433.122.camel@mhfsdcap03> Date: Wed, 9 Jan 2019 20:31:08 +0800 To: Bin Liu Cc: Rob Herring , Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Yonglong Wu List-ID: SGkgQmluLApPbiBUdWUsIDIwMTktMDEtMDggYXQgMDk6NDQgLTA2MDAsIEJpbiBMaXUgd3JvdGU6 Cj4gSGksCj4gCj4gT24gVGh1LCBEZWMgMjcsIDIwMTggYXQgMDM6MzQ6MjZQTSArMDgwMCwgbWlu Lmd1b0BtZWRpYXRlay5jb20gd3JvdGU6Cj4gPiBGcm9tOiBNaW4gR3VvIDxtaW4uZ3VvQG1lZGlh dGVrLmNvbT4KPiA+IAo+ID4gVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1lZGlhVGVrIG11c2IgY29u dHJvbGxlciBpbgo+ID4gaG9zdCwgcGVyaXBoZXJhbCBhbmQgb3RnIG1vZGUKPiA+IAo+ID4gU2ln bmVkLW9mZi1ieTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+Cj4gPiBTaWduZWQtb2Zm LWJ5OiBZb25nbG9uZyBXdSA8eW9uZ2xvbmcud3VAbWVkaWF0ZWsuY29tPgo+ID4gLS0tCj4gPiAg ZHJpdmVycy91c2IvbXVzYi9LY29uZmlnICAgICB8ICAgOCArLQo+ID4gIGRyaXZlcnMvdXNiL211 c2IvTWFrZWZpbGUgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYyAg fCA1NjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRy aXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgfCAgMTAgKwo+ID4gIGRyaXZlcnMvdXNiL211c2Iv bXVzYl9jb3JlLmggfCAgIDEgKwo+ID4gIGRyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaCAgfCAg IDEgKwo+ID4gIGRyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgfCAgNzkgKysrKy0tCj4gPiAg ZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaCB8ICAgNiArCj4gPiAgZHJpdmVycy91c2IvbXVz Yi9tdXNiaHNkbWEuYyB8ICAzNCArKy0KPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDY3MSBpbnNlcnRp b25zKCspLCAzMSBkZWxldGlvbnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91 c2IvbXVzYi9tZWRpYXRlay5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNi L0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKPiA+IGluZGV4IGFkMDg4OTUuLjU0 MGZjOWYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKPiA+ICsrKyBi L2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwo+ID4gQEAgLTExNSw2ICsxMTUsMTIgQEAgY29uZmln IFVTQl9NVVNCX0paNDc0MAo+ID4gIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0dBREdFVAo+ID4gIAlk ZXBlbmRzIG9uIFVTQl9PVEdfQkxBQ0tMSVNUX0hVQgo+ID4gIAo+ID4gK2NvbmZpZyBVU0JfTVVT Ql9NRURJQVRFSwo+ID4gKwl0cmlzdGF0ZSAiTWVkaWFUZWsgcGxhdGZvcm1zIgo+ID4gKwlkZXBl bmRzIG9uIEFSQ0hfTUVESUFURUsKPiAKPiBQbGVhc2UgYWxzbyBhZGQgJ3x8IENPTVBJTEVfVEVT VCcgdG8gbWFrZSB0ZXN0aW5nIGVhc2llci4KCk9rCgo+ID4gKwlkZXBlbmRzIG9uIE5PUF9VU0Jf WENFSVYKPiA+ICsJZGVwZW5kcyBvbiBHRU5FUklDX1BIWQo+ID4gKwo+ID4gIGNvbmZpZyBVU0Jf TVVTQl9BTTMzNVhfQ0hJTEQKPiA+ICAJdHJpc3RhdGUKPiA+ICAKPiA+IEBAIC0xNDEsNyArMTQ3 LDcgQEAgY29uZmlnIFVTQl9VWDUwMF9ETUEKPiA+ICAKPiA+ICBjb25maWcgVVNCX0lOVkVOVFJB X0RNQQo+ID4gIAlib29sICdJbnZlbnRyYScKPiA+IC0JZGVwZW5kcyBvbiBVU0JfTVVTQl9PTUFQ MlBMVVMKPiA+ICsJZGVwZW5kcyBvbiBVU0JfTVVTQl9PTUFQMlBMVVMgfHwgVVNCX01VU0JfTUVE SUFURUsKPiA+ICAJaGVscAo+ID4gIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIHVzaW5nIE1lbnRv cidzIGVuZ2luZS4KPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL01ha2Vm aWxlIGIvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQo+ID4gaW5kZXggM2E4OGM3OS4uNjNkODJk MCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKPiA+ICsrKyBiL2Ry aXZlcnMvdXNiL211c2IvTWFrZWZpbGUKPiA+IEBAIC0yNCw2ICsyNCw3IEBAIG9iai0kKENPTkZJ R19VU0JfTVVTQl9EQThYWCkJCQkrPSBkYTh4eC5vCj4gPiAgb2JqLSQoQ09ORklHX1VTQl9NVVNC X1VYNTAwKQkJCSs9IHV4NTAwLm8KPiA+ICBvYmotJChDT05GSUdfVVNCX01VU0JfSlo0NzQwKQkJ CSs9IGp6NDc0MC5vCj4gPiAgb2JqLSQoQ09ORklHX1VTQl9NVVNCX1NVTlhJKQkJCSs9IHN1bnhp Lm8KPiA+ICtvYmotJChDT05GSUdfVVNCX01VU0JfTUVESUFURUspICAgICAgCQkrPSBtZWRpYXRl ay5vCj4gPiAgCj4gPiAgCj4gPiAgb2JqLSQoQ09ORklHX1VTQl9NVVNCX0FNMzM1WF9DSElMRCkJ CSs9IG11c2JfYW0zMzV4Lm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL21lZGlh dGVrLmMgYi9kcml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4xNWE2NDYwCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg Yi9kcml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMKPiAKPiBbc25pcF0KPiBJIHdpbGwgcmV2aWV3 IHRoaXMgc2VjdGlvbiBsYXRlciBhZnRlciB3ZSBzb3J0ZWQgb3V0IG90aGVyIHRoaW5ncy4KPiAK PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91 c2IvbXVzYi9tdXNiX2NvcmUuYwo+ID4gaW5kZXggYjdkNTYyNy4uZDYwZjc2ZiAxMDA2NDQKPiA+ IC0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKPiA+ICsrKyBiL2RyaXZlcnMvdXNi L211c2IvbXVzYl9jb3JlLmMKPiA+IEBAIC0xMDI4LDYgKzEwMjgsMTYgQEAgc3RhdGljIHZvaWQg bXVzYl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IG11c2IgKm11c2IpCj4gPiAgCXRlbXAgPSBt dXNiX3JlYWRiKG1iYXNlLCBNVVNCX0lOVFJVU0IpOwo+ID4gIAl0ZW1wID0gbXVzYl9yZWFkdyht YmFzZSwgTVVTQl9JTlRSVFgpOwo+ID4gIAl0ZW1wID0gbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9J TlRSUlgpOwo+ID4gKwo+ID4gKwkvKiAgTWVkaWFUZWsgY29udHJvbGxlciBpbnRlcnJ1cHQgc3Rh dHVzIGlzIFcxQyAqLwo+IAo+IFRoaXMgVzFDIGRvZXNuJ3QgbWF0Y2ggdG8gdGhlIE1VU0IgUHJv Z3JhbW1pbmcgR3VpZGUgdGhhdCBJIGhhdmUuIFRob3NlCj4gcmVnaXN0ZXJzIGFyZSByZWFkLW9u bHkuCj4gSXMgdGhlIGRpZmZlcmVuY2UgZHVlIHRvIHRoZSBJUCBpbnRlcmdyYXRpb24gaW4gdGhl IG10ayBwbGF0Zm9ybXM/IG9yIGlzCj4gaXQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTVVTQiBjb250 cm9sbGVyPyBJZiBsYXR0ZXIsIHdoYXQgaXMgdGhlIHZlcnNpb24/CgpUaGlzIGlzIGRpZmZlcmVu Y2UgZHVlIHRvIHRoZSBJUCBpbnRlcmdyYXRpb24gaW4gbXRrIHBsYXRmb3Jtcy4gVzFDIGlzCmVh c3kgZm9yIENwZGVWaXNlciBkZWJ1Zy4KCj4gPiArCWlmIChtdXNiLT5vcHMtPnF1aXJrcyAmIE1V U0JfTVRLX1FVSVJLUykgewo+IAo+IEJhc2ljYWxseSB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGlz IHR5cGUgb2YgcGxhdGZvcm0gc3BlY2lmaWMgcXVpcmtzIGlmCj4gcG9zc2libGUsIHNvIGxldCdz IHRyeSB0byBub3QgdXNlIGl0LgoKSSB3aWxsIHRyeSBteSBiZXN0IHRvIGF2b2lkIHVzaW5nIGl0 LgoKPiA+ICsJCW11c2Jfd3JpdGViKG1iYXNlLCBNVVNCX0lOVFJVU0IsCj4gPiArCQkJbXVzYl9y ZWFkYihtYmFzZSwgTVVTQl9JTlRSVVNCKSk7Cj4gCj4gRm9yIHRoaXMgY2xlYXJpbmcgcmVnaXN0 ZXIgYml0IG9wZXJhdGlvbiwgcGxlYXNlIGNyZWF0ZSBwbGF0Zm9ybSBob29rcwo+IG11c2JfY2xl YXJiKCkgYW5kIG11c2JfY2xlYXJ3KCkgaW4gc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIGluc3Rl YWQsCj4gdGhlbiBmb2xsb3cgaG93IG11c2JfcmVhZGIoKSBwb2ludGVyIGlzIGFzc2lnbmVkIGlu Cj4gbXVzYl9pbml0X2NvbnRyb2xsZXIoKSB0byB1c2UgdGhlIFcxQyB2ZXJzaW9uIGZvciBtdGsg cGxhdGZvcm0uCgpJIGhhdmUgdHJpZWQgaW1wbGVtZW50aW5nIG11c2JfcmVhZGIoKSwgbXVzYl9y ZWFkdygpIGludGVyZmFjZSB3aXRoCmludGVycnVwdCBzdGF0dXMgVzFDIGZ1bmN0aW9uIGluIHN0 cnVjdCBtdXNiX3BsYXRmb3JtX29wcy4gQnV0IHRoaXMKaW50ZXJmYWNlIHdpbGwgcmVxdWlyZSBh IGdsb2JhbCB2YXJpYWJsZSB0byBob2xkIE1BQyBiYXNpYyBhZGRyZXNzIGZvcgpqdWRnbWVudCwg YW5kIHRoZW4gc3BlY2lhbCBoYW5kbGluZyBvZiB0aGUgaW50ZXJydXB0IHN0YXRlLiBBIGdsb2Jh bAp2YXJpYWJsZSB3aWxsIG1ha2UgdGhlIGRyaXZlciB3b3JrIHdpdGggb25seSBhIHNpbmdsZSBp bnN0YW5jZSwgc28gaXQKY2FuJ3Qgd29yayBvbiBzb21lIE1USyBwbGF0Zm9ybXMgd2hpY2ggaGF2 ZSB0d28gaW5zdGFuY2VzLgpIb3cgYWJvdXQgY3JlYXRpbmcgbXVzYl9jbGVhcmIvdygpIGFzIGZv bGxvd2luZzoKdm9pZCAoKmNsZWFyYikodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZz ZXQsIHU4IGRhdGEpOwp2b2lkICgqY2xlYXJ3KSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVk IG9mZnNldCwgdTE2IGRhdGEpOwoKCj4gPiArCQltdXNiX3dyaXRldyhtYmFzZSwgTVVTQl9JTlRS UlgsCj4gPiArCQkJbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9JTlRSUlgpKTsKPiA+ICsJCW11c2Jf d3JpdGV3KG1iYXNlLCBNVVNCX0lOVFJUWCwKPiA+ICsJCQltdXNiX3JlYWR3KG1iYXNlLCBNVVNC X0lOVFJUWCkpOwo+ID4gKwl9Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2b2lkIG11c2JfZW5h YmxlX2ludGVycnVwdHMoc3RydWN0IG11c2IgKm11c2IpCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKPiA+ IGluZGV4IDA0MjAzYjcuLjFiZjRlOWEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3VzYi9tdXNi L211c2JfY29yZS5oCj4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCj4gPiBA QCAtMTM4LDYgKzEzOCw3IEBAIGVudW0gbXVzYl9nX2VwMF9zdGF0ZSB7Cj4gPiAgICovCj4gPiAg c3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKPiA+ICAKPiA+ICsjZGVmaW5lIE1VU0JfTVRLX1FV SVJLUwlCSVQoMTApCj4gPiAgI2RlZmluZSBNVVNCX0dfTk9fU0tCX1JFU0VSVkUJQklUKDkpCj4g PiAgI2RlZmluZSBNVVNCX0RBOFhYCQlCSVQoOCkKPiA+ICAjZGVmaW5lIE1VU0JfUFJFU0VSVkVf U0VTU0lPTglCSVQoNykKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1h LmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKPiA+IGluZGV4IDI4MWU3NWQzLi5iMjE4 MjEwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCj4gPiArKysg Yi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKPiA+IEBAIC0xOTcsNiArMTk3LDcgQEAgc3Rh dGljIGlubGluZSB2b2lkIG11c2JfZG1hX2NvbnRyb2xsZXJfZGVzdHJveShzdHJ1Y3QgZG1hX2Nv bnRyb2xsZXIgKmQpIHsgfQo+ID4gIGV4dGVybiBzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKgo+ID4g IG11c2Joc19kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19p b21lbSAqYmFzZSk7Cj4gPiAgZXh0ZXJuIHZvaWQgbXVzYmhzX2RtYV9jb250cm9sbGVyX2Rlc3Ry b3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKTsKPiA+ICtleHRlcm4gaXJxcmV0dXJuX3QgZG1h X2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0YSk7Cj4gPiAgCj4gPiAg ZXh0ZXJuIHN0cnVjdCBkbWFfY29udHJvbGxlciAqCj4gPiAgdHVzYl9kbWFfY29udHJvbGxlcl9j cmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqYmFzZSk7Cj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVz Yl9ob3N0LmMKPiA+IGluZGV4IGI1OWNlOWEuLmIxYjAyMTYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2 ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCj4gPiArKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Jf aG9zdC5jCj4gPiBAQCAtMjkyLDIwICsyOTIsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG11c2Jf c2F2ZV90b2dnbGUoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfaW4sCj4gPiAgewo+ID4gIAl2 b2lkIF9faW9tZW0JCSplcGlvID0gcWgtPmh3X2VwLT5yZWdzOwo+ID4gIAl1MTYJCQljc3I7Cj4g PiArCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNiOwo+ID4gIAo+ID4gIAkvKgo+ ID4gIAkgKiBGSVhNRTogdGhlIGN1cnJlbnQgTWVudG9yIERNQSBjb2RlIHNlZW1zIHRvIGhhdmUK PiA+ICAJICogcHJvYmxlbXMgZ2V0dGluZyB0b2dnbGUgY29ycmVjdC4KPiA+ICAJICovCj4gPiAg Cj4gPiAtCWlmIChpc19pbikKPiA+IC0JCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENT UikgJiBNVVNCX1JYQ1NSX0hfREFUQVRPR0dMRTsKPiA+IC0JZWxzZQo+ID4gLQkJY3NyID0gbXVz Yl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOwo+ID4g KwkvKiBNZWRpYVRlayBjb250cm9sbGVyIGhhcyBwcml2YXRlIHRvZ2dsZSByZWdpc3RlciAqLwo+ IAo+IG9ubHkgb25lIHRvZ2dsZSByZWdpc3RlciBmb3IgYWxsIGVuZHBvaW50cz8gaG93IGRvZXMg aXQgaGFuZGxlCj4gZGlmZmVyZW5jZSB0b2dnbGUgdmFsdWVzIGZvciBkaWZmZXJlbnQgZW5kcG9p bnRzPwoKTWVkaWFUZWsgY29udHJvbGxlciBoYXMgc2VwYXJhdGUgcmVnaXN0ZXJzIHRvIGRlc2Ny aWJlIFRYL1JYIHRvZ2dsZS4KCj4gPiArCWlmIChtdXNiLT5vcHMtPnF1aXJrcyAmIE1VU0JfTVRL X1FVSVJLUykgewo+ID4gKwkJdTE2IHRvZ2dsZTsKPiA+ICsJCXU4IGVwbnVtID0gcWgtPmh3X2Vw LT5lcG51bTsKPiA+ICsKPiA+ICsJCWlmIChpc19pbikKPiA+ICsJCQl0b2dnbGUgPSBtdXNiX3Jl YWRsKG11c2ItPm1yZWdzLCBNVVNCX1JYVE9HKTsKPiAKPiBzaG91bGQgdXNlIG11c2JfcmVhZHco KSBpbnN0ZWFkPyBNVVNCX1JYVE9HIHNlZW1zIHRvIGJlIDE2Yml0LgoKT2sKCj4gPiArCQllbHNl Cj4gPiArCQkJdG9nZ2xlID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgTVVTQl9UWFRPRyk7Cj4g PiArCj4gPiArCQljc3IgPSB0b2dnbGUgJiAoMSA8PCBlcG51bSk7Cj4gPiArCX0gZWxzZSB7Cj4g PiArCQlpZiAoaXNfaW4pCj4gPiArCQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NS KQo+ID4gKwkJCQkmIE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xFOwo+ID4gKwkJZWxzZQo+ID4gKwkJ CWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9UWENTUikKPiA+ICsJCQkJJiBNVVNCX1RYQ1NS X0hfREFUQVRPR0dMRTsKPiAKPiBEb2VzIHRoaXMgbG9naWMgc3RpbGwgd29yayBmb3IgdGhlIG10 ayBwbGF0Zm9ybSBldmVuIGlmIGl0IGhhcyBpdHMgb3duCj4gcHJpdmF0ZSB0b2dnbGUgcmVnaXN0 ZXI/IElmIHNvLCB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSBoZXJlLgoKU29ycnksIHRoaXMgbG9n aWMgY2FuIG5vdCB3b3JrIG9uIG10ayBwbGF0Zm9ybSwgYml0Ck1VU0JfUlhDU1JfSF9EQVRBVE9H R0xFIGFuZCBNVVNCX1RYQ1NSX0hfREFUQVRPR0dMRSBhcmUgdXNlZCBmb3Igb3RoZXIKZnVuY3Rp b24uCgo+IElmIG5vdCwgbGV0J3MgdHJ5IHRvIG5vdCB1c2UgdGhpcyBxdWlyayBmbGFnLiBQbGVh c2UgY3JlYXRlIGEgaG9vawo+IG11c2JfcGxhdGZvcm1fZ2V0X3RvZ2dsZSgpIGluIHN0cnVjdCBt dXNiX3BsYXRmb3JtX29wcy4KCkRvZXMgdGhlIG1ldGhvZCBvZiBpbXBsZW1lbnQgbXVzYl9wbGF0 Zm9ybV9nZXRfdG9nZ2xlKCkgaXMgcHJlcGFyZQptdXNiX2RlZmF1bHRfZ2V0X3RvZ2dsZSB3aXRo IGNvbW1vbiBmdW5jdGlvbiwgdGhlbiBmb2xsb3cgaG93Cm11c2JfcmVhZGIoKSBwb2ludGVyIGlz IGFzc2lnbmVkIGluIG11c2JfaW5pdF9jb250cm9sbGVyKCk/CgpIb3cgYWJvdXQgY3JlYXRpbmcg bXVzYl9wbGF0Zm9ybV9nZXRfdG9nZ2xlKCkgYXMgZm9sbG93aW5nOgp1MTYgKCpnZXRfdG9nZ2xl KShzdHJ1Y3QgbXVzYiogbXVzYiwgc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfaW4pOwoKPiA+ ICsJfQo+ID4gIAo+ID4gIAl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sICFpc19p biwgY3NyID8gMSA6IDApOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgaW5saW5lIHUxNiBtdXNi X3NldF90b2dnbGUoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfaW4sCj4gPiArCQkJCQlzdHJ1 Y3QgdXJiICp1cmIpCj4gPiArewo+ID4gKwl1MTYgY3NyID0gMDsKPiA+ICsJdTE2IHRvZ2dsZSA9 IDA7Cj4gPiArCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNiOwo+ID4gKwl1OCBl cG51bSA9IHFoLT5od19lcC0+ZXBudW07Cj4gPiArCj4gPiArCXRvZ2dsZSA9IHVzYl9nZXR0b2dn bGUodXJiLT5kZXYsIHFoLT5lcG51bSwgIWlzX2luKTsKPiA+ICsKPiA+ICsJLyogTWVkaWFUZWsg Y29udHJvbGxlciBoYXMgcHJpdmF0ZSB0b2dnbGUgcmVnaXN0ZXIgKi8KPiA+ICsJaWYgKG11c2It Pm9wcy0+cXVpcmtzICYgTVVTQl9NVEtfUVVJUktTKSB7Cj4gPiArCQlpZiAoaXNfaW4pIHsKPiA+ ICsJCQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9SWFRPR0VOLCAoMSA8PCBlcG51bSkp Owo+ID4gKwkJCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBNVVNCX1JYVE9HLCAodG9nZ2xlIDw8 IGVwbnVtKSk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdz LCBNVVNCX1RYVE9HRU4sICgxIDw8IGVwbnVtKSk7Cj4gPiArCQkJbXVzYl93cml0ZWwobXVzYi0+ bXJlZ3MsIE1VU0JfVFhUT0csICh0b2dnbGUgPDwgZXBudW0pKTsKPiA+ICsJCX0KPiA+ICsJfSBl bHNlIHsKPiA+ICsJCWlmIChpc19pbikgewo+ID4gKwkJCWlmICh0b2dnbGUpCj4gPiArCQkJCWNz ciA9IE1VU0JfUlhDU1JfSF9XUl9EQVRBVE9HR0xFCj4gPiArCQkJCQkJfCBNVVNCX1JYQ1NSX0hf REFUQVRPR0dMRTsKPiA+ICsJCQllbHNlCj4gPiArCQkJCWNzciA9IDA7Cj4gPiArCQl9IGVsc2Ug ewo+ID4gKwkJCWlmICh0b2dnbGUpCj4gPiArCQkJCWNzciB8PSBNVVNCX1RYQ1NSX0hfV1JfREFU QVRPR0dMRQo+ID4gKwkJCQkJCXwgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7Cj4gPiArCQkJZWxz ZQo+ID4gKwkJCQljc3IgfD0gTVVTQl9UWENTUl9DTFJEQVRBVE9HOwo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCXJldHVybiBjc3I7Cj4gCj4gUGxlYXNlIGNyZWF0ZSBhIHNlcGVyYXRlIHBhdGNoIGZv ciB0aGlzIG11c2Jfc2V0X3RvZ2dsZSgpIHdpdGhvdXQgYWRkaW5nCj4gdGhlIG10ayBsb2dpYy4g SXQgaXMgYSBuaWNlIGNsZWFudXAuCgpEb2VzIHRoaXMgbGlrZSBnZXQgdG9nZ2xlIGltcGxlbWVu dGF0aW9uLCBjcmVhdGUgYSBob29rCm11c2JfcGxhdGZvcm1fc2V0X3RvZ2dsZSgpIGluIHN0cnVj dCBtdXNiX3BsYXRmb3JtX29wcz8KCj4gPiArfQo+ID4gKwo+ID4gIC8qCj4gPiAgICogQWR2YW5j ZSB0aGlzIGhhcmR3YXJlIGVuZHBvaW50J3MgcXVldWUsIGNvbXBsZXRpbmcgdGhlIHNwZWNpZmll ZCBVUkIgYW5kCj4gPiAgICogYWR2YW5jaW5nIHRvIGVpdGhlciB0aGUgbmV4dCBVUkIgcXVldWVk IHRvIHRoYXQgcWgsIG9yIGVsc2UgaW52YWxpZGF0aW5nCj4gPiBAQCAtNzcyLDEzICs4MjUsOCBA QCBzdGF0aWMgdm9pZCBtdXNiX2VwX3Byb2dyYW0oc3RydWN0IG11c2IgKm11c2IsIHU4IGVwbnVt LAo+ID4gIAkJCQkJKTsKPiA+ICAJCQljc3IgfD0gTVVTQl9UWENTUl9NT0RFOwo+ID4gIAo+ID4g LQkJCWlmICghaHdfZXAtPnR4X2RvdWJsZV9idWZmZXJlZCkgewo+ID4gLQkJCQlpZiAodXNiX2dl dHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAxKSkKPiA+IC0JCQkJCWNzciB8PSBNVVNCX1RY Q1NSX0hfV1JfREFUQVRPR0dMRQo+ID4gLQkJCQkJCXwgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7 Cj4gPiAtCQkJCWVsc2UKPiA+IC0JCQkJCWNzciB8PSBNVVNCX1RYQ1NSX0NMUkRBVEFUT0c7Cj4g PiAtCQkJfQo+ID4gKwkJCWlmICghaHdfZXAtPnR4X2RvdWJsZV9idWZmZXJlZCkKPiA+ICsJCQkJ Y3NyIHw9IG11c2Jfc2V0X3RvZ2dsZShxaCwgIWlzX291dCwgdXJiKTsKPiA+ICAKPiA+ICAJCQlt dXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYQ1NSLCBjc3IpOwo+ID4gIAkJCS8qIFJFVklTSVQgbWF5 IG5lZWQgdG8gY2xlYXIgRkxVU0hGSUZPIC4uLiAqLwo+ID4gQEAgLTg2MCwxNyArOTA4LDEyIEBA IHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggZXBudW0s Cj4gPiAgCj4gPiAgCS8qIElOL3JlY2VpdmUgKi8KPiA+ICAJfSBlbHNlIHsKPiA+IC0JCXUxNglj c3I7Cj4gPiArCQl1MTYJY3NyID0gMDsKPiA+ICAKPiA+ICAJCWlmIChod19lcC0+cnhfcmVpbml0 KSB7Cj4gPiAgCQkJbXVzYl9yeF9yZWluaXQobXVzYiwgcWgsIGVwbnVtKTsKPiA+ICsJCQljc3Ig fD0gbXVzYl9zZXRfdG9nZ2xlKHFoLCAhaXNfb3V0LCB1cmIpOwo+ID4gIAo+ID4gLQkJCS8qIGlu aXQgbmV3IHN0YXRlOiB0b2dnbGUgYW5kIE5ZRVQsIG1heWJlIERNQSBsYXRlciAqLwo+ID4gLQkJ CWlmICh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDApKQo+ID4gLQkJCQljc3Ig PSBNVVNCX1JYQ1NSX0hfV1JfREFUQVRPR0dMRQo+ID4gLQkJCQkJfCBNVVNCX1JYQ1NSX0hfREFU QVRPR0dMRTsKPiA+IC0JCQllbHNlCj4gPiAtCQkJCWNzciA9IDA7Cj4gPiAgCQkJaWYgKHFoLT50 eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkKPiA+ICAJCQkJY3NyIHw9IE1VU0JfUlhDU1Jf RElTTllFVDsKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVn cy5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAo+ID4gaW5kZXggNWNkNzI2NC4uZmZi ZTI2NyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKPiA+ICsr KyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKPiA+IEBAIC0yNzMsNiArMjczLDEyIEBA Cj4gPiAgI2RlZmluZSBNVVNCX1JYSFVCQUREUgkJMHgwNgo+ID4gICNkZWZpbmUgTVVTQl9SWEhV QlBPUlQJCTB4MDcKPiA+ICAKPiA+ICsvKiBNZWRpYVRlayBjb250cm9sbGVyIHRvZ2dsZSBlbmFi bGUgYW5kIHN0YXR1cyByZWcgKi8KPiA+ICsjZGVmaW5lIE1VU0JfUlhUT0cJCTB4ODAKPiA+ICsj ZGVmaW5lIE1VU0JfUlhUT0dFTgkJMHg4Mgo+ID4gKyNkZWZpbmUgTVVTQl9UWFRPRwkJMHg4NAo+ ID4gKyNkZWZpbmUgTVVTQl9UWFRPR0VOCQkweDg2Cj4gCj4gQWdhaW4sIHRoZXNlIG9mZnNldHMg YXJlIGZvciBkaWZmZXJlbnQgcmVnaXN0ZXJzIGluIHRoZSBNVVNCIHZlcnNpb24gSQo+IGhhdmUs IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUg TVVTQiBJUC4KClNvcnJ5LCB0aGVzZSBhcmUgTWVkaWFUZWsgY29udHJvbGxlciBwcml2YXRlIHJl Z2lzdGVycyB1c2VkIGZvciBjb250cm9sCnRvZ2dsZS4KCj4gPiArCj4gPiAgc3RhdGljIGlubGlu ZSB1OCBtdXNiX3JlYWRfY29uZmlnZGF0YSh2b2lkIF9faW9tZW0gKm1iYXNlKQo+ID4gIHsKPiA+ ICAJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5ERVgsIDApOwo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5j Cj4gPiBpbmRleCA4MjRhZGNiLi5jNTQ1NDc1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy91c2Iv bXVzYi9tdXNiaHNkbWEuYwo+ID4gKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwo+ ID4gQEAgLTI2Myw3ICsyNjMsNyBAQCBzdGF0aWMgaW50IGRtYV9jaGFubmVsX2Fib3J0KHN0cnVj dCBkbWFfY2hhbm5lbCAqY2hhbm5lbCkKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4g LXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJp dmF0ZV9kYXRhKQo+ID4gK2lycXJldHVybl90IGRtYV9jb250cm9sbGVyX2lycShpbnQgaXJxLCB2 b2lkICpwcml2YXRlX2RhdGEpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxl ciAqY29udHJvbGxlciA9IHByaXZhdGVfZGF0YTsKPiA+ICAJc3RydWN0IG11c2IgKm11c2IgPSBj b250cm9sbGVyLT5wcml2YXRlX2RhdGE7Cj4gPiBAQCAtMjg1LDYgKzI4NSw4IEBAIHN0YXRpYyBp cnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRh KQo+ID4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwo+ID4gIAo+ID4g IAlpbnRfaHNkbWEgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwo+ID4gKwlp ZiAobXVzYi0+b3BzLT5xdWlya3MgJiBNVVNCX01US19RVUlSS1MpCj4gPiArCQltdXNiX3dyaXRl YihtdXNiLT5tcmVncywgTVVTQl9IU0RNQV9JTlRSLCBpbnRfaHNkbWEpOwo+IAo+IHlvdSBjYW4g dXNlIG11c2JfY2xlYXJiKCkgZGVmaW5lZCBhYm92ZSB0byBnZXQgcmlkIG9mIHRoaXMgcXVpcmsu CgpPSy4gCgo+ID4gIAo+ID4gIAlpZiAoIWludF9oc2RtYSkgewo+ID4gIAkJbXVzYl9kYmcobXVz YiwgInNwdXJpb3VzIERNQSBpcnEiKTsKPiA+IEBAIC0zNzcsMTUgKzM3OSwxNyBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0 YSkKPiA+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwo+ID4g IAlyZXR1cm4gcmV0dmFsOwo+ID4gIH0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfY29udHJv bGxlcl9pcnEpOwo+ID4gIAo+ID4gIHZvaWQgbXVzYmhzX2RtYV9jb250cm9sbGVyX2Rlc3Ryb3ko c3RydWN0IGRtYV9jb250cm9sbGVyICpjKQo+ID4gIHsKPiA+ICAJc3RydWN0IG11c2JfZG1hX2Nv bnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywKPiA+ICAJCQlzdHJ1Y3QgbXVz Yl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7Cj4gPiArCXN0cnVjdCBtdXNiICptdXNiID0g Y29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOwo+ID4gIAo+ID4gIAlkbWFfY29udHJvbGxlcl9zdG9w KGNvbnRyb2xsZXIpOwo+ID4gIAo+ID4gLQlpZiAoY29udHJvbGxlci0+aXJxKQo+ID4gKwlpZiAo IShtdXNiLT5vcHMtPnF1aXJrcyAmIE1VU0JfTVRLX1FVSVJLUykgJiYgY29udHJvbGxlci0+aXJx KQo+ID4gIAkJZnJlZV9pcnEoY29udHJvbGxlci0+aXJxLCBjKTsKPiA+ICAKPiA+ICAJa2ZyZWUo Y29udHJvbGxlcik7Cj4gPiBAQCAtMzk4LDExICs0MDIsMTUgQEAgc3RydWN0IGRtYV9jb250cm9s bGVyICptdXNiaHNfZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLAo+ID4g IAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlcjsKPiA+ICAJc3RydWN0IGRl dmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKPiA+ICAJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ID4gLQlpbnQgaXJxID0gcGxhdGZv cm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRtYSIpOwo+ID4gKwlpbnQgaXJxID0gLTE7Cj4gPiAg Cj4gPiAtCWlmIChpcnEgPD0gMCkgewo+ID4gLQkJZGV2X2VycihkZXYsICJObyBETUEgaW50ZXJy dXB0IGxpbmUhXG4iKTsKPiA+IC0JCXJldHVybiBOVUxMOwo+ID4gKwlpZiAoIShtdXNiLT5vcHMt PnF1aXJrcyAmIE1VU0JfTVRLX1FVSVJLUykpIHsKPiA+ICsJCWlycSA9IHBsYXRmb3JtX2dldF9p cnFfYnluYW1lKHBkZXYsICJkbWEiKTsKPiA+ICsKPiA+ICsJCWlmIChpcnEgPCAwKSB7Cj4gPiAr CQkJZGV2X2VycihkZXYsICJObyBETUEgaW50ZXJydXB0IGxpbmUhXG4iKTsKPiA+ICsJCQlyZXR1 cm4gTlVMTDsKPiA+ICsJCX0KPiA+ICAJfQo+IAo+IFBsZWFzZSBjcmVhdGUgbXVzYmhzX2RtYV9j b250cm9sbGVyX2Rlc3Ryb3lfbm9pcnEoKSBmb3IgeW91ciBwbGF0Zm9ybSB0bwo+IG5vdCB1c2Ug dGhlIHF1aXJrLgoKT0suCgo+ID4gIAo+ID4gIAljb250cm9sbGVyID0ga3phbGxvYyhzaXplb2Yo KmNvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKPiA+IEBAIC00MTgsMTUgKzQyNiwxNyBAQCBzdHJ1 Y3QgZG1hX2NvbnRyb2xsZXIgKm11c2Joc19kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11 c2IgKm11c2IsCj4gPiAgCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9wcm9ncmFtID0g ZG1hX2NoYW5uZWxfcHJvZ3JhbTsKPiA+ICAJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVs X2Fib3J0ID0gZG1hX2NoYW5uZWxfYWJvcnQ7Cj4gPiAgCj4gPiAtCWlmIChyZXF1ZXN0X2lycShp cnEsIGRtYV9jb250cm9sbGVyX2lycSwgMCwKPiA+ICsJaWYgKCEobXVzYi0+b3BzLT5xdWlya3Mg JiBNVVNCX01US19RVUlSS1MpKSB7Cj4gPiArCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBkbWFfY29u dHJvbGxlcl9pcnEsIDAsCj4gPiAgCQkJZGV2X25hbWUobXVzYi0+Y29udHJvbGxlciksICZjb250 cm9sbGVyLT5jb250cm9sbGVyKSkgewo+ID4gLQkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSAl ZCBmYWlsZWQhXG4iLCBpcnEpOwo+ID4gLQkJbXVzYl9kbWFfY29udHJvbGxlcl9kZXN0cm95KCZj b250cm9sbGVyLT5jb250cm9sbGVyKTsKPiA+ICsJCQlkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJx ICVkIGZhaWxlZCFcbiIsIGlycSk7Cj4gPiArCQkJbXVzYl9kbWFfY29udHJvbGxlcl9kZXN0cm95 KCZjb250cm9sbGVyLT5jb250cm9sbGVyKTsKPiA+ICAKPiA+IC0JCXJldHVybiBOVUxMOwo+ID4g LQl9Cj4gPiArCQkJcmV0dXJuIE5VTEw7Cj4gPiArCQl9Cj4gPiAgCj4gPiAtCWNvbnRyb2xsZXIt PmlycSA9IGlycTsKPiA+ICsJCWNvbnRyb2xsZXItPmlycSA9IGlycTsKPiA+ICsJfQo+ID4gIAo+ ID4gIAlyZXR1cm4gJmNvbnRyb2xsZXItPmNvbnRyb2xsZXI7Cj4gPiAgfQo+IAo+IFNhbWUgaGVy ZSwgY3JlYXRlIG11c2Joc19kbWFfY29udHJvbGxlcl9jcmVhdGVfbm9pcnEoKS4gVGhlbiB1c2Ug Ym90aAo+IG5ldyBBUEkgZm9yIHRoZSBtdGsgZ2x1ZSBkcml2ZXIuCgpPSy4KCj4gUmVnYXJkcywK PiAtQmluLgo=