No subject


Sun Dec 9 17:34:17 CET 2012


L1 Cache:  128K   3265 MB/s
Memory  :  480M    240 MB/s

That's right, faster then v2 :) I've managed to coerce the northbridge into
running the memory at 200MHz (DDR400) without locking up the system like it
does in v2, and also to use 1GB of ram, which the fuctory BIOS only sees as
512MB, and v2 for some reason trips over. However, it's a mixed blessing,
even though memtest86 now runs at an acceptable speed, coreboot is still
running fairly slowly. I'm attaching a patch that brings over mtrr.c from v2
and hacks it to work with v3, but no sign-off because IMO it's not ready to
be committed. I'll try booting a FILO payload and a kernel tomorrow, but
right now it's time for some sleep.

-Corey

------=_Part_22001_11095918.1229582308095
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Wed, Dec 17, 2008 at 11:04 PM, Corey Osgood <span dir="ltr"><<a href="mailto:corey.osgood at gmail.com">corey.osgood at gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Wed, Dec 17, 2008 at 8:55 PM, Peter Stuge <span dir="ltr"><<a href="mailto:peter at stuge.se" target="_blank">peter at stuge.se</a>></span> wrote:<br></div><div class="gmail_quote"><div class="Ih2E3d">
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>Corey Osgood wrote:<br>
> would there be any problem with calling functions to enable mtrrs<br>
> and the cache (if it's not already) from the end of disable_car()?<br>
<br>
</div>None whatsoever. Commit at will.<font color="#888888"></font></blockquote></div><div><br>It didn't help, disable_car() already does essentially the same thing; disable cache, enable mtrrs, re-enable cache. I'm comparing memtest between the stock bios and coreboot right now, the throughput for the stock bios is 6122MB/s for L1 cache and 574MB/s for memory. With v2, it's 3265 and 191, respectively (using ROMCC), with v3 it's 15 and 18. So something's not right somewhere. The other thing is that in v2 and v3, the CPU is only running at 800MHz in memtest, but with the stock BIOS it runs at 1.5GHz, that's probably the reason for the differing cache throughputs. Anyways, I'm diving into both v2 and v3 and trying to track down why this is running so slowly.</div>
</div></blockquote><div><br><insert happy dance here><br><br>From the currently-running memtest86 on coreboot-v3:<br></div></div>L1 Cache:  128K   3265 MB/s<br>Memory  :  480M    240 MB/s<br><br>That's right, faster then v2 :) I've managed to coerce the northbridge into running the memory at 200MHz (DDR400) without locking up the system like it does in v2, and also to use 1GB of ram, which the fuctory BIOS only sees as 512MB, and v2 for some reason trips over. However, it's a mixed blessing, even though memtest86 now runs at an acceptable speed, coreboot is still running fairly slowly. I'm attaching a patch that brings over mtrr.c from v2 and hacks it to work with v3, but no sign-off because IMO it's not ready to be committed. I'll try booting a FILO payload and a kernel tomorrow, but right now it's time for some sleep.<br>
<br>-Corey<br>

------=_Part_22001_11095918.1229582308095--

------=_Part_22000_17087428.1229582308095
Content-Type: text/plain; name=cn700_speedup.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fov10po50
Content-Disposition: attachment; filename=cn700_speedup.patch

SW5kZXg6IHNvdXRoYnJpZGdlL3ZpYS92dDgyMzcvc3RhZ2UxLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc291
dGhicmlkZ2UvdmlhL3Z0ODIzNy9zdGFnZTEuYwkocmV2aXNpb24gMTA3OCkKKysrIHNvdXRoYnJp
ZGdlL3ZpYS92dDgyMzcvc3RhZ2UxLmMJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw4ICsxNTUsOSBA
QAogICovCiB2b2lkIGVuYWJsZV9zbWJ1cyh1MTYgc21idXNfaW9fYmFzZSkKIHsKLQl1MzIgZGV2
OworCXUzMiBkZXYgPSBQQ0lfQkRGKDAsIDE3LCAwKTsKIAorI2lmIDAKIAkvKiBQb3dlciBtYW5h
Z2VtZW50IGNvbnRyb2xsZXIgKi8KIAlwY2lfY29uZjFfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9J
RF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBX1ZUODIzN1JfTFBDLCAKIAkJCQkmZGV2KTsKQEAgLTE3
OCw2ICsxNzksNyBAQAogCQlwcmludGsoQklPU19ERUJVRywgIlZUODIzN1IgUG93ZXIgbWFuYWdl
bWVudCBjb250cm9sbGVyIGZvdW5kICIKIAkJCQkJCSJhdCAweCV4XG4iLCBkZXYpOwogCX0KKyNl
bmRpZgogCiAJLyogNyA9IFNNQnVzIENsb2NrIGZyb20gUlRDIDMyLjc2OEtIegogCSAqIDUgPSBJ
bnRlcm5hbCBQTEwgcmVzZXQgZnJvbSBzdXNwCkBAIC0yMDEsMzYgKzIwMywxNCBAQAogCWluYihz
bWJ1c19pb19iYXNlICsgU01CSFNUQ1RMKTsKIH0KIAotLyogVGhlIGNoYW5nZSBmcm9tIFJBSUQg
dG8gU0FUQSBpbiBwaGFzZTYgY2F1c2VzIGNvcmVib290IHRvIGxvY2sgdXAsIHNvIGRvIGl0Ci0g
KiBhcyBlYXJseSBhcyBwb3NzaWJsZS4gTW92ZSBiYWNrIHRvIHN0YWdlMiBsYXRlciAqLyAKLXN0
YXRpYyB2b2lkIHNhdGFfc3RhZ2UxKHZvaWQpCi17Ci0JdTMyIGRldjsKLQl1OCByZWc7Ci0KLQlw
Y2lfY29uZjFfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklB
X1ZUODIzN1JfU0FUQSwgJmRldik7Ci0KLQlwcmludGsoQklPU19ERUJVRywgIkNvbmZpZ3VyaW5n
IFZJQSBTQVRBIGNvbnRyb2xsZXJcbiIpOwotCi0JLyogQ2xhc3MgSURFIERpc2sgKi8KLQlyZWcg
PSBwY2lfY29uZjFfcmVhZF9jb25maWc4KGRldiwgU0FUQV9NSVNDX0NUUkwpOwotCXJlZyAmPSAw
eDdmOwkJLyogU3ViIENsYXNzIFdyaXRlIFByb3RlY3Qgb2ZmICovCi0JcGNpX2NvbmYxX3dyaXRl
X2NvbmZpZzgoZGV2LCBTQVRBX01JU0NfQ1RSTCwgcmVnKTsKLQotCS8qIENoYW5nZSB0aGUgZGV2
aWNlIGNsYXNzIHRvIFNBVEEgZnJvbSBSQUlELiAqLwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4
KGRldiwgUENJX0NMQVNTX0RFVklDRSwgMHgxKTsKLQlyZWcgfD0gMHg4MDsJCS8qIFN1YiBDbGFz
cyBXcml0ZSBQcm90ZWN0IG9uICovCi0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgoZGV2LCBTQVRB
X01JU0NfQ1RSTCwgcmVnKTsKLX0KLQogdm9pZCB2dDgyMzdfc3RhZ2UxKHUxNiBzbWJ1c19pb19i
YXNlKQogewotCXUzMiBkZXY7CisJdTMyIGRldiA9IFBDSV9CREYoMCwgMTcsIDApOwogCXUzMiBp
ZGVfZGV2OwogCQogCXByaW50ayhCSU9TX0RFQlVHLCAiRG9pbmcgdnQ4MjM3ci9zIHN0YWdlMSBp
bml0XG4iKTsKIAotCXBjaV9jb25mMV9maW5kX2RldmljZSgweDExMDYsIDB4MzIyNywgJmRldik7
CisJLy9wY2lfY29uZjFfZmluZF9kZXZpY2UoMHgxMTA2LCAweDMyMjcsICZkZXYpOwogCXBjaV9j
b25mMV9maW5kX2RldmljZSgweDExMDYsIDB4MDU3MSwgJmlkZV9kZXYpOwogCQogCS8qIERpc2Fi
bGUgR1AzIHRpbWVyLCBvciBlbHNlIHRoZSBzeXN0ZW0gcmVib290cyB3aGVuIGl0IHJ1bnMgb3V0
LgpJbmRleDogbWFpbmJvYXJkL2pldHdheS9qN2YyL2R0cwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYWluYm9h
cmQvamV0d2F5L2o3ZjIvZHRzCShyZXZpc2lvbiAxMDc4KQorKysgbWFpbmJvYXJkL2pldHdheS9q
N2YyL2R0cwkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQAogCQkvKiBIb3cgZG8gSSBy
ZXByZXNlbnQgdGhlIGJ1cyBhbmQgcGNpIGRldmljZXMgaGFuZ2luZyBoZXJlPyAqLwogCQlwY2lA
MSwwIHsKIAkJCS9jb25maWcvKCJub3J0aGJyaWRnZS92aWEvY243MDAvcGNpLmR0cyIpOwotCQkJ
cGNpQDAsMSB7CisJCQlwY2lAMCwwIHsKIAkJCQkvY29uZmlnLygibm9ydGhicmlkZ2UvdmlhL2Nu
NzAwL3ZnYS5kdHMiKTsKIAkJCX07CiAJCX07CkluZGV4OiBub3J0aGJyaWRnZS92aWEvY243MDAv
cGNpX2RvbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vcnRoYnJpZGdlL3ZpYS9jbjcwMC9wY2lfZG9t
YWluLmMJKHJldmlzaW9uIDEwNzgpCisrKyBub3J0aGJyaWRnZS92aWEvY243MDAvcGNpX2RvbWFp
bi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEgKzEwOCwxMiBAQAogCX0KIAkvKiBSZXBvcnQg
dGhlIG1lbW9yeSByZWdpb25zLiAqLwogCWlkeCA9IDEwOwotCS8qIFRPRE86IEhvbGUgbmVlZGVk
PyAqLwotCXJhbV9yZXNvdXJjZShkZXYsIGlkeCsrLCAwLCA2NDApOwkvKiBGaXJzdCA2NDBrICov
CisKKwlyYW1fcmVzb3VyY2UoZGV2LCBpZHgrKywgMCwgNjQwKTsKIAkvKiBMZWF2ZSBhIGhvbGUg
Zm9yIFZHQSwgMHhhMDAwMCAtIDB4YzAwMDAgKi8KLQlyYW1fcmVzb3VyY2UoZGV2LCBpZHgrKywg
NzY4LAotCQkgICAgICh0b2xtayAtIDc2OCAtIChDT05GSUdfQ043MDBfVklERU9fTUIgKiAxMDI0
KSkpOworCS8qIFRPRE86IHNoYWRvdyByYW0gbmVlZHMgdG8gYmUgY29udHJvbGxlZCB2aWEgZHRz
ICovCisJcmFtX3Jlc291cmNlKGRldiwgaWR4KyssIDEwMjQsCisJCSAgICAgKHRvbG1rIC0gMTAy
NCAtIChDT05GSUdfQ043MDBfVklERU9fTUIgKiAxMDI0KSkpOwogCXBoYXNlNF9hc3NpZ25fcmVz
b3VyY2VzKCZkZXYtPmxpbmtbMF0pOwogfQogCkBAIC0xMjksNSArMTMwLDMgQEAKIAkucGhhc2U2
X2luaXQJCQk9IDAsCiAJLm9wc19wY2lfYnVzCQkJPSAmcGNpX2NmOF9jb25mMSwKIH07Ci0KLQpJ
bmRleDogbm9ydGhicmlkZ2UvdmlhL2NuNzAwL3N0YWdlMS5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vcnRo
YnJpZGdlL3ZpYS9jbjcwMC9zdGFnZTEuYwkocmV2aXNpb24gMTA3OCkKKysrIG5vcnRoYnJpZGdl
L3ZpYS9jbjcwMC9zdGFnZTEuYwkod29ya2luZyBjb3B5KQpAQCAtMjQsNTkgKzI0LDYgQEAKICNp
bmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlICJjbjcwMC5oIgogCi1zdGF0aWMgdm9pZCBlbmFi
bGVfc2hhZG93X3JhbSh2b2lkKSAKLXsKLQl1OCBzaGFkb3dyZWc7Ci0KLQlwcmludGsoQklPU19E
RUJVRywgIkVuYWJsaW5nIHNoYWRvdyByYW1cbiIpOwotCS8qIEVuYWJsZSBzaGFkb3cgcmFtIGFz
IG5vcm1hbCBkcmFtICovCi0JLyogMHhjMDAwMC0weGNmZmZmICovCi0JcGNpX2NvbmYxX3dyaXRl
X2NvbmZpZzgoUENJX0JERigwLCAwLCAzKSwgMHg4MCwgMHhmZik7Ci0JcGNpX2NvbmYxX3dyaXRl
X2NvbmZpZzgoUENJX0JERigwLCAwLCA3KSwgMHg2MSwgMHhmZik7Ci0JLyogMHhkMDAwMC0weGRm
ZmZmICovCi0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgoUENJX0JERigwLCAwLCAzKSwgMHg4MSwg
MHhmZik7Ci0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgoUENJX0JERigwLCAwLCA3KSwgMHg2Miwg
MHhmZik7Ci0JLyogMHhlMDAwMC0weGVmZmZmICovCi0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgo
UENJX0JERigwLCAwLCAzKSwgMHg4MiwgMHhmZik7Ci0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgo
UENJX0JERigwLCAwLCA3KSwgMHg2NCwgMHhmZik7Ci0KLQkvKiAweGYwMDAwLTB4ZmZmZmYgKi8K
LQlzaGFkb3dyZWcgPSBwY2lfY29uZjFfcmVhZF9jb25maWc4KFBDSV9CREYoMCwgMCwgMyksIDB4
ODMpOwotCXNoYWRvd3JlZyB8PSAweDMwOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBDSV9C
REYoMCwgMCwgMyksIDB4ODMsIHNoYWRvd3JlZyk7Ci0KLQkvKiBEbyBpdCBhZ2FpbiBmb3IgdGhl
IHZsaW5rIGNvbnRyb2xsZXIgKi8KLQlzaGFkb3dyZWcgPSBwY2lfY29uZjFfcmVhZF9jb25maWc4
KFBDSV9CREYoMCwgMCwgNyksIDB4NjMpOwotCXNoYWRvd3JlZyB8PSAweDMwOwotCXBjaV9jb25m
MV93cml0ZV9jb25maWc4KFBDSV9CREYoMCwgMCwgNyksIDB4NjMsIHNoYWRvd3JlZyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVuYWJsZV92bGluayh2b2lkKQotewotCXByaW50ayhCSU9TX0RFQlVHLCAi
RW5hYmxpbmcgVmlhIFYtTGlua1xuIik7Ci0KLQlwY2lfY29uZjFfd3JpdGVfY29uZmlnOChQQ0lf
QkRGKDAsIDAsIDcpLCAweDQyLCAweDg4KTsKLQlwY2lfY29uZjFfd3JpdGVfY29uZmlnOChQQ0lf
QkRGKDAsIDAsIDcpLCAweDQ1LCAweDQ0KTsKLQlwY2lfY29uZjFfd3JpdGVfY29uZmlnOChQQ0lf
QkRGKDAsIDAsIDcpLCAweDQ2LCAweDAwKTsKLQlwY2lfY29uZjFfd3JpdGVfY29uZmlnOChQQ0lf
QkRGKDAsIDAsIDcpLCAweDQ3LCAweDA0KTsKLQkvL3BjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NDgsIDB4MTMpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NGIsIDB4ODApOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NGMsIDB4ODIpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NGQsIDB4NDQpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NGUsIDB4MDApOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4NGYsIDB4MDEpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjQsIDB4MzUpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjUsIDB4NjYpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjYsIDB4NjYpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjcsIDB4NjQpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjgsIDB4NDUpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YjksIDB4OTgpOwotCXBjaV9jb25mMV93cml0ZV9jb25maWc4KFBD
SV9CREYoMCwgMCwgNyksIDB4YmEsIDB4NzcpOwotCi0JLyogVGhpcyBoYXMgdG8gYmUgZG9uZSBs
YXN0LCBJIHRoaW5rICovCi0JcGNpX2NvbmYxX3dyaXRlX2NvbmZpZzgoUENJX0JERigwLCAwLCA3
KSwgMHg0OCwgMHgxMyk7Ci19Ci0KIC8qKgogICogQ29uZmlndXJlIHRoZSBidXMgYmV0d2VlbiB0
aGUgY3B1IGFuZCB0aGUgbm9ydGhicmlkZ2UuIFRoaXMgbWlnaHQgYmUgYWJsZSB0byAKICAqIGJl
IG1vdmVkIHRvIHBvc3QtcmFtIGNvZGUgaW4gdGhlIGZ1dHVyZS4gRm9yIHRoZSBtb3N0IHBhcnQs
IHRoZXNlIHJlZ2lzdGVycwpAQCAtOTIsNiArMzksNyBAQAogc3RhdGljIHZvaWQgYzdfY3B1X3Nl
dHVwKHZvaWQpCiB7CiAJdTMyIGRldiA9IFBDSV9CREYoMCwgMCwgMik7CisJdTggcmVnODsKIAog
CS8qIEhvc3QgYnVzIGludGVyZmFjZSByZWdpc3RlcnMgKEQwRjIgMHg1MC0weDY3KSAqLwogCS8q
IFJlcXVlc3QgcGhhc2UgY29udHJvbCAqLwpAQCAtMTE0LDYgKzYyLDEzIEBACiAJICogICAgICAx
MTAvMTExIDogUmVzZXJ2ZWQKIAkgKiBiaXRzIDQ6MDogUmVzZXJ2ZWQKIAkgKi8KKworCXJlZzgg
PSBwY2lfY29uZjFfcmVhZF9jb25maWc4KGRldiwgMHg1Nyk7CisJcmVnOCAmPSAoMHg3IDw8IDUp
OworCS8vcmVnOCB8PSAoMHg0IDw8IDUpOworCXJlZzggfD0gKDB4MyA8PCA1KTsKKwlwY2lfY29u
ZjFfd3JpdGVfY29uZmlnOChkZXYsIDB4NTcsIHJlZzgpOworCQogCS8qIENQVSBNaXNjZWxsYW5l
b3VzIENvbnRyb2wgKi8KIAlwY2lfY29uZjFfd3JpdGVfY29uZmlnOChkZXYsIDB4NTksIDB4NDQp
OwogCS8qIFdyaXRlIFBvbGljeSAqLwpAQCAtMTc5LDcgKzEzNCw1IEBACiAJcGNpX2NvbmYxX3dy
aXRlX2NvbmZpZzgoUENJX0JERigwLCAxLCAwKSwgMHgxOSwgMHgxKTsKIAlwY2lfY29uZjFfd3Jp
dGVfY29uZmlnOChQQ0lfQkRGKDAsIDEsIDApLCAweDFhLCAweDEpOwogCi0JZW5hYmxlX3NoYWRv
d19yYW0oKTsKLQllbmFibGVfdmxpbmsoKTsKIAljN19jcHVfc2V0dXAoKTsKIH0KSW5kZXg6IGFy
Y2gveDg2L3ZpYS9jNy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFyY2gveDg2L3ZpYS9jNy5jCShyZXZpc2lv
biAxMDc4KQorKysgYXJjaC94ODYvdmlhL2M3LmMJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw4ICsy
MDMsOCBAQAogCiAJLyogU2V0IHVwIE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVycyAqLwogCS8v
dGhlc2UgZG9uJ3QgZXhpc3QgeWV0Ci0JLy94ODZfc2V0dXBfbXRycnMoMzYpOwotCS8veDg2X210
cnJfY2hlY2soKTsKKwl4ODZfc2V0dXBfbXRycnMoMzYpOworCXg4Nl9tdHJyX2NoZWNrKCk7CiAK
IAkvKiBFbmFibGUgdGhlIGxvY2FsIGNwdSBhcGljcyAqLwogCS8vc2V0dXBfbGFwaWMoKTsKSW5k
ZXg6IGFyY2gveDg2L210cnIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcmNoL3g4Ni9tdHJyLmMJKHJldmlz
aW9uIDApCisrKyBhcmNoL3g4Ni9tdHJyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ5IEBA
CisvKgorICogbXRyci5jOiBzZXR0aW5nIE1UUlIgdG8gZGVjZW50IHZhbHVlcyBmb3IgY2FjaGUg
aW5pdGlhbGl6YXRpb24gb24gUDYKKyAqCisgKiBEZXJpdmVkIGZyb20gaW50ZWxfc2V0X210cnIg
aW4gaW50ZWxfc3Vici5jIGFuZCBtdHJyLmMgaW4gbGludXgga2VybmVsCisgKgorICogQ29weXJp
Z2h0IDIwMDAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3Jwb3JhdGlvbgorICoKKyAqCVRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJp
ZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKiBSZWZlcmVuY2U6IEludGVsIEFyY2hpdGVj
dHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzOiBTeXN0ZW0gUHJvZ3Jh
bW1pbmcKKyAqLworCisvKgorICAgICAgICAyMDA1LjEgeWhsdSBhZGQgTkMgc3VwcG9ydCB0byBz
cGFyZSBtdHJycyBmb3IgNjRHIG1lbW9yeSBhYm92ZSBpbnN0YWxsZWQKKwkyMDA1LjYgRXJpYyBh
ZGQgYWRkcmVzcyBiaXQgaW4geDg2X3NldHVwX210cnJzCisJMjAwNS42IHlobHUgc3BsaXQgeDg2
X3NldHVwX3Zhcl9tdHJycyBhbmQgeDg2X3NldHVwX2ZpeGVkX210cnJzLAorCQlmb3IgQU1ELCBp
dCB3aWxsIG5vdCB1c2UgeDg2X3NldHVwX2ZpeGVkX210cnJzCisqLworCisjaW5jbHVkZSA8dHlw
ZXMuaD4KKyNpbmNsdWRlIDxjb25zb2xlLmg+CisjaW5jbHVkZSA8YXJjaC94ODYvbXNyLmg+Cisj
aW5jbHVkZSA8YXJjaC94ODYvbXRyci5oPgorI2luY2x1ZGUgPGFyY2gveDg2L2NwdS5oPgorCitz
dGF0aWMgdW5zaWduZWQgaW50IG10cnJfbXNyW10gPSB7CisJTVRSUmZpeDY0S18wMDAwMF9NU1Is
IE1UUlJmaXgxNktfODAwMDBfTVNSLCBNVFJSZml4MTZLX0EwMDAwX01TUiwKKwlNVFJSZml4NEtf
QzAwMDBfTVNSLCBNVFJSZml4NEtfQzgwMDBfTVNSLCBNVFJSZml4NEtfRDAwMDBfTVNSLCBNVFJS
Zml4NEtfRDgwMDBfTVNSLAorCU1UUlJmaXg0S19FMDAwMF9NU1IsIE1UUlJmaXg0S19FODAwMF9N
U1IsIE1UUlJmaXg0S19GMDAwMF9NU1IsIE1UUlJmaXg0S19GODAwMF9NU1IsCit9OworCit2b2lk
IGVuYWJsZV9maXhlZF9tdHJyKHZvaWQpCit7CisJc3RydWN0IG1zciBtc3I7CisKKwltc3IgPSBy
ZG1zcihNVFJSZGVmVHlwZV9NU1IpOworCW1zci5sbyB8PSAweGMwMDsKKwl3cm1zcihNVFJSZGVm
VHlwZV9NU1IsIG1zcik7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV92YXJfbXRycih2b2lkKQor
eworCXN0cnVjdCBtc3IgbXNyOworCisJbXNyID0gcmRtc3IoTVRSUmRlZlR5cGVfTVNSKTsKKwlt
c3IubG8gfD0gMHg4MDA7CisJd3Jtc3IoTVRSUmRlZlR5cGVfTVNSLCBtc3IpOworfQorCisvKiBz
ZXR0aW5nIHZhcmlhYmxlIG10cnIsIGNvbWVzIGZyb20gbGludXgga2VybmVsIHNvdXJjZSAqLwor
c3RhdGljIHZvaWQgc2V0X3Zhcl9tdHJyX3N0YWdlMigKKwl1bnNpZ25lZCBpbnQgcmVnLCB1bnNp
Z25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLCAKKwl1bnNpZ25lZCBsb25nIHR5
cGUsIHVuc2lnbmVkIGFkZHJlc3NfYml0cykKK3sKKwlzdHJ1Y3QgbXNyIGJhc2UsIG1hc2s7CisJ
dW5zaWduZWQgYWRkcmVzc19tYXNrX2hpZ2g7CisKKyAgICAgICAgaWYgKHJlZyA+PSA4KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBpdCBpcyByZWNvbW1lbmRlZCB0aGF0
IHdlIGRpc2FibGUgYW5kIGVuYWJsZSBjYWNoZSB3aGVuIHdlCisgICAgICAgIC8vIGRvIHRoaXMu
CisgICAgICAgIGlmIChzaXplayA9PSAwKSB7CisgICAgICAgIAlkaXNhYmxlX2NhY2hlKCk7CisJ
CisgICAgICAgICAgICAgICAgc3RydWN0IG1zciB6ZXJvOworICAgICAgICAgICAgICAgIHplcm8u
bG8gPSB6ZXJvLmhpID0gMDsKKyAgICAgICAgICAgICAgICAvKiBUaGUgaW52YWxpZCBiaXQgaXMg
a2VwdCBpbiB0aGUgbWFzaywgc28gd2Ugc2ltcGx5IGNsZWFyIHRoZQorICAgICAgICAgICAgICAg
ICAgIHJlbGV2YW50IG1hc2sgcmVnaXN0ZXIgdG8gZGlzYWJsZSBhIHJhbmdlLiAqLworICAgICAg
ICAgICAgICAgIHdybXNyIChNVFJScGh5c01hc2tfTVNSKHJlZyksIHplcm8pOworCisgICAgICAg
IAllbmFibGVfY2FjaGUoKTsKKwkJcmV0dXJuOworICAgICAgICB9CisKKworCWFkZHJlc3NfbWFz
a19oaWdoID0gKCgxdSA8PCAoYWRkcmVzc19iaXRzIC0gMzJ1KSkgLSAxdSk7CisKKwliYXNlLmhp
ID0gYmFzZWsgPj4gMjI7CisJYmFzZS5sbyAgPSBiYXNlayA8PCAxMDsKKworCXByaW50ayhCSU9T
X1NQRVcsICJBRERSRVNTX01BU0tfSElHSD0lI3hcbiIsIGFkZHJlc3NfbWFza19oaWdoKTsKKwor
CWlmIChzaXplayA8IDQqMTAyNCoxMDI0KSB7CisJCW1hc2suaGkgPSBhZGRyZXNzX21hc2tfaGln
aDsKKwkJbWFzay5sbyA9IH4oKHNpemVrIDw8IDEwKSAtMSk7CisJfQorCWVsc2UgeworCQltYXNr
LmhpID0gYWRkcmVzc19tYXNrX2hpZ2ggJiAofigoc2l6ZWsgPj4gMjIpIC0xKSk7CisJCW1hc2su
bG8gPSAwOworCX0KKworCS8vIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgd2UgZGlzYWJsZSBhbmQg
ZW5hYmxlIGNhY2hlIHdoZW4gd2UgCisJLy8gZG8gdGhpcy4gCisJZGlzYWJsZV9jYWNoZSgpOwor
CisJLyogQml0IDMyLTM1IG9mIE1UUlJwaHlzTWFzayBzaG91bGQgYmUgc2V0IHRvIDEgKi8KKwli
YXNlLmxvIHw9IHR5cGU7CisJbWFzay5sbyB8PSAweDgwMDsKKwl3cm1zciAoTVRSUnBoeXNCYXNl
X01TUihyZWcpLCBiYXNlKTsKKwl3cm1zciAoTVRSUnBoeXNNYXNrX01TUihyZWcpLCBtYXNrKTsK
KworCWVuYWJsZV9jYWNoZSgpOworfQorCisvKiBmbXM6IGZpbmQgbW9zdCBzaWdpZmljYW50IGJp
dCBzZXQsIHN0b2xlbiBmcm9tIExpbnV4IEtlcm5lbCBTb3VyY2UuICovCitzdGF0aWMgaW5saW5l
IHVuc2lnbmVkIGludCBmbXModW5zaWduZWQgaW50IHgpCit7CisJaW50IHI7CisKKwlfX2FzbV9f
KCJic3JsICUxLCUwXG5cdCIKKwkgICAgICAgICJqbnogMWZcblx0IgorCSAgICAgICAgIm1vdmwg
JDAsJTBcbiIKKwkgICAgICAgICIxOiIgOiAiPXIiIChyKSA6ICJnIiAoeCkpOworCXJldHVybiBy
OworfQorCisvKiBmbXM6IGZpbmQgbGVhc3Qgc2lnaWZpY2FudCBiaXQgc2V0ICovCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGludCBmbHModW5zaWduZWQgaW50IHgpCit7CisJaW50IHI7CisKKwlf
X2FzbV9fKCJic2ZsICUxLCUwXG5cdCIKKwkgICAgICAgICJqbnogMWZcblx0IgorCSAgICAgICAg
Im1vdmwgJDMyLCUwXG4iCisJICAgICAgICAiMToiIDogIj1yIiAocikgOiAiZyIgKHgpKTsKKwly
ZXR1cm4gcjsKK30KKworLyogc2V0dGluZyB1cCB2YXJpYWJsZSBhbmQgZml4ZWQgbXRycgorICoK
KyAqIEZyb20gSW50ZWwgVm9sLiBJSUkgU2VjdGlvbiA5LjEyLjQsIHRoZSBSYW5nZSBTaXplIGFu
ZCBCYXNlIEFsaWdubWVudCBoYXMgc29tZSBraW5kIG9mIHJlcXVpcmVtZW50OgorICoJMS4gVGhl
IHJhbmdlIHNpemUgbXVzdCBiZSAyXk4gYnl0ZSBmb3IgTiA+PSAxMiAoaS5lIDRLQiBtaW5pbXVt
KS4KKyAqCTIuIFRoZSBiYXNlIGFkZHJlc3MgbXVzdCBiZSAyXk4gYWxpZ25lZCwgd2hlcmUgdGhl
IE4gaGVyZSBpcyBlcXVhbCB0byB0aGUgTiBpbiBwcmV2aW91cworICoJICAgcmVxdWlyZW1lbnQu
IFNvIGEgOEsgcmFuZ2UgbXVzdCBiZSA4SyBhbGlnbmVkIG5vdCA0SyBhbGlnbmVkLgorICoKKyAq
IFRoZXNlIHJlcXVpcmVtZW50IGlzIG1lZXQgYnkgImRlY29tcG9zaXRpbmciIHRoZSByYW1zaXpl
IGludG8gU3VtKENuICogMl5uLCBuID0gWzAuLk5dLCBDbiA9IFswLCAxXSkuCisgKiBGb3IgQ20g
PSAxLCB0aGVyZSBpcyBhIFdCIHJhbmdlIG9mIDJebSBzaXplIGF0IGJhc2UgYWRkcmVzcyBTdW0o
Q20gKiAyXm0sIG0gPSBbTi4ubl0pLgorICogQSAxMjRNQiAoMTI4TUIgLSA0TUIgU01BKSBleGFt
cGxlOgorICogCXJhbXNpemUgPSAxMjRNQiA9PSA2NE1CIChhdCAwTUIpICsgMzJNQiAoYXQgNjRN
QikgKyAxNk1CIChhdCA5Nk1CICkgKyA4TUIgKGF0IDExMk1CKSArIDRNQiAoMTIwTUIpLgorICog
QnV0IHRoaXMgd2FzdGVzIGEgbG90IG9mIE1UUlIgcmVnaXN0ZXJzIHNvIHdlIHVzZSBhbm90aGVy
IG1vcmUgImFnZ3Jlc2l2ZSIgd2F5IHdpdGggVW5jYWNoZWFibGUgUmVnaW9ucy4KKyAqCisgKiBJ
biB0aGUgVW5jYWNoZWFibGUgUmVnaW9uIHNjaGVtZSwgd2UgdHJ5IHRvIGNvdmVyIHRoZSB3aG9s
ZSByYW1zaXplIGJ5IG9uZSBXQiByZWdpb24gYXMgcG9zc2libGUsCisgKiBJZiAoYW4gb25seSBp
ZikgdGhpcyBjYW4gbm90IGJlIGRvbmUgd2Ugd2lsbCB0cnkgdG8gZGVjb21wb3NpdGUgdGhlIHJh
bWVzaXplLCB0aGUgbWF0aGVtYXRpY2FsIGZvcm11bGEKKyAqIHdob3VsZCBiZSByYW1zaXplID0g
U3VtKENuICogMl5uLCBuID0gWzAuLk5dLCBDbiA9IFstMSwgMCwgMV0pLiBGb3IgQ24gPSAtMSwg
YSBVbmNhY2hhYmxlIFJlZ2lvbiBpcyB1c2VkLgorICogVGhlIHNhbWUgMTI0TUIgZXhhbXBsZToK
KyAqIAlyYW1zaXplID0gMTI0TUIgPT0gMTI4TUIgV0IgKGF0IDBNQikgKyA0TUIgVUMgKGF0IDEy
NE1CKQorICogb3IgYSAxNTZNQiAoMTI4TUIgKyAzMk1CIC0gNE1CIFNNQSkgZXhhbXBsZToKKyAq
CXJhbXNpemUgPSAxNTZNQiA9PSAxMjhNQiBXQiAoYXQgME1CKSArIDMyTUIgV0IgKGF0IDEyOE1C
KSArIDRNQiBVQyAoYXQgMTU2TUIpCisgKi8KKy8qIDIgTVRSUlMgYXJlIHJlc2VydmVkIGZvciB0
aGUgb3BlcmF0aW5nIHN5c3RlbSAqLworI2lmIDAKKyNkZWZpbmUgQklPU19NVFJSUyA2CisjZGVm
aW5lIE9TX01UUlJTICAgMgorI2Vsc2UKKyNkZWZpbmUgQklPU19NVFJSUyA4CisjZGVmaW5lIE9T
X01UUlJTICAgMAorI2VuZGlmCisjZGVmaW5lIE1UUlJTICAgICAgICAoQklPU19NVFJSUyArIE9T
X01UUlJTKQorCitzdGF0aWMgdm9pZCBzZXRfZml4ZWRfbXRycnModW5zaWduZWQgaW50IGZpcnN0
LCB1bnNpZ25lZCBpbnQgbGFzdCwgdW5zaWduZWQgY2hhciB0eXBlKQoreworCXVuc2lnbmVkIGlu
dCBpOworCXVuc2lnbmVkIGludCBmaXhlZF9tc3IgPSBOVU1fRklYRURfUkFOR0VTID4+IDM7CisJ
c3RydWN0IG1zciBtc3I7CisJbXNyLmxvID0gbXNyLmhpID0gMDsgLyogU2h1dCB1cCBnY2MgKi8K
Kwlmb3IoaSA9IGZpcnN0OyBpIDwgbGFzdDsgaSsrKSB7CisJCS8qIFdoZW4gSSBzd2l0Y2ggdG8g
YSBuZXcgbXNyIHJlYWQgaXQgaW4gKi8KKwkJaWYgKGZpeGVkX21zciAhPSBpID4+IDMpIHsKKwkJ
CS8qIEJ1dCBmaXJzdCB3cml0ZSBvdXQgdGhlIG9sZCBtc3IgKi8KKwkJCWlmIChmaXhlZF9tc3Ig
PCAoTlVNX0ZJWEVEX1JBTkdFUyA+PiAzKSkgeworCQkJCWRpc2FibGVfY2FjaGUoKTsKKwkJCQl3
cm1zcihtdHJyX21zcltmaXhlZF9tc3JdLCBtc3IpOworCQkJCWVuYWJsZV9jYWNoZSgpOworCQkJ
fQorCQkJZml4ZWRfbXNyID0gaT4+MzsKKwkJCW1zciA9IHJkbXNyKG10cnJfbXNyW2ZpeGVkX21z
cl0pOworCQl9CisJCWlmICgoaSAmIDcpIDwgNCkgeworCQkJbXNyLmxvICY9IH4oMHhmZiA8PCAo
KGkmMykqOCkpOworCQkJbXNyLmxvIHw9IHR5cGUgPDwgKChpJjMpKjgpOworCQl9IGVsc2Ugewor
CQkJbXNyLmhpICY9IH4oMHhmZiA8PCAoKGkmMykqOCkpOworCQkJbXNyLmhpIHw9IHR5cGUgPDwg
KChpJjMpKjgpOworCQl9CisJfQorCS8qIFdyaXRlIG91dCB0aGUgZmluYWwgbXNyICovCisJaWYg
KGZpeGVkX21zciA8IChOVU1fRklYRURfUkFOR0VTID4+IDMpKSB7CisJCWRpc2FibGVfY2FjaGUo
KTsKKwkJd3Jtc3IobXRycl9tc3JbZml4ZWRfbXNyXSwgbXNyKTsKKwkJZW5hYmxlX2NhY2hlKCk7
CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgZml4ZWRfbXRycl9pbmRleCh1bnNpZ25lZCBsb25n
IGFkZHJrKQoreworCXVuc2lnbmVkIGluZGV4OworCWluZGV4ID0gKGFkZHJrIC0gMCkgPj4gNjsK
KwlpZiAoaW5kZXggPj0gOCkgeworCQlpbmRleCA9ICgoYWRkcmsgLSA4KjY0KSA+PiA0KSArIDg7
CisJfQorCWlmIChpbmRleCA+PSAyNCkgeworCQlpbmRleCA9ICgoYWRkcmsgLSAoOCo2NCArIDE2
KjE2KSkgPj4gMikgKyAyNDsKKwl9CisJaWYgKGluZGV4ID4gTlVNX0ZJWEVEX1JBTkdFUykgewor
CQlpbmRleCA9IE5VTV9GSVhFRF9SQU5HRVM7CisJfQorCXJldHVybiBpbmRleDsKK30KKworc3Rh
dGljIHVuc2lnbmVkIGludCByYW5nZV90b19tdHJyKHVuc2lnbmVkIGludCByZWcsIAorCXVuc2ln
bmVkIGxvbmcgcmFuZ2Vfc3RhcnRrLCB1bnNpZ25lZCBsb25nIHJhbmdlX3NpemVrLAorCXVuc2ln
bmVkIGxvbmcgbmV4dF9yYW5nZV9zdGFydGssIHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQg
YWRkcmVzc19iaXRzKQoreworCWlmICghcmFuZ2Vfc2l6ZWsgfHwgKHJlZyA+PSBCSU9TX01UUlJT
KSkgeworCQlyZXR1cm4gcmVnOworCX0KKwl3aGlsZShyYW5nZV9zaXplaykgeworCQl1bnNpZ25l
ZCBsb25nIG1heF9hbGlnbiwgYWxpZ247CisJCXVuc2lnbmVkIGxvbmcgc2l6ZWs7CisJCS8qIENv
bXB1dGUgdGhlIG1heGltdW0gc2l6ZSBJIGNhbiBtYWtlIGEgcmFuZ2UgKi8KKwkJbWF4X2FsaWdu
ID0gZmxzKHJhbmdlX3N0YXJ0ayk7CisJCWFsaWduID0gZm1zKHJhbmdlX3NpemVrKTsgCisJCWlm
IChhbGlnbiA+IG1heF9hbGlnbikgeworCQkJYWxpZ24gPSBtYXhfYWxpZ247CisJCX0KKwkJc2l6
ZWsgPSAxIDw8IGFsaWduOworCQlwcmludGsoQklPU19ERUJVRywgIlNldHRpbmcgdmFyaWFibGUg
TVRSUiAlZCwgYmFzZTogJTRkTUIsIHJhbmdlOiAlNGRNQiwgdHlwZSAlc1xuIiwKKwkJCXJlZywg
cmFuZ2Vfc3RhcnRrID4+MTAsIHNpemVrID4+IDEwLAorCQkJKHR5cGU9PU1UUlJfVFlQRV9VTkNB
Q0hFQUJMRSk/IlVDIjoKKwkJCSAgICAoKHR5cGU9PU1UUlJfVFlQRV9XUkJBQ0spPyJXQiI6Ik90
aGVyIikKKwkJCSk7CisJCXNldF92YXJfbXRycl9zdGFnZTIocmVnKyssIHJhbmdlX3N0YXJ0aywg
c2l6ZWssIHR5cGUsIGFkZHJlc3NfYml0cyk7CisJCXJhbmdlX3N0YXJ0ayArPSBzaXplazsKKwkJ
cmFuZ2Vfc2l6ZWsgLT0gc2l6ZWs7CisJCWlmIChyZWcgPj0gQklPU19NVFJSUykKKwkJCWJyZWFr
OworCX0KKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNrKHU2NCB2
YWx1ZSkgCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHRrOworCWlmICh2YWx1ZSA8ICgxVUxMIDw8
IDQyKSkgeworCQlyZXN1bHRrID0gdmFsdWUgPj4gMTA7CisJfQorCWVsc2UgeworCQlyZXN1bHRr
ID0gMHhmZmZmZmZmZjsKKwl9CisJcmV0dXJuIHJlc3VsdGs7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dF9maXhlZF9tdHJyX3Jlc291cmNlKHZvaWQgKmdwLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj
dCByZXNvdXJjZSAqcmVzKQoreworCXVuc2lnbmVkIGludCBzdGFydF9tdHJyOworCXVuc2lnbmVk
IGludCBsYXN0X210cnI7CisJc3RhcnRfbXRyciA9IGZpeGVkX210cnJfaW5kZXgocmVzayhyZXMt
PmJhc2UpKTsKKwlsYXN0X210cnIgID0gZml4ZWRfbXRycl9pbmRleChyZXNrKChyZXMtPmJhc2Ug
KyByZXMtPnNpemUpKSk7CisJaWYgKHN0YXJ0X210cnIgPj0gTlVNX0ZJWEVEX1JBTkdFUykgewor
CQlyZXR1cm47CisJfQorCXByaW50ayhCSU9TX0RFQlVHLCAiU2V0dGluZyBmaXhlZCBNVFJScygl
ZC0lZCkgVHlwZTogV0JcbiIsCisJCXN0YXJ0X210cnIsIGxhc3RfbXRycik7CisJc2V0X2ZpeGVk
X210cnJzKHN0YXJ0X210cnIsIGxhc3RfbXRyciwgTVRSUl9UWVBFX1dSQkFDSyk7CisJCit9CisK
KyNpZm5kZWYgQ09ORklHX1ZBUl9NVFJSX0hPTEUKKyNkZWZpbmUgQ09ORklHX1ZBUl9NVFJSX0hP
TEUgMQorI2VuZGlmCisKK3N0cnVjdCB2YXJfbXRycl9zdGF0ZSB7CisJdW5zaWduZWQgbG9uZyBy
YW5nZV9zdGFydGssIHJhbmdlX3NpemVrOworCXVuc2lnbmVkIGludCByZWc7CisjaWYgQ09ORklH
X1ZBUl9NVFJSX0hPTEUKKwl1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRrLCBob2xlX3NpemVrOwor
I2VuZGlmCisJdW5zaWduZWQgYWRkcmVzc19iaXRzOworfTsKKwordm9pZCBzZXRfdmFyX210cnJf
cmVzb3VyY2Uodm9pZCAqZ3AsIHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICpy
ZXMpCit7CisJc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSA9IGdwOworCXVuc2lnbmVkIGxv
bmcgYmFzZWssIHNpemVrOworCWlmIChzdGF0ZS0+cmVnID49IEJJT1NfTVRSUlMpCisJCXJldHVy
bjsKKwliYXNlayA9IHJlc2socmVzLT5iYXNlKTsKKwlzaXplayA9IHJlc2socmVzLT5zaXplKTsK
KwkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZQorCSAqIEVpdGhlciBJ
IGFtIGJlbG93IDFNIGFuZCB0aGUgZml4ZWQgbXRycnMgaGFuZGxlIGl0LCBvcgorCSAqIHRoZSBy
YW5nZXMgdG91Y2guCisJICovCisJaWYgKChiYXNlayA8PSAxMDI0KSB8fCAoc3RhdGUtPnJhbmdl
X3N0YXJ0ayArIHN0YXRlLT5yYW5nZV9zaXplayA9PSBiYXNlaykpIHsKKwkJdW5zaWduZWQgbG9u
ZyBlbmRrID0gYmFzZWsgKyBzaXplazsKKwkJc3RhdGUtPnJhbmdlX3NpemVrID0gZW5kayAtIHN0
YXRlLT5yYW5nZV9zdGFydGs7CisJCXJldHVybjsKKwl9CisJLyogV3JpdGUgdGhlIHJhbmdlIG10
cnJzICovCisJaWYgKHN0YXRlLT5yYW5nZV9zaXplayAhPSAwKSB7CisjaWYgQ09ORklHX1ZBUl9N
VFJSX0hPTEUKKwkJaWYgKHN0YXRlLT5ob2xlX3NpemVrID09IDApIHsKKwkJCS8qIFdlIG5lZWQg
dG8gcHV0IHRoYXQgb24gdG8gaG9sZSAqLworCQkJdW5zaWduZWQgbG9uZyBlbmRrID0gYmFzZWsg
KyBzaXplazsKKwkJCXN0YXRlLT5ob2xlX3N0YXJ0ayA9IHN0YXRlLT5yYW5nZV9zdGFydGsgKyBz
dGF0ZS0+cmFuZ2Vfc2l6ZWs7CisJCQlzdGF0ZS0+aG9sZV9zaXplayAgPSBiYXNlayAtIHN0YXRl
LT5ob2xlX3N0YXJ0azsKKwkJCXN0YXRlLT5yYW5nZV9zaXplayA9IGVuZGsgLSBzdGF0ZS0+cmFu
Z2Vfc3RhcnRrOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJc3RhdGUtPnJlZyA9IHJhbmdl
X3RvX210cnIoc3RhdGUtPnJlZywgc3RhdGUtPnJhbmdlX3N0YXJ0aywgCisJCQlzdGF0ZS0+cmFu
Z2Vfc2l6ZWssIGJhc2VrLCBNVFJSX1RZUEVfV1JCQUNLLCBzdGF0ZS0+YWRkcmVzc19iaXRzKTsK
KyNpZiBDT05GSUdfVkFSX01UUlJfSE9MRQorCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihz
dGF0ZS0+cmVnLCBzdGF0ZS0+aG9sZV9zdGFydGssIAorCQkJc3RhdGUtPmhvbGVfc2l6ZWssIGJh
c2VrLCAgTVRSUl9UWVBFX1VOQ0FDSEVBQkxFLCBzdGF0ZS0+YWRkcmVzc19iaXRzKTsKKyNlbmRp
ZgorCQlzdGF0ZS0+cmFuZ2Vfc3RhcnRrID0gMDsKKwkJc3RhdGUtPnJhbmdlX3NpemVrID0gMDsK
KyNpZiBDT05GSUdfVkFSX01UUlJfSE9MRQorICAgICAgICAgICAgICAgIHN0YXRlLT5ob2xlX3N0
YXJ0ayA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGUtPmhvbGVfc2l6ZWsgPSAwOworI2VuZGlm
CisJfQorCS8qIEFsbG9jYXRlIGFuIG1zciAqLyAgCisJcHJpbnRrKEJJT1NfU1BFVywgIiBBbGxv
Y2F0ZSBhbiBtc3IgLSBiYXNlayA9ICUwOHgsIHNpemVrID0gJTA4eCxcbiIsIGJhc2VrLCBzaXpl
ayk7CisJc3RhdGUtPnJhbmdlX3N0YXJ0ayA9IGJhc2VrOworCXN0YXRlLT5yYW5nZV9zaXplayAg
PSBzaXplazsKK30KKwordm9pZCB4ODZfc2V0dXBfZml4ZWRfbXRycnModm9pZCkKK3sKKyAgICAg
ICAgLyogVHJ5IHRoaXMgdGhlIHNpbXBsZSB3YXkgb2YgaW5jcmVtZW50YWxseSBhZGRpbmcgdG9n
ZXRoZXIKKyAgICAgICAgICogbXRycnMuICBJZiB0aGlzIGRvZXNuJ3Qgd29yayBvdXQgd2UgY2Fu
IGdldCBzbWFydCBhZ2FpbiAKKyAgICAgICAgICogYW5kIGNsZWFyIG91dCB0aGUgbXRycnMuCisg
ICAgICAgICAqLworCisgICAgICAgIHByaW50ayhCSU9TX0RFQlVHLCAiXG4iKTsKKyAgICAgICAg
LyogSW5pdGlhbGl6ZWQgdGhlIGZpeGVkX210cnJzIHRvIHVuY2FjaGVkICovCisgICAgICAgIHBy
aW50ayhCSU9TX0RFQlVHLCAiU2V0dGluZyBmaXhlZCBNVFJScyglZC0lZCkgVHlwZTogVUNcbiIs
CisJICAgICAgICAwLCBOVU1fRklYRURfUkFOR0VTKTsKKyAgICAgICAgc2V0X2ZpeGVkX210cnJz
KDAsIE5VTV9GSVhFRF9SQU5HRVMsIE1UUlJfVFlQRV9VTkNBQ0hFQUJMRSk7CisKKyAgICAgICAg
LyogTm93IHNlZSB3aGljaCBvZiB0aGUgZml4ZWQgbXRycnMgY292ZXIgcmFtLgorICAgICAgICAg
ICAgICAgICAqLworICAgICAgICBzZWFyY2hfZ2xvYmFsX3Jlc291cmNlcygKKwkJSU9SRVNPVVJD
RV9NRU0gfCBJT1JFU09VUkNFX0NBQ0hFQUJMRSwgSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNF
X0NBQ0hFQUJMRSwKKwkJc2V0X2ZpeGVkX210cnJfcmVzb3VyY2UsIE5VTEwpOworICAgICAgICBw
cmludGsoQklPU19ERUJVRywgIkRPTkUgZml4ZWQgTVRSUnNcbiIpOworCisgICAgICAgIC8qIGVu
YWJsZSBmaXhlZCBNVFJSICovCisgICAgICAgIHByaW50ayhCSU9TX1NQRVcsICJjYWxsIGVuYWJs
ZV9maXhlZF9tdHJyKClcbiIpOworICAgICAgICBlbmFibGVfZml4ZWRfbXRycigpOworCit9Cit2
b2lkIHg4Nl9zZXR1cF92YXJfbXRycnModW5zaWduZWQgYWRkcmVzc19iaXRzKQorLyogdGhpcyBy
b3V0aW5lIG5lZWRzIHRvIGtub3cgaG93IG1hbnkgYWRkcmVzcyBiaXRzIGEgZ2l2ZW4gcHJvY2Vz
c29yCisgKiBzdXBwb3J0cy4gIENQVXMgZ2V0IGdydW1weSB3aGVuIHlvdSBzZXQgdG9vIG1hbnkg
Yml0cyBpbiAKKyAqIHRoZWlyIG10cnIgcmVnaXN0ZXJzIDooICBJIHdvdWxkIGdlbmVyaWNhbGx5
IGNhbGwgY3B1aWQgaGVyZQorICogYW5kIGZpbmQgb3V0IGhvdyBtYW55IHBoeXNpY2FsbHkgc3Vw
cG9ydGVkIGJ1dCBzb21lIGNwdXMgYXJlCisgKiBidWdneSwgYW5kIHJlcG9ydCBtb3JlIGJpdHMg
dGhlbiB0aGV5IGFjdHVhbGx5IHN1cHBvcnQuCisgKi8KK3sKKwkvKiBUcnkgdGhpcyB0aGUgc2lt
cGxlIHdheSBvZiBpbmNyZW1lbnRhbGx5IGFkZGluZyB0b2dldGhlcgorCSAqIG10cnJzLiAgSWYg
dGhpcyBkb2Vzbid0IHdvcmsgb3V0IHdlIGNhbiBnZXQgc21hcnQgYWdhaW4gCisJICogYW5kIGNs
ZWFyIG91dCB0aGUgbXRycnMuCisJICovCisJc3RydWN0IHZhcl9tdHJyX3N0YXRlIHZhcl9zdGF0
ZTsKKworCS8qIENhY2hlIGFzIG1hbnkgbWVtb3J5IGFyZWFzIGFzIHBvc3NpYmxlICovCisJLyog
RklYTUUgaXMgdGhlcmUgYW4gYWxnb3JpdGhtIGZvciBjb21wdXRpbmcgdGhlIG9wdGltYWwgc2V0
IG9mIG10cnJzPyAKKwkgKiBJbiBzb21lIGNhc2VzIGl0IGlzIGRlZmluaXRlbHkgcG9zc2libGUg
dG8gZG8gYmV0dGVyLgorCSAqLworCXZhcl9zdGF0ZS5yYW5nZV9zdGFydGsgPSAwOworCXZhcl9z
dGF0ZS5yYW5nZV9zaXplayA9IDA7CisjaWYgQ09ORklHX1ZBUl9NVFJSX0hPTEUKKwl2YXJfc3Rh
dGUuaG9sZV9zdGFydGsgPSAwOworCXZhcl9zdGF0ZS5ob2xlX3NpemVrID0gMDsKKyNlbmRpZgor
CXZhcl9zdGF0ZS5yZWcgPSAwOworCXZhcl9zdGF0ZS5hZGRyZXNzX2JpdHMgPSBhZGRyZXNzX2Jp
dHM7CisJc2VhcmNoX2dsb2JhbF9yZXNvdXJjZXMoCisJCUlPUkVTT1VSQ0VfTUVNIHwgSU9SRVNP
VVJDRV9DQUNIRUFCTEUsIElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9DQUNIRUFCTEUsCisJ
CXNldF92YXJfbXRycl9yZXNvdXJjZSwgJnZhcl9zdGF0ZSk7CisKKwkvKiBXcml0ZSB0aGUgbGFz
dCByYW5nZSAqLworCXZhcl9zdGF0ZS5yZWcgPSByYW5nZV90b19tdHJyKHZhcl9zdGF0ZS5yZWcs
IHZhcl9zdGF0ZS5yYW5nZV9zdGFydGssIAorCQl2YXJfc3RhdGUucmFuZ2Vfc2l6ZWssIDAsIE1U
UlJfVFlQRV9XUkJBQ0ssIHZhcl9zdGF0ZS5hZGRyZXNzX2JpdHMpOworI2lmIENPTkZJR19WQVJf
TVRSUl9IT0xFCisJdmFyX3N0YXRlLnJlZyA9IHJhbmdlX3RvX210cnIodmFyX3N0YXRlLnJlZywg
dmFyX3N0YXRlLmhvbGVfc3RhcnRrLAorCQl2YXJfc3RhdGUuaG9sZV9zaXplaywgIDAsIE1UUlJf
VFlQRV9VTkNBQ0hFQUJMRSwgdmFyX3N0YXRlLmFkZHJlc3NfYml0cyk7CisjZW5kaWYKKwlwcmlu
dGsoQklPU19ERUJVRywgIkRPTkUgdmFyaWFibGUgTVRSUnNcbiIpOworCXByaW50ayhCSU9TX0RF
QlVHLCAiQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3NcbiIpOworCS8qIENsZWFyIG91dCB0aGUg
ZXh0cmEgTVRSUidzICovCisJd2hpbGUodmFyX3N0YXRlLnJlZyA8IE1UUlJTKSB7CisJCXNldF92
YXJfbXRycl9zdGFnZTIodmFyX3N0YXRlLnJlZysrLCAwLCAwLCAwLCB2YXJfc3RhdGUuYWRkcmVz
c19iaXRzKTsKKwl9CisJcHJpbnRrKEJJT1NfU1BFVywgImNhbGwgZW5hYmxlX3Zhcl9tdHJyKClc
biIpOworCWVuYWJsZV92YXJfbXRycigpOworCXByaW50ayhCSU9TX1NQRVcsICJMZWF2ZSAlc1xu
IiwgX19GVU5DVElPTl9fKTsKKwlwb3N0X2NvZGUoMHg2QSk7Cit9CisKK3ZvaWQgeDg2X3NldHVw
X210cnJzKHVuc2lnbmVkIGFkZHJlc3NfYml0cykKK3sKKwl4ODZfc2V0dXBfZml4ZWRfbXRycnMo
KTsKKwl4ODZfc2V0dXBfdmFyX210cnJzKGFkZHJlc3NfYml0cyk7Cit9CisKKworaW50IHg4Nl9t
dHJyX2NoZWNrKHZvaWQpCit7CisJLyogT25seSBQZW50aXVtIFBybyBhbmQgbGF0ZXIgaGF2ZSBN
VFJSICovCisJc3RydWN0IG1zciBtc3I7CisJcHJpbnRrKEJJT1NfREVCVUcsICJcbk1UUlIgY2hl
Y2tcbiIpOworCisJbXNyID0gcmRtc3IoMHgyZmYpOworCW1zci5sbyA+Pj0gMTA7CisKKwlwcmlu
dGsoQklPU19ERUJVRywgIkZpeGVkIE1UUlJzICAgOiAiKTsKKwlpZiAobXNyLmxvICYgMHgwMSkK
KwkJcHJpbnRrKEJJT1NfREVCVUcsICJFbmFibGVkXG4iKTsKKwllbHNlCisJCXByaW50ayhCSU9T
X0RFQlVHLCAiRGlzYWJsZWRcbiIpOworCisJcHJpbnRrKEJJT1NfREVCVUcsICJWYXJpYWJsZSBN
VFJSczogIik7CisJaWYgKG1zci5sbyAmIDB4MDIpCisJCXByaW50ayhCSU9TX0RFQlVHLCAiRW5h
YmxlZFxuIik7CisJZWxzZQorCQlwcmludGsoQklPU19ERUJVRywgIkRpc2FibGVkXG4iKTsKKwor
CXByaW50ayhCSU9TX0RFQlVHLCAiXG4iKTsKKworCXBvc3RfY29kZSgweDkzKTsKKwlyZXR1cm4g
KChpbnQpIG1zci5sbyk7Cit9CkluZGV4OiBhcmNoL3g4Ni9NYWtlZmlsZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBhcmNoL3g4Ni9NYWtlZmlsZQkocmV2aXNpb24gMTA3OCkKKysrIGFyY2gveDg2L01ha2VmaWxl
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogU1RBR0UyX0FSQ0hfWDg2X1NS
QyAgPSBhcmNodGFibGVzLmMgY29yZWJvb3RfdGFibGUuYyBtdWx0aWJvb3QuYyB1ZGVsYXlfaW8u
YwogU1RBR0UyX0FSQ0hfWDg2X1NSQyArPSBwY2lfb3BzX2F1dG8uYyBwY2lfb3BzX2NvbmYxLmMg
Ci1TVEFHRTJfQVJDSF9YODZfU1JDICs9IGtleWJvYXJkLmMgaTgyNTkuYyBpc2EtZG1hLmMKK1NU
QUdFMl9BUkNIX1g4Nl9TUkMgKz0ga2V5Ym9hcmQuYyBpODI1OS5jIGlzYS1kbWEuYyBtdHJyLmMK
IAogaWZlcSAoJChDT05GSUdfUElSUV9UQUJMRSkseSkKIFNUQUdFMl9BUkNIX1g4Nl9TUkMgKz0g
cGlycV9yb3V0aW5nLmMK
------=_Part_22000_17087428.1229582308095--




More information about the coreboot mailing list