From owner-freebsd-arm@FreeBSD.ORG Thu May 7 12:06:46 2015 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 5F59F8BB for ; Thu, 7 May 2015 12:06:46 +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 1BDFB1BED for ; Thu, 7 May 2015 12:06:46 +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 t47C6kqd070820 for ; Thu, 7 May 2015 12:06:46 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 t47C6kBi070819; Thu, 7 May 2015 12:06:46 GMT (envelope-from daemon-user) Date: Thu, 7 May 2015 12:06:46 +0000 To: freebsd-arm@freebsd.org From: "zbb (Zbigniew Bodek)" Subject: [Differential] [Updated, 1, 024 lines] D2377: Introduce ARM GICv3 support Message-ID: <4ccc0ea76f1d3e1812e734a07ba732c5@localhost.localdomain> 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: MjA1ZGZkZWI5MTE4ZDk2Nzk0YzAyZGRiMWRiIFVLVVY= 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_4ccc0ea76f1d3e1812e734a07ba732c5" 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: Thu, 07 May 2015 12:06:46 -0000 --b1_4ccc0ea76f1d3e1812e734a07ba732c5 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb updated this revision to Diff 5256. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2377?vs=5255&id=5256 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, emaste, ian, imp, andrew, brueffer, joel, wblock Cc: kostikbel, emaste, andrew, imp, freebsd-arm --b1_4ccc0ea76f1d3e1812e734a07ba732c5 Content-Type: text/x-patch; charset=utf-8; name="D2377.5256.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2377.5256.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTE4LDYgKzE4LDcgQEAKIGFybTY0L2FybTY0L2VsZl9tYWNoZGVwLmMJc3RhbmRhcmQKIGFybTY0 L2FybTY0L2V4Y2VwdGlvbi5TCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQvZ2ljLmMJCXN0YW5kYXJk Cithcm02NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1LmMJ CXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQvYXJt NjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMvYXJt NjQvaW5jbHVkZS9hcm1yZWcuaCBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCi0tLSBhL3N5 cy9hcm02NC9pbmNsdWRlL2FybXJlZy5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL2FybXJlZy5o CkBAIC05Niw2ICs5NiwyMiBAQAogI2RlZmluZQkgRVhDUF9XQVRDSFBUX0VMMQkweDM1CS8qIFdh dGNocG9pbnQsIGZyb20gc2FtZSBFTCAqLwogI2RlZmluZQkgRVhDUF9CUksJCTB4M2MJLyogQnJl YWtwb2ludCAqLwogCisvKiBJQ0NfU1JFX0VMMiAqLworI2RlZmluZQlJQ0NfU1JFX0VMMl9FTgkJ KDFVIDw8IDMpCisKKy8qIElDQ19TUkVfRUwxICovCisjZGVmaW5lCUlDQ19TUkVfRUwxX1NSRQkJ KDFVIDw8IDApCisKKy8qIElDQ19DVExSX0VMMSAqLworI2RlZmluZQlJQ0NfQ1RMUl9FTDFfRU9J CSgxVSA8PCAxKQorCisvKiBJQ0NfSUdSUEVOMF9FTDEgKi8KKyNkZWZpbmUJSUNDX0lHUlBFTjBf RUwxX0VOCSgxVSA8PCAwKQorCisvKiBJQ0NfSUFSMV9FTDEgKi8KKyNkZWZpbmUJSUNDX0lBUjFf RUwxX1NQVVIJKDB4MDNmZikKKworCiAvKiBJRF9BQTY0UEZSMF9FTDEgKi8KICNkZWZpbmUJSURf QUE2NFBGUjBfRUwwX01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZQlJRF9BQTY0UEZSMF9FTDFfTUFT SwkoMHhmIDw8IDQpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvbG9jb3JlLlMgYi9zeXMv YXJtNjQvYXJtNjQvbG9jb3JlLlMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2xvY29yZS5TCisrKyBi L3N5cy9hcm02NC9hcm02NC9sb2NvcmUuUwpAQCAtMTg3LDYgKzE4NywxOCBAQAogCW1vdgl4Miwg IyhQU1JfRiB8IFBTUl9JIHwgUFNSX0EgfCBQU1JfRCB8IFBTUl9NX0VMMWgpCiAJbXNyCXNwc3Jf ZWwyLCB4MgogCisJLyogQ29uZmlndXJlIEdJQ3YzIENQVSBpbnRlcmZhY2UgKi8KKwltcnMJeDIs IGlkX2FhNjRwZnIwX2VsMQorCXViZngJeDIsIHgyLCAjMjQsICM0CQkvKiBHSUMgZmllbGQgKi8K KwljbXAJeDIsICMweDEJCS8qIDAwMDEgLSBTUiBDUFUgSUYgc3VwcG9ydGVkICovCisJYi5uZQky ZgorCisJbXJzCXgyLCBpY2Nfc3JlX2VsMgorCW9ycgl4MiwgeDIsICNJQ0NfU1JFX0VMMl9FTgkv KiBFbmFibGUgYWNjZXNzIGZyb20gaW5zZWN1cmUgRUwxICovCisJbXNyCWljY19zcmVfZWwyLCB4 MgorCWlzYgorMjoKKwogCS8qIFNldCB0aGUgYWRkcmVzcyB0byByZXR1cm4gdG8gb3VyIHJldHVy biBhZGRyZXNzICovCiAJbXNyCWVscl9lbDIsIHgzMAogCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQv YXJtNjQvZ2ljX3YzX3Zhci5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNf dmFyLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBG cmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz b2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNo aXAgb2YgdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19WQVJfSF8K KyNkZWZpbmUgX0dJQ19WM19WQVJfSF8KKworI2RlZmluZQlHSUNfVjNfREVWU1RSCSJBUk0gR2Vu ZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciB2My4wIgorCitzdHJ1Y3QgZ2ljX3JlZGlzdHMgewor CS8qCisJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9uIGRlc2NyaXB0aW9uLgorCSAqIFdlIHdpbGwg aGF2ZSBmZXcgb2YgdGhvc2UgZGVwZW5kaW5nCisJICogb24gdGhlICNyZWRpc3RyaWJ1dG9yLXJl Z2lvbnMgcHJvcGVydHkgaW4gRkRULgorCSAqLworCXN0cnVjdCByZXNvdXJjZSAqKglyZWdpb25z OworCS8qIE51bWJlciBvZiBSZS1EaXN0cmlidXRvciByZWdpb25zICovCisJdV9pbnQJCQlucmVn aW9uczsKKwkvKiBQZXItQ1BVIFJlLURpc3RyaWJ1dG9yIGhhbmRsZXIgKi8KKwlzdHJ1Y3QgcmVz b3VyY2UgKglwY3B1W01BWENQVV07Cit9OworCitzdHJ1Y3QgZ2ljX3YzX3NvZnRjIHsKKwlkZXZp Y2VfdAkJZGV2OworCXN0cnVjdCByZXNvdXJjZSAqKglnaWNfcmVzOworCXN0cnVjdCBtdHgJCWdp Y19tdHg7CisJLyogRGlzdHJpYnV0b3IgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKglnaWNfZGlzdDsK KwkvKiBSZS1EaXN0cmlidXRvcnMgKi8KKwlzdHJ1Y3QgZ2ljX3JlZGlzdHMJZ2ljX3JlZGlzdHM7 CisKKwl1X2ludAkJCWdpY19uaXJxczsKKwl1X2ludAkJCWdpY19pZGJpdHM7Cit9OworCitleHRl cm4gZGV2Y2xhc3NfdCBnaWNfdjNfZGV2Y2xhc3M7CisKK01BTExPQ19ERUNMQVJFKE1fR0lDX1Yz KTsKKworLyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworaW50IGdpY192M19hdHRhY2goZGV2 aWNlX3QgZGV2KTsKK2ludCBnaWNfdjNfZGV0YWNoKGRldmljZV90IGRldik7CisKK3ZvaWQgZ2lj X3YzX2Rpc3BhdGNoKGRldmljZV90LCBzdHJ1Y3QgdHJhcGZyYW1lICopOwordm9pZCBnaWNfdjNf ZW9pKGRldmljZV90LCB1X2ludCk7Cit2b2lkIGdpY192M19tYXNrX2lycShkZXZpY2VfdCwgdV9p bnQpOwordm9pZCBnaWNfdjNfdW5tYXNrX2lycShkZXZpY2VfdCwgdV9pbnQpOworCisvKgorICog R0lDIERpc3RyaWJ1dG9yIGFjY2Vzc29ycy4KKyAqIE5vdGljZSB0aGF0IG9ubHkgR0lDIHNvZmMg Y2FuIGJlIHBhc3NlZC4KKyAqLworI2RlZmluZQlnaWNfZF9yZWFkKHNjLCBsZW4sIHJlZykJCVwK Kyh7CQkJCQkJXAorCWJ1c19yZWFkXyMjbGVuKHNjLT5naWNfZGlzdCwgcmVnKTsJXAorfSkKKwor I2RlZmluZQlnaWNfZF93cml0ZShzYywgbGVuLCByZWcsIHZhbCkJCVwKKyh7CQkJCQkJXAorCWJ1 c193cml0ZV8jI2xlbihzYy0+Z2ljX2Rpc3QsIHJlZywgdmFsKTtcCit9KQorCisvKiBHSUMgUmUt RGlzdHJpYnV0b3IgYWNjZXNzb3JzIChwZXItQ1BVKSAqLworI2RlZmluZQlnaWNfcl9yZWFkKHNj LCBsZW4sIHJlZykJCVwKKyh7CQkJCQkJXAorCXVfaW50IGNwdSA9IFBDUFVfR0VUKGNwdWlkKTsJ CVwKKwkJCQkJCVwKKwlidXNfcmVhZF8jI2xlbigJCQkJXAorCSAgICBzYy0+Z2ljX3JlZGlzdHMu cGNwdVtjcHVdLAkJXAorCSAgICByZWcpOwkJCQlcCit9KQorCisjZGVmaW5lCWdpY19yX3dyaXRl KHNjLCBsZW4sIHJlZywgdmFsKQkJXAorKHsJCQkJCQlcCisJdV9pbnQgY3B1ID0gUENQVV9HRVQo Y3B1aWQpOwkJXAorCQkJCQkJXAorCWJ1c193cml0ZV8jI2xlbigJCQlcCisJICAgIHNjLT5naWNf cmVkaXN0cy5wY3B1W2NwdV0sCQlcCisJICAgIHJlZywgdmFsKTsJCQkJXAorfSkKKworI2VuZGlm IC8qIF9HSUNfVjNfVkFSX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz X3JlZy5oIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKQEAgLTAs MCArMSwxNjggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5k YXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMg ZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZy ZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dJQ19WM19SRUdfSF8KKyNkZWZpbmUgX0dJ Q19WM19SRUdfSF8KKworLyoKKyAqIFByaW9yaXR5IE1BWC9NSU4gdmFsdWVzCisgKi8KKyNkZWZp bmUJR0lDX1BSSU9SSVRZX01BWAkweDAwVUwKKy8qIFVwcGVyIHZhbHVlIGlzIGRldGVybWluZWQg YnkgTFBJIG1heCBwcmlvcml0eSAqLworI2RlZmluZQlHSUNfUFJJT1JJVFlfTUlOCTB4RkNVTAor CisvKiBOdW1iZXJzIGZvciBzb2Z0d2FyZSBnZW5lcmF0ZWQgaW50ZXJydXB0cyAqLworI2RlZmlu ZQlHSUNfRklSU1RfU0dJCQkoMCkKKyNkZWZpbmUJR0lDX0xBU1RfU0dJCQkoMTUpCisvKiBOdW1i ZXJzIGZvciBwcml2YXRlIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklS U1RfUFBJCQkoMTYpCisjZGVmaW5lCUdJQ19MQVNUX1BQSQkJKDMxKQorLyogTnVtYmVycyBmb3Ig c3BhcmVkIHBlcmlwaGVyYWwgaW50ZXJydXB0cyAqLworI2RlZmluZQlHSUNfRklSU1RfU1BJCQko MzIpCisjZGVmaW5lCUdJQ19MQVNUX1NQSQkJKDEwMTkpCisvKiBOdW1iZXJzIGZvciBsb2NhbCBw ZXJpcGhlcmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUJR0lDX0ZJUlNUX0xQSQkJKDgxOTIpCisK Ky8qCisgKiBSZWdpc3RlcnMgKHYyL3YzKQorICovCisjZGVmaW5lCUdJQ0RfQ1RMUgkJMHgwMDAw CisjZGVmaW5lCUdJQ0RfQ1RMUl9HMQkJKDEgPDwgMCkKKyNkZWZpbmUJR0lDRF9DVExSX0cxQQkJ KDEgPDwgMSkKKyNkZWZpbmUJR0lDRF9DVExSX0FSRV9OUwkoMSA8PCA0KQorI2RlZmluZQlHSUNE X0NUTFJfUldQCQkoMSA8PCAzMSkKKworI2RlZmluZQlHSUNEX1RZUEVSCQkoMHgwMDA0KQorI2Rl ZmluZQkJR0lDRF9UWVBFUl9JREJJVFMoeCkJKCgoKHgpID4+IDE5KSAmIDB4MUYpICsgMSkKKwor I2RlZmluZQlHSUNEX0lTRU5BQkxFUihuKQkoMHgwMTAwICsgKCgobikgPj4gNSkgKiA0KSkKKyNk ZWZpbmUJR0lDRF9JQ0VOQUJMRVIobikJKDB4MDE4MCArICgoKG4pID4+IDUpICogNCkpCisjZGVm aW5lCUdJQ0RfSVBSSU9SSVRZUihuKQkoMHgwNDAwICsgKCgobikgPj4gMikgKiA0KSkKKyNkZWZp bmUJR0lDRF9JX01BU0sobikJCSgxIDw8ICgobikgJSAzMikpCisKKyNkZWZpbmUJR0lDRF9JQ0ZH UihuKQkJKDB4MEMwMCArICgobikgKiA0KSkKKy8qIEZpcnN0IGJpdCBpcyBhIHBvbGFyaXR5IGJp dCAoMCAtIGxvdywgMSAtIGhpZ2gpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1BPTF9MT1cJKDAg PDwgMCkKKyNkZWZpbmUJCUdJQ0RfSUNGR1JfUE9MX0hJR0gJKDEgPDwgMCkKKyNkZWZpbmUJCUdJ Q0RfSUNGR1JfUE9MX01BU0sJMHgxCisvKiBTZWNvbmQgYml0IGlzIGEgdHJpZ2dlciBiaXQgKDAg LSBsZXZlbCwgMSAtIGVkZ2UpICovCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfTFZMCSgwIDw8 IDEpCisjZGVmaW5lCQlHSUNEX0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQorI2RlZmluZQkJR0lD RF9JQ0ZHUl9UUklHX01BU0sJMHgyCisKKy8qCisgKiBSZWdpc3RlcnMgKHYzKQorICovCisjZGVm aW5lCUdJQ0RfSVJPVVRFUihuKQkJKDB4NjAwMCArICgobikgKiA4KSkKKyNkZWZpbmUJR0lDRF9Q SURSMgkJKDB4RkZFOCkKKworI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfTUFTSwkoMHhGMCkKKyNk ZWZpbmUJR0lDUl9QSURSMl9BUkNIX0dJQ3YzCSgweDMwKQorI2RlZmluZQlHSUNSX1BJRFIyX0FS Q0hfR0lDdjQJKDB4NDApCisKKy8qIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5l CUdJQ1JfUElEUjIJCUdJQ0RfUElEUjIKKworI2RlZmluZQlHSUNSX1RZUEVSCQkoMHgwMDA4KQor I2RlZmluZQlHSUNSX1RZUEVSX1ZMUElTCSgxIDw8IDEpCisjZGVmaW5lCUdJQ1JfVFlQRVJfTEFT VAkJKDEgPDwgNCkKKworI2RlZmluZQlHSUNSX1dBS0VSCQkoMHgwMDE0KQorI2RlZmluZQlHSUNS X1dBS0VSX1BTCQkoMSA8PCAxKSAvKiBQcm9jZXNzb3Igc2xlZXAgKi8KKyNkZWZpbmUJR0lDUl9X QUtFUl9DQQkJKDEgPDwgMikgLyogQ2hpbGRyZW4gYXNsZWVwICovCisKKy8qIFJlLWRpc3RyaWJ1 dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLworI2RlZmluZQlHSUNSX1JEX0JBU0Vf U0laRQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUdJQ1JfU0dJX0JBU0VfU0laRQlQQUdFX1NJWkVf NjRLCisjZGVmaW5lCUdJQ1JfVkxQSV9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SworI2RlZmluZQlH SUNSX1JFU0VSVkVEX1NJWkUJUEFHRV9TSVpFXzY0SworCisjZGVmaW5lCUdJQ1JfSVNFTkFCTEVS MAkJCQkoMHgwMTAwKQorI2RlZmluZQlHSUNSX0lDRU5BQkxFUjAJCQkJKDB4MDE4MCkKKyNkZWZp bmUJCUdJQ1JfSV9FTkFCTEVSX1NHSV9NQVNLCQkoMHgwMDAwRkZGRikKKyNkZWZpbmUJCUdJQ1Jf SV9FTkFCTEVSX1BQSV9NQVNLCQkoMHhGRkZGMDAwMCkKKworLyoKKyAqIENQVSBpbnRlcmZhY2UK KyAqLworCisvKgorICogUmVnaXN0ZXJzIGxpc3QgKElDQ194eXpfRUwxKToKKyAqCisgKiBQTVIg ICAgIC0gUHJpb3JpdHkgTWFzayBSZWdpc3RlcgorICoJCSogaW50ZXJydXB0cyBvZiBwcmlvcml0 eSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQKKyAqCQkgIGluIHRoaXMgbWFzayB3aWxsIGJlIHNpZ25h bGxlZCB0byB0aGUgQ1BVLgorICoJCSAgKDB4ZmYgLSBsb3dlc3QgcG9zc2libGUgcHJpby4sIDB4 MDAgLSBoaWdoZXN0IHByaW8uKQorICoKKyAqIENUTFIgICAgLSBDb250cm9sIFJlZ2lzdGVyCisg KgkJKiBjb250cm9scyBiZWhhdmlvciBvZiB0aGUgQ1BVIGludGVyZmFjZSBhbmQgZGlzcGxheXMK KyAqCQkgIGltcGxlbWVudGVkIGZlYXR1cmVzLgorICoKKyAqIElHUlBFTjEgLSBJbnRlcnJ1cHQg R3JvdXAgMSBFbmFibGUgUmVnaXN0ZXIKKyAqCisgKiBJQVIxICAgIC0gSW50ZXJydXB0IEFja25v d2xlZGdlIFJlZ2lzdGVyIEdyb3VwIDEKKyAqCQkqIGNvbnRhaW5zIG51bWJlciBvZiB0aGUgaGln aGVzdCBwcmlvcml0eSBwZW5kaW5nCisgKgkJICBpbnRlcnJ1cHQgZnJvbSB0aGUgR3JvdXAgMS4K KyAqCisgKiBFT0lSMSAgIC0gRW5kIG9mIEludGVycnVwdCBSZWdpc3RlciBHcm91cCAxCisgKgkJ KiBXcml0ZXMgaW5mb3JtIENQVSBpbnRlcmZhY2UgYWJvdXQgY29tcGxldGVkIEdyb3VwIDEKKyAq CQkgIGludGVycnVwdHMgcHJvY2Vzc2luZy4KKyAqLworCisjZGVmaW5lCWdpY19pY2Nfd3JpdGUo cmVnLCB2YWwpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJV1JJVEVfU1BFQ0lBTFJFRyhJQ0NfICMj cmVnICMjX0VMMSwgdmFsKTsJCVwKKwlpc2IoKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Rl ZmluZQlnaWNfaWNjX3JlYWQocmVnKQkJCQkJXAorKHsJCQkJCQkJCVwKKwl1aW50NjRfdCB2YWw7 CQkJCQkJXAorCQkJCQkJCQlcCisJdmFsID0gUkVBRF9TUEVDSUFMUkVHKElDQ18gIyNyZWcgIyNf RUwxKTsJCVwKKwkodmFsKTsJCQkJCQkJXAorfSkKKworI2RlZmluZQlnaWNfaWNjX3NldChyZWcs IG1hc2spCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWludDY0X3QgdmFsOwkJCQkJCVwKKwl2YWwg PSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCB8PSAobWFzayk7CQkJCQkJXAorCWdpY19p Y2Nfd3JpdGUocmVnLCB2YWwpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCWdpY19pY2Nf Y2xlYXIocmVnLCBtYXNrKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJdWludDY0X3QgdmFsOwkJCQkJ CVwKKwl2YWwgPSBnaWNfaWNjX3JlYWQocmVnKTsJCQkJXAorCXZhbCAmPSB+KG1hc2spOwkJCQkJ CVwKKwlnaWNfaWNjX3dyaXRlKHJlZywgdmFsKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlm IC8qIF9HSUNfVjNfUkVHX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz X2ZkdC5jIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMKQEAgLTAs MCArMSwxNTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5k YXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMg ZGV2ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZy ZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0 bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j bHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv cm1hbi5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp bmNsdWRlIDxzeXMvY3B1c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxz eXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgorI2luY2x1ZGUg PGRldi9vZncvb3BlbmZpcm0uaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KKyNpbmNs dWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNp bmNsdWRlICJnaWNfdjNfcmVnLmgiCisjaW5jbHVkZSAiZ2ljX3YzX3Zhci5oIgorCisvKgorICog RkRUIGdsdWUuCisgKi8KK3N0cnVjdCBnaWNfdjNfb2Z3X2RldmluZm8geworCXN0cnVjdCBvZndf YnVzX2RldmluZm8JZGlfZGluZm87CisJc3RydWN0IHJlc291cmNlX2xpc3QJZGlfcmw7Cit9Owor CitzdGF0aWMgaW50IGdpY192M19mZHRfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGludCBnaWNf djNfZmR0X2F0dGFjaChkZXZpY2VfdCk7CitzdGF0aWMgaW50IGdpY192M19mZHRfZGV0YWNoKGRl dmljZV90KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZndfYnVzX2RldmluZm8gKgorZ2ljX3Yz X29md19nZXRfZGV2aW5mbyhkZXZpY2VfdCBfX3VudXNlZCwgZGV2aWNlX3QpOworCitzdGF0aWMg ZGV2aWNlX21ldGhvZF90IGdpY192M19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFj ZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlnaWNfdjNfZmR0X3Byb2JlKSwKKwlERVZN RVRIT0QoZGV2aWNlX2F0dGFjaCwJZ2ljX3YzX2ZkdF9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZp Y2VfZGV0YWNoLAlnaWNfdjNfZmR0X2RldGFjaCksCisKKwkvKiBQSUMgaW50ZXJmYWNlICovCisJ REVWTUVUSE9EKHBpY19kaXNwYXRjaCwJCWdpY192M19kaXNwYXRjaCksCisJREVWTUVUSE9EKHBp Y19lb2ksCQlnaWNfdjNfZW9pKSwKKwlERVZNRVRIT0QocGljX21hc2ssCQlnaWNfdjNfbWFza19p cnEpLAorCURFVk1FVEhPRChwaWNfdW5tYXNrLAkJZ2ljX3YzX3VubWFza19pcnEpLAorCisJLyog RW5kICovCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IGdpY192M19kcml2 ZXIgPSB7CisJImdpYyIsCisJZ2ljX3YzX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBnaWNfdjNf c29mdGMpLAorfTsKKworRUFSTFlfRFJJVkVSX01PRFVMRShnaWNfdjMsIHNpbXBsZWJ1cywgZ2lj X3YzX2RyaXZlciwgZ2ljX3YzX2RldmNsYXNzLCAwLCAwLAorICAgIEJVU19QQVNTX0lOVEVSUlVQ VCArIEJVU19QQVNTX09SREVSX01JRERMRSk7CitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192Mywg b2Z3YnVzLCBnaWNfdjNfZHJpdmVyLCBnaWNfdjNfZGV2Y2xhc3MsIDAsIDAsCisgICAgQlVTX1BB U1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworLyoKKyAqIERldmljZSBp bnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19mZHRfcHJvYmUoZGV2aWNlX3QgZGV2 KQoreworCisJaWYgKCFvZndfYnVzX3N0YXR1c19va2F5KGRldikpCisJCXJldHVybiAoRU5YSU8p OworCisJaWYgKCFvZndfYnVzX2lzX2NvbXBhdGlibGUoZGV2LCAiYXJtLGdpYy12MyIpKQorCQly ZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYsIEdJQ19WM19ERVZTVFIpOwor CXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfZmR0 X2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19zb2Z0YyAqc2M7CisJcGNl bGxfdCByZWRpc3RfcmVnaW9uczsKKwlpbnQgZXJyOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisJc2MtPmRldiA9IGRldjsKKworCS8qCisJICogUmVjb3ZlciBudW1iZXIgb2YgdGhl IFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMuCisJICovCisJaWYgKE9GX2dldGVuY3Byb3Aob2Z3X2J1 c19nZXRfbm9kZShkZXYpLCAiI3JlZGlzdHJpYnV0b3ItcmVnaW9ucyIsCisJICAgICZyZWRpc3Rf cmVnaW9ucywgc2l6ZW9mKHJlZGlzdF9yZWdpb25zKSkgPD0gMCkKKwkJc2MtPmdpY19yZWRpc3Rz Lm5yZWdpb25zID0gMTsKKwllbHNlCisJCXNjLT5naWNfcmVkaXN0cy5ucmVnaW9ucyA9IHJlZGlz dF9yZWdpb25zOworCisJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOworCWlmIChlcnIpCisJCWdv dG8gZXJyb3I7CisKKwlyZXR1cm4gKGVycik7CisKK2Vycm9yOgorCWlmIChib290dmVyYm9zZSkg eworCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJICAgICJGYWlsZWQgdG8gYXR0YWNoLiBFcnJvciAl ZFxuIiwgZXJyKTsKKwl9CisJLyogRmFpbHVyZSBzbyBmcmVlIHJlc291cmNlcyAqLworCWdpY192 M19mZHRfZGV0YWNoKGRldik7CisKKwlyZXR1cm4gKGVycik7Cit9CisKK3N0YXRpYyBpbnQKK2dp Y192M19mZHRfZGV0YWNoKGRldmljZV90IGRldikKK3sKKworCXJldHVybiAoZ2ljX3YzX2RldGFj aChkZXYpKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYyBiL3N5cy9h cm02NC9hcm02NC9naWNfdjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr KyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYwpAQCAtMCwwICsxLDU2NCBAQAorLyotCisgKiBD b3B5cmlnaHQgKGMpIDIwMTUgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgU2VtaWhhbGYg dW5kZXIKKyAqIHRoZSBzcG9uc29yc2hpcCBvZiB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVk ZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1 cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5j bHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxz eXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4K KyNpbmNsdWRlIDxzeXMvY3B1c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRl IDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5o PgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4K KworI2luY2x1ZGUgInBpY19pZi5oIgorCisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1 ZGUgImdpY192M192YXIuaCIKKworLyoKKyAqIERyaXZlci1zcGVjaWZpYyBkZWZpbml0aW9ucy4K KyAqLworTUFMTE9DX0RFRklORShNX0dJQ19WMywgIkdJQ3YzIiwgR0lDX1YzX0RFVlNUUik7CisK K2RldmNsYXNzX3QgZ2ljX3YzX2RldmNsYXNzOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBh bmQgZGVmaW5pdGlvbnMuCisgKi8KKy8qIERlc3RpbmF0aW9uIHJlZ2lzdGVycywgZWl0aGVyIERp c3RyaWJ1dG9yIG9yIFJlLURpc3RyaWJ1dG9yICovCitlbnVtIGdpY192M194ZGlzdCB7CisJRElT VCA9IDAsCisJUkVESVNULAorfTsKKworLyogSGVscGVyIHJvdXRpbmVzIHN0YXJ0aW5nIHdpdGgg Z2ljX3YzXyAqLworc3RhdGljIGludCBnaWNfdjNfZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNfc29m dGMgKik7CitzdGF0aWMgaW50IGdpY192M19yZWRpc3RfZmluZChzdHJ1Y3QgZ2ljX3YzX3NvZnRj ICopOworc3RhdGljIGludCBnaWNfdjNfcmVkaXN0X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAq KTsKK3N0YXRpYyBpbnQgZ2ljX3YzX2NwdV9pbml0KHN0cnVjdCBnaWNfdjNfc29mdGMgKik7Citz dGF0aWMgdm9pZCBnaWNfdjNfd2FpdF9mb3JfcndwKHN0cnVjdCBnaWNfdjNfc29mdGMgKiwgZW51 bSBnaWNfdjNfeGRpc3QpOworCisvKiBBIHNlcXVlbmNlIG9mIGluaXQgZnVuY3Rpb25zIGZvciBw cmltYXJ5IChib290KSBDUFUgKi8KK3R5cGVkZWYgaW50ICgqZ2ljX3YzX2luaXRzZXFfdCkgKHN0 cnVjdCBnaWNfdjNfc29mdGMgKik7CisvKiBQcmltYXJ5IENQVSBpbml0aWFsaXphdGlvbiBzZXF1 ZW5jZSAqLworc3RhdGljIGdpY192M19pbml0c2VxX3QgZ2ljX3YzX3ByaW1hcnlfaW5pdFtdID0g eworCWdpY192M19kaXN0X2luaXQsCisJZ2ljX3YzX3JlZGlzdF9pbml0LAorCWdpY192M19jcHVf aW5pdCwKKwlOVUxMCit9OworCisvKgorICogRGV2aWNlIGludGVyZmFjZS4KKyAqLworaW50Citn aWNfdjNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsK KwlnaWNfdjNfaW5pdHNlcV90ICppbml0X2Z1bmM7CisJdWludDMyX3QgdHlwZXI7CisJaW50IHJp ZDsKKwlpbnQgZXJyOworCXNpemVfdCBpOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 CisJc2MtPmRldiA9IGRldjsKKwllcnIgPSAwOworCisJLyogSW5pdGlhbGl6ZSBtdXRleCAqLwor CW10eF9pbml0KCZzYy0+Z2ljX210eCwgIkdJQ3YzIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisK KwkvKgorCSAqIEFsbG9jYXRlIGFycmF5IG9mIHN0cnVjdCByZXNvdXJjZS4KKwkgKiBPbmUgZW50 cnkgZm9yIERpc3RyaWJ1dG9yIGFuZCBhbGwgcmVtYWluaW5nIGZvciBSZS1EaXN0cmlidXRvci4K KwkgKi8KKwlzYy0+Z2ljX3JlcyA9IG1hbGxvYygKKwkgICAgc2l6ZW9mKHNjLT5naWNfcmVzKSAq IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAxKSwKKwkgICAgTV9HSUNfVjMsIE1fV0FJVE9L KTsKKworCS8qIE5vdyBhbGxvY2F0ZSBjb3JyZXNwb25kaW5nIHJlc291cmNlcyAqLworCWZvciAo aSA9IDAsIHJpZCA9IDA7IGkgPCAoc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zICsgMSk7IGkrKywg cmlkKyspIHsKKwkJc2MtPmdpY19yZXNbcmlkXSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2 LCBTWVNfUkVTX01FTU9SWSwKKwkJICAgICZyaWQsIFJGX0FDVElWRSk7CisJCWlmIChzYy0+Z2lj X3Jlc1tyaWRdID09IE5VTEwpIHsKKwkJCWVyciA9IEVOWElPOworCQkJZ290byBlcnJvcjsKKwkJ fQorCX0KKworCS8qCisJICogRGlzdHJpYnV0b3IgaW50ZXJmYWNlCisJICovCisJc2MtPmdpY19k aXN0ID0gc2MtPmdpY19yZXNbMF07CisKKwkvKgorCSAqIFJlLURyaXN0cmlidXRvciBpbnRlcmZh Y2UKKwkgKi8KKwkvKiBBbGxvY2F0ZSBzcGFjZSB1bmRlciByZWdpb24gZGVzY3JpcHRpb25zICov CisJc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMgPSBtYWxsb2MoCisJICAgIHNpemVvZigqc2MtPmdp Y19yZWRpc3RzLnJlZ2lvbnMpICogc2MtPmdpY19yZWRpc3RzLm5yZWdpb25zLAorCSAgICBNX0dJ Q19WMywgTV9XQUlUT0spOworCisJLyogRmlsbC11cCBidXNfc3BhY2UgaW5mb3JtYXRpb24gZm9y IGVhY2ggcmVnaW9uLiAqLworCWZvciAoaSA9IDAsIHJpZCA9IDE7IGkgPCBzYy0+Z2ljX3JlZGlz dHMubnJlZ2lvbnM7IGkrKywgcmlkKyspCisJCXNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ldID0g c2MtPmdpY19yZXNbcmlkXTsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBTUEkg aW50ZXJydXB0cyAqLworCXR5cGVyID0gZ2ljX2RfcmVhZChzYywgNCwgR0lDRF9UWVBFUik7CisJ c2MtPmdpY19uaXJxcyA9IHR5cGVyICYgMHgxRjsKKwlzYy0+Z2ljX25pcnFzID0gKHNjLT5naWNf bmlycXMgKyAxKSAqIDMyOworCWlmIChzYy0+Z2ljX25pcnFzID4gMTAyMCkKKwkJc2MtPmdpY19u aXJxcyA9IDEwMjA7CisKKwkvKiBHZXQgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaW50ZXJydXB0 IGlkZW50aWZpZXIgYml0cyAqLworCXNjLT5naWNfaWRiaXRzID0gR0lDRF9UWVBFUl9JREJJVFMo dHlwZXIpOworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiU1BJ czogJXUsIElEczogJXVcbiIsCisJCSAgICBzYy0+Z2ljX25pcnFzLCAoMSA8PCBzYy0+Z2ljX2lk Yml0cykgLSAxKTsKKwl9CisKKwkvKiBUcmFpbiBpbml0IHNlcXVlbmNlIGZvciBib290IENQVSAq LworCWZvciAoaW5pdF9mdW5jID0gZ2ljX3YzX3ByaW1hcnlfaW5pdDsgKmluaXRfZnVuYyAhPSBO VUxMOyBpbml0X2Z1bmMrKykgeworCQllcnIgPSAoKmluaXRfZnVuYykoc2MpOworCQlpZiAoZXJy KQorCQkJZ290byBlcnJvcjsKKwl9CisJLyoKKwkgKiBGdWxsIHN1Y2Nlc3MuCisJICogTm93IHJl Z2lzdGVyIFBJQyB0byB0aGUgaW50ZXJydXB0cyBoYW5kbGluZyBsYXllci4KKwkgKi8KKwlhcm1f cmVnaXN0ZXJfcm9vdF9waWMoZGV2LCBzYy0+Z2ljX25pcnFzKTsKKworZXJyb3I6CisJcmV0dXJu IChlcnIpOworfQorCitpbnQKK2dpY192M19kZXRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVj dCBnaWNfdjNfc29mdGMgKnNjOworCXNpemVfdCBpOworCWludCByaWQ7CisKKwlzYyA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChkZXZpY2VfaXNfYXR0YWNoZWQoZGV2KSkgeworCQkv KgorCQkgKiBYWFg6IFdlIHNob3VsZCBwcm9iYWJseSBkZXJlZ2lzdGVyIFBJQworCQkgKi8KKwl9 CisJZm9yIChpID0gMCwgcmlkID0gMDsgaSA8IChzYy0+Z2ljX3JlZGlzdHMubnJlZ2lvbnMgKyAx KTsgaSsrLCByaWQrKykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9S WSwgcmlkLCBzYy0+Z2ljX3Jlc1tyaWRdKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkr KykKKwkJZnJlZShzYy0+Z2ljX3JlZGlzdHMucGNwdVtpXSwgTV9HSUNfVjMpOworCisJZnJlZShz Yy0+Z2ljX3JlcywgTV9HSUNfVjMpOworCWZyZWUoc2MtPmdpY19yZWRpc3RzLnJlZ2lvbnMsIE1f R0lDX1YzKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBQSUMgaW50ZXJmYWNlLgorICov Cit2b2lkCitnaWNfdjNfZGlzcGF0Y2goZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgdHJhcGZyYW1lICpm cmFtZSkKK3sKKwl1aW50NjRfdCBhY3RpdmVfaXJxOworCisJd2hpbGUgKDEpIHsKKwkJYWN0aXZl X2lycSA9IGdpY19pY2NfcmVhZChJQVIxKTsKKworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKGFjdGl2 ZV9pcnEgPT0gSUNDX0lBUjFfRUwxX1NQVVIpKQorCQkJYnJlYWs7CisKKwkJaWYgKF9fcHJlZGlj dF90cnVlKChhY3RpdmVfaXJxID49IEdJQ19GSVJTVF9QUEkgJiYKKwkJICAgIGFjdGl2ZV9pcnEg PD0gR0lDX0xBU1RfU1BJKSkpIHsKKwkJCWFybV9kaXNwYXRjaF9pbnRyKGFjdGl2ZV9pcnEsIGZy YW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1Rf U0dJIHx8IGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSkgeworCQkJLyoKKwkJCSAqIFRPRE86 IEltcGxlbWVudCBwcm9wZXIgU0dJL0xQSSBoYW5kbGluZy4KKwkJCSAqICAgICAgIE1hc2sgaXQg aWYgc3VjaCBpcyByZWNlaXZlZCBmb3Igc29tZSByZWFzb24uCisJCQkgKi8KKwkJCWRldmljZV9w cmludGYoZGV2LAorCQkJICAgICJSZWNlaXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgdHlwZTog JXNcbiIsCisJCQkgICAgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJID8gIkxQSSIgOiAiU0dJ Iik7CisJCQlQSUNfTUFTSyhkZXYsIGFjdGl2ZV9pcnEpOworCQl9CisJfQorfQorCit2b2lkCitn aWNfdjNfZW9pKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCisJZ2ljX2ljY193cml0ZShF T0lSMSwgKHVpbnQ2NF90KWlycSk7Cit9CisKK3ZvaWQKK2dpY192M19tYXNrX2lycShkZXZpY2Vf dCBkZXYsIHVfaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYzsKKworCXNjID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJaWYgKGlycSA+PSBHSUNfRklSU1RfUFBJICYmIGly cSA8PSBHSUNfTEFTVF9QUEkpIHsgLyogUFBJcyBpbiBjb3JyZXNwb25kaW5nIFJlLURpc3RyaWJ1 dG9yICovCisJCWdpY19yX3dyaXRlKHNjLCA0LAorCQkgICAgR0lDUl9TR0lfQkFTRV9TSVpFICsg R0lDRF9JQ0VOQUJMRVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zv cl9yd3Aoc2MsIFJFRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBp cnEgPD0gR0lDX0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jf d3JpdGUoc2MsIDQsIEdJQ0RfSUNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOworCQln aWNfdjNfd2FpdF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UKKwkJcGFuaWMoIiVzOiBVbnN1 cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18sIGlycSk7Cit9CisKK3ZvaWQKK2dpY192 M191bm1hc2tfaXJxKGRldmljZV90IGRldiwgdV9pbnQgaXJxKQoreworCXN0cnVjdCBnaWNfdjNf c29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAoaXJxID49 IEdJQ19GSVJTVF9QUEkgJiYgaXJxIDw9IEdJQ19MQVNUX1BQSSkgeyAvKiBQUElzIGluIGNvcnJl c3BvbmRpbmcgUmUtRGlzdHJpYnV0b3IgKi8KKwkJZ2ljX3Jfd3JpdGUoc2MsIDQsCisJCSAgICBH SUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEp KTsKKwkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgUkVESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+ PSBHSUNfRklSU1RfU1BJICYmIGlycSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJcyBpbiBkaXN0 cmlidXRvciAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JU0VOQUJMRVIoaXJxKSwgR0lD RF9JX01BU0soaXJxKSk7CisJCWdpY192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCX0gZWxz ZQorCQlwYW5pYygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJx KTsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lcworICovCitzdGF0aWMgdm9pZAorZ2ljX3Yz X3dhaXRfZm9yX3J3cChzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpzYywgZW51bSBnaWNfdjNfeGRpc3Qg eGRpc3QpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdV9pbnQgY3B1aWQ7CisJc2l6ZV90 IHVzX2xlZnQgPSAxMDAwMDAwOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisKKwlzd2l0 Y2ggKHhkaXN0KSB7CisJY2FzZSBESVNUOgorCQlyZXMgPSBzYy0+Z2ljX2Rpc3Q7CisJCWJyZWFr OworCWNhc2UgUkVESVNUOgorCQlyZXMgPSBzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF07CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCUtBU1NFUlQoMCwgKCIlczogQXR0ZW1wdCB0byB3YWl0IGZv ciB1bmtub3duIFJXUCIsIF9fZnVuY19fKSk7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoKGJ1 c19yZWFkXzQocmVzLCBHSUNEX0NUTFIpICYgR0lDRF9DVExSX1JXUCkgIT0gMCkgeworCQlERUxB WSgxKTsKKwkJaWYgKHVzX2xlZnQtLSA9PSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYs CisJCQkgICAgIkdJQ0QgUmVnaXN0ZXIgd3JpdGUgcGVuZGluZyBmb3IgdG9vIGxvbmciKTsKKwkJ CXJldHVybjsKKwkJfQorCX0KK30KKworLyogQ1BVIGludGVyZmFjZS4gKi8KK3N0YXRpYyBfX2lu bGluZSB2b2lkCitnaWNfdjNfY3B1X3ByaW9yaXR5KHVpbnQ2NF90IG1hc2spCit7CisKKwkvKiBT ZXQgcHJvcml0eSBtYXNrICovCisJZ2ljX2ljY193cml0ZShQTVIsIG1hc2sgJiAweEZGVUwpOwor fQorCitzdGF0aWMgaW50CitnaWNfdjNfY3B1X2VuYWJsZV9zcmUoc3RydWN0IGdpY192M19zb2Z0 YyAqc2MpCit7CisJdWludDY0X3Qgc3JlOworCXVfaW50IGNwdWlkOworCisJY3B1aWQgPSBQQ1BV X0dFVChjcHVpZCk7CisJLyoKKwkgKiBTZXQgdGhlIFNSRSBiaXQgdG8gZW5hYmxlIGFjY2VzcyB0 byBHSUMgQ1BVIGludGVyZmFjZQorCSAqIHZpYSBzeXN0ZW0gcmVnaXN0ZXJzLgorCSAqLworCXNy ZSA9IFJFQURfU1BFQ0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJc3JlIHw9IElDQ19TUkVfRUwxX1NS RTsKKwlXUklURV9TUEVDSUFMUkVHKGljY19zcmVfZWwxLCBzcmUpOworCWlzYigpOworCS8qCisJ ICogTm93IGVuc3VyZSB0aGF0IHRoZSBiaXQgaXMgc2V0LgorCSAqLworCXNyZSA9IFJFQURfU1BF Q0lBTFJFRyhpY2Nfc3JlX2VsMSk7CisJaWYgKCEoc3JlICYgSUNDX1NSRV9FTDFfU1JFKSkgewor CQkvKiBXZSBhcmUgZG9uZS4gVGhpcyB3YXMgZGlzYWJsZWQgaW4gRUwyICovCisJCWRldmljZV9w cmludGYoc2MtPmRldiwgIkVSUk9SOiBDUFUldSBjYW5ub3QgZW5hYmxlIENQVSBpbnRlcmZhY2Ug IgorCQkgICAgInZpYSBzeXN0ZW0gcmVnaXN0ZXJzXG4iLCBjcHVpZCk7CisJCXJldHVybiAoRU5Y SU8pOworCX0gZWxzZSBpZiAoYm9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2 LAorCQkgICAgIkNQVSV1IGVuYWJsZWQgQ1BVIGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVy c1xuIiwKKwkJICAgIGNwdWlkKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50 CitnaWNfdjNfY3B1X2luaXQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJaW50IGVycjsK KworCS8qIEVuYWJsZSBhY2Nlc3MgdG8gQ1BVIGludGVyZmFjZSB2aWEgc3lzdGVtIHJlZ2lzdGVy cyAqLworCWVyciA9IGdpY192M19jcHVfZW5hYmxlX3NyZShzYyk7CisJaWYgKGVycikKKwkJcmV0 dXJuIChlcnIpOworCS8qIFByaW9yaXR5IG1hc2sgdG8gbWluaW11bSAtIGFjY2VwdCBhbGwgaW50 ZXJydXB0cyAqLworCWdpY192M19jcHVfcHJpb3JpdHkoR0lDX1BSSU9SSVRZX01JTik7CisJLyog RGlzYWJsZSBFT0kgbW9kZSAqLworCWdpY19pY2NfY2xlYXIoQ1RMUiwgSUNDX0NUTFJfRUwxX0VP SSk7CisJLyogRW5hYmxlIGdyb3VwIDEgKGluc2VjdXJlKSBpbnRlcnJ1cHMgKi8KKwlnaWNfaWNj X3NldChJR1JQRU4xLCBJQ0NfSUdSUEVOMF9FTDFfRU4pOworCisJcmV0dXJuICgwKTsKK30KKwor LyogRGlzdHJpYnV0b3IgKi8KK3N0YXRpYyBpbnQKK2dpY192M19kaXN0X2luaXQoc3RydWN0IGdp Y192M19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgYWZmOworCXVfaW50IGk7CisKKwkvKgorCSAq IDEuIERpc2FibGUgdGhlIERpc3RyaWJ1dG9yCisJICovCisJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJ Q0RfQ1RMUiwgMCk7CisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAq IDIuIENvbmZpZ3VyZSB0aGUgRGlzdHJpYnV0b3IKKwkgKi8KKwkvKiBTZXQgYWxsIGdsb2JhbCBp bnRlcnJ1cHRzIHRvIGJlIGxldmVsIHRyaWdnZXJlZCwgYWN0aXZlIGxvdy4gKi8KKwlmb3IgKGkg PSBHSUNfRklSU1RfU1BJOyBpIDwgc2MtPmdpY19uaXJxczsgaSArPSAxNikKKwkJZ2ljX2Rfd3Jp dGUoc2MsIDQsIEdJQ0RfSUNGR1IoaSA+PiA0KSwgMHgwMDAwMDAwMCk7CisKKwkvKiBTZXQgcHJp b3JpdHkgdG8gYWxsIHNoYXJlZCBpbnRlcnJ1cHRzICovCisJZm9yIChpID0gR0lDX0ZJUlNUX1NQ STsgaSA8IHNjLT5naWNfbmlycXM7IGkgKz0gNCkgeworCQkvKiBTZXQgaGlnaGVzdCBwcmlvcml0 eSAqLworCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JUFJJT1JJVFlSKGkpLCBHSUNfUFJJT1JJ VFlfTUFYKTsKKwl9CisKKwkvKgorCSAqIERpc2FibGUgYWxsIGludGVycnVwdHMuIExlYXZlIFBQ SSBhbmQgU0dJcyBhcyB0aGV5IGFyZSBlbmFibGVkIGluCisJICogUmUtRGlzdHJpYnV0b3IgcmVn aXN0ZXJzLgorCSAqLworCWZvciAoaSA9IEdJQ19GSVJTVF9TUEk7IGkgPCBzYy0+Z2ljX25pcnFz OyBpICs9IDMyKQorCQlnaWNfZF93cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIoaSksIDB4RkZG RkZGRkYpOworCisJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisKKwkvKgorCSAqIDMu IEVuYWJsZSBEaXN0cmlidXRvcgorCSAqLworCS8qIEVuYWJsZSBEaXN0cmlidXRvciB3aXRoIEFS RSwgR3JvdXAgMSAqLworCWdpY19kX3dyaXRlKHNjLCA0LCBHSUNEX0NUTFIsIEdJQ0RfQ1RMUl9B UkVfTlMgfCBHSUNEX0NUTFJfRzFBIHwKKwkgICAgR0lDRF9DVExSX0cxKTsKKworCS8qCisJICog NC4gUm91dGUgYWxsIGludGVycnVwdHMgdG8gYm9vdCBDUFUuCisJICovCisJYWZmID0gQ1BVX0FG RklOSVRZKFBDUFVfR0VUKGNwdWlkKSk7CisJZm9yIChpID0gR0lDX0ZJUlNUX1NQSTsgaSA8IHNj LT5naWNfbmlycXM7IGkrKykKKwkJZ2ljX2Rfd3JpdGUoc2MsIDQsIEdJQ0RfSVJPVVRFUihpKSwg YWZmKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFJlLURpc3RyaWJ1dG9yICovCitzdGF0aWMg aW50CitnaWNfdjNfcmVkaXN0X2ZpbmQoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJc3Ry dWN0IHJlc291cmNlIHJfcmVzOworCWJ1c19zcGFjZV9oYW5kbGVfdCByX2JzaDsKKwl1aW50NjRf dCBhZmY7CisJdWludDY0X3QgdHlwZXI7CisJdWludDMyX3QgcGlkcjI7CisJdV9pbnQgY3B1aWQ7 CisJc2l6ZV90IGk7CisKKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsKKworCS8qIEFsbG9jYXRl IHN0cnVjdCByZXNvdXJjZSBmb3IgdGhpcyBDUFUncyBSZS1EaXN0cmlidXRvciByZWdpc3RlcnMg Ki8KKwlzYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0gPQorCSAgICBtYWxsb2Moc2l6ZW9mKCpz Yy0+Z2ljX3JlZGlzdHMucGNwdVswXSksIE1fR0lDX1YzLCBNX1dBSVRPSyk7CisKKwlhZmYgPSBD UFVfQUZGSU5JVFkoY3B1aWQpOworCS8qIEFmZmluaXR5IGluIGZvcm1hdCBmb3IgY29tcGFyaXNv biB3aXRoIHR5cGVyICovCisJYWZmID0gKENQVV9BRkYzKGFmZikgPDwgMjQpIHwgKENQVV9BRkYy KGFmZikgPDwgMTYpIHwKKwkgICAgKENQVV9BRkYxKGFmZikgPDwgOCkgfCBDUFVfQUZGMChhZmYp OworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJICAg ICJTdGFydCBzZWFyY2hpbmcgZm9yIFJlLURpc3RyaWJ1dG9yXG4iKTsKKwl9CisJLyogSXRlcmF0 ZSB0aHJvdWdoIFJlLURpc3RyaWJ1dG9yIHJlZ2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2Mt PmdpY19yZWRpc3RzLm5yZWdpb25zOyBpKyspIHsKKwkJLyogVGFrZSBhIGNvcHkgb2YgdGhlIHJl Z2lvbidzIHJlc291cmNlICovCisJCXJfcmVzID0gKnNjLT5naWNfcmVkaXN0cy5yZWdpb25zW2ld OworCQlyX2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZSgmcl9yZXMpOworCisJCXBpZHIyID0gYnVz X3JlYWRfNCgmcl9yZXMsIEdJQ1JfUElEUjIpOworCQlzd2l0Y2ggKHBpZHIyICYgR0lDUl9QSURS Ml9BUkNIX01BU0spIHsKKwkJY2FzZSBHSUNSX1BJRFIyX0FSQ0hfR0lDdjM6IC8qIGZhbGwgdGhy b3VnaCAqLworCQljYXNlIEdJQ1JfUElEUjJfQVJDSF9HSUN2NDoKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJObyBSZS1EaXN0cmlidXRv ciBmb3VuZCBmb3IgQ1BVJXVcbiIsIGNwdWlkKTsKKwkJCWZyZWUoc2MtPmdpY19yZWRpc3RzLnBj cHVbY3B1aWRdLCBNX0dJQ19WMyk7CisJCQlyZXR1cm4gKEVOT0RFVik7CisJCX0KKworCQlkbyB7 CisJCQl0eXBlciA9IGJ1c19yZWFkXzgoJnJfcmVzLCBHSUNSX1RZUEVSKTsKKwkJCWlmICgodHlw ZXIgPj4gMzIpID09IGFmZikgeworCQkJCUtBU1NFUlQoc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1 aWRdICE9IE5VTEwsCisJCQkJICAgICgiSW52YWxpZCBwb2ludGVyIHRvIHBlci1DUFUgcmVkaXN0 cmlidXRvciIpKTsKKwkJCQkvKiBDb3B5IHJlcyBjb250ZW50cyB0byBpdHMgZmluYWwgZGVzdGlu YXRpb24gKi8KKwkJCQkqc2MtPmdpY19yZWRpc3RzLnBjcHVbY3B1aWRdID0gcl9yZXM7CisJCQkJ aWYgKGJvb3R2ZXJib3NlKSB7CisJCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCQkJICAg ICJDUFUldSBSZS1EaXN0cmlidXRvciBoYXMgYmVlbiBmb3VuZFxuIiwKKwkJCQkJICAgIGNwdWlk KTsKKwkJCQl9CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKworCQkJcl9ic2ggKz0gKEdJQ1JfUkRf QkFTRV9TSVpFICsgR0lDUl9TR0lfQkFTRV9TSVpFKTsKKwkJCWlmICh0eXBlciAmIEdJQ1JfVFlQ RVJfVkxQSVMpIHsKKwkJCQlyX2JzaCArPQorCQkJCSAgICAoR0lDUl9WTFBJX0JBU0VfU0laRSAr IEdJQ1JfUkVTRVJWRURfU0laRSk7CisJCQl9CisKKwkJCXJtYW5fc2V0X2J1c2hhbmRsZSgmcl9y ZXMsIHJfYnNoKTsKKwkJfSB3aGlsZSAoKHR5cGVyICYgR0lDUl9UWVBFUl9MQVNUKSA9PSAwKTsK Kwl9CisKKwlmcmVlKHNjLT5naWNfcmVkaXN0cy5wY3B1W2NwdWlkXSwgTV9HSUNfVjMpOworCWRl dmljZV9wcmludGYoc2MtPmRldiwgIk5vIFJlLURpc3RyaWJ1dG9yIGZvdW5kIGZvciBDUFUldVxu IiwgY3B1aWQpOworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50CitnaWNfdjNfcmVk aXN0X3dha2Uoc3RydWN0IGdpY192M19zb2Z0YyAqc2MpCit7CisJdWludDMyX3Qgd2FrZXI7CisJ c2l6ZV90IHVzX2xlZnQgPSAxMDAwMDAwOworCisJd2FrZXIgPSBnaWNfcl9yZWFkKHNjLCA0LCBH SUNSX1dBS0VSKTsKKwkvKiBXYWtlIHVwIFJlLURpc3RyaWJ1dG9yIGZvciB0aGlzIENQVSAqLwor CXdha2VyICY9IH5HSUNSX1dBS0VSX1BTOworCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1dBS0VS LCB3YWtlcik7CisJLyoKKwkgKiBXaGVuIGNsZWFyaW5nIFByb2Nlc3NvclNsZWVwIGJpdCBpdCBp cyByZXF1aXJlZCB0byB3YWl0IGZvcgorCSAqIENoaWxkcmVuQXNsZWVwIHRvIGJlY29tZSB6ZXJv IGZvbGxvd2luZyB0aGUgcHJvY2Vzc29yIHBvd2VyLW9uLgorCSAqLworCXdoaWxlICgoZ2ljX3Jf cmVhZChzYywgNCwgR0lDUl9XQUtFUikgJiBHSUNSX1dBS0VSX0NBKSAhPSAwKSB7CisJCURFTEFZ KDEpOworCQlpZiAodXNfbGVmdC0tID09IDApIHsKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwK KwkJCSAgICAiQ291bGQgbm90IHdha2UgUmUtRGlzdHJpYnV0b3IgZm9yIENQVSV1IiwKKwkJCSAg ICBQQ1BVX0dFVChjcHVpZCkpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisKKwlpZiAo Ym9vdHZlcmJvc2UpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiQ1BVJXUgUmUtRGlzdHJp YnV0b3Igd29rZSB1cFxuIiwKKwkJICAgIFBDUFVfR0VUKGNwdWlkKSk7CisJfQorCisJcmV0dXJu ICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX3YzX3JlZGlzdF9pbml0KHN0cnVjdCBnaWNfdjNf c29mdGMgKnNjKQoreworCWludCBlcnI7CisJc2l6ZV90IGk7CisKKwllcnIgPSBnaWNfdjNfcmVk aXN0X2ZpbmQoc2MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBnaWNfdjNf cmVkaXN0X3dha2Uoc2MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBEaXNhYmxl IFNQSXMgKi8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9J Q0VOQUJMRVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9QUElfTUFTSyk7CisJLyogRW5hYmxlIFNH SXMgKi8KKwlnaWNfcl93cml0ZShzYywgNCwgR0lDUl9TR0lfQkFTRV9TSVpFICsgR0lDUl9JU0VO QUJMRVIwLAorCSAgICBHSUNSX0lfRU5BQkxFUl9TR0lfTUFTSyk7CisKKwkvKiBTZXQgcHJpb3Jp dHkgZm9yIFNHSXMgYW5kIFBQSXMgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IEdJQ19MQVNUX1BQSTsg aSArPSA0KSB7CisJCWdpY19yX3dyaXRlKHNjLCA0LCBHSUNSX1NHSV9CQVNFX1NJWkUgKyBHSUNE X0lQUklPUklUWVIoaSksCisJCSAgICBHSUNfUFJJT1JJVFlfTUFYKTsKKwl9CisKKwlnaWNfdjNf d2FpdF9mb3JfcndwKHNjLCBSRURJU1QpOworCitlcnJvcjoKKwlyZXR1cm4gKGVycik7Cit9Cgo= --b1_4ccc0ea76f1d3e1812e734a07ba732c5--