From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: Re: [PATCHv2 02/11] soc: ti: add initial PRM driver with reset
control support
Date: Thu, 29 Aug 2019 15:12:19 +0200
Message-ID: <1567084339.5345.7.camel@pengutronix.de>
References: <20190828071941.32378-1-t-kristo@ti.com>
<20190828071941.32378-3-t-kristo@ti.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <20190828071941.32378-3-t-kristo@ti.com>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Sender: "linux-arm-kernel"
Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org
To: Tero Kristo , ssantosh@kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, robh+dt@kernel.org
Cc: tony@atomide.com, devicetree@vger.kernel.org
List-Id: devicetree@vger.kernel.org
T24gV2VkLCAyMDE5LTA4LTI4IGF0IDEwOjE5ICswMzAwLCBUZXJvIEtyaXN0byB3cm90ZToKPiBB
ZGQgaW5pdGlhbCBQUk0gKFBvd2VyIGFuZCBSZXNldCBNYW5hZ2VtZW50KSBkcml2ZXIgZm9yIFRJ
IE9NQVAgY2xhc3MKPiBTb0NzLiBJbml0aWFsbHkgdGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyBy
ZXNldCBjb250cm9sLCBidXQgY2FuIGJlCj4gZXh0ZW5kZWQgdG8gc3VwcG9ydCByZXN0IG9mIHRo
ZSBmdW5jdGlvbmFsaXR5LCBsaWtlIHBvd2VyZG9tYWluCj4gY29udHJvbCwgUFJDTSBpcnEgc3Vw
cG9ydCBldGMuCj4gCj4gU2lnbmVkLW9mZi1ieTogVGVybyBLcmlzdG8gPHQta3Jpc3RvQHRpLmNv
bT4KPiAtLS0KPiAgYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIHwgICAxICsKPiAgZHJpdmVy
cy9zb2MvdGkvTWFrZWZpbGUgICAgIHwgICAxICsKPiAgZHJpdmVycy9zb2MvdGkvb21hcF9wcm0u
YyAgIHwgMjM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVz
IGNoYW5nZWQsIDIzNyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz
L3NvYy90aS9vbWFwX3BybS5jCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIv
S2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwo+IGluZGV4IGZkYjY3NDM3NjBh
Mi4uYWQwOGQ0NzBhMmNhIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZp
Zwo+ICsrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwo+IEBAIC0xMDksNiArMTA5LDcg
QEAgY29uZmlnIEFSQ0hfT01BUDJQTFVTCj4gIAlzZWxlY3QgVElfU1lTQwo+ICAJc2VsZWN0IE9N
QVBfSVJRQ0hJUAo+ICAJc2VsZWN0IENMS1NSQ19USV8zMksKPiArCXNlbGVjdCBBUkNIX0hBU19S
RVNFVF9DT05UUk9MTEVSCj4gIAloZWxwCj4gIAkgIFN5c3RlbXMgYmFzZWQgb24gT01BUDIsIE9N
QVAzLCBPTUFQNCBvciBPTUFQNQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkvTWFr
ZWZpbGUgYi9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQo+IGluZGV4IGIzODY4ZDM5MmQ0Zi4uNzg4
YjVjZDFlMTgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCj4gKysrIGIv
ZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKPiBAQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0tF
WVNUT05FX05BVklHQVRPUl9RTVNTKQkrPSBrbmF2X3Ftc3Mubwo+ICBrbmF2X3Ftc3MteSA6PSBr
bmF2X3Ftc3NfcXVldWUubyBrbmF2X3Ftc3NfYWNjLm8KPiAgb2JqLSQoQ09ORklHX0tFWVNUT05F
X05BVklHQVRPUl9ETUEpCSs9IGtuYXZfZG1hLm8KPiAgb2JqLSQoQ09ORklHX0FNWDNfUE0pCQkJ
Kz0gcG0zM3h4Lm8KPiArb2JqLSQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKQkJKz0gb21hcF9wcm0u
bwo+ICBvYmotJChDT05GSUdfV0tVUF9NM19JUEMpCQkrPSB3a3VwX20zX2lwYy5vCj4gIG9iai0k
KENPTkZJR19USV9TQ0lfUE1fRE9NQUlOUykJCSs9IHRpX3NjaV9wbV9kb21haW5zLm8KPiAgb2Jq
LSQoQ09ORklHX1RJX1NDSV9JTlRBX01TSV9ET01BSU4pCSs9IHRpX3NjaV9pbnRhX21zaS5vCj4g
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL29tYXBfcHJtLmMgYi9kcml2ZXJzL3NvYy90aS9v
bWFwX3BybS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmZk
NWM0MzFmODczNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3NvYy90aS9vbWFwX3By
bS5jCj4gQEAgLTAsMCArMSwyMzUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKPiArLyoKPiArICogT01BUDIrIFBSTSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0
IChDKSAyMDE5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGku
Y29tLwo+ICsgKglUZXJvIEtyaXN0byA8dC1rcmlzdG9AdGkuY29tPgo+ICsgKi8KPiArCj4gKyNp
bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgoKV2h5
IDxsaW51eC9tb2R1bGUuaD4/IFRoaXMgaXMgYSBidWlsdGluIGRyaXZlci4KCj4gKyNpbmNsdWRl
IDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxs
aW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxs
aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0LWNvbnRyb2xs
ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKwo+ICtzdHJ1Y3Qgb21hcF9yc3Rf
bWFwIHsKPiArCXM4IHJzdDsKPiArCXM4IHN0Owo+ICt9Owo+ICsKPiArc3RydWN0IG9tYXBfcHJt
X2RhdGEgewo+ICsJdTMyIGJhc2U7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsJdTE2IHJzdGN0
cmw7Cj4gKwl1MTYgcnN0c3Q7Cj4gKwljb25zdCBzdHJ1Y3Qgb21hcF9yc3RfbWFwICpyc3RtYXA7
Cj4gKwl1OCBmbGFnczsKPiArfTsKCkkgd29uZGVyIGlmIHNwbGl0dGluZyByc3RjdHJsL3JzdHN0
L3JzdG1hcCBvdXQgaW50byBhIHNlcGFyYXRlIHN0cnVjdHVyZQp3b3VsZCBtYWtlIHNlbnNlLiBU
aGF0IGNvdWxkIGJlIGxpbmtlZCBmcm9tIG9tYXBfcmVzZXRfZGF0YSBkaXJlY3RseS4KVGhhdCBv
bmx5IG1ha2VzIHNlbnNlIGlmIHRoZXJlJ2QgYmUgZW5vdWdoIGNhc2VzIHdoZXJlIGl0IGNhbiBi
ZSByZXVzZWQKZm9yIG11bHRpcGxlIFBSTXMgaW5zdGFuY2VzLgoKPiArCj4gK3N0cnVjdCBvbWFw
X3BybSB7Cj4gKwljb25zdCBzdHJ1Y3Qgb21hcF9wcm1fZGF0YSAqZGF0YTsKPiArCXZvaWQgX19p
b21lbSAqYmFzZTsKPiArfTsKPiArCj4gK3N0cnVjdCBvbWFwX3Jlc2V0X2RhdGEgewo+ICsJc3Ry
dWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2IHJjZGV2Owo+ICsJc3RydWN0IG9tYXBfcHJtICpwcm07
Cj4gK307Cj4gKwo+ICsjZGVmaW5lIHRvX29tYXBfcmVzZXRfZGF0YShwKSBjb250YWluZXJfb2Yo
KHApLCBzdHJ1Y3Qgb21hcF9yZXNldF9kYXRhLCByY2RldikKPiArCj4gKyNkZWZpbmUgT01BUF9N
QVhfUkVTRVRTCQk4Cj4gKyNkZWZpbmUgT01BUF9SRVNFVF9NQVhfV0FJVAkxMDAwMAo+ICsKPiAr
I2RlZmluZSBPTUFQX1BSTV9IQVNfUlNUQ1RSTAlCSVQoMCkKPiArI2RlZmluZSBPTUFQX1BSTV9I
QVNfUlNUU1QJQklUKDEpCj4gKwo+ICsjZGVmaW5lIE9NQVBfUFJNX0hBU19SRVNFVFMJKE9NQVBf
UFJNX0hBU19SU1RDVFJMIHwgT01BUF9QUk1fSEFTX1JTVFNUKQo+ICsKPiArc3RhdGljIGNvbnN0
IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcF9wcm1faWRfdGFibGVbXSA9IHsKPiArCXsgfSwKPiAr
fTsKPiArCj4gK3N0YXRpYyBib29sIF9pc192YWxpZF9yZXNldChzdHJ1Y3Qgb21hcF9yZXNldF9k
YXRhICpyZXNldCwgdW5zaWduZWQgbG9uZyBpZCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG9tYXBf
cnN0X21hcCAqbWFwID0gcmVzZXQtPnBybS0+ZGF0YS0+cnN0bWFwOwo+ICsKPiArCXdoaWxlICht
YXAgJiYgbWFwLT5yc3QgPj0gMCkgewoKSWYgcnN0bWFwIGlzIG5ldmVyIE5VTEwsCgoJd2hpbGUg
KG1hcC0+cnN0ID49IDApIHsKCnNob3VsZCBiZSBlbm91Z2guCgo+ICsJCWlmIChtYXAtPnJzdCA9
PSBpZCkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwkJbWFwKys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu
IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG9tYXBfcmVzZXRfc3RhdHVzKHN0cnVjdCBy
ZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsCj4gKwkJCSAgICAgdW5zaWduZWQgbG9uZyBpZCkK
PiArewo+ICsJc3RydWN0IG9tYXBfcmVzZXRfZGF0YSAqcmVzZXQgPSB0b19vbWFwX3Jlc2V0X2Rh
dGEocmNkZXYpOwo+ICsJdTMyIHY7Cj4gKwo+ICsJaWYgKCFfaXNfdmFsaWRfcmVzZXQocmVzZXQs
IGlkKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKCkRvbid0IGNoZWNrIHRoaXMgaW4gdGhlIHN0YXR1
cy8oZGUpYXNzZXJ0L3Jlc2V0IGNhbGxiYWNrcy4gSW5zdGVhZCwKaW1wbGVtZW50IHJjZGV2Lm9m
X3hsYXRlIGFuZCByZXR1cm4gLUVJTlZBTCB0aGVyZSwgc28gdGhhdCBpbnZhbGlkIGlkcwpjYW4g
bmV2ZXIgYmUgcmVxdWVzdGVkLgoKPiArCXYgPSByZWFkbF9yZWxheGVkKHJlc2V0LT5wcm0tPmJh
c2UgKyByZXNldC0+cHJtLT5kYXRhLT5yc3RzdCk7Cj4gKwl2ICY9IDEgPDwgaWQ7Cj4gKwl2ID4+
PSBpZDsKCm9tYXBfZ2V0X3N0X2JpdCBiZWxvdyBtYWtlcyBpdCBsb29rIGxpa2UgdGhlIHN0YXR1
cyBiaXQgY2FuIGJlIGluIGEKZGlmZmVyZW50IHBsYWNlIHRoYW4gdGhlIHJlc2V0IGNvbnRyb2wg
Yml0LCBzaG91bGQgdGhhdCBiZSB1c2VkIGhlcmUgYXMKd2VsbD8KCj4gKwo+ICsJcmV0dXJuIHY7
Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgb21hcF9yZXNldF9hc3NlcnQoc3RydWN0IHJlc2V0X2Nv
bnRyb2xsZXJfZGV2ICpyY2RldiwKPiArCQkJICAgICB1bnNpZ25lZCBsb25nIGlkKQo+ICt7Cj4g
KwlzdHJ1Y3Qgb21hcF9yZXNldF9kYXRhICpyZXNldCA9IHRvX29tYXBfcmVzZXRfZGF0YShyY2Rl
dik7Cj4gKwl1MzIgdjsKPiArCj4gKwlpZiAoIV9pc192YWxpZF9yZXNldChyZXNldCwgaWQpKQo+
ICsJCXJldHVybiAtRUlOVkFMOwoKU2FtZSBhcyBhYm92ZS4KCj4gKwkvKiBhc3NlcnQgdGhlIHJl
c2V0IGNvbnRyb2wgbGluZSAqLwo+ICsJdiA9IHJlYWRsX3JlbGF4ZWQocmVzZXQtPnBybS0+YmFz
ZSArIHJlc2V0LT5wcm0tPmRhdGEtPnJzdGN0cmwpOwo+ICsJdiB8PSAxIDw8IGlkOwo+ICsJd3Jp
dGVsX3JlbGF4ZWQodiwgcmVzZXQtPnBybS0+YmFzZSArIHJlc2V0LT5wcm0tPmRhdGEtPnJzdGN0
cmwpOwoKVGhpcyByZWFkLW1vZGlmeS13cml0ZSBzaG91bGQgYmUgcHJvdGVjdGVkIHdpdGggYSBs
b2NrLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBvbWFwX3Jlc2V0
X2dldF9zdF9iaXQoc3RydWN0IG9tYXBfcmVzZXRfZGF0YSAqcmVzZXQsCj4gKwkJCQkgdW5zaWdu
ZWQgbG9uZyBpZCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG9tYXBfcnN0X21hcCAqbWFwID0gcmVz
ZXQtPnBybS0+ZGF0YS0+cnN0bWFwOwo+ICsKPiArCXdoaWxlIChtYXAgJiYgbWFwLT5yc3QgPj0g
MCkgewoKU2FtZSBhcyBhYm92ZS4KCj4gKwkJaWYgKG1hcC0+cnN0ID09IGlkKQo+ICsJCQlyZXR1
cm4gbWFwLT5zdDsKPiArCj4gKwkJbWFwKys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGlkOwo+ICt9
Cj4gKwo+ICsvKgo+ICsgKiBOb3RlIHRoYXQgc3RhdHVzIHdpbGwgbm90IGNoYW5nZSB1bnRpbCBj
bG9ja3MgYXJlIG9uLCBhbmQgY2xvY2tzIGNhbm5vdCBiZQo+ICsgKiBlbmFibGVkIHVudGlsIHJl
c2V0IGlzIGRlYXNzZXJ0ZWQuIENvbnN1bWVyIGRyaXZlcnMgbXVzdCBjaGVjayBzdGF0dXMKPiAr
ICogc2VwYXJhdGVseSBhZnRlciBlbmFibGluZyBjbG9ja3MuCj4gKyAqLwo+ICtzdGF0aWMgaW50
IG9tYXBfcmVzZXRfZGVhc3NlcnQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwK
PiArCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaWQpCj4gK3sKPiArCXN0cnVjdCBvbWFwX3Jlc2V0
X2RhdGEgKnJlc2V0ID0gdG9fb21hcF9yZXNldF9kYXRhKHJjZGV2KTsKPiArCXUzMiB2Owo+ICsJ
aW50IHN0X2JpdDsKPiArCWJvb2wgaGFzX3JzdHN0Owo+ICsKPiArCWlmICghX2lzX3ZhbGlkX3Jl
c2V0KHJlc2V0LCBpZCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7CgpTYW1lIGFzIGFib3ZlLgoKPiAr
CS8qIGNoZWNrIHRoZSBjdXJyZW50IHN0YXR1cyB0byBhdm9pZCBkZS1hc3NlcnRpbmcgdGhlIGxp
bmUgdHdpY2UgKi8KPiArCXYgPSByZWFkbF9yZWxheGVkKHJlc2V0LT5wcm0tPmJhc2UgKyByZXNl
dC0+cHJtLT5kYXRhLT5yc3RjdHJsKTsKPiArCWlmICghKHYgJiBCSVQoaWQpKSkKPiArCQlyZXR1
cm4gLUVFWElTVDsKCldoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhpcz8gRm9yIHNoYXJlZCBjb25z
dW1lcnMgdGhlIGNvcmUgYWxyZWFkeSBkb2VzCnJlZmNvdW50aW5nLCBhbmQgSSBleHBlY3QgZXhj
bHVzaXZlIGNvbnN1bWVycyB3b24ndCBkZWFzc2VydCB0d2ljZS4KU2luY2UgdGhlIHJlc2V0IHNp
Z25hbCBpcyBkZWFzc2VydGVkIGFmdGVyIHRoaXMgY2FsbCwgdGhpcyBzaG91bGQgbm90CnJldHVy
biBhbiBlcnJvci4KCj4gKwo+ICsJaGFzX3JzdHN0ID0gcmVzZXQtPnBybS0+ZGF0YS0+cnN0c3Qg
fHwKPiArCQkocmVzZXQtPnBybS0+ZGF0YS0+ZmxhZ3MgJiBPTUFQX1BSTV9IQVNfUlNUU1QpOwo+
ICsKPiArCWlmIChoYXNfcnN0c3QpIHsKPiArCQlzdF9iaXQgPSBvbWFwX3Jlc2V0X2dldF9zdF9i
aXQocmVzZXQsIGlkKTsKPiArCj4gKwkJLyogQ2xlYXIgdGhlIHJlc2V0IHN0YXR1cyBieSB3cml0
aW5nIDEgdG8gdGhlIHN0YXR1cyBiaXQgKi8KPiArCQl2ID0gcmVhZGxfcmVsYXhlZChyZXNldC0+
cHJtLT5iYXNlICsgcmVzZXQtPnBybS0+ZGF0YS0+cnN0c3QpOwo+ICsJCXYgfD0gMSA8PCBzdF9i
aXQ7Cj4gKwkJd3JpdGVsX3JlbGF4ZWQodiwgcmVzZXQtPnBybS0+YmFzZSArIHJlc2V0LT5wcm0t
PmRhdGEtPnJzdHN0KTsKCldoYXQgZG9lcyB0aGUgdmFsdWUgcmVhZCBmcm9tIHRoZSByc3RzdCBy
ZWdpc3RlciBpbmRpY2F0ZT8gSXMgaXQgdGhlCmN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlc2V0IGxp
bmU/IElzIGl0IDAgdW50aWwgZGVhc3NlcnRpb24gaXMgY29tcGxldGVkLAphbmQgdGhlbiBpdCB0
dXJucyB0byAxPwoKPiArCX0KPiArCj4gKwkvKiBkZS1hc3NlcnQgdGhlIHJlc2V0IGNvbnRyb2wg
bGluZSAqLwo+ICsJdiA9IHJlYWRsX3JlbGF4ZWQocmVzZXQtPnBybS0+YmFzZSArIHJlc2V0LT5w
cm0tPmRhdGEtPnJzdGN0cmwpOwoKUmVhZGluZyB0aGUgcmVnaXN0ZXIgYWdhaW4gc2VlbXMgdW5u
ZWNlc3NhcnkuCgo+ICsJdiAmPSB+KDEgPDwgaWQpOwo+ICsJd3JpdGVsX3JlbGF4ZWQodiwgcmVz
ZXQtPnBybS0+YmFzZSArIHJlc2V0LT5wcm0tPmRhdGEtPnJzdGN0cmwpOwoKQXMgYWJvdmUsIHRo
ZSByZWFkLW1vZGlmeS13cml0ZSBzaG91bGQgYmUgbG9ja2VkLgoKPiArCj4gKwlyZXR1cm4gMDsK
PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZXNldF9jb250cm9sX29wcyBvbWFwX3Jl
c2V0X29wcyA9IHsKPiArCS5hc3NlcnQJCT0gb21hcF9yZXNldF9hc3NlcnQsCj4gKwkuZGVhc3Nl
cnQJPSBvbWFwX3Jlc2V0X2RlYXNzZXJ0LAo+ICsJLnN0YXR1cwkJPSBvbWFwX3Jlc2V0X3N0YXR1
cywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgb21hcF9wcm1fcmVzZXRfaW5pdChzdHJ1Y3QgcGxh
dGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICAgICAgc3RydWN0IG9tYXBfcHJtICpwcm0pCj4g
K3sKPiArCXN0cnVjdCBvbWFwX3Jlc2V0X2RhdGEgKnJlc2V0Owo+ICsKPiArCS8qCj4gKwkgKiBD
aGVjayBpZiB3ZSBoYXZlIGNvbnRyb2xsYWJsZSByZXNldHMuIElmIGVpdGhlciByc3RjdHJsIGlz
IG5vbi16ZXJvCj4gKwkgKiBvciBPTUFQX1BSTV9IQVNfUlNUQ1RSTCBmbGFnIGlzIHNldCwgd2Ug
aGF2ZSByZXNldCBjb250cm9sIHJlZ2lzdGVyCj4gKwkgKiBmb3IgdGhlIGRvbWFpbi4KPiArCSAq
Lwo+ICsJaWYgKCFwcm0tPmRhdGEtPnJzdGN0cmwgJiYgIShwcm0tPmRhdGEtPmZsYWdzICYgT01B
UF9QUk1fSEFTX1JTVENUUkwpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJlc2V0ID0gZGV2bV9r
emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmVzZXQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh
cmVzZXQpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmVzZXQtPnJjZGV2Lm93bmVyID0g
VEhJU19NT0RVTEU7Cj4gKwlyZXNldC0+cmNkZXYub3BzID0gJm9tYXBfcmVzZXRfb3BzOwo+ICsJ
cmVzZXQtPnJjZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiArCXJlc2V0LT5yY2Rl
di5ucl9yZXNldHMgPSBPTUFQX01BWF9SRVNFVFM7Cj4gKwo+ICsJcmVzZXQtPnBybSA9IHBybTsK
PiArCj4gKwlyZXR1cm4gZGV2bV9yZXNldF9jb250cm9sbGVyX3JlZ2lzdGVyKCZwZGV2LT5kZXYs
ICZyZXNldC0+cmNkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG9tYXBfcHJtX3Byb2JlKHN0
cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVz
Owo+ICsJY29uc3Qgc3RydWN0IG9tYXBfcHJtX2RhdGEgKmRhdGE7Cj4gKwlzdHJ1Y3Qgb21hcF9w
cm0gKnBybTsKPiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwo+ICsKPiArCXJl
cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlp
ZiAoIXJlcykKPiArCQlyZXR1cm4gLUVOT0RFVjsKClRoaXMgY2FuIGJlIG1lcmdlZCB3aXRowqBk
ZXZtX2lvcmVtYXBfcmVzb3VyY2UgYmVsb3cuCgo+ICsJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uo
b21hcF9wcm1faWRfdGFibGUsICZwZGV2LT5kZXYpOwo+ICsJaWYgKCFtYXRjaCkKPiArCQlyZXR1
cm4gLUVOT1RTVVBQOwo+ICsKPiArCXBybSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXpl
b2YoKnBybSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcm0pCj4gKwkJcmV0dXJuIC1FTk9NRU07
Cj4gKwo+ICsJZGF0YSA9IG1hdGNoLT5kYXRhOwo+ICsKPiArCXdoaWxlIChkYXRhLT5iYXNlICE9
IHJlcy0+c3RhcnQpIHsKPiArCQlpZiAoIWRhdGEtPmJhc2UpCj4gKwkJCXJldHVybiAtRUlOVkFM
Owo+ICsJCWRhdGErKzsKPiArCX0KCklzIHRoaXMgbm90IHNvbWV0aGluZyB0aGF0IHlvdSB3YW50
IHRvIGhhdmUgZW5jb2RlZCBpbiB0aGUgY29tcGF0aWJsZQpzdHJpbmc/IFRoZXkgYWxsIGhhdmUg
YSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0LgoKPiArCj4gKwlwcm0tPmRhdGEgPSBkYXRhOwo+
ICsKPiArCXBybS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMp
OwoKCXBybS0+YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsK
Cj4gKwlpZiAoIXBybS0+YmFzZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXR1cm4g
b21hcF9wcm1fcmVzZXRfaW5pdChwZGV2LCBwcm0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0
IHBsYXRmb3JtX2RyaXZlciBvbWFwX3BybV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBvbWFwX3By
bV9wcm9iZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCj4g
KwkJLm9mX21hdGNoX3RhYmxlCT0gb21hcF9wcm1faWRfdGFibGUsCj4gKwl9LAo+ICt9Owo+ICti
dWlsdGluX3BsYXRmb3JtX2RyaXZlcihvbWFwX3BybV9kcml2ZXIpOwoKcmVnYXJkcwpQaGlsaXBw
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h
cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v
cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t
a2VybmVsCg==