Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 May 2015 15:35:29 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Updated, 1, 030 lines] D2377: Introduce ARM GICv3 support
Message-ID:  <ef7558bf87cdf32496a347c12801e0cd@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-piql4a7htwxjub743777-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-piql4a7htwxjub743777-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_ef7558bf87cdf32496a347c12801e0cd
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb updated this revision to Diff 5364.
zbb added a comment.
This revision now requires review to proceed.

Some more fixes from previous comments + fixes after final testing on HW.


CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D2377?vs=5343&id=5364

REVISION DETAIL
  https://reviews.freebsd.org/D2377

AFFECTED FILES
  sys/arm64/arm64/gic_v3.c
  sys/arm64/arm64/gic_v3_fdt.c
  sys/arm64/arm64/gic_v3_reg.h
  sys/arm64/arm64/gic_v3_var.h
  sys/arm64/arm64/locore.S
  sys/arm64/include/armreg.h
  sys/conf/files.arm64

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, ian, imp, andrew, emaste, brueffer, joel, wblock
Cc: kostikbel, emaste, andrew, imp, freebsd-arm

--b1_ef7558bf87cdf32496a347c12801e0cd
Content-Type: text/x-patch; charset=utf-8; name="D2377.5364.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2377.5364.patch"

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTE5LDYgKzE5LDggQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0
L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk
Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKK2FybTY0L2FybTY0L2dpY192M19mZHQu
YwlvcHRpb25hbAlmZHQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJCXN0YW5kYXJkCiBhcm02NC9h
cm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQvaW5fY2tzdW0uYwkJb3B0
aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvaW5jbHVkZS9hcm1yZWcu
aCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5cy9hcm02NC9pbmNsdWRlL2Fy
bXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCkBAIC05Niw2ICs5NiwyNCBA
QAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdhdGNocG9pbnQsIGZyb20gc2Ft
ZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJlYWtwb2ludCAqLwogCisvKiBJ
Q0NfQ1RMUl9FTDEgKi8KKyNkZWZpbmUJSUNDX0NUTFJfRUwxX0VPSU1PREUJKDFVIDw8IDEpCisK
Ky8qIElDQ19JQVIxX0VMMSAqLworI2RlZmluZQlJQ0NfSUFSMV9FTDFfU1BVUgkoMHgwM2ZmKQor
CisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBfRUwxX0VOCSgxVSA8
PCAwKQorCisvKiBJQ0NfUE1SX0VMMSAqLworI2RlZmluZQlJQ0NfUE1SX0VMMV9QUklPX01BU0sJ
KDB4RkZVTCkKKworLyogSUNDX1NSRV9FTDEgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDFfU1JFCQko
MVUgPDwgMCkKKworLyogSUNDX1NSRV9FTDIgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDJfRU4JCSgx
VSA8PCAzKQorCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURfQUE2NFBGUjBfRUww
X01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFTSwkoMHhmIDw8IDQp
CkBAIC0xMDUsNyArMTIzLDEwIEBACiAjZGVmaW5lCSBJRF9BQTY0UEZSMF9GUF9JTVBMCSgweDAg
PDwgMTYpIC8qIEZsb2F0aW5nLXBvaW50IGltcGxlbWVudGVkICovCiAjZGVmaW5lCSBJRF9BQTY0
UEZSMF9GUF9OT05FCSgweGYgPDwgMTYpIC8qIEZsb2F0aW5nLXBvaW50IG5vdCBpbXBsZW1lbnRl
ZCAqLwogI2RlZmluZQlJRF9BQTY0UEZSMF9BRFZfU0lNRF9NQVNLICgweGYgPDwgMjApCi0jZGVm
aW5lCUlEX0FBNjRQRlIwX0dJQ19NQVNLCSgweGYgPDwgMjQpCisjZGVmaW5lCUlEX0FBNjRQRlIw
X0dJQ19TSElGVAkoMjQpCisjZGVmaW5lCUlEX0FBNjRQRlIwX0dJQ19CSVRTCSgweDQpIC8qIE51
bWJlciBvZiBiaXRzIGluIEdJQyBmaWVsZCAqLworI2RlZmluZQlJRF9BQTY0UEZSMF9HSUNfTUFT
SwkoMHhmIDw8IElEX0FBNjRQRlIwX0dJQ19TSElGVCkKKyNkZWZpbmUJIElEX0FBNjRQRlIwX0dJ
Q19DUFVJRl9FTiAoMHgxIDw8IElEX0FBNjRQRlIwX0dJQ19TSElGVCkKIAogLyogTUFJUl9FTDEg
LSBNZW1vcnkgQXR0cmlidXRlIEluZGlyZWN0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lCU1BSVJf
QVRUUl9NQVNLKGlkeCkJKDB4ZmYgPDwgKChuKSogOCkpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQv
YXJtNjQvbG9jb3JlLlMgYi9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0
L2FybTY0L2xvY29yZS5TCisrKyBiL3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMTg3LDYg
KzE4NywyMCBAQAogCW1vdgl4MiwgIyhQU1JfRiB8IFBTUl9JIHwgUFNSX0EgfCBQU1JfRCB8IFBT
Ul9NX0VMMWgpCiAJbXNyCXNwc3JfZWwyLCB4MgogCisJLyogQ29uZmlndXJlIEdJQ3YzIENQVSBp
bnRlcmZhY2UgKi8KKwltcnMJeDIsIGlkX2FhNjRwZnIwX2VsMQorCS8qIEV4dHJhY3QgR0lDIGJp
dHMgZnJvbSB0aGUgcmVnaXN0ZXIgKi8KKwl1YmZ4CXgyLCB4MiwgI0lEX0FBNjRQRlIwX0dJQ19T
SElGVCwgI0lEX0FBNjRQRlIwX0dJQ19CSVRTCisJLyogR0lDWzM6MF0gPT0gMDAwMSAtIEdJQyBD
UFUgaW50ZXJmYWNlIHZpYSBzcGVjaWFsIHJlZ3MuIHN1cHBvcnRlZCAqLworCWNtcAl4MiwgIyhJ
RF9BQTY0UEZSMF9HSUNfQ1BVSUZfRU4gPj4gSURfQUE2NFBGUjBfR0lDX1NISUZUKQorCWIubmUJ
MmYKKworCW1ycwl4MiwgaWNjX3NyZV9lbDIKKwlvcnIJeDIsIHgyLCAjSUNDX1NSRV9FTDJfRU4J
LyogRW5hYmxlIGFjY2VzcyBmcm9tIGluc2VjdXJlIEVMMSAqLworCW1zcglpY2Nfc3JlX2VsMiwg
eDIKKwlpc2IKKzI6CisKIAkvKiBTZXQgdGhlIGFkZHJlc3MgdG8gcmV0dXJuIHRvIG91ciByZXR1
cm4gYWRkcmVzcyAqLwogCW1zcgllbHJfZWwyLCB4MzAKIApkaWZmIC0tZ2l0IGEvc3lzL2FybTY0
L2FybTY0L2dpY192M192YXIuaCBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz
X3Zhci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUg
RnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3Jz
aGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9HSUNfVjNfVkFSX0hf
CisjZGVmaW5lIF9HSUNfVjNfVkFSX0hfCisKKyNkZWZpbmUJR0lDX1YzX0RFVlNUUgkiQVJNIEdl
bmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgdjMuMCIKKworREVDTEFSRV9DTEFTUyhnaWNfdjNf
ZHJpdmVyKTsKKworc3RydWN0IGdpY19yZWRpc3RzIHsKKwkvKgorCSAqIFJlLURpc3RyaWJ1dG9y
IHJlZ2lvbiBkZXNjcmlwdGlvbi4KKwkgKiBXZSB3aWxsIGhhdmUgZmV3IG9mIHRob3NlIGRlcGVu
ZGluZworCSAqIG9uIHRoZSAjcmVkaXN0cmlidXRvci1yZWdpb25zIHByb3BlcnR5IGluIEZEVC4K
KwkgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKioJcmVnaW9uczsKKwkvKiBOdW1iZXIgb2YgUmUtRGlz
dHJpYnV0b3IgcmVnaW9ucyAqLworCXVfaW50CQkJbnJlZ2lvbnM7CisJLyogUGVyLUNQVSBSZS1E
aXN0cmlidXRvciBoYW5kbGVyICovCisJc3RydWN0IHJlc291cmNlICoJcGNwdVtNQVhDUFVdOwor
fTsKKworc3RydWN0IGdpY192M19zb2Z0YyB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgcmVz
b3VyY2UgKioJZ2ljX3JlczsKKwlzdHJ1Y3QgbXR4CQlnaWNfbXR4OworCS8qIERpc3RyaWJ1dG9y
ICovCisJc3RydWN0IHJlc291cmNlICoJZ2ljX2Rpc3Q7CisJLyogUmUtRGlzdHJpYnV0b3JzICov
CisJc3RydWN0IGdpY19yZWRpc3RzCWdpY19yZWRpc3RzOworCisJdV9pbnQJCQlnaWNfbmlycXM7
CisJdV9pbnQJCQlnaWNfaWRiaXRzOworCisJYm9vbGVhbl90CQlnaWNfcmVnaXN0ZXJlZDsKK307
CisKK01BTExPQ19ERUNMQVJFKE1fR0lDX1YzKTsKKworLyogRGV2aWNlIG1ldGhvZHMgKi8KK2lu
dCBnaWNfdjNfYXR0YWNoKGRldmljZV90IGRldik7CitpbnQgZ2ljX3YzX2RldGFjaChkZXZpY2Vf
dCBkZXYpOworCisvKgorICogR0lDIERpc3RyaWJ1dG9yIGFjY2Vzc29ycy4KKyAqIE5vdGljZSB0
aGF0IG9ubHkgR0lDIHNvZmMgY2FuIGJlIHBhc3NlZC4KKyAqLworI2RlZmluZQlnaWNfZF9yZWFk
KHNjLCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCWJ1c19yZWFkXyMjbGVuKHNjLT5naWNfZGlz
dCwgcmVnKTsJXAorfSkKKworI2RlZmluZQlnaWNfZF93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJ
CVwKKyh7CQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbihzYy0+Z2ljX2Rpc3QsIHJlZywgdmFsKTtc
Cit9KQorCisvKiBHSUMgUmUtRGlzdHJpYnV0b3IgYWNjZXNzb3JzIChwZXItQ1BVKSAqLworI2Rl
ZmluZQlnaWNfcl9yZWFkKHNjLCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCXVfaW50IGNwdSA9
IFBDUFVfR0VUKGNwdWlkKTsJCVwKKwkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbigJCQkJXAorCSAg
ICBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVdLAkJXAorCSAgICByZWcpOwkJCQlcCit9KQorCisj
ZGVmaW5lCWdpY19yX3dyaXRlKHNjLCBsZW4sIHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJdV9p
bnQgY3B1ID0gUENQVV9HRVQoY3B1aWQpOwkJXAorCQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbigJ
CQlcCisJICAgIHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdV0sCQlcCisJICAgIHJlZywgdmFsKTsJ
CQkJXAorfSkKKworI2VuZGlmIC8qIF9HSUNfVjNfVkFSX0hfICovCmRpZmYgLS1naXQgYS9zeXMv
YXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9n
aWNfdjNfcmVnLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1
IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3Bv
bnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19S
RUdfSF8KKyNkZWZpbmUJX0dJQ19WM19SRUdfSF8KKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9m
IGludGVycnVwdHMKKyAqIHN1cHBvcnRlZCBieSBHSUMgKGluY2x1ZGluZyBTR0lzLCBQUElzIGFu
ZCBTUElzKQorICovCisjZGVmaW5lCUdJQ19JX05VTV9NQVgJCSgxMDIwKQorLyoKKyAqIFByaW9y
aXR5IE1BWC9NSU4gdmFsdWVzCisgKi8KKyNkZWZpbmUJR0lDX1BSSU9SSVRZX01BWAkoMHgwMFVM
KQorLyogVXBwZXIgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBMUEkgbWF4IHByaW9yaXR5ICovCisj
ZGVmaW5lCUdJQ19QUklPUklUWV9NSU4JKDB4RkNVTCkKKworLyogTnVtYmVycyBmb3Igc29mdHdh
cmUgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1NHSQkJKDApCisj
ZGVmaW5lCUdJQ19MQVNUX1NHSQkJKDE1KQorLyogTnVtYmVycyBmb3IgcHJpdmF0ZSBwZXJpcGhl
cmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1BQSQkJKDE2KQorI2RlZmluZQlH
SUNfTEFTVF9QUEkJCSgzMSkKKy8qIE51bWJlcnMgZm9yIHNwYXJlZCBwZXJpcGhlcmFsIGludGVy
cnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1NQSQkJKDMyKQorI2RlZmluZQlHSUNfTEFTVF9T
UEkJCSgxMDE5KQorLyogTnVtYmVycyBmb3IgbG9jYWwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICov
CisjZGVmaW5lCUdJQ19GSVJTVF9MUEkJCSg4MTkyKQorCisvKgorICogUmVnaXN0ZXJzICh2Mi92
MykKKyAqLworI2RlZmluZQlHSUNEX0NUTFIJCSgweDAwMDApCisjZGVmaW5lCUdJQ0RfQ1RMUl9H
MQkJKDEgPDwgMCkKKyNkZWZpbmUJR0lDRF9DVExSX0cxQQkJKDEgPDwgMSkKKyNkZWZpbmUJR0lD
RF9DVExSX0FSRV9OUwkoMSA8PCA0KQorI2RlZmluZQlHSUNEX0NUTFJfUldQCQkoMSA8PCAzMSkK
KworI2RlZmluZQlHSUNEX1RZUEVSCQkoMHgwMDA0KQorI2RlZmluZQkJR0lDRF9UWVBFUl9JREJJ
VFMobikJKCgoKG4pID4+IDE5KSAmIDB4MUYpICsgMSkKKyNkZWZpbmUJCUdJQ0RfVFlQRVJfSV9O
VU0obikJKCgoKG4pICYgMHhGMSkgKyAxKSAqIDMyKQorCisjZGVmaW5lCUdJQ0RfSVNFTkFCTEVS
KG4pCSgweDAxMDAgKyAoKChuKSA+PiA1KSAqIDQpKQorI2RlZmluZQkJR0lDRF9JX1BFUl9JU0VO
QUJMRVJuCSgzMikKKworI2RlZmluZQlHSUNEX0lDRU5BQkxFUihuKQkoMHgwMTgwICsgKCgobikg
Pj4gNSkgKiA0KSkKKyNkZWZpbmUJR0lDRF9JUFJJT1JJVFlSKG4pCSgweDA0MDAgKyAoKChuKSA+
PiAyKSAqIDQpKQorI2RlZmluZQkJR0lDRF9JX1BFUl9JUFJJT1JJVFluCSg0KQorCisjZGVmaW5l
CUdJQ0RfSV9NQVNLKG4pCQkoMSA8PCAoKG4pICUgMzIpKQorCisjZGVmaW5lCUdJQ0RfSUNGR1Io
bikJCSgweDBDMDAgKyAoKChuKSA+PiA0KSAqIDQpKQorLyogRmlyc3QgYml0IGlzIGEgcG9sYXJp
dHkgYml0ICgwIC0gbG93LCAxIC0gaGlnaCkgKi8KKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0xP
VwkoMCA8PCAwKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9QT0xfSElHSAkoMSA8PCAwKQorI2RlZmlu
ZQkJR0lDRF9JQ0ZHUl9QT0xfTUFTSwkoMHgxKQorLyogU2Vjb25kIGJpdCBpcyBhIHRyaWdnZXIg
Yml0ICgwIC0gbGV2ZWwsIDEgLSBlZGdlKSAqLworI2RlZmluZQkJR0lDRF9JQ0ZHUl9UUklHX0xW
TAkoMCA8PCAxKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9UUklHX0VER0UJKDEgPDwgMSkKKyNkZWZp
bmUJCUdJQ0RfSUNGR1JfVFJJR19NQVNLCSgweDIpCisKKyNkZWZpbmUJCUdJQ0RfSV9QRVJfSUNG
R1JuCSgxNikKKworLyoKKyAqIFJlZ2lzdGVycyAodjMpCisgKi8KKyNkZWZpbmUJR0lDRF9JUk9V
VEVSKG4pCQkoMHg2MDAwICsgKChuKSAqIDgpKQorI2RlZmluZQlHSUNEX1BJRFIyCQkoMHhGRkU4
KQorCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9NQVNLCSgweEYwKQorI2RlZmluZQlHSUNSX1BJ
RFIyX0FSQ0hfR0lDdjMJKDB4MzApCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9HSUN2NAkoMHg0
MCkKKworLyogUmVkaXN0cmlidXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lDUl9QSURSMgkJ
R0lDRF9QSURSMgorCisjZGVmaW5lCUdJQ1JfVFlQRVIJCSgweDAwMDgpCisjZGVmaW5lCUdJQ1Jf
VFlQRVJfVkxQSVMJKDEgPDwgMSkKKyNkZWZpbmUJR0lDUl9UWVBFUl9MQVNUCQkoMSA8PCA0KQor
I2RlZmluZQlHSUNSX1RZUEVSX0FGRl9TSElGVAkoMzIpCisKKyNkZWZpbmUJR0lDUl9XQUtFUgkJ
KDB4MDAxNCkKKyNkZWZpbmUJR0lDUl9XQUtFUl9QUwkJKDEgPDwgMSkgLyogUHJvY2Vzc29yIHNs
ZWVwICovCisjZGVmaW5lCUdJQ1JfV0FLRVJfQ0EJCSgxIDw8IDIpIC8qIENoaWxkcmVuIGFzbGVl
cCAqLworCisvKiBSZS1kaXN0cmlidXRvciByZWdpc3RlcnMgZm9yIFNHSXMgYW5kIFBQSXMgKi8K
KyNkZWZpbmUJR0lDUl9SRF9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlHSUNSX1NH
SV9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlHSUNSX1ZMUElfQkFTRV9TSVpFCVBB
R0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9SRVNFUlZFRF9TSVpFCVBBR0VfU0laRV82NEsKKwor
I2RlZmluZQlHSUNSX0lTRU5BQkxFUjAJCQkJKDB4MDEwMCkKKyNkZWZpbmUJR0lDUl9JQ0VOQUJM
RVIwCQkJCSgweDAxODApCisjZGVmaW5lCQlHSUNSX0lfRU5BQkxFUl9TR0lfTUFTSwkJKDB4MDAw
MEZGRkYpCisjZGVmaW5lCQlHSUNSX0lfRU5BQkxFUl9QUElfTUFTSwkJKDB4RkZGRjAwMDApCisK
KyNkZWZpbmUJCUdJQ1JfSV9QRVJfSVBSSU9SSVRZbgkJKEdJQ0RfSV9QRVJfSVBSSU9SSVRZbikK
KworLyoKKyAqIENQVSBpbnRlcmZhY2UKKyAqLworCisvKgorICogUmVnaXN0ZXJzIGxpc3QgKElD
Q194eXpfRUwxKToKKyAqCisgKiBQTVIgICAgIC0gUHJpb3JpdHkgTWFzayBSZWdpc3RlcgorICoJ
CSogaW50ZXJydXB0cyBvZiBwcmlvcml0eSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQKKyAqCQkgIGlu
IHRoaXMgbWFzayB3aWxsIGJlIHNpZ25hbGxlZCB0byB0aGUgQ1BVLgorICoJCSAgKDB4ZmYgLSBs
b3dlc3QgcG9zc2libGUgcHJpby4sIDB4MDAgLSBoaWdoZXN0IHByaW8uKQorICoKKyAqIENUTFIg
ICAgLSBDb250cm9sIFJlZ2lzdGVyCisgKgkJKiBjb250cm9scyBiZWhhdmlvciBvZiB0aGUgQ1BV
IGludGVyZmFjZSBhbmQgZGlzcGxheXMKKyAqCQkgIGltcGxlbWVudGVkIGZlYXR1cmVzLgorICoK
KyAqIElHUlBFTjEgLSBJbnRlcnJ1cHQgR3JvdXAgMSBFbmFibGUgUmVnaXN0ZXIKKyAqCisgKiBJ
QVIxICAgIC0gSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIGNv
bnRhaW5zIG51bWJlciBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nCisgKgkJICBpbnRl
cnJ1cHQgZnJvbSB0aGUgR3JvdXAgMS4KKyAqCisgKiBFT0lSMSAgIC0gRW5kIG9mIEludGVycnVw
dCBSZWdpc3RlciBHcm91cCAxCisgKgkJKiBXcml0ZXMgaW5mb3JtIENQVSBpbnRlcmZhY2UgYWJv
dXQgY29tcGxldGVkIEdyb3VwIDEKKyAqCQkgIGludGVycnVwdHMgcHJvY2Vzc2luZy4KKyAqLwor
CisjZGVmaW5lCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJ
V1JJVEVfU1BFQ0lBTFJFRyhJQ0NfICMjcmVnICMjX0VMMSwgdmFsKTsJCVwKKwlpc2IoKTsJCQkJ
CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlnaWNfaWNjX3JlYWQocmVnKQkJCQkJXAorKHsJ
CQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCQkJCQkJCQlcCisJdmFsID0gUkVBRF9T
UEVDSUFMUkVHKElDQ18gIyNyZWcgIyNfRUwxKTsJCVwKKwkodmFsKTsJCQkJCQkJXAorfSkKKwor
I2RlZmluZQlnaWNfaWNjX3NldChyZWcsIG1hc2spCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWlu
dDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCB8
PSAobWFzayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxl
ICgwKQorCisjZGVmaW5lCWdpY19pY2NfY2xlYXIocmVnLCBtYXNrKQkJCQlcCitkbyB7CQkJCQkJ
CQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJ
XAorCXZhbCAmPSB+KG1hc2spOwkJCQkJCVwKKwlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKTsJCQkJ
XAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9HSUNfVjNfUkVHX0hfICovCmRpZmYgLS1naXQg
YS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19m
ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9h
cm02NC9naWNfdjNfZmR0LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0
aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJh
bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j
bHVkZSA8c3lzL21vZHVsZS5oPgorCisjaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29tbW9uLmg+Cisj
aW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5o
PgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRlICJwaWNfaWYu
aCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisK
Ky8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RhdGljIGludCBnaWNfdjNfZmR0X3Byb2JlKGRldmlj
ZV90KTsKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9hdHRhY2goZGV2aWNlX3QpOworCitzdGF0aWMg
ZGV2aWNlX21ldGhvZF90IGdpY192M19mZHRfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRl
cmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJZ2ljX3YzX2ZkdF9wcm9iZSksCisJ
REVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWdpY192M19mZHRfYXR0YWNoKSwKKworCS8qIEVuZCAq
LworCURFVk1FVEhPRF9FTkQKK307CisKK0RFRklORV9DTEFTU18xKGdpY192MywgZ2ljX3YzX2Zk
dF9kcml2ZXIsIGdpY192M19mZHRfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19z
b2Z0YyksIGdpY192M19kcml2ZXIpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBnaWNfdjNfZmR0X2Rl
dmNsYXNzOworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywgc2ltcGxlYnVzLCBnaWNfdjNf
ZmR0X2RyaXZlciwgZ2ljX3YzX2ZkdF9kZXZjbGFzcywKKyAgICAwLCAwLCBCVVNfUEFTU19JTlRF
UlJVUFQgKyBCVVNfUEFTU19PUkRFUl9NSURETEUpOworRUFSTFlfRFJJVkVSX01PRFVMRShnaWNf
djMsIG9md2J1cywgZ2ljX3YzX2ZkdF9kcml2ZXIsIGdpY192M19mZHRfZGV2Y2xhc3MsCisgICAg
MCwgMCwgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworLyoK
KyAqIERldmljZSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19mZHRfcHJvYmUo
ZGV2aWNlX3QgZGV2KQoreworCisJaWYgKG9md19idXNfc3RhdHVzX29rYXkoZGV2KSA9PSAwKQor
CQlyZXR1cm4gKEVOWElPKTsKKworCWlmIChvZndfYnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYXJt
LGdpYy12MyIpID09IDApCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2aWNlX3NldF9kZXNjKGRl
diwgR0lDX1YzX0RFVlNUUik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0
YXRpYyBpbnQKK2dpY192M19mZHRfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2lj
X3YzX3NvZnRjICpzYzsKKwlwY2VsbF90IHJlZGlzdF9yZWdpb25zOworCWludCBlcnI7CisKKwlz
YyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJLyoKKwkgKiBS
ZWNvdmVyIG51bWJlciBvZiB0aGUgUmUtRGlzdHJpYnV0b3IgcmVnaW9ucy4KKwkgKi8KKwlpZiAo
T0ZfZ2V0ZW5jcHJvcChvZndfYnVzX2dldF9ub2RlKGRldiksICIjcmVkaXN0cmlidXRvci1yZWdp
b25zIiwKKwkgICAgJnJlZGlzdF9yZWdpb25zLCBzaXplb2YocmVkaXN0X3JlZ2lvbnMpKSA8PSAw
KQorCQlzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgPSAxOworCWVsc2UKKwkJc2MtPmdpY19yZWRp
c3RzLm5yZWdpb25zID0gcmVkaXN0X3JlZ2lvbnM7CisKKwllcnIgPSBnaWNfdjNfYXR0YWNoKGRl
dik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAoZXJyKTsKKworZXJyb3I6
CisJaWYgKGJvb3R2ZXJib3NlICE9IDApIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsCisJCSAgICAi
RmFpbGVkIHRvIGF0dGFjaC4gRXJyb3IgJWRcbiIsIGVycik7CisJfQorCS8qIEZhaWx1cmUgc28g
ZnJlZSByZXNvdXJjZXMgKi8KKwlnaWNfdjNfZGV0YWNoKGRldik7CisKKwlyZXR1cm4gKGVycik7
Cit9CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMgYi9zeXMvYXJtNjQvYXJt
NjQvZ2ljX3YzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMv
YXJtNjQvYXJtNjQvZ2ljX3YzLmMKQEAgLTAsMCArMSw1ODAgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisg
KiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9w
YXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNp
bmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5
cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4u
aD4KKyNpbmNsdWRlIDxzeXMvcGNwdS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVk
ZSA8c3lzL2NwdXNldC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211
dGV4Lmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKyNpbmNs
dWRlICJwaWNfaWYuaCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNf
djNfdmFyLmgiCisKKy8qIERldmljZSBhbmQgUElDIG1ldGhvZHMgKi8KK3N0YXRpYyB2b2lkIGdp
Y192M19kaXNwYXRjaChkZXZpY2VfdCwgc3RydWN0IHRyYXBmcmFtZSAqKTsKK3N0YXRpYyB2b2lk
IGdpY192M19lb2koZGV2aWNlX3QsIHVfaW50KTsKK3N0YXRpYyB2b2lkIGdpY192M19tYXNrX2ly
cShkZXZpY2VfdCwgdV9pbnQpOworc3RhdGljIHZvaWQgZ2ljX3YzX3VubWFza19pcnEoZGV2aWNl
X3QsIHVfaW50KTsKKworc3RhdGljIGRldmljZV9tZXRob2RfdCBnaWNfdjNfbWV0aG9kc1tdID0g
eworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZ2lj
X3YzX2RldGFjaCksCisKKwkvKiBQSUMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKHBpY19kaXNw
YXRjaCwJCWdpY192M19kaXNwYXRjaCksCisJREVWTUVUSE9EKHBpY19lb2ksCQlnaWNfdjNfZW9p
KSwKKwlERVZNRVRIT0QocGljX21hc2ssCQlnaWNfdjNfbWFza19pcnEpLAorCURFVk1FVEhPRChw
aWNfdW5tYXNrLAkJZ2ljX3YzX3VubWFza19pcnEpLAorCisJLyogRW5kICovCisJREVWTUVUSE9E
X0VORAorfTsKKworREVGSU5FX0NMQVNTXzAoZ2ljX3YzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNf
bWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19zb2Z0YykpOworCisvKgorICogRHJp
dmVyLXNwZWNpZmljIGRlZmluaXRpb25zLgorICovCitNQUxMT0NfREVGSU5FKE1fR0lDX1YzLCAi
R0lDdjMiLCBHSUNfVjNfREVWU1RSKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgYW5kIGRl
ZmluaXRpb25zLgorICovCisvKiBEZXN0aW5hdGlvbiByZWdpc3RlcnMsIGVpdGhlciBEaXN0cmli
dXRvciBvciBSZS1EaXN0cmlidXRvciAqLworZW51bSBnaWNfdjNfeGRpc3QgeworCURJU1QgPSAw
LAorCVJFRElTVCwKK307CisKKy8qIEhlbHBlciByb3V0aW5lcyBzdGFydGluZyB3aXRoIGdpY192
M18gKi8KK3N0YXRpYyBpbnQgZ2ljX3YzX2Rpc3RfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICop
Oworc3RhdGljIGludCBnaWNfdjNfcmVkaXN0X2ZpbmQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsK
K3N0YXRpYyBpbnQgZ2ljX3YzX3JlZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7Citz
dGF0aWMgaW50IGdpY192M19jcHVfaW5pdChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGlj
IHZvaWQgZ2ljX3YzX3dhaXRfZm9yX3J3cChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICosIGVudW0gZ2lj
X3YzX3hkaXN0KTsKKworLyogQSBzZXF1ZW5jZSBvZiBpbml0IGZ1bmN0aW9ucyBmb3IgcHJpbWFy
eSAoYm9vdCkgQ1BVICovCit0eXBlZGVmIGludCAoKmdpY192M19pbml0c2VxX3QpIChzdHJ1Y3Qg
Z2ljX3YzX3NvZnRjICopOworLyogUHJpbWFyeSBDUFUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ug
Ki8KK3N0YXRpYyBnaWNfdjNfaW5pdHNlcV90IGdpY192M19wcmltYXJ5X2luaXRbXSA9IHsKKwln
aWNfdjNfZGlzdF9pbml0LAorCWdpY192M19yZWRpc3RfaW5pdCwKKwlnaWNfdjNfY3B1X2luaXQs
CisJTlVMTAorfTsKKworLyoKKyAqIERldmljZSBpbnRlcmZhY2UuCisgKi8KK2ludAorZ2ljX3Yz
X2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJZ2lj
X3YzX2luaXRzZXFfdCAqaW5pdF9mdW5jOworCXVpbnQzMl90IHR5cGVyOworCWludCByaWQ7CisJ
aW50IGVycjsKKwlzaXplX3QgaTsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNj
LT5naWNfcmVnaXN0ZXJlZCA9IEZBTFNFOworCXNjLT5kZXYgPSBkZXY7CisJZXJyID0gMDsKKwor
CS8qIEluaXRpYWxpemUgbXV0ZXggKi8KKwltdHhfaW5pdCgmc2MtPmdpY19tdHgsICJHSUN2MyBs
b2NrIiwgTlVMTCwgTVRYX1NQSU4pOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhcnJheSBvZiBzdHJ1
Y3QgcmVzb3VyY2UuCisJICogT25lIGVudHJ5IGZvciBEaXN0cmlidXRvciBhbmQgYWxsIHJlbWFp
bmluZyBmb3IgUmUtRGlzdHJpYnV0b3IuCisJICovCisJc2MtPmdpY19yZXMgPSBtYWxsb2MoCisJ
ICAgIHNpemVvZihzYy0+Z2ljX3JlcykgKiAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zICsgMSks
CisJICAgIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBOb3cgYWxsb2NhdGUgY29ycmVzcG9u
ZGluZyByZXNvdXJjZXMgKi8KKwlmb3IgKGkgPSAwLCByaWQgPSAwOyBpIDwgKHNjLT5naWNfcmVk
aXN0cy5ucmVnaW9ucyArIDEpOyBpKyssIHJpZCsrKSB7CisJCXNjLT5naWNfcmVzW3JpZF0gPSBi
dXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJCSAgICAmcmlkLCBS
Rl9BQ1RJVkUpOworCQlpZiAoc2MtPmdpY19yZXNbcmlkXSA9PSBOVUxMKQorCQkJcmV0dXJuIChF
TlhJTyk7CisJfQorCisJLyoKKwkgKiBEaXN0cmlidXRvciBpbnRlcmZhY2UKKwkgKi8KKwlzYy0+
Z2ljX2Rpc3QgPSBzYy0+Z2ljX3Jlc1swXTsKKworCS8qCisJICogUmUtRHJpc3RyaWJ1dG9yIGlu
dGVyZmFjZQorCSAqLworCS8qIEFsbG9jYXRlIHNwYWNlIHVuZGVyIHJlZ2lvbiBkZXNjcmlwdGlv
bnMgKi8KKwlzYy0+Z2ljX3JlZGlzdHMucmVnaW9ucyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKCpz
Yy0+Z2ljX3JlZGlzdHMucmVnaW9ucykgKiBzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMsCisJICAg
IE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwkvKiBGaWxsLXVwIGJ1c19zcGFjZSBpbmZvcm1hdGlv
biBmb3IgZWFjaCByZWdpb24uICovCisJZm9yIChpID0gMCwgcmlkID0gMTsgaSA8IHNjLT5naWNf
cmVkaXN0cy5ucmVnaW9uczsgaSsrLCByaWQrKykKKwkJc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnNb
aV0gPSBzYy0+Z2ljX3Jlc1tyaWRdOworCisJLyogR2V0IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVk
IFNQSSBpbnRlcnJ1cHRzICovCisJdHlwZXIgPSBnaWNfZF9yZWFkKHNjLCA0LCBHSUNEX1RZUEVS
KTsKKwlzYy0+Z2ljX25pcnFzID0gR0lDRF9UWVBFUl9JX05VTSh0eXBlcik7CisJaWYgKHNjLT5n
aWNfbmlycXMgPiBHSUNfSV9OVU1fTUFYKQorCQlzYy0+Z2ljX25pcnFzID0gR0lDX0lfTlVNX01B
WDsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBpbnRlcnJ1cHQgaWRlbnRpZmll
ciBiaXRzICovCisJc2MtPmdpY19pZGJpdHMgPSBHSUNEX1RZUEVSX0lEQklUUyh0eXBlcik7CisK
KwlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTUElzOiAldSwgSURz
OiAldVxuIiwKKwkJICAgIHNjLT5naWNfbmlycXMsICgxIDw8IHNjLT5naWNfaWRiaXRzKSAtIDEp
OworCX0KKworCS8qIFRyYWluIGluaXQgc2VxdWVuY2UgZm9yIGJvb3QgQ1BVICovCisJZm9yIChp
bml0X2Z1bmMgPSBnaWNfdjNfcHJpbWFyeV9pbml0OyAqaW5pdF9mdW5jICE9IE5VTEw7IGluaXRf
ZnVuYysrKSB7CisJCWVyciA9ICgqaW5pdF9mdW5jKShzYyk7CisJCWlmIChlcnIgIT0gMCkKKwkJ
CXJldHVybiAoZXJyKTsKKwl9CisJLyoKKwkgKiBGdWxsIHN1Y2Nlc3MuCisJICogTm93IHJlZ2lz
dGVyIFBJQyB0byB0aGUgaW50ZXJydXB0cyBoYW5kbGluZyBsYXllci4KKwkgKi8KKwlhcm1fcmVn
aXN0ZXJfcm9vdF9waWMoZGV2LCBzYy0+Z2ljX25pcnFzKTsKKwlzYy0+Z2ljX3JlZ2lzdGVyZWQg
PSBUUlVFOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitnaWNfdjNfZGV0YWNoKGRldmljZV90
IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlzaXplX3QgaTsKKwlpbnQgcmlk
OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAoZGV2aWNlX2lzX2F0dGFj
aGVkKGRldikpIHsKKwkJLyoKKwkJICogWFhYOiBXZSBzaG91bGQgcHJvYmFibHkgZGVyZWdpc3Rl
ciBQSUMKKwkJICovCisJCWlmIChzYy0+Z2ljX3JlZ2lzdGVyZWQpCisJCQlwYW5pYygiVHJ5aW5n
IHRvIGRldGFjaCByZWdpc3RlcmVkIFBJQyIpOworCX0KKwlmb3IgKHJpZCA9IDA7IHJpZCA8IChz
Yy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKTsgcmlkKyspCisJCWJ1c19yZWxlYXNlX3Jlc291
cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIHJpZCwgc2MtPmdpY19yZXNbcmlkXSk7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgTUFYQ1BVOyBpKyspCisJCWZyZWUoc2MtPmdpY19yZWRpc3RzLnBjcHVbaV0s
IE1fR0lDX1YzKTsKKworCWZyZWUoc2MtPmdpY19yZXMsIE1fR0lDX1YzKTsKKwlmcmVlKHNjLT5n
aWNfcmVkaXN0cy5yZWdpb25zLCBNX0dJQ19WMyk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgor
ICogUElDIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQKK2dpY192M19kaXNwYXRjaChkZXZp
Y2VfdCBkZXYsIHN0cnVjdCB0cmFwZnJhbWUgKmZyYW1lKQoreworCXVpbnQ2NF90IGFjdGl2ZV9p
cnE7CisKKwl3aGlsZSAoMSkgeworCQlhY3RpdmVfaXJxID0gZ2ljX2ljY19yZWFkKElBUjEpOwor
CisJCWlmIChfX3ByZWRpY3RfZmFsc2UoYWN0aXZlX2lycSA9PSBJQ0NfSUFSMV9FTDFfU1BVUikp
CisJCQlicmVhazsKKworCQlpZiAoX19wcmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lDX0ZJ
UlNUX1BQSSAmJgorCQkgICAgYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkJYXJt
X2Rpc3BhdGNoX2ludHIoYWN0aXZlX2lycSwgZnJhbWUpOworCQkJY29udGludWU7CisJCX0KKwor
CQlpZiAoYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TR0kgfHwgYWN0aXZlX2lycSA+PSBHSUNfRklS
U1RfTFBJKSB7CisJCQkvKgorCQkJICogVE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kvTFBJIGhh
bmRsaW5nLgorCQkJICogICAgICAgTWFzayBpdCBpZiBzdWNoIGlzIHJlY2VpdmVkIGZvciBzb21l
IHJlYXNvbi4KKwkJCSAqLworCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIlJlY2VpdmVk
IHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiAlc1xuIiwKKwkJCSAgICBhY3RpdmVfaXJxID49
IEdJQ19GSVJTVF9MUEkgPyAiTFBJIiA6ICJTR0kiKTsKKwkJCVBJQ19NQVNLKGRldiwgYWN0aXZl
X2lycSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitnaWNfdjNfZW9pKGRldmljZV90IGRl
diwgdV9pbnQgaXJxKQoreworCisJZ2ljX2ljY193cml0ZShFT0lSMSwgKHVpbnQ2NF90KWlycSk7
Cit9CisKK3N0YXRpYyB2b2lkCitnaWNfdjNfbWFza19pcnEoZGV2aWNlX3QgZGV2LCB1X2ludCBp
cnEpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKworCWlmIChpcnEgPj0gR0lDX0ZJUlNUX1BQSSAmJiBpcnEgPD0gR0lDX0xBU1Rf
UFBJKSB7IC8qIFBQSXMgaW4gY29ycmVzcG9uZGluZyBSZS1EaXN0cmlidXRvciAqLworCQlnaWNf
cl93cml0ZShzYywgNCwKKwkJICAgIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ0RfSUNFTkFCTEVS
KGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBSRURJ
U1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19MQVNU
X1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LCBH
SUNEX0lDRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRfZm9y
X3J3cChzYywgRElTVCk7CisJfSBlbHNlCisJCXBhbmljKCIlczogVW5zdXBwb3J0ZWQgSVJRIG51
bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOworfQorCitzdGF0aWMgdm9pZAorZ2ljX3YzX3VubWFz
a19pcnEoZGV2aWNlX3QgZGV2LCB1X2ludCBpcnEpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAq
c2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChpcnEgPj0gR0lDX0ZJ
UlNUX1BQSSAmJiBpcnEgPD0gR0lDX0xBU1RfUFBJKSB7IC8qIFBQSXMgaW4gY29ycmVzcG9uZGlu
ZyBSZS1EaXN0cmlidXRvciAqLworCQlnaWNfcl93cml0ZShzYywgNCwKKwkJICAgIEdJQ1JfU0dJ
X0JBU0VfU0laRSArIEdJQ0RfSVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQln
aWNfdjNfd2FpdF9mb3JfcndwKHNjLCBSRURJU1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19G
SVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9y
ICovCisJCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFT
SyhpcnEpKTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlCisJCXBh
bmljKCIlczogVW5zdXBwb3J0ZWQgSVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOworfQor
CisvKgorICogSGVscGVyIHJvdXRpbmVzCisgKi8KK3N0YXRpYyB2b2lkCitnaWNfdjNfd2FpdF9m
b3JfcndwKHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjLCBlbnVtIGdpY192M194ZGlzdCB4ZGlzdCkK
K3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1X2ludCBjcHVpZDsKKwlzaXplX3QgdXNfbGVm
dCA9IDEwMDAwMDA7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCXN3aXRjaCAoeGRp
c3QpIHsKKwljYXNlIERJU1Q6CisJCXJlcyA9IHNjLT5naWNfZGlzdDsKKwkJYnJlYWs7CisJY2Fz
ZSBSRURJU1Q6CisJCXJlcyA9IHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXTsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJS0FTU0VSVCgwLCAoIiVzOiBBdHRlbXB0IHRvIHdhaXQgZm9yIHVua25v
d24gUldQIiwgX19mdW5jX18pKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoYnVzX3JlYWRf
NChyZXMsIEdJQ0RfQ1RMUikgJiBHSUNEX0NUTFJfUldQKSAhPSAwKSB7CisJCURFTEFZKDEpOwor
CQlpZiAodXNfbGVmdC0tID09IDApCisJCQlwYW5pYygiR0lDRCBSZWdpc3RlciB3cml0ZSBwZW5k
aW5nIGZvciB0b28gbG9uZyIpOworCX0KK30KKworLyogQ1BVIGludGVyZmFjZS4gKi8KK3N0YXRp
YyBfX2lubGluZSB2b2lkCitnaWNfdjNfY3B1X3ByaW9yaXR5KHVpbnQ2NF90IG1hc2spCit7CisK
KwkvKiBTZXQgcHJvcml0eSBtYXNrICovCisJZ2ljX2ljY193cml0ZShQTVIsIG1hc2sgJiBJQ0Nf
UE1SX0VMMV9QUklPX01BU0spOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfY3B1X2VuYWJsZV9z
cmUoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJdWludDY0X3Qgc3JlOworCXVfaW50IGNw
dWlkOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisJLyoKKwkgKiBTZXQgdGhlIFNSRSBi
aXQgdG8gZW5hYmxlIGFjY2VzcyB0byBHSUMgQ1BVIGludGVyZmFjZQorCSAqIHZpYSBzeXN0ZW0g
cmVnaXN0ZXJzLgorCSAqLworCXNyZSA9IFJFQURfU1BFQ0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJ
c3JlIHw9IElDQ19TUkVfRUwxX1NSRTsKKwlXUklURV9TUEVDSUFMUkVHKGljY19zcmVfZWwxLCBz
cmUpOworCWlzYigpOworCS8qCisJICogTm93IGVuc3VyZSB0aGF0IHRoZSBiaXQgaXMgc2V0Lgor
CSAqLworCXNyZSA9IFJFQURfU1BFQ0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJaWYgKChzcmUgJiBJ
Q0NfU1JFX0VMMV9TUkUpID09IDApIHsKKwkJLyogV2UgYXJlIGRvbmUuIFRoaXMgd2FzIGRpc2Fi
bGVkIGluIEVMMiAqLworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJFUlJPUjogQ1BVJXUgY2Fu
bm90IGVuYWJsZSBDUFUgaW50ZXJmYWNlICIKKwkJICAgICJ2aWEgc3lzdGVtIHJlZ2lzdGVyc1xu
IiwgY3B1aWQpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9IGVsc2UgaWYgKGJvb3R2ZXJib3NlICE9
IDApIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkgICAgIkNQVSV1IGVuYWJsZWQgQ1BV
IGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVyc1xuIiwKKwkJICAgIGNwdWlkKTsKKwl9CisK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfY3B1X2luaXQoc3RydWN0IGdp
Y192M19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsKKworCS8qIEVuYWJsZSBhY2Nlc3MgdG8gQ1BV
IGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVycyAqLworCWVyciA9IGdpY192M19jcHVfZW5h
YmxlX3NyZShzYyk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gKGVycik7CisJLyogUHJpb3Jp
dHkgbWFzayB0byBtaW5pbXVtIC0gYWNjZXB0IGFsbCBpbnRlcnJ1cHRzICovCisJZ2ljX3YzX2Nw
dV9wcmlvcml0eShHSUNfUFJJT1JJVFlfTUlOKTsKKwkvKiBEaXNhYmxlIEVPSSBtb2RlICovCisJ
Z2ljX2ljY19jbGVhcihDVExSLCBJQ0NfQ1RMUl9FTDFfRU9JTU9ERSk7CisJLyogRW5hYmxlIGdy
b3VwIDEgKGluc2VjdXJlKSBpbnRlcnJ1cHMgKi8KKwlnaWNfaWNjX3NldChJR1JQRU4xLCBJQ0Nf
SUdSUEVOMF9FTDFfRU4pOworCisJcmV0dXJuICgwKTsKK30KKworLyogRGlzdHJpYnV0b3IgKi8K
K3N0YXRpYyBpbnQKK2dpY192M19kaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7
CisJdWludDY0X3QgYWZmOworCXVfaW50IGk7CisKKwkvKgorCSAqIDEuIERpc2FibGUgdGhlIERp
c3RyaWJ1dG9yCisJICovCisJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfQ1RMUiwgMCk7CisJZ2lj
X3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAqIDIuIENvbmZpZ3VyZSB0aGUg
RGlzdHJpYnV0b3IKKwkgKi8KKwkvKiBTZXQgYWxsIGdsb2JhbCBpbnRlcnJ1cHRzIHRvIGJlIGxl
dmVsIHRyaWdnZXJlZCwgYWN0aXZlIGxvdy4gKi8KKwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBp
IDwgc2MtPmdpY19uaXJxczsgaSArPSBHSUNEX0lfUEVSX0lDRkdSbikKKwkJZ2ljX2Rfd3JpdGUo
c2MsIDQsIEdJQ0RfSUNGR1IoaSksIDB4MDAwMDAwMDApOworCisJLyogU2V0IHByaW9yaXR5IHRv
IGFsbCBzaGFyZWQgaW50ZXJydXB0cyAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7CisJICAg
IGkgPCBzYy0+Z2ljX25pcnFzOyBpICs9IEdJQ0RfSV9QRVJfSVBSSU9SSVRZbikgeworCQkvKiBT
ZXQgaGlnaGVzdCBwcmlvcml0eSAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JUFJJT1JJ
VFlSKGkpLCBHSUNfUFJJT1JJVFlfTUFYKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUgYWxsIGlu
dGVycnVwdHMuIExlYXZlIFBQSSBhbmQgU0dJcyBhcyB0aGV5IGFyZSBlbmFibGVkIGluCisJICog
UmUtRGlzdHJpYnV0b3IgcmVnaXN0ZXJzLgorCSAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7
IGkgPCBzYy0+Z2ljX25pcnFzOyBpICs9IEdJQ0RfSV9QRVJfSVNFTkFCTEVSbikKKwkJZ2ljX2Rf
d3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVSKGkpLCAweEZGRkZGRkZGKTsKKworCWdpY192M193
YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCisJLyoKKwkgKiAzLiBFbmFibGUgRGlzdHJpYnV0b3IK
KwkgKi8KKwkvKiBFbmFibGUgRGlzdHJpYnV0b3Igd2l0aCBBUkUsIEdyb3VwIDEgKi8KKwlnaWNf
ZF93cml0ZShzYywgNCwgR0lDRF9DVExSLCBHSUNEX0NUTFJfQVJFX05TIHwgR0lDRF9DVExSX0cx
QSB8CisJICAgIEdJQ0RfQ1RMUl9HMSk7CisKKwkvKgorCSAqIDQuIFJvdXRlIGFsbCBpbnRlcnJ1
cHRzIHRvIGJvb3QgQ1BVLgorCSAqLworCWFmZiA9IENQVV9BRkZJTklUWShQQ1BVX0dFVChjcHVp
ZCkpOworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFzOyBpKyspCisJ
CWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0lST1VURVIoaSksIGFmZik7CisKKwlyZXR1cm4gKDAp
OworfQorCisvKiBSZS1EaXN0cmlidXRvciAqLworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF9m
aW5kKHN0cnVjdCBnaWNfdjNfc29mdGMgKnNjKQoreworCXN0cnVjdCByZXNvdXJjZSByX3JlczsK
KwlidXNfc3BhY2VfaGFuZGxlX3Qgcl9ic2g7CisJdWludDY0X3QgYWZmOworCXVpbnQ2NF90IHR5
cGVyOworCXVpbnQzMl90IHBpZHIyOworCXVfaW50IGNwdWlkOworCXNpemVfdCBpOworCisJY3B1
aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcmVzb3VyY2UgZm9y
IHRoaXMgQ1BVJ3MgUmUtRGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisJc2MtPmdpY19yZWRpc3Rz
LnBjcHVbY3B1aWRdID0KKwkgICAgbWFsbG9jKHNpemVvZigqc2MtPmdpY19yZWRpc3RzLnBjcHVb
MF0pLCBNX0dJQ19WMywgTV9XQUlUT0spOworCisJYWZmID0gQ1BVX0FGRklOSVRZKGNwdWlkKTsK
KwkvKiBBZmZpbml0eSBpbiBmb3JtYXQgZm9yIGNvbXBhcmlzb24gd2l0aCB0eXBlciAqLworCWFm
ZiA9IChDUFVfQUZGMyhhZmYpIDw8IDI0KSB8IChDUFVfQUZGMihhZmYpIDw8IDE2KSB8CisJICAg
IChDUFVfQUZGMShhZmYpIDw8IDgpIHwgQ1BVX0FGRjAoYWZmKTsKKworCWlmIChib290dmVyYm9z
ZSAhPSAwKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJICAgICJTdGFydCBzZWFyY2hp
bmcgZm9yIFJlLURpc3RyaWJ1dG9yXG4iKTsKKwl9CisJLyogSXRlcmF0ZSB0aHJvdWdoIFJlLURp
c3RyaWJ1dG9yIHJlZ2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmdpY19yZWRpc3RzLm5y
ZWdpb25zOyBpKyspIHsKKwkJLyogVGFrZSBhIGNvcHkgb2YgdGhlIHJlZ2lvbidzIHJlc291cmNl
ICovCisJCXJfcmVzID0gKnNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ldOworCQlyX2JzaCA9IHJt
YW5fZ2V0X2J1c2hhbmRsZSgmcl9yZXMpOworCisJCXBpZHIyID0gYnVzX3JlYWRfNCgmcl9yZXMs
IEdJQ1JfUElEUjIpOworCQlzd2l0Y2ggKHBpZHIyICYgR0lDUl9QSURSMl9BUkNIX01BU0spIHsK
KwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjM6IC8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNl
IEdJQ1JfUElEUjJfQVJDSF9HSUN2NDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2aWNl
X3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJObyBSZS1EaXN0cmlidXRvciBmb3VuZCBmb3IgQ1BV
JXVcbiIsIGNwdWlkKTsKKwkJCWZyZWUoc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdLCBNX0dJ
Q19WMyk7CisJCQlyZXR1cm4gKEVOT0RFVik7CisJCX0KKworCQlkbyB7CisJCQl0eXBlciA9IGJ1
c19yZWFkXzgoJnJfcmVzLCBHSUNSX1RZUEVSKTsKKwkJCWlmICgodHlwZXIgPj4gR0lDUl9UWVBF
Ul9BRkZfU0hJRlQpID09IGFmZikgeworCQkJCUtBU1NFUlQoc2MtPmdpY19yZWRpc3RzLnBjcHVb
Y3B1aWRdICE9IE5VTEwsCisJCQkJICAgICgiSW52YWxpZCBwb2ludGVyIHRvIHBlci1DUFUgcmVk
aXN0cmlidXRvciIpKTsKKwkJCQkvKiBDb3B5IHJlcyBjb250ZW50cyB0byBpdHMgZmluYWwgZGVz
dGluYXRpb24gKi8KKwkJCQkqc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdID0gcl9yZXM7CisJ
CQkJaWYgKGJvb3R2ZXJib3NlICE9IDApIHsKKwkJCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAor
CQkJCQkgICAgIkNQVSV1IFJlLURpc3RyaWJ1dG9yIGhhcyBiZWVuIGZvdW5kXG4iLAorCQkJCQkg
ICAgY3B1aWQpOworCQkJCX0KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCisJCQlyX2JzaCArPSAo
R0lDUl9SRF9CQVNFX1NJWkUgKyBHSUNSX1NHSV9CQVNFX1NJWkUpOworCQkJaWYgKCh0eXBlciAm
IEdJQ1JfVFlQRVJfVkxQSVMpICE9IDApIHsKKwkJCQlyX2JzaCArPQorCQkJCSAgICAoR0lDUl9W
TFBJX0JBU0VfU0laRSArIEdJQ1JfUkVTRVJWRURfU0laRSk7CisJCQl9CisKKwkJCXJtYW5fc2V0
X2J1c2hhbmRsZSgmcl9yZXMsIHJfYnNoKTsKKwkJfSB3aGlsZSAoKHR5cGVyICYgR0lDUl9UWVBF
Ul9MQVNUKSA9PSAwKTsKKwl9CisKKwlmcmVlKHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSwg
TV9HSUNfVjMpOworCWRldmljZV9wcmludGYoc2MtPmRldiwgIk5vIFJlLURpc3RyaWJ1dG9yIGZv
dW5kIGZvciBDUFUldVxuIiwgY3B1aWQpOworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMg
aW50CitnaWNfdjNfcmVkaXN0X3dha2Uoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJdWlu
dDMyX3Qgd2FrZXI7CisJc2l6ZV90IHVzX2xlZnQgPSAxMDAwMDAwOworCisJd2FrZXIgPSBnaWNf
cl9yZWFkKHNjLCA0LCBHSUNSX1dBS0VSKTsKKwkvKiBXYWtlIHVwIFJlLURpc3RyaWJ1dG9yIGZv
ciB0aGlzIENQVSAqLworCXdha2VyICY9IH5HSUNSX1dBS0VSX1BTOworCWdpY19yX3dyaXRlKHNj
LCA0LCBHSUNSX1dBS0VSLCB3YWtlcik7CisJLyoKKwkgKiBXaGVuIGNsZWFyaW5nIFByb2Nlc3Nv
clNsZWVwIGJpdCBpdCBpcyByZXF1aXJlZCB0byB3YWl0IGZvcgorCSAqIENoaWxkcmVuQXNsZWVw
IHRvIGJlY29tZSB6ZXJvIGZvbGxvd2luZyB0aGUgcHJvY2Vzc29yIHBvd2VyLW9uLgorCSAqLwor
CXdoaWxlICgoZ2ljX3JfcmVhZChzYywgNCwgR0lDUl9XQUtFUikgJiBHSUNSX1dBS0VSX0NBKSAh
PSAwKSB7CisJCURFTEFZKDEpOworCQlpZiAodXNfbGVmdC0tID09IDApIHsKKwkJCXBhbmljKCJD
b3VsZCBub3Qgd2FrZSBSZS1EaXN0cmlidXRvciBmb3IgQ1BVJXUiLAorCQkJICAgIFBDUFVfR0VU
KGNwdWlkKSk7CisJCX0KKwl9CisKKwlpZiAoYm9vdHZlcmJvc2UgIT0gMCkgeworCQlkZXZpY2Vf
cHJpbnRmKHNjLT5kZXYsICJDUFUldSBSZS1EaXN0cmlidXRvciB3b2tlIHVwXG4iLAorCQkgICAg
UENQVV9HRVQoY3B1aWQpKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Citn
aWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsK
KwlzaXplX3QgaTsKKworCWVyciA9IGdpY192M19yZWRpc3RfZmluZChzYyk7CisJaWYgKGVyciAh
PSAwKQorCQlyZXR1cm4gKGVycik7CisKKwllcnIgPSBnaWNfdjNfcmVkaXN0X3dha2Uoc2MpOwor
CWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIChlcnIpOworCisJLyogRGlzYWJsZSBTUElzICovCisJ
Z2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ1JfSUNFTkFCTEVSMCwK
KwkgICAgR0lDUl9JX0VOQUJMRVJfUFBJX01BU0spOworCS8qIEVuYWJsZSBTR0lzICovCisJZ2lj
X3Jfd3JpdGUoc2MsIDQsIEdJQ1JfU0dJX0JBU0VfU0laRSArIEdJQ1JfSVNFTkFCTEVSMCwKKwkg
ICAgR0lDUl9JX0VOQUJMRVJfU0dJX01BU0spOworCisJLyogU2V0IHByaW9yaXR5IGZvciBTR0lz
IGFuZCBQUElzICovCisJZm9yIChpID0gMDsgaSA8PSBHSUNfTEFTVF9QUEk7IGkgKz0gR0lDUl9J
X1BFUl9JUFJJT1JJVFluKSB7CisJCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJ
WkUgKyBHSUNEX0lQUklPUklUWVIoaSksCisJCSAgICBHSUNfUFJJT1JJVFlfTUFYKTsKKwl9CisK
KwlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBSRURJU1QpOworCisJcmV0dXJuICgwKTsKK30KCg==


--b1_ef7558bf87cdf32496a347c12801e0cd--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ef7558bf87cdf32496a347c12801e0cd>