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>