linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Jon Brenner" <jbrenner@TAOSinc.com>
To: "Jonathan Cameron" <jic23@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, "linux-iio" <linux-iio@vger.kernel.org>
Subject: [PATCH V1] TAOS tsl2x7x
Date: Fri, 10 Feb 2012 13:06:52 -0600	[thread overview]
Message-ID: <1328900812.15759.6.camel@jonz-ub2> (raw)

VEFPUyBkZXZpY2UgZHJpdmVyIGZvciB0c2wvdG1kIDI3NzEgYW5kIDI3NzIgZGV2aWNlIGZhbWls
aWVzIChpbmMgYWxsIHZhcmlhbnRzKS4NCg0KU2lnbmVkLW9mZi1ieTogSm9uIEJyZW5uZXIgPGpi
cmVubmVyQHRhb3NpbmMuY29tPg0KDQotLS0NCiAuLi4vaWlvL0RvY3VtZW50YXRpb24vc3lzZnMt
YnVzLWlpby1saWdodC10c2wyeDd4ICB8ICAgNzEgKw0KIGRyaXZlcnMvc3RhZ2luZy9paW8vbGln
aHQvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICAxMSArDQogZHJpdmVycy9zdGFnaW5nL2lp
by9saWdodC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAxICsNCiBkcml2ZXJzL3N0YWdp
bmcvaWlvL2xpZ2h0L3RzbDJ4N3hfY29yZS5jICAgICAgICAgICB8IDIwNTMgKysrKysrKysrKysr
KysrKysrKysNCiBkcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L3RzbDJ4N3hfY29yZS5oICAgICAg
ICAgICB8ICAxMzggKysNCiA1IGZpbGVzIGNoYW5nZWQsIDIyNzQgaW5zZXJ0aW9ucygrKSwgMCBk
ZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRh
dGlvbi9zeXNmcy1idXMtaWlvLWxpZ2h0LXRzbDJ4N3ggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0Rv
Y3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodC10c2wyeDd4DQpuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KaW5kZXggMDAwMDAwMC4uZjFiYjVmNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy
cy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3N5c2ZzLWJ1cy1paW8tbGlnaHQtdHNsMng3eA0K
QEAgLTAsMCArMSw3MSBAQA0KK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9kZXZpY2Vbbl0v
bHV4X3RhYmxlDQorS2VybmVsVmVyc2lvbjoJMi42LjM3DQorQ29udGFjdDoJbGludXgtaWlvQHZn
ZXIua2VybmVsLm9yZw0KK0Rlc2NyaXB0aW9uOg0KKwkJVGhpcyBwcm9wZXJ0eSBnZXRzL3NldHMg
dGhlIHRhYmxlIG9mIGNvZWZmaWNpZW50cw0KKwkJdXNlZCBpbiBjYWxjdWxhdGluZyBpbGx1bWlu
YW5jZSBpbiBsdXguDQorDQorV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9p
bGx1bWluYW5jZTBfY2FsaWJyYXRlDQorS2VybmVsVmVyc2lvbjoJMi42LjM3DQorQ29udGFjdDoJ
bGludXgtaWlvQHZnZXIua2VybmVsLm9yZw0KK0Rlc2NyaXB0aW9uOg0KKwkJVGhpcyBwcm9wZXJ0
eSBjYXVzZXMgYW4gaW50ZXJuYWwgY2FsaWJyYXRpb24gb2YgdGhlIGFscyBnYWluIHRyaW0NCisJ
CXZhbHVlIHdoaWNoIGlzIGxhdGVyIHVzZWQgaW4gY2FsY3VsYXRpbmcgaWxsdW1pbmFuY2UgaW4g
bHV4Lg0KKw0KK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9kZXZpY2Vbbl0vaWxsdW1pbmFu
Y2UwX3RocmVzaF9mYWxsaW5nX3ZhbHVlDQorS2VybmVsVmVyc2lvbjoJMy4zLXJjMQ0KK0NvbnRh
Y3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcNCitEZXNjcmlwdGlvbjoNCisJCUxvdyAoZmFs
bGluZykgdHJpZ2dlciBwb2ludCBmb3IgdGhlIGludGVybmFsIEFMUyBjb21wYXJpc29uDQorCQlm
dW5jdGlvbiBmb3IgaW50ZXJydXB0IGdlbmVyYXRpb24uDQorDQorV2hhdDoJCS9zeXMvYnVzL2lp
by9kZXZpY2VzL2RldmljZVtuXS9pbGx1bWluYW5jZTBfdGhyZXNoX3Jpc2luZ192YWx1ZQ0KK0tl
cm5lbFZlcnNpb246CTMuMy1yYzENCitDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3Jn
DQorRGVzY3JpcHRpb246DQorCQloaWdoIChyaXNpbmcpIHRyaWdnZXIgcG9pbnQgZm9yIHRoZSBp
bnRlcm5hbCBBTFMgY29tcGFyaXNvbg0KKwkJZnVuY3Rpb24gZm9yIGludGVycnVwdCBnZW5lcmF0
aW9uLg0KKw0KK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9kZXZpY2Vbbl0vaWxsdW1pbmFu
Y2UwX2JvdGhfcmF3DQorS2VybmVsVmVyc2lvbjoJMy4zLXJjMQ0KK0NvbnRhY3Q6CWxpbnV4LWlp
b0B2Z2VyLmtlcm5lbC5vcmcNCitEZXNjcmlwdGlvbjoNCisJCVNpbXVsdGFpbmlvdXMgQUxTIGNo
YW5uZWwgMSBhbmQgY2hhbm5lbCAyIGRhdGEgcmVwcmVzZW50ZWQgYXMNCisJCWEgMzIgYml0IGlu
dGVnZXIuDQorDQorV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9wcm94aW1p
dHlfY2FsaWJyYXRlDQorS2VybmVsVmVyc2lvbjoJMy4zLXJjMQ0KK0NvbnRhY3Q6CWxpbnV4LWlp
b0B2Z2VyLmtlcm5lbC5vcmcNCitEZXNjcmlwdGlvbjoNCisJCUNhdXNlcyBhbiByZWNhbGN1bGF0
aW9uIGFuZCBhZGp1c3RtZW50IHRvIHRoZQ0KKwkJcHJveGltaXR5X3RocmVzaF9yaXNpbmdfdmFs
dWUuDQorDQorV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9wcm94aW1pdHlf
dGhyZXNoX2ZhbGxpbmdfdmFsdWUNCitLZXJuZWxWZXJzaW9uOgkzLjMtcmMxDQorQ29udGFjdDoJ
bGludXgtaWlvQHZnZXIua2VybmVsLm9yZw0KK0Rlc2NyaXB0aW9uOg0KKwkJTG93IChmYWxsaW5n
KSB0cmlnZ2VyIHBvaW50IGZvciB0aGUgaW50ZXJuYWwgcHJveGltaXR5IGNvbXBhcmlzb24NCisJ
CWZ1bmN0aW9uIGZvciBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4NCisNCitXaGF0OgkJL3N5cy9idXMv
aWlvL2RldmljZXMvZGV2aWNlW25dL3Byb3hpbWl0eV90aHJlc2hfcmlzaW5nX3ZhbHVlDQorS2Vy
bmVsVmVyc2lvbjoJMy4zLXJjMQ0KK0NvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcN
CitEZXNjcmlwdGlvbjoNCisJCWhpZ2ggKHJpc2luZykgdHJpZ2dlciBwb2ludCBmb3IgdGhlIGlu
dGVybmFsIHByb3hpbWl0eSBjb21wYXJpc29uDQorCQlmdW5jdGlvbiBmb3IgaW50ZXJydXB0IGdl
bmVyYXRpb24uDQorDQorV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9wcm94
aW1pdHlfY2FsaWJzY2FsZQ0KK0tlcm5lbFZlcnNpb246CTMuMy1yYzENCitDb250YWN0OglsaW51
eC1paW9Admdlci5rZXJuZWwub3JnDQorRGVzY3JpcHRpb246DQorCQlIYXJkd2FyZSBvciBzb2Z0
d2FyZSBhcHBsaWVkIGNhbGlicmF0aW9uIHNjYWxlIGZhY3RvciBhc3N1bWVkDQorCQl0byBhY2Nv
dW50IGZvciBhdHRlbnVhdGlvbiBkdWUgdG8gaW5kdXN0cmlhbCBkZXNpZ24gKGdsYXNzDQorCQlm
aWx0ZXJzIG9yIGFwZXJ0dXJlIGhvbGVzKS4NCisNCitXaGF0OgkJL3N5cy9idXMvaWlvL2Rldmlj
ZXMvZGV2aWNlW25dL3Byb3hpbWl0eV9yYXcNCitLZXJuZWxWZXJzaW9uOgkzLjMtcmMxDQorQ29u
dGFjdDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZw0KK0Rlc2NyaXB0aW9uOg0KKwkJU3RhdGUg
b2YgcHJveGltaXR5IGRldGVjdGlvbiBiYXNlZCBvbiB0aGUNCisJCXByb3hpbWl0eV90aHJlc2hf
cmlzaW5nX3ZhbHVlLg0KKw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQv
S2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZw0KaW5kZXggZTdlOTE1
OS4uMjlkZTMzMyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZp
Zw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9LY29uZmlnDQpAQCAtMzEsNCArMzEs
MTUgQEAgY29uZmlnIFRTTDI1ODMNCiAJIFByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBUQU9TIHRz
bDI1ODAsIHRzbDI1ODEgYW5kIHRzbDI1ODMgZGV2aWNlcy4NCiAJIEFjY2VzcyBBTFMgZGF0YSB2
aWEgaWlvLCBzeXNmcy4NCg0KKwkgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBt
b2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQ0KKwkgd2lsbCBiZSBjYWxsZWQgdHNsMjU4My4NCisN
Citjb25maWcgVFNMMng3eA0KKwl0cmlzdGF0ZSAiVEFPUyBUU0wvVE1EMng3MSBhbmQgVFNML1RN
RDJ4NzIgRmFtaWx5IG9mIGxpZ2h0IGFuZCBwcm94aW1pdHkgc2Vuc29ycyINCisJZGVwZW5kcyBv
biBJMkMNCisJaGVscA0KKwkgU3VwcG9ydCBmb3I6IHRzbDI1NzEsIHRzbDI2NzEsIHRtZDI2NzEs
IHRzbDI3NzEsIHRtZDI3NzEsIHRzbDI1NzIsIHRzbDI2NzIsDQorCSB0bWQyNjcyLCB0c2wyNzcy
LCB0bWQyNzcyIGRldmljZXMuDQorCSBQcm92aWRlcyBpaW9fZXZlbnRzIGFuZCBkaXJlY3QgYWNj
ZXNzIHZpYSBzeXNmcy4NCisNCiBlbmRtZW51DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n
L2lpby9saWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvTWFrZWZpbGUN
CmluZGV4IDMwMTFmYmYuLmZmMTJjNGIgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlv
L2xpZ2h0L01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L01ha2VmaWxl
DQpAQCAtNSwzICs1LDQgQEANCiBvYmotJChDT05GSUdfU0VOU09SU19UU0wyNTYzKQkrPSB0c2wy
NTYzLm8NCiBvYmotJChDT05GSUdfU0VOU09SU19JU0wyOTAxOCkJKz0gaXNsMjkwMTgubw0KIG9i
ai0kKENPTkZJR19UU0wyNTgzKQkrPSB0c2wyNTgzLm8NCitvYmotJChDT05GSUdfVFNMMng3eCkJ
Kz0gdHNsMng3eF9jb3JlLm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0
L3RzbDJ4N3hfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyeDd4X2NvcmUu
Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjY3MWY0NzYNCi0tLSAvZGV2
L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMng3eF9jb3JlLmMNCkBA
IC0wLDAgKzEsMjA1MyBAQA0KKy8qDQorICogRGV2aWNlIGRyaXZlciBmb3IgbW9uaXRvcmluZyBh
bWJpZW50IGxpZ2h0IGludGVuc2l0eSBpbiAobHV4KQ0KKyAqIGFuZCBwcm94aW1pdHkgZGV0ZWN0
aW9uIChwcm94KSB3aXRoaW4gdGhlIFRBT1MgVFNMMlg3WCBmYW1pbHkgb2YgZGV2aWNlcy4NCisg
Kg0KKyAqIENvcHlyaWdodCAoYykgMjAxMiwgVEFPUyBDb3Jwb3JhdGlvbi4NCisgKg0KKyAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQNCisg
KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD
SEFOVEFCSUxJVFkgb3INCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yDQorICogbW9yZSBkZXRhaWxzLg0K
KyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYWxvbmcNCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLA0KKyAqIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgICAgICAgIDAyMTEwLTEzMDEsIFVT
QS4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4
L2kyYy5oPg0KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxh
eS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4NCisjaW5jbHVkZSA8bGludXgvbXV0ZXgu
aD4NCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw
dC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGlu
dXgvaW5wdXQuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9w
bS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvdmVyc2lv
bi5oPg0KKw0KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3N0YXQu
aD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgInRzbDJ4N3hfY29yZS5o
Ig0KKyNpbmNsdWRlICIuLi9ldmVudHMuaCINCisjaW5jbHVkZSAiLi4vYnVmZmVyLmgiDQorI2lu
Y2x1ZGUgIi4uL2lpby5oIg0KKyNpbmNsdWRlICIuLi9zeXNmcy5oIg0KKw0KKy8qIENhbCBkZWZz
Ki8NCisjZGVmaW5lIFBST1hfU1RBVF9DQUwgICAgICAgIDANCisjZGVmaW5lIFBST1hfU1RBVF9T
QU1QICAgICAgIDENCisjZGVmaW5lIE1BWF9TQU1QTEVTX0NBTCAgICAgIDIwMA0KKw0KKy8qIFRT
TDJYN1ggRGV2aWNlIElEICovDQorI2RlZmluZSBUUklUT05fSUQgICAgMHgwMA0KKyNkZWZpbmUg
U1dPUkRGSVNIX0lEIDB4MzANCisjZGVmaW5lIEhBTElCVVRfSUQgICAweDIwDQorDQorLyogTHV4
IGNhbGN1bGF0aW9uIGNvbnN0YW50cyAqLw0KKyNkZWZpbmUgVFNMMlg3WF9MVVhfQ0FMQ19PVkVS
X0ZMT1cgICAgICAgIDY1NTM1DQorDQorLyogVEFPUyB0eHgyeDd4IERldmljZSBmYW1pbHkgbWVt
YmVycyAqLw0KK2VudW0gew0KKwl0c2wyNTcxLA0KKwl0c2wyNjcxLA0KKwl0bWQyNjcxLA0KKwl0
c2wyNzcxLA0KKwl0bWQyNzcxLA0KKwl0c2wyNTcyLA0KKwl0c2wyNjcyLA0KKwl0bWQyNjcyLA0K
Kwl0c2wyNzcyLA0KKwl0bWQyNzcyDQorfTsNCisNCitlbnVtIHsNCisJVFNMMlg3WF9DSElQX1VO
S05PV04gPSAwLA0KKwlUU0wyWDdYX0NISVBfV09SS0lORyA9IDEsDQorCVRTTDJYN1hfQ0hJUF9T
VVNQRU5ERUQgPSAyDQorfTsNCisNCisvKiBQZXItZGV2aWNlIGRhdGEgKi8NCitzdHJ1Y3QgdHNs
Mng3eF9hbHNfaW5mbyB7DQorCXUxNiBhbHNfY2gwOw0KKwl1MTYgYWxzX2NoMTsNCisJdTE2IGx1
eDsNCit9Ow0KKw0KKy8qIHByb3hpbWl0eSBkYXRhICovDQorc3RydWN0IHRzbDJ4N3hfcHJveF9p
bmZvIHsNCisJdTE2IHByb3hfZGF0YTsNCisJaW50IHByb3hfZXZlbnQ7DQorfTsNCisNCitzdHJ1
Y3QgcHJveF9zdGF0IHsNCisJdTE2IG1pbjsNCisJdTE2IG1heDsNCisJdTE2IG1lYW47DQorCXVu
c2lnbmVkIGxvbmcgc3RkZGV2Ow0KK307DQorDQorc3RydWN0IHRzbDJ4N3hfc2V0dGluZ3Mgew0K
KwlpbnQgYWxzX3RpbWU7DQorCWludCBhbHNfZ2FpbjsNCisJaW50IGFsc19nYWluX3RyaW07DQor
CWludCB3YWl0X3RpbWU7DQorCWludCBwcnhfdGltZTsNCisJaW50IHByb3hfZ2FpbjsNCisJaW50
IHByb3hfY29uZmlnOw0KKwlpbnQgYWxzX2NhbF90YXJnZXQ7DQorCXU4ICBpbnRlcnJ1cHRzX2Vu
Ow0KKwl1OCAgYWxzX3BlcnNpc3RlbmNlOw0KKwlpbnQgYWxzX3RocmVzaF9sb3c7DQorCWludCBh
bHNfdGhyZXNoX2hpZ2g7DQorCWludCBwcm94X3RocmVzX2xvdzsNCisJaW50IHByb3hfdGhyZXNf
aGlnaDsNCisJaW50IHByb3hfcHVsc2VfY291bnQ7DQorCWludCBwcm94X21heF9zYW1wbGVzX2Nh
bDsvKiBmb3IgY2FsaWJyYXRpb24gbW9kZSovDQorDQorfTsNCisNCitzdHJ1Y3QgdHNsMlg3WF9j
aGlwX2luZm8gew0KKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYwljaGFubmVsWzBdOw0KKwljb25zdCBz
dHJ1Y3QgaWlvX2luZm8JKmluZm87DQorfTsNCisNCitzdHJ1Y3QgdHNsMlg3WF9jaGlwIHsNCisJ
a2VybmVsX3Vsb25nX3QgaWQ7DQorCXN0cnVjdCBtdXRleCBwcm94X211dGV4Ow0KKwlzdHJ1Y3Qg
bXV0ZXggYWxzX211dGV4Ow0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50Ow0KKwlzdHJ1Y3Qg
aWlvX2RldiAqaWlvX2RldjsNCisJc3RydWN0IHRzbDJ4N3hfcHJveF9pbmZvIHByb3hfY3VyX2lu
Zm87DQorCXN0cnVjdCB0c2wyeDd4X2Fsc19pbmZvIGFsc19jdXJfaW5mbzsNCisJc3RydWN0IHRz
bDJ4N3hfc2V0dGluZ3MgdHNsMng3eF9zZXR0aW5nczsNCisJc3RydWN0IHRzbDJYN1hfcGxhdGZv
cm1fZGF0YSAqcGRhdGE7DQorCWludCBhbHNfdGltZV9zY2FsZTsNCisJaW50IGFsc19zYXR1cmF0
aW9uOw0KKwlpbnQgdHNsMng3eF9jaGlwX3N0YXR1czsNCisJdTggdHNsMng3eF9jb25maWdbVFNM
Mlg3WF9SRUdfTUFYXTsNCisJYm9vbCBpbml0X2RvbmU7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCB3
b3JrX3RocmVzaDsNCisJczY0IGV2ZW50X3RpbWVzdGFtcDsNCisJLyogVGhpcyBzdHJ1Y3R1cmUg
aXMgaW50ZW50aW9uYWxseSBsYXJnZSB0byBhY2NvbW1vZGF0ZQ0KKwkgKiB1cGRhdGVzIHZpYSBz
eXNmcy4gKi8NCisJLyogU2l6ZWQgdG8gOSA9IG1heCA4IHNlZ21lbnRzICsgMSB0ZXJtaW5hdGlv
biBzZWdtZW50ICovDQorCS8qIEFzc3VtcHRpb24gaXMgb25lIGFuZCBvbmx5IG9uZSB0eXBlIG9m
IGdsYXNzIHVzZWQgICovDQorCXN0cnVjdCB0c2wyeDd4X2x1eCB0c2wyeDd4X2RldmljZV9sdXhb
TUFYX1RBQkxFX1NJWkVdOw0KK307DQorDQorLyogRGlmZmVyZW50IGRldmljZXMgcmVxdWlyZSBk
aWZmZXJlbnQgY29lZmZpY2VudHMgKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0IHRzbDJ4N3hfbHV4
IHRzbDJ4NzFfbHV4X3RhYmxlW10gPSB7DQorCXsgMTQ0NjEsICAgNjExLCAgIDEyMTEgfSwNCisJ
eyAxODU0MCwgICAzNTIsICAgIDYyMyB9LA0KKwl7ICAgICAwLCAgICAgMCwgICAgICAwIH0sDQor
fTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHRzbDJ4N3hfbHV4IHRtZDJ4NzFfbHV4X3RhYmxl
W10gPSB7DQorCXsgMTE2MzUsICAgMTE1LCAgICAyNTYgfSwNCisJeyAxNTUzNiwgICAgODcsICAg
IDE3OSB9LA0KKwl7ICAgICAwLCAgICAgMCwgICAgICAwIH0sDQorfTsNCisNCitzdGF0aWMgY29u
c3Qgc3RydWN0IHRzbDJ4N3hfbHV4IHRzbDJ4NzJfbHV4X3RhYmxlW10gPSB7DQorCXsgMTQwMTMs
ICAgNDY2LCAgIDkxNyB9LA0KKwl7IDE4MjIyLCAgIDMxMCwgICA1NTIgfSwNCisJeyAgICAgMCwg
ICAgIDAsICAgICAwIH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHRzbDJ4N3hfbHV4
IHRtZDJ4NzJfbHV4X3RhYmxlW10gPSB7DQorCXsgMTMyMTgsICAgMTMwLCAgIDI2MiB9LA0KKwl7
IDE3NTkyLCAgIDkyLCAgICAxNjkgfSwNCisJeyAgICAgMCwgICAgIDAsICAgICAwIH0sDQorfTsN
CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHRzbDJ4N3hfbHV4ICp0c2wyeDd4X2RlZmF1bHRfbHV4
X3RhYmxlX2dyb3VwW10gPSB7DQorCVt0c2wyNTcxXSA9IHRzbDJ4NzFfbHV4X3RhYmxlLA0KKwlb
dHNsMjY3MV0gPQl0c2wyeDcxX2x1eF90YWJsZSwNCisJW3RtZDI2NzFdID0JdG1kMng3MV9sdXhf
dGFibGUsDQorCVt0c2wyNzcxXSA9CXRzbDJ4NzFfbHV4X3RhYmxlLA0KKwlbdG1kMjc3MV0gPQl0
bWQyeDcxX2x1eF90YWJsZSwNCisJW3RzbDI1NzJdID0JdHNsMng3Ml9sdXhfdGFibGUsDQorCVt0
c2wyNjcyXSA9CXRzbDJ4NzJfbHV4X3RhYmxlLA0KKwlbdG1kMjY3Ml0gPSB0bWQyeDcyX2x1eF90
YWJsZSwNCisJW3RzbDI3NzJdID0JdHNsMng3Ml9sdXhfdGFibGUsDQorCVt0bWQyNzcyXSA9CXRt
ZDJ4NzJfbHV4X3RhYmxlLA0KK307DQorDQorc3RydWN0IGFsc19nYWluYWRqIHsNCisJczE2IGNo
MDsNCisJczE2IGNoMTsNCit9Ow0KKw0KKy8qIFVzZWQgdG8gdmFsaWRhdGUgdGhlIEFMUyBnYWlu
IHNlbGVjdGlvbiBpbmRleCAqLw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxzX2dhaW5hZGogdHNs
Mlg3WF9hbHNfZ2FpbmFkaltdID0gew0KKwl7IDEsIDEgfSwNCisJeyA4LCA4IH0sDQorCXsgMTYs
IDE2IH0sDQorCXsgMTIwLCAxMjAgfQ0KK307DQorDQorDQorLyogTm90IHVzaW5nIGNoYW5uZWxz
ICovDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIHRzbDJYN1hfY2hhbm5lbHNb
XSA9IHt9Ow0KKw0KKy8qDQorICogUmVhZCBhIG51bWJlciBvZiBieXRlcyBzdGFydGluZyBhdCBy
ZWdpc3RlciAocmVnKSBsb2NhdGlvbi4NCisgKiBSZXR1cm4gMCwgb3IgaTJjX3NtYnVzX3dyaXRl
X2J5dGUgRVJST1IgY29kZS4NCisgKi8NCitzdGF0aWMgaW50DQordHNsMng3eF9pMmNfcmVhZChz
dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4ICp2YWwsIHVuc2lnbmVkIGludCBs
ZW4pDQorew0KKwlpbnQgcmV0Ow0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IGxlbjsg
aSsrKSB7DQorCQkvKiBzZWxlY3QgcmVnaXN0ZXIgdG8gd3JpdGUgKi8NCisJCXJldCA9IGkyY19z
bWJ1c193cml0ZV9ieXRlKGNsaWVudCwgKFRTTDJYN1hfQ01EX1JFRyB8IHJlZykpOw0KKwkJaWYg
KHJldCA8IDApIHsNCisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInRzbDJ4N3hfaTJjX3JlYWQg
ZmFpbGVkIHRvIHdyaXRlIg0KKwkJCQkiIHJlZ2lzdGVyICV4XG4iLCByZWcpOw0KKwkJCXJldHVy
biByZXQ7DQorCQl9DQorCQkvKiByZWFkIHRoZSBkYXRhICovDQorCQkqdmFsID0gaTJjX3NtYnVz
X3JlYWRfYnl0ZShjbGllbnQpOw0KKwkJdmFsKys7DQorCQlyZWcrKzsNCisJfQ0KKwlyZXR1cm4g
MDsNCit9DQorDQorLyoNCisgKiBSZWFkcyBhbmQgY2FsY3VsYXRlcyBjdXJyZW50IGx1eCB2YWx1
ZS4NCisgKiBUaGUgcmF3IGNoMCBhbmQgY2gxIHZhbHVlcyBvZiB0aGUgYW1iaWVudCBsaWdodCBz
ZW5zZWQgaW4gdGhlIGxhc3QNCisgKiBpbnRlZ3JhdGlvbiBjeWNsZSBhcmUgcmVhZCBmcm9tIHRo
ZSBkZXZpY2UuDQorICogVGltZSBzY2FsZSBmYWN0b3IgYXJyYXkgdmFsdWVzIGFyZSBhZGp1c3Rl
ZCBiYXNlZCBvbiB0aGUgaW50ZWdyYXRpb24gdGltZS4NCisgKiBUaGUgcmF3IHZhbHVlcyBhcmUg
bXVsdGlwbGllZCBieSBhIHNjYWxlIGZhY3RvciwgYW5kIGRldmljZSBnYWluIGlzIG9idGFpbmVk
DQorICogdXNpbmcgZ2FpbiBpbmRleC4gTGltaXQgY2hlY2tzIGFyZSBkb25lIG5leHQsIHRoZW4g
dGhlIHJhdGlvIG9mIGEgbXVsdGlwbGUNCisgKiBvZiBjaDEgdmFsdWUsIHRvIHRoZSBjaDAgdmFs
dWUsIGlzIGNhbGN1bGF0ZWQuIFRoZSBhcnJheSB0c2wyeDd4X2RldmljZV9sdXhbXQ0KKyAqIGRl
Y2xhcmVkIGFib3ZlIGlzIHRoZW4gc2Nhbm5lZCB0byBmaW5kIHRoZSBmaXJzdCByYXRpbyB2YWx1
ZSB0aGF0IGlzIGp1c3QNCisgKiBhYm92ZSB0aGUgcmF0aW8gd2UganVzdCBjYWxjdWxhdGVkLiBU
aGUgY2gwIGFuZCBjaDEgbXVsdGlwbGllciBjb25zdGFudHMgaW4NCisgKiB0aGUgYXJyYXkgYXJl
IHRoZW4gdXNlZCBhbG9uZyB3aXRoIHRoZSB0aW1lIHNjYWxlIGZhY3RvciBhcnJheSB2YWx1ZXMs
IHRvDQorICogY2FsY3VsYXRlIHRoZSBsdXguDQorICovDQorc3RhdGljIGludCB0c2wyeDd4X2dl
dF9sdXgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikNCit7DQorCXUxNiBjaDAsIGNoMTsgLyog
c2VwYXJhdGVkIGNoMC9jaDEgZGF0YSBmcm9tIGRldmljZSAqLw0KKwl1MzIgbHV4OyAvKiByYXcg
bHV4IGNhbGN1bGF0ZWQgZnJvbSBkZXZpY2UgZGF0YSAqLw0KKwl1NjQgbHV4NjQ7DQorCXUzMiBy
YXRpbzsNCisjcHJhZ21hIHBhY2soNCkNCisJdTggYnVmWzRdOw0KKwlzdHJ1Y3QgdHNsMng3eF9s
dXggKnA7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAgPSBpaW9fcHJpdihpbmRpb19kZXYp
Ow0KKwlpbnQgaSwgcmV0Ow0KKwl1MzIgY2gwbHV4ID0gMDsNCisJdTMyIGNoMWx1eCA9IDA7DQor
DQorCWlmIChtdXRleF90cnlsb2NrKCZjaGlwLT5hbHNfbXV0ZXgpID09IDApIHsNCisJCWRldl9p
bmZvKCZjaGlwLT5jbGllbnQtPmRldiwgInRzbDJ4N3hfZ2V0X2x1eCBkZXZpY2UgaXMgYnVzeVxu
Iik7DQorCQlyZXR1cm4gY2hpcC0+YWxzX2N1cl9pbmZvLmx1eDsgLyogYnVzeSwgc28gcmV0dXJu
IExBU1QgVkFMVUUgKi8NCisJfQ0KKw0KKwlpZiAoY2hpcC0+dHNsMng3eF9jaGlwX3N0YXR1cyAh
PSBUU0wyWDdYX0NISVBfV09SS0lORykgew0KKwkJLyogZGV2aWNlIGlzIG5vdCBlbmFibGVkICov
DQorCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwgInRzbDJ4N3hfZ2V0X2x1eCBkZXZpY2Ug
aXMgbm90IGVuYWJsZWRcbiIpOw0KKwkJcmV0ID0gLUVCVVNZIDsNCisJCWdvdG8gb3V0X3VubG9j
azsNCisJfQ0KKw0KKwlyZXQgPSB0c2wyeDd4X2kyY19yZWFkKGNoaXAtPmNsaWVudCwNCisJCShU
U0wyWDdYX0NNRF9SRUcgfCBUU0wyWDdYX1NUQVRVUyksICZidWZbMF0sIDEpOw0KKwlpZiAocmV0
IDwgMCkgew0KKwkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsDQorCQkJInRzbDJ4N3hfZ2V0
X2x1eCBmYWlsZWQgdG8gcmVhZCBDTURfUkVHXG4iKTsNCisJCWdvdG8gb3V0X3VubG9jazsNCisJ
fQ0KKwkvKiBpcyBkYXRhIG5ldyAmIHZhbGlkICovDQorCWlmICghKGJ1ZlswXSAmIFRTTDJYN1hf
U1RBX0FEQ19WQUxJRCkpIHsNCisJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJCSJ0
c2wyeDd4X2dldF9sdXggZGF0YSBub3QgdmFsaWQgeWV0XG4iKTsNCisJCXJldCA9IGNoaXAtPmFs
c19jdXJfaW5mby5sdXg7IC8qIHJldHVybiBMQVNUIFZBTFVFICovDQorCQlnb3RvIG91dF91bmxv
Y2s7DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KKwkJcmV0ID0gdHNsMng3
eF9pMmNfcmVhZChjaGlwLT5jbGllbnQsDQorCQkJKFRTTDJYN1hfQ01EX1JFRyB8IChUU0wyWDdY
X0FMU19DSEFOMExPICsgaSkpLA0KKwkJCSZidWZbaV0sIDEpOw0KKwkJaWYgKHJldCA8IDApIHsN
CisJCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwNCisJCQkJInRzbDJ4N3hfZ2V0X2x1eCBm
YWlsZWQgdG8gcmVhZCINCisJCQkJIiByZXQ6ICV4XG4iLCByZXQpOw0KKwkJCWdvdG8gb3V0X3Vu
bG9jazsNCisJCX0NCisJfQ0KKw0KKwkvKiBjbGVhciBzdGF0dXMsIHJlYWxseSBpbnRlcnJ1cHQg
c3RhdHVzICggYXJlIG9mZiksDQorCWJ1dCB3ZSB1c2UgdGhlIGJpdCBhbnl3YXkgKi8NCisJcmV0
ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2hpcC0+Y2xpZW50LA0KKwkJKFRTTDJYN1hfQ01EX1JF
RyB8DQorCQkJCVRTTDJYN1hfQ01EX1NQTF9GTiB8DQorCQkJCVRTTDJYN1hfQ01EX0FMU19JTlRf
Q0xSKSk7DQorDQorCWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRl
diwNCisJCSJ0c2wyeDd4X2kyY193cml0ZV9jb21tYW5kIGZhaWxlZCBpbiB0c2wyeDd4X2dldF9s
dXgsIGVyciA9ICVkXG4iLA0KKwkJCXJldCk7DQorCQlnb3RvIG91dF91bmxvY2s7IC8qIGhhdmUg
bm8gZGF0YSwgc28gcmV0dXJuIGZhaWx1cmUgKi8NCisJfQ0KKw0KKwkvKiBleHRyYWN0IEFMUy9s
dXggZGF0YSAqLw0KKwljaDAgPSBsZTE2X3RvX2NwdXAoKGNvbnN0IF9fbGUxNiAqKSZidWZbMF0p
Ow0KKwljaDEgPSBsZTE2X3RvX2NwdXAoKGNvbnN0IF9fbGUxNiAqKSZidWZbMl0pOw0KKw0KKwlj
aGlwLT5hbHNfY3VyX2luZm8uYWxzX2NoMCA9IGNoMDsNCisJY2hpcC0+YWxzX2N1cl9pbmZvLmFs
c19jaDEgPSBjaDE7DQorDQorCWlmICgoY2gwID49IGNoaXAtPmFsc19zYXR1cmF0aW9uKSB8fCAo
Y2gxID49IGNoaXAtPmFsc19zYXR1cmF0aW9uKSkNCisJCWdvdG8gcmV0dXJuX21heDsNCisNCisJ
aWYgKGNoMCA9PSAwKSB7DQorCQkvKiBoYXZlIG5vIGRhdGEsIHNvIHJldHVybiBMQVNUIFZBTFVF
ICovDQorCQlyZXQgPSBjaGlwLT5hbHNfY3VyX2luZm8ubHV4ID0gMDsNCisJCWdvdG8gb3V0X3Vu
bG9jazsNCisJfQ0KKwkvKiBjYWxjdWxhdGUgcmF0aW8gKi8NCisJcmF0aW8gPSAoY2gxIDw8IDE1
KSAvIGNoMDsNCisJLyogY29udmVydCB0byB1bnNjYWxlZCBsdXggdXNpbmcgdGhlIHBvaW50ZXIg
dG8gdGhlIHRhYmxlICovDQorCWZvciAocCA9IChzdHJ1Y3QgdHNsMng3eF9sdXggKikgY2hpcC0+
dHNsMng3eF9kZXZpY2VfbHV4Ow0KKwkgICAgIHAtPnJhdGlvICE9IDAgJiYgcC0+cmF0aW8gPCBy
YXRpbzsgcCsrKQ0KKwkJOw0KKw0KKwlpZiAocC0+cmF0aW8gPT0gMCkgew0KKwkJbHV4ID0gMDsN
CisJfSBlbHNlIHsNCisJCWNoMGx1eCA9ICgoY2gwICogcC0+Y2gwKSArDQorCQkodHNsMlg3WF9h
bHNfZ2FpbmFkaltjaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19nYWluXS5jaDAgPj4gMSkpDQor
CQkvIHRzbDJYN1hfYWxzX2dhaW5hZGpbY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfZ2Fpbl0u
Y2gwOw0KKw0KKwkJY2gxbHV4ID0gKChjaDEgKiBwLT5jaDEpICsNCisJCSh0c2wyWDdYX2Fsc19n
YWluYWRqW2NoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW5dLmNoMSA+PiAxKSkNCisJCS8g
dHNsMlg3WF9hbHNfZ2FpbmFkaltjaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19nYWluXS5jaDE7
DQorDQorCQlsdXggPSBjaDBsdXggLSBjaDFsdXg7DQorCX0NCisNCisJLyogbm90ZTogbHV4IGlz
IDMxIGJpdCBtYXggYXQgdGhpcyBwb2ludCAqLw0KKwlpZiAoY2gxbHV4ID4gY2gwbHV4KSB7DQor
CQlkZXZfZGJnKCZjaGlwLT5jbGllbnQtPmRldiwgIk5vIERhdGEgLSBSZXR1cm4gbGFzdCB2YWx1
ZVxuIik7DQorCQlyZXQgPSBjaGlwLT5hbHNfY3VyX2luZm8ubHV4ID0gMDsNCisJCWdvdG8gb3V0
X3VubG9jazsNCisJfQ0KKw0KKwkvKiBhZGp1c3QgZm9yIGFjdGl2ZSB0aW1lIHNjYWxlICovDQor
CWlmIChjaGlwLT5hbHNfdGltZV9zY2FsZSA9PSAwKQ0KKwkJbHV4ID0gMDsNCisJZWxzZQ0KKwkJ
bHV4ID0gKGx1eCArIChjaGlwLT5hbHNfdGltZV9zY2FsZSA+PiAxKSkgLw0KKwkJCWNoaXAtPmFs
c190aW1lX3NjYWxlOw0KKw0KKwkvKiBhZGp1c3QgZm9yIGFjdGl2ZSBnYWluIHNjYWxlDQorCSAq
IFRoZSB0c2wyeDd4X2RldmljZV9sdXggdGFibGVzIGhhdmUgYSBmYWN0b3Igb2YgMjU2IGJ1aWx0
LWluLg0KKwkgKiBVc2VyLXNwZWNpZmllZCBnYWluIHByb3ZpZGVzIGEgbXVsdGlwbGllci4NCisJ
ICogQXBwbHkgdXNlci1zcGVjaWZpZWQgZ2FpbiBiZWZvcmUgc2hpZnRpbmcgcmlnaHQgdG8gcmV0
YWluIHByZWNpc2lvbi4NCisJICogVXNlIDY0IGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3cgb24gbXVs
dGlwbGljYXRpb24uDQorCSAqIFRoZW4gZ28gYmFjayB0byAzMiBiaXRzIGJlZm9yZSBkaXZpc2lv
biB0byBhdm9pZCB1c2luZyBkaXZfdTY0KCkuDQorCSAqLw0KKwlsdXg2NCA9IGx1eDsNCisJbHV4
NjQgPSBsdXg2NCAqIGNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW5fdHJpbTsNCisJbHV4
NjQgPj49IDg7DQorCWx1eCA9IGx1eDY0Ow0KKwlsdXggPSAobHV4ICsgNTAwKSAvIDEwMDA7DQor
DQorCWlmIChsdXggPiBUU0wyWDdYX0xVWF9DQUxDX09WRVJfRkxPVykgeyAvKiBjaGVjayBmb3Ig
b3ZlcmZsb3cgKi8NCityZXR1cm5fbWF4Og0KKwkJbHV4ID0gVFNMMlg3WF9MVVhfQ0FMQ19PVkVS
X0ZMT1c7DQorCX0NCisNCisJLyogVXBkYXRlIHRoZSBzdHJ1Y3R1cmUgd2l0aCB0aGUgbGF0ZXN0
IFZBTElEIGx1eC4gKi8NCisJY2hpcC0+YWxzX2N1cl9pbmZvLmx1eCA9IGx1eDsNCisJcmV0ID0g
bHV4Ow0KKw0KK291dF91bmxvY2s6DQorCW11dGV4X3VubG9jaygmY2hpcC0+YWxzX211dGV4KTsN
CisJcmV0dXJuIHJldDsNCisNCit9DQorDQorLyoNCisgKiBQcm94aW1pdHkgcG9sbCBmdW5jdGlv
biAtIGlmIHZhbGlkIGRhdGEgaXMgYXZhaWxhYmxlLCByZWFkIGFuZCBmb3JtIHRoZSBjaDANCisg
KiBhbmQgcHJveCBkYXRhIHZhbHVlcywgY2hlY2sgZm9yIGxpbWl0cyBvbiB0aGUgY2gwIHZhbHVl
LCBhbmQgY2hlY2sgdGhlIHByb3gNCisgKiBkYXRhIGFnYWluc3QgdGhlIGN1cnJlbnQgdGhyZXNo
b2xkcywgdG8gc2V0IHRoZSBldmVudCBzdGF0dXMgYWNjb3JkaW5nbHkuDQorICovDQorc3RhdGlj
IGludCB0c2wyeDd4X3Byb3hfcG9sbChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQ0KK3sNCisj
ZGVmaW5lIENPTlNFQ1VUSVZFX1JFVFJJRVMgNTANCisNCisJaW50IGk7DQorCWludCByZXQ7DQor
CXU4IHN0YXR1czsNCisJdTggY2hkYXRhWzJdOw0KKwlpbnQgZXJyX2NudDsNCisJc3RydWN0IHRz
bDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2KGluZGlvX2Rldik7DQorDQorCWlmIChtdXRleF90
cnlsb2NrKCZjaGlwLT5wcm94X211dGV4KSA9PSAwKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5jbGll
bnQtPmRldiwgIkNhbid0IGdldCBwcm94IG11dGV4XG4iKTsNCisJCXJldHVybiAtRUJVU1k7DQor
CX0NCisNCisJZXJyX2NudCA9IDA7DQorDQordHJ5X2FnYWluOg0KKwlyZXQgPSB0c2wyeDd4X2ky
Y19yZWFkKGNoaXAtPmNsaWVudCwNCisJCShUU0wyWDdYX0NNRF9SRUcgfCBUU0wyWDdYX1NUQVRV
UyksICZzdGF0dXMsIDEpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycigmY2hpcC0+Y2xp
ZW50LT5kZXYsDQorCQkJIlJlYWQgcmVncyBmYWlsZWQgaW4gdHNsMng3eF9wcm94X3BvbGwoKSAt
IEFcbiIpOw0KKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5wcm94X211dGV4KTsNCisJCXJldHVybiBy
ZXQ7DQorCX0NCisNCisJLypQcm94IGludGVycnVwdCBhc3NlcnRlZCovDQorCWlmICgoKGNoaXAt
PnRzbDJ4N3hfc2V0dGluZ3MuaW50ZXJydXB0c19lbiA8PCA0KQ0KKwkJCSYgQ05UTF9QUk9YX0lO
VF9FTkJMKSkgew0KKwkJaWYgKCEoc3RhdHVzICYgVFNMMlg3WF9TVEFfQURDX1ZBTElEKSkgew0K
KwkJCWVycl9jbnQrKzsNCisJCQlpZiAoZXJyX2NudCA+IENPTlNFQ1VUSVZFX1JFVFJJRVMpIHsN
CisJCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5wcm94X211dGV4KTsNCisJCQkJZGV2X2VycigmY2hp
cC0+Y2xpZW50LT5kZXYsDQorCQkJCSJDb25zZWMuIHJldHJpZXMgZXhjZWVkZWRcbiIpOw0KKwkJ
CQlyZXR1cm4gY2hpcC0+cHJveF9jdXJfaW5mby5wcm94X2V2ZW50Ow0KKwkJCX0NCisJCQlnb3Rv
IHRyeV9hZ2FpbjsNCisJCX0NCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7DQor
CQlyZXQgPSB0c2wyeDd4X2kyY19yZWFkKGNoaXAtPmNsaWVudCwNCisJCQkoVFNMMlg3WF9DTURf
UkVHIHwNCisJCQkJCShUU0wyWDdYX1BSWF9MTyArIGkpKSwgJmNoZGF0YVtpXSwgMSk7DQorCQlp
ZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJCSJSZWFk
IHJlZ3MgZmFpbGVkIGluIHRzbDJ4N3hfcHJveF9wb2xsKCkgLSBCXG4iKTsNCisJCQltdXRleF91
bmxvY2soJmNoaXAtPnByb3hfbXV0ZXgpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorCX0NCisN
CisJY2hpcC0+cHJveF9jdXJfaW5mby5wcm94X2RhdGEgPSAoY2hkYXRhWzFdPDw4KXxjaGRhdGFb
MF07DQorDQorCWlmIChjaGlwLT5wcm94X2N1cl9pbmZvLnByb3hfZGF0YSA+PQ0KKwkJCWNoaXAt
PnRzbDJ4N3hfc2V0dGluZ3MucHJveF90aHJlc19oaWdoKQ0KKwkJY2hpcC0+cHJveF9jdXJfaW5m
by5wcm94X2V2ZW50ID0gMTsNCisJZWxzZQ0KKwkJY2hpcC0+cHJveF9jdXJfaW5mby5wcm94X2V2
ZW50ID0gMDsNCisNCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5wcm94X211dGV4KTsNCisJcmV0dXJu
IGNoaXAtPnByb3hfY3VyX2luZm8ucHJveF9ldmVudDsNCit9DQorDQorLyoNCisgKiBQcm92aWRl
cyBpbml0aWFsIG9wZXJhdGlvbmFsIHBhcmFtZXRlciBkZWZhdWx0cy4NCisgKiBUaGVzZSBkZWZh
dWx0cyBtYXkgYmUgY2hhbmdlZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBzeXNmcyBmaWxlcy4NCisg
Ki8NCitzdGF0aWMgdm9pZCB0c2wyeDd4X2RlZmF1bHRzKHN0cnVjdCB0c2wyWDdYX2NoaXAgKmNo
aXApDQorew0KKwkvKiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzICovDQorCWNoaXAtPnRzbDJ4N3hf
c2V0dGluZ3MuYWxzX3RpbWUgPSAyMDA7DQorCS8qIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MG1T
ICovDQorCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW4gPSAwOw0KKwkvKiB0aGlzIGlz
IGFjdHVhbGx5IGFuIGluZGV4IGludG8gdGhlIGdhaW4gdGFibGUgKi8NCisJY2hpcC0+dHNsMng3
eF9zZXR0aW5ncy5wcnhfdGltZSA9IDB4ZmU7IC8qNS40IG1TICovDQorCS8qIDIuN21zIHByb3gg
aW50ZWdyYXRpb24gdGltZSAtIGRlY3JlYXNlIHRvIGluY3JlYXNlIHRpbWUgKi8NCisJLyogZGVj
cmVhc2VzIGluIDIuNyBtcyBpbnRlcnZhbHMgKi8NCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5w
cm94X2dhaW4gPSAxOw0KKwkvKiB0aGVzZSBhcmUgYml0cyAzOjIgb2YgcmVnIDB4MGY6IDA9eDEs
MT14MiwyPXg0LDM9eDggKi8NCisJLyogYXNzdW1lIGNsZWFyIGdsYXNzIGFzIGRlZmF1bHQgKi8N
CisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy53YWl0X3RpbWUgPSAyNDU7DQorCS8qIFRpbWUgYmV0
d2VlbiBQUlggYW5kIEFMUyBjeWNsZXMgLWRlY3JlYXNlIHRvIGluY3JlYXNlIHRpbWUgKi8NCisJ
LyogZGVjcmVhc2VzIGluIDIuNyBtcyBpbnRlcnZhbHMgKi8NCisJY2hpcC0+dHNsMng3eF9zZXR0
aW5ncy5wcm94X2NvbmZpZyA9IDA7DQorCS8qIFByb3ggY29uZmlndXJhdGlvbiBmaWx0ZXJzICov
DQorCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW5fdHJpbSA9IDEwMDA7DQorCS8qIGRl
ZmF1bHQgZ2FpbiB0cmltIHRvIGFjY291bnQgZm9yIGFwZXJ0dXJlIGVmZmVjdHMgKi8NCisJY2hp
cC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfY2FsX3RhcmdldCA9IDE1MDsNCisJLyogS25vd24gZXh0
ZXJuYWwgQUxTIHJlYWRpbmcgdXNlZCBmb3IgY2FsaWJyYXRpb24gKi8NCisJY2hpcC0+dHNsMng3
eF9zZXR0aW5ncy5hbHNfdGhyZXNoX2xvdyA9IDIwMDsNCisJLyogQ0gwICdsb3cnIGNvdW50IHRv
IHRyaWdnZXIgaW50ZXJydXB0ICovDQorCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX3RocmVz
aF9oaWdoID0gMjU2Ow0KKwkvKiBDSDAgJ2hpZ2gnIGNvdW50IHRvIHRyaWdnZXIgaW50ZXJydXB0
ICovDQorCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX3BlcnNpc3RlbmNlID0gMHhGRjsNCisJ
LyogTnVtYmVyIG9mICdvdXQgb2YgbGltaXRzJyBBREMgcmVhZGluZ3MgUFJYL0FMUyovDQorCWNo
aXAtPnRzbDJ4N3hfc2V0dGluZ3MuaW50ZXJydXB0c19lbiA9IDB4MDA7DQorCS8qIERlZmF1bHQg
aW50ZXJydXB0KHMpIGVuYWJsZWQuDQorCSAqIDB4MDAgPSBub25lLCAweDEwID0gYWxzLCAweDIw
ID0gcHJ4IDB4MzAgPSBidGggKi8NCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X3RocmVz
X2xvdyAgPSAwOw0KKwljaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfdGhyZXNfaGlnaCA9IDUx
MjsNCisJLypkZWZhdWx0IHRocmVzaG9sZCAoYWRqdXN0IGVpdGhlciBtYW51YWxseSBvciB3aXRo
IGNhbCByb3V0aW5lKi8NCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X21heF9zYW1wbGVz
X2NhbCA9IDMwOw0KKwljaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfcHVsc2VfY291bnQgPSA4
Ow0KKw0KKwkvKiBMb2FkIHVwIHRoZSBsdXggdGFibGUuIENhbiBiZSBjaGFuZ2VkIGxhdGVyIHZp
YSBBQkkgKi8NCisJaWYgKGNoaXAtPnBkYXRhICYmIGNoaXAtPnBkYXRhLT5wbGF0Zm9ybV9sdXhf
dGFibGVbMF0ucmF0aW8gIT0gMCkNCisJCW1lbWNweShjaGlwLT50c2wyeDd4X2RldmljZV9sdXgs
DQorCQkJY2hpcC0+cGRhdGEtPnBsYXRmb3JtX2x1eF90YWJsZSwNCisJCQlzaXplb2YoY2hpcC0+
cGRhdGEtPnBsYXRmb3JtX2x1eF90YWJsZSkpOw0KKwllbHNlDQorCQltZW1jcHkoY2hpcC0+dHNs
Mng3eF9kZXZpY2VfbHV4LA0KKwkJKHN0cnVjdCB0c2wyeDd4X2x1eCAqKXRzbDJ4N3hfZGVmYXVs
dF9sdXhfdGFibGVfZ3JvdXBbY2hpcC0+aWRdLA0KKwkJCQlNQVhfREVGQVVMVF9UQUJMRV9CWVRF
Uyk7DQorDQorfQ0KKw0KKy8qDQorICogT2J0YWluIHNpbmdsZSByZWFkaW5nIGFuZCBjYWxjdWxh
dGUgdGhlIGFsc19nYWluX3RyaW0NCisgKiAobGF0ZXIgdXNlZCB0byBkZXJpdmUgYWN0dWFsIGx1
eCkuDQorICogUmV0dXJuIHVwZGF0ZWQgZ2Fpbl90cmltIHZhbHVlLg0KKyAqLw0KK3N0YXRpYyBp
bnQgdHNsMng3eF9hbHNfY2FsaWJyYXRlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpDQorew0K
KwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCisJdTgg
cmVnX3ZhbDsNCisJaW50IGdhaW5fdHJpbV92YWw7DQorCWludCByZXQ7DQorCWludCBsdXhfdmFs
Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjaGlwLT5jbGllbnQsDQorCQkJKFRT
TDJYN1hfQ01EX1JFRyB8IFRTTDJYN1hfQ05UUkwpKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRl
dl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJInRzbDJ4N3hfYWxzX2NhbGlicmF0ZSBmYWls
ZWQgdG8gd3JpdGUgQ05UUkwgcmVnaXN0ZXIsIHJldD0lZFxuIiwNCisJCQlyZXQpOw0KKwkJcmV0
dXJuIHJldDsNCisJfQ0KKw0KKwlyZWdfdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZShjaGlwLT5j
bGllbnQpOw0KKwlpZiAoKHJlZ192YWwgJiAoVFNMMlg3WF9DTlRMX0FEQ19FTkJMIHwgVFNMMlg3
WF9DTlRMX1BXUl9PTikpDQorCQkJIT0gKFRTTDJYN1hfQ05UTF9BRENfRU5CTCB8IFRTTDJYN1hf
Q05UTF9QV1JfT04pKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwNCisJCQkidHNs
Mng3eF9hbHNfY2FsaWJyYXRlIGZhaWxlZDogQURDIG5vdCBlbmFibGVkXG4iKTsNCisJCXJldHVy
biAtMTsNCisJfQ0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjaGlwLT5jbGllbnQs
DQorCQkJKFRTTDJYN1hfQ01EX1JFRyB8IFRTTDJYN1hfQ05UUkwpKTsNCisJaWYgKHJldCA8IDAp
IHsNCisJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJInRzbDJ4N3hfYWxzX2NhbGli
cmF0ZSBmYWlsZWQgdG8gd3JpdGUgY3RybCByZWc6IHJldD0lZFxuIiwNCisJCQlyZXQpOw0KKwkJ
cmV0dXJuIHJldDsNCisJfQ0KKwlyZWdfdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZShjaGlwLT5j
bGllbnQpOw0KKw0KKwlpZiAoKHJlZ192YWwgJiBUU0wyWDdYX1NUQV9BRENfVkFMSUQpICE9IFRT
TDJYN1hfU1RBX0FEQ19WQUxJRCkgew0KKwkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsDQor
CQkidHNsMng3eF9hbHNfY2FsaWJyYXRlIGZhaWxlZDogU1RBVFVTIC0gQURDIG5vdCB2YWxpZC5c
biIpOw0KKwkJcmV0dXJuIC1FTk9EQVRBOw0KKwl9DQorCWx1eF92YWwgPSB0c2wyeDd4X2dldF9s
dXgoaW5kaW9fZGV2KTsNCisJaWYgKGx1eF92YWwgPCAwKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5j
bGllbnQtPmRldiwNCisJCSJ0c2wyeDd4X2Fsc19jYWxpYnJhdGUgZmFpbGVkIHRvIGdldCBsdXhc
biIpOw0KKwkJcmV0dXJuIGx1eF92YWw7DQorCX0NCisJZ2Fpbl90cmltX3ZhbCA9ICAoKChjaGlw
LT50c2wyeDd4X3NldHRpbmdzLmFsc19jYWxfdGFyZ2V0KQ0KKwkJCSogY2hpcC0+dHNsMng3eF9z
ZXR0aW5ncy5hbHNfZ2Fpbl90cmltKSAvIGx1eF92YWwpOw0KKw0KKwlpZiAoKGdhaW5fdHJpbV92
YWwgPCAyNTApIHx8IChnYWluX3RyaW1fdmFsID4gNDAwMCkpDQorCQlyZXR1cm4gLUVSQU5HRTsN
CisNCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfZ2Fpbl90cmltID0gZ2Fpbl90cmltX3Zh
bDsNCisNCisJZGV2X2luZm8oJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJCSIlcyBhbHNfY2FsaWJy
YXRlIGNvbXBsZXRlZFxuIiwgY2hpcC0+Y2xpZW50LT5uYW1lKTsNCisNCisJcmV0dXJuIChpbnQp
IGdhaW5fdHJpbV92YWw7DQorfQ0KKw0KKy8qDQorICogVHVybiB0aGUgZGV2aWNlIG9uLg0KKyAq
IENvbmZpZ3VyYXRpb24gbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4N
CisgKi8NCitzdGF0aWMgaW50IHRzbDJ4N3hfY2hpcF9vbihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9f
ZGV2KQ0KK3sNCisJaW50IGk7DQorCWludCByZXQgPSAwOw0KKwl1OCAqZGV2X3JlZzsNCisJdTgg
dXRtcDsNCisJaW50IGFsc19jb3VudDsNCisJaW50IGFsc190aW1lOw0KKwlzdHJ1Y3QgdHNsMlg3
WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCisJdTggcmVnX3ZhbCA9IDA7DQor
DQorCWlmIChjaGlwLT5wZGF0YSAmJiBjaGlwLT5wZGF0YS0+cG93ZXJfb24pDQorCQljaGlwLT5w
ZGF0YS0+cG93ZXJfb24oaW5kaW9fZGV2KTsNCisNCisJLyogTm9uIGNhbGN1bGF0ZWQgcGFyYW1l
dGVycyAqLw0KKwljaGlwLT50c2wyeDd4X2NvbmZpZ1tUU0wyWDdYX1BSWF9USU1FXSA9DQorCQkJ
Y2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcnhfdGltZTsNCisJY2hpcC0+dHNsMng3eF9jb25maWdb
VFNMMlg3WF9XQUlUX1RJTUVdID0NCisJCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLndhaXRfdGlt
ZTsNCisJY2hpcC0+dHNsMng3eF9jb25maWdbVFNMMlg3WF9QUlhfQ09ORklHXSA9DQorCQkJY2hp
cC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X2NvbmZpZzsNCisNCisJY2hpcC0+dHNsMng3eF9jb25m
aWdbVFNMMlg3WF9BTFNfTUlOVEhSRVNITE9dID0NCisJCShjaGlwLT50c2wyeDd4X3NldHRpbmdz
LmFsc190aHJlc2hfbG93KSAmIDB4RkY7DQorCWNoaXAtPnRzbDJ4N3hfY29uZmlnW1RTTDJYN1hf
QUxTX01JTlRIUkVTSEhJXSA9DQorCQkoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfdGhyZXNo
X2xvdyA+PiA4KSAmIDB4RkY7DQorCWNoaXAtPnRzbDJ4N3hfY29uZmlnW1RTTDJYN1hfQUxTX01B
WFRIUkVTSExPXSA9DQorCQkoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfdGhyZXNoX2hpZ2gp
ICYgMHhGRjsNCisJY2hpcC0+dHNsMng3eF9jb25maWdbVFNMMlg3WF9BTFNfTUFYVEhSRVNISEld
ID0NCisJCShjaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc190aHJlc2hfaGlnaCA+PiA4KSAmIDB4
RkY7DQorCWNoaXAtPnRzbDJ4N3hfY29uZmlnW1RTTDJYN1hfUEVSU0lTVEVOQ0VdID0NCisJCWNo
aXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX3BlcnNpc3RlbmNlOw0KKw0KKwljaGlwLT50c2wyeDd4
X2NvbmZpZ1tUU0wyWDdYX1BSWF9DT1VOVF0gPQ0KKwkJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3Mu
cHJveF9wdWxzZV9jb3VudDsNCisJY2hpcC0+dHNsMng3eF9jb25maWdbVFNMMlg3WF9QUlhfTUlO
VEhSRVNITE9dID0NCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X3RocmVzX2xvdzsNCisJ
Y2hpcC0+dHNsMng3eF9jb25maWdbVFNMMlg3WF9QUlhfTUFYVEhSRVNITE9dID0NCisJCQljaGlw
LT50c2wyeDd4X3NldHRpbmdzLnByb3hfdGhyZXNfaGlnaDsNCisNCisJLyogYW5kIG1ha2Ugc3Vy
ZSB3ZSdyZSBub3QgYWxyZWFkeSBvbiAqLw0KKwlpZiAoY2hpcC0+dHNsMng3eF9jaGlwX3N0YXR1
cyA9PSBUU0wyWDdYX0NISVBfV09SS0lORykgew0KKwkJLyogaWYgZm9yY2luZyBhIHJlZ2lzdGVy
IHVwZGF0ZSAtIHR1cm4gb2ZmLCB0aGVuIG9uICovDQorCQlkZXZfaW5mbygmY2hpcC0+Y2xpZW50
LT5kZXYsICJkZXZpY2UgaXMgYWxyZWFkeSBlbmFibGVkXG4iKTsNCisJCXJldHVybiAtRUlOVkFM
Ow0KKwl9DQorDQorCS8qIGRldGVybWluZSBhbHMgaW50ZWdyYXRpb24gcmVnc3RlciAqLw0KKwlh
bHNfY291bnQgPSAoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfdGltZSAqIDEwMCArIDEzNSkg
LyAyNzA7DQorCWlmIChhbHNfY291bnQgPT0gMCkNCisJCWFsc19jb3VudCA9IDE7IC8qIGVuc3Vy
ZSBhdCBsZWFzdCBvbmUgY3ljbGUgKi8NCisNCisJLyogY29udmVydCBiYWNrIHRvIHRpbWUgKGVu
Y29tcGFzc2VzIG92ZXJyaWRlcykgKi8NCisJYWxzX3RpbWUgPSAoYWxzX2NvdW50ICogMjcgKyA1
KSAvIDEwOw0KKwljaGlwLT50c2wyeDd4X2NvbmZpZ1tUU0wyWDdYX0FMU19USU1FXSA9IDI1NiAt
IGFsc19jb3VudDsNCisNCisJLyogU2V0IHRoZSBnYWluIGJhc2VkIG9uIHRzbDJ4N3hfc2V0dGlu
Z3Mgc3RydWN0ICovDQorCWNoaXAtPnRzbDJ4N3hfY29uZmlnW1RTTDJYN1hfR0FJTl0gPQ0KKwkJ
CShjaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19nYWluIHwgKG1BMTAwIHwgRElPREUxKQ0KKwkJ
CQl8ICgoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X2dhaW4pIDw8IDIpKTsNCisNCisJLyog
c2V0IGNoaXAgc3RydWN0IHJlIHNjYWxpbmcgYW5kIHNhdHVyYXRpb24gKi8NCisJY2hpcC0+YWxz
X3NhdHVyYXRpb24gPSBhbHNfY291bnQgKiA5MjI7IC8qIDkwJSBvZiBmdWxsIHNjYWxlICovDQor
CWNoaXAtPmFsc190aW1lX3NjYWxlID0gKGFsc190aW1lICsgMjUpIC8gNTA7DQorDQorCS8qIFRT
TDJYN1ggU3BlY2lmaWMgcG93ZXItb24gLyBhZGMgZW5hYmxlIHNlcXVlbmNlDQorCSAqIFBvd2Vy
IG9uIHRoZSBkZXZpY2UgMXN0LiAqLw0KKwl1dG1wID0gVFNMMlg3WF9DTlRMX1BXUl9PTjsNCisJ
cmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjaGlwLT5jbGllbnQsDQorCQlUU0wyWDdY
X0NNRF9SRUcgfCBUU0wyWDdYX0NOVFJMLCB1dG1wKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRl
dl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LCAidHNsMng3eF9jaGlwX29uIGZhaWxlZCBvbiBDTlRS
TCByZWcuXG4iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwkvKiBVc2UgdGhlIGZvbGxvd2lu
ZyBzaGFkb3cgY29weSBmb3Igb3VyIGRlbGF5IGJlZm9yZSBlbmFibGluZyBBREMuDQorCSAqIFdy
aXRlIGFsbCB0aGUgcmVnaXN0ZXJzLiAqLw0KKwlmb3IgKGkgPSAwLCBkZXZfcmVnID0gY2hpcC0+
dHNsMng3eF9jb25maWc7IGkgPCBUU0wyWDdYX1JFR19NQVg7IGkrKykgew0KKwkJcmV0ID0gaTJj
X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjaGlwLT5jbGllbnQsDQorCQkJCVRTTDJYN1hfQ01EX1JF
RyArIGksICpkZXZfcmVnKyspOw0KKwkJaWYgKHJldCA8IDApIHsNCisJCQlkZXZfZXJyKCZjaGlw
LT5jbGllbnQtPmRldiwNCisJCQkidHNsMng3eF9jaGlwX29uIGZhaWxlZCBvbiB3cml0ZSB0byBy
ZWcgJWQuXG4iLCBpKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorDQorCXVkZWxheSgz
MDAwKTsJLyogUG93ZXItb24gc2V0dGxpbmcgdGltZSAqLw0KKw0KKwkvKiBOT1cgZW5hYmxlIHRo
ZSBBREMNCisJICogaW5pdGlhbGl6ZSB0aGUgZGVzaXJlZCBtb2RlIG9mIG9wZXJhdGlvbiAqLw0K
Kwl1dG1wID0gVFNMMlg3WF9DTlRMX1BXUl9PTiB8IFRTTDJYN1hfQ05UTF9BRENfRU5CTCB8IENO
VExfUFJPWF9ERVRfRU5CTDsNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjaGlw
LT5jbGllbnQsDQorCQkJVFNMMlg3WF9DTURfUkVHIHwgVFNMMlg3WF9DTlRSTCwgdXRtcCk7DQor
CWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwgInRzbDJ4N3hf
Y2hpcF9vbiBmYWlsZWQgb24gMm5kIENUUkwgcmVnLlxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwkJ
fQ0KKw0KKwljaGlwLT50c2wyeDd4X2NoaXBfc3RhdHVzID0gVFNMMlg3WF9DSElQX1dPUktJTkc7
DQorDQorCWlmIChjaGlwLT50c2wyeDd4X3NldHRpbmdzLmludGVycnVwdHNfZW4gIT0gMCkgew0K
KwkJZGV2X2luZm8oJmNoaXAtPmNsaWVudC0+ZGV2LCAiU2V0dGluZyBVcCBJbnRlcnJ1cHQocylc
biIpOw0KKwkJLyogZmlyc3QgdGltZSBpbnRlcnJ1cHQgKi8NCisJCWNoaXAtPmluaXRfZG9uZSA9
IDA7DQorDQorDQorCXJlZ192YWwgPSBUU0wyWDdYX0NOVExfUFdSX09OOw0KKw0KKwlpZiAoY2hp
cC0+dHNsMng3eF9zZXR0aW5ncy5pbnRlcnJ1cHRzX2VuID09IDB4MTApDQorCQlyZWdfdmFsIHw9
IENOVExfQURDX0VOQkw7DQorDQorCWlmIChjaGlwLT50c2wyeDd4X3NldHRpbmdzLmludGVycnVw
dHNfZW4gPT0gMHgyMCkNCisJCXJlZ192YWwgfD0gQ05UTF9QUk9YX0RFVF9FTkJMOw0KKw0KKwlp
ZiAoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5pbnRlcnJ1cHRzX2VuID09IDB4MzApDQorCQlyZWdf
dmFsIHw9IChDTlRMX0FEQ19FTkJMIHwgQ05UTF9QUk9YX0RFVF9FTkJMKTsNCisNCisJcmVnX3Zh
bCB8PSBjaGlwLT50c2wyeDd4X3NldHRpbmdzLmludGVycnVwdHNfZW47DQorDQorCXJldCA9IGky
Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2hpcC0+Y2xpZW50LA0KKwkJKFRTTDJYN1hfQ01EX1JF
RyB8IFRTTDJYN1hfQ05UUkwpLCByZWdfdmFsKTsNCisJaWYgKHJldCA8IDApDQorCQlkZXZfZXJy
KCZjaGlwLT5jbGllbnQtPmRldiwNCisJCSJ0c2wyeDd4X2kyY193cml0ZSB0byBkZXZpY2UgZmFp
bGVkIGluIHRzbDJ4N3hfSU9DVExfSU5UX1NFVC5cbiIpOw0KKw0KKwkvKiBDbGVhciBvdXQgYW55
IGluaXRpYWwgaW50ZXJydXB0cyAgKi8NCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2hp
cC0+Y2xpZW50LA0KKwkJVFNMMlg3WF9DTURfUkVHIHwgVFNMMlg3WF9DTURfU1BMX0ZOIHwNCisJ
CVRTTDJYN1hfQ01EX1BST1hBTFNfSU5UQ0xSKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRldl9l
cnIoJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJCSJ0c2wyeDd4X2kyY193cml0ZV9jb21tYW5kIGZh
aWxlZCBpbiB0c2wyeDd4X2NoaXBfb25cbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJCX0NCisJfQ0K
KwlyZXR1cm4gcmV0Ow0KKw0KK30NCisNCitzdGF0aWMgaW50IHRzbDJ4N3hfY2hpcF9vZmYoc3Ry
dWN0IGlpb19kZXYgKmluZGlvX2RldikNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCB0c2wyWDdY
X2NoaXAgKmNoaXAgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0KKw0KKwkvKiB0dXJuIGRldmljZSBv
ZmYgKi8NCisJY2hpcC0+dHNsMng3eF9jaGlwX3N0YXR1cyA9IFRTTDJYN1hfQ0hJUF9TVVNQRU5E
RUQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2hpcC0+Y2xpZW50LA0K
KwkJVFNMMlg3WF9DTURfUkVHIHwgVFNMMlg3WF9DTlRSTCwgMHgwMCk7DQorDQorCWlmIChjaGlw
LT5wZGF0YSAmJiBjaGlwLT5wZGF0YS0+cG93ZXJfb2ZmKQ0KKwkJY2hpcC0+cGRhdGEtPnBvd2Vy
X29mZihjaGlwLT5jbGllbnQpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCisvKioNCisgKiBJ
bnRlZ2VyIFNxdWFyZSBSb290DQorICogV2UgbmVlZCBhbiBpbnRlZ2VyIHZlcnNpb24gc2luY2Ug
MXN0IEZsb2F0aW5nIHBvaW50IGlzIG5vdCBhbGxvd2VkDQorICogaW4gZHJpdmVyIHdvcmxkLCAy
bmQsIGNhbm5vdCBjb3VudCBvbiB0aGUgZGV2aWNlcyBoYXZpbmcgYSBGUFUsIGFuZA0KKyAqIDNy
ZCBzb2Z0d2FyZSBGUCBlbXVsYXRpb24gbWF5IGJlIGV4Y2Vzc2l2ZS4NCisgKi8NCitzdGF0aWMg
dW5zaWduZWQgbG9uZyB0c2wyeDd4X2lzcXJ0KHVuc2lnbmVkIGxvbmcgeCkNCit7DQorCXJlZ2lz
dGVyIHVuc2lnbmVkIGxvbmcgb3AsIHJlcywgb25lOw0KKwlvcCA9IHg7DQorCXJlcyA9IDA7DQor
DQorCW9uZSA9IDEgPDwgMzA7DQorCXdoaWxlIChvbmUgPiBvcCkNCisJCW9uZSA+Pj0gMjsNCisN
CisJd2hpbGUgKG9uZSAhPSAwKSB7DQorCQlpZiAob3AgPj0gcmVzICsgb25lKSB7DQorCQkJb3Ag
LT0gcmVzICsgb25lOw0KKwkJCXJlcyArPSBvbmUgPDwgMTsNCisJCX0NCisJCXJlcyA+Pj0gMTsN
CisJCW9uZSA+Pj0gMjsNCisJfQ0KKwlyZXR1cm4gcmVzOw0KK30NCisNCisvKg0KKyAqIFByb3hp
bWl0eSBjYWxpYnJhdGlvbiBoZWxwZXIgZnVuY3Rpb24NCisgKiBydW5zIHRocm91Z2ggYSBjb2xs
ZWN0aW9uIG9mIGRhdGEgc2FtcGxlcywNCisgKiBzZXRzIHRoZSBtaW4sIG1heCwgbWVhbiwgYW5k
IHN0ZCBkZXYuDQorICovDQorc3RhdGljDQordm9pZCB0c2wyeDd4X3Byb3hfY2FsY3VsYXRlKHUx
NiAqZGF0YSwgaW50IGxlbmd0aCwgc3RydWN0IHByb3hfc3RhdCAqc3RhdFApDQorew0KKwlpbnQg
aTsNCisJaW50IG1pbiwgbWF4LCBzdW0sIG1lYW47DQorCXVuc2lnbmVkIGxvbmcgc3RkZGV2Ow0K
KwlpbnQgdG1wOw0KKw0KKwlpZiAobGVuZ3RoID09IDApDQorCQlsZW5ndGggPSAxOw0KKw0KKwlz
dW0gPSAwOw0KKwltaW4gPSAweGZmZmY7DQorCW1heCA9IDA7DQorCWZvciAoaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgew0KKwkJc3VtICs9IGRhdGFbaV07DQorCQlpZiAoZGF0YVtpXSA8IG1pbikN
CisJCQltaW4gPSBkYXRhW2ldOw0KKwkJaWYgKGRhdGFbaV0gPiBtYXgpDQorCQkJbWF4ID0gZGF0
YVtpXTsNCisJfQ0KKwltZWFuID0gc3VtL2xlbmd0aDsNCisJc3RhdFAtPm1pbiA9IG1pbjsNCisJ
c3RhdFAtPm1heCA9IG1heDsNCisJc3RhdFAtPm1lYW4gPSBtZWFuOw0KKw0KKwlzdW0gPSAwOw0K
Kwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsNCisJCXRtcCA9IGRhdGFbaV0tbWVhbjsN
CisJCXN1bSArPSB0bXAgKiB0bXA7DQorCX0NCisJc3RkZGV2ID0gdHNsMng3eF9pc3FydCgobG9u
ZylzdW0pL2xlbmd0aDsNCisJc3RhdFAtPnN0ZGRldiA9IHN0ZGRldjsNCisNCit9DQorDQorLyoq
DQorICogUHJveGltaXR5IGNhbGlicmF0aW9uIC0gY29sbGVjdHMgYSBudW1iZXIgb2Ygc2FtcGxl
cywNCisgKiBjYWxjdWxhdGVzIGEgc3RhbmRhcmQgZGV2aWF0aW9uIGJhc2VkIG9uIHRoZSBzYW1w
bGVzLCBhbmQNCisgKiBzZXRzIHRoZSB0aHJlc2hvbGQgYWNjb3JkaW5nbHkuDQorICovDQorc3Rh
dGljIHZvaWQgdHNsMng3eF9wcm94X2NhbChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQ0KK3sN
CisJdTE2IHByb3hfaGlzdG9yeVtNQVhfU0FNUExFU19DQUwrMV07DQorCWludCBpOw0KKwlzdHJ1
Y3QgcHJveF9zdGF0IHByb3hfc3RhdF9kYXRhWzJdOw0KKwlzdHJ1Y3QgcHJveF9zdGF0ICpjYWxQ
Ow0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCisJ
dTggdG1wX2lycV9zZXR0aW5nczsNCisJdTggY3VycmVudF9zdGF0ZSA9IGNoaXAtPnRzbDJ4N3hf
Y2hpcF9zdGF0dXM7DQorDQorCWlmIChjaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfbWF4X3Nh
bXBsZXNfY2FsID4gTUFYX1NBTVBMRVNfQ0FMKSB7DQorCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQt
PmRldiwNCisJCQkibWF4IHByb3ggc2FtcGxlcyBjYWwgaXMgdG9vIGJpZzogJWRcbiIsDQorCQkJ
Y2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X21heF9zYW1wbGVzX2NhbCk7DQorCQljaGlwLT50
c2wyeDd4X3NldHRpbmdzLnByb3hfbWF4X3NhbXBsZXNfY2FsID0gTUFYX1NBTVBMRVNfQ0FMOw0K
Kwl9DQorDQorCS8qIGhhdmUgdG8gc3RvcCB0byBjaGFuZ2Ugc2V0dGluZ3MgKi8NCisJdHNsMng3
eF9jaGlwX29mZihpbmRpb19kZXYpOw0KKw0KKwkvKiBFbmFibGUgcHJveGltaXR5IGRldGVjdGlv
biBzYXZlIGp1c3QgaW4gY2FzZSBwcm94IG5vdCB3YW50ZWQgeWV0Ki8NCisJdG1wX2lycV9zZXR0
aW5ncyA9IGNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuaW50ZXJydXB0c19lbjsNCisJY2hpcC0+dHNs
Mng3eF9zZXR0aW5ncy5pbnRlcnJ1cHRzX2VuIHw9IENOVExfUFJPWF9JTlRfRU5CTDsNCisNCisJ
Lyp0dXJuIG9uIGRldmljZSBpZiBub3QgYWxyZWFkeSBvbiovDQorCXRzbDJ4N3hfY2hpcF9vbihp
bmRpb19kZXYpOw0KKw0KKwkvKmdhdGhlciB0aGUgc2FtcGxlcyovDQorCWZvciAoaSA9IDA7IGkg
PCBjaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfbWF4X3NhbXBsZXNfY2FsOyBpKyspIHsNCisJ
CW1kZWxheSgxNSk7DQorCQl0c2wyeDd4X3Byb3hfcG9sbChpbmRpb19kZXYpOw0KKwkJcHJveF9o
aXN0b3J5W2ldID0gY2hpcC0+cHJveF9jdXJfaW5mby5wcm94X2RhdGE7DQorCQlkZXZfaW5mbygm
Y2hpcC0+Y2xpZW50LT5kZXYsICIyIGk9JWQgcHJveCBkYXRhPSAlZFxuIiwNCisJCQlpLCBjaGlw
LT5wcm94X2N1cl9pbmZvLnByb3hfZGF0YSk7DQorDQorCX0NCisNCisJdHNsMng3eF9jaGlwX29m
ZihpbmRpb19kZXYpOw0KKw0KKwljYWxQID0gJnByb3hfc3RhdF9kYXRhW1BST1hfU1RBVF9DQUxd
Ow0KKwl0c2wyeDd4X3Byb3hfY2FsY3VsYXRlKHByb3hfaGlzdG9yeSwNCisJCWNoaXAtPnRzbDJ4
N3hfc2V0dGluZ3MucHJveF9tYXhfc2FtcGxlc19jYWwsIGNhbFApOw0KKwljaGlwLT50c2wyeDd4
X3NldHRpbmdzLnByb3hfdGhyZXNfaGlnaCA9IChjYWxQLT5tYXggPDwgMSkgLSBjYWxQLT5tZWFu
Ow0KKw0KKwlkZXZfaW5mbygmY2hpcC0+Y2xpZW50LT5kZXYsICIgY2FsIG1pbj0lZCBtZWFuPSVk
IG1heD0lZFxuIiwNCisJCWNhbFAtPm1pbiwgY2FsUC0+bWVhbiwgY2FsUC0+bWF4KTsNCisJZGV2
X2luZm8oJmNoaXAtPmNsaWVudC0+ZGV2LA0KKwkJIiVzIHByb3hpbWl0eSB0aHJlc2hvbGQgc2V0
IHRvICVkXG4iLA0KKwkJY2hpcC0+Y2xpZW50LT5uYW1lLCBjaGlwLT50c2wyeDd4X3NldHRpbmdz
LnByb3hfdGhyZXNfaGlnaCk7DQorDQorCS8qIGJhY2sgdG8gdGhlIHdheSB0aGV5IHdlcmUgKi8N
CisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5pbnRlcnJ1cHRzX2VuID0gdG1wX2lycV9zZXR0aW5n
czsNCisJaWYgKGN1cnJlbnRfc3RhdGUgPT0gVFNMMlg3WF9DSElQX1dPUktJTkcpDQorCQl0c2wy
eDd4X2NoaXBfb24oaW5kaW9fZGV2KTsNCit9DQorDQorLyogLS0tLS0tLS0tLSBTeXNmcyBJbnRl
cmZhY2UgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0gKi8NCisNCisNCitzdGF0aWMgc3NpemVfdCB0
c2wyeDd4X3Bvd2VyX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRl
dl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNo
aXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorDQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0Vf
U0laRSwgIiVkXG4iLCBjaGlwLT50c2wyeDd4X2NoaXBfc3RhdHVzKTsNCit9DQorDQorc3RhdGlj
IHNzaXplX3QgdHNsMng3eF9wb3dlcl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQor
CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBs
ZW4pDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2
KTsNCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsNCisNCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMCwgJnZh
bHVlKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAodmFsdWUgPT0gMCkNCisJCXRzbDJ4
N3hfY2hpcF9vZmYoZGV2X2luZm8pOw0KKwllbHNlDQorCQl0c2wyeDd4X2NoaXBfb24oZGV2X2lu
Zm8pOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4X3By
b3hpbWl0eV9kZXRlY3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2Vf
YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2lu
Zm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9
IGlpb19wcml2KGRldl9pbmZvKTsNCisNCisJdHNsMng3eF9wcm94X3BvbGwoZGV2X2luZm8pOw0K
Kw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwNCisJCQljaGlwLT5w
cm94X2N1cl9pbmZvLnByb3hfZXZlbnQpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4
X2dhaW5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRl
ICphdHRyLCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZf
Z2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2
KGRldl9pbmZvKTsNCisNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIs
DQorCQl0c2wyWDdYX2Fsc19nYWluYWRqW2NoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW5d
LmNoMCk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hfZ2Fpbl9zdG9yZShzdHJ1Y3Qg
ZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFy
ICpidWYsIHNpemVfdCBsZW4pDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZf
Z2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2
KGRldl9pbmZvKTsNCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsNCisJaWYgKGtzdHJ0b3VsKGJ1Ziwg
MCwgJnZhbHVlKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlzd2l0Y2ggKHZhbHVlKSB7DQor
CWNhc2UgMToNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW4gPSAwOw0KKwkJYnJl
YWs7DQorCWNhc2UgODoNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2dhaW4gPSAxOw0K
KwkJYnJlYWs7DQorCWNhc2UgMTY6DQorCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19nYWlu
ID0gMjsNCisJCWJyZWFrOw0KKwljYXNlIDEyMDoNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3Mu
YWxzX2dhaW4gPSAzOw0KKwkJYnJlYWs7DQorCWNhc2UgMTI4Og0KKwkJY2hpcC0+dHNsMng3eF9z
ZXR0aW5ncy5hbHNfZ2FpbiA9IDM7DQorCQlicmVhazsNCisNCisJZGVmYXVsdDoNCisJCWRldl9l
cnIoZGV2LA0KKwkJCSJJbnZhbGlkIEdhaW4gSW5kZXhcbiIpOw0KKwkJcmV0dXJuIC1FSU5WQUw7
DQorCX0NCisNCisJcmV0dXJuIGxlbjsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9n
YWluX2F2YWlsYWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9h
dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5m
byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0g
aWlvX3ByaXYoZGV2X2luZm8pOw0KKw0KKwlpZiAoc3RybmNtcChjaGlwLT5jbGllbnQtPm5hbWUs
ICJ0c2wyNzcyIiwgNykgPT0gMCkNCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwg
IiVzXG4iLCAiMSA4IDE2IDEyOCIpOw0KKwllbHNlDQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQ
QUdFX1NJWkUsICIlc1xuIiwgIjEgOCAxNiAxMjAiKTsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg
dHNsMng3eF9wcm94X2dhaW5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZp
Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2
X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hp
cCA9IGlpb19wcml2KGRldl9pbmZvKTsNCisNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9T
SVpFLCAiJWRcbiIsDQorCQkJKDEgPDwgY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X2dhaW4p
KTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9wcm94X2dhaW5fc3RvcmUoc3RydWN0
IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hh
ciAqYnVmLCBzaXplX3QgbGVuKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2
X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAgPSBpaW9fcHJp
dihkZXZfaW5mbyk7DQorCXVuc2lnbmVkIGxvbmcgdmFsdWU7DQorCWlmIChrc3RydG91bChidWYs
IDAsICZ2YWx1ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJc3dpdGNoICh2YWx1ZSkgew0K
KwljYXNlIDE6DQorCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfZ2FpbiA9IDA7DQorCQli
cmVhazsNCisJY2FzZSAyOg0KKwkJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X2dhaW4gPSAx
Ow0KKwkJYnJlYWs7DQorCWNhc2UgNDoNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MucHJveF9n
YWluID0gMjsNCisJCWJyZWFrOw0KKwljYXNlIDg6DQorCQljaGlwLT50c2wyeDd4X3NldHRpbmdz
LnByb3hfZ2FpbiA9IDM7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWRldl9lcnIoZGV2LA0K
KwkJCSJJbnZhbGlkIFByb3ggR2FpbiBJbmRleFxuIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJ
fQ0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4X3Byb3hf
Z2Fpbl9hdmFpbGFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2Vf
YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQorew0KKwkJcmV0dXJuIHNucHJpbnRmKGJ1Ziwg
UEFHRV9TSVpFLCAiJXNcbiIsICIxIDIgNCA4Iik7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHRz
bDJ4N3hfYWxzX3RpbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2Vf
YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2lu
Zm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9
IGlpb19wcml2KGRldl9pbmZvKTsNCisNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF
LCAiJWRcbiIsDQorCQkJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5hbHNfdGltZSk7DQorfQ0KKw0K
K3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hfYWxzX3RpbWVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2
LA0KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXpl
X3QgbGVuKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRh
KGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7
DQorCXVuc2lnbmVkIGxvbmcgdmFsdWU7DQorDQorCWlmIChrc3RydG91bChidWYsIDAsICZ2YWx1
ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKCh2YWx1ZSA8IDUwKSB8fCAodmFsdWUg
PiA2NTApKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICh2YWx1ZSAlIDUwKQ0KKwkJcmV0
dXJuIC1FSU5WQUw7DQorDQorCSBjaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc190aW1lID0gdmFs
dWU7DQorDQorCXJldHVybiBsZW47DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hfYWxz
X3RpbWVfYXZhaWxhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2aWNl
X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJcmV0dXJuIHNucHJpbnRmKGJ1Ziwg
UEFHRV9TSVpFLCAiJXNcbiIsDQorCQkiNTAgMTAwIDE1MCAyMDAgMjUwIDMwMCAzNTAgNDAwIDQ1
MCA1MDAgNTUwIDYwMCA2NTAiKTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9hbHNf
dHJpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg
KmF0dHIsIGNoYXIgKmJ1ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9n
ZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYo
ZGV2X2luZm8pOw0KKw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwN
CisJCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19nYWluX3RyaW0pOw0KK30NCisNCitzdGF0
aWMgc3NpemVfdCB0c2wyeDd4X2Fsc190cmltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJ
c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxl
bikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp
Ow0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0KKwl1
bnNpZ25lZCBsb25nIHZhbHVlOw0KKw0KKwlpZiAoa3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQ0K
KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICh2YWx1ZSkNCisJCWNoaXAtPnRzbDJ4N3hfc2V0
dGluZ3MuYWxzX2dhaW5fdHJpbSA9IHZhbHVlOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitz
dGF0aWMgc3NpemVfdCB0c2wyeDd4X2Fsc19jYWxfdGFyZ2V0X3Nob3coc3RydWN0IGRldmljZSAq
ZGV2LA0KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJ
c3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVj
dCB0c2wyWDdYX2NoaXAgKmNoaXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorDQorCXJldHVybiBz
bnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLA0KKwkJCWNoaXAtPnRzbDJ4N3hfc2V0dGlu
Z3MuYWxzX2NhbF90YXJnZXQpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4X2Fsc19j
YWxfdGFyZ2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9hdHRy
aWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikNCit7DQorCXN0cnVjdCBp
aW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3
WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0KKwl1bnNpZ25lZCBsb25nIHZhbHVl
Ow0KKw0KKwlpZiAoa3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7
DQorDQorCWlmICh2YWx1ZSkNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX2NhbF90YXJn
ZXQgPSB2YWx1ZTsNCisNCisJcmV0dXJuIGxlbjsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNs
Mng3eF9pbnRlcnJ1cHRzX2VuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRl
dl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNo
aXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorDQorCWlmIChjaGlwLT50c2wyeDd4X3NldHRpbmdz
LmludGVycnVwdHNfZW4gJiAweDEwKQ0KKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF
LCAiJWRcbiIsIDEpOw0KKwllbHNlDQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUs
ICIlZFxuIiwgMCk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hfaW50ZXJydXB0c19l
bl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph
dHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAq
ZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAq
Y2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsNCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsNCisNCisJ
aWYgKGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlp
ZiAodmFsdWUgPiAxKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCWlmICh2YWx1ZSkNCisJCWNoaXAt
PnRzbDJ4N3hfc2V0dGluZ3MuaW50ZXJydXB0c19lbiB8PSAweDEwOw0KKwllbHNlDQorCQljaGlw
LT50c2wyeDd4X3NldHRpbmdzLmludGVycnVwdHNfZW4gJj0gMHgyMDsNCisNCisJcmV0dXJuIGxl
bjsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9wcm94X2ludGVycnVwdF9zaG93KHN0
cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg
KmJ1ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShk
ZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0K
Kw0KKwlpZiAoY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5pbnRlcnJ1cHRzX2VuICYgMHgyMCkNCisJ
CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCAxKTsNCisJZWxzZQ0KKwkJ
cmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIDApOw0KK30NCisNCitzdGF0
aWMgc3NpemVfdCB0c2wyeDd4X3Byb3hfaW50ZXJydXB0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRl
diwNCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6
ZV90IGxlbikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0
YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8p
Ow0KKwl1bnNpZ25lZCBsb25nIHZhbHVlOw0KKw0KKwlpZiAoa3N0cnRvdWwoYnVmLCAwLCAmdmFs
dWUpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICh2YWx1ZSA+IDEpDQorCQlyZXR1cm4g
LUVJTlZBTDsNCisJaWYgKHZhbHVlKQ0KKwkJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5pbnRlcnJ1
cHRzX2VuIHw9IDB4MjA7DQorCWVsc2UNCisJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuaW50ZXJy
dXB0c19lbiAmPSAweDEwOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgc3NpemVf
dCB0c2wyeDd4X2Fsc190aHJlc2hfbG93X3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1
Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGlpb19k
ZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2No
aXAgKmNoaXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorDQorCXJldHVybiBzbnByaW50ZihidWYs
IFBBR0VfU0laRSwgIiVkXG4iLA0KKwkJCWNoaXAtPnRzbDJ4N3hfc2V0dGluZ3MuYWxzX3RocmVz
aF9sb3cpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4X2Fsc190aHJlc2hfbG93X3N0
b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs
IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZf
aW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlw
ID0gaWlvX3ByaXYoZGV2X2luZm8pOw0KKwl1bnNpZ25lZCBsb25nIHZhbHVlOw0KKw0KKwlpZiAo
a3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWNoaXAt
PnRzbDJ4N3hfc2V0dGluZ3MuYWxzX3RocmVzaF9sb3cgPSB2YWx1ZTsNCisNCisJcmV0dXJuIGxl
bjsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9hbHNfdGhyZXNoX2hpZ2hfc2hvdyhz
dHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy
ICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEo
ZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsN
CisNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsDQorCQkJY2hpcC0+
dHNsMng3eF9zZXR0aW5ncy5hbHNfdGhyZXNoX2hpZ2gpOw0KK30NCisNCitzdGF0aWMgc3NpemVf
dCB0c2wyeDd4X2Fsc190aHJlc2hfaGlnaF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0
cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4p
DQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsN
CisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsNCisJdW5z
aWduZWQgbG9uZyB2YWx1ZTsNCisNCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKSkNCisJ
CXJldHVybiAtRUlOVkFMOw0KKw0KKwljaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc190aHJlc2hf
aGlnaCA9IHZhbHVlOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0
c2wyeDd4X3Byb3hfdGhyZXNoX2xvd19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0
IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2
ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlw
ICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0KKw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQ
QUdFX1NJWkUsICIlZFxuIiwNCisJCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLnByb3hfdGhyZXNf
bG93KTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgdHNsMng3eF9wcm94X3RocmVzaF9sb3dfc3Rv
cmUoc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwg
Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9p
bmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAg
PSBpaW9fcHJpdihkZXZfaW5mbyk7DQorCXVuc2lnbmVkIGxvbmcgdmFsdWU7DQorDQorCWlmIChr
c3RydG91bChidWYsIDAsICZ2YWx1ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJY2hpcC0+
dHNsMng3eF9zZXR0aW5ncy5wcm94X3RocmVzX2xvdyA9IHZhbHVlOw0KKw0KKwlyZXR1cm4gbGVu
Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0c2wyeDd4X3Byb3hfdGhyZXNoX2hpZ2hfc2hvdyhz
dHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy
ICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEo
ZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsN
CisNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsDQorCQkJY2hpcC0+
dHNsMng3eF9zZXR0aW5ncy5wcm94X3RocmVzX2hpZ2gpOw0KK30NCisNCitzdGF0aWMgc3NpemVf
dCB0c2wyeDd4X3Byb3hfdGhyZXNoX2hpZ2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LA0KKwlz
dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVu
KQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7
DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorCXVu
c2lnbmVkIGxvbmcgdmFsdWU7DQorDQorCWlmIChrc3RydG91bChidWYsIDAsICZ2YWx1ZSkpDQor
CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJY2hpcC0+dHNsMng3eF9zZXR0aW5ncy5wcm94X3RocmVz
X2hpZ2ggPSB2YWx1ZTsNCisNCisJcmV0dXJuIGxlbjsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg
dHNsMng3eF9wcm94X2RhdGFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsDQorCXN0cnVjdCBkZXZp
Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAqZGV2
X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAqY2hp
cCA9IGlpb19wcml2KGRldl9pbmZvKTsNCisJdHNsMng3eF9wcm94X3BvbGwoZGV2X2luZm8pOw0K
Kw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwNCisJCQljaGlwLT5w
cm94X2N1cl9pbmZvLnByb3hfZGF0YSk7DQorfQ0KKw0KKy8qIHNhbXBsaW5nX2ZyZXF1ZW5jeSBB
S0EgcGVyc2lzdGVuY2UgaW4gZGF0YSBzaGVldCAqLw0KK3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hf
YWxzX3BlcnNpc3RlbmNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2aWNl
X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9p
bmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdYX2NoaXAgKmNoaXAg
PSBpaW9fcHJpdihkZXZfaW5mbyk7DQorDQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0la
RSwgIjB4JTAyWFxuIiwNCisJCQljaGlwLT50c2wyeDd4X3NldHRpbmdzLmFsc19wZXJzaXN0ZW5j
ZSk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHRzbDJ4N3hfYWxzX3BlcnNpc3RlbmNlX3N0b3Jl
KHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNv
bnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5m
byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0g
aWlvX3ByaXYoZGV2X2luZm8pOw0KKwl1bnNpZ25lZCBsb25nIHZhbHVlOw0KKw0KKwlpZiAoa3N0
cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWNoaXAtPnRz
bDJ4N3hfc2V0dGluZ3MuYWxzX3BlcnNpc3RlbmNlID0gdmFsdWU7DQorDQorCXJldHVybiBsZW47
DQorfQ0KKw0KK3N0YXRpYw0KK3NzaXplX3QgdHNsMng3eF9hbHNfcGVyc2lzdGVuY2VfYXZhaWxh
YmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq
YXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAi
MHgwMCAtIDB4RkYgKDAgLSAyNTUpXG4iKTsNCit9DQorDQorc3RhdGljDQorc3NpemVfdCB0c2wy
eDd4X2x1eF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg
KmF0dHIsDQorCWNoYXIgKmJ1ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRl
dl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgbHV4Ow0KKw0KKwlsdXggPSB0c2wyeDd4X2dldF9s
dXgoZGV2X2luZm8pOw0KKw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxu
IiwgbHV4KTsNCit9DQorDQorc3RhdGljDQorc3NpemVfdCB0c2wyeDd4X2FkY19zaG93KHN0cnVj
dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQorCWNoYXIgKmJ1
ZikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp
Ow0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0KKw0K
Kwl0c2wyeDd4X2dldF9sdXgoZGV2X2luZm8pOw0KKw0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQ
QUdFX1NJWkUsICIweCUwOHhcbiIsDQorCQkJKChjaGlwLT5hbHNfY3VyX2luZm8uYWxzX2NoMCA8
PCAxNikgfA0KKwkJCQkJY2hpcC0+YWxzX2N1cl9pbmZvLmFsc19jaDEpKTsNCit9DQorDQorc3Rh
dGljIHNzaXplX3QgdHNsMng3eF9kb19jYWxpYnJhdGUoc3RydWN0IGRldmljZSAqZGV2LA0KKwlz
dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVu
KQ0KK3sNCisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7
DQorCXVuc2lnbmVkIGxvbmcgdmFsdWU7DQorDQorCWlmIChrc3RydG91bChidWYsIDAsICZ2YWx1
ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKHZhbHVlID09IDEpDQorCQl0c2wyeDd4
X2Fsc19jYWxpYnJhdGUoZGV2X2luZm8pOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0
aWMgc3NpemVfdCB0c2wyeDd4X2x1eHRhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KKwlz
dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGlp
b19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCXN0cnVjdCB0c2wyWDdY
X2NoaXAgKmNoaXAgPSBpaW9fcHJpdihkZXZfaW5mbyk7DQorCWludCBpOw0KKwlpbnQgb2Zmc2V0
ID0gMDsNCisNCisJaSA9IDA7DQorCXdoaWxlIChpIDwgKE1BWF9UQUJMRV9TSVpFICogMykpIHsN
CisJCW9mZnNldCArPSBzbnByaW50ZihidWYgKyBvZmZzZXQsIFBBR0VfU0laRSwgIiVkLCVkLCVk
LCIsDQorCQkJY2hpcC0+dHNsMng3eF9kZXZpY2VfbHV4W2ldLnJhdGlvLA0KKwkJCWNoaXAtPnRz
bDJ4N3hfZGV2aWNlX2x1eFtpXS5jaDAsDQorCQkJY2hpcC0+dHNsMng3eF9kZXZpY2VfbHV4W2ld
LmNoMSk7DQorCQlpZiAoY2hpcC0+dHNsMng3eF9kZXZpY2VfbHV4W2ldLnJhdGlvID09IDApIHsN
CisJCQkvKiBXZSBqdXN0IHByaW50ZWQgdGhlIGZpcnN0ICIwIiBlbnRyeS4NCisJCQkgKiBOb3cg
Z2V0IHJpZCBvZiB0aGUgZXh0cmEgIiwiIGFuZCBicmVhay4gKi8NCisJCQlvZmZzZXQtLTsNCisJ
CQlicmVhazsNCisJCX0NCisJCWkrKzsNCisJfQ0KKw0KKwlvZmZzZXQgKz0gc25wcmludGYoYnVm
ICsgb2Zmc2V0LCBQQUdFX1NJWkUsICJcbiIpOw0KKwlyZXR1cm4gb2Zmc2V0Ow0KK30NCisNCitz
dGF0aWMgc3NpemVfdCB0c2wyeDd4X2x1eHRhYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwN
CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90
IGxlbikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShk
ZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYoZGV2X2luZm8pOw0K
KwlpbnQgdmFsdWVbQVJSQVlfU0laRShjaGlwLT50c2wyeDd4X2RldmljZV9sdXgpKjMgKyAxXTsN
CisJaW50IG47DQorDQorCWdldF9vcHRpb25zKGJ1ZiwgQVJSQVlfU0laRSh2YWx1ZSksIHZhbHVl
KTsNCisNCisJLyogV2Ugbm93IGhhdmUgYW4gYXJyYXkgb2YgaW50cyBzdGFydGluZyBhdCB2YWx1
ZVsxXSwgYW5kDQorCSAqIGVudW1lcmF0ZWQgYnkgdmFsdWVbMF0uDQorCSAqIFdlIGV4cGVjdCBl
YWNoIGdyb3VwIG9mIHRocmVlIGludHMgaXMgb25lIHRhYmxlIGVudHJ5LA0KKwkgKiBhbmQgdGhl
IGxhc3QgdGFibGUgZW50cnkgaXMgYWxsIDAuDQorCSAqLw0KKwluID0gdmFsdWVbMF07DQorCWlm
ICgobiAlIDMpIHx8IG4gPCA2IHx8DQorCQkJbiA+ICgoQVJSQVlfU0laRShjaGlwLT50c2wyeDd4
X2RldmljZV9sdXgpIC0gMSkgKiAzKSkgew0KKwkJZGV2X2luZm8oZGV2LCAiTFVYIFRBQkxFIElO
UFVUIEVSUk9SIDEgVmFsdWVbMF09JWRcbiIsIG4pOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0N
CisNCisJaWYgKCh2YWx1ZVsobiAtIDIpXSB8IHZhbHVlWyhuIC0gMSldIHwgdmFsdWVbbl0pICE9
IDApIHsNCisJCWRldl9pbmZvKGRldiwgIkxVWCBUQUJMRSBJTlBVVCBFUlJPUiAyIFZhbHVlWzBd
PSVkXG4iLCBuKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWlmIChjaGlwLT50c2wy
eDd4X2NoaXBfc3RhdHVzID09IFRTTDJYN1hfQ0hJUF9XT1JLSU5HKQ0KKwkJdHNsMng3eF9jaGlw
X29mZihkZXZfaW5mbyk7DQorDQorCS8qIFplcm8gb3V0IHRoZSB0YWJsZSAqLw0KKwltZW1zZXQo
Y2hpcC0+dHNsMng3eF9kZXZpY2VfbHV4LCAwLCBzaXplb2YoY2hpcC0+dHNsMng3eF9kZXZpY2Vf
bHV4KSk7DQorCW1lbWNweShjaGlwLT50c2wyeDd4X2RldmljZV9sdXgsICZ2YWx1ZVsxXSwgKHZh
bHVlWzBdICogNCkpOw0KKw0KKwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCB0
c2wyeDd4X2RvX3Byb3hfY2FsaWJyYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJc3RydWN0IGRl
dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikNCit7DQor
CXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwl1bnNp
Z25lZCBsb25nIHZhbHVlOw0KKw0KKwlpZiAoa3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQ0KKwkJ
cmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICh2YWx1ZSA9PSAxKQ0KKwkJdHNsMng3eF9wcm94X2Nh
bChkZXZfaW5mbyk7DQorDQorCXJldHVybiBsZW47DQorfQ0KKw0KK3N0YXRpYyBERVZJQ0VfQVRU
Uihwb3dlcl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsDQorCQl0c2wyeDd4X3Bvd2VyX3N0YXRl
X3Nob3csIHRzbDJ4N3hfcG93ZXJfc3RhdGVfc3RvcmUpOw0KKw0KK3N0YXRpYyBERVZJQ0VfQVRU
Uihwcm94aW1pdHlfcmF3LCBTX0lSVUdPLA0KKwkJdHNsMng3eF9wcm94aW1pdHlfZGV0ZWN0X3No
b3csIE5VTEwpOw0KKw0KK3N0YXRpYyBERVZJQ0VfQVRUUihpbnRlbnNpdHlfaW5mcmFyZWRfcmF3
LCBTX0lSVUdPLA0KKwkJdHNsMng3eF9wcm94X2RhdGFfc2hvdywgTlVMTCk7DQorDQorDQorc3Rh
dGljIERFVklDRV9BVFRSKHByb3hpbWl0eV9jYWxpYnNjYWxlLCBTX0lSVUdPIHwgU19JV1VTUiwN
CisJCXRzbDJ4N3hfcHJveF9nYWluX3Nob3csIHRzbDJ4N3hfcHJveF9nYWluX3N0b3JlKTsNCitz
dGF0aWMgREVWSUNFX0FUVFIocHJveGltaXR5X2NhbGlic2NhbGVfYXZhaWxhYmxlLCBTX0lSVUdP
LA0KKwkJdHNsMng3eF9wcm94X2dhaW5fYXZhaWxhYmxlX3Nob3csIE5VTEwpOw0KKw0KK3N0YXRp
YyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfY2FsaWJzY2FsZSwgU19JUlVHTyB8IFNfSVdVU1Is
DQorCQl0c2wyeDd4X2dhaW5fc2hvdywgdHNsMng3eF9nYWluX3N0b3JlKTsNCitzdGF0aWMgREVW
SUNFX0FUVFIoaWxsdW1pbmFuY2UwX2NhbGlic2NhbGVfYXZhaWxhYmxlLCBTX0lSVUdPLA0KKwkJ
dHNsMng3eF9nYWluX2F2YWlsYWJsZV9zaG93LCBOVUxMKTsNCisNCitzdGF0aWMgREVWSUNFX0FU
VFIoaWxsdW1pbmFuY2UwX2ludGVncmF0aW9uX3RpbWUsIFNfSVJVR08gfCBTX0lXVVNSLA0KKwkJ
dHNsMng3eF9hbHNfdGltZV9zaG93LCB0c2wyeDd4X2Fsc190aW1lX3N0b3JlKTsNCitzdGF0aWMg
REVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2ludGVncmF0aW9uX3RpbWVfYXZhaWxhYmxlLCBTX0lS
VUdPLA0KKwkJdHNsMng3eF9hbHNfdGltZV9hdmFpbGFibGVfc2hvdywgTlVMTCk7DQorDQorc3Rh
dGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9jYWxpYmJpYXMsIFNfSVJVR08gfCBTX0lXVVNS
LA0KKwkJdHNsMng3eF9hbHNfdHJpbV9zaG93LCB0c2wyeDd4X2Fsc190cmltX3N0b3JlKTsNCisN
CitzdGF0aWMgREVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2lucHV0X3RhcmdldCwgU19JUlVHTyB8
IFNfSVdVU1IsDQorCQl0c2wyeDd4X2Fsc19jYWxfdGFyZ2V0X3Nob3csIHRzbDJ4N3hfYWxzX2Nh
bF90YXJnZXRfc3RvcmUpOw0KKw0KK3N0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfYm90
aF9yYXcsIFNfSVJVR08sIHRzbDJ4N3hfYWRjX3Nob3csDQorCQlOVUxMKTsNCisNCitzdGF0aWMg
REVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2lucHV0LCBTX0lSVUdPLCB0c2wyeDd4X2x1eF9zaG93
LA0KKwkJTlVMTCk7DQorc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9jYWxpYnJhdGUs
IFNfSVdVU1IsIE5VTEwsDQorCQl0c2wyeDd4X2RvX2NhbGlicmF0ZSk7DQorc3RhdGljIERFVklD
RV9BVFRSKHByb3hpbWl0eV9jYWxpYnJhdGUsIFNfSVdVU1IsIE5VTEwsDQorCQl0c2wyeDd4X2Rv
X3Byb3hfY2FsaWJyYXRlKTsNCisNCitzdGF0aWMgREVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2x1
eF90YWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsDQorCQl0c2wyeDd4X2x1eHRhYmxlX3Nob3csIHRz
bDJ4N3hfbHV4dGFibGVfc3RvcmUpOw0KKw0KK3N0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5j
ZTBfdGhyZXNoX2ZhbGxpbmdfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLA0KKwkJdHNsMng3eF9h
bHNfdGhyZXNoX2xvd19zaG93LCB0c2wyeDd4X2Fsc190aHJlc2hfbG93X3N0b3JlKTsNCisNCitz
dGF0aWMgREVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX3RocmVzaF9yaXNpbmdfdmFsdWUsIFNfSVJV
R08gfCBTX0lXVVNSLA0KKwkJdHNsMng3eF9hbHNfdGhyZXNoX2hpZ2hfc2hvdywgdHNsMng3eF9h
bHNfdGhyZXNoX2hpZ2hfc3RvcmUpOw0KKw0KK3N0YXRpYyBERVZJQ0VfQVRUUihzYW1wbGluZ19m
cmVxdWVuY3ksIFNfSVJVR08gfCBTX0lXVVNSLA0KKwkJdHNsMng3eF9hbHNfcGVyc2lzdGVuY2Vf
c2hvdywgdHNsMng3eF9hbHNfcGVyc2lzdGVuY2Vfc3RvcmUpOw0KKw0KK3N0YXRpYyBERVZJQ0Vf
QVRUUihzYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLCBTX0lSVUdPLA0KKwkJdHNsMng3eF9h
bHNfcGVyc2lzdGVuY2VfYXZhaWxhYmxlX3Nob3csIE5VTEwpOw0KKw0KK3N0YXRpYyBERVZJQ0Vf
QVRUUihwcm94aW1pdHlfdGhyZXNoX3Jpc2luZ192YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsDQor
CQl0c2wyeDd4X3Byb3hfdGhyZXNoX2hpZ2hfc2hvdywgdHNsMng3eF9wcm94X3RocmVzaF9oaWdo
X3N0b3JlKTsNCisNCitzdGF0aWMgREVWSUNFX0FUVFIocHJveGltaXR5X3RocmVzaF9mYWxsaW5n
X3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwNCisJCXRzbDJ4N3hfcHJveF90aHJlc2hfbG93X3No
b3csIHRzbDJ4N3hfcHJveF90aHJlc2hfbG93X3N0b3JlKTsNCisNCitzdGF0aWMgc3RydWN0IGF0
dHJpYnV0ZSAqdHNsMjU3MV9kZXZpY2VfYXR0cnNbXSA9IHsNCisJJmRldl9hdHRyX3Bvd2VyX3N0
YXRlLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfY2FsaWJzY2FsZS5hdHRyLA0KKwkm
ZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2NhbGlic2NhbGVfYXZhaWxhYmxlLmF0dHIsDQorCSZkZXZf
YXR0cl9pbGx1bWluYW5jZTBfaW50ZWdyYXRpb25fdGltZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxs
dW1pbmFuY2UwX2ludGVncmF0aW9uX3RpbWVfYXZhaWxhYmxlLmF0dHIsDQorCSZkZXZfYXR0cl9p
bGx1bWluYW5jZTBfY2FsaWJiaWFzLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5w
dXRfdGFyZ2V0LmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfYm90aF9yYXcuYXR0ciwN
CisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnB1dC5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1p
bmFuY2UwX2NhbGlicmF0ZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2x1eF90YWJs
ZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX3RocmVzaF9mYWxsaW5nX3ZhbHVlLmF0
dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfdGhyZXNoX3Jpc2luZ192YWx1ZS5hdHRyLA0K
KwkmZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmF0dHIsDQorCSZkZXZfYXR0cl9zYW1wbGlu
Z19mcmVxdWVuY3lfYXZhaWxhYmxlLmF0dHIsDQorCU5VTEwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1
Y3QgYXR0cmlidXRlICp0c2wyNjcxX2RldmljZV9hdHRyc1tdID0gew0KKwkmZGV2X2F0dHJfcG93
ZXJfc3RhdGUuYXR0ciwNCisJJmRldl9hdHRyX3Byb3hpbWl0eV9yYXcuYXR0ciwNCisJJmRldl9h
dHRyX2ludGVuc2l0eV9pbmZyYXJlZF9yYXcuYXR0ciwNCisJJmRldl9hdHRyX3NhbXBsaW5nX2Zy
ZXF1ZW5jeS5hdHRyLA0KKwkmZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5h
dHRyLA0KKwkmZGV2X2F0dHJfcHJveGltaXR5X3RocmVzaF9yaXNpbmdfdmFsdWUuYXR0ciwNCisJ
JmRldl9hdHRyX3Byb3hpbWl0eV90aHJlc2hfZmFsbGluZ192YWx1ZS5hdHRyLA0KKwkmZGV2X2F0
dHJfcHJveGltaXR5X2NhbGlicmF0ZS5hdHRyLA0KKwlOVUxMDQorfTsNCisNCitzdGF0aWMgc3Ry
dWN0IGF0dHJpYnV0ZSAqdHNsMjc3MV9kZXZpY2VfYXR0cnNbXSA9IHsNCisJJmRldl9hdHRyX3Bv
d2VyX3N0YXRlLmF0dHIsDQorCSZkZXZfYXR0cl9wcm94aW1pdHlfcmF3LmF0dHIsDQorCSZkZXZf
YXR0cl9pbnRlbnNpdHlfaW5mcmFyZWRfcmF3LmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5j
ZTBfY2FsaWJzY2FsZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2NhbGlic2NhbGVf
YXZhaWxhYmxlLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW50ZWdyYXRpb25fdGlt
ZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2ludGVncmF0aW9uX3RpbWVfYXZhaWxh
YmxlLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfY2FsaWJiaWFzLmF0dHIsDQorCSZk
ZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXRfdGFyZ2V0LmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1
bWluYW5jZTBfYm90aF9yYXcuYXR0ciwNCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnB1dC5h
dHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2NhbGlicmF0ZS5hdHRyLA0KKwkmZGV2X2F0
dHJfaWxsdW1pbmFuY2UwX2x1eF90YWJsZS5hdHRyLA0KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2Uw
X3RocmVzaF9mYWxsaW5nX3ZhbHVlLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfdGhy
ZXNoX3Jpc2luZ192YWx1ZS5hdHRyLA0KKwkmZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmF0
dHIsDQorCSZkZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmF0dHIsDQorCSZk
ZXZfYXR0cl9wcm94aW1pdHlfdGhyZXNoX3Jpc2luZ192YWx1ZS5hdHRyLA0KKwkmZGV2X2F0dHJf
cHJveGltaXR5X3RocmVzaF9mYWxsaW5nX3ZhbHVlLmF0dHIsDQorCSZkZXZfYXR0cl9wcm94aW1p
dHlfY2FsaWJyYXRlLmF0dHIsDQorCU5VTEwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmli
dXRlICp0c2wyNTcyX2RldmljZV9hdHRyc1tdID0gew0KKwkmZGV2X2F0dHJfcG93ZXJfc3RhdGUu
YXR0ciwNCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9jYWxpYnNjYWxlLmF0dHIsDQorCSZkZXZf
YXR0cl9pbGx1bWluYW5jZTBfY2FsaWJzY2FsZV9hdmFpbGFibGUuYXR0ciwNCisJJmRldl9hdHRy
X2lsbHVtaW5hbmNlMF9pbnRlZ3JhdGlvbl90aW1lLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWlu
YW5jZTBfaW50ZWdyYXRpb25fdGltZV9hdmFpbGFibGUuYXR0ciwNCisJJmRldl9hdHRyX2lsbHVt
aW5hbmNlMF9jYWxpYmJpYXMuYXR0ciwNCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnB1dF90
YXJnZXQuYXR0ciwNCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9ib3RoX3Jhdy5hdHRyLA0KKwkm
ZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2lucHV0LmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5j
ZTBfY2FsaWJyYXRlLmF0dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfbHV4X3RhYmxlLmF0
dHIsDQorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfdGhyZXNoX2ZhbGxpbmdfdmFsdWUuYXR0ciwN
CisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF90aHJlc2hfcmlzaW5nX3ZhbHVlLmF0dHIsDQorCSZk
ZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuYXR0ciwNCisJJmRldl9hdHRyX3NhbXBsaW5nX2Zy
ZXF1ZW5jeV9hdmFpbGFibGUuYXR0ciwNCisJTlVMTA0KK307DQorDQorc3RhdGljIHN0cnVjdCBh
dHRyaWJ1dGUgKnRzbDI2NzJfZGV2aWNlX2F0dHJzW10gPSB7DQorCSZkZXZfYXR0cl9wb3dlcl9z
dGF0ZS5hdHRyLA0KKwkmZGV2X2F0dHJfcHJveGltaXR5X3Jhdy5hdHRyLA0KKwkmZGV2X2F0dHJf
aW50ZW5zaXR5X2luZnJhcmVkX3Jhdy5hdHRyLA0KKwkmZGV2X2F0dHJfcHJveGltaXR5X2NhbGli
c2NhbGUuYXR0ciwNCisJJmRldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5hdHRyLA0KKwkmZGV2
X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5hdHRyLA0KKwkmZGV2X2F0dHJfcHJv
eGltaXR5X3RocmVzaF9yaXNpbmdfdmFsdWUuYXR0ciwNCisJJmRldl9hdHRyX3Byb3hpbWl0eV90
aHJlc2hfZmFsbGluZ192YWx1ZS5hdHRyLA0KKwkmZGV2X2F0dHJfcHJveGltaXR5X2NhbGlicmF0
ZS5hdHRyLA0KKwlOVUxMDQorfTsNCisNCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHNsMjc3
Ml9kZXZpY2VfYXR0cnNbXSA9IHsNCisJCSZkZXZfYXR0cl9wb3dlcl9zdGF0ZS5hdHRyLA0KKwkJ
JmRldl9hdHRyX3Byb3hpbWl0eV9yYXcuYXR0ciwNCisJCSZkZXZfYXR0cl9wcm94aW1pdHlfY2Fs
aWJzY2FsZS5hdHRyLA0KKwkJJmRldl9hdHRyX2ludGVuc2l0eV9pbmZyYXJlZF9yYXcuYXR0ciwN
CisJCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfY2FsaWJzY2FsZS5hdHRyLA0KKwkJJmRldl9hdHRy
X2lsbHVtaW5hbmNlMF9jYWxpYnNjYWxlX2F2YWlsYWJsZS5hdHRyLA0KKwkJJmRldl9hdHRyX2ls
bHVtaW5hbmNlMF9pbnRlZ3JhdGlvbl90aW1lLmF0dHIsDQorCQkmZGV2X2F0dHJfaWxsdW1pbmFu
Y2UwX2ludGVncmF0aW9uX3RpbWVfYXZhaWxhYmxlLmF0dHIsDQorCQkmZGV2X2F0dHJfaWxsdW1p
bmFuY2UwX2NhbGliYmlhcy5hdHRyLA0KKwkJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnB1dF90
YXJnZXQuYXR0ciwNCisJCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfYm90aF9yYXcuYXR0ciwNCisJ
CSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXQuYXR0ciwNCisJCSZkZXZfYXR0cl9pbGx1bWlu
YW5jZTBfY2FsaWJyYXRlLmF0dHIsDQorCQkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2x1eF90YWJs
ZS5hdHRyLA0KKwkJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF90aHJlc2hfZmFsbGluZ192YWx1ZS5h
dHRyLA0KKwkJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF90aHJlc2hfcmlzaW5nX3ZhbHVlLmF0dHIs
DQorCQkmZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmF0dHIsDQorCQkmZGV2X2F0dHJfc2Ft
cGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5hdHRyLA0KKwkJJmRldl9hdHRyX3Byb3hpbWl0eV90
aHJlc2hfcmlzaW5nX3ZhbHVlLmF0dHIsDQorCQkmZGV2X2F0dHJfcHJveGltaXR5X3RocmVzaF9m
YWxsaW5nX3ZhbHVlLmF0dHIsDQorCQkmZGV2X2F0dHJfcHJveGltaXR5X2NhbGlicmF0ZS5hdHRy
LA0KKwkJJmRldl9hdHRyX3Byb3hpbWl0eV9jYWxpYnNjYWxlX2F2YWlsYWJsZS5hdHRyLA0KKwkJ
TlVMTA0KK307DQorDQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHNsMlg3WF9kZXZf
YXR0cl9ncm91cF90YmxbXSA9IHsNCisJW3RzbDI1NzFdID0gew0KKwkJLmF0dHJzID0gdHNsMjU3
MV9kZXZpY2VfYXR0cnMsDQorCX0sDQorCVt0c2wyNjcxXSA9IHsNCisJCS5hdHRycyA9IHRzbDI2
NzFfZGV2aWNlX2F0dHJzLA0KKwl9LA0KKwlbdG1kMjY3MV0gPSB7DQorCQkuYXR0cnMgPSB0c2wy
NjcxX2RldmljZV9hdHRycywNCisJfSwNCisJW3RzbDI3NzFdID0gew0KKwkJLmF0dHJzID0gdHNs
Mjc3MV9kZXZpY2VfYXR0cnMsDQorCX0sDQorCVt0bWQyNzcxXSA9IHsNCisJCS5hdHRycyA9IHRz
bDI3NzFfZGV2aWNlX2F0dHJzLA0KKwl9LA0KKwlbdHNsMjU3Ml0gPSB7DQorCQkuYXR0cnMgPSB0
c2wyNTcyX2RldmljZV9hdHRycywNCisJfSwNCisJW3RzbDI2NzJdID0gew0KKwkJLmF0dHJzID0g
dHNsMjY3Ml9kZXZpY2VfYXR0cnMsDQorCX0sDQorCVt0bWQyNjcyXSA9IHsNCisJCS5hdHRycyA9
IHRzbDI2NzJfZGV2aWNlX2F0dHJzLA0KKwl9LA0KKwlbdHNsMjc3Ml0gPSB7DQorCQkuYXR0cnMg
PSB0c2wyNzcyX2RldmljZV9hdHRycywNCisJfSwNCisJW3RtZDI3NzJdID0gew0KKwkJLmF0dHJz
ID0gdHNsMjc3Ml9kZXZpY2VfYXR0cnMsDQorCX0sDQorDQorfTsNCisNCitzdGF0aWMgSUlPX0RF
VklDRV9BVFRSKGlsbHVtaW5hbmNlX3RocmVzaF9ib3RoX2VuLA0KKwkJU19JUlVHTyB8IFNfSVdV
U1IsDQorCQl0c2wyeDd4X2ludGVycnVwdHNfZW5fc2hvdywgdHNsMng3eF9pbnRlcnJ1cHRzX2Vu
X3N0b3JlLCAwKTsNCisNCitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHByb3hpbWl0eV90aHJlc2hf
Ym90aF9lbiwNCisJCVNfSVJVR08gfCBTX0lXVVNSLA0KKwkJdHNsMng3eF9wcm94X2ludGVycnVw
dF9zaG93LCB0c2wyeDd4X3Byb3hfaW50ZXJydXB0X3N0b3JlLCAwKTsNCisNCitzdGF0aWMgc3Ry
dWN0IGF0dHJpYnV0ZSAqdHNsMlg3WF9wcm94X2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsNCisJJmlp
b19kZXZfYXR0cl9wcm94aW1pdHlfdGhyZXNoX2JvdGhfZW4uZGV2X2F0dHIuYXR0ciwNCisJTlVM
TCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0c2wyWDdYX2Fsc19ldmVudF9h
dHRyaWJ1dGVzW10gPSB7DQorCSZpaW9fZGV2X2F0dHJfaWxsdW1pbmFuY2VfdGhyZXNoX2JvdGhf
ZW4uZGV2X2F0dHIuYXR0ciwNCisJTlVMTCwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmli
dXRlICp0c2wyWDdYX3Byb3hhbHNfZXZlbnRfYXR0cmlidXRlc1tdID0gew0KKwkmaWlvX2Rldl9h
dHRyX2lsbHVtaW5hbmNlX3RocmVzaF9ib3RoX2VuLmRldl9hdHRyLmF0dHIsDQorCSZpaW9fZGV2
X2F0dHJfcHJveGltaXR5X3RocmVzaF9ib3RoX2VuLmRldl9hdHRyLmF0dHIsDQorCU5VTEwsDQor
fTsNCisNCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0c2wyWDdYX2V2ZW50X2F0dHJf
Z3JvdXBfdGJsW10gPSB7DQorCVt0c2wyNTcxXSA9IHsNCisJCS5hdHRycyA9IHRzbDJYN1hfYWxz
X2V2ZW50X2F0dHJpYnV0ZXMsDQorCQkubmFtZSAgPSAiZXZlbnRzIiwNCisJfSwNCisJW3RzbDI2
NzFdID0gew0KKwkJLmF0dHJzID0gdHNsMlg3WF9wcm94X2V2ZW50X2F0dHJpYnV0ZXMsDQorCQku
bmFtZSAgPSAiZXZlbnRzIiwNCisJfSwNCisJW3RtZDI2NzFdID0gew0KKwkJLmF0dHJzID0gdHNs
Mlg3WF9wcm94X2V2ZW50X2F0dHJpYnV0ZXMsDQorCQkubmFtZSAgPSAiZXZlbnRzIiwNCisJfSwN
CisJW3RzbDI3NzFdID0gew0KKwkJLmF0dHJzID0gdHNsMlg3WF9wcm94YWxzX2V2ZW50X2F0dHJp
YnV0ZXMsDQorCQkubmFtZSAgPSAiZXZlbnRzIiwNCisJfSwNCisJW3RtZDI3NzFdID0gew0KKwkJ
LmF0dHJzID0gdHNsMlg3WF9wcm94YWxzX2V2ZW50X2F0dHJpYnV0ZXMsDQorCQkubmFtZSAgPSAi
ZXZlbnRzIiwNCisJfSwNCisNCisJW3RzbDI1NzJdID0gew0KKwkJLmF0dHJzID0gdHNsMlg3WF9h
bHNfZXZlbnRfYXR0cmlidXRlcywNCisJCS5uYW1lICA9ICJldmVudHMiLA0KKwl9LA0KKwlbdHNs
MjY3Ml0gPSB7DQorCQkuYXR0cnMgPSB0c2wyWDdYX3Byb3hfZXZlbnRfYXR0cmlidXRlcywNCisJ
CS5uYW1lICA9ICJldmVudHMiLA0KKwl9LA0KKwlbdG1kMjY3Ml0gPSB7DQorCQkuYXR0cnMgPSB0
c2wyWDdYX3Byb3hfZXZlbnRfYXR0cmlidXRlcywNCisJCS5uYW1lICA9ICJldmVudHMiLA0KKwl9
LA0KKwlbdHNsMjc3Ml0gPSB7DQorCQkuYXR0cnMgPSB0c2wyWDdYX3Byb3hhbHNfZXZlbnRfYXR0
cmlidXRlcywNCisJCS5uYW1lICA9ICJldmVudHMiLA0KKwl9LA0KKwlbdG1kMjc3Ml0gPSB7DQor
CQkuYXR0cnMgPSB0c2wyWDdYX3Byb3hhbHNfZXZlbnRfYXR0cmlidXRlcywNCisJCS5uYW1lICA9
ICJldmVudHMiLA0KKwl9DQorfTsNCisNCisNCisvKiBVc2UgdGhlIGRlZmF1bHQgcmVnaXN0ZXIg
dmFsdWVzIHRvIGlkZW50aWZ5IHRoZSBUYW9zIGRldmljZSAqLw0KK3N0YXRpYyBpbnQgdHNsMng3
eF9kZXZpY2VfaWQodW5zaWduZWQgY2hhciAqYnVmcCwgaW50IHRhcmdldCkNCit7DQorCXN3aXRj
aCAodGFyZ2V0KSB7DQorCWNhc2UgdHNsMjU3MToNCisJY2FzZSB0c2wyNjcxOg0KKwljYXNlIHRz
bDI3NzE6DQorCQlyZXR1cm4gKChidWZwW1RTTDJYN1hfQ0hJUElEXSAmIDB4ZjApID09IFRSSVRP
Tl9JRCk7DQorCWJyZWFrOw0KKwljYXNlIHRtZDI2NzE6DQorCWNhc2UgdG1kMjc3MToNCisJCXJl
dHVybiAoKGJ1ZnBbVFNMMlg3WF9DSElQSURdICYgMHhmMCkgPT0gSEFMSUJVVF9JRCk7DQorCWJy
ZWFrOw0KKwljYXNlIHRzbDI1NzI6DQorCWNhc2UgdHNsMjY3MjoNCisJY2FzZSB0bWQyNjcyOg0K
KwljYXNlIHRzbDI3NzI6DQorCWNhc2UgdG1kMjc3MjoNCisJCXJldHVybiAoKGJ1ZnBbVFNMMlg3
WF9DSElQSURdICYgMHhmMCkgPT0gU1dPUkRGSVNIX0lEKTsNCisJYnJlYWs7DQorCX0NCisNCisJ
cmV0dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gdHNs
Mlg3WF9pbmZvW10gPSB7DQorCVt0c2wyNTcxXSA9IHsNCisJCQkuYXR0cnMgPSAmdHNsMlg3WF9k
ZXZfYXR0cl9ncm91cF90YmxbdHNsMjU3MV0sDQorCQkJLmV2ZW50X2F0dHJzID0gJnRzbDJYN1hf
ZXZlbnRfYXR0cl9ncm91cF90YmxbdHNsMjU3MV0sDQorCQkJLmRyaXZlcl9tb2R1bGUgPSBUSElT
X01PRFVMRSwNCisJfSwNCisJW3RzbDI2NzFdID0gew0KKwkJCS5hdHRycyA9ICZ0c2wyWDdYX2Rl
dl9hdHRyX2dyb3VwX3RibFt0c2wyNjcxXSwNCisJCQkuZXZlbnRfYXR0cnMgPSAmdHNsMlg3WF9l
dmVudF9hdHRyX2dyb3VwX3RibFt0c2wyNjcxXSwNCisJCQkuZHJpdmVyX21vZHVsZSA9IFRISVNf
TU9EVUxFLA0KKwl9LA0KKwlbdG1kMjY3MV0gPSB7DQorCQkJLmF0dHJzID0gJnRzbDJYN1hfZGV2
X2F0dHJfZ3JvdXBfdGJsW3RzbDI2NzFdLA0KKwkJCS5ldmVudF9hdHRycyA9ICZ0c2wyWDdYX2V2
ZW50X2F0dHJfZ3JvdXBfdGJsW3RzbDI2NzFdLA0KKwkJCS5kcml2ZXJfbW9kdWxlID0gVEhJU19N
T0RVTEUsDQorCX0sDQorCVt0c2wyNzcxXSA9IHsNCisJCQkuYXR0cnMgPSAmdHNsMlg3WF9kZXZf
YXR0cl9ncm91cF90YmxbdHNsMjc3MV0sDQorCQkJLmV2ZW50X2F0dHJzID0gJnRzbDJYN1hfZXZl
bnRfYXR0cl9ncm91cF90YmxbdHNsMjc3MV0sDQorCQkJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01P
RFVMRSwNCisJfSwNCisJW3RtZDI3NzFdID0gew0KKwkJCS5hdHRycyA9ICZ0c2wyWDdYX2Rldl9h
dHRyX2dyb3VwX3RibFt0c2wyNzcxXSwNCisJCQkuZXZlbnRfYXR0cnMgPSAmdHNsMlg3WF9ldmVu
dF9hdHRyX2dyb3VwX3RibFt0c2wyNzcxXSwNCisJCQkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9E
VUxFLA0KKwl9LA0KKwlbdHNsMjU3Ml0gPSB7DQorCQkJLmF0dHJzID0gJnRzbDJYN1hfZGV2X2F0
dHJfZ3JvdXBfdGJsW3RzbDI1NzJdLA0KKwkJCS5ldmVudF9hdHRycyA9ICZ0c2wyWDdYX2V2ZW50
X2F0dHJfZ3JvdXBfdGJsW3RzbDI1NzJdLA0KKwkJCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RV
TEUsDQorCX0sDQorCVt0c2wyNjcyXSA9IHsNCisJCQkuYXR0cnMgPSAmdHNsMlg3WF9kZXZfYXR0
cl9ncm91cF90YmxbdHNsMjY3Ml0sDQorCQkJLmV2ZW50X2F0dHJzID0gJnRzbDJYN1hfZXZlbnRf
YXR0cl9ncm91cF90YmxbdHNsMjY3Ml0sDQorCQkJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVM
RSwNCisJfSwNCisJW3RtZDI2NzJdID0gew0KKwkJCS5hdHRycyA9ICZ0c2wyWDdYX2Rldl9hdHRy
X2dyb3VwX3RibFt0c2wyNjcyXSwNCisJCQkuZXZlbnRfYXR0cnMgPSAmdHNsMlg3WF9ldmVudF9h
dHRyX2dyb3VwX3RibFt0c2wyNjcyXSwNCisJCQkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxF
LA0KKwl9LA0KKwlbdHNsMjc3Ml0gPSB7DQorCQkJLmF0dHJzID0gJnRzbDJYN1hfZGV2X2F0dHJf
Z3JvdXBfdGJsW3RzbDI3NzJdLA0KKwkJCS5ldmVudF9hdHRycyA9ICZ0c2wyWDdYX2V2ZW50X2F0
dHJfZ3JvdXBfdGJsW3RzbDI3NzJdLA0KKwkJCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUs
DQorCX0sDQorCVt0bWQyNzcyXSA9IHsNCisJCQkuYXR0cnMgPSAmdHNsMlg3WF9kZXZfYXR0cl9n
cm91cF90YmxbdHNsMjc3Ml0sDQorCQkJLmV2ZW50X2F0dHJzID0gJnRzbDJYN1hfZXZlbnRfYXR0
cl9ncm91cF90YmxbdHNsMjc3Ml0sDQorCQkJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwN
CisJfSwNCisNCit9Ow0KKw0KKy8qDQorICogUnVuLXRpbWUgaW50ZXJydXB0IGhhbmRsZXIgLSBk
ZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIGFtYmllbnQNCisgKiBsaWdodCBz
ZW5zaW5nIGludGVycnVwdCBtb2RlLCB0aGlzIGhhbmRsZXIgY2FuIHF1ZXVlIHVwDQorICogYSB0
aHJlYWQsIHRvIGhhbmRsZSB2YWxpZCBpbnRlcnJ1cHRzLg0KKyAqLw0KK3N0YXRpYyBpcnFyZXR1
cm5fdCB0c2wyeDd4X2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkNCit7DQor
CXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwcml2YXRlOw0KKwlzdHJ1Y3QgdHNsMlg3WF9j
aGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCisJczY0IHRpbWVzdGFtcCA9IGlpb19n
ZXRfdGltZV9ucygpOw0KKwlpbnQgcmV0Ow0KKwlpbnQgdmFsdWU7DQorDQorCXZhbHVlID0gaTJj
X3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNoaXAtPmNsaWVudCwNCisJCVRTTDJYN1hfQ01EX1JFRyB8
IFRTTDJYN1hfU1RBVFVTKTsNCisNCisJLyogV2hhdCB0eXBlIG9mIGludGVycnVwdCBkbyB3ZSBu
ZWVkIHRvIHByb2Nlc3MgKi8NCisJaWYgKHZhbHVlICYgVFNMMlg3WF9TVEFfUFJYX0lOVFIpIHsN
CisJCXRzbDJ4N3hfcHJveF9wb2xsKGluZGlvX2Rldik7DQorCQlpaW9fcHVzaF9ldmVudChpbmRp
b19kZXYsDQorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19QUk9YSU1JVFksDQor
CQkJCQkJICAgIDAsDQorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwNCisJCQkJCQkgICAg
SUlPX0VWX0RJUl9FSVRIRVIpLA0KKwkJCQkJCSAgICB0aW1lc3RhbXApOw0KKwl9DQorDQorCWlm
ICh2YWx1ZSAmIFRTTDJYN1hfU1RBX0FMU19JTlRSKSB7DQorCQl0c2wyeDd4X2dldF9sdXgoaW5k
aW9fZGV2KTsNCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwNCisJCSAgICAgICBJSU9fVU5N
T0RfRVZFTlRfQ09ERShJSU9fTElHSFQsDQorCQkJCQkgICAgMCwNCisJCQkJCSAgICBJSU9fRVZf
VFlQRV9USFJFU0gsDQorCQkJCQkgICAgSUlPX0VWX0RJUl9FSVRIRVIpLA0KKwkJCQkJICAgIHRp
bWVzdGFtcCk7DQorCX0NCisJLyogQ2xlYXIgaW50ZXJydXB0IG5vdyB0aGF0IHdlIGhhdmUgdGhl
IHN0YXR1cyAqLw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjaGlwLT5jbGllbnQsDQor
CQlUU0wyWDdYX0NNRF9SRUcgfCBUU0wyWDdYX0NNRF9TUExfRk4gfA0KKwkJVFNMMlg3WF9DTURf
UFJPWEFMU19JTlRDTFIpOw0KKwlpZiAocmV0IDwgMCkNCisJCWRldl9lcnIoJmNoaXAtPmNsaWVu
dC0+ZGV2LA0KKwkJIkZhaWxlZCB0byBjbGVhciBpcnEgZnJvbSBldmVudCBoYW5kbGVyLiBlcnIg
PSAlZFxuIiwgcmV0KTsNCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCisvKg0KKyAq
IENsaWVudCBwcm9iZSBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0c2wy
eDd4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnRwLA0KKwljb25zdCBzdHJ1Y3QgaTJj
X2RldmljZV9pZCAqaWQpDQorew0KKwlpbnQgaSwgcmV0Ow0KKwl1bnNpZ25lZCBjaGFyIGJ1ZltU
U0wyWDdYX01BWF9ERVZJQ0VfUkVHU107DQorCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPQ0K
KwkJCWlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mKHN0cnVjdCB0c2wyWDdYX2NoaXApKTsNCisJ
c3RydWN0IHRzbDJYN1hfY2hpcAkqY2hpcCA9IGlpb19wcml2KGluZGlvX2Rldik7DQorDQorCWlm
IChpbmRpb19kZXYgPT0gTlVMTCkgew0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWRldl9lcnIoJmNs
aWVudHAtPmRldiwgImlpbyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7DQorCQlnb3RvIGZhaWwxOw0K
Kwl9DQorDQorCWNoaXAgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0KKwljaGlwLT5jbGllbnQgPSBj
bGllbnRwOw0KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50cCwgaW5kaW9fZGV2KTsNCisNCisJ
bXV0ZXhfaW5pdCgmY2hpcC0+YWxzX211dGV4KTsNCisJbXV0ZXhfaW5pdCgmY2hpcC0+cHJveF9t
dXRleCk7DQorDQorCWNoaXAtPnRzbDJ4N3hfY2hpcF9zdGF0dXMgPSBUU0wyWDdYX0NISVBfVU5L
Tk9XTjsNCisNCisJY2hpcC0+cGRhdGEgPSBjbGllbnRwLT5kZXYucGxhdGZvcm1fZGF0YTsNCisJ
aWYgKGNoaXAtPnBkYXRhICYmIGNoaXAtPnBkYXRhLT5pbml0KQ0KKwkJCWNoaXAtPnBkYXRhLT5p
bml0KGNsaWVudHApOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgVFNMMlg3WF9NQVhfREVWSUNFX1JF
R1M7IGkrKykgew0KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50cCwNCisJCQkJ
KFRTTDJYN1hfQ01EX1JFRyB8IChUU0wyWDdYX0NOVFJMICsgaSkpKTsNCisJCWlmIChyZXQgPCAw
KSB7DQorCQkJZGV2X2VycigmY2xpZW50cC0+ZGV2LCAiaTJjX3NtYnVzX3dyaXRlX2J5dGVzKCkg
dG8gY21kICINCisJCQkicmVnIGZhaWxlZCBpbiB0c2wyeDd4X3Byb2JlKCksIGVyciA9ICVkXG4i
LCByZXQpOw0KKwkJCWdvdG8gZmFpbDE7DQorCQl9DQorCQlyZXQgPSBpMmNfc21idXNfcmVhZF9i
eXRlKGNsaWVudHApOw0KKwkJaWYgKHJldCA8IDApIHsNCisJCQlkZXZfZXJyKCZjbGllbnRwLT5k
ZXYsICJpMmNfc21idXNfcmVhZF9ieXRlIGZyb20gIg0KKwkJCSJyZWcgZmFpbGVkIGluIHRzbDJ4
N3hfcHJvYmUoKSwgZXJyID0gJWRcbiIsIHJldCk7DQorDQorCQkJZ290byBmYWlsMTsNCisJCX0N
CisJCWJ1ZltpXSA9IHJldDsNCisJfQ0KKw0KKwlpZiAoKCF0c2wyeDd4X2RldmljZV9pZChidWYs
IGlkLT5kcml2ZXJfZGF0YSkpIHx8DQorCQkJKHRzbDJ4N3hfZGV2aWNlX2lkKGJ1ZiwgaWQtPmRy
aXZlcl9kYXRhKSA9PSAtRUlOVkFMKSkgew0KKwkJZGV2X2luZm8oJmNoaXAtPmNsaWVudC0+ZGV2
LCAiaTJjIGRldmljZSBmb3VuZCBidXQgZG9lcyBub3QgbWF0Y2ggIg0KKwkJCSJleHBlY3RlZCBp
ZCBpbiB0c2wyeDd4X3Byb2JlKClcbiIpOw0KKwkJZ290byBmYWlsMTsNCisJfQ0KKw0KKwljaGlw
LT5pZCA9IGlkLT5kcml2ZXJfZGF0YTsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUo
Y2xpZW50cCwgKFRTTDJYN1hfQ01EX1JFRyB8IFRTTDJYN1hfQ05UUkwpKTsNCisJaWYgKHJldCA8
IDApIHsNCisJCWRldl9lcnIoJmNsaWVudHAtPmRldiwgImkyY19zbWJ1c193cml0ZV9ieXRlKCkg
dG8gY21kIHJlZyAiDQorCQkJImZhaWxlZCBpbiB0c2wyeDd4X3Byb2JlKCksIGVyciA9ICVkXG4i
LCByZXQpOw0KKwkJZ290byBmYWlsMTsNCisJfQ0KKw0KKwlpbmRpb19kZXYtPmluZm8gPSAmdHNs
Mlg3WF9pbmZvW2lkLT5kcml2ZXJfZGF0YV07DQorCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZj
bGllbnRwLT5kZXY7DQorCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsNCisJ
aW5kaW9fZGV2LT5uYW1lID0gY2hpcC0+Y2xpZW50LT5uYW1lOw0KKwlpbmRpb19kZXYtPmNoYW5u
ZWxzID0gdHNsMlg3WF9jaGFubmVsczsNCisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJB
WV9TSVpFKHRzbDJYN1hfY2hhbm5lbHMpOw0KKw0KKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVy
KGluZGlvX2Rldik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoJmNsaWVudHAtPmRldiwgImlp
byByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsNCisJCWdvdG8gZmFpbDI7DQorCX0NCisNCisJaWYg
KGNsaWVudHAtPmlycSkgew0KKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50cC0+
aXJxLA0KKwkJCQkJICAgTlVMTCwNCisJCQkJCSAgICZ0c2wyeDd4X2V2ZW50X2hhbmRsZXIsDQor
CQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9PTkVTSE9ULA0KKwkJCQkJICAgIlRT
TDJYN1hfZXZlbnQiLA0KKwkJCQkJICAgaW5kaW9fZGV2KTsNCisJCWlmIChyZXQpDQorCQkJZGV2
X2VycigmY2xpZW50cC0+ZGV2LCAiaXJxIHJlcXVlc3QgZmFpbGVkIik7DQorCX0NCisNCisJLyog
TG9hZCB1cCB0aGUgZGVmYXVsdHMgKi8NCisJdHNsMng3eF9kZWZhdWx0cyhjaGlwKTsNCisNCisJ
LyogTWFrZSBzdXJlIHRoZSBjaGlwIGlzIG9uICovDQorCXRzbDJ4N3hfY2hpcF9vbihpbmRpb19k
ZXYpOw0KKw0KKwlkZXZfaW5mbygmY2xpZW50cC0+ZGV2LCAiJXMgTGlnaHQgc2Vuc29yIGZvdW5k
LlxuIiwgaWQtPm5hbWUpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitmYWlsMToNCisJaWYgKGNoaXAt
PnBkYXRhICYmIGNoaXAtPnBkYXRhLT50ZWFyZG93bikNCisJCWNoaXAtPnBkYXRhLT50ZWFyZG93
bihjbGllbnRwKTsNCisJaWlvX2ZyZWVfZGV2aWNlKGluZGlvX2Rldik7DQorDQorZmFpbDI6DQor
CXJldHVybiByZXQ7DQorDQorfQ0KKw0KKw0KK3N0YXRpYyBpbnQgdHNsMng3eF9zdXNwZW5kKHN0
cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9n
ZXRfZHJ2ZGF0YShkZXYpOw0KKwlzdHJ1Y3QgdHNsMlg3WF9jaGlwICpjaGlwID0gaWlvX3ByaXYo
ZGV2X2luZm8pOw0KKw0KKwlpbnQgcmV0ID0gMDsNCisNCisJLyogQmxvY2tzIGlmIHdvcmsgaXMg
YWN0aXZlICovDQorCWNhbmNlbF93b3JrX3N5bmMoJmNoaXAtPndvcmtfdGhyZXNoKTsNCisNCisJ
aWYgKGNoaXAtPnRzbDJ4N3hfY2hpcF9zdGF0dXMgPT0gVFNMMlg3WF9DSElQX1dPUktJTkcpIHsN
CisJCXJldCA9IHRzbDJ4N3hfY2hpcF9vZmYoZGV2X2luZm8pOw0KKwkJY2hpcC0+dHNsMng3eF9j
aGlwX3N0YXR1cyA9IFRTTDJYN1hfQ0hJUF9TVVNQRU5ERUQ7DQorCX0NCisNCisJaWYgKGNoaXAt
PnBkYXRhICYmIGNoaXAtPnBkYXRhLT5wbGF0Zm9ybV9wb3dlcikgew0KKwkJcG1fbWVzc2FnZV90
IHBtbSA9IHtQTV9FVkVOVF9TVVNQRU5EfTsNCisJCWNoaXAtPnBkYXRhLT5wbGF0Zm9ybV9wb3dl
cihkZXYsIHBtbSk7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB0
c2wyeDd4X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaWlvX2RldiAq
ZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJc3RydWN0IHRzbDJYN1hfY2hpcCAq
Y2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsNCisJaW50IHJldCA9IDA7DQorDQorCWlmIChjaGlw
LT5wZGF0YSAmJiBjaGlwLT5wZGF0YS0+cGxhdGZvcm1fcG93ZXIpIHsNCisJCXBtX21lc3NhZ2Vf
dCBwbW0gPSB7UE1fRVZFTlRfUkVTVU1FfTsNCisJCWNoaXAtPnBkYXRhLT5wbGF0Zm9ybV9wb3dl
cihkZXYsIHBtbSk7DQorCX0NCisNCisJaWYgKGNoaXAtPnRzbDJ4N3hfY2hpcF9zdGF0dXMgPT0g
VFNMMlg3WF9DSElQX1NVU1BFTkRFRCkNCisJCXJldCA9IHRzbDJ4N3hfY2hpcF9vbihkZXZfaW5m
byk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19kZXZleGl0IHRzbDJ4
N3hfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgaWlvX2Rl
diAqaW5kaW9fZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCB0c2wy
WDdYX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisNCisJdHNsMng3
eF9jaGlwX29mZihpbmRpb19kZXYpOw0KKw0KKwlpZiAoY2xpZW50LT5pcnEpDQorCQlmcmVlX2ly
cShjbGllbnQtPmlycSwgY2hpcC0+Y2xpZW50LT5uYW1lKTsNCisNCisJZmx1c2hfc2NoZWR1bGVk
X3dvcmsoKTsNCisNCisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmlpb19kZXYpOw0KKwlr
ZnJlZShjaGlwKTsNCisNCisJaWYgKGNoaXAtPnBkYXRhICYmIGNoaXAtPnBkYXRhLT50ZWFyZG93
bikNCisJCWNoaXAtPnBkYXRhLT50ZWFyZG93bihjbGllbnQpOw0KKw0KKwlyZXR1cm4gMDsNCit9
DQorDQorc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRzbDJ4N3hfaWR0YWJsZVtdID0gew0K
Kwl7ICJ0c2wyNTcxIiwgdHNsMjU3MSB9LA0KKwl7ICJ0c2wyNjcxIiwgdHNsMjY3MSB9LA0KKwl7
ICJ0bWQyNjcxIiwgdG1kMjY3MSB9LA0KKwl7ICJ0c2wyNzcxIiwgdHNsMjc3MSB9LA0KKwl7ICJ0
bWQyNzcxIiwgdG1kMjc3MSB9LA0KKwl7ICJ0c2wyNTcyIiwgdHNsMjU3MiB9LA0KKwl7ICJ0c2wy
NjcyIiwgdHNsMjY3MiB9LA0KKwl7ICJ0bWQyNjcyIiwgdG1kMjY3MiB9LA0KKwl7ICJ0c2wyNzcy
IiwgdHNsMjc3MiB9LA0KKwl7ICJ0bWQyNzcyIiwgdG1kMjc3MiB9LA0KKwl7fQ0KK307DQorDQor
TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRzbDJ4N3hfaWR0YWJsZSk7DQorDQorc3RhdGljIGNv
bnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRzbDJ4N3hfcG1fb3BzID0gew0KKwkuc3VzcGVuZCA9IHRz
bDJ4N3hfc3VzcGVuZCwNCisJLnJlc3VtZSAgPSB0c2wyeDd4X3Jlc3VtZSwNCit9Ow0KKw0KKy8q
IERyaXZlciBkZWZpbml0aW9uICovDQorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRzbDJ4N3hf
ZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAidHNsMlg3WCIsDQorCQkucG0g
PSAmdHNsMng3eF9wbV9vcHMsDQorDQorCX0sDQorCS5pZF90YWJsZSA9IHRzbDJ4N3hfaWR0YWJs
ZSwNCisJLnByb2JlID0gdHNsMng3eF9wcm9iZSwNCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRz
bDJ4N3hfcmVtb3ZlKSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgX19pbml0IHRzbDJ4N3hfaW5pdCh2
b2lkKQ0KK3sNCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0c2wyeDd4X2RyaXZlcik7DQorfQ0K
Kw0KK3N0YXRpYyB2b2lkIF9fZXhpdCB0c2wyeDd4X2V4aXQodm9pZCkNCit7DQorCWkyY19kZWxf
ZHJpdmVyKCZ0c2wyeDd4X2RyaXZlcik7DQorfQ0KKw0KK21vZHVsZV9pbml0KHRzbDJ4N3hfaW5p
dCk7DQorbW9kdWxlX2V4aXQodHNsMng3eF9leGl0KTsNCisNCitNT0RVTEVfQVVUSE9SKCJKLiBB
dWd1c3QgQnJlbm5lcjxqYnJlbm5lckB0YW9zaW5jLmNvbT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJ
T04oIlRBT1MgdHNsMlg3WCBhbWJpZW50IGxpZ2h0IHNlbnNvciBkcml2ZXIiKTsNCitNT0RVTEVf
TElDRU5TRSgiR1BMIik7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90
c2wyeDd4X2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMng3eF9jb3JlLmgN
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi45YTY0NDEyDQotLS0gL2Rldi9u
dWxsDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L3RzbDJ4N3hfY29yZS5oDQpAQCAt
MCwwICsxLDEzOCBAQA0KKy8qDQorICogRGV2aWNlIGRyaXZlciBmb3IgbW9uaXRvcmluZyBhbWJp
ZW50IGxpZ2h0IGludGVuc2l0eSAobHV4KQ0KKyAqIGFuZCBwcm94aW1pdHkgKHByb3gpIHdpdGhp
biB0aGUgVEFPUyBUU0wyWDdYIGZhbWlseSBvZiBkZXZpY2VzLg0KKyAqDQorICogQ29weXJpZ2h0
IChjKSAyMDEyLCBUQU9TIENvcnBvcmF0aW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVA0KKyAqIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcg0K
KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhbG9uZw0KKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sDQorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQQkwMjExMC0xMzAxLCBVU0EuDQorICovDQorDQorI2lmbmRlZiBf
X1RTTDJYN1hfSA0KKyNkZWZpbmUgX19UU0wyWDdYX0gNCisjaW5jbHVkZSA8bGludXgvcG0uaD4N
CisNCisjaW5jbHVkZSAiLi4vaWlvLmgiDQorDQorLyogVEFPUyBSZWdpc3RlciBkZWZpbml0aW9u
cyAtIG5vdGU6DQorICogZGVwZW5kaW5nIG9uIGRldmljZSwgc29tZSBvZiB0aGVzZSByZWdpc3Rl
ciBhcmUgbm90IHVzZWQgYW5kIHRoZQ0KKyAqIHJlZ2lzdGVyIGFkZHJlc3MgaXMgYmVuaWduLg0K
KyAqLw0KKy8qIDJYN1ggcmVnaXN0ZXIgb2Zmc2V0cyAqLw0KKyNkZWZpbmUgVFNMMlg3WF9NQVhf
REVWSUNFX1JFR1MgMzINCisjZGVmaW5lIFRTTDJYN1hfUkVHX01BWCAgICAgICAgIDE2DQorDQor
LyogRGV2aWNlIFJlZ2lzdGVycyBhbmQgTWFza3MgKi8NCisjZGVmaW5lIFRTTDJYN1hfQ05UUkwg
ICAgICAgICAgICAgICAgICAweDAwDQorI2RlZmluZSBUU0wyWDdYX0FMU19USU1FICAgICAgICAg
ICAgICAgMFgwMQ0KKyNkZWZpbmUgVFNMMlg3WF9QUlhfVElNRSAgICAgICAgICAgICAgIDB4MDIN
CisjZGVmaW5lIFRTTDJYN1hfV0FJVF9USU1FICAgICAgICAgICAgICAweDAzDQorI2RlZmluZSBU
U0wyWDdYX0FMU19NSU5USFJFU0hMTyAgICAgICAgMFgwNA0KKyNkZWZpbmUgVFNMMlg3WF9BTFNf
TUlOVEhSRVNISEkgICAgICAgIDBYMDUNCisjZGVmaW5lIFRTTDJYN1hfQUxTX01BWFRIUkVTSExP
ICAgICAgICAwWDA2DQorI2RlZmluZSBUU0wyWDdYX0FMU19NQVhUSFJFU0hISSAgICAgICAgMFgw
Nw0KKyNkZWZpbmUgVFNMMlg3WF9QUlhfTUlOVEhSRVNITE8gICAgICAgIDBYMDgNCisjZGVmaW5l
IFRTTDJYN1hfUFJYX01JTlRIUkVTSEhJICAgICAgICAwWDA5DQorI2RlZmluZSBUU0wyWDdYX1BS
WF9NQVhUSFJFU0hMTyAgICAgICAgMFgwQQ0KKyNkZWZpbmUgVFNMMlg3WF9QUlhfTUFYVEhSRVNI
SEkgICAgICAgIDBYMEINCisjZGVmaW5lIFRTTDJYN1hfUEVSU0lTVEVOQ0UgICAgICAgICAgICAw
eDBDDQorI2RlZmluZSBUU0wyWDdYX1BSWF9DT05GSUcgICAgICAgICAgICAgMHgwRA0KKyNkZWZp
bmUgVFNMMlg3WF9QUlhfQ09VTlQgICAgICAgICAgICAgIDB4MEUNCisjZGVmaW5lIFRTTDJYN1hf
R0FJTiAgICAgICAgICAgICAgICAgICAweDBGDQorI2RlZmluZSBUU0wyWDdYX05PVFVTRUQgICAg
ICAgICAgICAgICAgMHgxMA0KKyNkZWZpbmUgVFNMMlg3WF9SRVZJRCAgICAgICAgICAgICAgICAg
IDB4MTENCisjZGVmaW5lIFRTTDJYN1hfQ0hJUElEICAgICAgICAgICAgICAgICAweDEyDQorI2Rl
ZmluZSBUU0wyWDdYX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgxMw0KKyNkZWZpbmUgVFNMMlg3
WF9BTFNfQ0hBTjBMTyAgICAgICAgICAgIDB4MTQNCisjZGVmaW5lIFRTTDJYN1hfQUxTX0NIQU4w
SEkgICAgICAgICAgICAweDE1DQorI2RlZmluZSBUU0wyWDdYX0FMU19DSEFOMUxPICAgICAgICAg
ICAgMHgxNg0KKyNkZWZpbmUgVFNMMlg3WF9BTFNfQ0hBTjFISSAgICAgICAgICAgIDB4MTcNCisj
ZGVmaW5lIFRTTDJYN1hfUFJYX0xPICAgICAgICAgICAgICAgICAweDE4DQorI2RlZmluZSBUU0wy
WDdYX1BSWF9ISSAgICAgICAgICAgICAgICAgMHgxOQ0KKw0KKy8qIHRzbDJYN1ggY21kIHJlZyBt
YXNrcyAqLw0KKyNkZWZpbmUgVFNMMlg3WF9DTURfUkVHICAgICAgICAgICAgICAgIDB4ODANCisj
ZGVmaW5lIFRTTDJYN1hfQ01EX1NQTF9GTiAgICAgICAgICAgICAweDYwDQorDQorI2RlZmluZSBU
U0wyWDdYX0NNRF9QUk9YX0lOVF9DTFIgICAgICAgMFgwNQ0KKyNkZWZpbmUgVFNMMlg3WF9DTURf
QUxTX0lOVF9DTFIgICAgICAgIDB4MDYNCisjZGVmaW5lIENNRF9QUk9YQUxTX0lOVF9DTFIgICAg
ICAgICAgICAwWDA3DQorDQorLyogdHNsMlg3WCBjbnRybCByZWcgbWFza3MgKi8NCisjZGVmaW5l
IFRTTDJYN1hfQ05UTF9BRENfRU5CTCAgICAgICAgICAweDAyDQorI2RlZmluZSBUU0wyWDdYX0NO
VExfUFdSX09OICAgICAgICAgICAgMHgwMQ0KKw0KKy8qIHRzbDJYN1ggc3RhdHVzIHJlZyBtYXNr
cyAqLw0KKyNkZWZpbmUgVFNMMlg3WF9TVEFfQURDX1ZBTElEICAgICAgICAgIDB4MDENCisjZGVm
aW5lIFRTTDJYN1hfU1RBX1BSWF9WQUxJRCAgICAgICAgICAweDAyDQorI2RlZmluZSBUU0wyWDdY
X1NUQV9BRENfUFJYX1ZBTElEICAgICAgMHgwMw0KKyNkZWZpbmUgVFNMMlg3WF9TVEFfQUxTX0lO
VFIgICAgICAgICAgIDB4MTANCisjZGVmaW5lIFRTTDJYN1hfU1RBX0FEQ19JTlRSICAgICAgICAg
ICAweDEwDQorI2RlZmluZSBUU0wyWDdYX1NUQV9QUlhfSU5UUiAgICAgICAgICAgMHgyMA0KKw0K
KyNkZWZpbmUgVFNMMlg3WF9TVEFfQURDX0lOVFIgICAgICAgICAgIDB4MTANCisNCisvKiB0c2wy
WDdYIGNudHJsIHJlZyBtYXNrcyAqLw0KKyNkZWZpbmUgQ05UTF9SRUdfQ0xFQVIgICAgICAgICAg
ICAgICAgIDB4MDANCisjZGVmaW5lIENOVExfUFJPWF9JTlRfRU5CTCAgICAgICAgICAgICAwWDIw
DQorI2RlZmluZSBDTlRMX0FMU19JTlRfRU5CTCAgICAgICAgICAgICAgMFgxMA0KKyNkZWZpbmUg
VFNMMlg3WF9DTlRMX1dBSVRfVE1SX0VOQkwgICAgIDBYMDgNCisjZGVmaW5lIENOVExfUFJPWF9E
RVRfRU5CTCAgICAgICAgICAgICAwWDA0DQorI2RlZmluZSBDTlRMX0FEQ19FTkJMICAgICAgICAg
ICAgICAgICAgMHgwMg0KKyNkZWZpbmUgVFNMMlg3WF9DTlRMX1BXUk9OICAgICAgICAgICAgIDB4
MDENCisjZGVmaW5lIENOVExfQUxTUE9OX0VOQkwgICAgICAgICAgICAgICAweDAzDQorI2RlZmlu
ZSBDTlRMX0lOVEFMU1BPTl9FTkJMICAgICAgICAgICAgMHgxMw0KKyNkZWZpbmUgQ05UTF9QUk9Y
UE9OX0VOQkwgICAgICAgICAgICAgIDB4MEYNCisjZGVmaW5lIENOVExfSU5UUFJPWFBPTl9FTkJM
ICAgICAgICAgICAweDJGDQorI2RlZmluZSBUU0wyWDdYX0NNRF9QUk9YQUxTX0lOVENMUiAgICAg
MFgwNw0KKw0KKy8qUHJveCBkaW9kZSB0byB1c2UgKi8NCisjZGVmaW5lIERJT0RFMCAgICAgICAg
ICAgICAgICAgICAgICAgICAweDEwDQorI2RlZmluZSBESU9ERTEgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgyMA0KKyNkZWZpbmUgRElPREVfQk9USCAgICAgICAgICAgICAgICAgICAgIDB4MzAN
CisNCisvKiBMRUQgUG93ZXIgKi8NCisjZGVmaW5lIG1BMTAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwDQorI2RlZmluZSBtQTUwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MA0K
KyNkZWZpbmUgbUEyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODANCisjZGVmaW5lIG1B
MTMgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQwDQorDQorLyogTWF4IG51bWJlciBvZiBz
ZWdtZW50cyBhbGxvd2FibGUgaW4gTFVYIHRhYmxlICovDQorI2RlZmluZSBNQVhfVEFCTEVfU0la
RQkJOQ0KKyNkZWZpbmUgTUFYX0RFRkFVTFRfVEFCTEVfQllURVMgKHNpemVvZihpbnQpICogTUFY
X1RBQkxFX1NJWkUpDQorDQorc3RydWN0IHRzbDJ4N3hfbHV4IHsNCisJdW5zaWduZWQgaW50IHJh
dGlvOw0KKwl1bnNpZ25lZCBpbnQgY2gwOw0KKwl1bnNpZ25lZCBpbnQgY2gxOw0KK307DQorDQor
DQorLyogc3RydWN0IHRzbDJ4N3hfcGxhdGZvcm1fZGF0YSAtIEFzc3VtZSBhbGwgdmFyaWVudHMg
d2lsbCBoYXZlIHRoaXMgKi8NCitzdHJ1Y3QgdHNsMlg3WF9wbGF0Zm9ybV9kYXRhIHsNCisJaW50
ICgqcGxhdGZvcm1fcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90KTsNCisJ
LyogVGhlIGZvbGxvd2luZyBjYWxsYmFjayBnZXRzIGNhbGxlZCB3aGVuIHRoZSBUU0wyNzcyIGlz
IHBvd2VyZWQgb24gKi8NCisJaW50ICgqcG93ZXJfb24pICAgICAgKHN0cnVjdCBpaW9fZGV2ICpp
bmRpb19kZXYpOw0KKwkvKiBUaGUgZm9sbG93aW5nIGNhbGxiYWNrIGdldHMgY2FsbGVkIHdoZW4g
dGhlIFRTTDI3NzIgaXMgcG93ZXJlZCBvZmYgKi8NCisJaW50ICgqcG93ZXJfb2ZmKSAgICAgKHN0
cnVjdCBpMmNfY2xpZW50ICpkZXYpOw0KKwkvKiBUaGUgZm9sbG93aW5nIGNhbGxiYWNrIGdldHMg
Y2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBhZGRlZCAqLw0KKwlpbnQgKCppbml0KSAgICAgICAg
ICAoc3RydWN0IGkyY19jbGllbnQgKmRldik7DQorCS8qIFRoZSBmb2xsb3dpbmcgY2FsbGJhY2sg
Z2V0cyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIHJlbW92ZWQgKi8NCisJaW50ICgqdGVhcmRv
d24pICAgICAgKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYpOw0KKwkvKiBUaGVzZSBhcmUgdGhlIGRl
dmljZSBzcGVjaWZpYyBnbGFzcyBjb2VmZmljZW50cyB1c2VkIHRvDQorCSAqIGNhbGN1bGF0ZSBM
dXggKi8NCisJc3RydWN0IHRzbDJ4N3hfbHV4IHBsYXRmb3JtX2x1eF90YWJsZVtNQVhfVEFCTEVf
U0laRV07DQorfTsNCisNCisjZW5kaWYgLyogX19UU0wyWDdYX0ggKi8NCi0tDQoxLjcuNC4xDQoN
Cg==

             reply	other threads:[~2012-02-10 19:21 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-10 19:06 Jon Brenner [this message]
2012-02-13 15:19 ` [PATCH V1] TAOS tsl2x7x Jonathan Cameron
2012-02-13 15:28   ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328900812.15759.6.camel@jonz-ub2 \
    --to=jbrenner@taosinc.com \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).