Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jan 2007 11:44:05 +0300
From:      "Abdullah Ibn Hamad Al-Marri" <almarrie@gmail.com>
To:        freebsd-mobile@freebsd.org
Cc:        freebsd-acpi@freebsd.org
Subject:   AMD Turion64 X2 works with PowerNow! thank you Bruno
Message-ID:  <499c70c0701240044q32162e40ye8f923bf758e8633@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_1513_22269344.1169628245334
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hello AMD users ;)

In regard to my post about AMD hangs with PowerNow! in my Acer Laptop
which has http://groups.google.com/group/mailing.freebsd.mobile/browse_frm/thread/49b02729f7d8b27e/d36307d211e914c5#d36307d211e914c5

I have been working with Mr. Bruno for few days, and finally PowerNow!
works with no hanging issues at all, I used the new powernow.c
provided by Bruno attached.

So I wish this could be backported to RELENG_6 asap, and yes I tested
it in FreeBSD 6.2-STABLE only, not with current.

http://lists.freebsd.org/pipermail/cvs-all/2007-January/205192.html

bruno       2007-01-23 19:20:31 UTC

  FreeBSD src repository

  Modified files:
    sys/i386/cpufreq     powernow.c
  Log:
  o introduce a flags 'errata' for HW bugs onto the softc.
  o remove errata_a0 and introduce the corresponding flags into 'errata'.
  o introduce a new errata for K8, namely some platform might set the
    PENDING_BIT but aren't able to unset it, also don't loop forever
    waiting PENDING_BIT being cleared.
  o try to introduce a workaround for the PENDING_BIT stuck problem,
  o support now half multipliers for K8.

  Tested by:      Abdullah Al-Marrie

  Approved by:    njl

  Revision  Changes    Path
  1.4       +97 -42    src/sys/i386/cpufreq/powernow.c


To make sure it works with RELENG_6 use this

Index: powernow.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/cpufreq/powernow.c,v
retrieving revision 1.3
retrieving revision 1.2
diff -u -r1.3 -r1.2
--- powernow.c  16 May 2006 14:32:16 -0000      1.3
+++ powernow.c  31 Mar 2005 06:11:04 -0000      1.2
@@ -44,6 +44,7 @@
 #include <machine/md_var.h>
 #include <machine/specialreg.h>
 #include <machine/cputypes.h>
+#include <machine/clock.h>
 #include <machine/vmparam.h>
 #include <sys/rman.h>

-- 
Regards,

-Abdullah Ibn Hamad Al-Marri
Arab Portal
http://www.WeArab.Net/

------=_Part_1513_22269344.1169628245334
Content-Type: application/octet-stream; name=powernow.c
Content-Transfer-Encoding: base64
X-Attachment-Id: f_exbiantx
Content-Disposition: attachment; filename="powernow.c"

LyotCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IEJydW5vIER1Y3JvdAogKiBDb3B5cmlnaHQg
KGMpIDIwMDQgRlVLVURBIE5vYnVoaWtvIDxuZnVrdWRhQHNwYS5pcy51ZWMuYWMuanA+CiAqCiAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WSBFWFBSRVNTIE9SCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKICogT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgovKgog
KiBNYW55IHRoYW5rcyB0byBOYXRlIExhd3NvbiBmb3IgaGlzIGhlbHBmdWwgY29tbWVudHMgb24g
dGhpcyBkcml2ZXIgYW5kCiAqIHRvIEp1bmctdWsgS2ltIGZvciB0ZXN0aW5nLgogKi8KCiNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2kzODYvY3B1ZnJl
cS9wb3dlcm5vdy5jLHYgMS4zIDIwMDYvMDUvMTYgMTQ6MzI6MTYgcGhrIEV4cCAkIik7CgojaW5j
bHVkZSA8c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvYnVzLmg+CiNpbmNsdWRlIDxzeXMvY3B1
Lmg+CiNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiNpbmNs
dWRlIDxzeXMvbW9kdWxlLmg+CiNpbmNsdWRlIDxzeXMvcGNwdS5oPgojaW5jbHVkZSA8c3lzL3N5
c3RtLmg+CgojaW5jbHVkZSA8bWFjaGluZS9wYy9iaW9zLmg+CiNpbmNsdWRlIDxtYWNoaW5lL21k
X3Zhci5oPgojaW5jbHVkZSA8bWFjaGluZS9zcGVjaWFscmVnLmg+CiNpbmNsdWRlIDxtYWNoaW5l
L2NwdXR5cGVzLmg+CiNpbmNsdWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KI2luY2x1ZGUgPHN5cy9y
bWFuLmg+CgojaW5jbHVkZSA8dm0vdm0uaD4KI2luY2x1ZGUgPHZtL3BtYXAuaD4KCiNpbmNsdWRl
ICJjcHVmcmVxX2lmLmgiCgojZGVmaW5lIFBON19UWVBFCTAKI2RlZmluZSBQTjhfVFlQRQkxCgov
KiBGbGFncyBmb3Igc29tZSBoYXJkd2FyZSBidWdzLiAqLwojZGVmaW5lIEEwX0VSUkFUQQkweDEJ
LyogQnVncyBmb3IgdGhlIHJldi4gQTAgb2YgQXRobG9uIChLNyk6CgkJCQkgKiBJbnRlcnJ1cHRz
IG11c3QgYmUgZGlzYWJsZWQgYW5kIG5vIGhhbGYKCQkJCSAqIG11bHRpcGxpZXJzIGFyZSBhbGxv
d2VkICovCiNkZWZpbmUgUEVORElOR19TVFVDSwkweDIJLyogV2l0aCBzb21lIGJ1Z2d5IGNoaXBz
ZXQgYW5kIHNvbWUgbmV3ZXIgQU1ENjQKCQkJCSAqIHByb2Nlc3NvciAoUmV2LiBHPyk6CgkJCQkg
KiB0aGUgcGVuZGluZyBiaXQgZnJvbSB0aGUgbXNyIEZJRFZJRF9TVEFUVVMKCQkJCSAqIGlzIHNl
dCBmb3JldmVyLiAgTm8gd29ya2Fyb3VuZCA6KCAqLwoKLyogTGVnYWN5IGNvbmZpZ3VyYXRpb24g
dmlhIEJJT1MgdGFibGUgUFNCLiAqLwojZGVmaW5lIFBTQl9TVEFSVAkwCiNkZWZpbmUgUFNCX1NU
RVAJMHgxMAojZGVmaW5lIFBTQl9TSUcJCSJBTURLN1BOT1chIgojZGVmaW5lIFBTQl9MRU4JCTEw
CiNkZWZpbmUgUFNCX09GRgkJMAoKc3RydWN0IHBzYl9oZWFkZXIgewoJY2hhcgkJIHNpZ25hdHVy
ZVsxMF07Cgl1aW50OF90CQkgdmVyc2lvbjsKCXVpbnQ4X3QJCSBmbGFnczsKCXVpbnQxNl90CSBz
ZXR0bGluZ3RpbWU7Cgl1aW50OF90CQkgcmVzMTsKCXVpbnQ4X3QJCSBudW1wc3Q7Cn0gX19wYWNr
ZWQ7CgpzdHJ1Y3QgcHN0X2hlYWRlciB7Cgl1aW50MzJfdAkgY3B1aWQ7Cgl1aW50OF90CQkgZnNi
OwoJdWludDhfdAkJIG1heGZpZDsKCXVpbnQ4X3QJCSBzdGFydHZpZDsKCXVpbnQ4X3QJCSBudW1w
c3RhdGVzOwp9IF9fcGFja2VkOwoKLyoKICogTVNScyBhbmQgYml0cyB1c2VkIGJ5IFBvd2Vybm93
IHRlY2hub2xvZ3kKICovCiNkZWZpbmUgTVNSX0FNREs3X0ZJRFZJRF9DVEwJCTB4YzAwMTAwNDEK
I2RlZmluZSBNU1JfQU1ESzdfRklEVklEX1NUQVRVUwkJMHhjMDAxMDA0MgoKLyogQml0ZmllbGRz
IHVzZWQgYnkgSzcgKi8KCiNkZWZpbmUgUE43X0NUUl9GSUQoeCkJCQkoKHgpICYgMHgxZikKI2Rl
ZmluZSBQTjdfQ1RSX1ZJRCh4KQkJCSgoKHgpICYgMHgxZikgPDwgOCkKI2RlZmluZSBQTjdfQ1RS
X0ZJREMJCQkweDAwMDEwMDAwCiNkZWZpbmUgUE43X0NUUl9WSURDCQkJMHgwMDAyMDAwMAojZGVm
aW5lIFBON19DVFJfRklEQ0hSQVRJTwkJMHgwMDEwMDAwMAojZGVmaW5lIFBON19DVFJfU0dUQyh4
KQkJCSgoKHVpbnQ2NF90KSh4KSAmIDB4MDAwZmZmZmYpIDw8IDMyKQoKI2RlZmluZSBQTjdfU1RB
X0NGSUQoeCkJCQkoKHgpICYgMHgxZikKI2RlZmluZSBQTjdfU1RBX1NGSUQoeCkJCQkoKCh4KSA+
PiA4KSAmIDB4MWYpCiNkZWZpbmUgUE43X1NUQV9NRklEKHgpCQkJKCgoeCkgPj4gMTYpICYgMHgx
ZikKI2RlZmluZSBQTjdfU1RBX0NWSUQoeCkJCQkoKCh4KSA+PiAzMikgJiAweDFmKQojZGVmaW5l
IFBON19TVEFfU1ZJRCh4KQkJCSgoKHgpID4+IDQwKSAmIDB4MWYpCiNkZWZpbmUgUE43X1NUQV9N
VklEKHgpCQkJKCgoeCkgPj4gNDgpICYgMHgxZikKCi8qIEFDUEkgY3RyX3ZhbCBzdGF0dXMgcmVn
aXN0ZXIgdG8gcG93ZXJub3cgazcgY29uZmlndXJhdGlvbiAqLwojZGVmaW5lIEFDUElfUE43X0NU
UkxfVE9fRklEKHgpCQkoKHgpICYgMHgxZikKI2RlZmluZSBBQ1BJX1BON19DVFJMX1RPX1ZJRCh4
KQkJKCgoeCkgPj4gNSkgJiAweDFmKQojZGVmaW5lIEFDUElfUE43X0NUUkxfVE9fU0dUQyh4KQko
KCh4KSA+PiAxMCkgJiAweGZmZmYpCgovKiBCaXRmaWVsZHMgdXNlZCBieSBLOCAqLwoKI2RlZmlu
ZSBQTjhfQ1RSX0ZJRCh4KQkJCSgoeCkgJiAweDNmKQojZGVmaW5lIFBOOF9DVFJfVklEKHgpCQkJ
KCgoeCkgJiAweDFmKSA8PCA4KQojZGVmaW5lIFBOOF9DVFJfUEVORElORyh4KQkJKCgoeCkgJiAx
KSA8PCAzMikKCiNkZWZpbmUgUE44X1NUQV9DRklEKHgpCQkJKCh4KSAmIDB4M2YpCiNkZWZpbmUg
UE44X1NUQV9TRklEKHgpCQkJKCgoeCkgPj4gOCkgJiAweDNmKQojZGVmaW5lIFBOOF9TVEFfTUZJ
RCh4KQkJCSgoKHgpID4+IDE2KSAmIDB4M2YpCiNkZWZpbmUgUE44X1NUQV9QRU5ESU5HKHgpCQko
KCh4KSA+PiAzMSkgJiAweDAxKQojZGVmaW5lIFBOOF9TVEFfQ1ZJRCh4KQkJCSgoKHgpID4+IDMy
KSAmIDB4MWYpCiNkZWZpbmUgUE44X1NUQV9TVklEKHgpCQkJKCgoeCkgPj4gNDApICYgMHgxZikK
I2RlZmluZSBQTjhfU1RBX01WSUQoeCkJCQkoKCh4KSA+PiA0OCkgJiAweDFmKQoKLyogUmVzZXJ2
ZWQxIHRvIHBvd2Vybm93IGs4IGNvbmZpZ3VyYXRpb24gKi8KI2RlZmluZSBQTjhfUFNCX1RPX1JW
Tyh4KQkJKCh4KSAmIDB4MDMpCiNkZWZpbmUgUE44X1BTQl9UT19JUlQoeCkJCSgoKHgpID4+IDIp
ICYgMHgwMykKI2RlZmluZSBQTjhfUFNCX1RPX01WUyh4KQkJKCgoeCkgPj4gNCkgJiAweDAzKQoj
ZGVmaW5lIFBOOF9QU0JfVE9fQkFUVCh4KQkJKCgoeCkgPj4gNikgJiAweDAzKQoKLyogQUNQSSBj
dHJfdmFsIHN0YXR1cyByZWdpc3RlciB0byBwb3dlcm5vdyBrOCBjb25maWd1cmF0aW9uICovCiNk
ZWZpbmUgQUNQSV9QTjhfQ1RSTF9UT19GSUQoeCkJCSgoeCkgJiAweDNmKQojZGVmaW5lIEFDUElf
UE44X0NUUkxfVE9fVklEKHgpCQkoKCh4KSA+PiA2KSAmIDB4MWYpCiNkZWZpbmUgQUNQSV9QTjhf
Q1RSTF9UT19WU1QoeCkJCSgoKHgpID4+IDExKSAmIDB4MWYpCiNkZWZpbmUgQUNQSV9QTjhfQ1RS
TF9UT19NVlMoeCkJCSgoKHgpID4+IDE4KSAmIDB4MDMpCiNkZWZpbmUgQUNQSV9QTjhfQ1RSTF9U
T19QTEwoeCkJCSgoKHgpID4+IDIwKSAmIDB4N2YpCiNkZWZpbmUgQUNQSV9QTjhfQ1RSTF9UT19S
Vk8oeCkJCSgoKHgpID4+IDI4KSAmIDB4MDMpCiNkZWZpbmUgQUNQSV9QTjhfQ1RSTF9UT19JUlQo
eCkJCSgoKHgpID4+IDMwKSAmIDB4MDMpCgoKI2RlZmluZSBXUklURV9GSURWSUQoZmlkLCB2aWQs
IGN0cmwpCVwKCXdybXNyKE1TUl9BTURLN19GSURWSURfQ1RMLAlcCgkgICAgKCgoY3RybCkgPDwg
MzIpIHwgKDFVTEwgPDwgMTYpIHwgKCh2aWQpIDw8IDgpIHwgKGZpZCkpKQoKI2RlZmluZSBDT1VO
VF9PRkZfSVJUKGlydCkJREVMQVkoMTAgKiAoMSA8PCAoaXJ0KSkpCiNkZWZpbmUgQ09VTlRfT0ZG
X1ZTVCh2c3QpCURFTEFZKDIwICogKHZzdCkpCgojZGVmaW5lIEZJRF9UT19WQ09fRklEKGZpZCkJ
XAoJKCgoZmlkKSA8IDgpID8gKDggKyAoKGZpZCkgPDwgMSkpIDogKGZpZCkpCgovKgogKiBEaXZp
ZGUgZWFjaCB2YWx1ZSBieSAxMCB0byBnZXQgdGhlIHByb2Nlc3NvciBtdWx0aXBsaWVyLgogKiBT
b21lIG9mIHRob3NlIHRhYmxlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIExpbnV4IHBvd2Vybm93LWs3
CiAqIGltcGxlbWVudGF0aW9uIGJ5IERhdmUgSm9uZXMuCiAqLwpzdGF0aWMgaW50IHBuN19maWRf
dG9fbXVsdFszMl0gPSB7CgkxMTAsIDExNSwgMTIwLCAxMjUsIDUwLCA1NSwgNjAsIDY1LAoJNzAs
IDc1LCA4MCwgODUsIDkwLCA5NSwgMTAwLCAxMDUsCgkzMCwgMTkwLCA0MCwgMjAwLCAxMzAsIDEz
NSwgMTQwLCAyMTAsCgkxNTAsIDIyNSwgMTYwLCAxNjUsIDE3MCwgMTgwLCAwLCAwLAp9OwoKCnN0
YXRpYyBpbnQgcG44X2ZpZF90b19tdWx0WzY0XSA9IHsKCTQwLCA0NSwgNTAsIDU1LCA2MCwgNjUs
IDcwLCA3NSwKCTgwLCA4NSwgOTAsIDk1LCAxMDAsIDEwNSwgMTEwLCAxMTUsCgkxMjAsIDEyNSwg
MTMwLCAxMzUsIDE0MCwgMTQ1LCAxNTAsIDE1NSwKCTE2MCwgMTY1LCAxNzAsIDE3NSwgMTgwLCAx
ODUsIDE5MCwgMTk1LAoJMjAwLCAyMDUsIDIxMCwgMjE1LCAyMjAsIDIyNSwgMjMwLCAyMzUsCgky
NDAsIDI0NSwgMjUwLCAyNTUsIDI2MCwgMjY1LCAyNzAsIDI3NSwKCTI4MCwgMjg1LCAyOTAsIDI5
NSwgMzAwLCAzMDUsIDMxMCwgMzE1LAoJMzIwLCAzMjUsIDMzMCwgMzM1LCAzNDAsIDM0NSwgMzUw
LCAzNTUsCn07CgovKgogKiBVbml0cyBhcmUgaW4gbVYuCiAqLwovKiBNb2JpbGUgVlJNIChLNykg
Ki8Kc3RhdGljIGludCBwbjdfbW9iaWxlX3ZpZF90b192b2x0c1tdID0gewoJMjAwMCwgMTk1MCwg
MTkwMCwgMTg1MCwgMTgwMCwgMTc1MCwgMTcwMCwgMTY1MCwKCTE2MDAsIDE1NTAsIDE1MDAsIDE0
NTAsIDE0MDAsIDEzNTAsIDEzMDAsIDAsCgkxMjc1LCAxMjUwLCAxMjI1LCAxMjAwLCAxMTc1LCAx
MTUwLCAxMTI1LCAxMTAwLAoJMTA3NSwgMTA1MCwgMTAyNSwgMTAwMCwgOTc1LCA5NTAsIDkyNSwg
MCwKfTsKLyogRGVza3RvcCBWUk0gKEs3KSAqLwpzdGF0aWMgaW50IHBuN19kZXNrdG9wX3ZpZF90
b192b2x0c1tdID0gewoJMjAwMCwgMTk1MCwgMTkwMCwgMTg1MCwgMTgwMCwgMTc1MCwgMTcwMCwg
MTY1MCwKCTE2MDAsIDE1NTAsIDE1MDAsIDE0NTAsIDE0MDAsIDEzNTAsIDEzMDAsIDAsCgkxMjc1
LCAxMjUwLCAxMjI1LCAxMjAwLCAxMTc1LCAxMTUwLCAxMTI1LCAxMTAwLAoJMTA3NSwgMTA1MCwg
MTAyNSwgMTAwMCwgOTc1LCA5NTAsIDkyNSwgMCwKfTsKLyogRGVza3RvcCBhbmQgTW9iaWxlIFZS
TSAoSzgpICovCnN0YXRpYyBpbnQgcG44X3ZpZF90b192b2x0c1tdID0gewoJMTU1MCwgMTUyNSwg
MTUwMCwgMTQ3NSwgMTQ1MCwgMTQyNSwgMTQwMCwgMTM3NSwKCTEzNTAsIDEzMjUsIDEzMDAsIDEy
NzUsIDEyNTAsIDEyMjUsIDEyMDAsIDExNzUsCgkxMTUwLCAxMTI1LCAxMTAwLCAxMDc1LCAxMDUw
LCAxMDI1LCAxMDAwLCA5NzUsCgk5NTAsIDkyNSwgOTAwLCA4NzUsIDg1MCwgODI1LCA4MDAsIDAs
Cn07CgojZGVmaW5lIFBPV0VSTk9XX01BWF9TVEFURVMJCTE2CgpzdHJ1Y3QgcG93ZXJub3dfc3Rh
dGUgewoJaW50IGZyZXE7CglpbnQgcG93ZXI7CglpbnQgZmlkOwoJaW50IHZpZDsKfTsKCnN0cnVj
dCBwbl9zb2Z0YyB7CglkZXZpY2VfdAkJIGRldjsKCWludAkJCSBwbl90eXBlOwoJc3RydWN0IHBv
d2Vybm93X3N0YXRlCSBwb3dlcm5vd19zdGF0ZXNbUE9XRVJOT1dfTUFYX1NUQVRFU107Cgl1X2lu
dAkJCSBmc2I7Cgl1X2ludAkJCSBzZ3RjOwoJdV9pbnQJCQkgdnN0OwoJdV9pbnQJCQkgbXZzOwoJ
dV9pbnQJCQkgcGxsOwoJdV9pbnQJCQkgcnZvOwoJdV9pbnQJCQkgaXJ0OwoJaW50CQkJIGxvdzsK
CWludAkJCSBwb3dlcm5vd19tYXhfc3RhdGVzOwoJdV9pbnQJCQkgcG93ZXJub3dfc3RhdGU7Cgl1
X2ludAkJCSBlcnJhdGE7CglpbnQJCQkqdmlkX3RvX3ZvbHRzOwp9OwoKLyoKICogT2Zmc2V0cyBp
biBzdHJ1Y3QgY2Zfc2V0dGluZyBhcnJheSBmb3IgcHJpdmF0ZSB2YWx1ZXMgZ2l2ZW4gYnkKICog
YWNwaV9wZXJmIGRyaXZlci4KICovCiNkZWZpbmUgUFhfU1BFQ19DT05UUk9MCQkwCiNkZWZpbmUg
UFhfU1BFQ19TVEFUVVMJCTEKCnN0YXRpYyB2b2lkCXBuX2lkZW50aWZ5KGRyaXZlcl90ICpkcml2
ZXIsIGRldmljZV90IHBhcmVudCk7CnN0YXRpYyBpbnQJcG5fcHJvYmUoZGV2aWNlX3QgZGV2KTsK
c3RhdGljIGludAlwbl9hdHRhY2goZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludAlwbl9kZXRhY2go
ZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludAlwbl9zZXQoZGV2aWNlX3QgZGV2LCBjb25zdCBzdHJ1
Y3QgY2Zfc2V0dGluZyAqY2YpOwpzdGF0aWMgaW50CXBuX2dldChkZXZpY2VfdCBkZXYsIHN0cnVj
dCBjZl9zZXR0aW5nICpjZik7CnN0YXRpYyBpbnQJcG5fc2V0dGluZ3MoZGV2aWNlX3QgZGV2LCBz
dHJ1Y3QgY2Zfc2V0dGluZyAqc2V0cywKCQkgICAgaW50ICpjb3VudCk7CnN0YXRpYyBpbnQJcG5f
dHlwZShkZXZpY2VfdCBkZXYsIGludCAqdHlwZSk7CgpzdGF0aWMgZGV2aWNlX21ldGhvZF90IHBu
X21ldGhvZHNbXSA9IHsKCS8qIERldmljZSBpbnRlcmZhY2UgKi8KCURFVk1FVEhPRChkZXZpY2Vf
aWRlbnRpZnksIHBuX2lkZW50aWZ5KSwKCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIHBuX3Byb2Jl
KSwKCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBwbl9hdHRhY2gpLAoJREVWTUVUSE9EKGRldmlj
ZV9kZXRhY2gsIHBuX2RldGFjaCksCgoJLyogY3B1ZnJlcSBpbnRlcmZhY2UgKi8KCURFVk1FVEhP
RChjcHVmcmVxX2Rydl9zZXQsIHBuX3NldCksCglERVZNRVRIT0QoY3B1ZnJlcV9kcnZfZ2V0LCBw
bl9nZXQpLAoJREVWTUVUSE9EKGNwdWZyZXFfZHJ2X3NldHRpbmdzLCBwbl9zZXR0aW5ncyksCglE
RVZNRVRIT0QoY3B1ZnJlcV9kcnZfdHlwZSwgcG5fdHlwZSksCgoJezAsIDB9Cn07CgpzdGF0aWMg
ZGV2Y2xhc3NfdCBwbl9kZXZjbGFzczsKc3RhdGljIGRyaXZlcl90IHBuX2RyaXZlciA9IHsKCSJw
b3dlcm5vdyIsCglwbl9tZXRob2RzLAoJc2l6ZW9mKHN0cnVjdCBwbl9zb2Z0YyksCn07CgpEUklW
RVJfTU9EVUxFKHBvd2Vybm93LCBjcHUsIHBuX2RyaXZlciwgcG5fZGV2Y2xhc3MsIDAsIDApOwoK
c3RhdGljIGludApwbjdfc2V0ZmlkdmlkKHN0cnVjdCBwbl9zb2Z0YyAqc2MsIGludCBmaWQsIGlu
dCB2aWQpCnsKCWludCBjZmlkLCBjdmlkOwoJdWludDY0X3Qgc3RhdHVzLCBjdGw7CgoJc3RhdHVz
ID0gcmRtc3IoTVNSX0FNREs3X0ZJRFZJRF9TVEFUVVMpOwoJY2ZpZCA9IFBON19TVEFfQ0ZJRChz
dGF0dXMpOwoJY3ZpZCA9IFBON19TVEFfQ1ZJRChzdGF0dXMpOwoKCS8qIFdlJ3JlIGFscmVhZHkg
YXQgdGhlIHJlcXVlc3RlZCBsZXZlbC4gKi8KCWlmIChmaWQgPT0gY2ZpZCAmJiB2aWQgPT0gY3Zp
ZCkKCQlyZXR1cm4gKDApOwoKCWN0bCA9IHJkbXNyKE1TUl9BTURLN19GSURWSURfQ1RMKSAmIFBO
N19DVFJfRklEQ0hSQVRJTzsKCgljdGwgfD0gUE43X0NUUl9GSUQoZmlkKTsKCWN0bCB8PSBQTjdf
Q1RSX1ZJRCh2aWQpOwoJY3RsIHw9IFBON19DVFJfU0dUQyhzYy0+c2d0Yyk7CgoJaWYgKHNjLT5l
cnJhdGEgJiBBMF9FUlJBVEEpCgkJZGlzYWJsZV9pbnRyKCk7CgoJaWYgKHBuN19maWRfdG9fbXVs
dFtmaWRdIDwgcG43X2ZpZF90b19tdWx0W2NmaWRdKSB7CgkJd3Jtc3IoTVNSX0FNREs3X0ZJRFZJ
RF9DVEwsIGN0bCB8IFBON19DVFJfRklEQyk7CgkJaWYgKHZpZCAhPSBjdmlkKQoJCQl3cm1zcihN
U1JfQU1ESzdfRklEVklEX0NUTCwgY3RsIHwgUE43X0NUUl9WSURDKTsKCX0gZWxzZSB7CgkJd3Jt
c3IoTVNSX0FNREs3X0ZJRFZJRF9DVEwsIGN0bCB8IFBON19DVFJfVklEQyk7CgkJaWYgKGZpZCAh
PSBjZmlkKQoJCQl3cm1zcihNU1JfQU1ESzdfRklEVklEX0NUTCwgY3RsIHwgUE43X0NUUl9GSURD
KTsKCX0KCglpZiAoc2MtPmVycmF0YSAmIEEwX0VSUkFUQSkKCQllbmFibGVfaW50cigpOwoKCXJl
dHVybiAoMCk7Cn0KCnN0YXRpYyBpbnQKcG44X3JlYWRfcGVuZGluZ193YWl0KHVpbnQ2NF90ICpz
dGF0dXMpCnsKCWludCBpID0gMTAwMDA7CgoJZG8KCQkqc3RhdHVzID0gcmRtc3IoTVNSX0FNREs3
X0ZJRFZJRF9TVEFUVVMpOwoJd2hpbGUgKFBOOF9TVEFfUEVORElORygqc3RhdHVzKSAmJiAtLWkp
OwoKCXJldHVybiAoaSA9PSAwID8gRU5YSU8gOiAwKTsKfQoKc3RhdGljIGludApwbjhfd3JpdGVf
ZmlkdmlkKHVfaW50IGZpZCwgdV9pbnQgdmlkLCB1aW50NjRfdCBjdHJsLCB1aW50NjRfdCAqc3Rh
dHVzKQp7CglpbnQgaSA9IDEwMDsKCglkbwoJCVdSSVRFX0ZJRFZJRChmaWQsIHZpZCwgY3RybCk7
Cgl3aGlsZSAocG44X3JlYWRfcGVuZGluZ193YWl0KHN0YXR1cykgJiYgLS1pKTsKCglyZXR1cm4g
KGkgPT0gMCA/IEVOWElPIDogMCk7Cn0KCnN0YXRpYyBpbnQKcG44X3NldGZpZHZpZChzdHJ1Y3Qg
cG5fc29mdGMgKnNjLCBpbnQgZmlkLCBpbnQgdmlkKQp7Cgl1aW50NjRfdCBzdGF0dXM7CglpbnQg
Y2ZpZCwgY3ZpZDsKCWludCBydm87CglpbnQgcnY7Cgl1X2ludCB2YWw7CgoJcnYgPSBwbjhfcmVh
ZF9wZW5kaW5nX3dhaXQoJnN0YXR1cyk7CglpZiAocnYpCgkJcmV0dXJuIChydik7CgoJY2ZpZCA9
IFBOOF9TVEFfQ0ZJRChzdGF0dXMpOwoJY3ZpZCA9IFBOOF9TVEFfQ1ZJRChzdGF0dXMpOwoKCWlm
IChmaWQgPT0gY2ZpZCAmJiB2aWQgPT0gY3ZpZCkKCQlyZXR1cm4gKDApOwoKCS8qCgkgKiBQaGFz
ZSAxOiBSYWlzZSBjb3JlIHZvbHRhZ2UgdG8gcmVxdWVzdGVkIFZJRCBpZiBmcmVxdWVuY3kgaXMK
CSAqIGdvaW5nIHVwLgoJICovCgl3aGlsZSAoY3ZpZCA+IHZpZCkgewoJCXZhbCA9IGN2aWQgLSAo
MSA8PCBzYy0+bXZzKTsKCQlydiA9IHBuOF93cml0ZV9maWR2aWQoY2ZpZCwgKHZhbCA+IDApID8g
dmFsIDogMCwgMVVMTCwgJnN0YXR1cyk7CgkJaWYgKHJ2KSB7CgkJCXNjLT5lcnJhdGEgfD0gUEVO
RElOR19TVFVDSzsKCQkJcmV0dXJuIChydik7CgkJfQoJCWN2aWQgPSBQTjhfU1RBX0NWSUQoc3Rh
dHVzKTsKCQlDT1VOVF9PRkZfVlNUKHNjLT52c3QpOwoJfQoKCS8qIC4uLiB0aGVuIHJhaXNlIHRv
IHZvbHRhZ2UgKyBSVk8gKGlmIHJlcXVpcmVkKSAqLwoJZm9yIChydm8gPSBzYy0+cnZvOyBydm8g
PiAwICYmIGN2aWQgPiAwOyAtLXJ2bykgewoJCS8qIFhYWCBJdCdzIG5vdCBjbGVhciBmcm9tIHNw
ZWMgaWYgd2UgaGF2ZSB0byBkbyB0aGF0CgkJICogaW4gMC4yNSBzdGVwIG9yIGluIE1WUy4gIFRo
ZXJlZm9yZSBkbyBpdCBhcyBpdCdzIGRvbmUKCQkgKiB1bmRlciBMaW51eCAqLwoJCXJ2ID0gcG44
X3dyaXRlX2ZpZHZpZChjZmlkLCBjdmlkIC0gMSwgMVVMTCwgJnN0YXR1cyk7CgkJaWYgKHJ2KSB7
CgkJCXNjLT5lcnJhdGEgfD0gUEVORElOR19TVFVDSzsKCQkJcmV0dXJuIChydik7CgkJfQoJCWN2
aWQgPSBQTjhfU1RBX0NWSUQoc3RhdHVzKTsKCQlDT1VOVF9PRkZfVlNUKHNjLT52c3QpOwoJfQoK
CS8qIFBoYXNlIDI6IGNoYW5nZSB0byByZXF1ZXN0ZWQgY29yZSBmcmVxdWVuY3kgKi8KCWlmIChj
ZmlkICE9IGZpZCkgewoJCXVfaW50IHZjb19maWQsIHZjb19jZmlkLCBmaWRfZGVsdGE7CgoJCXZj
b19maWQgPSBGSURfVE9fVkNPX0ZJRChmaWQpOwoJCXZjb19jZmlkID0gRklEX1RPX1ZDT19GSUQo
Y2ZpZCk7CgoJCXdoaWxlIChhYnModmNvX2ZpZCAtIHZjb19jZmlkKSA+IDIpIHsKCQkJZmlkX2Rl
bHRhID0gKHZjb19jZmlkICYgMSkgPyAxIDogMjsKCQkJaWYgKGZpZCA+IGNmaWQpIHsKCQkJCWlm
IChjZmlkID4gNykKCQkJCQl2YWwgPSBjZmlkICsgZmlkX2RlbHRhOwoJCQkJZWxzZQoJCQkJCXZh
bCA9IEZJRF9UT19WQ09fRklEKGNmaWQpICsgZmlkX2RlbHRhOwoJCQl9IGVsc2UKCQkJCXZhbCA9
IGNmaWQgLSBmaWRfZGVsdGE7CgkJCXJ2ID0gcG44X3dyaXRlX2ZpZHZpZCh2YWwsIGN2aWQsCgkJ
CSAgICBzYy0+cGxsICogKHVpbnQ2NF90KSBzYy0+ZnNiLAoJCQkgICAgJnN0YXR1cyk7CgkJCWlm
IChydikgewoJCQkJc2MtPmVycmF0YSB8PSBQRU5ESU5HX1NUVUNLOwoJCQkJcmV0dXJuIChydik7
CgkJCX0KCQkJY2ZpZCA9IFBOOF9TVEFfQ0ZJRChzdGF0dXMpOwoJCQlDT1VOVF9PRkZfSVJUKHNj
LT5pcnQpOwoKCQkJdmNvX2NmaWQgPSBGSURfVE9fVkNPX0ZJRChjZmlkKTsKCQl9CgoJCXJ2ID0g
cG44X3dyaXRlX2ZpZHZpZChmaWQsIGN2aWQsCgkJICAgIHNjLT5wbGwgKiAodWludDY0X3QpIHNj
LT5mc2IsCgkJICAgICZzdGF0dXMpOwoJCWlmIChydikgewoJCQlzYy0+ZXJyYXRhIHw9IFBFTkRJ
TkdfU1RVQ0s7CgkJCXJldHVybiAocnYpOwoJCX0KCQljZmlkID0gUE44X1NUQV9DRklEKHN0YXR1
cyk7CgkJQ09VTlRfT0ZGX0lSVChzYy0+aXJ0KTsKCX0KCgkvKiBQaGFzZSAzOiBjaGFuZ2UgdG8g
cmVxdWVzdGVkIHZvbHRhZ2UgKi8KCWlmIChjdmlkICE9IHZpZCkgewoJCXJ2ID0gcG44X3dyaXRl
X2ZpZHZpZChjZmlkLCB2aWQsIDFVTEwsICZzdGF0dXMpOwoJCWN2aWQgPSBQTjhfU1RBX0NWSUQo
c3RhdHVzKTsKCQlDT1VOVF9PRkZfVlNUKHNjLT52c3QpOwoJfQoKCS8qIENoZWNrIGlmIHRyYW5z
aXRpb24gZmFpbGVkLiAqLwoJaWYgKGNmaWQgIT0gZmlkIHx8IGN2aWQgIT0gdmlkKQoJCXJ2ID0g
RU5YSU87CgoJcmV0dXJuIChydik7Cn0KCnN0YXRpYyBpbnQKcG5fc2V0KGRldmljZV90IGRldiwg
Y29uc3Qgc3RydWN0IGNmX3NldHRpbmcgKmNmKQp7CglzdHJ1Y3QgcG5fc29mdGMgKnNjOwoJaW50
IGZpZCwgdmlkOwoJaW50IGk7CglpbnQgcnY7CgoJaWYgKGNmID09IE5VTEwpCgkJcmV0dXJuIChF
SU5WQUwpOwoJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgoJaWYgKHNjLT5lcnJhdGEgJiBQ
RU5ESU5HX1NUVUNLKQoJCXJldHVybiAoRU5YSU8pOwoKCWZvciAoaSA9IDA7IGkgPCBzYy0+cG93
ZXJub3dfbWF4X3N0YXRlczsgKytpKQoJCWlmIChDUFVGUkVRX0NNUChzYy0+cG93ZXJub3dfc3Rh
dGVzW2ldLmZyZXEgLyAxMDAwLCBjZi0+ZnJlcSkpCgkJCWJyZWFrOwoKCWZpZCA9IHNjLT5wb3dl
cm5vd19zdGF0ZXNbaV0uZmlkOwoJdmlkID0gc2MtPnBvd2Vybm93X3N0YXRlc1tpXS52aWQ7CgoJ
cnYgPSBFTk9ERVY7CgoJc3dpdGNoIChzYy0+cG5fdHlwZSkgewoJY2FzZSBQTjdfVFlQRToKCQly
diA9IHBuN19zZXRmaWR2aWQoc2MsIGZpZCwgdmlkKTsKCQlicmVhazsKCWNhc2UgUE44X1RZUEU6
CgkJcnYgPSBwbjhfc2V0ZmlkdmlkKHNjLCBmaWQsIHZpZCk7CgkJYnJlYWs7Cgl9CgoJcmV0dXJu
IChydik7Cn0KCnN0YXRpYyBpbnQKcG5fZ2V0KGRldmljZV90IGRldiwgc3RydWN0IGNmX3NldHRp
bmcgKmNmKQp7CglzdHJ1Y3QgcG5fc29mdGMgKnNjOwoJdV9pbnQgY2ZpZCA9IDAsIGN2aWQgPSAw
OwoJaW50IGk7Cgl1aW50NjRfdCBzdGF0dXM7CgoJaWYgKGNmID09IE5VTEwpCgkJcmV0dXJuIChF
SU5WQUwpOwoJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CglpZiAoc2MtPmVycmF0YSAmIFBF
TkRJTkdfU1RVQ0spCgkJcmV0dXJuIChFTlhJTyk7CgoJc3RhdHVzID0gcmRtc3IoTVNSX0FNREs3
X0ZJRFZJRF9TVEFUVVMpOwoKCXN3aXRjaCAoc2MtPnBuX3R5cGUpIHsKCWNhc2UgUE43X1RZUEU6
CgkJY2ZpZCA9IFBON19TVEFfQ0ZJRChzdGF0dXMpOwoJCWN2aWQgPSBQTjdfU1RBX0NWSUQoc3Rh
dHVzKTsKCQlicmVhazsKCWNhc2UgUE44X1RZUEU6CgkJY2ZpZCA9IFBOOF9TVEFfQ0ZJRChzdGF0
dXMpOwoJCWN2aWQgPSBQTjhfU1RBX0NWSUQoc3RhdHVzKTsKCQlicmVhazsKCX0KCWZvciAoaSA9
IDA7IGkgPCBzYy0+cG93ZXJub3dfbWF4X3N0YXRlczsgKytpKQoJCWlmIChjZmlkID09IHNjLT5w
b3dlcm5vd19zdGF0ZXNbaV0uZmlkICYmCgkJICAgIGN2aWQgPT0gc2MtPnBvd2Vybm93X3N0YXRl
c1tpXS52aWQpCgkJCWJyZWFrOwoKCWlmIChpIDwgc2MtPnBvd2Vybm93X21heF9zdGF0ZXMpIHsK
CQljZi0+ZnJlcSA9IHNjLT5wb3dlcm5vd19zdGF0ZXNbaV0uZnJlcSAvIDEwMDA7CgkJY2YtPnBv
d2VyID0gc2MtPnBvd2Vybm93X3N0YXRlc1tpXS5wb3dlcjsKCQljZi0+bGF0ID0gMjAwOwoJCWNm
LT52b2x0cyA9IHNjLT52aWRfdG9fdm9sdHNbY3ZpZF07CgkJY2YtPmRldiA9IGRldjsKCX0gZWxz
ZSB7CgkJbWVtc2V0KGNmLCBDUFVGUkVRX1ZBTF9VTktOT1dOLCBzaXplb2YoKmNmKSk7CgkJY2Yt
PmRldiA9IE5VTEw7Cgl9CgoJcmV0dXJuICgwKTsKfQoKc3RhdGljIGludApwbl9zZXR0aW5ncyhk
ZXZpY2VfdCBkZXYsIHN0cnVjdCBjZl9zZXR0aW5nICpzZXRzLCBpbnQgKmNvdW50KQp7CglzdHJ1
Y3QgcG5fc29mdGMgKnNjOwoJaW50IGk7CgoJaWYgKHNldHMgPT0gTlVMTHx8IGNvdW50ID09IE5V
TEwpCgkJcmV0dXJuIChFSU5WQUwpOwoJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CglpZiAo
KmNvdW50IDwgc2MtPnBvd2Vybm93X21heF9zdGF0ZXMpCgkJcmV0dXJuIChFMkJJRyk7Cglmb3Ig
KGkgPSAwOyBpIDwgc2MtPnBvd2Vybm93X21heF9zdGF0ZXM7ICsraSkgewoJCXNldHNbaV0uZnJl
cSA9IHNjLT5wb3dlcm5vd19zdGF0ZXNbaV0uZnJlcSAvIDEwMDA7CgkJc2V0c1tpXS5wb3dlciA9
IHNjLT5wb3dlcm5vd19zdGF0ZXNbaV0ucG93ZXI7CgkJc2V0c1tpXS5sYXQgPSAyMDA7CgkJc2V0
c1tpXS52b2x0cyA9IHNjLT52aWRfdG9fdm9sdHNbc2MtPnBvd2Vybm93X3N0YXRlc1tpXS52aWRd
OwoJCXNldHNbaV0uZGV2ID0gZGV2OwoJfQoJKmNvdW50ID0gc2MtPnBvd2Vybm93X21heF9zdGF0
ZXM7CgoJcmV0dXJuICgwKTsKfQoKc3RhdGljIGludApwbl90eXBlKGRldmljZV90IGRldiwgaW50
ICp0eXBlKQp7CglpZiAodHlwZSA9PSBOVUxMKQoJCXJldHVybiAoRUlOVkFMKTsKCgkqdHlwZSA9
IENQVUZSRVFfVFlQRV9BQlNPTFVURTsKCglyZXR1cm4gKDApOwp9CgovKgogKiBHaXZlbiBhIHNl
dCBvZiBwYWlyIG9mIGZpZC92aWQsIGFuZCBudW1iZXIgb2YgcGVyZm9ybWFuY2Ugc3RhdGVzLAog
KiBjb21wdXRlIHBvd2Vybm93X3N0YXRlcyB2aWEgYW4gaW5zZXJ0aW9uIHNvcnQuCiAqLwpzdGF0
aWMgaW50CmRlY29kZV9wc3Qoc3RydWN0IHBuX3NvZnRjICpzYywgdWludDhfdCAqcCwgaW50IG5w
c3RhdGVzKQp7CglpbnQgaSwgaiwgbjsKCXN0cnVjdCBwb3dlcm5vd19zdGF0ZSBzdGF0ZTsKCglm
b3IgKGkgPSAwOyBpIDwgUE9XRVJOT1dfTUFYX1NUQVRFUzsgKytpKQoJCXNjLT5wb3dlcm5vd19z
dGF0ZXNbaV0uZnJlcSA9IENQVUZSRVFfVkFMX1VOS05PV047CgoJZm9yIChuID0gMCwgaSA9IDA7
IGkgPCBucHN0YXRlczsgKytpKSB7CgkJc3RhdGUuZmlkID0gKnArKzsKCQlzdGF0ZS52aWQgPSAq
cCsrOwoJCXN0YXRlLnBvd2VyID0gQ1BVRlJFUV9WQUxfVU5LTk9XTjsKCgkJc3dpdGNoIChzYy0+
cG5fdHlwZSkgewoJCWNhc2UgUE43X1RZUEU6CgkJCXN0YXRlLmZyZXEgPSAxMDAgKiBwbjdfZmlk
X3RvX211bHRbc3RhdGUuZmlkXSAqIHNjLT5mc2I7CgkJCWlmICgoc2MtPmVycmF0YSAmIEEwX0VS
UkFUQSkgJiYKCQkJICAgIChwbjdfZmlkX3RvX211bHRbc3RhdGUuZmlkXSAlIDEwKSA9PSA1KQoJ
CQkJY29udGludWU7CgkJCWJyZWFrOwoJCWNhc2UgUE44X1RZUEU6CgkJCXN0YXRlLmZyZXEgPSAx
MDAgKiBwbjhfZmlkX3RvX211bHRbc3RhdGUuZmlkXSAqIHNjLT5mc2I7CgkJCWJyZWFrOwoJCX0K
CgkJaiA9IG47CgkJd2hpbGUgKGogPiAwICYmIHNjLT5wb3dlcm5vd19zdGF0ZXNbaiAtIDFdLmZy
ZXEgPCBzdGF0ZS5mcmVxKSB7CgkJCW1lbWNweSgmc2MtPnBvd2Vybm93X3N0YXRlc1tqXSwKCQkJ
ICAgICZzYy0+cG93ZXJub3dfc3RhdGVzW2ogLSAxXSwKCQkJICAgIHNpemVvZihzdHJ1Y3QgcG93
ZXJub3dfc3RhdGUpKTsKCQkJLS1qOwoJCX0KCQltZW1jcHkoJnNjLT5wb3dlcm5vd19zdGF0ZXNb
al0sICZzdGF0ZSwKCQkgICAgc2l6ZW9mKHN0cnVjdCBwb3dlcm5vd19zdGF0ZSkpOwoJCSsrbjsK
CX0KCgkvKgoJICogRml4IHBvd2Vybm93X21heF9zdGF0ZXMsIGlmIGVycmF0YSBhMCBnaXZlIHVz
IGxlc3Mgc3RhdGVzCgkgKiB0aGFuIGV4cGVjdGVkLgoJICovCglzYy0+cG93ZXJub3dfbWF4X3N0
YXRlcyA9IG47CgoJaWYgKGJvb3R2ZXJib3NlKQoJCWZvciAoaSA9IDA7IGkgPCBzYy0+cG93ZXJu
b3dfbWF4X3N0YXRlczsgKytpKSB7CgkJCWludCBmaWQgPSBzYy0+cG93ZXJub3dfc3RhdGVzW2ld
LmZpZDsKCQkJaW50IHZpZCA9IHNjLT5wb3dlcm5vd19zdGF0ZXNbaV0udmlkOwoKCQkJcHJpbnRm
KCJwb3dlcm5vdzogJTJpICU4ZGtIeiBGSUQgJTAyeCBWSUQgJTAyeFxuIiwKCQkJICAgIGksCgkJ
CSAgICBzYy0+cG93ZXJub3dfc3RhdGVzW2ldLmZyZXEsCgkJCSAgICBmaWQsCgkJCSAgICB2aWQp
OwoJCX0KCglyZXR1cm4gKDApOwp9CgpzdGF0aWMgaW50CmNwdWlkX2lzX2s3KHVfaW50IGNwdWlk
KQp7CgoJc3dpdGNoIChjcHVpZCkgewoJY2FzZSAweDc2MDoKCWNhc2UgMHg3NjE6CgljYXNlIDB4
NzYyOgoJY2FzZSAweDc3MDoKCWNhc2UgMHg3NzE6CgljYXNlIDB4NzgwOgoJY2FzZSAweDc4MToK
CWNhc2UgMHg3YTA6CgkJcmV0dXJuIChUUlVFKTsKCX0KCXJldHVybiAoRkFMU0UpOwp9CgpzdGF0
aWMgaW50CnBuX2RlY29kZV9wc3QoZGV2aWNlX3QgZGV2KQp7CglpbnQgbWF4cHN0OwoJc3RydWN0
IHBuX3NvZnRjICpzYzsKCXVfaW50IGNwdWlkLCBtYXhmaWQsIHN0YXJ0dmlkOwoJdV9sb25nIHNp
ZzsKCXN0cnVjdCBwc2JfaGVhZGVyICpwc2I7Cgl1aW50OF90ICpwOwoJdV9pbnQgcmVnc1s0XTsK
CXVpbnQ2NF90IHN0YXR1czsKCglzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCglkb19jcHVp
ZCgweDgwMDAwMDAxLCByZWdzKTsKCWNwdWlkID0gcmVnc1swXTsKCglpZiAoKGNwdWlkICYgMHhm
ZmYpID09IDB4NzYwKQoJCXNjLT5lcnJhdGEgfD0gQTBfRVJSQVRBOwoKCXN0YXR1cyA9IHJkbXNy
KE1TUl9BTURLN19GSURWSURfU1RBVFVTKTsKCglzd2l0Y2ggKHNjLT5wbl90eXBlKSB7CgljYXNl
IFBON19UWVBFOgoJCW1heGZpZCA9IFBON19TVEFfTUZJRChzdGF0dXMpOwoJCXN0YXJ0dmlkID0g
UE43X1NUQV9TVklEKHN0YXR1cyk7CgkJYnJlYWs7CgljYXNlIFBOOF9UWVBFOgoJCW1heGZpZCA9
IFBOOF9TVEFfTUZJRChzdGF0dXMpOwoJCS8qCgkJICogd2Ugc2hvdWxkIGFjdHVhbGx5IHVzZSBh
IHZhcmlhYmxlIG5hbWVkICdtYXh2aWQnIGlmIEs4LAoJCSAqIGJ1dCB3aHkgaW50cm9kdWNpbmcg
YSBuZXcgdmFyaWFibGUgZm9yIHRoYXQ/CgkJICovCgkJc3RhcnR2aWQgPSBQTjhfU1RBX01WSUQo
c3RhdHVzKTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0dXJuIChFTk9ERVYpOwoJfQoKCWlmIChi
b290dmVyYm9zZSkgewoJCWRldmljZV9wcmludGYoZGV2LCAiU1RBVFVTOiAweCVqeFxuIiwgc3Rh
dHVzKTsKCQlkZXZpY2VfcHJpbnRmKGRldiwgIlNUQVRVUzogbWF4ZmlkOiAweCUwMnhcbiIsIG1h
eGZpZCk7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJTVEFUVVM6ICVzOiAweCUwMnhcbiIsCgkJICAg
IHNjLT5wbl90eXBlID09IFBON19UWVBFID8gInN0YXJ0dmlkIiA6ICJtYXh2aWQiLAoJCSAgICBz
dGFydHZpZCk7Cgl9CgoJc2lnID0gYmlvc19zaWdzZWFyY2goUFNCX1NUQVJULCBQU0JfU0lHLCBQ
U0JfTEVOLCBQU0JfU1RFUCwgUFNCX09GRik7CglpZiAoc2lnKSB7CgkJc3RydWN0IHBzdF9oZWFk
ZXIgKnBzdDsKCgkJcHNiID0gKHN0cnVjdCBwc2JfaGVhZGVyKikodWludHB0cl90KUJJT1NfUEFE
RFJUT1ZBRERSKHNpZyk7CgoJCXN3aXRjaCAocHNiLT52ZXJzaW9uKSB7CgkJZGVmYXVsdDoKCQkJ
cmV0dXJuIChFTk9ERVYpOwoJCWNhc2UgMHgxNDoKCQkJLyoKCQkJICogV2UgY2FuJ3QgYmUgcGlj
a3kgYWJvdXQgbnVtcHN0IHNpbmNlIGF0IGxlYXN0CgkJCSAqIHNvbWUgc3lzdGVtcyBoYXZlIGEg
dmFsdWUgb2YgMSBhbmQgc29tZSBoYXZlIDIuCgkJCSAqIFdlIHRydXN0IHRoYXQgY3B1aWRfaXNf
azcoKSB3aWxsIGJlIGJldHRlciBhdAoJCQkgKiBjYXRjaGluZyB0aGF0IHdlJ3JlIG9uIGEgSzgg
YW55d2F5LgoJCQkgKi8KCQkJaWYgKHNjLT5wbl90eXBlICE9IFBOOF9UWVBFKQoJCQkJcmV0dXJu
IChFSU5WQUwpOwoJCQlzYy0+dnN0ID0gcHNiLT5zZXR0bGluZ3RpbWU7CgkJCXNjLT5ydm8gPSBQ
TjhfUFNCX1RPX1JWTyhwc2ItPnJlczEpLAoJCQlzYy0+aXJ0ID0gUE44X1BTQl9UT19JUlQocHNi
LT5yZXMxKSwKCQkJc2MtPm12cyA9IFBOOF9QU0JfVE9fTVZTKHBzYi0+cmVzMSksCgkJCXNjLT5s
b3cgPSBQTjhfUFNCX1RPX0JBVFQocHNiLT5yZXMxKTsKCQkJaWYgKGJvb3R2ZXJib3NlKSB7CgkJ
CQlkZXZpY2VfcHJpbnRmKGRldiwgIlBTQjogVlNUOiAlZFxuIiwKCQkJCSAgICBwc2ItPnNldHRs
aW5ndGltZSk7CgkJCQlkZXZpY2VfcHJpbnRmKGRldiwgIlBTQjogUlZPICV4IElSVCAlZCAiCgkJ
CQkgICAgIk1WUyAlZCBCQVRUICVkXG4iLAoJCQkJICAgIHNjLT5ydm8sCgkJCQkgICAgc2MtPmly
dCwKCQkJCSAgICBzYy0+bXZzLAoJCQkJICAgIHNjLT5sb3cpOwoJCQl9CgkJCWJyZWFrOwoJCWNh
c2UgMHgxMjoKCQkJaWYgKHNjLT5wbl90eXBlICE9IFBON19UWVBFKQoJCQkJcmV0dXJuIChFSU5W
QUwpOwoJCQlzYy0+c2d0YyA9IHBzYi0+c2V0dGxpbmd0aW1lICogc2MtPmZzYjsKCQkJaWYgKHNj
LT5zZ3RjIDwgMTAwICogc2MtPmZzYikKCQkJCXNjLT5zZ3RjID0gMTAwICogc2MtPmZzYjsKCQkJ
YnJlYWs7CgkJfQoKCQlwID0gKCh1aW50OF90ICopIHBzYikgKyBzaXplb2Yoc3RydWN0IHBzYl9o
ZWFkZXIpOwoJCXBzdCA9IChzdHJ1Y3QgcHN0X2hlYWRlciopIHA7CgoJCW1heHBzdCA9IDIwMDsK
CgkJZG8gewoJCQlzdHJ1Y3QgcHN0X2hlYWRlciAqcHN0ID0gKHN0cnVjdCBwc3RfaGVhZGVyKikg
cDsKCgkJCWlmIChjcHVpZCA9PSBwc3QtPmNwdWlkICYmCgkJCSAgICBtYXhmaWQgPT0gcHN0LT5t
YXhmaWQgJiYKCQkJICAgIHN0YXJ0dmlkID09IHBzdC0+c3RhcnR2aWQpIHsKCQkJCXNjLT5wb3dl
cm5vd19tYXhfc3RhdGVzID0gcHN0LT5udW1wc3RhdGVzOwoJCQkJc3dpdGNoIChzYy0+cG5fdHlw
ZSkgewoJCQkJY2FzZSBQTjdfVFlQRToKCQkJCQlpZiAoYWJzKHNjLT5mc2IgLSBwc3QtPmZzYikg
PiA1KQoJCQkJCQljb250aW51ZTsKCQkJCQlicmVhazsKCQkJCWNhc2UgUE44X1RZUEU6CgkJCQkJ
YnJlYWs7CgkJCQl9CgkJCQlyZXR1cm4gKGRlY29kZV9wc3Qoc2MsCgkJCQkgICAgcCArIHNpemVv
ZihzdHJ1Y3QgcHN0X2hlYWRlciksCgkJCQkgICAgc2MtPnBvd2Vybm93X21heF9zdGF0ZXMpKTsK
CQkJfQoKCQkJcCArPSBzaXplb2Yoc3RydWN0IHBzdF9oZWFkZXIpICsgKDIgKiBwc3QtPm51bXBz
dGF0ZXMpOwoJCX0gd2hpbGUgKGNwdWlkX2lzX2s3KHBzdC0+Y3B1aWQpICYmIG1heHBzdC0tKTsK
CgkJZGV2aWNlX3ByaW50ZihkZXYsICJubyBtYXRjaCBmb3IgZXh0ZW5kZWQgY3B1aWQgJS4zeFxu
IiwgY3B1aWQpOwoJfQoKCXJldHVybiAoRU5PREVWKTsKfQoKLyoKICogVE9ETzogdGhpcyBzaG91
bGQgYmUgZG9uZSBpbiBzeXMvQVJDSC9BUkNIL2lkZW50Y3B1LmMKICovCnN0YXRpYyBpbnQKY3B1
X2lzX3Bvd2Vybm93X2NhcGFibGUodm9pZCkKewoJdV9pbnQgcmVnc1s0XTsKCglpZiAoc3RyY21w
KGNwdV92ZW5kb3IsICJBdXRoZW50aWNBTUQiKSAhPSAwIHx8CgkgICAgY3B1X2V4dGhpZ2ggPCAw
eDgwMDAwMDA3KQoJCXJldHVybiAoRkFMU0UpOwoKCWRvX2NwdWlkKDB4ODAwMDAwMDcsIHJlZ3Mp
OwoJcmV0dXJuIChyZWdzWzNdICYgMHg2KTsKfQoKc3RhdGljIGludApwbl9kZWNvZGVfYWNwaShk
ZXZpY2VfdCBkZXYsIGRldmljZV90IHBlcmZfZGV2KQp7CglpbnQgaSwgaiwgbjsKCXVpbnQ2NF90
IHN0YXR1czsKCXVpbnQzMl90IGN0cmw7Cgl1X2ludCBjcHVpZDsKCXVfaW50IHJlZ3NbNF07Cglz
dHJ1Y3QgcG5fc29mdGMgKnNjOwoJc3RydWN0IHBvd2Vybm93X3N0YXRlIHN0YXRlOwoJc3RydWN0
IGNmX3NldHRpbmcgc2V0c1tQT1dFUk5PV19NQVhfU1RBVEVTXTsKCWludCBjb3VudCA9IFBPV0VS
Tk9XX01BWF9TVEFURVM7CglpbnQgdHlwZTsKCWludCBydjsKCglpZiAocGVyZl9kZXYgPT0gTlVM
TCkKCQlyZXR1cm4gKEVOWElPKTsKCglydiA9IENQVUZSRVFfRFJWX1NFVFRJTkdTKHBlcmZfZGV2
LCBzZXRzLCAmY291bnQpOwoJaWYgKHJ2KQoJCXJldHVybiAoRU5YSU8pOwoJcnYgPSBDUFVGUkVR
X0RSVl9UWVBFKHBlcmZfZGV2LCAmdHlwZSk7CglpZiAocnYgfHwgKHR5cGUgJiBDUFVGUkVRX0ZM
QUdfSU5GT19PTkxZKSA9PSAwKQoJCXJldHVybiAoRU5YSU8pOwoKCXNjID0gZGV2aWNlX2dldF9z
b2Z0YyhkZXYpOwoKCWRvX2NwdWlkKDB4ODAwMDAwMDEsIHJlZ3MpOwoJY3B1aWQgPSByZWdzWzBd
OwoJaWYgKChjcHVpZCAmIDB4ZmZmKSA9PSAweDc2MCkKCQlzYy0+ZXJyYXRhIHw9IEEwX0VSUkFU
QTsKCgljdHJsID0gMDsKCXNjLT5zZ3RjID0gMDsKCWZvciAobiA9IDAsIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewoJCWN0cmwgPSBzZXRzW2ldLnNwZWNbUFhfU1BFQ19DT05UUk9MXTsKCQlzd2l0
Y2ggKHNjLT5wbl90eXBlKSB7CgkJY2FzZSBQTjdfVFlQRToKCQkJc3RhdGUuZmlkID0gQUNQSV9Q
TjdfQ1RSTF9UT19GSUQoY3RybCk7CgkJCXN0YXRlLnZpZCA9IEFDUElfUE43X0NUUkxfVE9fVklE
KGN0cmwpOwoJCQlpZiAoKHNjLT5lcnJhdGEgJiBBMF9FUlJBVEEpICYmCgkJCSAgICAocG43X2Zp
ZF90b19tdWx0W3N0YXRlLmZpZF0gJSAxMCkgPT0gNSkKCQkJCWNvbnRpbnVlOwoJCQlzdGF0ZS5m
cmVxID0gMTAwICogcG43X2ZpZF90b19tdWx0W3N0YXRlLmZpZF0gKiBzYy0+ZnNiOwoJCQlicmVh
azsKCQljYXNlIFBOOF9UWVBFOgoJCQlzdGF0ZS5maWQgPSBBQ1BJX1BOOF9DVFJMX1RPX0ZJRChj
dHJsKTsKCQkJc3RhdGUudmlkID0gQUNQSV9QTjhfQ1RSTF9UT19WSUQoY3RybCk7CgkJCXN0YXRl
LmZyZXEgPSAxMDAgKiBwbjhfZmlkX3RvX211bHRbc3RhdGUuZmlkXSAqIHNjLT5mc2I7CgkJCWJy
ZWFrOwoJCX0KCgkJc3RhdGUucG93ZXIgPSBzZXRzW2ldLnBvd2VyOwoKCQlqID0gbjsKCQl3aGls
ZSAoaiA+IDAgJiYgc2MtPnBvd2Vybm93X3N0YXRlc1tqIC0gMV0uZnJlcSA8IHN0YXRlLmZyZXEp
IHsKCQkJbWVtY3B5KCZzYy0+cG93ZXJub3dfc3RhdGVzW2pdLAoJCQkgICAgJnNjLT5wb3dlcm5v
d19zdGF0ZXNbaiAtIDFdLAoJCQkgICAgc2l6ZW9mKHN0cnVjdCBwb3dlcm5vd19zdGF0ZSkpOwoJ
CQktLWo7CgkJfQoJCW1lbWNweSgmc2MtPnBvd2Vybm93X3N0YXRlc1tqXSwgJnN0YXRlLAoJCSAg
ICBzaXplb2Yoc3RydWN0IHBvd2Vybm93X3N0YXRlKSk7CgkJKytuOwoJfQoKCXNjLT5wb3dlcm5v
d19tYXhfc3RhdGVzID0gbjsKCXN0YXRlID0gc2MtPnBvd2Vybm93X3N0YXRlc1swXTsKCXN0YXR1
cyA9IHJkbXNyKE1TUl9BTURLN19GSURWSURfU1RBVFVTKTsKCglzd2l0Y2ggKHNjLT5wbl90eXBl
KSB7CgljYXNlIFBON19UWVBFOgoJCXNjLT5zZ3RjID0gQUNQSV9QTjdfQ1RSTF9UT19TR1RDKGN0
cmwpOwoJCS8qCgkJICogWFhYIFNvbWUgYmlvcyBmb3JnZXQgdGhlIG1heCBmcmVxdWVuY3khCgkJ
ICogVGhpcyBtYXliZSBpbmRpY2F0ZXMgd2UgaGF2ZSB0aGUgd3JvbmcgdGFibGVzLiAgVGhlcmVm
b3JlLAoJCSAqIGRvbid0IGltcGxlbWVudCBhIHF1aXJrLCBidXQgZmFsbGJhY2sgdG8gQklPUyBs
ZWdhY3kKCQkgKiB0YWJsZXMgaW5zdGVhZC4KCQkgKi8KCQlpZiAoUE43X1NUQV9NRklEKHN0YXR1
cykgIT0gc3RhdGUuZmlkKSB7CgkJCWRldmljZV9wcmludGYoZGV2LCAiQUNQSSBNQVggZnJlcXVl
bmN5IG5vdCBmb3VuZFxuIik7CgkJCXJldHVybiAoRUlOVkFMKTsKCQl9CgkJYnJlYWs7CgljYXNl
IFBOOF9UWVBFOgoJCXNjLT52c3QgPSBBQ1BJX1BOOF9DVFJMX1RPX1ZTVChjdHJsKSwKCQlzYy0+
bXZzID0gQUNQSV9QTjhfQ1RSTF9UT19NVlMoY3RybCksCgkJc2MtPnBsbCA9IEFDUElfUE44X0NU
UkxfVE9fUExMKGN0cmwpLAoJCXNjLT5ydm8gPSBBQ1BJX1BOOF9DVFJMX1RPX1JWTyhjdHJsKSwK
CQlzYy0+aXJ0ID0gQUNQSV9QTjhfQ1RSTF9UT19JUlQoY3RybCk7CgkJc2MtPmxvdyA9IDA7IC8q
IFhYWCAqLwoKCQkvKgoJCSAqIHBvd2Vybm93IGs4IHN1cHBvcnRzIG9ubHkgb25lIGxvdyBmcmVx
dWVuY3kuCgkJICovCgkJaWYgKHNjLT5wb3dlcm5vd19tYXhfc3RhdGVzID49IDIgJiYKCQkgICAg
KHNjLT5wb3dlcm5vd19zdGF0ZXNbc2MtPnBvd2Vybm93X21heF9zdGF0ZXMgLSAyXS5maWQgPCA4
KSkKCQkJcmV0dXJuIChFSU5WQUwpOwoJCWJyZWFrOwoJfQoKCXJldHVybiAoMCk7Cn0KCnN0YXRp
YyB2b2lkCnBuX2lkZW50aWZ5KGRyaXZlcl90ICpkcml2ZXIsIGRldmljZV90IHBhcmVudCkKewoJ
ZGV2aWNlX3QgY2hpbGQ7CgoJaWYgKGNwdV9pc19wb3dlcm5vd19jYXBhYmxlKCkgPT0gMCkKCQly
ZXR1cm47Cglzd2l0Y2ggKGNwdV9pZCAmIDB4ZjAwKSB7CgljYXNlIDB4NjAwOgoJY2FzZSAweGYw
MDoKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0dXJuOwoJfQoJaWYgKGRldmljZV9maW5kX2NoaWxk
KHBhcmVudCwgInBvd2Vybm93IiwgLTEpICE9IE5VTEwpCgkJcmV0dXJuOwoJaWYgKChjaGlsZCA9
IEJVU19BRERfQ0hJTEQocGFyZW50LCAwLCAicG93ZXJub3ciLCAtMSkpID09IE5VTEwpCgkJZGV2
aWNlX3ByaW50ZihwYXJlbnQsICJwb3dlcm5vdzogYWRkIGNoaWxkIGZhaWxlZFxuIik7Cn0KCnN0
YXRpYyBpbnQKcG5fcHJvYmUoZGV2aWNlX3QgZGV2KQp7CglzdHJ1Y3QgcG5fc29mdGMgKnNjOwoJ
dWludDY0X3Qgc3RhdHVzOwoJdWludDY0X3QgcmF0ZTsKCXN0cnVjdCBwY3B1ICpwYzsKCXVfaW50
IHNmaWQsIG1maWQsIGNmaWQ7CgoJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CglzYy0+ZXJy
YXRhID0gMDsKCXN0YXR1cyA9IHJkbXNyKE1TUl9BTURLN19GSURWSURfU1RBVFVTKTsKCglwYyA9
IGNwdV9nZXRfcGNwdShkZXYpOwoJaWYgKHBjID09IE5VTEwpCgkJcmV0dXJuIChFTk9ERVYpOwoK
CWNwdV9lc3RfY2xvY2tyYXRlKHBjLT5wY19jcHVpZCwgJnJhdGUpOwoKCXN3aXRjaCAoY3B1X2lk
ICYgMHhmMDApIHsKCWNhc2UgMHg2MDA6CgkJc2ZpZCA9IFBON19TVEFfU0ZJRChzdGF0dXMpOwoJ
CW1maWQgPSBQTjdfU1RBX01GSUQoc3RhdHVzKTsKCQljZmlkID0gUE43X1NUQV9DRklEKHN0YXR1
cyk7CgkJc2MtPnBuX3R5cGUgPSBQTjdfVFlQRTsKCQlzYy0+ZnNiID0gcmF0ZSAvIDEwMDAwMCAv
IHBuN19maWRfdG9fbXVsdFtjZmlkXTsKCgkJLyoKCQkgKiBJZiBzdGFydCBGSUQgaXMgZGlmZmVy
ZW50IHRvIG1heCBGSUQsIHRoZW4gaXQgaXMgYQoJCSAqIG1vYmlsZSBwcm9jZXNzb3IuICBJZiBu
b3QsIGl0IGlzIGEgbG93IHBvd2VyZWQgZGVza3RvcAoJCSAqIHByb2Nlc3Nvci4KCQkgKi8KCQlp
ZiAoUE43X1NUQV9TRklEKHN0YXR1cykgIT0gUE43X1NUQV9NRklEKHN0YXR1cykpIHsKCQkJc2Mt
PnZpZF90b192b2x0cyA9IHBuN19tb2JpbGVfdmlkX3RvX3ZvbHRzOwoJCQlkZXZpY2Vfc2V0X2Rl
c2MoZGV2LCAiUG93ZXJOb3chIEs3Iik7CgkJfSBlbHNlIHsKCQkJc2MtPnZpZF90b192b2x0cyA9
IHBuN19kZXNrdG9wX3ZpZF90b192b2x0czsKCQkJZGV2aWNlX3NldF9kZXNjKGRldiwgIkNvb2xg
bidRdWlldCBLNyIpOwoJCX0KCQlicmVhazsKCgljYXNlIDB4ZjAwOgoJCXNmaWQgPSBQTjhfU1RB
X1NGSUQoc3RhdHVzKTsKCQltZmlkID0gUE44X1NUQV9NRklEKHN0YXR1cyk7CgkJY2ZpZCA9IFBO
OF9TVEFfQ0ZJRChzdGF0dXMpOwoJCXNjLT5wbl90eXBlID0gUE44X1RZUEU7CgkJc2MtPnZpZF90
b192b2x0cyA9IHBuOF92aWRfdG9fdm9sdHM7CgkJc2MtPmZzYiA9IHJhdGUgLyAxMDAwMDAgLyBw
bjhfZmlkX3RvX211bHRbY2ZpZF07CgoJCWlmIChQTjhfU1RBX1NGSUQoc3RhdHVzKSAhPSBQTjhf
U1RBX01GSUQoc3RhdHVzKSkKCQkJZGV2aWNlX3NldF9kZXNjKGRldiwgIlBvd2VyTm93ISBLOCIp
OwoJCWVsc2UKCQkJZGV2aWNlX3NldF9kZXNjKGRldiwgIkNvb2xgbidRdWlldCBLOCIpOwoJCWJy
ZWFrOwoJZGVmYXVsdDoKCQlyZXR1cm4gKEVOT0RFVik7Cgl9CgoJcmV0dXJuICgwKTsKfQoKc3Rh
dGljIGludApwbl9hdHRhY2goZGV2aWNlX3QgZGV2KQp7CglpbnQgcnY7CglkZXZpY2VfdCBjaGls
ZDsKCgljaGlsZCA9IGRldmljZV9maW5kX2NoaWxkKGRldmljZV9nZXRfcGFyZW50KGRldiksICJh
Y3BpX3BlcmYiLCAtMSk7CglpZiAoY2hpbGQpIHsKCQlydiA9IHBuX2RlY29kZV9hY3BpKGRldiwg
Y2hpbGQpOwoJCWlmIChydikKCQkJcnYgPSBwbl9kZWNvZGVfcHN0KGRldik7Cgl9IGVsc2UKCQly
diA9IHBuX2RlY29kZV9wc3QoZGV2KTsKCglpZiAocnYgIT0gMCkKCQlyZXR1cm4gKEVOWElPKTsK
CWNwdWZyZXFfcmVnaXN0ZXIoZGV2KTsKCXJldHVybiAoMCk7Cn0KCnN0YXRpYyBpbnQKcG5fZGV0
YWNoKGRldmljZV90IGRldikKewoKCWNwdWZyZXFfdW5yZWdpc3RlcihkZXYpOwoJcmV0dXJuICgw
KTsKfQoK
------=_Part_1513_22269344.1169628245334--



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