[PATCH v9 05/12] clk: zte: Add Clock registration infrastructure

Stefan Dösinger <[email protected]> Sun, 02 Aug 2026 23:33:37 +0300
Newsgroups org.infradead.lists.linux-phy,dev.linux.lists.mfd,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
VGhlIG5leHQgcGF0Y2hlcyB3aWxsIGltcGxlbWVudCB0aGUgcmVnbWFwIGNsb2NrcyBhbmQgUExM
IGRyaXZlci4gVGhlCmFjdHVhbCBoYXJkd2FyZSBzcGVjaWZpYyBjbG9jayBsaXN0aW5nIHdpbGwg
bGl2ZSBpbiBhIHNlcGFyYXRlIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBEw7ZzaW5n
ZXIgPHN0ZWZhbmRvZXNpbmdlckBnbWFpbC5jb20+CgotLS0KClZlcnNpb24gOToKUmV3b3JrIHBh
cmVudCBtYXRjaGluZyBhbmQgY2xvY2sgZXhwb3J0IGNvbnRyb2wuIE1vc3Qgb2YgdGhlIGNoYW5n
ZXMKd2lsbCBiZSBpbiB0aGUgbmV4dCBwYXRjaGVzLiBUaGUgdmlzaWJsZSBjaGFuZ2UgaGVyZSBp
cyB0aGF0IHRoZSBjbG9jawphcnJheSBpcyB1bmlmaWVkIHdpdGggc2luZ2xlIGNsb2NrcyBoYXZp
bmcgYSB0eXBlIHJhdGhlciB0aGFuIG9uZSBhcnJheQpwZXIgdHlwZS4KCkRlcGVuZCBvbiBIQVNf
SU9NRU0sIHNpbWlsYXJseSB0byBTYXNoaWtvJ3MgZmxhZ2dlZCBpc3N1ZSBpbiB0aGUgUmVzZXQK
cGF0Y2gKClpYMjk3NTIwVjNfQ0xLX05PX0VYUE9SVCBpcyBnb25lIGFnYWluLgoKVGhlIGV4cGxp
Y2l0IGNsb2NrIGlucHV0IGFycmF5IGFuZCBlbmFibGluZyBvZiBMU1AncyBwY2xrIGlzIHJlbW92
ZWQKZnJvbSB0aGUgY2xvY2sgZHJpdmVyLiBUaGUgTUZEIHBhcmVudCB0YWtlcyBjYXJlIG9mIHRo
aXMgaW5zdGVhZC4gVGhlCmNsb2NrIGRyaXZlciBkb2VzIHNvbWUgc2FuaXR5IGNoZWNraW5nIG9u
IHRoZSBzdGF0aWMgY2xvY2sgZGF0YSB0aG91Z2guCgpWZXJzaW9uIDg6ClVzZSBaWDI5NzUyMFYz
X0NMS19OT19FWFBPUlQ9KH4wdSkgZm9yIHVuZXhwb3J0ZWQgY2xvY2tzLiBXaGlsZSB1c2luZyAw
LAphbmQgc3RhcnRpbmcgY2xvY2sgaW5kaWNlcyBhdCAxLCBpcyBhIGNvbW1vbiBwYXR0ZXJuIGlu
IGV4aXN0aW5nCmRyaXZlcnMsIGl0IGV4cG9zZXMgYSBkcml2ZXIgaW1wbGVtZW50YXRpb24gZGV0
YWlsIGluIHRoZSBoYXJkd2FyZQpiaW5kaW5nIGludGVyZmFjZS4KCklmIGRlc2lyZWQsIEkgY2Fu
IGNoYW5nZSB0aGUgc3BlY2lhbCBpbmRleCB0byBhIHNlcGFyYXRlIGZpZWxkIGluIHRoZQpzdHJ1
Y3RzLgoKRml4IHRoZSByZXR1cm4gdmFsdWUgaWYgdGhlIC0+aW5pdCgpIGNhbGxiYWNrIGZhaWxz
LiAoU2FzaGlrbykKClZlcnNpb24gNzoKKikgQWRkIGZpeGVkIGRpdmlkZXJzIHRvIGhhbmRsZSBQ
TEwgc3ViZGl2aXNpb25zCiopIE5ldmVyIHJlZ2lzdGVyIFBMTHMgZGlyZWN0bHkgYXMgZXhwb3J0
ZWQgY2xvY2tzIC0gZXZlcnl0aGluZyBvbiB0aGlzClNvQyBnb2VzIHRocm91Z2ggYSBnYXRlIGJl
Zm9yZSBpdCBsZWF2ZXMgYSBjb250cm9sbGVyLgoKVmVyc2lvbiA2OgoqKSBSZW1vdmUgYXV4ZGV2
IG5vdyB0aGF0IExTUCBjbG9ja3MgYWxzbyB1c2UgTUZECiopIEVycm9yIGNvZGVwYXRoIGZpeGVz
IHBvaW50ZWQgb3V0IGJ5IFNhc2hpa28uCgpWZXJzaW9uIDU6CgoqKSBQYXNzIHRoZSBzdGF0aWMg
Y2xrIGRhdGEgaW5zdGVhZCBvZiBjYWxsaW5nIGdldF9tYXRjaF9kYXRhIHRvIHByZXBhcmUKZm9y
IG9wZXJhdGluZyBhcyBhbiBNRkQgY2hpbGQuCgoqKSBEb24ndCB1c2UgZGV2bV9remFsbG9jIHRv
IGFsbG9jYXRlIHRoZSBhdXhpbGlhcnlfZGV2aWNlCnN0cnVjdHVyZS4gSSBndWVzcyBTYXNoaWtv
IGlzIHJpZ2h0LCBhbmQgdGhhdCdzIHdoYXQgIkJlY2F1c2Ugb25jZSB0aGUKZGV2aWNlIGlzIHBs
YWNlZCBvbiB0aGUgYnVzIHRoZSBwYXJlbnQgZHJpdmVyIGNhbiBub3QgdGVsbCB3aGF0IG90aGVy
CmNvZGUgbWF5IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhpcyBkYXRhIiBpcyB0cnlpbmcgdG8gdGVs
bCBtZS4KCiopIEZpeCBlcnJvciBjaGVjayBmb3IgZGV2aWNlX25vZGVfdG9fcmVnbWFwLgotLS0K
IE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9jbGsvS2NvbmZp
ZyAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2Nsay9NYWtlZmlsZSAgICAgICAgIHwgICAxICsK
IGRyaXZlcnMvY2xrL3p0ZS9LY29uZmlnICAgICAgfCAgMTcgKysrKwogZHJpdmVycy9jbGsvenRl
L01ha2VmaWxlICAgICB8ICAgNSArKwogZHJpdmVycy9jbGsvenRlL2Nsay1yZWdtYXAuYyB8ICAz
MiArKysrKysrKwogZHJpdmVycy9jbGsvenRlL2Nsay16eC5jICAgICB8IDE4OSArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2Nsay96dGUvY2xrLXp4
LmggICAgIHwgMTQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2Ns
ay96dGUvcGxsLXp4LmMgICAgIHwgIDE4ICsrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDQwNiBpbnNl
cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBi
OWY5NjQ1NWJjYTcuLjc3ZmE4NmM2NzFiOCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIv
TUFJTlRBSU5FUlMKQEAgLTM5MTUsNiArMzkxNSw3IEBAIEY6CURvY3VtZW50YXRpb24vZGV2aWNl
dHJlZS9iaW5kaW5ncy9jbG9jay96dGUsengyOTc1MjB2My1tYXRyaXhjcm0ueWFtbAogRjoJRG9j
dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3p0ZSx6eDI5NzUyMHYzLXRvcGNy
bS55YW1sCiBGOglhcmNoL2FybS9ib290L2R0cy96dGUvCiBGOglhcmNoL2FybS9tYWNoLXp0ZS8K
K0Y6CWRyaXZlcnMvY2xrL3p0ZS8KIEY6CWRyaXZlcnMvbWZkL3p0ZS16eDI5NzUyMHYzLWNybS5j
CiBGOglpbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3p0ZSx6eDI5NzUyMHYzLWNsay5oCiBGOglp
bmNsdWRlL2R0LWJpbmRpbmdzL3BoeS96dGUsengyOTc1MjB2My10b3Bjcm0uaApkaWZmIC0tZ2l0
IGEvZHJpdmVycy9jbGsvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL0tjb25maWcKaW5kZXggMTcxN2Nl
NzVhOTA3Li42ZjBhODYzOTUxY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL0tjb25maWcKKysr
IGIvZHJpdmVycy9jbGsvS2NvbmZpZwpAQCAtNTQ1LDYgKzU0NSw3IEBAIHNvdXJjZSAiZHJpdmVy
cy9jbGsvdW5pcGhpZXIvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9jbGsvdmlzY29udGkvS2Nv
bmZpZyIKIHNvdXJjZSAiZHJpdmVycy9jbGsveDg2L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMv
Y2xrL3hpbGlueC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL2Nsay96dGUvS2NvbmZpZyIKIHNv
dXJjZSAiZHJpdmVycy9jbGsvenlucW1wL0tjb25maWciCiAKICMgS3VuaXQgdGVzdCBjYXNlcwpk
aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay9NYWtlZmlsZQpp
bmRleCA2ODk5ZTMyZTE0YWEuLjY1MWZlODY2ZGRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsv
TWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUKQEAgLTE2Nyw1ICsxNjcsNiBAQCBp
ZmVxICgkKENPTkZJR19DT01NT05fQ0xLKSwgeSkKIG9iai0kKENPTkZJR19YODYpCQkJKz0geDg2
LwogZW5kaWYKIG9iai15CQkJCQkrPSB4aWxpbngvCitvYmotJChDT05GSUdfQ09NTU9OX0NMS19a
VEUpCQkrPSB6dGUvCiBvYmotJChDT05GSUdfQVJDSF9aWU5RKQkJCSs9IHp5bnEvCiBvYmotJChD
T05GSUdfQ09NTU9OX0NMS19aWU5RTVApICAgICAgICAgKz0genlucW1wLwpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9jbGsvenRlL0tjb25maWcgYi9kcml2ZXJzL2Nsay96dGUvS2NvbmZpZwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE1MmMyNDIzYjhmMAotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvY2xrL3p0ZS9LY29uZmlnCkBAIC0wLDAgKzEsMTcgQEAKKyMgU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorIworIyBaVEUgQ2xvY2sgRHJpdmVy
cworIworCitjb25maWcgQ09NTU9OX0NMS19aVEUKKwl0cmlzdGF0ZSAiQ2xvY2sgZHJpdmVyIGZv
ciBaVEUgU29DcyIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQorCWRlcGVuZHMgb24gQVJDSF9aVEUg
fHwgQ09NUElMRV9URVNUCisJZGVmYXVsdCBBUkNIX1pURQorCXNlbGVjdCBNRkRfU1lTQ09OCisJ
aGVscAorCSAgVGhpcyBvcHRpb24gc2VsZWN0cyBjb21tb24gY2xvY2sgaW5mcmFzdHJ1Y3R1cmUg
Zm9yIFpURSBiYXNlZCBTb0NzLgorCSAgWW91IHdpbGwgbmVlZCB0byBlbmFibGUgb25lIG9yIG1v
cmUgU29DIHNwZWNpZmljIGRyaXZlcnMgdG8gbWFrZSB1c2UKKwkgIG9mIHRoaXMuCisKKwkgIEVu
YWJsZSB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGEgWlRFIGRlc2lnbmVk
IGJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenRlL01ha2VmaWxlIGIvZHJpdmVycy9j
bGsvenRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MjdkYjA3MjkzMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvenRlL01ha2VmaWxl
CkBAIC0wLDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5
CisKK29iai0kKENPTkZJR19DT01NT05fQ0xLX1pURSkgKz0gY2xrLXp0ZS5vCisKK2Nsay16dGUt
eSArPSBjbGstengubyBwbGwtengubyBjbGstcmVnbWFwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv
Y2xrL3p0ZS9jbGstcmVnbWFwLmMgYi9kcml2ZXJzL2Nsay96dGUvY2xrLXJlZ21hcC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODAzMzJkYmE5N2Y2Ci0tLSAvZGV2
L251bGwKKysrIGIvZHJpdmVycy9jbGsvenRlL2Nsay1yZWdtYXAuYwpAQCAtMCwwICsxLDMyIEBA
CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAyNiBTdGVmYW4gRMO2c2luZ2VyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92
aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5v
Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJjbGstenguaCIKKwor
c3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lzdGVyX2dhdGUoc3RydWN0IGRldmljZSAqZGV2LCBz
dHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB6eF9nYXRlX2Rlc2Mg
KmRlc2MsCisJCQkJICAgIHN0cnVjdCBjbGtfaHcgKiBjb25zdCAqY2xvY2tzKQoreworCXJldHVy
biBFUlJfUFRSKC1FTk9ERVYpOworfQorCitzdHJ1Y3QgY2xrX2h3ICp6eF9jbGtfcmVnaXN0ZXJf
ZGl2aWRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWdtYXAgKnJlZ21hcCwKKwkJCQkg
ICAgICAgY29uc3Qgc3RydWN0IHp4X2Rpdl9kZXNjICpkZXNjLAorCQkJCSAgICAgICBzdHJ1Y3Qg
Y2xrX2h3ICogY29uc3QgKmNsb2NrcykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30K
Kworc3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNlICpkZXYs
IHN0cnVjdCByZWdtYXAgKnJlZ21hcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgenhfbXV4X2Rlc2Mg
KmRlc2MsCisJCQkJICAgc3RydWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpCit7CisJcmV0dXJu
IEVSUl9QVFIoLUVOT0RFVik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay96dGUvY2xrLXp4
LmMgYi9kcml2ZXJzL2Nsay96dGUvY2xrLXp4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4yN2JiYWZkOGNlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Ns
ay96dGUvY2xrLXp4LmMKQEAgLTAsMCArMSwxODkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgU3RlZmFuIETDtnNp
bmdlcgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxs
aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJu
by5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1
bGUuaD4KKworI2luY2x1ZGUgImNsay16eC5oIgorCitzdGF0aWMgc3RydWN0IGNsa19odyAqenhf
Y2xrX3JlZ2lzdGVyX2ZpeGVkX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQljb25zdCBz
dHJ1Y3QgenhfZml4ZWRfZGl2aWRlcl9kZXNjICpkZXNjLAorCQkJCQkJc3RydWN0IGNsa19odyAq
IGNvbnN0ICpjbG9ja3MpCit7CisJY29uc3Qgc3RydWN0IHp4X3BhcmVudF9kZXNjICpwID0gJmRl
c2MtPnBhcmVudDsKKworCXN3aXRjaCAocC0+dHlwZSkgeworCWNhc2UgWlhfUEFSRU5UX0ZXOgor
CQlyZXR1cm4gZGV2bV9jbGtfaHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yX2Z3bmFtZShkZXYsIE5V
TEwsIGRlc2MtPm5hbWUsIHAtPmZ3X25hbWUsCisJCQkJCQkJCUNMS19TRVRfUkFURV9QQVJFTlQs
IDEsIGRlc2MtPmRpdik7CisKKwljYXNlIFpYX1BBUkVOVF9JRDoKKwkJcmV0dXJuIGRldm1fY2xr
X2h3X3JlZ2lzdGVyX2ZpeGVkX2ZhY3Rvcl9wYXJlbnRfaHcoZGV2LCBkZXNjLT5uYW1lLCBjbG9j
a3NbcC0+aWRdLAorCQkJCQkJCQkgICBDTEtfU0VUX1JBVEVfUEFSRU5ULCAxLAorCQkJCQkJCQkg
ICBkZXNjLT5kaXYpOworCX0KKwlXQVJOX09OX09OQ0UoMSk7CisJcmV0dXJuIEVSUl9QVFIoLUVJ
TlZBTCk7Cit9CisKK3N0YXRpYyBpbnQgenhfY2xrX3ZhbGlkYXRlKHN0cnVjdCBkZXZpY2UgKmRl
diwgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAorCQkJICAgY29uc3Qgc3RydWN0IHp4X2Ns
a19kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCB6eF9wYXJlbnRfZGVzYyAqcGFyZW50czsK
Kwl1bnNpZ25lZCBpbnQgaSwgcCwgbnVtX3BhcmVudHM7CisJc3RydWN0IGNsayAqY2xrOworCisJ
LyoKKwkgKiBTYW5pdHkgY2hlY2s6IE1ha2Ugc3VyZSBhbGwgcGFyZW50cyBhcmUgdGhlcmUgYW5k
IHdyaXRlIGEgY2xlYXIgbWVzc2FnZSByYXRoZXIgdGhhbgorCSAqIGxlYXZlIHBvdGVudGlhbCBv
cnBoYW5zLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1fY2xvY2tzOyArK2kpIHsK
KwkJc3dpdGNoIChkYXRhLT5jbG9ja3NbaV0udHlwZSkgeworCQljYXNlIFpYX0NMT0NLX1BMTDoK
KwkJCXBhcmVudHMgPSBkYXRhLT5jbG9ja3NbaV0ucGxsLnBhcmVudHM7CisJCQludW1fcGFyZW50
cyA9IGRhdGEtPmNsb2Nrc1tpXS5wbGwubnVtX3BhcmVudHM7CisJCQlicmVhazsKKworCQljYXNl
IFpYX0NMT0NLX0ZJWEVEX0RJVjoKKwkJCXBhcmVudHMgPSAmZGF0YS0+Y2xvY2tzW2ldLmZpeGVk
X2Rpdi5wYXJlbnQ7CisJCQludW1fcGFyZW50cyA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFpY
X0NMT0NLX01VWDoKKwkJCXBhcmVudHMgPSBkYXRhLT5jbG9ja3NbaV0ubXV4LnBhcmVudHM7CisJ
CQludW1fcGFyZW50cyA9IGRhdGEtPmNsb2Nrc1tpXS5tdXgubnVtX3BhcmVudHM7CisJCQlicmVh
azsKKworCQljYXNlIFpYX0NMT0NLX0RJVjoKKwkJCXBhcmVudHMgPSAmZGF0YS0+Y2xvY2tzW2ld
LmRpdi5wYXJlbnQ7CisJCQludW1fcGFyZW50cyA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFpY
X0NMT0NLX0dBVEU6CisJCQlwYXJlbnRzID0gJmRhdGEtPmNsb2Nrc1tpXS5nYXRlLnBhcmVudDsK
KwkJCW51bV9wYXJlbnRzID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g
ZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICJJbnZhbGlkIGNsb2NrIGVudHJ5ICV1XG4iLCBp
KTsKKwkJfQorCisJCWZvciAocCA9IDA7IHAgPCBudW1fcGFyZW50czsgKytwKSB7CisJCQlzd2l0
Y2ggKHBhcmVudHNbcF0udHlwZSkgeworCQkJY2FzZSBaWF9QQVJFTlRfRlc6CisJCQkJY2xrID0g
b2ZfY2xrX2dldF9ieV9uYW1lKG9mX25vZGUsIHBhcmVudHNbcF0uZndfbmFtZSk7CisJCQkJaWYg
KElTX0VSUihjbGspKQorCQkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoY2xr
KSwKKwkJCQkJCQkgICAgICJJbnB1dCBjbGsgJXMgZmFpbHVyZVxuIiwKKwkJCQkJCQkgICAgIHBh
cmVudHNbcF0uZndfbmFtZSk7CisJCQkJY2xrX3B1dChjbGspOworCQkJCWJyZWFrOworCisJCQlj
YXNlIFpYX1BBUkVOVF9JRDoKKwkJCQlpZiAocGFyZW50c1twXS5pZCA+PSBpKQorCQkJCQlyZXR1
cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCisJCQkJCQkJICAgICAiQ2xvY2sgJXUgaGFz
IHBhcmVudCAldVxuIiwKKwkJCQkJCQkgICAgIGksIHBhcmVudHNbcF0uaWQpOworCQkJCWJyZWFr
OworCisJCQlkZWZhdWx0OgorCQkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwK
KwkJCQkJCSAgICAgIkNsb2NrICV1IGhhcyB1bmV4cGVjdGVkIHBhcmVudCBvZiB0eXBlICV1XG4i
LAorCQkJCQkJICAgICBpLCBwYXJlbnRzW3BdLnR5cGUpOworCQkJfQorCQl9CisJfQorCisJcmV0
dXJuIDA7Cit9CisKK2ludCB6eF9jbGtfY29tbW9uX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwg
c3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAorCQkJY29uc3Qgc3RydWN0IHp4X2Nsa19kYXRh
ICpkYXRhKQoreworCXN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICpleHBvcnRzOworCXN0cnVj
dCBjbGtfaHcgKipjbG9ja3M7CisJc3RydWN0IHJlZ21hcCAqbWFwOworCXVuc2lnbmVkIGludCBp
OworCWludCByZXM7CisKKwlyZXMgPSB6eF9jbGtfdmFsaWRhdGUoZGV2LCBvZl9ub2RlLCBkYXRh
KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJbWFwID0gZGV2aWNlX25vZGVfdG9fcmVn
bWFwKG9mX25vZGUpOworCWlmIChJU19FUlIobWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIobWFwKTsK
KworCWNsb2NrcyA9IGRldm1fa2NhbGxvYyhkZXYsIGRhdGEtPm51bV9jbG9ja3MsIHNpemVvZigq
Y2xvY2tzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbG9ja3MpCisJCXJldHVybiAtRU5PTUVNOwor
CisJaWYgKGRhdGEtPmluaXQpIHsKKwkJcmVzID0gZGF0YS0+aW5pdChtYXApOworCQlpZiAocmVz
KQorCQkJcmV0dXJuIHJlczsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX2Nsb2Nr
czsgKytpKSB7CisJCXN0cnVjdCBjbGtfaHcgKmh3OworCisJCXN3aXRjaCAoZGF0YS0+Y2xvY2tz
W2ldLnR5cGUpIHsKKwkJY2FzZSBaWF9DTE9DS19QTEw6CisJCQlodyA9IHp4X2Nsa19yZWdpc3Rl
cl9wbGwoZGV2LCBtYXAsICZkYXRhLT5jbG9ja3NbaV0ucGxsLCBjbG9ja3MpOworCQkJYnJlYWs7
CisKKwkJY2FzZSBaWF9DTE9DS19GSVhFRF9ESVY6CisJCQlodyA9IHp4X2Nsa19yZWdpc3Rlcl9m
aXhlZF9kaXYoZGV2LCAmZGF0YS0+Y2xvY2tzW2ldLmZpeGVkX2RpdiwgY2xvY2tzKTsKKwkJCWJy
ZWFrOworCisJCWNhc2UgWlhfQ0xPQ0tfTVVYOgorCQkJaHcgPSB6eF9jbGtfcmVnaXN0ZXJfbXV4
KGRldiwgbWFwLCAmZGF0YS0+Y2xvY2tzW2ldLm11eCwgY2xvY2tzKTsKKwkJCWJyZWFrOworCisJ
CWNhc2UgWlhfQ0xPQ0tfRElWOgorCQkJaHcgPSB6eF9jbGtfcmVnaXN0ZXJfZGl2aWRlcihkZXYs
IG1hcCwgJmRhdGEtPmNsb2Nrc1tpXS5kaXYsIGNsb2Nrcyk7CisJCQlicmVhazsKKworCQljYXNl
IFpYX0NMT0NLX0dBVEU6CisJCQlodyA9IHp4X2Nsa19yZWdpc3Rlcl9nYXRlKGRldiwgbWFwLCAm
ZGF0YS0+Y2xvY2tzW2ldLmdhdGUsIGNsb2Nrcyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor
CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoSVNfRVJSKGh3KSkKKwkJCXJldHVybiBk
ZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihodyksICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xrICV1
XG4iLCBpKTsKKworCQljbG9ja3NbaV0gPSBodzsKKwl9CisKKwlleHBvcnRzID0gZGV2bV9remFs
bG9jKGRldiwgc3RydWN0X3NpemUoZXhwb3J0cywgaHdzLCBkYXRhLT5udW1fZXhwb3J0cyksIEdG
UF9LRVJORUwpOworCWlmICghZXhwb3J0cykKKwkJcmV0dXJuIC1FTk9NRU07CisJZXhwb3J0cy0+
bnVtID0gZGF0YS0+bnVtX2V4cG9ydHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX2V4
cG9ydHM7ICsraSkgeworCQlpZiAoZGF0YS0+ZXhwb3J0c1tpXSA+PSBkYXRhLT5udW1fY2xvY2tz
KQorCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAorCQkJCQkgICAgICJFeHBv
cnQgJXUgcG9pbnRzIHRvIG91dCBvZiByYW5nZSBjbG9jayAldVxuIiwKKwkJCQkJICAgICBpLCBk
YXRhLT5leHBvcnRzW2ldKTsKKworCQlleHBvcnRzLT5od3NbaV0gPSBjbG9ja3NbZGF0YS0+ZXhw
b3J0c1tpXV07CisJfQorCisJZGV2bV9rZnJlZShkZXYsIGNsb2Nrcyk7CisKKwlyZXR1cm4gZGV2
bV9vZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKGRldiwgb2ZfY2xrX2h3X29uZWNlbGxfZ2V0LCBleHBv
cnRzKTsKK30KK0VYUE9SVF9TWU1CT0xfTlNfR1BMKHp4X2Nsa19jb21tb25fcHJvYmUsICJaVEVf
Q0xLIik7CisKK01PRFVMRV9BVVRIT1IoIlN0ZWZhbiBEw7ZzaW5nZXIgPHN0ZWZhbmRvZXNpbmdl
ckBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlpURSBjb21tb24gY2xvY2sgZHJp
dmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay96
dGUvY2xrLXp4LmggYi9kcml2ZXJzL2Nsay96dGUvY2xrLXp4LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNzVmYmJhM2UwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9k
cml2ZXJzL2Nsay96dGUvY2xrLXp4LmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjYg
U3RlZmFuIETDtnNpbmdlcgorICovCisKKyNpZm5kZWYgX19EUlZfQ0xLX1pYX0gKKyNkZWZpbmUg
X19EUlZfQ0xLX1pYX0gKKworI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1
ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgor
I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQ0xLX1pYX1BMTF9QUkVQQVJFX0lT
X0VOQUJMRQkxCisjZGVmaW5lIENMS19aWF9NQVhfUEFSRU5UUwkJOAorCitlbnVtIHp4X3BhcmVu
dF90eXBlIHsKKwlaWF9QQVJFTlRfRlcsCisJWlhfUEFSRU5UX0lELAorfTsKKworc3RydWN0IHp4
X3BhcmVudF9kZXNjIHsKKwllbnVtIHp4X3BhcmVudF90eXBlCQl0eXBlOworCXVuaW9uIHsKKwkJ
Y29uc3QgY2hhcgkJKmZ3X25hbWU7CisJCXVuc2lnbmVkIGludAkJaWQ7CisJfTsKK307CisKKyNk
ZWZpbmUgUEFSRU5UX0ZXKF9uYW1lKSB7IC50eXBlID0gWlhfUEFSRU5UX0ZXLCAuZndfbmFtZSA9
IChfbmFtZSkgfQorCisjZGVmaW5lIFBBUkVOVF9JRChfaWQpIHsgLnR5cGUgPSBaWF9QQVJFTlRf
SUQsIC5pZCA9IChfaWQpIH0KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRh
IHp4X2dldF9wYXJlbnQoY29uc3Qgc3RydWN0IHp4X3BhcmVudF9kZXNjICpwLAorCQkJCQkJICAg
c3RydWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpCit7CisJc3RydWN0IGNsa19wYXJlbnRfZGF0
YSByZXQgPSB7fTsKKworCXN3aXRjaCAocC0+dHlwZSkgeworCWNhc2UgWlhfUEFSRU5UX0ZXOgor
CQlyZXQuZndfbmFtZSA9IHAtPmZ3X25hbWU7CisJCXJldC5pbmRleCA9IC0xOworCQlyZXR1cm4g
cmV0OworCisJY2FzZSBaWF9QQVJFTlRfSUQ6CisJCXJldC5odyA9IGNsb2Nrc1twLT5pZF07CisJ
CXJldC5pbmRleCA9IC0xOworCQlyZXR1cm4gcmV0OworCX07CisKKwlXQVJOX09OX09OQ0UoMSk7
CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHp4X3BsbF9kZXNjIHsKKwljb25zdCBjaGFyCQkJ
Km5hbWU7CisJY29uc3Qgc3RydWN0IHp4X3BhcmVudF9kZXNjCSpwYXJlbnRzOworCXVuc2lnbmVk
IGludAkJCW51bV9wYXJlbnRzOworCXVuc2lnbmVkIGxvbmcJCQlyYXRlOworCXUxNgkJCQlyZWc7
CisJdTE2CQkJCWZsYWdzOworfTsKKworc3RydWN0IHp4X2ZpeGVkX2RpdmlkZXJfZGVzYyB7CisJ
Y29uc3QgY2hhcgkJCSpuYW1lOworCXN0cnVjdCB6eF9wYXJlbnRfZGVzYwkJcGFyZW50OworCXVu
c2lnbmVkIGludAkJCWRpdjsKK307CisKK3N0cnVjdCB6eF9tdXhfZGVzYyB7CisJY29uc3QgY2hh
cgkJCSpuYW1lOworCWNvbnN0IHN0cnVjdCB6eF9wYXJlbnRfZGVzYwkqcGFyZW50czsKKwl1bnNp
Z25lZCBpbnQJCQludW1fcGFyZW50czsKKwl1MTYJCQkJcmVnOworCXU4CQkJCXNoaWZ0LCBzaXpl
OworfTsKKworc3RydWN0IHp4X2Rpdl9kZXNjIHsKKwljb25zdCBjaGFyCQkJKm5hbWU7CisJc3Ry
dWN0IHp4X3BhcmVudF9kZXNjCQlwYXJlbnQ7CisJdTE2CQkJCXJlZzsKKwl1OAkJCQlzaGlmdCwg
c2l6ZTsKK307CisKK3N0cnVjdCB6eF9nYXRlX2Rlc2MgeworCWNvbnN0IGNoYXIJCQkqbmFtZTsK
KwlzdHJ1Y3QgenhfcGFyZW50X2Rlc2MJCXBhcmVudDsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7
CisJdTE2CQkJCXJlZzsKKwl1OAkJCQlzaGlmdDsKK307CisKK2VudW0genhfY2xvY2tfdHlwZSB7
CisJWlhfQ0xPQ0tfSU5WQUxJRCA9IDAsCisJWlhfQ0xPQ0tfUExMLAorCVpYX0NMT0NLX0ZJWEVE
X0RJViwKKwlaWF9DTE9DS19NVVgsCisJWlhfQ0xPQ0tfRElWLAorCVpYX0NMT0NLX0dBVEUsCit9
OworCitzdHJ1Y3QgenhfY2xvY2sgeworCWVudW0genhfY2xvY2tfdHlwZSB0eXBlOworCXVuaW9u
IHsKKwkJc3RydWN0IHp4X3BsbF9kZXNjIHBsbDsKKwkJc3RydWN0IHp4X2ZpeGVkX2RpdmlkZXJf
ZGVzYyBmaXhlZF9kaXY7CisJCXN0cnVjdCB6eF9tdXhfZGVzYyBtdXg7CisJCXN0cnVjdCB6eF9k
aXZfZGVzYyBkaXY7CisJCXN0cnVjdCB6eF9nYXRlX2Rlc2MgZ2F0ZTsKKwl9OworfTsKKworc3Ry
dWN0IGNsa19odyAqenhfY2xrX3JlZ2lzdGVyX3BsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj
dCByZWdtYXAgKnJlZ21hcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgenhfcGxsX2Rlc2MgKmRlc2Ms
CisJCQkJICAgc3RydWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpOworc3RydWN0IGNsa19odyAq
enhfY2xrX3JlZ2lzdGVyX211eChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWdtYXAgKnJl
Z21hcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgenhfbXV4X2Rlc2MgKmRlc2MsCisJCQkJICAgc3Ry
dWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpOworc3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lz
dGVyX2RpdmlkZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisJ
CQkJICAgICAgIGNvbnN0IHN0cnVjdCB6eF9kaXZfZGVzYyAqZGVzYywKKwkJCQkgICAgICAgc3Ry
dWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpOworc3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lz
dGVyX2dhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisJCQkJ
ICAgIGNvbnN0IHN0cnVjdCB6eF9nYXRlX2Rlc2MgKmRlc2MsCisJCQkJICAgIHN0cnVjdCBjbGtf
aHcgKiBjb25zdCAqY2xvY2tzKTsKKworc3RydWN0IHp4X2Nsa19leHBvcnQgeworCXVuc2lnbmVk
IGludCBwcml2OworCXVuc2lnbmVkIGludCBiaW5kaW5nOworfTsKKworc3RydWN0IHp4X2Nsa19k
YXRhIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgcmVnbWFwICptYXApOworCWNvbnN0IHN0cnVjdCB6
eF9jbG9jayAqY2xvY2tzOworCXVuc2lnbmVkIGludCBudW1fY2xvY2tzOworCXVuc2lnbmVkIGlu
dCAqZXhwb3J0czsKKwl1bnNpZ25lZCBpbnQgbnVtX2V4cG9ydHM7Cit9OworCitpbnQgenhfY2xr
X2NvbW1vbl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zf
bm9kZSwKKwkJCWNvbnN0IHN0cnVjdCB6eF9jbGtfZGF0YSAqZGF0YSk7CisKKyNlbmRpZiAvKiBf
X0RSVl9DTEtfWlhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvenRlL3BsbC16eC5jIGIv
ZHJpdmVycy9jbGsvenRlL3BsbC16eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uZmM3NmM2NTI0YTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvenRl
L3BsbC16eC5jCkBAIC0wLDAgKzEsMTggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgU3RlZmFuIETDtnNpbmdlcgor
ICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9k
ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21h
cC5oPgorCisjaW5jbHVkZSAiY2xrLXp4LmgiCisKK3N0cnVjdCBjbGtfaHcgKnp4X2Nsa19yZWdp
c3Rlcl9wbGwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisJCQkJ
ICAgY29uc3Qgc3RydWN0IHp4X3BsbF9kZXNjICpkZXNjLAorCQkJCSAgIHN0cnVjdCBjbGtfaHcg
KiBjb25zdCAqY2xvY2tzKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworfQoKLS0gCjIu
NTQuMAoKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRl
YWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4
LXBoeQo=