Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jul 2007 13:55:31 -0700
From:      Eric Anholt <eric@anholt.net>
To:        re@freebsd.org, current@freebsd.org
Subject:   request for approval: G965 AGP support
Message-ID:  <1184273731.44469.16.camel@vonnegut>

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

--=-AXWcD71UA0EuCnCMobb0
Content-Type: multipart/mixed; boundary="=-5YELsow3Fpr9UE+T3E/E"


--=-5YELsow3Fpr9UE+T3E/E
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

I think I've finally got my G965 AGP support ready to commit.  I've
tested on the GM965 and in a previous version the 915GM, and with kib@'s
DRM fix things are looking good.  Proposed commit message:

Add support for G965/Q965/GM965/GME965/GME945 AGP.

This adds a function to agp.c to set the aperture resource ID if it's
not the usual AGP_APBASE.  Previously, agp.c had been assuming
AGP_APBASE, which resulted in incorrect agp_info, and contortions by
agp_i810.c to work around it.

Also, add functions to agp.c for default AGP_GET_APERTURE() and
AGP_SET_APERTURE(), which return the aperture resource size and disallow
aperture size changes.  Moving to these for our AGP drivers will likely
result in stability improvements.  This should fix 855-class aperture
size detection.

Additionally, refuse to attach agp_i810 when some RAM is above 4GB and
the GART can't reference memory that high.  This should be very rare.
The correct solution would be bus_dma conversion for agp, which is
beyond the scope of this change.  Other AGP drivers could likely use
this change as well.

G33/Q35/Q33 AGP support is also included, but disconnected by default
due to lack of testing.

PR:		kern/109724 (855 aperture issue)
Submitted by:	FUJIMOTO Kou<fujimoto@j.dendai.ac.jp>

--=20
Eric Anholt                             anholt@FreeBSD.org
eric@anholt.net                         eric.anholt@intel.com


--=-5YELsow3Fpr9UE+T3E/E
Content-Disposition: attachment; filename=agp-i965-6.diff
Content-Type: text/x-patch; name=agp-i965-6.diff; charset=UTF-8
Content-Transfer-Encoding: base64

SW5kZXg6IGFncC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL3Bj
aS9hZ3AuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTUNCmRpZmYgLXUgLXIxLjU1IGFncC5j
DQotLS0gYWdwLmMJMjIgT2N0IDIwMDYgMjE6MTg6NDggLTAwMDAJMS41NQ0KKysrIGFncC5jCTEy
IEp1bCAyMDA3IDE4OjE1OjQ2IC0wMDAwDQpAQCAtMTkzLDE4ICsxOTMsMzYgQEANCiB9Ow0KICNk
ZWZpbmUgYWdwX21heF9zaXplCShzaXplb2YoYWdwX21heCkgLyBzaXplb2YoYWdwX21heFswXSkp
DQogDQorLyoqDQorICogU2V0cyB0aGUgUENJIHJlc291cmNlIHdoaWNoIHJlcHJlc2VudHMgdGhl
IEFHUCBhcGVydHVyZS4NCisgKg0KKyAqIElmIG5vdCBjYWxsZWQsIHRoZSBkZWZhdWx0IEFHUCBh
cGVydHVyZSBiYXNlIHJlc291cmNlIG9mIEFHUF9BUEJBU0Ugd2lsbA0KKyAqIGJlIHVzZWQuICBN
dXN0IGJlIGNhbGxlZCBiZWZvcmUgYWdwX2dlbmVyaWNfYXR0YWNoKCkuDQorICovDQordm9pZA0K
K2FncF9zZXRfYXBlcnR1cmVfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBpbnQgcmlkKQ0KK3sNCisJ
c3RydWN0IGFncF9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7DQorDQorCXNjLT5h
c19hcGVydHVyZV9yaWQgPSByaWQ7DQorfQ0KKw0KIGludA0KIGFncF9nZW5lcmljX2F0dGFjaChk
ZXZpY2VfdCBkZXYpDQogew0KIAlzdHJ1Y3QgYWdwX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsNCi0JaW50IHJpZCwgaTsNCisJaW50IGk7DQogCXVfaW50IG1lbXNpemU7DQogDQog
CS8qDQotCSAqIEZpbmQgYW5kIG1hcCB0aGUgYXBlcnR1cmUuDQorCSAqIEZpbmQgYW5kIG1hcCB0
aGUgYXBlcnR1cmUsIFJGX1NIQVJFQUJMRSBmb3IgRFJNIGJ1dCBub3QgUkZfQUNUSVZFDQorCSAq
IGJlY2F1c2UgdGhlIGtlcm5lbCBkb2Vzbid0IG5lZWQgdG8gbWFwIGl0Lg0KIAkgKi8NCi0Jcmlk
ID0gQUdQX0FQQkFTRTsNCi0Jc2MtPmFzX2FwZXJ0dXJlID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu
eShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLCAwKTsNCisJaWYgKHNjLT5hc19hcGVydHVyZV9y
aWQgPT0gMCkNCisJCXNjLT5hc19hcGVydHVyZV9yaWQgPSBBR1BfQVBCQVNFOw0KKw0KKwlzYy0+
YXNfYXBlcnR1cmUgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlks
DQorCSAgICAmc2MtPmFzX2FwZXJ0dXJlX3JpZCwgUkZfU0hBUkVBQkxFKTsNCiAJaWYgKCFzYy0+
YXNfYXBlcnR1cmUpDQogCQlyZXR1cm4gRU5PTUVNOw0KIA0KQEAgLTI0OSwxMiArMjY3LDQxIEBA
DQogCXN0cnVjdCBhZ3Bfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOw0KIA0KIAlk
ZXN0cm95X2RldihzYy0+YXNfZGV2bm9kZSk7DQotCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg
U1lTX1JFU19NRU1PUlksIEFHUF9BUEJBU0UsIHNjLT5hc19hcGVydHVyZSk7DQorCWJ1c19yZWxl
YXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIHNjLT5hc19hcGVydHVyZV9yaWQsDQor
CSAgICBzYy0+YXNfYXBlcnR1cmUpOw0KIAltdHhfZGVzdHJveSgmc2MtPmFzX2xvY2spOw0KIAlh
Z3BfZmx1c2hfY2FjaGUoKTsNCiAJcmV0dXJuIDA7DQogfQ0KIA0KKy8qKg0KKyAqIERlZmF1bHQg
QUdQIGFwZXJ0dXJlIHNpemUgZGV0ZWN0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBzaXpl
IG9mDQorICogdGhlIGFwZXJ0dXJlJ3MgUENJIHJlc291cmNlLg0KKyAqLw0KK2ludA0KK2FncF9n
ZW5lcmljX2dldF9hcGVydHVyZShkZXZpY2VfdCBkZXYpDQorew0KKwlzdHJ1Y3QgYWdwX3NvZnRj
ICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsNCisNCisJcmV0dXJuIHJtYW5fZ2V0X3NpemUo
c2MtPmFzX2FwZXJ0dXJlKTsNCit9DQorDQorLyoqDQorICogRGVmYXVsdCBBR1AgYXBlcnR1cmUg
c2l6ZSBzZXR0aW5nIGZ1bmN0aW9uLCB3aGljaCBzaW1wbHkgZG9lc24ndCBhbGxvdw0KKyAqIGNo
YW5nZXMgdG8gcmVzb3VyY2Ugc2l6ZS4NCisgKi8NCitpbnQNCithZ3BfZ2VuZXJpY19zZXRfYXBl
cnR1cmUoZGV2aWNlX3QgZGV2LCB1X2ludDMyX3QgYXBlcnR1cmUpDQorew0KKwl1X2ludDMyX3Qg
Y3VycmVudF9hcGVydHVyZTsNCisNCisJY3VycmVudF9hcGVydHVyZSA9IEFHUF9HRVRfQVBFUlRV
UkUoZGV2KTsNCisJaWYgKGN1cnJlbnRfYXBlcnR1cmUgIT0gYXBlcnR1cmUpDQorCQlyZXR1cm4g
RUlOVkFMOw0KKwllbHNlDQorCQlyZXR1cm4gMDsNCit9DQorDQogLyoNCiAgKiBUaGlzIGRvZXMg
dGhlIGVuYWJsZSBsb2dpYyBmb3IgdjMsIHdpdGggdGhlIHNhbWUgdG9wb2xvZ3kNCiAgKiByZXN0
cmljdGlvbnMgYXMgaW4gcGxhY2UgZm9yIHYyIC0tIG9uZSBidXMsIG9uZSBkZXZpY2Ugb24gdGhl
IGJ1cy4NCkluZGV4OiBhZ3BfaTgxMC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2
cy9zcmMvc3lzL3BjaS9hZ3BfaTgxMC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQ0KZGlm
ZiAtdSAtcjEuMzkgYWdwX2k4MTAuYw0KLS0tIGFncF9pODEwLmMJMjcgU2VwIDIwMDYgMDY6Mzg6
NTQgLTAwMDAJMS4zOQ0KKysrIGFncF9pODEwLmMJMTIgSnVsIDIwMDcgMTg6Mjg6MjEgLTAwMDAN
CkBAIC01OCwxOSArNTgsNDEgQEANCiANCiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4NCiAjaW5j
bHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPg0KKyNpbmNsdWRlIDxtYWNoaW5lL21kX3Zhci5oPg0K
ICNpbmNsdWRlIDxzeXMvcm1hbi5oPg0KIA0KIE1BTExPQ19ERUNMQVJFKE1fQUdQKTsNCiANCi0j
ZGVmaW5lIFJFQUQxKG9mZikJYnVzX3NwYWNlX3JlYWRfMShzYy0+YnN0LCBzYy0+YnNoLCBvZmYp
DQotI2RlZmluZSBSRUFENChvZmYpCWJ1c19zcGFjZV9yZWFkXzQoc2MtPmJzdCwgc2MtPmJzaCwg
b2ZmKQ0KLSNkZWZpbmUgV1JJVEU0KG9mZix2KQlidXNfc3BhY2Vfd3JpdGVfNChzYy0+YnN0LCBz
Yy0+YnNoLCBvZmYsIHYpDQotI2RlZmluZSBXUklURUdUVChvZmYsdikJYnVzX3NwYWNlX3dyaXRl
XzQoc2MtPmd0dF9ic3QsIHNjLT5ndHRfYnNoLCBvZmYsIHYpDQotDQotI2RlZmluZSBDSElQX0k4
MTAgMAkvKiBpODEwL2k4MTUgKi8NCi0jZGVmaW5lIENISVBfSTgzMCAxCS8qIDgzME0vODQ1RyAq
Lw0KLSNkZWZpbmUgQ0hJUF9JODU1IDIJLyogODUyR00vODU1R00vODY1RyAqLw0KLSNkZWZpbmUg
Q0hJUF9JOTE1IDMJLyogOTE1Ry85MTVHTSAqLw0KK2VudW0gew0KKwlDSElQX0k4MTAsCS8qIGk4
MTAvaTgxNSAqLw0KKwlDSElQX0k4MzAsCS8qIDgzME0vODQ1RyAqLw0KKwlDSElQX0k4NTUsCS8q
IDg1MkdNLzg1NUdNLzg2NUcgKi8NCisJQ0hJUF9JOTE1LAkvKiA5MTVHLzkxNUdNICovDQorCUNI
SVBfSTk2NSwJLyogRzk2NSAqLw0KKwlDSElQX0czMywJLyogRzMzL1EzMy9RMzUgKi8NCit9Ow0K
Kw0KKy8qIFRoZSBpODEwIHRocm91Z2ggaTg1NSBoYXZlIHRoZSByZWdpc3RlcnMgYXQgQkFSIDEs
IGFuZCB0aGUgR0FUVCBnZXRzDQorICogYWxsb2NhdGVkIGJ5IHVzLiAgVGhlIGk5MTUgaGFzIHJl
Z2lzdGVycyBpbiBCQVIgMCBhbmQgdGhlIEdBVFQgaXMgYXQgdGhlDQorICogc3RhcnQgb2YgdGhl
IHN0b2xlbiBtZW1vcnksIGFuZCBzaG91bGQgb25seSBiZSBhY2Nlc3NlZCBieSB0aGUgT1MgdGhy
b3VnaA0KKyAqIEJBUiAzLiAgVGhlIEc5NjUgaGFzIHJlZ2lzdGVycyBhbmQgR0FUVCBpbiB0aGUg
c2FtZSBCQVIgKDApIC0tIGZpcnN0IDUxMktCDQorICogaXMgcmVnaXN0ZXJzLCBzZWNvbmQgNTEy
S0IgaXMgR0FUVC4NCisgKi8NCitzdGF0aWMgc3RydWN0IHJlc291cmNlX3NwZWMgYWdwX2k4MTBf
cmVzX3NwZWNbXSA9IHsNCisJeyBTWVNfUkVTX01FTU9SWSwgQUdQX0k4MTBfTU1BRFIsIFJGX0FD
VElWRSB8IFJGX1NIQVJFQUJMRSB9LA0KKwl7IC0xLCAwIH0NCit9Ow0KKw0KK3N0YXRpYyBzdHJ1
Y3QgcmVzb3VyY2Vfc3BlYyBhZ3BfaTkxNV9yZXNfc3BlY1tdID0gew0KKwl7IFNZU19SRVNfTUVN
T1JZLCBBR1BfSTkxNV9NTUFEUiwgUkZfQUNUSVZFIHwgUkZfU0hBUkVBQkxFIH0sDQorCXsgU1lT
X1JFU19NRU1PUlksIEFHUF9JOTE1X0dUVEFEUiwgUkZfQUNUSVZFIHwgUkZfU0hBUkVBQkxFIH0s
DQorCXsgLTEsIDAgfQ0KK307DQorDQorc3RhdGljIHN0cnVjdCByZXNvdXJjZV9zcGVjIGFncF9p
OTY1X3Jlc19zcGVjW10gPSB7DQorCXsgU1lTX1JFU19NRU1PUlksIEFHUF9JOTY1X0dUVE1NQURS
LCBSRl9BQ1RJVkUgfCBSRl9TSEFSRUFCTEUgfSwNCisJeyAtMSwgMCB9DQorfTsNCiANCiBzdHJ1
Y3QgYWdwX2k4MTBfc29mdGMgew0KIAlzdHJ1Y3QgYWdwX3NvZnRjIGFncDsNCkBAIC04MSwxNyAr
MTAzLDEwIEBADQogCXVfaW50MzJfdCBzdG9sZW47CQkvKiBudW1iZXIgb2YgaTgzMC84NDUgZ3R0
IGVudHJpZXMgZm9yIHN0b2xlbiBtZW1vcnkgKi8NCiAJZGV2aWNlX3QgYmRldjsJCQkvKiBicmlk
Z2UgZGV2aWNlICovDQogDQotCXN0cnVjdCByZXNvdXJjZSAqcmVnczsJCS8qIG1lbW9yeSBtYXBw
ZWQgR0MgcmVnaXN0ZXJzICovDQotCWJ1c19zcGFjZV90YWdfdCBic3Q7CQkvKiBidXNfc3BhY2Ug
dGFnICovDQotCWJ1c19zcGFjZV9oYW5kbGVfdCBic2g7CQkvKiBidXNfc3BhY2UgaGFuZGxlICov
DQotDQotCXN0cnVjdCByZXNvdXJjZSAqZ3R0OwkJLyogbWVtb3J5IG1hcHBlZCBHQVRUIGVudHJp
ZXMgKi8NCi0JYnVzX3NwYWNlX3RhZ190IGd0dF9ic3Q7CS8qIGJ1c19zcGFjZSB0YWcgKi8NCi0J
YnVzX3NwYWNlX2hhbmRsZV90IGd0dF9ic2g7CS8qIGJ1c19zcGFjZSBoYW5kbGUgKi8NCi0NCi0J
c3RydWN0IHJlc291cmNlICpnbTsJCS8qIHVubWFwcGVkIChidXQgYWxsb2NhdGVkKSBhcGVydHVy
ZSAqLw0KLQ0KIAl2b2lkICphcmdiX2N1cnNvcjsJCS8qIGNvbnRpZ21hbGxvYyBhcmVhIGZvciBB
UkdCIGN1cnNvciAqLw0KKw0KKwlzdHJ1Y3QgcmVzb3VyY2Vfc3BlYyAqIHNjX3Jlc19zcGVjOw0K
KwlzdHJ1Y3QgcmVzb3VyY2UgKnNjX3Jlc1syXTsNCiB9Ow0KIA0KIC8qIEZvciBhZGRpbmcgbmV3
IGRldmljZXMsIGRldmlkIGlzIHRoZSBpZCBvZiB0aGUgZ3JhcGhpY3MgY29udHJvbGxlcg0KQEAg
LTEyNyw2ICsxNDIsMjggQEANCiAJICAgICJJbnRlbCA4Mjk0NUcgKDk0NUcgR01DSCkgU1ZHQSBj
b250cm9sbGVyIn0sDQogCXsweDI3QTI4MDg2LCBDSElQX0k5MTUsIDB4MDAwMjAwMDAsDQogCSAg
ICAiSW50ZWwgODI5NDVHTSAoOTQ1R00gR01DSCkgU1ZHQSBjb250cm9sbGVyIn0sDQorCXsweDI3
QTI4MDg2LCBDSElQX0k5MTUsIDB4MDAwMjAwMDAsDQorCSAgICAiSW50ZWwgOTQ1R01FIFNWR0Eg
Y29udHJvbGxlciJ9LA0KKwl7MHgyOTcyODA4NiwgQ0hJUF9JOTY1LCAweDAwMDIwMDAwLA0KKwkg
ICAgIkludGVsIDk0NkdaIFNWR0EgY29udHJvbGxlciJ9LA0KKwl7MHgyOTgyODA4NiwgQ0hJUF9J
OTY1LCAweDAwMDIwMDAwLA0KKwkgICAgIkludGVsIEc5NjUgU1ZHQSBjb250cm9sbGVyIn0sDQor
CXsweDI5OTI4MDg2LCBDSElQX0k5NjUsIDB4MDAwMjAwMDAsDQorCSAgICAiSW50ZWwgUTk2NSBT
VkdBIGNvbnRyb2xsZXIifSwNCisJezB4MjlhMjgwODYsIENISVBfSTk2NSwgMHgwMDAyMDAwMCwN
CisJICAgICJJbnRlbCBHOTY1IFNWR0EgY29udHJvbGxlciJ9LA0KKy8qDQorCXsweDI5YjI4MDg2
LCBDSElQX0czMywgMHgwMDAyMDAwMCwNCisJICAgICJJbnRlbCBRMzUgU1ZHQSBjb250cm9sbGVy
In0sDQorCXsweDI5YzI4MDg2LCBDSElQX0czMywgMHgwMDAyMDAwMCwNCisJICAgICJJbnRlbCBH
MzMgU1ZHQSBjb250cm9sbGVyIn0sDQorCXsweDI5ZDI4MDg2LCBDSElQX0czMywgMHgwMDAyMDAw
MCwNCisJICAgICJJbnRlbCBRMzMgU1ZHQSBjb250cm9sbGVyIn0sDQorKi8NCisJezB4MmEwMjgw
ODYsIENISVBfSTk2NSwgMHgwMDAyMDAwMCwNCisJICAgICJJbnRlbCBHTTk2NSBTVkdBIGNvbnRy
b2xsZXIifSwNCisJezB4MmExMjgwODYsIENISVBfSTk2NSwgMHgwMDAyMDAwMCwNCisJICAgICJJ
bnRlbCBHTUU5NjUgU1ZHQSBjb250cm9sbGVyIn0sDQogCXswLCAwLCAwLCBOVUxMfQ0KIH07DQog
DQpAQCAtMTk0LDYgKzIzMSw4IEBADQogew0KIAlkZXZpY2VfdCBiZGV2Ow0KIAljb25zdCBzdHJ1
Y3QgYWdwX2k4MTBfbWF0Y2ggKm1hdGNoOw0KKwl1X2ludDhfdCBzbXJhbTsNCisJaW50IGdjYzEs
IGRldmVuOw0KIA0KIAlpZiAocmVzb3VyY2VfZGlzYWJsZWQoImFncCIsIGRldmljZV9nZXRfdW5p
dChkZXYpKSkNCiAJCXJldHVybiAoRU5YSU8pOw0KQEAgLTIxMSwyMCArMjUwLDE4IEBADQogCS8q
DQogCSAqIGNoZWNraW5nIHdoZXRoZXIgaW50ZXJuYWwgZ3JhcGhpY3MgZGV2aWNlIGhhcyBiZWVu
IGFjdGl2YXRlZC4NCiAJICovDQotCWlmIChtYXRjaC0+Y2hpcHR5cGUgPT0gQ0hJUF9JODEwKSB7
DQotCQl1X2ludDhfdCBzbXJhbTsNCi0NCisJc3dpdGNoIChtYXRjaC0+Y2hpcHR5cGUpIHsNCisJ
Y2FzZSBDSElQX0k4MTA6DQogCQlzbXJhbSA9IHBjaV9yZWFkX2NvbmZpZyhiZGV2LCBBR1BfSTgx
MF9TTVJBTSwgMSk7DQotCQlpZiAoKHNtcmFtICYgQUdQX0k4MTBfU01SQU1fR01TKQ0KLQkJICAg
ID09IEFHUF9JODEwX1NNUkFNX0dNU19ESVNBQkxFRCkgew0KKwkJaWYgKChzbXJhbSAmIEFHUF9J
ODEwX1NNUkFNX0dNUykgPT0NCisJCSAgICBBR1BfSTgxMF9TTVJBTV9HTVNfRElTQUJMRUQpIHsN
CiAJCQlpZiAoYm9vdHZlcmJvc2UpDQogCQkJCXByaW50ZigiSTgxMDogZGlzYWJsZWQsIG5vdCBw
cm9iaW5nXG4iKTsNCiAJCQlyZXR1cm4gRU5YSU87DQogCQl9DQotCX0gZWxzZSBpZiAobWF0Y2gt
PmNoaXB0eXBlID09IENISVBfSTgzMCB8fA0KLQkgICAgbWF0Y2gtPmNoaXB0eXBlID09IENISVBf
STg1NSkgew0KLQkJdW5zaWduZWQgaW50IGdjYzE7DQotDQorCQlicmVhazsNCisJY2FzZSBDSElQ
X0k4MzA6DQorCWNhc2UgQ0hJUF9JODU1Og0KIAkJZ2NjMSA9IHBjaV9yZWFkX2NvbmZpZyhiZGV2
LCBBR1BfSTgzMF9HQ0MxLCAxKTsNCiAJCWlmICgoZ2NjMSAmIEFHUF9JODMwX0dDQzFfREVWMikg
PT0NCiAJCSAgICBBR1BfSTgzMF9HQ0MxX0RFVjJfRElTQUJMRUQpIHsNCkBAIC0yMzIsMTYgKzI2
OSwxOCBAQA0KIAkJCQlwcmludGYoIkk4MzA6IGRpc2FibGVkLCBub3QgcHJvYmluZ1xuIik7DQog
CQkJcmV0dXJuIEVOWElPOw0KIAkJfQ0KLQl9IGVsc2UgaWYgKG1hdGNoLT5jaGlwdHlwZSA9PSBD
SElQX0k5MTUpIHsNCi0JCXVuc2lnbmVkIGludCBnY2MxOw0KLQ0KLQkJZ2NjMSA9IHBjaV9yZWFk
X2NvbmZpZyhiZGV2LCBBR1BfSTkxNV9ERVZFTiwgNCk7DQotCQlpZiAoKGdjYzEgJiBBR1BfSTkx
NV9ERVZFTl9EMkYwKSA9PQ0KKwkJYnJlYWs7DQorCWNhc2UgQ0hJUF9JOTE1Og0KKwljYXNlIENI
SVBfSTk2NToNCisJY2FzZSBDSElQX0czMzoNCisJCWRldmVuID0gcGNpX3JlYWRfY29uZmlnKGJk
ZXYsIEFHUF9JOTE1X0RFVkVOLCA0KTsNCisJCWlmICgoZGV2ZW4gJiBBR1BfSTkxNV9ERVZFTl9E
MkYwKSA9PQ0KIAkJICAgIEFHUF9JOTE1X0RFVkVOX0QyRjBfRElTQUJMRUQpIHsNCiAJCQlpZiAo
Ym9vdHZlcmJvc2UpDQogCQkJCXByaW50ZigiSTkxNTogZGlzYWJsZWQsIG5vdCBwcm9iaW5nXG4i
KTsNCiAJCQlyZXR1cm4gRU5YSU87DQogCQl9DQorCQlicmVhazsNCiAJfQ0KIA0KIAlpZiAobWF0
Y2gtPmRldmlkID09IDB4MzU4MjgwODYpIHsNCkBAIC0yNzQsNzYgKzMxMyw5NSBAQA0KIAlyZXR1
cm4gQlVTX1BST0JFX0RFRkFVTFQ7DQogfQ0KIA0KK3N0YXRpYyB2b2lkDQorYWdwX2k4MTBfZHVt
cF9yZWdzKGRldmljZV90IGRldikNCit7DQorCXN0cnVjdCBhZ3BfaTgxMF9zb2Z0YyAqc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7DQorDQorCWRldmljZV9wcmludGYoZGV2LCAiQUdQX0k4MTBf
UEdUQkxfQ1RMOiAlMDh4XG4iLA0KKwkgICAgYnVzX3JlYWRfNChzYy0+c2NfcmVzWzBdLCBBR1Bf
STgxMF9QR1RCTF9DVEwpKTsNCisNCisJc3dpdGNoIChzYy0+Y2hpcHR5cGUpIHsNCisJY2FzZSBD
SElQX0k4MTA6DQorCQlkZXZpY2VfcHJpbnRmKGRldiwgIkFHUF9JODEwX01JU0NDOiAweCUwNHhc
biIsDQorCQkgICAgcGNpX3JlYWRfY29uZmlnKHNjLT5iZGV2LCBBR1BfSTgxMF9NSVNDQywgMikp
Ow0KKwkJYnJlYWs7DQorCWNhc2UgQ0hJUF9JODMwOg0KKwkJZGV2aWNlX3ByaW50ZihkZXYsICJB
R1BfSTgzMF9HQ0MxOiAweCUwMnhcbiIsDQorCQkgICAgcGNpX3JlYWRfY29uZmlnKHNjLT5iZGV2
LCBBR1BfSTgzMF9HQ0MxLCAxKSk7DQorCQlicmVhazsNCisJY2FzZSBDSElQX0k4NTU6DQorCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIkFHUF9JODU1X0dDQzE6IDB4JTAyeFxuIiwNCisJCSAgICBwY2lf
cmVhZF9jb25maWcoc2MtPmJkZXYsIEFHUF9JODU1X0dDQzEsIDEpKTsNCisJCWJyZWFrOw0KKwlj
YXNlIENISVBfSTkxNToNCisJY2FzZSBDSElQX0k5NjU6DQorCWNhc2UgQ0hJUF9HMzM6DQorCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIkFHUF9JODU1X0dDQzE6IDB4JTAyeFxuIiwNCisJCSAgICBwY2lf
cmVhZF9jb25maWcoc2MtPmJkZXYsIEFHUF9JODU1X0dDQzEsIDEpKTsNCisJCWRldmljZV9wcmlu
dGYoZGV2LCAiQUdQX0k5MTVfTVNBQzogMHglMDJ4XG4iLA0KKwkJICAgIHBjaV9yZWFkX2NvbmZp
ZyhzYy0+YmRldiwgQUdQX0k5MTVfTVNBQywgMSkpOw0KKwkJYnJlYWs7DQorCX0NCisJZGV2aWNl
X3ByaW50ZihkZXYsICJBcGVydHVyZSByZXNvdXJjZSBzaXplOiAlZCBieXRlc1xuIiwNCisJICAg
IEFHUF9HRVRfQVBFUlRVUkUoZGV2KSk7DQorfQ0KKw0KIHN0YXRpYyBpbnQNCiBhZ3BfaTgxMF9h
dHRhY2goZGV2aWNlX3QgZGV2KQ0KIHsNCiAJc3RydWN0IGFncF9pODEwX3NvZnRjICpzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsNCiAJc3RydWN0IGFncF9nYXR0ICpnYXR0Ow0KIAljb25zdCBz
dHJ1Y3QgYWdwX2k4MTBfbWF0Y2ggKm1hdGNoOw0KLQlpbnQgZXJyb3IsIHJpZDsNCisJaW50IGVy
cm9yOw0KIA0KIAlzYy0+YmRldiA9IGFncF9pODEwX2ZpbmRfYnJpZGdlKGRldik7DQogCWlmICgh
c2MtPmJkZXYpDQogCQlyZXR1cm4gRU5PRU5UOw0KIA0KKwltYXRjaCA9IGFncF9pODEwX21hdGNo
KGRldik7DQorCXNjLT5jaGlwdHlwZSA9IG1hdGNoLT5jaGlwdHlwZTsNCisNCisJc3dpdGNoIChz
Yy0+Y2hpcHR5cGUpIHsNCisJY2FzZSBDSElQX0k4MTA6DQorCWNhc2UgQ0hJUF9JODMwOg0KKwlj
YXNlIENISVBfSTg1NToNCisJCXNjLT5zY19yZXNfc3BlYyA9IGFncF9pODEwX3Jlc19zcGVjOw0K
KwkJYWdwX3NldF9hcGVydHVyZV9yZXNvdXJjZShkZXYsIEFHUF9BUEJBU0UpOw0KKwkJYnJlYWs7
DQorCWNhc2UgQ0hJUF9JOTE1Og0KKwljYXNlIENISVBfRzMzOg0KKwkJc2MtPnNjX3Jlc19zcGVj
ID0gYWdwX2k5MTVfcmVzX3NwZWM7DQorCQlhZ3Bfc2V0X2FwZXJ0dXJlX3Jlc291cmNlKGRldiwg
QUdQX0k5MTVfR01BRFIpOw0KKwkJYnJlYWs7DQorCWNhc2UgQ0hJUF9JOTY1Og0KKwkJc2MtPnNj
X3Jlc19zcGVjID0gYWdwX2k5NjVfcmVzX3NwZWM7DQorCQlhZ3Bfc2V0X2FwZXJ0dXJlX3Jlc291
cmNlKGRldiwgQUdQX0k5MTVfR01BRFIpOw0KKwkJYnJlYWs7DQorCX0NCisNCiAJZXJyb3IgPSBh
Z3BfZ2VuZXJpY19hdHRhY2goZGV2KTsNCiAJaWYgKGVycm9yKQ0KIAkJcmV0dXJuIGVycm9yOw0K
IA0KLQltYXRjaCA9IGFncF9pODEwX21hdGNoKGRldik7DQotCXNjLT5jaGlwdHlwZSA9IG1hdGNo
LT5jaGlwdHlwZTsNCi0NCi0JLyogU2FtZSBmb3IgaTgxMCBhbmQgaTgzMCAqLw0KLQlpZiAoc2Mt
PmNoaXB0eXBlID09IENISVBfSTkxNSkNCi0JCXJpZCA9IEFHUF9JOTE1X01NQURSOw0KLQllbHNl
DQotCQlyaWQgPSBBR1BfSTgxMF9NTUFEUjsNCisJaWYgKHNjLT5jaGlwdHlwZSAhPSBDSElQX0k5
NjUgJiYgc2MtPmNoaXB0eXBlICE9IENISVBfRzMzICYmDQorCSAgICBwdG9hKCh2bV9wYWRkcl90
KU1heG1lbSkgPiAweGZmZmZmZmZmdWwpDQorCXsNCisJCWRldmljZV9wcmludGYoZGV2LCAiYWdw
X2k4MTAuYyBkb2VzIG5vdCBzdXBwb3J0IHBoeXNpY2FsICINCisJCSAgICAibWVtb3J5IGFib3Zl
IDRHQi5cbiIpOw0KKwkJcmV0dXJuIEVOT0VOVDsNCisJfQ0KIA0KLQlzYy0+cmVncyA9IGJ1c19h
bGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX01FTU9SWSwgJnJpZCwNCi0JCQkJCSAgUkZf
QUNUSVZFKTsNCi0JaWYgKCFzYy0+cmVncykgew0KKwlpZiAoYnVzX2FsbG9jX3Jlc291cmNlcyhk
ZXYsIHNjLT5zY19yZXNfc3BlYywgc2MtPnNjX3JlcykpIHsNCiAJCWFncF9nZW5lcmljX2RldGFj
aChkZXYpOw0KIAkJcmV0dXJuIEVOT0RFVjsNCiAJfQ0KLQlzYy0+YnN0ID0gcm1hbl9nZXRfYnVz
dGFnKHNjLT5yZWdzKTsNCi0Jc2MtPmJzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+cmVncyk7
DQotDQotCWlmIChzYy0+Y2hpcHR5cGUgPT0gQ0hJUF9JOTE1KSB7DQotCQlyaWQgPSBBR1BfSTkx
NV9HVFRBRFI7DQotCQlzYy0+Z3R0ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19S
RVNfTUVNT1JZLCAmcmlkLA0KLQkJCQkJCSBSRl9BQ1RJVkUpOw0KLQkJaWYgKCFzYy0+Z3R0KSB7
DQotCQkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwNCi0JCQkJCSAg
ICAgQUdQX0k5MTVfTU1BRFIsIHNjLT5yZWdzKTsNCi0JCQlhZ3BfZ2VuZXJpY19kZXRhY2goZGV2
KTsNCi0JCQlyZXR1cm4gRU5PREVWOw0KLQkJfQ0KLQkJc2MtPmd0dF9ic3QgPSBybWFuX2dldF9i
dXN0YWcoc2MtPmd0dCk7DQotCQlzYy0+Z3R0X2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+
Z3R0KTsNCi0NCi0JCS8qIFdoaWxlIGFncF9nZW5lcmljX2F0dGFjaCBhbGxvY2F0ZXMgdGhlIEFH
UF9BUEJBU0UgcmVzb3VyY2UNCi0JCSAqIHRvIHRyeSB0byByZXNlcnZlIHRoZSBhcGVydHVyZSwg
b24gdGhlIDkxNSB0aGUgYXBlcnR1cmUNCi0JCSAqIGlzbid0IGluIFBDSVJfQkFSKDApLCBpdCdz
IGluIFBDSVJfQkFSKDIpLCBzbyBpdCBhbGxvY2F0ZWQNCi0JCSAqIHRoZSByZWdpc3RlcnMgdGhh
dCB3ZSBqdXN0IG1hcHBlZCBhbnl3YXkuICBTbywgYWxsb2NhdGUgdGhlDQotCQkgKiBhcGVydHVy
ZSBoZXJlLCB3aGljaCBhbHNvIGdpdmVzIHVzIGVhc3kgYWNjZXNzIHRvIGl0IGZvciB0aGUNCi0J
CSAqIGFncF9pODEwX2dldF9hcGVydHVyZSgpLg0KLQkJICovDQotCQlyaWQgPSBBR1BfSTkxNV9H
TUFEUjsNCi0JCXNjLT5nbSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX01F
TU9SWSwgJnJpZCwgMCk7DQotCQlpZiAoc2MtPmdtID09IE5VTEwpIHsNCi0JCQlidXNfcmVsZWFz
ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLA0KLQkJCQkJICAgICBBR1BfSTkxNV9NTUFE
Uiwgc2MtPnJlZ3MpOw0KLQkJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1P
UlksDQotCQkJCQkgICAgIEFHUF9JOTE1X0dUVEFEUiwgc2MtPnJlZ3MpOw0KLQkJCWFncF9nZW5l
cmljX2RldGFjaChkZXYpOw0KLQkJCXJldHVybiBFTk9ERVY7DQotCQl9DQotCX0NCiANCiAJc2Mt
PmluaXRpYWxfYXBlcnR1cmUgPSBBR1BfR0VUX0FQRVJUVVJFKGRldik7DQogDQogCWdhdHQgPSBt
YWxsb2MoIHNpemVvZihzdHJ1Y3QgYWdwX2dhdHQpLCBNX0FHUCwgTV9OT1dBSVQpOw0KIAlpZiAo
IWdhdHQpIHsNCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHNjLT5zY19yZXNfc3BlYywg
c2MtPnNjX3Jlcyk7DQogIAkJYWdwX2dlbmVyaWNfZGV0YWNoKGRldik7DQogIAkJcmV0dXJuIEVO
T01FTTsNCiAJfQ0KQEAgLTM1Myw3ICs0MTEsOCBAQA0KIA0KIAlpZiAoIHNjLT5jaGlwdHlwZSA9
PSBDSElQX0k4MTAgKSB7DQogCQkvKiBTb21lIGk4MTBzIGhhdmUgb24tY2hpcCBtZW1vcnkgY2Fs
bGVkIGRjYWNoZSAqLw0KLQkJaWYgKFJFQUQxKEFHUF9JODEwX0RSVCkgJiBBR1BfSTgxMF9EUlRf
UE9QVUxBVEVEKQ0KKwkJaWYgKGJ1c19yZWFkXzEoc2MtPnNjX3Jlc1swXSwgQUdQX0k4MTBfRFJU
KSAmDQorCQkgICAgQUdQX0k4MTBfRFJUX1BPUFVMQVRFRCkNCiAJCQlzYy0+ZGNhY2hlX3NpemUg
PSA0ICogMTAyNCAqIDEwMjQ7DQogCQllbHNlDQogCQkJc2MtPmRjYWNoZV9zaXplID0gMDsNCkBA
IC0zNjQsNiArNDIzLDggQEANCiAJCWlmICghZ2F0dC0+YWdfdmlydHVhbCkgew0KIAkJCWlmIChi
b290dmVyYm9zZSkNCiAJCQkJZGV2aWNlX3ByaW50ZihkZXYsICJjb250aWd1b3VzIGFsbG9jYXRp
b24gZmFpbGVkXG4iKTsNCisJCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBzYy0+c2NfcmVz
X3NwZWMsDQorCQkJICAgIHNjLT5zY19yZXMpOw0KIAkJCWZyZWUoZ2F0dCwgTV9BR1ApOw0KIAkJ
CWFncF9nZW5lcmljX2RldGFjaChkZXYpOw0KIAkJCXJldHVybiBFTk9NRU07DQpAQCAtMzczLDcg
KzQzNCw4IEBADQogCQlnYXR0LT5hZ19waHlzaWNhbCA9IHZ0b3BoeXMoKHZtX29mZnNldF90KSBn
YXR0LT5hZ192aXJ0dWFsKTsNCiAJCWFncF9mbHVzaF9jYWNoZSgpOw0KIAkJLyogSW5zdGFsbCB0
aGUgR0FUVC4gKi8NCi0JCVdSSVRFNChBR1BfSTgxMF9QR1RCTF9DVEwsIGdhdHQtPmFnX3BoeXNp
Y2FsIHwgMSk7DQorCQlidXNfd3JpdGVfNChzYy0+c2NfcmVzWzBdLCBBR1BfSTgxMF9QR1RCTF9D
VEwsDQorCQkgICAgZ2F0dC0+YWdfcGh5c2ljYWwgfCAxKTsNCiAJfSBlbHNlIGlmICggc2MtPmNo
aXB0eXBlID09IENISVBfSTgzMCApIHsNCiAJCS8qIFRoZSBpODMwIGF1dG9tYXRpY2FsbHkgaW5p
dGlhbGl6ZXMgdGhlIDEyOGsgZ2F0dCBvbiBib290LiAqLw0KIAkJdW5zaWduZWQgaW50IGdjYzEs
IHBndGJsY3RsOw0KQEAgLTM5Miw3MiArNDU0LDEyNiBAQA0KIAkJCWRlZmF1bHQ6DQogCQkJCXNj
LT5zdG9sZW4gPSAwOw0KIAkJCQlkZXZpY2VfcHJpbnRmKGRldiwgInVua25vd24gbWVtb3J5IGNv
bmZpZ3VyYXRpb24sIGRpc2FibGluZ1xuIik7DQorCQkJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhk
ZXYsIHNjLT5zY19yZXNfc3BlYywNCisJCQkJICAgIHNjLT5zY19yZXMpOw0KKwkJCQlmcmVlKGdh
dHQsIE1fQUdQKTsNCiAJCQkJYWdwX2dlbmVyaWNfZGV0YWNoKGRldik7DQogCQkJCXJldHVybiBF
SU5WQUw7DQogCQl9DQotCQlpZiAoc2MtPnN0b2xlbiA+IDApDQotCQkJZGV2aWNlX3ByaW50Zihk
ZXYsICJkZXRlY3RlZCAlZGsgc3RvbGVuIG1lbW9yeVxuIiwgc2MtPnN0b2xlbiAqIDQpOw0KLQkJ
ZGV2aWNlX3ByaW50ZihkZXYsICJhcGVydHVyZSBzaXplIGlzICVkTVxuIiwgc2MtPmluaXRpYWxf
YXBlcnR1cmUgLyAxMDI0IC8gMTAyNCk7DQorCQlpZiAoc2MtPnN0b2xlbiA+IDApIHsNCisJCQlk
ZXZpY2VfcHJpbnRmKGRldiwgImRldGVjdGVkICVkayBzdG9sZW4gbWVtb3J5XG4iLA0KKwkJCSAg
ICBzYy0+c3RvbGVuICogNCk7DQorCQl9DQorCQlkZXZpY2VfcHJpbnRmKGRldiwgImFwZXJ0dXJl
IHNpemUgaXMgJWRNXG4iLA0KKwkJICAgIHNjLT5pbml0aWFsX2FwZXJ0dXJlIC8gMTAyNCAvIDEw
MjQpOw0KIA0KIAkJLyogR0FUVCBhZGRyZXNzIGlzIGFscmVhZHkgaW4gdGhlcmUsIG1ha2Ugc3Vy
ZSBpdCdzIGVuYWJsZWQgKi8NCi0JCXBndGJsY3RsID0gUkVBRDQoQUdQX0k4MTBfUEdUQkxfQ1RM
KTsNCisJCXBndGJsY3RsID0gYnVzX3JlYWRfNChzYy0+c2NfcmVzWzBdLCBBR1BfSTgxMF9QR1RC
TF9DVEwpOw0KIAkJcGd0YmxjdGwgfD0gMTsNCi0JCVdSSVRFNChBR1BfSTgxMF9QR1RCTF9DVEws
IHBndGJsY3RsKTsNCisJCWJ1c193cml0ZV80KHNjLT5zY19yZXNbMF0sIEFHUF9JODEwX1BHVEJM
X0NUTCwgcGd0YmxjdGwpOw0KIA0KIAkJZ2F0dC0+YWdfcGh5c2ljYWwgPSBwZ3RibGN0bCAmIH4x
Ow0KLQl9IGVsc2UgaWYgKHNjLT5jaGlwdHlwZSA9PSBDSElQX0k4NTUgfHwgc2MtPmNoaXB0eXBl
ID09IENISVBfSTkxNSkgewkvKiBDSElQX0k4NTUgKi8NCi0JCXVuc2lnbmVkIGludCBnY2MxLCBw
Z3RibGN0bCwgc3RvbGVuOw0KKwl9IGVsc2UgaWYgKHNjLT5jaGlwdHlwZSA9PSBDSElQX0k4NTUg
fHwgc2MtPmNoaXB0eXBlID09IENISVBfSTkxNSB8fA0KKwkgICAgc2MtPmNoaXB0eXBlID09IENI
SVBfSTk2NSB8fCBzYy0+Y2hpcHR5cGUgPT0gQ0hJUF9HMzMpIHsNCisJCXVuc2lnbmVkIGludCBn
Y2MxLCBwZ3RibGN0bCwgc3RvbGVuLCBndHRfc2l6ZTsNCiANCiAJCS8qIFN0b2xlbiBtZW1vcnkg
aXMgc2V0IHVwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwZXJ0dXJlIGJ5DQotCQkgKiB0aGUg
QklPUywgY29uc2lzdGluZyBvZiB0aGUgR0FUVCBmb2xsb3dlZCBieSA0a2IgZm9yIHRoZSBCSU9T
DQotCQkgKiBkaXNwbGF5Lg0KKwkJICogdGhlIEJJT1MsIGNvbnNpc3Rpbmcgb2YgdGhlIEdBVFQg
Zm9sbG93ZWQgYnkgNGtiIGZvciB0aGUNCisJCSAqIEJJT1MgZGlzcGxheS4NCiAJCSAqLw0KLQkJ
aWYgKHNjLT5jaGlwdHlwZSA9PSBDSElQX0k4NTUpDQotCQkJc3RvbGVuID0gMTMyOw0KLQkJZWxz
ZQ0KLQkJCXN0b2xlbiA9IDI2MDsNCi0NCi0JCWdjYzEgPSBwY2lfcmVhZF9jb25maWcoc2MtPmJk
ZXYsIEFHUF9JODU1X0dDQzEsIDEpOw0KLQkJc3dpdGNoIChnY2MxICYgQUdQX0k4NTVfR0NDMV9H
TVMpIHsNCi0JCQljYXNlIEFHUF9JODU1X0dDQzFfR01TX1NUT0xFTl8xTToNCi0JCQkJc2MtPnN0
b2xlbiA9ICgxMDI0IC0gc3RvbGVuKSAqIDEwMjQgLyA0MDk2Ow0KLQkJCQlicmVhazsNCi0JCQlj
YXNlIEFHUF9JODU1X0dDQzFfR01TX1NUT0xFTl80TTogDQotCQkJCXNjLT5zdG9sZW4gPSAoNDA5
NiAtIHN0b2xlbikgKiAxMDI0IC8gNDA5NjsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBBR1BfSTg1
NV9HQ0MxX0dNU19TVE9MRU5fOE06IA0KLQkJCQlzYy0+c3RvbGVuID0gKDgxOTIgLSBzdG9sZW4p
ICogMTAyNCAvIDQwOTY7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgQUdQX0k4NTVfR0NDMV9HTVNf
U1RPTEVOXzE2TTogDQotCQkJCXNjLT5zdG9sZW4gPSAoMTYzODQgLSBzdG9sZW4pICogMTAyNCAv
IDQwOTY7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgQUdQX0k4NTVfR0NDMV9HTVNfU1RPTEVOXzMy
TTogDQotCQkJCXNjLT5zdG9sZW4gPSAoMzI3NjggLSBzdG9sZW4pICogMTAyNCAvIDQwOTY7DQor
CQlzd2l0Y2ggKHNjLT5jaGlwdHlwZSkgew0KKwkJY2FzZSBDSElQX0k4NTU6DQorCQkJZ3R0X3Np
emUgPSAxMjg7DQorCQkJYnJlYWs7DQorCQljYXNlIENISVBfSTkxNToNCisJCQlndHRfc2l6ZSA9
IDI1NjsNCisJCQlicmVhazsNCisJCWNhc2UgQ0hJUF9JOTY1Og0KKwkJY2FzZSBDSElQX0czMzoN
CisJCQlzd2l0Y2ggKGJ1c19yZWFkXzQoc2MtPnNjX3Jlc1swXSwgQUdQX0k4MTBfUEdUQkxfQ1RM
KSAmDQorCQkJICAgIEFHUF9JODEwX1BHVEJMX1NJWkVfTUFTSykgew0KKwkJCWNhc2UgQUdQX0k4
MTBfUEdUQkxfU0laRV8xMjhLQjoNCisJCQkJZ3R0X3NpemUgPSAxMjg7DQogCQkJCWJyZWFrOw0K
LQkJCWNhc2UgQUdQX0k5MTVfR0NDMV9HTVNfU1RPTEVOXzQ4TTogDQotCQkJCXNjLT5zdG9sZW4g
PSAoNDkxNTIgLSBzdG9sZW4pICogMTAyNCAvIDQwOTY7DQorCQkJY2FzZSBBR1BfSTgxMF9QR1RC
TF9TSVpFXzI1NktCOg0KKwkJCQlndHRfc2l6ZSA9IDI1NjsNCiAJCQkJYnJlYWs7DQotCQkJY2Fz
ZSBBR1BfSTkxNV9HQ0MxX0dNU19TVE9MRU5fNjRNOiANCi0JCQkJc2MtPnN0b2xlbiA9ICg2NTUz
NiAtIHN0b2xlbikgKiAxMDI0IC8gNDA5NjsNCisJCQljYXNlIEFHUF9JODEwX1BHVEJMX1NJWkVf
NTEyS0I6DQorCQkJCWd0dF9zaXplID0gNTEyOw0KIAkJCQlicmVhazsNCiAJCQlkZWZhdWx0Og0K
LQkJCQlzYy0+c3RvbGVuID0gMDsNCi0JCQkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmtub3duIG1l
bW9yeSBjb25maWd1cmF0aW9uLCBkaXNhYmxpbmdcbiIpOw0KKwkJCQlkZXZpY2VfcHJpbnRmKGRl
diwgIkJhZCBQR1RCTCBzaXplXG4iKTsNCisJCQkJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwg
c2MtPnNjX3Jlc19zcGVjLA0KKwkJCQkgICAgc2MtPnNjX3Jlcyk7DQorCQkJCWZyZWUoZ2F0dCwg
TV9BR1ApOw0KIAkJCQlhZ3BfZ2VuZXJpY19kZXRhY2goZGV2KTsNCiAJCQkJcmV0dXJuIEVJTlZB
TDsNCisJCQl9DQorCQkJYnJlYWs7DQorCQlkZWZhdWx0Og0KKwkJCWRldmljZV9wcmludGYoZGV2
LCAiQmFkIGNoaXB0eXBlXG4iKTsNCisJCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBzYy0+
c2NfcmVzX3NwZWMsDQorCQkJICAgIHNjLT5zY19yZXMpOw0KKwkJCWZyZWUoZ2F0dCwgTV9BR1Ap
Ow0KKwkJCWFncF9nZW5lcmljX2RldGFjaChkZXYpOw0KKwkJCXJldHVybiBFSU5WQUw7DQorCQl9
DQorDQorCQkvKiBHQ0MxIGlzIGNhbGxlZCBNR0dDIG9uIGk5MTUrICovDQorCQlnY2MxID0gcGNp
X3JlYWRfY29uZmlnKHNjLT5iZGV2LCBBR1BfSTg1NV9HQ0MxLCAxKTsNCisJCXN3aXRjaCAoZ2Nj
MSAmIEFHUF9JODU1X0dDQzFfR01TKSB7DQorCQljYXNlIEFHUF9JODU1X0dDQzFfR01TX1NUT0xF
Tl8xTToNCisJCQlzdG9sZW4gPSAxMDI0Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSBBR1BfSTg1NV9H
Q0MxX0dNU19TVE9MRU5fNE06DQorCQkJc3RvbGVuID0gNDA5NjsNCisJCQlicmVhazsNCisJCWNh
c2UgQUdQX0k4NTVfR0NDMV9HTVNfU1RPTEVOXzhNOg0KKwkJCXN0b2xlbiA9IDgxOTI7DQorCQkJ
YnJlYWs7DQorCQljYXNlIEFHUF9JODU1X0dDQzFfR01TX1NUT0xFTl8xNk06DQorCQkJc3RvbGVu
ID0gMTYzODQ7DQorCQkJYnJlYWs7DQorCQljYXNlIEFHUF9JODU1X0dDQzFfR01TX1NUT0xFTl8z
Mk06DQorCQkJc3RvbGVuID0gMzI3Njg7DQorCQkJYnJlYWs7DQorCQljYXNlIEFHUF9JOTE1X0dD
QzFfR01TX1NUT0xFTl80OE06DQorCQkJc3RvbGVuID0gNDkxNTI7DQorCQkJYnJlYWs7DQorCQlj
YXNlIEFHUF9JOTE1X0dDQzFfR01TX1NUT0xFTl82NE06DQorCQkJc3RvbGVuID0gNjU1MzY7DQor
CQkJYnJlYWs7DQorCQljYXNlIEFHUF9HMzNfR0NDMV9HTVNfU1RPTEVOXzEyOE06DQorCQkJc3Rv
bGVuID0gMTI4ICogMTAyNDsNCisJCQlicmVhazsNCisJCWNhc2UgQUdQX0czM19HQ0MxX0dNU19T
VE9MRU5fMjU2TToNCisJCQlzdG9sZW4gPSAyNTYgKiAxMDI0Ow0KKwkJCWJyZWFrOw0KKwkJZGVm
YXVsdDoNCisJCQlkZXZpY2VfcHJpbnRmKGRldiwgInVua25vd24gbWVtb3J5IGNvbmZpZ3VyYXRp
b24sICINCisJCQkgICAgImRpc2FibGluZ1xuIik7DQorCQkJYnVzX3JlbGVhc2VfcmVzb3VyY2Vz
KGRldiwgc2MtPnNjX3Jlc19zcGVjLA0KKwkJCSAgICBzYy0+c2NfcmVzKTsNCisJCQlmcmVlKGdh
dHQsIE1fQUdQKTsNCisJCQlhZ3BfZ2VuZXJpY19kZXRhY2goZGV2KTsNCisJCQlyZXR1cm4gRUlO
VkFMOw0KIAkJfQ0KKwkJc2MtPnN0b2xlbiA9IChzdG9sZW4gLSBndHRfc2l6ZSAtIDQpICogMTAy
NCAvIDQwOTY7DQogCQlpZiAoc2MtPnN0b2xlbiA+IDApDQogCQkJZGV2aWNlX3ByaW50ZihkZXYs
ICJkZXRlY3RlZCAlZGsgc3RvbGVuIG1lbW9yeVxuIiwgc2MtPnN0b2xlbiAqIDQpOw0KIAkJZGV2
aWNlX3ByaW50ZihkZXYsICJhcGVydHVyZSBzaXplIGlzICVkTVxuIiwgc2MtPmluaXRpYWxfYXBl
cnR1cmUgLyAxMDI0IC8gMTAyNCk7DQogDQogCQkvKiBHQVRUIGFkZHJlc3MgaXMgYWxyZWFkeSBp
biB0aGVyZSwgbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCAqLw0KLQkJcGd0YmxjdGwgPSBSRUFENChB
R1BfSTgxMF9QR1RCTF9DVEwpOw0KKwkJcGd0YmxjdGwgPSBidXNfcmVhZF80KHNjLT5zY19yZXNb
MF0sIEFHUF9JODEwX1BHVEJMX0NUTCk7DQogCQlwZ3RibGN0bCB8PSAxOw0KLQkJV1JJVEU0KEFH
UF9JODEwX1BHVEJMX0NUTCwgcGd0YmxjdGwpOw0KKwkJYnVzX3dyaXRlXzQoc2MtPnNjX3Jlc1sw
XSwgQUdQX0k4MTBfUEdUQkxfQ1RMLCBwZ3RibGN0bCk7DQogDQogCQlnYXR0LT5hZ19waHlzaWNh
bCA9IHBndGJsY3RsICYgfjE7DQogCX0NCiANCisJaWYgKDApDQorCQlhZ3BfaTgxMF9kdW1wX3Jl
Z3MoZGV2KTsNCisNCiAJcmV0dXJuIDA7DQogfQ0KIA0KQEAgLTQ3MywxMiArNTg5LDEyIEBADQog
DQogCS8qIENsZWFyIHRoZSBHQVRUIGJhc2UuICovDQogCWlmICggc2MtPmNoaXB0eXBlID09IENI
SVBfSTgxMCApIHsNCi0JCVdSSVRFNChBR1BfSTgxMF9QR1RCTF9DVEwsIDApOw0KKwkJYnVzX3dy
aXRlXzQoc2MtPnNjX3Jlc1swXSwgQUdQX0k4MTBfUEdUQkxfQ1RMLCAwKTsNCiAJfSBlbHNlIHsN
CiAJCXVuc2lnbmVkIGludCBwZ3RibGN0bDsNCi0JCXBndGJsY3RsID0gUkVBRDQoQUdQX0k4MTBf
UEdUQkxfQ1RMKTsNCisJCXBndGJsY3RsID0gYnVzX3JlYWRfNChzYy0+c2NfcmVzWzBdLCBBR1Bf
STgxMF9QR1RCTF9DVEwpOw0KIAkJcGd0YmxjdGwgJj0gfjE7DQotCQlXUklURTQoQUdQX0k4MTBf
UEdUQkxfQ1RMLCBwZ3RibGN0bCk7DQorCQlidXNfd3JpdGVfNChzYy0+c2NfcmVzWzBdLCBBR1Bf
STgxMF9QR1RCTF9DVEwsIHBndGJsY3RsKTsNCiAJfQ0KIA0KIAkvKiBQdXQgdGhlIGFwZXJ0dXJl
IGJhY2sgdGhlIHdheSBpdCBzdGFydGVkLiAqLw0KQEAgLTQ4OSw2MSArNjA1LDI1IEBADQogCX0N
CiAJZnJlZShzYy0+Z2F0dCwgTV9BR1ApOw0KIA0KLQlpZiAoc2MtPmNoaXB0eXBlID09IENISVBf
STkxNSkgew0KLQkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgQUdQ
X0k5MTVfR01BRFIsDQotCQkJCSAgICAgc2MtPmdtKTsNCi0JCWJ1c19yZWxlYXNlX3Jlc291cmNl
KGRldiwgU1lTX1JFU19NRU1PUlksIEFHUF9JOTE1X0dUVEFEUiwNCi0JCQkJICAgICBzYy0+Z3R0
KTsNCi0JCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIEFHUF9JOTE1
X01NQURSLA0KLQkJCQkgICAgIHNjLT5yZWdzKTsNCi0JfSBlbHNlIHsNCi0JCWJ1c19yZWxlYXNl
X3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIEFHUF9JODEwX01NQURSLA0KLQkJCQkgICAg
IHNjLT5yZWdzKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHVfaW50MzJf
dA0KLWFncF9pODEwX2dldF9hcGVydHVyZShkZXZpY2VfdCBkZXYpDQotew0KLQlzdHJ1Y3QgYWdw
X2k4MTBfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOw0KLQl1aW50MzJfdCB0ZW1w
Ow0KLQl1X2ludDE2X3QgbWlzY2M7DQotDQotCXN3aXRjaCAoc2MtPmNoaXB0eXBlKSB7DQotCWNh
c2UgQ0hJUF9JODEwOg0KLQkJbWlzY2MgPSBwY2lfcmVhZF9jb25maWcoc2MtPmJkZXYsIEFHUF9J
ODEwX01JU0NDLCAyKTsNCi0JCWlmICgobWlzY2MgJiBBR1BfSTgxMF9NSVNDQ19XSU5TSVpFKSA9
PSBBR1BfSTgxMF9NSVNDQ19XSU5TSVpFXzMyKQ0KLQkJCXJldHVybiAzMiAqIDEwMjQgKiAxMDI0
Ow0KLQkJZWxzZQ0KLQkJCXJldHVybiA2NCAqIDEwMjQgKiAxMDI0Ow0KLQljYXNlIENISVBfSTgz
MDoNCi0JCXRlbXAgPSBwY2lfcmVhZF9jb25maWcoc2MtPmJkZXYsIEFHUF9JODMwX0dDQzEsIDIp
Ow0KLQkJaWYgKCh0ZW1wICYgQUdQX0k4MzBfR0NDMV9HTUFTSVpFKSA9PSBBR1BfSTgzMF9HQ0Mx
X0dNQVNJWkVfNjQpDQotCQkJcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7DQotCQllbHNlDQotCQkJ
cmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0Ow0KLQljYXNlIENISVBfSTg1NToNCi0JCXJldHVybiAx
MjggKiAxMDI0ICogMTAyNDsNCi0JY2FzZSBDSElQX0k5MTU6DQotCQkvKiBUaGUgZG9jdW1lbnRh
dGlvbiBzdGF0ZXMgdGhhdCBBR1BfSTkxNV9NU0FDIHNob3VsZCBoYXZlIGJpdA0KLQkJICogMSBz
ZXQgaWYgdGhlIGFwZXJ0dXJlIGlzIDEyOE1CIGluc3RlYWQgb2YgMjU2LiAgSG93ZXZlciwNCi0J
CSAqIHRoYXQgYml0IGFwcGVhcnMgdG8gbm90IGdldCBzZXQsIHNvIHdlIGluc3RlYWQgdXNlIHRo
ZQ0KLQkJICogYXBlcnR1cmUgcmVzb3VyY2Ugc2l6ZSwgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBj
b3JyZWN0Lg0KLQkJICovDQotCQlyZXR1cm4gcm1hbl9nZXRfc2l6ZShzYy0+Z20pOw0KLQl9DQor
CWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHNjLT5zY19yZXNfc3BlYywgc2MtPnNjX3Jlcyk7
DQogDQogCXJldHVybiAwOw0KIH0NCiANCisvKioNCisgKiBTZXRzIHRoZSBQQ0kgcmVzb3VyY2Ug
c2l6ZSBvZiB0aGUgYXBlcnR1cmUgb24gaTgzMC1jbGFzcyBhbmQgYmVsb3cgY2hpcHNldHMsDQor
ICogd2hpbGUgcmV0dXJuaW5nIGZhaWx1cmUgb24gbGF0ZXIgY2hpcHNldHMgd2hlbiBhbiBhY3R1
YWwgY2hhbmdlIGlzDQorICogcmVxdWVzdGVkLg0KKyAqDQorICogVGhpcyB3aG9sZSBmdW5jdGlv
biBpcyBsaWtlbHkgYm9ndXMsIGFzIHRoZSBrZXJuZWwgd291bGQgcHJvYmFibHkgbmVlZCB0bw0K
KyAqIHJlY29uZmlndXJlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIEFHUCBhcGVydHVyZSBpZiBhIGxh
cmdlciBzaXplIGlzIHJlcXVlc3RlZCwNCisgKiB3aGljaCBkb2Vzbid0IGhhcHBlbiBjdXJyZW50
bHkuDQorICovDQogc3RhdGljIGludA0KIGFncF9pODEwX3NldF9hcGVydHVyZShkZXZpY2VfdCBk
ZXYsIHVfaW50MzJfdCBhcGVydHVyZSkNCiB7DQogCXN0cnVjdCBhZ3BfaTgxMF9zb2Z0YyAqc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7DQogCXVfaW50MTZfdCBtaXNjYywgZ2NjMTsNCi0JdV9p
bnQzMl90IHRlbXA7DQogDQogCXN3aXRjaCAoc2MtPmNoaXB0eXBlKSB7DQogCWNhc2UgQ0hJUF9J
ODEwOg0KQEAgLTU4MCwzMiArNjYwLDU1IEBADQogCQlwY2lfd3JpdGVfY29uZmlnKHNjLT5iZGV2
LCBBR1BfSTgzMF9HQ0MxLCBnY2MxLCAyKTsNCiAJCWJyZWFrOw0KIAljYXNlIENISVBfSTg1NToN
Ci0JCWlmIChhcGVydHVyZSAhPSAxMjggKiAxMDI0ICogMTAyNCkgew0KLQkJCWRldmljZV9wcmlu
dGYoZGV2LCAiYmFkIGFwZXJ0dXJlIHNpemUgJWRcbiIsIGFwZXJ0dXJlKTsNCi0JCQlyZXR1cm4g
RUlOVkFMOw0KLQkJfQ0KLQkJYnJlYWs7DQogCWNhc2UgQ0hJUF9JOTE1Og0KLQkJdGVtcCA9IHBj
aV9yZWFkX2NvbmZpZyhkZXYsIEFHUF9JOTE1X01TQUMsIDEpOw0KLQkJdGVtcCAmPSB+QUdQX0k5
MTVfTVNBQ19HTUFTSVpFOw0KKwljYXNlIENISVBfSTk2NToNCisJY2FzZSBDSElQX0czMzoNCisJ
CXJldHVybiBhZ3BfZ2VuZXJpY19zZXRfYXBlcnR1cmUoZGV2LCBhcGVydHVyZSk7DQorCX0NCiAN
Ci0JCXN3aXRjaCAoYXBlcnR1cmUpIHsNCi0JCWNhc2UgMTI4ICogMTAyNCAqIDEwMjQ6DQotCQkJ
dGVtcCB8PSBBR1BfSTkxNV9NU0FDX0dNQVNJWkVfMTI4Ow0KLQkJCWJyZWFrOw0KLQkJY2FzZSAy
NTYgKiAxMDI0ICogMTAyNDoNCi0JCQl0ZW1wIHw9IEFHUF9JOTE1X01TQUNfR01BU0laRV8yNTY7
DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJCWRldmljZV9wcmludGYoZGV2LCAiYmFkIGFw
ZXJ0dXJlIHNpemUgJWRcbiIsIGFwZXJ0dXJlKTsNCi0JCQlyZXR1cm4gRUlOVkFMOw0KLQkJfQ0K
KwlyZXR1cm4gMDsNCit9DQogDQotCQlwY2lfd3JpdGVfY29uZmlnKGRldiwgQUdQX0k5MTVfTVNB
QywgdGVtcCwgMSk7DQotCQlicmVhazsNCisvKioNCisgKiBXcml0ZXMgYSBHVFQgZW50cnkgbWFw
cGluZyB0aGUgcGFnZSBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZw0KKyAq
IG9mIHRoZSBhcGVydHVyZSB0byB0aGUgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4NCisgKi8NCitz
dGF0aWMgdm9pZA0KK2FncF9pODEwX3dyaXRlX2d0dF9lbnRyeShkZXZpY2VfdCBkZXYsIGludCBv
ZmZzZXQsIHZtX29mZnNldF90IHBoeXNpY2FsLA0KKyAgICBpbnQgZW5hYmxlZCkNCit7DQorCXN0
cnVjdCBhZ3BfaTgxMF9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7DQorCXVfaW50
MzJfdCBwdGU7DQorDQorCXB0ZSA9ICh1X2ludDMyX3QpcGh5c2ljYWwgfCAxOw0KKwlpZiAoc2Mt
PmNoaXB0eXBlID09IENISVBfSTk2NSB8fCBzYy0+Y2hpcHR5cGUgPT0gQ0hJUF9HMzMpIHsNCisJ
CXB0ZSB8PSAocGh5c2ljYWwgJiAweDAwMDAwMDBmMDAwMDAwMDB1bGwpID4+IDI4Ow0KKwl9IGVs
c2Ugew0KKwkJLyogSWYgd2UgZG8gYWN0dWFsbHkgaGF2ZSBtZW1vcnkgYWJvdmUgNEdCIG9uIGFu
IG9sZGVyIHN5c3RlbSwNCisJCSAqIGNyYXNoIGNsZWFubHkgcmF0aGVyIHRoYW4gc2NyaWJibGUg
b24gc3lzdGVtIG1lbW9yeSwNCisJCSAqIHNvIHdlIGtub3cgd2UgbmVlZCB0byBmaXggaXQuDQor
CQkgKi8NCisJCUtBU1NFUlQoKHB0ZSAmIDB4MDAwMDAwMGYwMDAwMDAwMHVsbCkgPT0gMCwNCisJ
CSAgICAoIj40R0IgcGh5c2ljYWwgYWRkcmVzcyBpbiBhZ3AiKSk7DQogCX0NCiANCi0JcmV0dXJu
IDA7DQorCXN3aXRjaCAoc2MtPmNoaXB0eXBlKSB7DQorCWNhc2UgQ0hJUF9JODEwOg0KKwljYXNl
IENISVBfSTgzMDoNCisJY2FzZSBDSElQX0k4NTU6DQorCQlidXNfd3JpdGVfNChzYy0+c2NfcmVz
WzBdLA0KKwkJICAgIEFHUF9JODEwX0dUVCArIChvZmZzZXQgPj4gQUdQX1BBR0VfU0hJRlQpICog
NCwgcHRlKTsNCisJCWJyZWFrOw0KKwljYXNlIENISVBfSTkxNToNCisJY2FzZSBDSElQX0czMzoN
CisJCWJ1c193cml0ZV80KHNjLT5zY19yZXNbMV0sDQorCQkgICAgKG9mZnNldCA+PiBBR1BfUEFH
RV9TSElGVCkgKiA0LCBwdGUpOw0KKwkJYnJlYWs7DQorCWNhc2UgQ0hJUF9JOTY1Og0KKwkJYnVz
X3dyaXRlXzQoc2MtPnNjX3Jlc1swXSwNCisJCSAgICAob2Zmc2V0ID4+IEFHUF9QQUdFX1NISUZU
KSAqIDQgKyAoNTEyICogMTAyNCksIHB0ZSk7DQorCQlicmVhazsNCisJfQ0KIH0NCiANCiBzdGF0
aWMgaW50DQpAQCAtNjI1LDExICs3MjgsNyBAQA0KIAkJfQ0KIAl9DQogDQotCWlmIChzYy0+Y2hp
cHR5cGUgPT0gQ0hJUF9JOTE1KSB7DQotCQlXUklURUdUVCgob2Zmc2V0ID4+IEFHUF9QQUdFX1NI
SUZUKSAqIDQsIHBoeXNpY2FsIHwgMSk7DQotCX0gZWxzZSB7DQotCQlXUklURTQoQUdQX0k4MTBf
R1RUICsgKG9mZnNldCA+PiBBR1BfUEFHRV9TSElGVCkgKiA0LCBwaHlzaWNhbCB8IDEpOw0KLQl9
DQorCWFncF9pODEwX3dyaXRlX2d0dF9lbnRyeShkZXYsIG9mZnNldCwgcGh5c2ljYWwsIDEpOw0K
IA0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtNjQ5LDEyICs3NDgsOCBAQA0KIAkJfQ0KIAl9DQogDQot
CWlmIChzYy0+Y2hpcHR5cGUgPT0gQ0hJUF9JOTE1KSB7DQotCQlXUklURUdUVCgob2Zmc2V0ID4+
IEFHUF9QQUdFX1NISUZUKSAqIDQsIDApOw0KLQl9IGVsc2Ugew0KLQkJV1JJVEU0KEFHUF9JODEw
X0dUVCArIChvZmZzZXQgPj4gQUdQX1BBR0VfU0hJRlQpICogNCwgMCk7DQotCX0NCi0JDQorCWFn
cF9pODEwX3dyaXRlX2d0dF9lbnRyeShkZXYsIG9mZnNldCwgMCwgMCk7DQorDQogCXJldHVybiAw
Ow0KIH0NCiANCkBAIC04MTIsMTYgKzkwNyw4IEBADQogCQl9DQogCQkvKiBUaGUgbWVtb3J5J3Mg
YWxyZWFkeSB3aXJlZCBkb3duLCBqdXN0IHN0aWNrIGl0IGluIHRoZSBHVFQuICovDQogCQlmb3Ig
KGkgPSAwOyBpIDwgbWVtLT5hbV9zaXplOyBpICs9IEFHUF9QQUdFX1NJWkUpIHsNCi0JCQl1X2lu
dDMyX3QgcGh5c2ljYWwgPSBtZW0tPmFtX3BoeXNpY2FsICsgaTsNCi0NCi0JCQlpZiAoc2MtPmNo
aXB0eXBlID09IENISVBfSTkxNSkgew0KLQkJCQlXUklURUdUVCgoKG9mZnNldCArIGkpID4+IEFH
UF9QQUdFX1NISUZUKSAqIDQsDQotCQkJCSAgICBwaHlzaWNhbCB8IDEpOw0KLQkJCX0gZWxzZSB7
DQotCQkJCVdSSVRFNChBR1BfSTgxMF9HVFQgKw0KLQkJCQkgICAgKChvZmZzZXQgKyBpKSA+PiBB
R1BfUEFHRV9TSElGVCkgKiA0LA0KLQkJCQkgICAgcGh5c2ljYWwgfCAxKTsNCi0JCQl9DQorCQkJ
YWdwX2k4MTBfd3JpdGVfZ3R0X2VudHJ5KGRldiwgb2Zmc2V0ICsgaSwNCisJCQkgICAgbWVtLT5h
bV9waHlzaWNhbCArIGksIDEpOw0KIAkJfQ0KIAkJYWdwX2ZsdXNoX2NhY2hlKCk7DQogCQltZW0t
PmFtX29mZnNldCA9IG9mZnNldDsNCkBAIC04MzcsOCArOTI0LDggQEANCiAJCXJldHVybiBFSU5W
QUw7DQogDQogCWZvciAoaSA9IDA7IGkgPCBtZW0tPmFtX3NpemU7IGkgKz0gQUdQX1BBR0VfU0la
RSkgew0KLQkJV1JJVEU0KEFHUF9JODEwX0dUVCArIChvZmZzZXQgPj4gQUdQX1BBR0VfU0hJRlQp
ICogNCwNCi0JCSAgICAgICBpIHwgMyk7DQorCQlidXNfd3JpdGVfNChzYy0+c2NfcmVzWzBdLA0K
KwkJICAgIEFHUF9JODEwX0dUVCArIChpID4+IEFHUF9QQUdFX1NISUZUKSAqIDQsIGkgfCAzKTsN
CiAJfQ0KIA0KIAlyZXR1cm4gMDsNCkBAIC04NTgsMTUgKzk0NSw4IEBADQogCQl9DQogDQogCQlm
b3IgKGkgPSAwOyBpIDwgbWVtLT5hbV9zaXplOyBpICs9IEFHUF9QQUdFX1NJWkUpIHsNCi0JCQl2
bV9vZmZzZXRfdCBvZmZzZXQgPSBtZW0tPmFtX29mZnNldDsNCi0NCi0JCQlpZiAoc2MtPmNoaXB0
eXBlID09IENISVBfSTkxNSkgew0KLQkJCQlXUklURUdUVCgoKG9mZnNldCArIGkpID4+IEFHUF9Q
QUdFX1NISUZUKSAqIDQsDQotCQkJCSAgICAwKTsNCi0JCQl9IGVsc2Ugew0KLQkJCQlXUklURTQo
QUdQX0k4MTBfR1RUICsNCi0JCQkJICAgICgob2Zmc2V0ICsgaSkgPj4gQUdQX1BBR0VfU0hJRlQp
ICogNCwgMCk7DQotCQkJfQ0KKwkJCWFncF9pODEwX3dyaXRlX2d0dF9lbnRyeShkZXYsIG1lbS0+
YW1fb2Zmc2V0ICsgaSwNCisJCQkgICAgMCwgMCk7DQogCQl9DQogCQlhZ3BfZmx1c2hfY2FjaGUo
KTsNCiAJCW1lbS0+YW1faXNfYm91bmQgPSAwOw0KQEAgLTg4MCw4ICs5NjAsMTAgQEANCiAJaWYg
KCBzYy0+Y2hpcHR5cGUgIT0gQ0hJUF9JODEwICkNCiAJCXJldHVybiBFSU5WQUw7DQogDQotCWZv
ciAoaSA9IDA7IGkgPCBtZW0tPmFtX3NpemU7IGkgKz0gQUdQX1BBR0VfU0laRSkNCi0JCVdSSVRF
NChBR1BfSTgxMF9HVFQgKyAoaSA+PiBBR1BfUEFHRV9TSElGVCkgKiA0LCAwKTsNCisJZm9yIChp
ID0gMDsgaSA8IG1lbS0+YW1fc2l6ZTsgaSArPSBBR1BfUEFHRV9TSVpFKSB7DQorCQlidXNfd3Jp
dGVfNChzYy0+c2NfcmVzWzBdLA0KKwkJICAgIEFHUF9JODEwX0dUVCArIChpID4+IEFHUF9QQUdF
X1NISUZUKSAqIDQsIDApOw0KKwl9DQogDQogCXJldHVybiAwOw0KIH0NCkBAIC04OTQsNyArOTc2
LDcgQEANCiAJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWFncF9pODEwX2RldGFjaCksDQogDQog
CS8qIEFHUCBpbnRlcmZhY2UgKi8NCi0JREVWTUVUSE9EKGFncF9nZXRfYXBlcnR1cmUsCWFncF9p
ODEwX2dldF9hcGVydHVyZSksDQorCURFVk1FVEhPRChhZ3BfZ2V0X2FwZXJ0dXJlLAlhZ3BfZ2Vu
ZXJpY19nZXRfYXBlcnR1cmUpLA0KIAlERVZNRVRIT0QoYWdwX3NldF9hcGVydHVyZSwJYWdwX2k4
MTBfc2V0X2FwZXJ0dXJlKSwNCiAJREVWTUVUSE9EKGFncF9iaW5kX3BhZ2UsCWFncF9pODEwX2Jp
bmRfcGFnZSksDQogCURFVk1FVEhPRChhZ3BfdW5iaW5kX3BhZ2UsCWFncF9pODEwX3VuYmluZF9w
YWdlKSwNCkluZGV4OiBhZ3Bwcml2LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9uY3Zz
L3NyYy9zeXMvcGNpL2FncHByaXYuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAt
dSAtcjEuNSBhZ3Bwcml2LmgNCi0tLSBhZ3Bwcml2LmgJMTYgSnVuIDIwMDQgMDk6NDc6MjAgLTAw
MDAJMS41DQorKysgYWdwcHJpdi5oCTEyIEp1bCAyMDA3IDE3OjU1OjU2IC0wMDAwDQpAQCAtNjks
NiArNjksNyBAQA0KICAqLw0KIHN0cnVjdCBhZ3Bfc29mdGMgew0KIAlzdHJ1Y3QgcmVzb3VyY2UJ
ICAgICAgICAqYXNfYXBlcnR1cmU7CS8qIGxvY2F0aW9uIG9mIGFwZXJ0dXJlICovDQorCWludAkJ
CWFzX2FwZXJ0dXJlX3JpZDsNCiAJdV9pbnQzMl90CQlhc19tYXhtZW07CS8qIGFsbG9jYXRpb24g
dXBwZXIgYm91bmQgKi8NCiAJdV9pbnQzMl90CQlhc19hbGxvY2F0ZWQ7CS8qIGFtb3VudCBhbGxv
Y2F0ZWQgKi8NCiAJZW51bSBhZ3BfYWNxdWlyZV9zdGF0ZQlhc19zdGF0ZTsNCkBAIC04OCw5ICs4
OSwxMyBAQA0KIHZvaWQJCQlhZ3BfZmx1c2hfY2FjaGUodm9pZCk7DQogdV9pbnQ4X3QJCWFncF9m
aW5kX2NhcHMoZGV2aWNlX3QgZGV2KTsNCiBzdHJ1Y3QgYWdwX2dhdHQJICAgICAgICphZ3BfYWxs
b2NfZ2F0dChkZXZpY2VfdCBkZXYpOw0KK3ZvaWQJCQlhZ3Bfc2V0X2FwZXJ0dXJlX3Jlc291cmNl
KGRldmljZV90IGRldiwgaW50IHJpZCk7DQogdm9pZAkJICAgICAgICBhZ3BfZnJlZV9nYXR0KHN0
cnVjdCBhZ3BfZ2F0dCAqZ2F0dCk7DQogaW50CQkJYWdwX2dlbmVyaWNfYXR0YWNoKGRldmljZV90
IGRldik7DQogaW50CQkJYWdwX2dlbmVyaWNfZGV0YWNoKGRldmljZV90IGRldik7DQoraW50CQkJ
YWdwX2dlbmVyaWNfZ2V0X2FwZXJ0dXJlKGRldmljZV90IGRldik7DQoraW50CQkJYWdwX2dlbmVy
aWNfc2V0X2FwZXJ0dXJlKGRldmljZV90IGRldiwNCisJCQkJCQkgdV9pbnQzMl90IGFwZXJ0dXJl
KTsNCiBpbnQJCQlhZ3BfZ2VuZXJpY19lbmFibGUoZGV2aWNlX3QgZGV2LCB1X2ludDMyX3QgbW9k
ZSk7DQogc3RydWN0IGFncF9tZW1vcnkgICAgICAqYWdwX2dlbmVyaWNfYWxsb2NfbWVtb3J5KGRl
dmljZV90IGRldiwgaW50IHR5cGUsDQogCQkJCQkJIHZtX3NpemVfdCBzaXplKTsNCkluZGV4OiBh
Z3ByZWcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9wY2kvYWdw
cmVnLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE4DQpkaWZmIC11IC1yMS4xOCBhZ3ByZWcu
aA0KLS0tIGFncHJlZy5oCTUgSmFuIDIwMDcgMjI6NTU6MTkgLTAwMDAJMS4xOA0KKysrIGFncHJl
Zy5oCTkgSnVsIDIwMDcgMTY6NTc6NTEgLTAwMDANCkBAIC0xODAsMTEgKzE4MCwxOSBAQA0KICAq
IE1lbW9yeSBtYXBwZWQgcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgaTgxMCBjaGlwc2V0Lg0KICAqLw0K
ICNkZWZpbmUgQUdQX0k4MTBfUEdUQkxfQ1RMCTB4MjAyMA0KKy8qKg0KKyAqIFRoaXMgZmllbGQg
ZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGdsb2JhbCBHVFQgb24gdGhlIDk2NQ0K
KyAqIGFuZCBHMzMNCisgKi8NCisjZGVmaW5lIEFHUF9JODEwX1BHVEJMX1NJWkVfTUFTSwkweDAw
MDAwMDBlDQorI2RlZmluZSBBR1BfSTgxMF9QR1RCTF9TSVpFXzUxMktCCSgwIDw8IDEpDQorI2Rl
ZmluZSBBR1BfSTgxMF9QR1RCTF9TSVpFXzI1NktCCSgxIDw8IDEpDQorI2RlZmluZSBBR1BfSTgx
MF9QR1RCTF9TSVpFXzEyOEtCCSgyIDw8IDEpDQogI2RlZmluZSBBR1BfSTgxMF9EUlQJCTB4MzAw
MA0KICNkZWZpbmUgQUdQX0k4MTBfRFJUX1VOUE9QVUxBVEVEIDB4MDANCiAjZGVmaW5lIEFHUF9J
ODEwX0RSVF9QT1BVTEFURUQJMHgwMQ0KICNkZWZpbmUgQUdQX0k4MTBfR1RUCQkweDEwMDAwDQot
IA0KKw0KIC8qDQogICogQ29uZmlnIHJlZ2lzdGVycyBmb3IgaTgzME1HIGRldmljZSAwDQogICov
DQpAQCAtMTkyLDcgKzIwMCw3IEBADQogI2RlZmluZSBBR1BfSTgzMF9HQ0MxX0RFVjIJCTB4MDgN
CiAjZGVmaW5lIEFHUF9JODMwX0dDQzFfREVWMl9FTkFCTEVECTB4MDANCiAjZGVmaW5lIEFHUF9J
ODMwX0dDQzFfREVWMl9ESVNBQkxFRAkweDA4DQotI2RlZmluZSBBR1BfSTgzMF9HQ0MxX0dNUwkJ
MHg3MA0KKyNkZWZpbmUgQUdQX0k4MzBfR0NDMV9HTVMJCTB4ZjAgLyogVG9wIGJpdCByZXNlcnZl
ZCBwcmUtRzMzICovDQogI2RlZmluZSBBR1BfSTgzMF9HQ0MxX0dNU19TVE9MRU5fNTEyCTB4MjAN
CiAjZGVmaW5lIEFHUF9JODMwX0dDQzFfR01TX1NUT0xFTl8xMDI0CTB4MzANCiAjZGVmaW5lIEFH
UF9JODMwX0dDQzFfR01TX1NUT0xFTl84MTkyCTB4NDANCkBAIC0yNDQsNiArMjUyLDIxIEBADQog
I2RlZmluZSBBR1BfSTkxNV9NU0FDX0dNQVNJWkVfMjU2CTB4MDANCiANCiAvKg0KKyAqIEc5NjUg
cmVnaXN0ZXJzDQorICovDQorI2RlZmluZSBBR1BfSTk2NV9HVFRNTUFEUgkJMHgxMA0KKyNkZWZp
bmUgQUdQX0k5NjVfTVNBQwkJCTB4NjINCisjZGVmaW5lIEFHUF9JOTY1X01TQUNfR01BU0laRV8x
MjgJMHgwMA0KKyNkZWZpbmUgQUdQX0k5NjVfTVNBQ19HTUFTSVpFXzI1NgkweDAyDQorI2RlZmlu
ZSBBR1BfSTk2NV9NU0FDX0dNQVNJWkVfNTEyCTB4MDYNCisNCisvKg0KKyAqIEczMyByZWdpc3Rl
cnMNCisgKi8NCisjZGVmaW5lIEFHUF9HMzNfR0NDMV9HTVNfU1RPTEVOXzEyOE0JMHg4MA0KKyNk
ZWZpbmUgQUdQX0czM19HQ0MxX0dNU19TVE9MRU5fMjU2TQkweDkwDQorDQorLyoNCiAgKiBOVklE
SUEgbkZvcmNlL25Gb3JjZTIgcmVnaXN0ZXJzDQogICovDQogI2RlZmluZQlBR1BfTlZJRElBXzBf
QVBCQVNFCQkweDEwDQo=


--=-5YELsow3Fpr9UE+T3E/E--

--=-AXWcD71UA0EuCnCMobb0
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQBGlpU7HUdvYGzw6vcRAmScAJ9XE16Dp6YZMvoQqDi+EN/WMpuT1wCfbz0S
O/A4lvsK+ALpDkacjIY7vIQ=
=6K8w
-----END PGP SIGNATURE-----

--=-AXWcD71UA0EuCnCMobb0--



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