From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9B14C433C1 for ; Thu, 25 Mar 2021 19:52:42 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 82CA561A1E for ; Thu, 25 Mar 2021 19:52:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 82CA561A1E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 032076EE18; Thu, 25 Mar 2021 19:52:42 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7A166EE12 for ; Thu, 25 Mar 2021 19:52:40 +0000 (UTC) IronPort-SDR: 3ADOCzI0sAl2AkvY58Qqd9YLUk7UIjSy4me3ZEmsBzwz664GZDxPz4VFHHd0LDFk45G5Hmp9pY krODcwXwTQqw== X-IronPort-AV: E=McAfee;i="6000,8403,9934"; a="211147805" X-IronPort-AV: E=Sophos;i="5.81,278,1610438400"; d="scan'208";a="211147805" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2021 12:52:38 -0700 IronPort-SDR: bsAt3sKQ36tqK3NAfZcheKy0R4+7NqN1/sFmp5Zr1fykxZ7wfpUGRloLPUWicTWgE5oz1QTI8b AGB2WbsH/AGg== X-IronPort-AV: E=Sophos;i="5.81,278,1610438400"; d="scan'208";a="376979977" Received: from dbstims-dev.fm.intel.com ([10.1.27.177]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2021 12:52:38 -0700 From: Dale B Stimson To: intel-gfx@lists.freedesktop.org Date: Thu, 25 Mar 2021 12:52:30 -0700 Message-Id: <20210325195230.97238-1-dale.b.stimson@intel.com> X-Mailer: git-send-email 2.31.0 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH] drm/i915/dg1: Add HWMON power sensor support X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QXMgcGFydCBvZiB0aGUgU3lzdGVtIE1hbmFnZW1lbmVudCBJbnRlcmZhY2UgKFNNSSksIHVzZSB0 aGUgSFdNT04Kc3Vic3lzdGVtIHRvIGRpc3BsYXkgcG93ZXIgdXRpbGl6YXRpb24uCgpUaGUgZm9s bG93aW5nIHN0YW5kYXJkIEhXTU9OIHBvd2VyIHNlbnNvcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0 ZWQKKGFuZCBhcHByb3ByaWF0ZWx5IHNjYWxlZCk6CiAgL3N5cy9jbGFzcy9kcm0vY2FyZDAvZGV2 aWNlL2h3bW9uL2h3bW9uPGk+CgktIGVuZXJneTFfaW5wdXQKCS0gcG93ZXIxX2NhcAoJLSBwb3dl cjFfbWF4CgpTb21lIG5vbi1zdGFuZGFyZCBIV01PTiBwb3dlciBpbmZvcm1hdGlvbiBpcyBhbHNv IHByb3ZpZGVkLCBzdWNoIGFzCmVuYWJsZSBiaXRzIGFuZCBpbnRlcnZhbHMuCgpTaWduZWQtb2Zm LWJ5OiBEYWxlIEIgU3RpbXNvbiA8ZGFsZS5iLnN0aW1zb25AaW50ZWwuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAg IHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICB8ICAgMyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmMgfCA3ODUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmggfCAgNDEgKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICA1MyArKwogNyBmaWxlcyBjaGFuZ2Vk LCA4OTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaHdtb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaHdtb24uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCmluZGV4IDFlMWNiMjQ1ZmNhNzcuLmVjOGQ1 YTBkN2VhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwpAQCAtMTQsNiArMTQsNyBAQCBjb25maWcgRFJN X0k5MTUKIAlzZWxlY3QgRFJNX01JUElfRFNJCiAJc2VsZWN0IFJFTEFZCiAJc2VsZWN0IElSUV9X T1JLCisJc2VsZWN0IEhXTU9OCiAJIyBpOTE1IGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFD UEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3Qg QUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgaWYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAxNGYxYWIzOTlhZDA4Li4xYzEx MGQzMDZlNDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQCBpOTE1LXkg Kz0gaTkxNV9kcnYubyBcCiAJICBpOTE1X2NvbmZpZy5vIFwKIAkgIGk5MTVfaXJxLm8gXAogCSAg aTkxNV9nZXRwYXJhbS5vIFwKKwkgIGk5MTVfaHdtb24ubyBcCiAJICBpOTE1X21pdGlnYXRpb25z Lm8gXAogCSAgaTkxNV9wYXJhbXMubyBcCiAJICBpOTE1X3BjaS5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCmluZGV4IGIyMDE4ZTg1YWZjMmQuLjk1ODUxN2U1MTU3YjQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwpAQCAtNjksNiArNjksNyBAQAogCiAjaW5jbHVkZSAiaTkxNV9kZWJ1Z2ZzLmgi CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2h3bW9uLmgiCiAjaW5jbHVk ZSAiaTkxNV9pb2MzMi5oIgogI2luY2x1ZGUgImk5MTVfaXJxLmgiCiAjaW5jbHVkZSAiaTkxNV9t ZW1jcHkuaCIKQEAgLTY3MSw2ICs2NzIsMTAgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVn aXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlyZXR1cm47CiAJfQog CisJLyogUmVnaXN0ZXIgd2l0aCBod21vbiAqLworCWlmIChpOTE1X2h3bW9uX2luaXQoJmRldl9w cml2LT5kcm0pKQorCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRmFpbGVkIHRvIHJlZ2lzdGVy IGRyaXZlciBod21vbiFcbiIpOworCiAJaTkxNV9kZWJ1Z2ZzX3JlZ2lzdGVyKGRldl9wcml2KTsK IAlpOTE1X3NldHVwX3N5c2ZzKGRldl9wcml2KTsKIApAQCAtNzExLDYgKzcxNiw5IEBAIHN0YXRp YyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogCWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV90ZWFyZG93 bl9zeXNmcyhkZXZfcHJpdik7CisKKwlpOTE1X2h3bW9uX2ZpbmkoJmRldl9wcml2LT5kcm0pOwor CiAJZHJtX2Rldl91bnBsdWcoJmRldl9wcml2LT5kcm0pOwogCiAJaTkxNV9nZW1fZHJpdmVyX3Vu cmVnaXN0ZXIoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZmE1OTZkYWNl NDkwMi4uNzk5ODQ2MWUyZjAwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC02MSw2ICs2 MSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxkcm0vaTkx NV9tZWlfaGRjcF9pbnRlcmZhY2UuaD4KIAorI2luY2x1ZGUgImk5MTVfaHdtb24uaCIKICNpbmNs dWRlICJpOTE1X3BhcmFtcy5oIgogI2luY2x1ZGUgImk5MTVfcmVnLmgiCiAjaW5jbHVkZSAiaTkx NV91dGlscy5oIgpAQCAtMTEwOCw2ICsxMTA5LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg ewogCiAJc3RydWN0IGk5MTVfcGVyZiBwZXJmOwogCisJc3RydWN0IGk5MTVfaHdtb24gaHdtb247 CisKIAkvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVm ZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwogCXN0cnVjdCBpbnRlbF9ndCBndDsKIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9od21vbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9od21vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAuLjM3M2JiOTM3YTM3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2h3bW9uLmMKQEAgLTAsMCArMSw3ODUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBNSVQKKworLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworLyoKKyAqIFBvd2VyLXJlbGF0ZWQgaHdtb24gZW50cmllcy4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorCisjaW5j bHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgorI2luY2x1ZGUgImk5 MTVfaHdtb24uaCIKKworLyoqCisgKiBTRl8qIC0gc2NhbGUgZmFjdG9ycyBmb3IgcGFydGljdWxh ciBxdWFudGl0aWVzLgorICogVGhlIGh3bW9uIHN0YW5kYXJkIHNheXMgdGhhdCBxdWFudGl0aWVz IG9mIHRoZSBnaXZlbiB0eXBlcyBhcmUgc3BlY2lmaWVkCisgKiBpbiB0aGUgZ2l2ZW4gdW5pdHM6 CisgKiAtIHRpbWUgICAtIG1pbGxpc2Vjb25kcworICogLSBwb3dlciAgLSBtaWNyb3dhdHRzCisg KiAtIGVuZXJneSAtIG1pY3Jvam91bGVzCisgKi8KKworI2RlZmluZSBTRl9USU1FCQkgICAxMDAw CisjZGVmaW5lIFNGX1BPV0VSCTEwMDAwMDAKKyNkZWZpbmUgU0ZfRU5FUkdZCTEwMDAwMDAKKwor c3RhdGljIHZvaWQKK19sb2NrZWRfd2l0aF9wbV9pbnRlbF91bmNvcmVfcm13KHN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSwKKwkJCQkgaTkxNV9yZWdfdCByZWcsIHUzMiBjbGVhciwgdTMyIHNl dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHVuY29yZS0+aTkxNTsKKwlz dHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7CisKKwltdXRleF9sb2NrKCZod21vbi0+aHdtb25fbG9jayk7CisKKwl3aXRoX2lu dGVsX3J1bnRpbWVfcG0odW5jb3JlLT5ycG0sIHdha2VyZWYpCisJCWludGVsX3VuY29yZV9ybXco dW5jb3JlLCByZWcsIGNsZWFyLCBzZXQpOworCisJbXV0ZXhfdW5sb2NrKCZod21vbi0+aHdtb25f bG9jayk7Cit9CisKKy8qCisgKiBfZmllbGRfcmVhZF9hbmRfc2NhbGUoKQorICogUmV0dXJuIHR5 cGUgb2YgdTY0IGFsbG93cyBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHNjYWxpbmcgbWlnaHQgY2F1 c2UgYQorICogcmVzdWx0IGV4Y2VlZGluZyAzMiBiaXRzLgorICovCitzdGF0aWMgX19hbHdheXNf aW5saW5lIHU2NAorX2ZpZWxkX3JlYWRfYW5kX3NjYWxlKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSwgaTkxNV9yZWdfdCByZ2FkciwKKwkJICAgICAgdTMyIGZpZWxkX21hc2ssIGludCBuc2hp ZnQsIHVuc2lnbmVkIGludCBzY2FsZV9mYWN0b3IpCit7CisJaW50ZWxfd2FrZXJlZl90IHdha2Vy ZWY7CisJdTMyIHJlZ192YWx1ZTsKKwl1NjQgc2NhbGVkX3ZhbDsKKworCXdpdGhfaW50ZWxfcnVu dGltZV9wbSh1bmNvcmUtPnJwbSwgd2FrZXJlZikKKwkJcmVnX3ZhbHVlID0gaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCByZ2Fkcik7CisKKwlyZWdfdmFsdWUgPSBsZTMyX2dldF9iaXRzKHJlZ192 YWx1ZSwgZmllbGRfbWFzayk7CisJc2NhbGVkX3ZhbCA9IG11bF91MzJfdTMyKHNjYWxlX2ZhY3Rv ciwgcmVnX3ZhbHVlKTsKKworCS8qIFNoaWZ0LCByb3VuZGluZyB0byBuZWFyZXN0ICovCisJaWYg KG5zaGlmdCA+IDApCisJCXNjYWxlZF92YWwgPSAoc2NhbGVkX3ZhbCArICgxIDw8IChuc2hpZnQg LSAxKSkpID4+IG5zaGlmdDsKKworCXJldHVybiBzY2FsZWRfdmFsOworfQorCisvKgorICogX2Zp ZWxkX3JlYWQ2NF9hbmRfc2NhbGUoKSAtIHJlYWQgYSA2NC1iaXQgcmVnaXN0ZXIgYW5kIHNjYWxl LgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NAorX2ZpZWxkX3JlYWQ2NF9hbmRfc2Nh bGUoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLCBpOTE1X3JlZ190IHJnYWRyLAorCQkJdTY0 IGZpZWxkX21hc2ssIGludCBuc2hpZnQsIHVuc2lnbmVkIGludCBzY2FsZV9mYWN0b3IpCit7CisJ aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisJdTY0IHJlZ192YWx1ZTsKKwl1NjQgc2NhbGVkX3Zh bDsKKworCXdpdGhfaW50ZWxfcnVudGltZV9wbSh1bmNvcmUtPnJwbSwgd2FrZXJlZikKKwkJcmVn X3ZhbHVlID0gaW50ZWxfdW5jb3JlX3JlYWQ2NCh1bmNvcmUsIHJnYWRyKTsKKworCXJlZ192YWx1 ZSA9IGxlNjRfZ2V0X2JpdHMocmVnX3ZhbHVlLCBmaWVsZF9tYXNrKTsKKwlzY2FsZWRfdmFsID0g c2NhbGVfZmFjdG9yICogcmVnX3ZhbHVlOworCisJLyogU2hpZnQsIHJvdW5kaW5nIHRvIG5lYXJl c3QgKi8KKwlpZiAobnNoaWZ0ID4gMCkKKwkJc2NhbGVkX3ZhbCA9IChzY2FsZWRfdmFsICsgKDEg PDwgKG5zaGlmdCAtIDEpKSkgPj4gbnNoaWZ0OworCisJcmV0dXJuIHNjYWxlZF92YWw7Cit9CisK Ky8qCisgKiBfZmllbGRfc2NhbGVfYW5kX3dyaXRlKCkKKyAqLworc3RhdGljIF9fYWx3YXlzX2lu bGluZSB2b2lkCitfZmllbGRfc2NhbGVfYW5kX3dyaXRlKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSwKKwkJICAgICAgIGk5MTVfcmVnX3QgcmdhZHIsCisJCSAgICAgICB1MzIgZmllbGRfbWFz aywgaW50IG5zaGlmdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBzY2FsZV9mYWN0b3IsIGxvbmcg bHZhbCkKK3sKKwl1MzIgbnZhbDsKKwl1MzIgYml0c190b19jbGVhcjsKKwl1MzIgYml0c190b19z ZXQ7CisKKwkvKiBDb21wdXRhdGlvbiBpbiA2NC1iaXRzIHRvIGF2b2lkIG92ZXJmbG93LiBSb3Vu ZCB0byBuZWFyZXN0LiAqLworCW52YWwgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NClsdmFs IDw8IG5zaGlmdCwgc2NhbGVfZmFjdG9yKTsKKworCWJpdHNfdG9fY2xlYXIgPSBmaWVsZF9tYXNr OworCWJpdHNfdG9fc2V0ID0gbGUzMl9lbmNvZGVfYml0cyhudmFsLCBmaWVsZF9tYXNrKTsKKwor CV9sb2NrZWRfd2l0aF9wbV9pbnRlbF91bmNvcmVfcm13KHVuY29yZSwgcmdhZHIsCisJCQkJCSBi aXRzX3RvX2NsZWFyLCBiaXRzX3RvX3NldCk7Cit9CisKKy8qCisgKiBpOTE1X2VuZXJneTFfaW5w dXRfc2hvdyAtIEEgY3VzdG9tIGZ1bmN0aW9uIHRvIG9idGFpbiBlbmVyZ3kxX2lucHV0LgorICog VXNlIGEgY3VzdG9tIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIHVzdWFsIGh3bW9uIGhlbHBlcnMg aW4gb3JkZXIgdG8KKyAqIGd1YXJhbnRlZSA2NC1iaXRzIG9mIHJlc3VsdCB0byB1c2VyLXNwYWNl LgorICogVW5pdHMgYXJlIG1pY3Jvam91bGVzLgorICoKKyAqIFRoZSB1bmRlcmx5aW5nIGhhcmR3 YXJlIHJlZ2lzdGVyIGlzIDMyLWJpdHMgYW5kIGlzIHN1YmplY3QgdG8gb3ZlcmZsb3cuCisgKiBU aGlzIGZ1bmN0aW9uIGNvbXBlbnNhdGVzIGZvciBvdmVyZmxvdyBvZiB0aGUgMzItYml0IHJlZ2lz dGVyIGJ5IGRldGVjdGluZworICogd3JhcC1hcm91bmQgYW5kIGluY3JlbWVudGluZyBhbiBvdmVy ZmxvdyBjb3VudGVyLgorICogVGhpcyBvbmx5IHdvcmtzIGlmIHRoZSByZWdpc3RlciBpcyBzYW1w bGVkIG9mdGVuIGVub3VnaCB0byBhdm9pZAorICogbWlzc2luZyBhbiBpbnN0YW5jZSBvZiBvdmVy ZmxvdyAtIGFjaGlldmVkIGVpdGhlciBieSByZXBlYXRlZAorICogcXVlcmllcyB0aHJvdWdoIHRo ZSBBUEksIG9yIHZpYSBhIHBvc3NpYmxlIHRpbWVyIChmdXR1cmUgLSBUQkQpIHRoYXQKKyAqIGVu c3VyZXMgdmFsdWVzIGFyZSByZWFkIG9mdGVuIGVub3VnaCB0byBjYXRjaCBhbGwgb3ZlcmZsb3dz LgorICoKKyAqIEhvdyBsb25nIGJlZm9yZSBvdmVyZmxvdz8gIEZvciBleGFtcGxlLCB3aXRoIGFu IGV4YW1wbGUgc2NhbGluZyBiaXQKKyAqIHNoaWZ0IG9mIDE0IGJpdHMgKHNlZSByZWdpc3RlciAq UEFDS0FHRV9QT1dFUl9TS1VfVU5JVCkgYW5kIGEgcG93ZXIgZHJhdyBvZgorICogMTAwMCB3YXR0 cywgdGhlIDMyLWJpdCBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgaW4gYXBwcm94aW1hdGVseSA0LjM2 IG1pbnV0ZXMuCisgKgorICogRXhhbXBsZXM6CisgKiAgICAxIHdhdHQ6ICAoMl4zMiA+PiAxNCkg LyAgICAxIFcgLyAoNjAgKiA2MCAqIDI0KSBzZWNzL2RheSAtPiAzIGRheXMKKyAqIDEwMDAgd2F0 dHM6ICgyXjMyID4+IDE0KSAvIDEwMDAgVyAvIDYwICAgICAgICAgICAgIHNlY3MvbWluIC0+IDQu MzYgbWludXRlcworICovCitzdGF0aWMgc3NpemVfdAoraTkxNV9lbmVyZ3kxX2lucHV0X3Nob3co c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNo YXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNvcmU7 CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCWludCBuc2hpZnQg PSBod21vbi0+c2NsX3NoaWZ0X2VuZXJneTsKKwlzc2l6ZV90IHJldDsKKwlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKKwl1MzIgcmVnX3ZhbHVlOworCXU2NCB2bG87CisJdTY0IHZoaTsKKworCW11 dGV4X2xvY2soJmh3bW9uLT5od21vbl9sb2NrKTsKKworCXdpdGhfaW50ZWxfcnVudGltZV9wbSh1 bmNvcmUtPnJwbSwgd2FrZXJlZikKKwkJcmVnX3ZhbHVlID0gaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLAorCQkJCQkgICAgICBod21vbi0+cmcucmVnX2VuZXJneV9zdGF0dXMpOworCisJLyoKKwkg KiBUaGUgdTMyIHJlZ2lzdGVyIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSB1MzIgb3ZlcmZsb3cgY291 bnRlcgorCSAqIGdpdmVzIGFuIGVmZmVjdGl2ZSBlbmVyZ3kgY291bnRlciBzaXplIG9mIDY0LWJp dHMuICBIb3dldmVyLCB0aGUKKwkgKiBjb21wdXRhdGlvbnMgYmVsb3cgYXJlIGRvbmUgbW9kdWxv IDJeOTYgdG8gYXZvaWQgb3ZlcmZsb3cgZHVyaW5nCisJICogc2NhbGluZyBpbiB0aGUgY29udmVy c2lvbiB0byBtaWNyb2pvdWxlcy4KKwkgKgorCSAqIFRoZSBsb3ctb3JkZXIgNjQtYml0cyBvZiB0 aGUgcmVzdWx0aW5nIHF1YW50aXR5IGFyZSByZXR1cm5lZCB0bworCSAqIHRoZSBjYWxsZXIgaW4g dW5pdHMgb2YgbWljcm9qb3VsZXMsIGVuY29kZWQgaW50byBhIGRlY2ltYWwgc3RyaW5nLgorCSAq CisJICogRm9yIGEgcG93ZXIgb2YgMTAwMCB3YXR0cywgNjQgYml0cyBpbiB1bml0cyBvZiBtaWNy b2pvdWxlcyB3aWxsCisJICogb3ZlcmZsb3cgYWZ0ZXIgNTg0IHllYXJzLgorCSAqLworCisJaWYg KGh3bW9uLT5lbmVyZ3lfY291bnRlcl9wcmV2ID4gcmVnX3ZhbHVlKQorCQlod21vbi0+ZW5lcmd5 X2NvdW50ZXJfb3ZlcmZsb3crKzsKKworCWh3bW9uLT5lbmVyZ3lfY291bnRlcl9wcmV2ID0gcmVn X3ZhbHVlOworCisJLyoKKwkgKiA2NC1iaXQgdmFyaWFibGVzIHZsbyBhbmQgdmhpIGFyZSB1c2Vk IGZvciB0aGUgc2NhbGluZyBwcm9jZXNzLgorCSAqIFRoZSA5Ni1iaXQgY291bnRlciB2YWx1ZSBp cyBjb21wb3NlZCBmcm9tIHRoZSB0d28gNjQtYml0IHZhcmlhYmxlcworCSAqIHZoaSBhbmQgdmxv IHRodXNseTogIGNvdW50ZXIgPT0gdmhpIDw8IDMyICsgdmxvIC4KKwkgKiBUaGUgMzItYml0cyBv ZiBvdmVybGFwIGJldHdlZW4gdGhlIHR3byB2YXJpYWJsZXMgaXMgY29udmVuaWVudCBmb3IKKwkg KiBoYW5kbGluZyBvdmVyZmxvd3Mgb3V0IG9mIHZsby4KKwkgKi8KKworCXZsbyA9IHJlZ192YWx1 ZTsKKwl2aGkgPSBod21vbi0+ZW5lcmd5X2NvdW50ZXJfb3ZlcmZsb3c7CisKKwltdXRleF91bmxv Y2soJmh3bW9uLT5od21vbl9sb2NrKTsKKworCXZsbyA9IFNGX0VORVJHWSAqIHZsbzsKKworCS8q IFByZXBhcmUgdG8gcm91bmQgdG8gbmVhcmVzdCAqLworCWlmIChuc2hpZnQgPiAwKQorCQl2bG8g Kz0gMSA8PCAobnNoaWZ0IC0gMSk7CisKKwkvKgorCSAqIEFueXRoaW5nIGluIHRoZSB1cHBlci0z MiBiaXRzIG9mIHZsbyBnZXRzIGFkZGVkIGludG8gdmhpIGhlcmUsCisJICogYW5kIHRoZW4gY2xl YXJlZCBmcm9tIHZsby4KKwkgKi8KKwl2aGkgPSAoU0ZfRU5FUkdZICogdmhpKSArICh2bG8gPj4g MzIpOworCXZsbyAmPSAweGZmZmZmZmZmVUxMOworCisJLyoKKwkgKiBBcHBseSB0aGUgcmlnaHQg c2hpZnQuCisJICogLSB2bG8gc2hpZnRlZCBieSBpdHNlbGYuCisJICogLSB2bG8gcmVjZWl2aW5n IHdoYXQncyBzaGlmdGVkIG91dCBvZiB2aGkuCisJICogLSB2aGkgc2hpZnRlZCBieSBpdHNlbGYK KwkgKi8KKwl2bG8gPSB2bG8gPj4gbnNoaWZ0OworCXZsbyB8PSAodmhpIDw8ICgzMiAtIG5zaGlm dCkpICYgMHhmZmZmZmZmZlVMTDsKKwl2aGkgPSB2aGkgPj4gbnNoaWZ0OworCisJLyogQ29tYmlu ZWQgdG8gZ2V0IGEgNjQtYml0IHJlc3VsdCBpbiB2bG8uICovCisJdmxvIHw9ICh2aGkgPDwgMzIp OworCisJcmV0ID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwgdmxvKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bvd2VyMV9tYXhfZW5hYmxl X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK KwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkx NS0+dW5jb3JlOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCXNzaXplX3QgcmV0OworCXUz MiByZWdfdmFsdWU7CisJYm9vbCBpc19lbmFibGVkOworCisJd2l0aF9pbnRlbF9ydW50aW1lX3Bt KHVuY29yZS0+cnBtLCB3YWtlcmVmKQorCQlyZWdfdmFsdWUgPSBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsCisJCQkJCSAgICAgIGk5MTUtPmh3bW9uLnJnLnBrZ19yYXBsX2xpbWl0KTsKKworCWlz X2VuYWJsZWQgPSAhIShyZWdfdmFsdWUgJiBQS0dfUFdSX0xJTV8xX0VOKTsKKworCXJldCA9IHNj bnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBpc19lbmFibGVkKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bvd2VyMV9tYXhfZW5hYmxlX3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAg IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGludGVsX3VuY29yZSAq dW5jb3JlID0gJmk5MTUtPnVuY29yZTsKKwlzdHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkx NS0+aHdtb247CisJc3NpemVfdCByZXQ7CisJdTMyIHZhbDsKKwl1MzIgYml0c190b19jbGVhcjsK Kwl1MzIgYml0c190b19zZXQ7CisKKwlyZXQgPSBrc3RydG91MzIoYnVmLCAwLCAmdmFsKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYml0c190b19jbGVhciA9IFBLR19QV1JfTElNXzFf RU47CisJaWYgKCF2YWwpCisJCWJpdHNfdG9fc2V0ID0gMDsKKwllbHNlCisJCWJpdHNfdG9fc2V0 ID0gUEtHX1BXUl9MSU1fMV9FTjsKKworCV9sb2NrZWRfd2l0aF9wbV9pbnRlbF91bmNvcmVfcm13 KHVuY29yZSwgaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0LAorCQkJCQkgYml0c190b19jbGVhciwg Yml0c190b19zZXQpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAoraTkx NV9wb3dlcjFfbWF4X2ludGVydmFsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3 bW9uID0gJmk5MTUtPmh3bW9uOworCXNzaXplX3QgcmV0OworCXU2NCB1bGx2YWw7CisKKwl1bGx2 YWwgPSBfZmllbGRfcmVhZF9hbmRfc2NhbGUodW5jb3JlLCBod21vbi0+cmcucGtnX3JhcGxfbGlt aXQsCisJCQkJICAgICAgIFBLR19QV1JfTElNXzFfVElNRSwKKwkJCQkgICAgICAgaHdtb24tPnNj bF9zaGlmdF90aW1lLCBTRl9USU1FKTsKKworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0la RSwgIiVsbHVcbiIsIHVsbHZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVf dAoraTkxNV9wb3dlcjFfbWF4X2ludGVydmFsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 ICZpOTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9u OworCXNzaXplX3QgcmV0OworCWxvbmcgdmFsOworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAwLCAm dmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJX2ZpZWxkX3NjYWxlX2FuZF93cml0 ZSh1bmNvcmUsIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwKKwkJCSAgICAgICBQS0dfUFdSX0xJ TV8yX1RJTUUsCisJCQkgICAgICAgaHdtb24tPnNjbF9zaGlmdF90aW1lLCBTRl9USU1FLCB2YWwp OworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcjFfY2Fw X2VuYWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gJmk5MTUtPnVuY29yZTsKKwlzdHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdt b247CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisJc3NpemVfdCByZXQ7CisJdTMyIHJlZ192 YWx1ZTsKKwlib29sIGlzX2VuYWJsZWQ7CisKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0odW5jb3Jl LT5ycG0sIHdha2VyZWYpCisJCXJlZ192YWx1ZSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwK KwkJCQkJICAgICAgaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0X3Vkdyk7CisKKwlpc19lbmFibGVk ID0gISEocmVnX3ZhbHVlICYgUEtHX1BXUl9MSU1fMl9FTik7CisKKwlyZXQgPSBzY25wcmludGYo YnVmLCBQQUdFX1NJWkUsICIldVxuIiwgaXNfZW5hYmxlZCk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcjFfY2FwX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 ICZpOTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9u OworCXNzaXplX3QgcmV0OworCXUzMiB2YWw7CisJdTMyIGJpdHNfdG9fY2xlYXI7CisJdTMyIGJp dHNfdG9fc2V0OworCisJcmV0ID0ga3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCWJpdHNfdG9fY2xlYXIgPSBQS0dfUFdSX0xJTV8yX0VOOworCWlm ICghdmFsKQorCQliaXRzX3RvX3NldCA9IDA7CisJZWxzZQorCQliaXRzX3RvX3NldCA9IFBLR19Q V1JfTElNXzJfRU47CisKKwlfbG9ja2VkX3dpdGhfcG1faW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUs IGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdF91ZHcsCisJCQkJCSBiaXRzX3RvX2NsZWFyLCBiaXRz X3RvX3NldCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bv d2VyX2RlZmF1bHRfbGltaXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGk5MTVfaHdt b24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gc2NucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGh3bW9uLT5wb3dlcl9tYXhfaW5pdGlhbF92YWx1 ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcl9taW5f bGltaXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAm aTkxNS0+dW5jb3JlOworCXN0cnVjdCBpOTE1X2h3bW9uICpod21vbiA9ICZpOTE1LT5od21vbjsK Kwlzc2l6ZV90IHJldDsKKwl1MzIgdXZhbDsKKworCS8qCisJICogVGhpcyBpcyBhIDY0LWJpdCBy ZWdpc3RlciBidXQgdGhlIGluZGl2aWR1YWwgZmllbGRzIGFyZSB1bmRlciAzMiBiaXRzCisJICog aW4gc2l6ZSBldmVuIGFmdGVyIHNjYWxpbmcuCisJICogVGhlIFVBUEkgc3BlY2lmaWVzIGEgc2l6 ZSBvZiAzMiBiaXRzLgorCSAqIFRoZSBVQVBJIHNwZWNpZmllcyB0aGF0IDAgc2hvdWxkIGJlIHJl dHVybmVkIGlmIHVuc3VwcG9ydGVkLgorCSAqIFNvLCB1c2luZyB1MzIgYW5kICV1IGlzIHN1ZmZp Y2llbnQuCisJICovCisJaWYgKGk5MTVfbW1pb19yZWdfdmFsaWQoaHdtb24tPnJnLnBrZ19wb3dl cl9za3UpKQorCQl1dmFsID0gKHUzMilfZmllbGRfcmVhZDY0X2FuZF9zY2FsZSh1bmNvcmUsCisJ CQkJCQkgICAgaHdtb24tPnJnLnBrZ19wb3dlcl9za3UsCisJCQkJCQkgICAgUEtHX01JTl9QV1Is CisJCQkJCQkgICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkJCSAgICBTRl9QT1dFUik7 CisJZWxzZQorCQl1dmFsID0gMDsKKworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwg IiV1XG4iLCB1dmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1 X3Bvd2VyX21heF9saW1pdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5 MTUtPmh3bW9uOworCXNzaXplX3QgcmV0OworCXUzMiB1dmFsOworCisJLyoKKwkgKiBUaGlzIGlz IGEgNjQtYml0IHJlZ2lzdGVyIGJ1dCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgYXJlIHVuZGVyIDMy IGJpdHMKKwkgKiBpbiBzaXplIGV2ZW4gYWZ0ZXIgc2NhbGluZy4KKwkgKiBUaGUgVUFQSSBzcGVj aWZpZXMgYSBzaXplIG9mIDMyIGJpdHMuCisJICogVGhlIFVBUEkgc3BlY2lmaWVzIHRoYXQgVUlO VF9NQVggc2hvdWxkIGJlIHJldHVybmVkIGlmIHVuc3VwcG9ydGVkLgorCSAqIFNvLCB1c2luZyB1 MzIgYW5kICV1IGlzIHN1ZmZpY2llbnQuCisJICovCisJaWYgKGk5MTVfbW1pb19yZWdfdmFsaWQo aHdtb24tPnJnLnBrZ19wb3dlcl9za3UpKQorCQl1dmFsID0gKHUzMilfZmllbGRfcmVhZDY0X2Fu ZF9zY2FsZSh1bmNvcmUsCisJCQkJCQkgICAgaHdtb24tPnJnLnBrZ19wb3dlcl9za3UsCisJCQkJ CQkgICAgUEtHX01BWF9QV1IsCisJCQkJCQkgICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJ CQkJCSAgICBTRl9QT1dFUik7CisJZWxzZQorCQl1dmFsID0gVUlOVF9NQVg7CisKKwlyZXQgPSBz Y25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgdXZhbCk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHBvd2VyMV9tYXhfZW5hYmxlLCAwNjY0LAor CQkJICBpOTE1X3Bvd2VyMV9tYXhfZW5hYmxlX3Nob3csCisJCQkgIGk5MTVfcG93ZXIxX21heF9l bmFibGVfc3RvcmUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwb3dlcjFfbWF4X2lu dGVydmFsLCAwNjY0LAorCQkJICBpOTE1X3Bvd2VyMV9tYXhfaW50ZXJ2YWxfc2hvdywKKwkJCSAg aTkxNV9wb3dlcjFfbWF4X2ludGVydmFsX3N0b3JlLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNF X0FUVFIocG93ZXIxX2NhcF9lbmFibGUsIDA2NjQsCisJCQkgIGk5MTVfcG93ZXIxX2NhcF9lbmFi bGVfc2hvdywKKwkJCSAgaTkxNV9wb3dlcjFfY2FwX2VuYWJsZV9zdG9yZSwgMCk7CitzdGF0aWMg U0VOU09SX0RFVklDRV9BVFRSKHBvd2VyX2RlZmF1bHRfbGltaXQsIDA0NDQsCisJCQkgIGk5MTVf cG93ZXJfZGVmYXVsdF9saW1pdF9zaG93LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNF X0FUVFIocG93ZXJfbWluX2xpbWl0LCAwNDQ0LAorCQkJICBpOTE1X3Bvd2VyX21pbl9saW1pdF9z aG93LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocG93ZXJfbWF4X2xpbWl0 LCAwNDQ0LAorCQkJICBpOTE1X3Bvd2VyX21heF9saW1pdF9zaG93LCBOVUxMLCAwKTsKK3N0YXRp YyBTRU5TT1JfREVWSUNFX0FUVFIoZW5lcmd5MV9pbnB1dCwgMDQ0NCwKKwkJCSAgaTkxNV9lbmVy Z3kxX2lucHV0X3Nob3csIE5VTEwsIDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHdt b25fYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfcG93ZXIxX21heF9lbmFibGUu ZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9tYXhfaW50ZXJ2YWwuZGV2 X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9jYXBfZW5hYmxlLmRldl9hdHRy LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wb3dlcl9kZWZhdWx0X2xpbWl0LmRldl9hdHRyLmF0 dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wb3dlcl9taW5fbGltaXQuZGV2X2F0dHIuYXR0ciwKKwkm c2Vuc29yX2Rldl9hdHRyX3Bvd2VyX21heF9saW1pdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3Jf ZGV2X2F0dHJfZW5lcmd5MV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRp YyB1bW9kZV90IGh3bW9uX2F0dHJpYnV0ZXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwK KwkJCQkJc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0g Jmk5MTUtPmh3bW9uOworCWk5MTVfcmVnX3QgcmdhZHI7CisKKwlpZiAoYXR0ciA9PSAmc2Vuc29y X2Rldl9hdHRyX2VuZXJneTFfaW5wdXQuZGV2X2F0dHIuYXR0cikKKwkJcmdhZHIgPSBod21vbi0+ cmcucmVnX2VuZXJneV9zdGF0dXM7CisJZWxzZSBpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRy X3Bvd2VyMV9tYXhfZW5hYmxlLmRldl9hdHRyLmF0dHIpCisJCXJnYWRyID0gaHdtb24tPnJnLnBr Z19yYXBsX2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFf bWF4X2ludGVydmFsLmRldl9hdHRyLmF0dHIpCisJCXJnYWRyID0gaHdtb24tPnJnLnBrZ19yYXBs X2xpbWl0OworCWVsc2UgaWYgKGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfY2FwX2Vu YWJsZS5kZXZfYXR0ci5hdHRyKQorCQlyZ2FkciA9IGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdF91 ZHc7CisJZWxzZSBpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyX2RlZmF1bHRfbGlt aXQuZGV2X2F0dHIuYXR0cikKKwkJcmdhZHIgPSBod21vbi0+cmcucGtnX3JhcGxfbGltaXQ7CisJ ZWxzZSBpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyX21pbl9saW1pdC5kZXZfYXR0 ci5hdHRyKQorCQlyZXR1cm4gYXR0ci0+bW9kZTsKKwllbHNlIGlmIChhdHRyID09ICZzZW5zb3Jf ZGV2X2F0dHJfcG93ZXJfbWF4X2xpbWl0LmRldl9hdHRyLmF0dHIpCisJCXJldHVybiBhdHRyLT5t b2RlOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWk5MTVfbW1pb19yZWdfdmFsaWQocmdh ZHIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdHRyLT5tb2RlOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBod21vbl9hdHRyZ3JvdXAgPSB7CisJLmF0dHJzID0g aHdtb25fYXR0cmlidXRlcywKKwkuaXNfdmlzaWJsZSA9IGh3bW9uX2F0dHJpYnV0ZXNfdmlzaWJs ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpod21vbl9ncm91 cHNbXSA9IHsKKwkmaHdtb25fYXR0cmdyb3VwLAorCU5VTEwKK307CisKKy8qCisgKiBIV01PTiBT RU5TT1IgVFlQRSA9IGh3bW9uX3Bvd2VyCisgKiAgLSBTdXN0YWluZWQgUG93ZXIgKHBvd2VyMV9t YXgpCisgKiAgLSBCdXJzdCBwb3dlciAgICAgKHBvd2VyMV9jYXApCisgKiAgLSBQZWFrIHBvd2Vy ICAgICAgKHBvd2VyMV9jcml0KQorICovCitzdGF0aWMgY29uc3QgdTMyIGk5MTVfY29uZmlnX3Bv d2VyW10gPSB7CisJSFdNT05fUF9DQVAgfCBIV01PTl9QX01BWCwKKwkwCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyBpOTE1X3Bvd2VyID0geworCS50eXBlID0g aHdtb25fcG93ZXIsCisJLmNvbmZpZyA9IGk5MTVfY29uZmlnX3Bvd2VyLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmk5MTVfaW5mb1tdID0geworCSZpOTE1 X3Bvd2VyLAorCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90CitpOTE1X3Bvd2VyX2lzX3Zpc2li bGUoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBhdHRyLCBpbnQgY2hh bikKK3sKKwlpOTE1X3JlZ190IHJnYWRyOworCisJc3dpdGNoIChhdHRyKSB7CisJY2FzZSBod21v bl9wb3dlcl9tYXg6CisJCXJnYWRyID0gaTkxNS0+aHdtb24ucmcucGtnX3JhcGxfbGltaXQ7CisJ CWJyZWFrOworCWNhc2UgaHdtb25fcG93ZXJfY2FwOgorCQlyZ2FkciA9IGk5MTUtPmh3bW9uLnJn LnBrZ19yYXBsX2xpbWl0X3VkdzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJ fQorCisJaWYgKCFpOTE1X21taW9fcmVnX3ZhbGlkKHJnYWRyKSkKKwkJcmV0dXJuIDA7CisKKwly ZXR1cm4gMDY2NDsKK30KKworc3RhdGljIGludAoraTkxNV9wb3dlcl9yZWFkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LCB1MzIgYXR0ciwgaW50IGNoYW4sIGxvbmcgKnZhbCkKK3sKKwlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5jb3JlOworCXN0cnVjdCBpOTE1 X2h3bW9uICpod21vbiA9ICZpOTE1LT5od21vbjsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAo YXR0cikgeworCWNhc2UgaHdtb25fcG93ZXJfbWF4OgorCQkqdmFsID0gKGxvbmcpX2ZpZWxkX3Jl YWRfYW5kX3NjYWxlKHVuY29yZSwKKwkJCQkJCSAgIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwK KwkJCQkJCSAgIFBLR19QV1JfTElNXzEsCisJCQkJCQkgICBod21vbi0+c2NsX3NoaWZ0X3Bvd2Vy LAorCQkJCQkJICAgU0ZfUE9XRVIpOworCQlicmVhazsKKwljYXNlIGh3bW9uX3Bvd2VyX2NhcDoK KwkJKnZhbCA9IChsb25nKV9maWVsZF9yZWFkX2FuZF9zY2FsZSh1bmNvcmUsCisJCQkJCQkgICBo d21vbi0+cmcucGtnX3JhcGxfbGltaXRfdWR3LAorCQkJCQkJICAgUEtHX1BXUl9MSU1fMiwKKwkJ CQkJCSAgIGh3bW9uLT5zY2xfc2hpZnRfcG93ZXIsCisJCQkJCQkgICBTRl9QT1dFUik7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcG93ZXJfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsIHUzMiBhdHRyLCBpbnQgY2hhbiwgbG9uZyB2YWwpCit7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsKKwlzdHJ1Y3QgaTkxNV9od21vbiAqaHdt b24gPSAmaTkxNS0+aHdtb247CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGF0dHIpIHsKKwlj YXNlIGh3bW9uX3Bvd2VyX21heDoKKwkJX2ZpZWxkX3NjYWxlX2FuZF93cml0ZSh1bmNvcmUsCisJ CQkJICAgICAgIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwKKwkJCQkgICAgICAgUEtHX1BXUl9M SU1fMSwKKwkJCQkgICAgICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkgICAgICAgU0Zf UE9XRVIsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgaHdtb25fcG93ZXJfY2FwOgorCQlfZmllbGRf c2NhbGVfYW5kX3dyaXRlKHVuY29yZSwKKwkJCQkgICAgICAgaHdtb24tPnJnLnBrZ19yYXBsX2xp bWl0X3VkdywKKwkJCQkgICAgICAgUEtHX1BXUl9MSU1fMiwKKwkJCQkgICAgICAgaHdtb24tPnNj bF9zaGlmdF9wb3dlciwKKwkJCQkgICAgICAgU0ZfUE9XRVIsIHZhbCk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB1bW9kZV90CitpOTE1X2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZGF0YSwgZW51bSBod21v bl9zZW5zb3JfdHlwZXMgdHlwZSwKKwkJdTMyIGF0dHIsIGludCBjaGFubmVsKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopZGF0 YTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgaHdtb25fcG93ZXI6CisJCXJldHVybiBpOTE1 X3Bvd2VyX2lzX3Zpc2libGUoaTkxNSwgYXR0ciwgY2hhbm5lbCk7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50CitpOTE1X3JlYWQoc3RydWN0IGRldmljZSAqZGV2 LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLCB1MzIgYXR0ciwKKwkgIGludCBjaGFubmVs LCBsb25nICp2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBrZGV2X3Rv X2k5MTUoZGV2KTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgaHdtb25fcG93ZXI6CisJCXJl dHVybiBpOTE1X3Bvd2VyX3JlYWQoaTkxNSwgYXR0ciwgY2hhbm5lbCwgdmFsKTsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgaW50CitpOTE1X3dyaXRl KHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwgdTMyIGF0 dHIsCisJICAgaW50IGNoYW5uZWwsIGxvbmcgdmFsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0ga2Rldl90b19pOTE1KGRldik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNl IGh3bW9uX3Bvd2VyOgorCQlyZXR1cm4gaTkxNV9wb3dlcl93cml0ZShpOTE1LCBhdHRyLCBjaGFu bmVsLCB2YWwpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGk5MTVfaHdtb25fb3BzID0geworCS5pc192aXNp YmxlID0gaTkxNV9pc192aXNpYmxlLAorCS5yZWFkID0gaTkxNV9yZWFkLAorCS53cml0ZSA9IGk5 MTVfd3JpdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBpOTE1 X2NoaXBfaW5mbyA9IHsKKwkub3BzID0gJmk5MTVfaHdtb25fb3BzLAorCS5pbmZvID0gaTkxNV9p bmZvLAorfTsKKworc3RhdGljIHZvaWQKK2k5MTVfaHdtb25fZ2V0X3ByZXJlZ2lzdHJhdGlvbl9p bmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCXN0cnVjdCBpOTE1X2h3bW9u ICpod21vbiA9ICZpOTE1LT5od21vbjsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAm aTkxNS0+dW5jb3JlOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCXUzMiB2YWxfc2t1X3Vu aXQ7CisKKwlpZiAoSVNfREcxKGk5MTUpKSB7CisJCWh3bW9uLT5yZy5wa2dfcG93ZXJfc2t1X3Vu aXQgPSBQQ1VfUEFDS0FHRV9QT1dFUl9TS1VfVU5JVDsKKwkJaHdtb24tPnJnLnBrZ19wb3dlcl9z a3UgPSBQQ1VfUEFDS0FHRV9QT1dFUl9TS1U7CisJCWh3bW9uLT5yZy5wa2dfZW5lcmd5X3N0YXR1 cyA9IFBDVV9QQUNLQUdFX0VORVJHWV9TVEFUVVM7CisJCWh3bW9uLT5yZy5wa2dfcmFwbF9saW1p dCA9IFBDVV9QQUNLQUdFX1JBUExfTElNSVQ7CisJCWh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdF91 ZHcgPSBQQ1VfUEFDS0FHRV9SQVBMX0xJTUlUX1VEVzsKKwkJaHdtb24tPnJnLnBsdF9lbmVyZ3lf c3RhdHVzID0gUENVX1BMQVRGT1JNX0VORVJHWV9TVEFUVVM7CisJfSBlbHNlIHsKKwkJaHdtb24t PnJnLnBrZ19wb3dlcl9za3VfdW5pdCA9IElOVkFMSURfTU1JT19SRUc7CisJCWh3bW9uLT5yZy5w a2dfcG93ZXJfc2t1ID0gSU5WQUxJRF9NTUlPX1JFRzsKKwkJaHdtb24tPnJnLnBrZ19lbmVyZ3lf c3RhdHVzID0gSU5WQUxJRF9NTUlPX1JFRzsKKwkJaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0ID0g SU5WQUxJRF9NTUlPX1JFRzsKKwkJaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0X3VkdyA9IElOVkFM SURfTU1JT19SRUc7CisJCWh3bW9uLT5yZy5wbHRfZW5lcmd5X3N0YXR1cyA9IElOVkFMSURfTU1J T19SRUc7CisJfQorCisJLyoKKwkgKiBJZiBhIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgKl9Q TEFURk9STV9FTkVSR1lfU1RBVFVTLAorCSAqIHRyeSAqUEFDS0FHRV9FTkVSR1lfU1RBVFVTLgor CSAqLworCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKGh3bW9uLT5yZy5wbHRfZW5lcmd5X3N0YXR1 cykpCisJCWh3bW9uLT5yZy5yZWdfZW5lcmd5X3N0YXR1cyA9IGh3bW9uLT5yZy5wbHRfZW5lcmd5 X3N0YXR1czsKKwllbHNlCisJCWh3bW9uLT5yZy5yZWdfZW5lcmd5X3N0YXR1cyA9IGh3bW9uLT5y Zy5wa2dfZW5lcmd5X3N0YXR1czsKKworCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCh1 bmNvcmUtPnJwbSk7CisKKwkvKgorCSAqIFRoZSBjb250ZW50cyBvZiByZWdpc3RlciBod21vbi0+ cmcucGtnX3Bvd2VyX3NrdV91bml0IGRvIG5vdCBjaGFuZ2UsCisJICogc28gcmVhZCBpdCBvbmNl IGFuZCBzdG9yZSB0aGUgc2hpZnQgdmFsdWVzLgorCSAqLworCWlmIChpOTE1X21taW9fcmVnX3Zh bGlkKGh3bW9uLT5yZy5wa2dfcG93ZXJfc2t1X3VuaXQpKQorCQl2YWxfc2t1X3VuaXQgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsCisJCQkJCQkgaHdtb24tPnJnLnBrZ19wb3dlcl9za3VfdW5p dCk7CisJZWxzZQorCQl2YWxfc2t1X3VuaXQgPSAwOworCisJaHdtb24tPmVuZXJneV9jb3VudGVy X292ZXJmbG93ID0gMDsKKworCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKGh3bW9uLT5yZy5yZWdf ZW5lcmd5X3N0YXR1cykpCisJCWh3bW9uLT5lbmVyZ3lfY291bnRlcl9wcmV2ID0KKwkJCWludGVs X3VuY29yZV9yZWFkKHVuY29yZSwgaHdtb24tPnJnLnJlZ19lbmVyZ3lfc3RhdHVzKTsKKwllbHNl CisJCWh3bW9uLT5lbmVyZ3lfY291bnRlcl9wcmV2ID0gMDsKKworCWludGVsX3J1bnRpbWVfcG1f cHV0KHVuY29yZS0+cnBtLCB3YWtlcmVmKTsKKworCWh3bW9uLT5zY2xfc2hpZnRfcG93ZXIgPSBs ZTMyX2dldF9iaXRzKHZhbF9za3VfdW5pdCwgUEtHX1BXUl9VTklUKTsKKwlod21vbi0+c2NsX3No aWZ0X2VuZXJneSA9IGxlMzJfZ2V0X2JpdHModmFsX3NrdV91bml0LCBQS0dfRU5FUkdZX1VOSVQp OworCWh3bW9uLT5zY2xfc2hpZnRfdGltZSA9IGxlMzJfZ2V0X2JpdHModmFsX3NrdV91bml0LCBQ S0dfVElNRV9VTklUKTsKKworCS8qCisJICogVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBvYnRh aW4gdGhlIHBvd2VyIGRlZmF1bHRfbGltaXQuCisJICogVGhlIGJlc3Qga25vd24gd29ya2Fyb3Vu ZCBpcyB0byB1c2UgdGhlIGluaXRpYWwgdmFsdWUgb2YgcG93ZXIxX21heC4KKwkgKgorCSAqIFRo ZSB2YWx1ZSBvZiBwb3dlcjFfbWF4IGlzIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9uIHJlYm9vdCwg YnV0IGlzCisJICogbm90IHJlc2V0IGJ5IGEgbW9kdWxlIHVubG9hZC9sb2FkIHNlcXVlbmNlLiAg VG8gYWxsb3cgcHJvcGVyCisJICogZnVuY3Rpb25pbmcgYWZ0ZXIgYSBtb2R1bGUgcmVsb2FkLCB0 aGUgdmFsdWUgZm9yIHBvd2VyMV9tYXggaXMKKwkgKiByZXN0b3JlZCB0byBpdHMgb3JpZ2luYWwg dmFsdWUgYXQgbW9kdWxlIHVubG9hZCB0aW1lIGluCisJICogaTkxNV9od21vbl9maW5pKCkuCisJ ICovCisJaHdtb24tPnBvd2VyX21heF9pbml0aWFsX3ZhbHVlID0KKwkJKHUzMilfZmllbGRfcmVh ZF9hbmRfc2NhbGUodW5jb3JlLAorCQkJCQkgICBod21vbi0+cmcucGtnX3JhcGxfbGltaXQsCisJ CQkJCSAgIFBLR19QV1JfTElNXzEsCisJCQkJCSAgIGh3bW9uLT5zY2xfc2hpZnRfcG93ZXIsIFNG X1BPV0VSKTsKK30KKworaW50IGk5MTVfaHdtb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt X2RldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZHJtX2Rl dik7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCXN0cnVjdCBk ZXZpY2UgKmh3bW9uX2RldjsKKworCW11dGV4X2luaXQoJmh3bW9uLT5od21vbl9sb2NrKTsKKwor CWk5MTVfaHdtb25fZ2V0X3ByZXJlZ2lzdHJhdGlvbl9pbmZvKGk5MTUpOworCisJaHdtb25fZGV2 ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhkcm1fZGV2LT5kZXYsICJpOTE1IiwK KwkJCQkJCSAgICBkcm1fZGV2LAorCQkJCQkJICAgICZpOTE1X2NoaXBfaW5mbywKKwkJCQkJCSAg ICBod21vbl9ncm91cHMpOworCisJaWYgKElTX0VSUihod21vbl9kZXYpKSB7CisJCW11dGV4X2Rl c3Ryb3koJmh3bW9uLT5od21vbl9sb2NrKTsKKwkJcmV0dXJuIFBUUl9FUlIoaHdtb25fZGV2KTsK Kwl9CisKKwlod21vbi0+ZGV2ID0gaHdtb25fZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQg aTkxNV9od21vbl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2KQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkcm1fZGV2KTsKKwlzdHJ1Y3QgaTkxNV9o d21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisKKwlpZiAoaHdtb24tPnBvd2VyX21heF9pbml0 aWFsX3ZhbHVlKSB7CisJCS8qIFJlc3RvcmUgcG93ZXIxX21heC4gKi8KKwkJX2ZpZWxkX3NjYWxl X2FuZF93cml0ZSgmaTkxNS0+dW5jb3JlLCBod21vbi0+cmcucGtnX3JhcGxfbGltaXQsCisJCQkJ ICAgICAgIFBLR19QV1JfTElNXzEsIGh3bW9uLT5zY2xfc2hpZnRfcG93ZXIsCisJCQkJICAgICAg IFNGX1BPV0VSLAorCQkJCSAgICAgICBod21vbi0+cG93ZXJfbWF4X2luaXRpYWxfdmFsdWUpOwor CX0KKworCWlmIChod21vbi0+ZGV2KQorCQlod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbi0+ ZGV2KTsKKworCW11dGV4X2Rlc3Ryb3koJmh3bW9uLT5od21vbl9sb2NrKTsKKworCW1lbXNldCho d21vbiwgMCwgc2l6ZW9mKCpod21vbikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9od21vbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9od21vbi5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjBiZTkxOWYwYTQ2M2QKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmgKQEAgLTAs MCArMSw0MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworCisvKgorICog Q29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9fSU5U RUxfSFdNT05fSF9fCisjZGVmaW5lIF9fSU5URUxfSFdNT05fSF9fCisKKyNpbmNsdWRlIDxkcm0v ZHJtX2RldmljZS5oPgorI2luY2x1ZGUgImk5MTVfcmVnLmgiCisKK3N0cnVjdCBpOTE1X2h3bW9u X3JlZyB7CisJaTkxNV9yZWdfdCBwa2dfcG93ZXJfc2t1X3VuaXQ7CisJaTkxNV9yZWdfdCBwa2df cG93ZXJfc2t1OworCWk5MTVfcmVnX3QgcGtnX2VuZXJneV9zdGF0dXM7CisJaTkxNV9yZWdfdCBw a2dfcmFwbF9saW1pdDsKKwlpOTE1X3JlZ190IHBrZ19yYXBsX2xpbWl0X3VkdzsKKwlpOTE1X3Jl Z190IHBsdF9lbmVyZ3lfc3RhdHVzOworCWk5MTVfcmVnX3QgcmVnX2VuZXJneV9zdGF0dXM7Cit9 OworCitzdHJ1Y3QgaTkxNV9od21vbiB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBt dXRleCBod21vbl9sb2NrOwkvKiBjb3VudGVyIG92ZXJmbG93IGxvZ2ljIGFuZCBybXcgKi8KKwor CXN0cnVjdCBpOTE1X2h3bW9uX3JlZyByZzsKKworCXUzMiBlbmVyZ3lfY291bnRlcl9vdmVyZmxv dzsKKwl1MzIgZW5lcmd5X2NvdW50ZXJfcHJldjsKKwl1MzIgcG93ZXJfbWF4X2luaXRpYWxfdmFs dWU7CisKKwlpbnQgc2NsX3NoaWZ0X3Bvd2VyOworCWludCBzY2xfc2hpZnRfZW5lcmd5OworCWlu dCBzY2xfc2hpZnRfdGltZTsKK307CisKK2ludCBpOTE1X2h3bW9uX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybV9kZXYpOwordm9pZCBpOTE1X2h3bW9uX2Zpbmkoc3RydWN0IGRybV9kZXZpY2Ug KmRybV9kZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGNiZjdhNjBh ZmU1NDIuLjkxN2U0NDA0NzhiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNDA2OCw2 ICs0MDY4LDU5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVf cmVnX3QgcmVnKQogI2RlZmluZSBCWFRfUlBfU1RBVEVfQ0FQICAgICAgICBfTU1JTygweDEzODE3 MCkKICNkZWZpbmUgR0VOOV9SUF9TVEFURV9MSU1JVFMJX01NSU8oMHgxMzgxNDgpCiAKKy8qIERH MSAqLworCisvKiBiYXNlZCBvbiBNQ0hCQVJfTUlSUk9SX0JBU0VfU05CID09IDB4MTQwMDAwICov CisjZGVmaW5lIFBDVV9QQUNLQUdFX1BPV0VSX1NLVV9VTklUCV9NTUlPKE1DSEJBUl9NSVJST1Jf QkFTRV9TTkIgKyAweDU5MzgpCisjZGVmaW5lIFBDVV9QQUNLQUdFX0VORVJHWV9TVEFUVVMJX01N SU8oTUNIQkFSX01JUlJPUl9CQVNFX1NOQiArIDB4NTkzYykKKyNkZWZpbmUgUENVX1BBQ0tBR0Vf UkFQTF9MSU1JVAkJX01NSU8oTUNIQkFSX01JUlJPUl9CQVNFX1NOQiArIDB4NTlhMCkKKyNkZWZp bmUgUENVX1BBQ0tBR0VfUkFQTF9MSU1JVF9VRFcJX01NSU8oTUNIQkFSX01JUlJPUl9CQVNFX1NO QiArIDB4NTlhNCkKKyNkZWZpbmUgUENVX1BBQ0tBR0VfUE9XRVJfU0tVCQlJTlZBTElEX01NSU9f UkVHCisjZGVmaW5lIFBDVV9QTEFURk9STV9FTkVSR1lfU1RBVFVTCUlOVkFMSURfTU1JT19SRUcK KworLyogRmllbGRzIGZvciAqX1BBQ0tBR0VfUkFQTF9MSU1JVDogKi8KKyNkZWZpbmUgICBQS0df UFdSX0xJTV8xCQkJUkVHX0dFTk1BU0soMTQsIDApCisjZGVmaW5lICAgUEtHX1BXUl9MSU1fMV9F TgkJUkVHX0JJVCgxNSkKKyNkZWZpbmUgICBQS0dfUFdSX0xJTV8xX1RJTUUJCVJFR19HRU5NQVNL KDIzLCAxNykKKworLyoKKyAqIEZpZWxkcyBmb3IgKl9QQUNLQUdFX1JBUExfTElNSVRfVURXOgor ICogSW4gZG9jcywgdGhlc2UgZmllbGRzIG1heSBiZSBkZWZpbmVkIHJlbGF0aXZlIHRvIHRoZSBl bnRpcmUgNjQtYml0CisgKiByZWdpc3RlciwgYnV0IGhlcmUgdGhleSBhcmUgZGVmaW5lZCByZWxh dGl2ZSB0byB0aGUgMzItYml0IGJvdW5kYXJ5LgorICovCisjZGVmaW5lICAgUEtHX1BXUl9MSU1f MgkJCVJFR19HRU5NQVNLKDE0LCAwKQkvLyA0NjozMgorI2RlZmluZSAgIFBLR19QV1JfTElNXzJf RU4JCVJFR19CSVQoMTUpCQkvLyA0Nzo0NworI2RlZmluZSAgIFBLR19QV1JfTElNXzJfVElNRQkJ UkVHX0dFTk1BU0soMjMsIDE3KQkvLyA1NTo0OQorCisvKgorICogKl9QQUNLQUdFX1BPV0VSX1NL VV9VTklUIC0gZmllbGRzIHNwZWNpZnlpbmcgc2NhbGluZyBmb3IgUENVIHF1YW50aXRpZXMuCisg KiAtIFBLR19QV1JfVU5JVCAtIFBvd2VyIFVuaXRzIHVzZWQgZm9yIHBvd2VyIGNvbnRyb2wgcmVn aXN0ZXJzLiBUaGUKKyAqICAgYWN0dWFsIHVuaXQgdmFsdWUgaXMgY2FsY3VsYXRlZCBieSAxIFcg LyBQb3dlcigyLFBLR19QV1JfVU5JVCkuCisgKiAtIFBLR19FTkVSR1lfVU5JVCAtIEVuZXJneSBV bml0cyB1c2VkIGZvciBwb3dlciBjb250cm9sIHJlZ2lzdGVycy4gVGhlCisgKiAgIGFjdHVhbCB1 bml0IHZhbHVlIGlzIGNhbGN1bGF0ZWQgYnkgMSBKIC8gUG93ZXIoMixQS0dfRU5FUkdZX1VOSVQp LgorICogLSBQS0dfVElNRV9VTklUIC0gVGltZSBVbml0cyB1c2VkIGZvciBwb3dlciBjb250cm9s IHJlZ2lzdGVycy4gVGhlCisgKiAgIGFjdHVhbCB1bml0IHZhbHVlIGlzIGNhbGN1bGF0ZWQgYnkg MSBzIC8gUG93ZXIoMixQS0dfVElNRV9VTklUKS4KKyAqLworI2RlZmluZSAgIFBLR19QV1JfVU5J VAkJCVJFR19HRU5NQVNLKDMsIDApCisjZGVmaW5lICAgUEtHX0VORVJHWV9VTklUCQlSRUdfR0VO TUFTSygxMiwgOCkKKyNkZWZpbmUgICBQS0dfVElNRV9VTklUCQkJUkVHX0dFTk1BU0soMTksIDE2 KQorCisvKgorICogKl9QQUNLQUdFX1BPV0VSX1NLVSAtIFNLVSBwb3dlciBhbmQgdGltaW5nIHBh cmFtZXRlcnMuCisgKiBVc2VkIGhlcmVpbiBhcyBhIDY0LWJpdCBiaXQgcmVnaXN0ZXIuCisgKiBU aGVzZSBtYXNrcyBhcmUgZGVmaW5lZCB1c2luZyBHRU5NQVNLX1VMTCBhcyBSRUdfR0VOTUFTSyBp cyBsaW1pdGVkIHRvIHUzMgorICogYW5kIGFzIEdFTk1BU0sgaXMgImxvbmciIGFuZCB0aGVyZWZv cmUgMzItYml0cyBvbiBhIDMyLWJpdCBzeXN0ZW0uCisgKiBQS0dfUEtHX1REUCwgUEtHX01JTl9Q V1IsIGFuZCBQS0dfTUFYX1BXUiBhcmUgc2NhbGVkIGluIHRoZSBzYW1lIHdheSBhcworICogUEtH X1BXUl9MSU1fKiwgYWJvdmUuCisgKiBQS0dfTUFYX1dJTiBoYXMgc3ViLWZpZWxkcyBmb3IgeCBh bmQgeSwgYW5kIGhhcyB0aGUgdmFsdWU6IGlzIDEueCAqIDJeeS4KKyAqLworI2RlZmluZSAgIFBL R19QS0dfVERQCQkJR0VOTUFTS19VTEwoMTQsIDApCisjZGVmaW5lICAgUEtHX01JTl9QV1IJCQlH RU5NQVNLX1VMTCgzMCwgMTYpCisjZGVmaW5lICAgUEtHX01BWF9QV1IJCQlHRU5NQVNLX1VMTCg0 NiwgMzIpCisjZGVmaW5lICAgUEtHX01BWF9XSU4JCQlHRU5NQVNLX1VMTCg1NCwgNDgpCisjZGVm aW5lICAgICBQS0dfTUFYX1dJTl9ZCQlHRU5NQVNLX1VMTCg1NCwgNTMpCisjZGVmaW5lICAgICBQ S0dfTUFYX1dJTl9YCQlHRU5NQVNLX1VMTCg1MiwgNDgpCisKIC8qCiAgKiBMb2dpY2FsIENvbnRl eHQgcmVncwogICovCi0tIAoyLjMxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=