From owner-freebsd-arm@FreeBSD.ORG Wed May 13 16:31:22 2015 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 28416559 for ; Wed, 13 May 2015 16:31:22 +0000 (UTC) Received: from phabric-backend.isc.freebsd.org (phabric-backend.isc.freebsd.org [IPv6:2001:4f8:3:ffe0:406a:0:50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 054A51558 for ; Wed, 13 May 2015 16:31:22 +0000 (UTC) Received: from phabric-backend.isc.freebsd.org (phabric-backend.isc.freebsd.org [127.0.1.5]) by phabric-backend.isc.freebsd.org (8.14.9/8.14.9) with ESMTP id t4DGVLnx084911 for ; Wed, 13 May 2015 16:31:21 GMT (envelope-from daemon-user@phabric-backend.isc.freebsd.org) Received: (from daemon-user@localhost) by phabric-backend.isc.freebsd.org (8.14.9/8.14.9/Submit) id t4DGVLSs084910; Wed, 13 May 2015 16:31:21 GMT (envelope-from daemon-user) Date: Wed, 13 May 2015 16:31:21 +0000 To: freebsd-arm@freebsd.org From: "zbb (Zbigniew Bodek)" Subject: [Differential] [Updated, 1, 030 lines] D2377: Introduce ARM GICv3 support Message-ID: X-Priority: 3 Thread-Topic: D2377: Introduce ARM GICv3 support X-Herald-Rules: <28>, <31>, <32>, <34>, <8> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: X-Phabricator-Cc: X-Phabricator-Cc: X-Phabricator-Cc: X-Phabricator-Cc: In-Reply-To: References: Thread-Index: MjA1ZGZkZWI5MTE4ZDk2Nzk0YzAyZGRiMWRiIFVTfFk= Precedence: bulk X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_aa86d2b102d65d0b7ec96760f1e6406e" X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.20 List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 May 2015 16:31:22 -0000 --b1_aa86d2b102d65d0b7ec96760f1e6406e Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb updated this revision to Diff 5366. This revision now requires review to proceed. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2377?vs=5364&id=5366 REVISION DETAIL https://reviews.freebsd.org/D2377 AFFECTED FILES sys/arm64/arm64/gic_v3.c sys/arm64/arm64/gic_v3_fdt.c sys/arm64/arm64/gic_v3_reg.h sys/arm64/arm64/gic_v3_var.h sys/arm64/arm64/locore.S sys/arm64/include/armreg.h sys/conf/files.arm64 EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: zbb, ian, andrew, emaste, imp, brueffer, joel, wblock Cc: kostikbel, emaste, andrew, imp, freebsd-arm --b1_aa86d2b102d65d0b7ec96760f1e6406e Content-Type: text/x-patch; charset=utf-8; name="D2377.5366.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2377.5366.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTE5LDYgKzE5LDggQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0 L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKK2FybTY0L2FybTY0L2dpY192M19mZHQu YwlvcHRpb25hbAlmZHQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJCXN0YW5kYXJkCiBhcm02NC9h cm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQvaW5fY2tzdW0uYwkJb3B0 aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvaW5jbHVkZS9hcm1yZWcu aCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5cy9hcm02NC9pbmNsdWRlL2Fy bXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCkBAIC05Niw2ICs5NiwyNCBA QAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdhdGNocG9pbnQsIGZyb20gc2Ft ZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJlYWtwb2ludCAqLwogCisvKiBJ Q0NfQ1RMUl9FTDEgKi8KKyNkZWZpbmUJSUNDX0NUTFJfRUwxX0VPSU1PREUJKDFVIDw8IDEpCisK Ky8qIElDQ19JQVIxX0VMMSAqLworI2RlZmluZQlJQ0NfSUFSMV9FTDFfU1BVUgkoMHgwM2ZmKQor CisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBfRUwxX0VOCSgxVSA8 PCAwKQorCisvKiBJQ0NfUE1SX0VMMSAqLworI2RlZmluZQlJQ0NfUE1SX0VMMV9QUklPX01BU0sJ KDB4RkZVTCkKKworLyogSUNDX1NSRV9FTDEgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDFfU1JFCQko MVUgPDwgMCkKKworLyogSUNDX1NSRV9FTDIgKi8KKyNkZWZpbmUJSUNDX1NSRV9FTDJfRU4JCSgx VSA8PCAzKQorCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURfQUE2NFBGUjBfRUww X01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFTSwkoMHhmIDw8IDQp CkBAIC0xMDUsNyArMTIzLDEwIEBACiAjZGVmaW5lCSBJRF9BQTY0UEZSMF9GUF9JTVBMCSgweDAg PDwgMTYpIC8qIEZsb2F0aW5nLXBvaW50IGltcGxlbWVudGVkICovCiAjZGVmaW5lCSBJRF9BQTY0 UEZSMF9GUF9OT05FCSgweGYgPDwgMTYpIC8qIEZsb2F0aW5nLXBvaW50IG5vdCBpbXBsZW1lbnRl ZCAqLwogI2RlZmluZQlJRF9BQTY0UEZSMF9BRFZfU0lNRF9NQVNLICgweGYgPDwgMjApCi0jZGVm aW5lCUlEX0FBNjRQRlIwX0dJQ19NQVNLCSgweGYgPDwgMjQpCisjZGVmaW5lCUlEX0FBNjRQRlIw X0dJQ19TSElGVAkoMjQpCisjZGVmaW5lCUlEX0FBNjRQRlIwX0dJQ19CSVRTCSgweDQpIC8qIE51 bWJlciBvZiBiaXRzIGluIEdJQyBmaWVsZCAqLworI2RlZmluZQlJRF9BQTY0UEZSMF9HSUNfTUFT SwkoMHhmIDw8IElEX0FBNjRQRlIwX0dJQ19TSElGVCkKKyNkZWZpbmUJIElEX0FBNjRQRlIwX0dJ Q19DUFVJRl9FTiAoMHgxIDw8IElEX0FBNjRQRlIwX0dJQ19TSElGVCkKIAogLyogTUFJUl9FTDEg LSBNZW1vcnkgQXR0cmlidXRlIEluZGlyZWN0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lCU1BSVJf QVRUUl9NQVNLKGlkeCkJKDB4ZmYgPDwgKChuKSogOCkpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQv YXJtNjQvbG9jb3JlLlMgYi9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0 L2FybTY0L2xvY29yZS5TCisrKyBiL3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMTg3LDYg KzE4NywyMCBAQAogCW1vdgl4MiwgIyhQU1JfRiB8IFBTUl9JIHwgUFNSX0EgfCBQU1JfRCB8IFBT Ul9NX0VMMWgpCiAJbXNyCXNwc3JfZWwyLCB4MgogCisJLyogQ29uZmlndXJlIEdJQ3YzIENQVSBp bnRlcmZhY2UgKi8KKwltcnMJeDIsIGlkX2FhNjRwZnIwX2VsMQorCS8qIEV4dHJhY3QgR0lDIGJp dHMgZnJvbSB0aGUgcmVnaXN0ZXIgKi8KKwl1YmZ4CXgyLCB4MiwgI0lEX0FBNjRQRlIwX0dJQ19T SElGVCwgI0lEX0FBNjRQRlIwX0dJQ19CSVRTCisJLyogR0lDWzM6MF0gPT0gMDAwMSAtIEdJQyBD UFUgaW50ZXJmYWNlIHZpYSBzcGVjaWFsIHJlZ3MuIHN1cHBvcnRlZCAqLworCWNtcAl4MiwgIyhJ RF9BQTY0UEZSMF9HSUNfQ1BVSUZfRU4gPj4gSURfQUE2NFBGUjBfR0lDX1NISUZUKQorCWIubmUJ MmYKKworCW1ycwl4MiwgaWNjX3NyZV9lbDIKKwlvcnIJeDIsIHgyLCAjSUNDX1NSRV9FTDJfRU4J LyogRW5hYmxlIGFjY2VzcyBmcm9tIGluc2VjdXJlIEVMMSAqLworCW1zcglpY2Nfc3JlX2VsMiwg eDIKKwlpc2IKKzI6CisKIAkvKiBTZXQgdGhlIGFkZHJlc3MgdG8gcmV0dXJuIHRvIG91ciByZXR1 cm4gYWRkcmVzcyAqLwogCW1zcgllbHJfZWwyLCB4MzAKIApkaWZmIC0tZ2l0IGEvc3lzL2FybTY0 L2FybTY0L2dpY192M192YXIuaCBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz X3Zhci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUg RnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg c29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3Jz aGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9HSUNfVjNfVkFSX0hf CisjZGVmaW5lIF9HSUNfVjNfVkFSX0hfCisKKyNkZWZpbmUJR0lDX1YzX0RFVlNUUgkiQVJNIEdl bmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgdjMuMCIKKworREVDTEFSRV9DTEFTUyhnaWNfdjNf ZHJpdmVyKTsKKworc3RydWN0IGdpY19yZWRpc3RzIHsKKwkvKgorCSAqIFJlLURpc3RyaWJ1dG9y IHJlZ2lvbiBkZXNjcmlwdGlvbi4KKwkgKiBXZSB3aWxsIGhhdmUgZmV3IG9mIHRob3NlIGRlcGVu ZGluZworCSAqIG9uIHRoZSAjcmVkaXN0cmlidXRvci1yZWdpb25zIHByb3BlcnR5IGluIEZEVC4K KwkgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKioJcmVnaW9uczsKKwkvKiBOdW1iZXIgb2YgUmUtRGlz dHJpYnV0b3IgcmVnaW9ucyAqLworCXVfaW50CQkJbnJlZ2lvbnM7CisJLyogUGVyLUNQVSBSZS1E aXN0cmlidXRvciBoYW5kbGVyICovCisJc3RydWN0IHJlc291cmNlICoJcGNwdVtNQVhDUFVdOwor fTsKKworc3RydWN0IGdpY192M19zb2Z0YyB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgcmVz b3VyY2UgKioJZ2ljX3JlczsKKwlzdHJ1Y3QgbXR4CQlnaWNfbXR4OworCS8qIERpc3RyaWJ1dG9y ICovCisJc3RydWN0IHJlc291cmNlICoJZ2ljX2Rpc3Q7CisJLyogUmUtRGlzdHJpYnV0b3JzICov CisJc3RydWN0IGdpY19yZWRpc3RzCWdpY19yZWRpc3RzOworCisJdV9pbnQJCQlnaWNfbmlycXM7 CisJdV9pbnQJCQlnaWNfaWRiaXRzOworCisJYm9vbGVhbl90CQlnaWNfcmVnaXN0ZXJlZDsKK307 CisKK01BTExPQ19ERUNMQVJFKE1fR0lDX1YzKTsKKworLyogRGV2aWNlIG1ldGhvZHMgKi8KK2lu dCBnaWNfdjNfYXR0YWNoKGRldmljZV90IGRldik7CitpbnQgZ2ljX3YzX2RldGFjaChkZXZpY2Vf dCBkZXYpOworCisvKgorICogR0lDIERpc3RyaWJ1dG9yIGFjY2Vzc29ycy4KKyAqIE5vdGljZSB0 aGF0IG9ubHkgR0lDIHNvZmMgY2FuIGJlIHBhc3NlZC4KKyAqLworI2RlZmluZQlnaWNfZF9yZWFk KHNjLCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCWJ1c19yZWFkXyMjbGVuKHNjLT5naWNfZGlz dCwgcmVnKTsJXAorfSkKKworI2RlZmluZQlnaWNfZF93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJ CVwKKyh7CQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbihzYy0+Z2ljX2Rpc3QsIHJlZywgdmFsKTtc Cit9KQorCisvKiBHSUMgUmUtRGlzdHJpYnV0b3IgYWNjZXNzb3JzIChwZXItQ1BVKSAqLworI2Rl ZmluZQlnaWNfcl9yZWFkKHNjLCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCXVfaW50IGNwdSA9 IFBDUFVfR0VUKGNwdWlkKTsJCVwKKwkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbigJCQkJXAorCSAg ICBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVdLAkJXAorCSAgICByZWcpOwkJCQlcCit9KQorCisj ZGVmaW5lCWdpY19yX3dyaXRlKHNjLCBsZW4sIHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJdV9p bnQgY3B1ID0gUENQVV9HRVQoY3B1aWQpOwkJXAorCQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbigJ CQlcCisJICAgIHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdV0sCQlcCisJICAgIHJlZywgdmFsKTsJ CQkJXAorfSkKKworI2VuZGlmIC8qIF9HSUNfVjNfVkFSX0hfICovCmRpZmYgLS1naXQgYS9zeXMv YXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9n aWNfdjNfcmVnLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1 IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog VGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3Bv bnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19S RUdfSF8KKyNkZWZpbmUJX0dJQ19WM19SRUdfSF8KKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9m IGludGVycnVwdHMKKyAqIHN1cHBvcnRlZCBieSBHSUMgKGluY2x1ZGluZyBTR0lzLCBQUElzIGFu ZCBTUElzKQorICovCisjZGVmaW5lCUdJQ19JX05VTV9NQVgJCSgxMDIwKQorLyoKKyAqIFByaW9y aXR5IE1BWC9NSU4gdmFsdWVzCisgKi8KKyNkZWZpbmUJR0lDX1BSSU9SSVRZX01BWAkoMHgwMFVM KQorLyogVXBwZXIgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBMUEkgbWF4IHByaW9yaXR5ICovCisj ZGVmaW5lCUdJQ19QUklPUklUWV9NSU4JKDB4RkNVTCkKKworLyogTnVtYmVycyBmb3Igc29mdHdh cmUgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1NHSQkJKDApCisj ZGVmaW5lCUdJQ19MQVNUX1NHSQkJKDE1KQorLyogTnVtYmVycyBmb3IgcHJpdmF0ZSBwZXJpcGhl cmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1BQSQkJKDE2KQorI2RlZmluZQlH SUNfTEFTVF9QUEkJCSgzMSkKKy8qIE51bWJlcnMgZm9yIHNwYXJlZCBwZXJpcGhlcmFsIGludGVy cnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX1NQSQkJKDMyKQorI2RlZmluZQlHSUNfTEFTVF9T UEkJCSgxMDE5KQorLyogTnVtYmVycyBmb3IgbG9jYWwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzICov CisjZGVmaW5lCUdJQ19GSVJTVF9MUEkJCSg4MTkyKQorCisvKgorICogUmVnaXN0ZXJzICh2Mi92 MykKKyAqLworI2RlZmluZQlHSUNEX0NUTFIJCSgweDAwMDApCisjZGVmaW5lCUdJQ0RfQ1RMUl9H MQkJKDEgPDwgMCkKKyNkZWZpbmUJR0lDRF9DVExSX0cxQQkJKDEgPDwgMSkKKyNkZWZpbmUJR0lD RF9DVExSX0FSRV9OUwkoMSA8PCA0KQorI2RlZmluZQlHSUNEX0NUTFJfUldQCQkoMSA8PCAzMSkK KworI2RlZmluZQlHSUNEX1RZUEVSCQkoMHgwMDA0KQorI2RlZmluZQkJR0lDRF9UWVBFUl9JREJJ VFMobikJKCgoKG4pID4+IDE5KSAmIDB4MUYpICsgMSkKKyNkZWZpbmUJCUdJQ0RfVFlQRVJfSV9O VU0obikJKCgoKG4pICYgMHhGMSkgKyAxKSAqIDMyKQorCisjZGVmaW5lCUdJQ0RfSVNFTkFCTEVS KG4pCSgweDAxMDAgKyAoKChuKSA+PiA1KSAqIDQpKQorI2RlZmluZQkJR0lDRF9JX1BFUl9JU0VO QUJMRVJuCSgzMikKKworI2RlZmluZQlHSUNEX0lDRU5BQkxFUihuKQkoMHgwMTgwICsgKCgobikg Pj4gNSkgKiA0KSkKKyNkZWZpbmUJR0lDRF9JUFJJT1JJVFlSKG4pCSgweDA0MDAgKyAoKChuKSA+ PiAyKSAqIDQpKQorI2RlZmluZQkJR0lDRF9JX1BFUl9JUFJJT1JJVFluCSg0KQorCisjZGVmaW5l CUdJQ0RfSV9NQVNLKG4pCQkoMSA8PCAoKG4pICUgMzIpKQorCisjZGVmaW5lCUdJQ0RfSUNGR1Io bikJCSgweDBDMDAgKyAoKChuKSA+PiA0KSAqIDQpKQorLyogRmlyc3QgYml0IGlzIGEgcG9sYXJp dHkgYml0ICgwIC0gbG93LCAxIC0gaGlnaCkgKi8KKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0xP VwkoMCA8PCAwKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9QT0xfSElHSAkoMSA8PCAwKQorI2RlZmlu ZQkJR0lDRF9JQ0ZHUl9QT0xfTUFTSwkoMHgxKQorLyogU2Vjb25kIGJpdCBpcyBhIHRyaWdnZXIg Yml0ICgwIC0gbGV2ZWwsIDEgLSBlZGdlKSAqLworI2RlZmluZQkJR0lDRF9JQ0ZHUl9UUklHX0xW TAkoMCA8PCAxKQorI2RlZmluZQkJR0lDRF9JQ0ZHUl9UUklHX0VER0UJKDEgPDwgMSkKKyNkZWZp bmUJCUdJQ0RfSUNGR1JfVFJJR19NQVNLCSgweDIpCisKKyNkZWZpbmUJCUdJQ0RfSV9QRVJfSUNG R1JuCSgxNikKKworLyoKKyAqIFJlZ2lzdGVycyAodjMpCisgKi8KKyNkZWZpbmUJR0lDRF9JUk9V VEVSKG4pCQkoMHg2MDAwICsgKChuKSAqIDgpKQorI2RlZmluZQlHSUNEX1BJRFIyCQkoMHhGRkU4 KQorCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9NQVNLCSgweEYwKQorI2RlZmluZQlHSUNSX1BJ RFIyX0FSQ0hfR0lDdjMJKDB4MzApCisjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9HSUN2NAkoMHg0 MCkKKworLyogUmVkaXN0cmlidXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lDUl9QSURSMgkJ R0lDRF9QSURSMgorCisjZGVmaW5lCUdJQ1JfVFlQRVIJCSgweDAwMDgpCisjZGVmaW5lCUdJQ1Jf VFlQRVJfVkxQSVMJKDEgPDwgMSkKKyNkZWZpbmUJR0lDUl9UWVBFUl9MQVNUCQkoMSA8PCA0KQor I2RlZmluZQlHSUNSX1RZUEVSX0FGRl9TSElGVAkoMzIpCisKKyNkZWZpbmUJR0lDUl9XQUtFUgkJ KDB4MDAxNCkKKyNkZWZpbmUJR0lDUl9XQUtFUl9QUwkJKDEgPDwgMSkgLyogUHJvY2Vzc29yIHNs ZWVwICovCisjZGVmaW5lCUdJQ1JfV0FLRVJfQ0EJCSgxIDw8IDIpIC8qIENoaWxkcmVuIGFzbGVl cCAqLworCisvKiBSZS1kaXN0cmlidXRvciByZWdpc3RlcnMgZm9yIFNHSXMgYW5kIFBQSXMgKi8K KyNkZWZpbmUJR0lDUl9SRF9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlHSUNSX1NH SV9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlHSUNSX1ZMUElfQkFTRV9TSVpFCVBB R0VfU0laRV82NEsKKyNkZWZpbmUJR0lDUl9SRVNFUlZFRF9TSVpFCVBBR0VfU0laRV82NEsKKwor I2RlZmluZQlHSUNSX0lTRU5BQkxFUjAJCQkJKDB4MDEwMCkKKyNkZWZpbmUJR0lDUl9JQ0VOQUJM RVIwCQkJCSgweDAxODApCisjZGVmaW5lCQlHSUNSX0lfRU5BQkxFUl9TR0lfTUFTSwkJKDB4MDAw MEZGRkYpCisjZGVmaW5lCQlHSUNSX0lfRU5BQkxFUl9QUElfTUFTSwkJKDB4RkZGRjAwMDApCisK KyNkZWZpbmUJCUdJQ1JfSV9QRVJfSVBSSU9SSVRZbgkJKEdJQ0RfSV9QRVJfSVBSSU9SSVRZbikK KworLyoKKyAqIENQVSBpbnRlcmZhY2UKKyAqLworCisvKgorICogUmVnaXN0ZXJzIGxpc3QgKElD Q194eXpfRUwxKToKKyAqCisgKiBQTVIgICAgIC0gUHJpb3JpdHkgTWFzayBSZWdpc3RlcgorICoJ CSogaW50ZXJydXB0cyBvZiBwcmlvcml0eSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQKKyAqCQkgIGlu IHRoaXMgbWFzayB3aWxsIGJlIHNpZ25hbGxlZCB0byB0aGUgQ1BVLgorICoJCSAgKDB4ZmYgLSBs b3dlc3QgcG9zc2libGUgcHJpby4sIDB4MDAgLSBoaWdoZXN0IHByaW8uKQorICoKKyAqIENUTFIg ICAgLSBDb250cm9sIFJlZ2lzdGVyCisgKgkJKiBjb250cm9scyBiZWhhdmlvciBvZiB0aGUgQ1BV IGludGVyZmFjZSBhbmQgZGlzcGxheXMKKyAqCQkgIGltcGxlbWVudGVkIGZlYXR1cmVzLgorICoK KyAqIElHUlBFTjEgLSBJbnRlcnJ1cHQgR3JvdXAgMSBFbmFibGUgUmVnaXN0ZXIKKyAqCisgKiBJ QVIxICAgIC0gSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIGNv bnRhaW5zIG51bWJlciBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nCisgKgkJICBpbnRl cnJ1cHQgZnJvbSB0aGUgR3JvdXAgMS4KKyAqCisgKiBFT0lSMSAgIC0gRW5kIG9mIEludGVycnVw dCBSZWdpc3RlciBHcm91cCAxCisgKgkJKiBXcml0ZXMgaW5mb3JtIENQVSBpbnRlcmZhY2UgYWJv dXQgY29tcGxldGVkIEdyb3VwIDEKKyAqCQkgIGludGVycnVwdHMgcHJvY2Vzc2luZy4KKyAqLwor CisjZGVmaW5lCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJ V1JJVEVfU1BFQ0lBTFJFRyhJQ0NfICMjcmVnICMjX0VMMSwgdmFsKTsJCVwKKwlpc2IoKTsJCQkJ CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlnaWNfaWNjX3JlYWQocmVnKQkJCQkJXAorKHsJ CQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7CQkJCQkJXAorCQkJCQkJCQlcCisJdmFsID0gUkVBRF9T UEVDSUFMUkVHKElDQ18gIyNyZWcgIyNfRUwxKTsJCVwKKwkodmFsKTsJCQkJCQkJXAorfSkKKwor I2RlZmluZQlnaWNfaWNjX3NldChyZWcsIG1hc2spCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWlu dDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCB8 PSAobWFzayk7CQkJCQkJXAorCWdpY19pY2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxl ICgwKQorCisjZGVmaW5lCWdpY19pY2NfY2xlYXIocmVnLCBtYXNrKQkJCQlcCitkbyB7CQkJCQkJ CQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJ XAorCXZhbCAmPSB+KG1hc2spOwkJCQkJCVwKKwlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKTsJCQkJ XAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9HSUNfVjNfUkVHX0hfICovCmRpZmYgLS1naXQg YS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19m ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9h cm02NC9naWNfdjNfZmR0LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qLQorICogQ29weXJpZ2h0IChj KSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0 aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxz eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJh bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j bHVkZSA8c3lzL21vZHVsZS5oPgorCisjaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29tbW9uLmg+Cisj aW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5o PgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRlICJwaWNfaWYu aCIKKworI2luY2x1ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisK Ky8qCisgKiBGRFQgZ2x1ZS4KKyAqLworc3RhdGljIGludCBnaWNfdjNfZmR0X3Byb2JlKGRldmlj ZV90KTsKK3N0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9hdHRhY2goZGV2aWNlX3QpOworCitzdGF0aWMg ZGV2aWNlX21ldGhvZF90IGdpY192M19mZHRfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRl cmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJZ2ljX3YzX2ZkdF9wcm9iZSksCisJ REVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWdpY192M19mZHRfYXR0YWNoKSwKKworCS8qIEVuZCAq LworCURFVk1FVEhPRF9FTkQKK307CisKK0RFRklORV9DTEFTU18xKGdpY192MywgZ2ljX3YzX2Zk dF9kcml2ZXIsIGdpY192M19mZHRfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19z b2Z0YyksIGdpY192M19kcml2ZXIpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBnaWNfdjNfZmR0X2Rl dmNsYXNzOworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywgc2ltcGxlYnVzLCBnaWNfdjNf ZmR0X2RyaXZlciwgZ2ljX3YzX2ZkdF9kZXZjbGFzcywKKyAgICAwLCAwLCBCVVNfUEFTU19JTlRF UlJVUFQgKyBCVVNfUEFTU19PUkRFUl9NSURETEUpOworRUFSTFlfRFJJVkVSX01PRFVMRShnaWNf djMsIG9md2J1cywgZ2ljX3YzX2ZkdF9kcml2ZXIsIGdpY192M19mZHRfZGV2Y2xhc3MsCisgICAg MCwgMCwgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworLyoK KyAqIERldmljZSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19mZHRfcHJvYmUo ZGV2aWNlX3QgZGV2KQoreworCisJaWYgKCFvZndfYnVzX3N0YXR1c19va2F5KGRldikpCisJCXJl dHVybiAoRU5YSU8pOworCisJaWYgKCFvZndfYnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYXJtLGdp Yy12MyIpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYsIEdJQ19W M19ERVZTVFIpOworCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50 CitnaWNfdjNfZmR0X2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0 YyAqc2M7CisJcGNlbGxfdCByZWRpc3RfcmVnaW9uczsKKwlpbnQgZXJyOworCisJc2MgPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmRldiA9IGRldjsKKworCS8qCisJICogUmVjb3ZlciBu dW1iZXIgb2YgdGhlIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMuCisJICovCisJaWYgKE9GX2dldGVu Y3Byb3Aob2Z3X2J1c19nZXRfbm9kZShkZXYpLCAiI3JlZGlzdHJpYnV0b3ItcmVnaW9ucyIsCisJ ICAgICZyZWRpc3RfcmVnaW9ucywgc2l6ZW9mKHJlZGlzdF9yZWdpb25zKSkgPD0gMCkKKwkJc2Mt PmdpY19yZWRpc3RzLm5yZWdpb25zID0gMTsKKwllbHNlCisJCXNjLT5naWNfcmVkaXN0cy5ucmVn aW9ucyA9IHJlZGlzdF9yZWdpb25zOworCisJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOworCWlm IChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gKGVycik7CisKK2Vycm9yOgorCWlmIChi b290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJICAgICJGYWlsZWQgdG8gYXR0 YWNoLiBFcnJvciAlZFxuIiwgZXJyKTsKKwl9CisJLyogRmFpbHVyZSBzbyBmcmVlIHJlc291cmNl cyAqLworCWdpY192M19kZXRhY2goZGV2KTsKKworCXJldHVybiAoZXJyKTsKK30KZGlmZiAtLWdp dCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9n aWNfdjMuYwpAQCAtMCwwICsxLDU4MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhl IEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz IHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYgdW5kZXIKKyAqIHRoZSBzcG9uc29y c2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5o PgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5j bHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgor I2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUg PHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvY3B1c2V0 Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKworI2lu Y2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorCisjaW5jbHVkZSA8bWFjaGlu ZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KKworI2luY2x1ZGUgInBpY19pZi5o IgorCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1ZGUgImdpY192M192YXIuaCIKKwor LyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworc3RhdGljIHZvaWQgZ2ljX3YzX2Rpc3BhdGNo KGRldmljZV90LCBzdHJ1Y3QgdHJhcGZyYW1lICopOworc3RhdGljIHZvaWQgZ2ljX3YzX2VvaShk ZXZpY2VfdCwgdV9pbnQpOworc3RhdGljIHZvaWQgZ2ljX3YzX21hc2tfaXJxKGRldmljZV90LCB1 X2ludCk7CitzdGF0aWMgdm9pZCBnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCwgdV9pbnQpOwor CitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGdpY192M19tZXRob2RzW10gPSB7CisJLyogRGV2aWNl IGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAlnaWNfdjNfZGV0YWNoKSwK KworCS8qIFBJQyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc3BhdGNoLAkJZ2ljX3Yz X2Rpc3BhdGNoKSwKKwlERVZNRVRIT0QocGljX2VvaSwJCWdpY192M19lb2kpLAorCURFVk1FVEhP RChwaWNfbWFzaywJCWdpY192M19tYXNrX2lycSksCisJREVWTUVUSE9EKHBpY191bm1hc2ssCQln aWNfdjNfdW5tYXNrX2lycSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9OworCitE RUZJTkVfQ0xBU1NfMChnaWNfdjMsIGdpY192M19kcml2ZXIsIGdpY192M19tZXRob2RzLAorICAg IHNpemVvZihzdHJ1Y3QgZ2ljX3YzX3NvZnRjKSk7CisKKy8qCisgKiBEcml2ZXItc3BlY2lmaWMg ZGVmaW5pdGlvbnMuCisgKi8KK01BTExPQ19ERUZJTkUoTV9HSUNfVjMsICJHSUN2MyIsIEdJQ19W M19ERVZTVFIpOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBhbmQgZGVmaW5pdGlvbnMuCisg Ki8KKy8qIERlc3RpbmF0aW9uIHJlZ2lzdGVycywgZWl0aGVyIERpc3RyaWJ1dG9yIG9yIFJlLURp c3RyaWJ1dG9yICovCitlbnVtIGdpY192M194ZGlzdCB7CisJRElTVCA9IDAsCisJUkVESVNULAor fTsKKworLyogSGVscGVyIHJvdXRpbmVzIHN0YXJ0aW5nIHdpdGggZ2ljX3YzXyAqLworc3RhdGlj IGludCBnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgaW50 IGdpY192M19yZWRpc3RfZmluZChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICopOworc3RhdGljIGludCBn aWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgZ2lj X3YzX2NwdV9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7CitzdGF0aWMgdm9pZCBnaWNfdjNf d2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNfc29mdGMgKiwgZW51bSBnaWNfdjNfeGRpc3QpOwor CisvKiBBIHNlcXVlbmNlIG9mIGluaXQgZnVuY3Rpb25zIGZvciBwcmltYXJ5IChib290KSBDUFUg Ki8KK3R5cGVkZWYgaW50ICgqZ2ljX3YzX2luaXRzZXFfdCkgKHN0cnVjdCBnaWNfdjNfc29mdGMg Kik7CisvKiBQcmltYXJ5IENQVSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworc3RhdGljIGdp Y192M19pbml0c2VxX3QgZ2ljX3YzX3ByaW1hcnlfaW5pdFtdID0geworCWdpY192M19kaXN0X2lu aXQsCisJZ2ljX3YzX3JlZGlzdF9pbml0LAorCWdpY192M19jcHVfaW5pdCwKKwlOVUxMCit9Owor CisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworaW50CitnaWNfdjNfYXR0YWNoKGRldmlj ZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKwlnaWNfdjNfaW5pdHNlcV90 ICppbml0X2Z1bmM7CisJdWludDMyX3QgdHlwZXI7CisJaW50IHJpZDsKKwlpbnQgZXJyOworCXNp emVfdCBpOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPmdpY19yZWdpc3Rl cmVkID0gRkFMU0U7CisJc2MtPmRldiA9IGRldjsKKwllcnIgPSAwOworCisJLyogSW5pdGlhbGl6 ZSBtdXRleCAqLworCW10eF9pbml0KCZzYy0+Z2ljX210eCwgIkdJQ3YzIGxvY2siLCBOVUxMLCBN VFhfU1BJTik7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFycmF5IG9mIHN0cnVjdCByZXNvdXJjZS4K KwkgKiBPbmUgZW50cnkgZm9yIERpc3RyaWJ1dG9yIGFuZCBhbGwgcmVtYWluaW5nIGZvciBSZS1E aXN0cmlidXRvci4KKwkgKi8KKwlzYy0+Z2ljX3JlcyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKHNj LT5naWNfcmVzKSAqIChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKSwKKwkgICAgTV9HSUNf VjMsIE1fV0FJVE9LKTsKKworCS8qIE5vdyBhbGxvY2F0ZSBjb3JyZXNwb25kaW5nIHJlc291cmNl cyAqLworCWZvciAoaSA9IDAsIHJpZCA9IDA7IGkgPCAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25z ICsgMSk7IGkrKywgcmlkKyspIHsKKwkJc2MtPmdpY19yZXNbcmlkXSA9IGJ1c19hbGxvY19yZXNv dXJjZV9hbnkoZGV2LCBTWVNfUkVTX01FTU9SWSwKKwkJICAgICZyaWQsIFJGX0FDVElWRSk7CisJ CWlmIChzYy0+Z2ljX3Jlc1tyaWRdID09IE5VTEwpCisJCQlyZXR1cm4gKEVOWElPKTsKKwl9CisK KwkvKgorCSAqIERpc3RyaWJ1dG9yIGludGVyZmFjZQorCSAqLworCXNjLT5naWNfZGlzdCA9IHNj LT5naWNfcmVzWzBdOworCisJLyoKKwkgKiBSZS1EcmlzdHJpYnV0b3IgaW50ZXJmYWNlCisJICov CisJLyogQWxsb2NhdGUgc3BhY2UgdW5kZXIgcmVnaW9uIGRlc2NyaXB0aW9ucyAqLworCXNjLT5n aWNfcmVkaXN0cy5yZWdpb25zID0gbWFsbG9jKAorCSAgICBzaXplb2YoKnNjLT5naWNfcmVkaXN0 cy5yZWdpb25zKSAqIHNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucywKKwkgICAgTV9HSUNfVjMsIE1f V0FJVE9LKTsKKworCS8qIEZpbGwtdXAgYnVzX3NwYWNlIGluZm9ybWF0aW9uIGZvciBlYWNoIHJl Z2lvbi4gKi8KKwlmb3IgKGkgPSAwLCByaWQgPSAxOyBpIDwgc2MtPmdpY19yZWRpc3RzLm5yZWdp b25zOyBpKyssIHJpZCsrKQorCQlzYy0+Z2ljX3JlZGlzdHMucmVnaW9uc1tpXSA9IHNjLT5naWNf cmVzW3JpZF07CisKKwkvKiBHZXQgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgU1BJIGludGVycnVw dHMgKi8KKwl0eXBlciA9IGdpY19kX3JlYWQoc2MsIDQsIEdJQ0RfVFlQRVIpOworCXNjLT5naWNf bmlycXMgPSBHSUNEX1RZUEVSX0lfTlVNKHR5cGVyKTsKKwlpZiAoc2MtPmdpY19uaXJxcyA+IEdJ Q19JX05VTV9NQVgpCisJCXNjLT5naWNfbmlycXMgPSBHSUNfSV9OVU1fTUFYOworCisJLyogR2V0 IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGludGVycnVwdCBpZGVudGlmaWVyIGJpdHMgKi8KKwlz Yy0+Z2ljX2lkYml0cyA9IEdJQ0RfVFlQRVJfSURCSVRTKHR5cGVyKTsKKworCWlmIChib290dmVy Ym9zZSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIlNQSXM6ICV1LCBJRHM6ICV1XG4iLAorCQkg ICAgc2MtPmdpY19uaXJxcywgKDEgPDwgc2MtPmdpY19pZGJpdHMpIC0gMSk7CisJfQorCisJLyog VHJhaW4gaW5pdCBzZXF1ZW5jZSBmb3IgYm9vdCBDUFUgKi8KKwlmb3IgKGluaXRfZnVuYyA9IGdp Y192M19wcmltYXJ5X2luaXQ7ICppbml0X2Z1bmMgIT0gTlVMTDsgaW5pdF9mdW5jKyspIHsKKwkJ ZXJyID0gKCppbml0X2Z1bmMpKHNjKTsKKwkJaWYgKGVyciAhPSAwKQorCQkJcmV0dXJuIChlcnIp OworCX0KKwkvKgorCSAqIEZ1bGwgc3VjY2Vzcy4KKwkgKiBOb3cgcmVnaXN0ZXIgUElDIHRvIHRo ZSBpbnRlcnJ1cHRzIGhhbmRsaW5nIGxheWVyLgorCSAqLworCWFybV9yZWdpc3Rlcl9yb290X3Bp YyhkZXYsIHNjLT5naWNfbmlycXMpOworCXNjLT5naWNfcmVnaXN0ZXJlZCA9IFRSVUU7CisKKwly ZXR1cm4gKDApOworfQorCitpbnQKK2dpY192M19kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0 cnVjdCBnaWNfdjNfc29mdGMgKnNjOworCXNpemVfdCBpOworCWludCByaWQ7CisKKwlzYyA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChkZXZpY2VfaXNfYXR0YWNoZWQoZGV2KSkgewor CQkvKgorCQkgKiBYWFg6IFdlIHNob3VsZCBwcm9iYWJseSBkZXJlZ2lzdGVyIFBJQworCQkgKi8K KwkJaWYgKHNjLT5naWNfcmVnaXN0ZXJlZCkKKwkJCXBhbmljKCJUcnlpbmcgdG8gZGV0YWNoIHJl Z2lzdGVyZWQgUElDIik7CisJfQorCWZvciAocmlkID0gMDsgcmlkIDwgKHNjLT5naWNfcmVkaXN0 cy5ucmVnaW9ucyArIDEpOyByaWQrKykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNf UkVTX01FTU9SWSwgcmlkLCBzYy0+Z2ljX3Jlc1tyaWRdKTsKKworCWZvciAoaSA9IDA7IGkgPCBN QVhDUFU7IGkrKykKKwkJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtpXSwgTV9HSUNfVjMpOwor CisJZnJlZShzYy0+Z2ljX3JlcywgTV9HSUNfVjMpOworCWZyZWUoc2MtPmdpY19yZWRpc3RzLnJl Z2lvbnMsIE1fR0lDX1YzKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBQSUMgaW50ZXJm YWNlLgorICovCitzdGF0aWMgdm9pZAorZ2ljX3YzX2Rpc3BhdGNoKGRldmljZV90IGRldiwgc3Ry dWN0IHRyYXBmcmFtZSAqZnJhbWUpCit7CisJdWludDY0X3QgYWN0aXZlX2lycTsKKworCXdoaWxl ICgxKSB7CisJCWFjdGl2ZV9pcnEgPSBnaWNfaWNjX3JlYWQoSUFSMSk7CisKKwkJaWYgKF9fcHJl ZGljdF9mYWxzZShhY3RpdmVfaXJxID09IElDQ19JQVIxX0VMMV9TUFVSKSkKKwkJCWJyZWFrOwor CisJCWlmIChfX3ByZWRpY3RfdHJ1ZSgoYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfUFBJICYmCisJ CSAgICBhY3RpdmVfaXJxIDw9IEdJQ19MQVNUX1NQSSkpKSB7CisJCQlhcm1fZGlzcGF0Y2hfaW50 cihhY3RpdmVfaXJxLCBmcmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhY3RpdmVf aXJxIDw9IEdJQ19MQVNUX1NHSSB8fCBhY3RpdmVfaXJxID49IEdJQ19GSVJTVF9MUEkpIHsKKwkJ CS8qCisJCQkgKiBUT0RPOiBJbXBsZW1lbnQgcHJvcGVyIFNHSS9MUEkgaGFuZGxpbmcuCisJCQkg KiAgICAgICBNYXNrIGl0IGlmIHN1Y2ggaXMgcmVjZWl2ZWQgZm9yIHNvbWUgcmVhc29uLgorCQkJ ICovCisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAiUmVjZWl2ZWQgdW5zdXBwb3J0ZWQg aW50ZXJydXB0IHR5cGU6ICVzXG4iLAorCQkJICAgIGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQ SSA/ICJMUEkiIDogIlNHSSIpOworCQkJUElDX01BU0soZGV2LCBhY3RpdmVfaXJxKTsKKwkJfQor CX0KK30KKworc3RhdGljIHZvaWQKK2dpY192M19lb2koZGV2aWNlX3QgZGV2LCB1X2ludCBpcnEp Cit7CisKKwlnaWNfaWNjX3dyaXRlKEVPSVIxLCAodWludDY0X3QpaXJxKTsKK30KKworc3RhdGlj IHZvaWQKK2dpY192M19tYXNrX2lycShkZXZpY2VfdCBkZXYsIHVfaW50IGlycSkKK3sKKwlzdHJ1 Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJ aWYgKGlycSA+PSBHSUNfRklSU1RfUFBJICYmIGlycSA8PSBHSUNfTEFTVF9QUEkpIHsgLyogUFBJ cyBpbiBjb3JyZXNwb25kaW5nIFJlLURpc3RyaWJ1dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0 LAorCQkgICAgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDRF9JQ0VOQUJMRVIoaXJxKSwgR0lDRF9J X01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIFJFRElTVCk7CisJfSBlbHNl IGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQ SXMgaW4gZGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVS KGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNU KTsKKwl9IGVsc2UKKwkJcGFuaWMoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19m dW5jX18sIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCitnaWNfdjNfdW5tYXNrX2lycShkZXZpY2Vf dCBkZXYsIHVfaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKworCXNjID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGlycSA+PSBHSUNfRklSU1RfUFBJICYmIGly cSA8PSBHSUNfTEFTVF9QUEkpIHsgLyogUFBJcyBpbiBjb3JyZXNwb25kaW5nIFJlLURpc3RyaWJ1 dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LAorCQkgICAgR0lDUl9TR0lfQkFTRV9TSVpFICsg R0lDRF9JU0VOQUJMRVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zv cl9yd3Aoc2MsIFJFRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBp cnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KKwkJZ2ljX2Rf d3JpdGUoc2MsIDQsIEdJQ0RfSVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQln aWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UKKwkJcGFuaWMoIiVzOiBVbnN1 cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSk7Cit9CisKKy8qCisgKiBIZWxw ZXIgcm91dGluZXMKKyAqLworc3RhdGljIHZvaWQKK2dpY192M193YWl0X2Zvcl9yd3Aoc3RydWN0 IGdpY192M19zb2Z0YyAqc2MsIGVudW0gZ2ljX3YzX3hkaXN0IHhkaXN0KQoreworCXN0cnVjdCBy ZXNvdXJjZSAqcmVzOworCXVfaW50IGNwdWlkOworCXNpemVfdCB1c19sZWZ0ID0gMTAwMDAwMDsK KworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCisJc3dpdGNoICh4ZGlzdCkgeworCWNhc2Ug RElTVDoKKwkJcmVzID0gc2MtPmdpY19kaXN0OworCQlicmVhazsKKwljYXNlIFJFRElTVDoKKwkJ cmVzID0gc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlLQVNTRVJUKDAsICgiJXM6IEF0dGVtcHQgdG8gd2FpdCBmb3IgdW5rbm93biBSV1AiLCBfX2Z1 bmNfXykpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKChidXNfcmVhZF80KHJlcywgR0lDRF9D VExSKSAmIEdJQ0RfQ1RMUl9SV1ApICE9IDApIHsKKwkJREVMQVkoMSk7CisJCWlmICh1c19sZWZ0 LS0gPT0gMCkKKwkJCXBhbmljKCJHSUNEIFJlZ2lzdGVyIHdyaXRlIHBlbmRpbmcgZm9yIHRvbyBs b25nIik7CisJfQorfQorCisvKiBDUFUgaW50ZXJmYWNlLiAqLworc3RhdGljIF9faW5saW5lIHZv aWQKK2dpY192M19jcHVfcHJpb3JpdHkodWludDY0X3QgbWFzaykKK3sKKworCS8qIFNldCBwcm9y aXR5IG1hc2sgKi8KKwlnaWNfaWNjX3dyaXRlKFBNUiwgbWFzayAmIElDQ19QTVJfRUwxX1BSSU9f TUFTSyk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19jcHVfZW5hYmxlX3NyZShzdHJ1Y3QgZ2lj X3YzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBzcmU7CisJdV9pbnQgY3B1aWQ7CisKKwljcHVp ZCA9IFBDUFVfR0VUKGNwdWlkKTsKKwkvKgorCSAqIFNldCB0aGUgU1JFIGJpdCB0byBlbmFibGUg YWNjZXNzIHRvIEdJQyBDUFUgaW50ZXJmYWNlCisJICogdmlhIHN5c3RlbSByZWdpc3RlcnMuCisJ ICovCisJc3JlID0gUkVBRF9TUEVDSUFMUkVHKGljY19zcmVfZWwxKTsKKwlzcmUgfD0gSUNDX1NS RV9FTDFfU1JFOworCVdSSVRFX1NQRUNJQUxSRUcoaWNjX3NyZV9lbDEsIHNyZSk7CisJaXNiKCk7 CisJLyoKKwkgKiBOb3cgZW5zdXJlIHRoYXQgdGhlIGJpdCBpcyBzZXQuCisJICovCisJc3JlID0g UkVBRF9TUEVDSUFMUkVHKGljY19zcmVfZWwxKTsKKwlpZiAoKHNyZSAmIElDQ19TUkVfRUwxX1NS RSkgPT0gMCkgeworCQkvKiBXZSBhcmUgZG9uZS4gVGhpcyB3YXMgZGlzYWJsZWQgaW4gRUwyICov CisJCWRldmljZV9wcmludGYoc2MtPmRldiwgIkVSUk9SOiBDUFUldSBjYW5ub3QgZW5hYmxlIENQ VSBpbnRlcmZhY2UgIgorCQkgICAgInZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLCBjcHVpZCk7CisJ CXJldHVybiAoRU5YSU8pOworCX0gZWxzZSBpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3By aW50ZihzYy0+ZGV2LAorCQkgICAgIkNQVSV1IGVuYWJsZWQgQ1BVIGludGVyZmFjZSB2aWEgc3lz dGVtIHJlZ2lzdGVyc1xuIiwKKwkJICAgIGNwdWlkKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgaW50CitnaWNfdjNfY3B1X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7 CisJaW50IGVycjsKKworCS8qIEVuYWJsZSBhY2Nlc3MgdG8gQ1BVIGludGVyZmFjZSB2aWEgc3lz dGVtIHJlZ2lzdGVycyAqLworCWVyciA9IGdpY192M19jcHVfZW5hYmxlX3NyZShzYyk7CisJaWYg KGVyciAhPSAwKQorCQlyZXR1cm4gKGVycik7CisJLyogUHJpb3JpdHkgbWFzayB0byBtaW5pbXVt IC0gYWNjZXB0IGFsbCBpbnRlcnJ1cHRzICovCisJZ2ljX3YzX2NwdV9wcmlvcml0eShHSUNfUFJJ T1JJVFlfTUlOKTsKKwkvKiBEaXNhYmxlIEVPSSBtb2RlICovCisJZ2ljX2ljY19jbGVhcihDVExS LCBJQ0NfQ1RMUl9FTDFfRU9JTU9ERSk7CisJLyogRW5hYmxlIGdyb3VwIDEgKGluc2VjdXJlKSBp bnRlcnJ1cHMgKi8KKwlnaWNfaWNjX3NldChJR1JQRU4xLCBJQ0NfSUdSUEVOMF9FTDFfRU4pOwor CisJcmV0dXJuICgwKTsKK30KKworLyogRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQKK2dpY192 M19kaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgYWZmOwor CXVfaW50IGk7CisKKwkvKgorCSAqIDEuIERpc2FibGUgdGhlIERpc3RyaWJ1dG9yCisJICovCisJ Z2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfQ1RMUiwgMCk7CisJZ2ljX3YzX3dhaXRfZm9yX3J3cChz YywgRElTVCk7CisKKwkvKgorCSAqIDIuIENvbmZpZ3VyZSB0aGUgRGlzdHJpYnV0b3IKKwkgKi8K KwkvKiBTZXQgYWxsIGdsb2JhbCBpbnRlcnJ1cHRzIHRvIGJlIGxldmVsIHRyaWdnZXJlZCwgYWN0 aXZlIGxvdy4gKi8KKwlmb3IgKGkgPSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsg aSArPSBHSUNEX0lfUEVSX0lDRkdSbikKKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfSUNGR1Io aSksIDB4MDAwMDAwMDApOworCisJLyogU2V0IHByaW9yaXR5IHRvIGFsbCBzaGFyZWQgaW50ZXJy dXB0cyAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7CisJICAgIGkgPCBzYy0+Z2ljX25pcnFz OyBpICs9IEdJQ0RfSV9QRVJfSVBSSU9SSVRZbikgeworCQkvKiBTZXQgaGlnaGVzdCBwcmlvcml0 eSAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JUFJJT1JJVFlSKGkpLCBHSUNfUFJJT1JJ VFlfTUFYKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUgYWxsIGludGVycnVwdHMuIExlYXZlIFBQ SSBhbmQgU0dJcyBhcyB0aGV5IGFyZSBlbmFibGVkIGluCisJICogUmUtRGlzdHJpYnV0b3IgcmVn aXN0ZXJzLgorCSAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFz OyBpICs9IEdJQ0RfSV9QRVJfSVNFTkFCTEVSbikKKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0Rf SUNFTkFCTEVSKGkpLCAweEZGRkZGRkZGKTsKKworCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJ U1QpOworCisJLyoKKwkgKiAzLiBFbmFibGUgRGlzdHJpYnV0b3IKKwkgKi8KKwkvKiBFbmFibGUg RGlzdHJpYnV0b3Igd2l0aCBBUkUsIEdyb3VwIDEgKi8KKwlnaWNfZF93cml0ZShzYywgNCwgR0lD RF9DVExSLCBHSUNEX0NUTFJfQVJFX05TIHwgR0lDRF9DVExSX0cxQSB8CisJICAgIEdJQ0RfQ1RM Ul9HMSk7CisKKwkvKgorCSAqIDQuIFJvdXRlIGFsbCBpbnRlcnJ1cHRzIHRvIGJvb3QgQ1BVLgor CSAqLworCWFmZiA9IENQVV9BRkZJTklUWShQQ1BVX0dFVChjcHVpZCkpOworCWZvciAoaSA9IEdJ Q19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFzOyBpKyspCisJCWdpY19kX3dyaXRlKHNjLCA0 LCBHSUNEX0lST1VURVIoaSksIGFmZik7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBSZS1EaXN0 cmlidXRvciAqLworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF9maW5kKHN0cnVjdCBnaWNfdjNf c29mdGMgKnNjKQoreworCXN0cnVjdCByZXNvdXJjZSByX3JlczsKKwlidXNfc3BhY2VfaGFuZGxl X3Qgcl9ic2g7CisJdWludDY0X3QgYWZmOworCXVpbnQ2NF90IHR5cGVyOworCXVpbnQzMl90IHBp ZHIyOworCXVfaW50IGNwdWlkOworCXNpemVfdCBpOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVp ZCk7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoaXMgQ1BVJ3MgUmUtRGlz dHJpYnV0b3IgcmVnaXN0ZXJzICovCisJc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdID0KKwkg ICAgbWFsbG9jKHNpemVvZigqc2MtPmdpY19yZWRpc3RzLnBjcHVbMF0pLCBNX0dJQ19WMywgTV9X QUlUT0spOworCisJYWZmID0gQ1BVX0FGRklOSVRZKGNwdWlkKTsKKwkvKiBBZmZpbml0eSBpbiBm b3JtYXQgZm9yIGNvbXBhcmlzb24gd2l0aCB0eXBlciAqLworCWFmZiA9IChDUFVfQUZGMyhhZmYp IDw8IDI0KSB8IChDUFVfQUZGMihhZmYpIDw8IDE2KSB8CisJICAgIChDUFVfQUZGMShhZmYpIDw8 IDgpIHwgQ1BVX0FGRjAoYWZmKTsKKworCWlmIChib290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsCisJCSAgICAiU3RhcnQgc2VhcmNoaW5nIGZvciBSZS1EaXN0cmlidXRvclxu Iik7CisJfQorCS8qIEl0ZXJhdGUgdGhyb3VnaCBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJ Zm9yIChpID0gMDsgaSA8IHNjLT5naWNfcmVkaXN0cy5ucmVnaW9uczsgaSsrKSB7CisJCS8qIFRh a2UgYSBjb3B5IG9mIHRoZSByZWdpb24ncyByZXNvdXJjZSAqLworCQlyX3JlcyA9ICpzYy0+Z2lj X3JlZGlzdHMucmVnaW9uc1tpXTsKKwkJcl9ic2ggPSBybWFuX2dldF9idXNoYW5kbGUoJnJfcmVz KTsKKworCQlwaWRyMiA9IGJ1c19yZWFkXzQoJnJfcmVzLCBHSUNSX1BJRFIyKTsKKwkJc3dpdGNo IChwaWRyMiAmIEdJQ1JfUElEUjJfQVJDSF9NQVNLKSB7CisJCWNhc2UgR0lDUl9QSURSMl9BUkNI X0dJQ3YzOiAvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjQ6 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAg ICAiTm8gUmUtRGlzdHJpYnV0b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJCQlmcmVl KHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSwgTV9HSUNfVjMpOworCQkJcmV0dXJuIChFTk9E RVYpOworCQl9CisKKwkJZG8geworCQkJdHlwZXIgPSBidXNfcmVhZF84KCZyX3JlcywgR0lDUl9U WVBFUik7CisJCQlpZiAoKHR5cGVyID4+IEdJQ1JfVFlQRVJfQUZGX1NISUZUKSA9PSBhZmYpIHsK KwkJCQlLQVNTRVJUKHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSAhPSBOVUxMLAorCQkJCSAg ICAoIkludmFsaWQgcG9pbnRlciB0byBwZXItQ1BVIHJlZGlzdHJpYnV0b3IiKSk7CisJCQkJLyog Q29weSByZXMgY29udGVudHMgdG8gaXRzIGZpbmFsIGRlc3RpbmF0aW9uICovCisJCQkJKnNjLT5n aWNfcmVkaXN0cy5wY3B1W2NwdWlkXSA9IHJfcmVzOworCQkJCWlmIChib290dmVyYm9zZSkgewor CQkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkJCSAgICAiQ1BVJXUgUmUtRGlzdHJpYnV0 b3IgaGFzIGJlZW4gZm91bmRcbiIsCisJCQkJCSAgICBjcHVpZCk7CisJCQkJfQorCQkJCXJldHVy biAoMCk7CisJCQl9CisKKwkJCXJfYnNoICs9IChHSUNSX1JEX0JBU0VfU0laRSArIEdJQ1JfU0dJ X0JBU0VfU0laRSk7CisJCQlpZiAoKHR5cGVyICYgR0lDUl9UWVBFUl9WTFBJUykgIT0gMCkgewor CQkJCXJfYnNoICs9CisJCQkJICAgIChHSUNSX1ZMUElfQkFTRV9TSVpFICsgR0lDUl9SRVNFUlZF RF9TSVpFKTsKKwkJCX0KKworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKCZyX3Jlcywgcl9ic2gpOwor CQl9IHdoaWxlICgodHlwZXIgJiBHSUNSX1RZUEVSX0xBU1QpID09IDApOworCX0KKworCWZyZWUo c2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdLCBNX0dJQ19WMyk7CisJZGV2aWNlX3ByaW50Zihz Yy0+ZGV2LCAiTm8gUmUtRGlzdHJpYnV0b3IgZm91bmQgZm9yIENQVSV1XG4iLCBjcHVpZCk7CisJ cmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY192M19yZWRpc3Rfd2FrZShzdHJ1 Y3QgZ2ljX3YzX3NvZnRjICpzYykKK3sKKwl1aW50MzJfdCB3YWtlcjsKKwlzaXplX3QgdXNfbGVm dCA9IDEwMDAwMDA7CisKKwl3YWtlciA9IGdpY19yX3JlYWQoc2MsIDQsIEdJQ1JfV0FLRVIpOwor CS8qIFdha2UgdXAgUmUtRGlzdHJpYnV0b3IgZm9yIHRoaXMgQ1BVICovCisJd2FrZXIgJj0gfkdJ Q1JfV0FLRVJfUFM7CisJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfV0FLRVIsIHdha2VyKTsKKwkv KgorCSAqIFdoZW4gY2xlYXJpbmcgUHJvY2Vzc29yU2xlZXAgYml0IGl0IGlzIHJlcXVpcmVkIHRv IHdhaXQgZm9yCisJICogQ2hpbGRyZW5Bc2xlZXAgdG8gYmVjb21lIHplcm8gZm9sbG93aW5nIHRo ZSBwcm9jZXNzb3IgcG93ZXItb24uCisJICovCisJd2hpbGUgKChnaWNfcl9yZWFkKHNjLCA0LCBH SUNSX1dBS0VSKSAmIEdJQ1JfV0FLRVJfQ0EpICE9IDApIHsKKwkJREVMQVkoMSk7CisJCWlmICh1 c19sZWZ0LS0gPT0gMCkgeworCQkJcGFuaWMoIkNvdWxkIG5vdCB3YWtlIFJlLURpc3RyaWJ1dG9y IGZvciBDUFUldSIsCisJCQkgICAgUENQVV9HRVQoY3B1aWQpKTsKKwkJfQorCX0KKworCWlmIChi b290dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJDUFUldSBSZS1EaXN0cmli dXRvciB3b2tlIHVwXG4iLAorCQkgICAgUENQVV9HRVQoY3B1aWQpKTsKKwl9CisKKwlyZXR1cm4g KDApOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19z b2Z0YyAqc2MpCit7CisJaW50IGVycjsKKwlzaXplX3QgaTsKKworCWVyciA9IGdpY192M19yZWRp c3RfZmluZChzYyk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gKGVycik7CisKKwllcnIgPSBn aWNfdjNfcmVkaXN0X3dha2Uoc2MpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIChlcnIpOwor CisJLyogRGlzYWJsZSBTUElzICovCisJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfU0dJX0JBU0Vf U0laRSArIEdJQ1JfSUNFTkFCTEVSMCwKKwkgICAgR0lDUl9JX0VOQUJMRVJfUFBJX01BU0spOwor CS8qIEVuYWJsZSBTR0lzICovCisJZ2ljX3Jfd3JpdGUoc2MsIDQsIEdJQ1JfU0dJX0JBU0VfU0la RSArIEdJQ1JfSVNFTkFCTEVSMCwKKwkgICAgR0lDUl9JX0VOQUJMRVJfU0dJX01BU0spOworCisJ LyogU2V0IHByaW9yaXR5IGZvciBTR0lzIGFuZCBQUElzICovCisJZm9yIChpID0gMDsgaSA8PSBH SUNfTEFTVF9QUEk7IGkgKz0gR0lDUl9JX1BFUl9JUFJJT1JJVFluKSB7CisJCWdpY19yX3dyaXRl KHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNEX0lQUklPUklUWVIoaSksCisJCSAgICBH SUNfUFJJT1JJVFlfTUFYKTsKKwl9CisKKwlnaWNfdjNfd2FpdF9mb3JfcndwKHNjLCBSRURJU1Qp OworCisJcmV0dXJuICgwKTsKK30KCg== --b1_aa86d2b102d65d0b7ec96760f1e6406e--