From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arto Merilainen Subject: [PATCH 3/4] drm/tegra: Add VIC support Date: Thu, 21 May 2015 16:20:24 +0300 Message-ID: <1432214425-27137-4-git-send-email-amerilainen@nvidia.com> References: <1432214425-27137-1-git-send-email-amerilainen@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from hqemgate14.nvidia.com (hqemgate14.nvidia.com [216.228.121.143]) by gabe.freedesktop.org (Postfix) with ESMTP id 1A7F56E042 for ; Thu, 21 May 2015 06:22:08 -0700 (PDT) In-Reply-To: <1432214425-27137-1-git-send-email-amerilainen@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com Cc: achew@nvidia.com, dnibade@nvidia.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, srasal@nvidia.com, linux-tegra@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZpZGVvIEltYWdlIENvbXBvc2l0b3IgZW5naW5l IHdoaWNoCmNhbiBiZSB1c2VkIGZvciAyZCBvcGVyYXRpb25zLgoKVGhlIGVuZ2luZSBoYXMgYSBt aWNyb2NvbnRyb2xsZXIgKEZhbGNvbikgdGhhdCBhY3RzIGFzIGEgZnJvbnRlbmQKZm9yIHRoZSBy ZXN0IG9mIHRoZSB1bml0LiBJbiBvcmRlciB0byBwcm9wZXJseSB1dGlsaXplIHRoZSBlbmdpbmUs CnRoZSBmcm9udGVuZCBtdXN0IGJlIGJvb3RlZCBiZWZvcmUgcHVzaGluZyBhbnkgY29tbWFuZHMu CgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ2hldyA8YWNoZXdAbnZpZGlhLmNvbT4KU2lnbmVkLW9m Zi1ieTogQXJ0byBNZXJpbGFpbmVuIDxhbWVyaWxhaW5lbkBudmlkaWEuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS90ZWdyYS9NYWtlZmlsZSB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2RybS5jICAgIHwgICA5ICstCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmggICAgfCAgIDEg KwogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5jICAgIHwgNTkzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvdmljLmggICAg fCAxMTYgKysrKysrKysKIGluY2x1ZGUvbGludXgvaG9zdDF4LmggICAgICAgICB8ICAgMSArCiA2 IGZpbGVzIGNoYW5nZWQsIDcyMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90ZWdyYS92aWMuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS90ZWdyYS92aWMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS90ZWdyYS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9NYWtlZmlsZQppbmRl eCAyYzY2YThkYjlkYTQuLjNiYzM1NjZlMDBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3RlZ3JhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9NYWtlZmlsZQpAQCAt MTMsNiArMTMsNyBAQCB0ZWdyYS1kcm0teSA6PSBcCiAJc29yLm8gXAogCWRwYXV4Lm8gXAogCWdy MmQubyBcCi0JZ3IzZC5vCisJZ3IzZC5vIFwKKwl2aWMubwogCiBvYmotJChDT05GSUdfRFJNX1RF R1JBKSArPSB0ZWdyYS1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2Ry bS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jCmluZGV4IGJmYWQxNWE5MTNhMC4uZDk0 N2Y1ZjRkODAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly aWdodCAoQykgMjAxMiBBdmlvbmljIERlc2lnbiBHbWJICi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt MjAxMyBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp Z2h0IChDKSAyMDEyLTIwMTUgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEwNDgsNiArMTA0OCw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGhvc3QxeF9kcm1fc3ViZGV2c1tdID0g ewogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LWRjIiwgfSwKIAl7IC5jb21wYXRp YmxlID0gIm52aWRpYSx0ZWdyYTEyNC1zb3IiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlh LHRlZ3JhMTI0LWhkbWkiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXZp YyIsIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCkBAIC0xMDk3LDggKzEwOTgsMTQgQEAg c3RhdGljIGludCBfX2luaXQgaG9zdDF4X2RybV9pbml0KHZvaWQpCiAJaWYgKGVyciA8IDApCiAJ CWdvdG8gdW5yZWdpc3Rlcl9ncjJkOwogCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVy KCZ0ZWdyYV92aWNfZHJpdmVyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byB1bnJlZ2lzdGVyX2dy M2Q7CisKIAlyZXR1cm4gMDsKIAordW5yZWdpc3Rlcl9ncjNkOgorCXBsYXRmb3JtX2RyaXZlcl91 bnJlZ2lzdGVyKCZ0ZWdyYV9ncjNkX2RyaXZlcik7CiB1bnJlZ2lzdGVyX2dyMmQ6CiAJcGxhdGZv cm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRlZ3JhX2dyMmRfZHJpdmVyKTsKIHVucmVnaXN0ZXJfZHBh dXg6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmggYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvZHJtLmgKaW5kZXggMGU3NzU2ZTcyMGM1Li5hOWMwMmE4MGQ2YmYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dGVncmEvZHJtLmgKQEAgLTI3NSw1ICsyNzUsNiBAQCBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2Ry aXZlciB0ZWdyYV9oZG1pX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRl Z3JhX2RwYXV4X2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX2dy MmRfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfZ3IzZF9kcml2 ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV92aWNfZHJpdmVyOwogCiAj ZW5kaWYgLyogSE9TVDFYX0RSTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVn cmEvdmljLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvdmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iN2M1YTk2Njk3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdGVncmEvdmljLmMKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvaG9zdDF4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPHNvYy90ZWdyYS9w bWMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgorCisjaW5jbHVkZSAiZHJtLmgiCisjaW5j bHVkZSAiZ2VtLmgiCisjaW5jbHVkZSAidmljLmgiCisKKyNkZWZpbmUgVklDX0lETEVfVElNRU9V VF9ERUZBVUxUCTEwMDAwCS8qIDEwIG1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBWSUNfSURMRV9D SEVDS19QRVJJT0QJCTEwCS8qIDEwIHVzZWMgKi8KKworc3RydWN0IHZpYzsKKworc3RydWN0IHZp Y19jb25maWcgeworCS8qIGZpcm13YXJlIG5hbWUgKi8KKwljaGFyICp1Y29kZV9uYW1lOworCisJ LyogY2xhc3MgaWQgKi8KKwl1MzIgY2xhc3NfaWQ7CisKKwkvKiBwb3dlcmdhdGUgaWQgKi8KKwlp bnQgcG93ZXJnYXRlX2lkOworfTsKKworc3RydWN0IHZpYyB7CisJc3RydWN0IHsKKwkJdTMyIGJp bl9kYXRhX29mZnNldDsKKwkJdTMyIGRhdGFfb2Zmc2V0OworCQl1MzIgZGF0YV9zaXplOworCQl1 MzIgY29kZV9vZmZzZXQ7CisJCXUzMiBzaXplOworCX0gb3MsIGZjZTsKKworCXN0cnVjdCB0ZWdy YV9ibyAqdWNvZGVfYm87CisJYm9vbCB1Y29kZV92YWxpZDsKKwl2b2lkICp1Y29kZV92YWRkcjsK KworCWJvb2wgYm9vdGVkOworCisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCB0ZWdyYV9k cm1fY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaG9zdDF4X2NoYW5uZWwgKmNoYW5uZWw7CisJc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg Y2xrICpjbGs7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKKworCS8qIFBsYXRmb3JtIGNv bmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgdmljX2NvbmZpZyAqY29uZmlnOworCisJLyogZm9yIGZp cmV3YWxsIC0gdGhpcyBkZXRlcm1pbmVzIGlmIG1ldGhvZCAxIHNob3VsZCBiZSByZWdhcmRlZAor CSAqIGFzIGFuIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwlib29sIG1ldGhvZF9kYXRhX2lzX2FkZHJf cmVnOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmljICp0b192aWMoc3RydWN0IHRlZ3Jh X2RybV9jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNsaWVudCwgc3Ry dWN0IHZpYywgY2xpZW50KTsKK30KKwordm9pZCB2aWNfd3JpdGVsKHN0cnVjdCB2aWMgKnZpYywg dTMyIHYsIHUzMiByKQoreworCXdyaXRlbCh2LCB2aWMtPnJlZ3MgKyByKTsKK30KKwordTMyIHZp Y19yZWFkbChzdHJ1Y3QgdmljICp2aWMsIHUzMiByKQoreworCXJldHVybiByZWFkbCh2aWMtPnJl Z3MgKyByKTsKK30KKworc3RhdGljIGludCB2aWNfd2FpdF9pZGxlKHN0cnVjdCB2aWMgKnZpYykK K3sKKwl1MzIgdGltZW91dCA9IFZJQ19JRExFX1RJTUVPVVRfREVGQVVMVDsKKworCWRvIHsKKwkJ dTMyIGNoZWNrID0gbWluX3QodTMyLCBWSUNfSURMRV9DSEVDS19QRVJJT0QsIHRpbWVvdXQpOwor CQl1MzIgdyA9IHZpY19yZWFkbCh2aWMsIE5WX1BWSUNfRkFMQ09OX0lETEVTVEFURSk7CisKKwkJ aWYgKCF3KQorCQkJcmV0dXJuIDA7CisKKwkJdWRlbGF5KFZJQ19JRExFX0NIRUNLX1BFUklPRCk7 CisJCXRpbWVvdXQgLT0gY2hlY2s7CisJfSB3aGlsZSAodGltZW91dCk7CisKKwlkZXZfZXJyKHZp Yy0+ZGV2LCAidmljIGlkbGUgdGltZW91dCIpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisK K3N0YXRpYyBpbnQgdmljX2RtYV93YWl0X2lkbGUoc3RydWN0IHZpYyAqdmljKQoreworCXUzMiB0 aW1lb3V0ID0gVklDX0lETEVfVElNRU9VVF9ERUZBVUxUOworCisJZG8geworCQl1MzIgY2hlY2sg PSBtaW5fdCh1MzIsIFZJQ19JRExFX0NIRUNLX1BFUklPRCwgdGltZW91dCk7CisJCXUzMiBkbWF0 cmZjbWQgPSB2aWNfcmVhZGwodmljLCBOVl9QVklDX0ZBTENPTl9ETUFUUkZDTUQpOworCisJCWlm IChkbWF0cmZjbWQgJiBETUFUUkZDTURfSURMRSkKKwkJCXJldHVybiAwOworCisJCXVkZWxheShW SUNfSURMRV9DSEVDS19QRVJJT0QpOworCQl0aW1lb3V0IC09IGNoZWNrOworCX0gd2hpbGUgKHRp bWVvdXQpOworCisJZGV2X2Vycih2aWMtPmRldiwgImRtYSBpZGxlIHRpbWVvdXQiKTsKKworCXJl dHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IHZpY19kbWFfcGFfdG9faW50ZXJuYWxf MjU2YihzdHJ1Y3QgdmljICp2aWMsIHBoeXNfYWRkcl90IHBhLAorCQkJCSAgICAgICB1MzIgaW50 ZXJuYWxfb2Zmc2V0LCBib29sIGltZW0pCit7CisJdTMyIGNtZCA9IERNQVRSRkNNRF9TSVpFXzI1 NkI7CisKKwlpZiAoaW1lbSkKKwkJY21kIHw9IERNQVRSRkNNRF9JTUVNOworCisJdmljX3dyaXRl bCh2aWMsIERNQVRSRk1PRkZTX09GRlMoaW50ZXJuYWxfb2Zmc2V0KSwKKwkJICAgTlZfUFZJQ19G QUxDT05fRE1BVFJGTU9GRlMpOworCXZpY193cml0ZWwodmljLCBETUFUUkZGQk9GRlNfT0ZGUyhw YSksCisJCSAgIE5WX1BWSUNfRkFMQ09OX0RNQVRSRkZCT0ZGUyk7CisJdmljX3dyaXRlbCh2aWMs IGNtZCwgTlZfUFZJQ19GQUxDT05fRE1BVFJGQ01EKTsKKworCXJldHVybiB2aWNfZG1hX3dhaXRf aWRsZSh2aWMpOworfQorCitzdGF0aWMgaW50IHZpY19zZXR1cF91Y29kZV9pbWFnZShzdHJ1Y3Qg dmljICp2aWMsCisJCQkJIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfZncpCit7CisJLyog aW1hZ2UgZGF0YSBpcyBsaXR0bGUgZW5kaWFuLiAqLworCXUzMiAqdWNvZGVfdmFkZHIgPSB2aWMt PnVjb2RlX3ZhZGRyOworCXN0cnVjdCB1Y29kZV92MV92aWMgdWNvZGU7CisJaW50IHc7CisKKwkv KiBjb3B5IHRoZSB3aG9sZSB0aGluZyB0YWtpbmcgaW50byBhY2NvdW50IGVuZGlhbm5lc3MgKi8K Kwlmb3IgKHcgPSAwOyB3IDwgdWNvZGVfZnctPnNpemUgLyBzaXplb2YodTMyKTsgdysrKQorCQl1 Y29kZV92YWRkclt3XSA9IGxlMzJfdG9fY3B1KCgodTMyICopdWNvZGVfZnctPmRhdGEpW3ddKTsK KworCXVjb2RlLmJpbl9oZWFkZXIgPSAoc3RydWN0IHVjb2RlX2Jpbl9oZWFkZXJfdjFfdmljICop dWNvZGVfdmFkZHI7CisKKwkvKiBlbmRpYW4gcHJvYmxlbXMgd291bGQgc2hvdyB1cCByaWdodCBo ZXJlICovCisJaWYgKHVjb2RlLmJpbl9oZWFkZXItPmJpbl9tYWdpYyAhPSAweDEwZGUpIHsKKwkJ ZGV2X2Vycih2aWMtPmRldiwgImZhaWxlZCB0byBnZXQgZmlybXdhcmUgbWFnaWMiKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVjb2RlLmJpbl9oZWFkZXItPmJpbl92ZXIgIT0gMSkg eworCQlkZXZfZXJyKHZpYy0+ZGV2LCAidW5zdXBwb3J0ZWQgZmlybXdhcmUgdmVyc2lvbiIpOwor CQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwkvKiBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4gd2hh dCBmaXJtd2FyZSB0aGlua3MgKi8KKwlpZiAodWNvZGUuYmluX2hlYWRlci0+YmluX3NpemUgPiB1 Y29kZV9mdy0+c2l6ZSkgeworCQlkZXZfZXJyKHZpYy0+ZGV2LCAidWNvZGUgaW1hZ2Ugc2l6ZSBp bmNvbnNpc3RlbmN5Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVjb2RlLm9zX2hlYWRl ciA9IChzdHJ1Y3QgdWNvZGVfb3NfaGVhZGVyX3YxX3ZpYyAqKQorCQkoKCh2b2lkICopdWNvZGVf dmFkZHIpICsKKwkJdWNvZGUuYmluX2hlYWRlci0+b3NfYmluX2hlYWRlcl9vZmZzZXQpOworCXZp Yy0+b3Muc2l6ZSA9IHVjb2RlLmJpbl9oZWFkZXItPm9zX2Jpbl9zaXplOworCXZpYy0+b3MuYmlu X2RhdGFfb2Zmc2V0ID0gdWNvZGUuYmluX2hlYWRlci0+b3NfYmluX2RhdGFfb2Zmc2V0OworCXZp Yy0+b3MuY29kZV9vZmZzZXQgPSB1Y29kZS5vc19oZWFkZXItPm9zX2NvZGVfb2Zmc2V0OworCXZp Yy0+b3MuZGF0YV9vZmZzZXQgPSB1Y29kZS5vc19oZWFkZXItPm9zX2RhdGFfb2Zmc2V0OworCXZp Yy0+b3MuZGF0YV9zaXplID0gdWNvZGUub3NfaGVhZGVyLT5vc19kYXRhX3NpemU7CisKKwl1Y29k ZS5mY2VfaGVhZGVyID0gKHN0cnVjdCB1Y29kZV9mY2VfaGVhZGVyX3YxX3ZpYyAqKQorCQkoKCh2 b2lkICopdWNvZGVfdmFkZHIpICsKKwkJdWNvZGUuYmluX2hlYWRlci0+ZmNlX2Jpbl9oZWFkZXJf b2Zmc2V0KTsKKwl2aWMtPmZjZS5zaXplID0gdWNvZGUuZmNlX2hlYWRlci0+ZmNlX3Vjb2RlX3Np emU7CisJdmljLT5mY2UuZGF0YV9vZmZzZXQgPSB1Y29kZS5iaW5faGVhZGVyLT5mY2VfYmluX2Rh dGFfb2Zmc2V0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmljX3JlYWRfdWNvZGUo c3RydWN0IHZpYyAqdmljKQoreworCXN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQgPSAmdmlj LT5jbGllbnQuYmFzZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRh KGNsaWVudC0+cGFyZW50KTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX2Z3OworCWlu dCBlcnI7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ1Y29kZV9mdywgdmljLT5jb25maWct PnVjb2RlX25hbWUsIHZpYy0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIodmljLT5kZXYs ICJmYWlsZWQgdG8gZ2V0IGZpcm13YXJlXG4iKTsKKwkJZ290byBlcnJfcmVxdWVzdF9maXJtd2Fy ZTsKKwl9CisKKwl2aWMtPnVjb2RlX2JvID0gdGVncmFfYm9fY3JlYXRlKGRldiwgdWNvZGVfZnct PnNpemUsIDApOworCWlmIChJU19FUlIodmljLT51Y29kZV9ibykpIHsKKwkJZGV2X2Vycih2aWMt PmRldiwgImRtYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKwkJZXJyID0gUFRSX0VSUih2 aWMtPnVjb2RlX2JvKTsKKwkJZ290byBlcnJfYWxsb2NfaW92YTsKKwl9CisKKwkvKiBnZXQgdmFk ZHIgZm9yIHRoZSB1Y29kZSAqLworCWlmICghdmljLT51Y29kZV9iby0+dmFkZHIpCisJCXZpYy0+ dWNvZGVfdmFkZHIgPSB2bWFwKHZpYy0+dWNvZGVfYm8tPnBhZ2VzLAorCQkJCQl2aWMtPnVjb2Rl X2JvLT5udW1fcGFnZXMsIFZNX01BUCwKKwkJCQkJcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tF Uk5FTCkpOworCWVsc2UKKwkJdmljLT51Y29kZV92YWRkciA9IHZpYy0+dWNvZGVfYm8tPnZhZGRy OworCisJZXJyID0gdmljX3NldHVwX3Vjb2RlX2ltYWdlKHZpYywgdWNvZGVfZncpOworCWlmIChl cnIpIHsKKwkJZGV2X2Vycih2aWMtPmRldiwgImZhaWxlZCB0byBwYXJzZSBmaXJtd2FyZSBpbWFn ZVxuIik7CisJCWdvdG8gZXJyX3NldHVwX3Vjb2RlX2ltYWdlOworCX0KKworCXZpYy0+dWNvZGVf dmFsaWQgPSB0cnVlOworCisJcmVsZWFzZV9maXJtd2FyZSh1Y29kZV9mdyk7CisKKwlyZXR1cm4g MDsKKworZXJyX3NldHVwX3Vjb2RlX2ltYWdlOgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJnZp Yy0+dWNvZGVfYm8tPmdlbSk7CitlcnJfYWxsb2NfaW92YToKKwlyZWxlYXNlX2Zpcm13YXJlKHVj b2RlX2Z3KTsKK2Vycl9yZXF1ZXN0X2Zpcm13YXJlOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBpbnQgdmljX2Jvb3Qoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB2aWMgKnZpYyA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBvZmZzZXQ7CisJaW50IGVyciA9IDA7CisKKwlp ZiAodmljLT5ib290ZWQpCisJCXJldHVybiAwOworCisJaWYgKCF2aWMtPnVjb2RlX3ZhbGlkKSB7 CisJCWVyciA9IHZpY19yZWFkX3Vjb2RlKHZpYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJy OworCX0KKworCS8qIGVuc3VyZSB0aGF0IHRoZSBlbmdpbmUgaXMgaW4gc2FuZSBzdGF0ZSAqLwor CXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHZpYy0+cnN0KTsKKwl1ZGVsYXkoMTApOworCXJlc2V0X2Nv bnRyb2xfZGVhc3NlcnQodmljLT5yc3QpOworCisJLyogc2V0dXAgY2xvY2tnYXRpbmcgcmVnaXN0 ZXJzICovCisJdmljX3dyaXRlbCh2aWMsIENHX0lETEVfQ0dfRExZX0NOVCg0KSB8CisJCQlDR19J RExFX0NHX0VOIHwKKwkJCUNHX1dBS0VVUF9ETFlfQ05UKDQpLAorCQkgICBOVl9QVklDX01JU0Nf UFJJX1ZJQ19DRyk7CisKKwkvKiBzZXJ2aWNlIGFsbCBkbWEgcmVxdWVzdHMgKi8KKwl2aWNfd3Jp dGVsKHZpYywgMCwgTlZfUFZJQ19GQUxDT05fRE1BQ1RMKTsKKworCS8qIHNldHVwIGRtYSBiYXNl IGFkZHJlc3MgKi8KKwl2aWNfd3JpdGVsKHZpYywgKHZpYy0+dWNvZGVfYm8tPnBhZGRyICsgdmlj LT5vcy5iaW5fZGF0YV9vZmZzZXQpID4+IDgsCisJCSAgIE5WX1BWSUNfRkFMQ09OX0RNQVRSRkJB U0UpOworCisJLyogZG1hIHVjb2RlIGRhdGEgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8 IHZpYy0+b3MuZGF0YV9zaXplOyBvZmZzZXQgKz0gMjU2KQorCQl2aWNfZG1hX3BhX3RvX2ludGVy bmFsXzI1NmIodmljLAorCQkJCQkgICAgIHZpYy0+b3MuZGF0YV9vZmZzZXQgKyBvZmZzZXQsCisJ CQkJCSAgICAgb2Zmc2V0LCBmYWxzZSk7CisKKwkvKiBkbWEgdWNvZGUgKi8KKwl2aWNfZG1hX3Bh X3RvX2ludGVybmFsXzI1NmIodmljLCB2aWMtPm9zLmNvZGVfb2Zmc2V0LCAwLCB0cnVlKTsKKwor CS8qIHNldHVwIGZhbGNvbiBpbnRlcnJ1cHRzIGFuZCBlbmFibGUgaW50ZXJmYWNlICovCisJdmlj X3dyaXRlbCh2aWMsIElSUU1TRVRfRVhUKDB4ZmYpIHwKKwkJCUlSUU1TRVRfU1dHRU4xX1NFVCB8 CisJCQlJUlFNU0VUX1NXR0VOMF9TRVQgfAorCQkJSVJRTVNFVF9FWFRFUlJfU0VUIHwKKwkJCUlS UU1TRVRfSEFMVF9TRVQgfAorCQkJSVJRTVNFVF9XRFRNUl9TRVQsCisJCSAgIE5WX1BWSUNfRkFM Q09OX0lSUU1TRVQpOworCXZpY193cml0ZWwodmljLCBJUlFERVNUX0hPU1RfRVhUKDBYZmYpIHwK KwkJCUlSUURFU1RfSE9TVF9TV0dFTjFfSE9TVCB8CisJCQlJUlFERVNUX0hPU1RfU1dHRU4wX0hP U1QgfAorCQkJSVJRREVTVF9IT1NUX0VYVEVSUl9IT1NUIHwKKwkJCUlSUURFU1RfSE9TVF9IQUxU X0hPU1QsCisJCSAgICBOVl9QVklDX0ZBTENPTl9JUlFERVNUKTsKKworCS8qIGVuYWJsZSBtZXRo b2QgYW5kIGNvbnRleHQgc3dpdGNoIGludGVyZmFjZXMgKi8KKwl2aWNfd3JpdGVsKHZpYywgSVRG RU5fTVRIREVOX0VOQUJMRSB8CisJCQlJVEZFTl9DVFhFTl9FTkFCTEUsCisJCSAgIE5WX1BWSUNf RkFMQ09OX0lURkVOKTsKKworCS8qIGJvb3QgZmFsY29uICovCisJdmljX3dyaXRlbCh2aWMsIEJP T1RWRUNfVkVDKDApLCBOVl9QVklDX0ZBTENPTl9CT09UVkVDKTsKKwl2aWNfd3JpdGVsKHZpYywg Q1BVQ1RMX1NUQVJUQ1BVLCBOVl9QVklDX0ZBTENPTl9DUFVDVEwpOworCisJZXJyID0gdmljX3dh aXRfaWRsZSh2aWMpOworCWlmIChlcnIgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgImJvb3QgZmFp bGVkIGR1ZSB0byB0aW1lb3V0Iik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGFwcGxp Y2F0aW9uIGlkIGFuZCBzZXQtdXAgRkNFIHVjb2RlIGFkZHJlc3MgKi8KKwl2aWNfd3JpdGVsKHZp YywgTlZBMEI2X1ZJREVPX0NPTVBPU0lUT1JfU0VUX0FQUExJQ0FUSU9OX0lEID4+IDIsCisJCSAg ICBOVl9QVklDX0ZBTENPTl9NRVRIT0RfMCk7CisJdmljX3dyaXRlbCh2aWMsIDEsIE5WX1BWSUNf RkFMQ09OX01FVEhPRF8xKTsKKwl2aWNfd3JpdGVsKHZpYywgTlZBMEI2X1ZJREVPX0NPTVBPU0lU T1JfU0VUX0ZDRV9VQ09ERV9TSVpFID4+IDIsCisJCSAgICBOVl9QVklDX0ZBTENPTl9NRVRIT0Rf MCk7CisJdmljX3dyaXRlbCh2aWMsIHZpYy0+ZmNlLnNpemUsIE5WX1BWSUNfRkFMQ09OX01FVEhP RF8xKTsKKwl2aWNfd3JpdGVsKHZpYywgTlZBMEI2X1ZJREVPX0NPTVBPU0lUT1JfU0VUX0ZDRV9V Q09ERV9PRkZTRVQgPj4gMiwKKwkJICAgIE5WX1BWSUNfRkFMQ09OX01FVEhPRF8wKTsKKwl2aWNf d3JpdGVsKHZpYywgKHZpYy0+dWNvZGVfYm8tPnBhZGRyICsgdmljLT5mY2UuZGF0YV9vZmZzZXQp ID4+IDgsCisJCSAgICBOVl9QVklDX0ZBTENPTl9NRVRIT0RfMSk7CisKKwllcnIgPSB2aWNfd2Fp dF9pZGxlKHZpYyk7CisJaWYgKGVyciAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IHNldCBhcHBsaWNhdGlvbiBpZCBhbmQgZmNlIGJhc2UiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK Kwl2aWMtPmJvb3RlZCA9IHRydWU7CisKKwlkZXZfaW5mbyhkZXYsICJib290ZWQiKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHZpY19pbml0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpj bGllbnQpCit7CisJc3RydWN0IHRlZ3JhX2RybV9jbGllbnQgKmRybSA9IGhvc3QxeF90b19kcm1f Y2xpZW50KGNsaWVudCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0 YShjbGllbnQtPnBhcmVudCk7CisJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCB2aWMgKnZpYyA9IHRvX3ZpYyhkcm0pOworCWludCBlcnI7CisKKwlp ZiAodGVncmEtPmRvbWFpbikgeworCQllcnIgPSBpb21tdV9hdHRhY2hfZGV2aWNlKHRlZ3JhLT5k b21haW4sIHZpYy0+ZGV2KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIodmljLT5kZXYs ICJmYWlsZWQgdG8gYXR0YWNoIHRvIGRvbWFpbjogJWRcbiIsCisJCQkJZXJyKTsKKwkJCXJldHVy biBlcnI7CisJCX0KKworCQl2aWMtPmRvbWFpbiA9IHRlZ3JhLT5kb21haW47CisJfQorCisJdmlj LT5jaGFubmVsID0gaG9zdDF4X2NoYW5uZWxfcmVxdWVzdChjbGllbnQtPmRldik7CisJaWYgKCF2 aWMtPmNoYW5uZWwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2xpZW50LT5zeW5jcHRzWzBdID0g aG9zdDF4X3N5bmNwdF9yZXF1ZXN0KGNsaWVudC0+ZGV2LCAwKTsKKwlpZiAoIWNsaWVudC0+c3lu Y3B0c1swXSkgeworCQlob3N0MXhfY2hhbm5lbF9mcmVlKHZpYy0+Y2hhbm5lbCk7CisJCXJldHVy biAtRU5PTUVNOworCX0KKworCXJldHVybiB0ZWdyYV9kcm1fcmVnaXN0ZXJfY2xpZW50KHRlZ3Jh LCBkcm0pOworfQorCitzdGF0aWMgaW50IHZpY19leGl0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpj bGllbnQpCit7CisJc3RydWN0IHRlZ3JhX2RybV9jbGllbnQgKmRybSA9IGhvc3QxeF90b19kcm1f Y2xpZW50KGNsaWVudCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0 YShjbGllbnQtPnBhcmVudCk7CisJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCB2aWMgKnZpYyA9IHRvX3ZpYyhkcm0pOworCWludCBlcnI7CisKKwll cnIgPSB0ZWdyYV9kcm1fdW5yZWdpc3Rlcl9jbGllbnQodGVncmEsIGRybSk7CisJaWYgKGVyciA8 IDApCisJCXJldHVybiBlcnI7CisKKwlob3N0MXhfc3luY3B0X2ZyZWUoY2xpZW50LT5zeW5jcHRz WzBdKTsKKwlob3N0MXhfY2hhbm5lbF9mcmVlKHZpYy0+Y2hhbm5lbCk7CisKKwkvKiB1Y29kZSBp cyBubyBsb25nZXIgYXZhaWxhYmxlLiByZWxlYXNlIGl0ICovCisJaWYgKHZpYy0+dWNvZGVfdmFs aWQpIHsKKwkJLyogZmlyc3QsIGVuc3VyZSB0aGF0IHZpYyBpcyBub3QgdXNpbmcgaXQgKi8KKwkJ cmVzZXRfY29udHJvbF9hc3NlcnQodmljLT5yc3QpOworCQl1ZGVsYXkoMTApOworCQlyZXNldF9j b250cm9sX2RlYXNzZXJ0KHZpYy0+cnN0KTsKKworCQkvKiAuLnRoZW4gcmVsZWFzZSB0aGUgdWNv ZGUgKi8KKwkJaWYgKCF2aWMtPnVjb2RlX2JvLT52YWRkcikKKwkJCXZ1bm1hcCh2aWMtPnVjb2Rl X3ZhZGRyKTsKKwkJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmdmljLT51Y29kZV9iby0+Z2VtKTsK KwkJdmljLT51Y29kZV92YWxpZCA9IGZhbHNlOworCX0KKworCWlmICh2aWMtPmRvbWFpbikgewor CQlpb21tdV9kZXRhY2hfZGV2aWNlKHZpYy0+ZG9tYWluLCB2aWMtPmRldik7CisJCXZpYy0+ZG9t YWluID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBo b3N0MXhfY2xpZW50X29wcyB2aWNfY2xpZW50X29wcyA9IHsKKwkuaW5pdCA9IHZpY19pbml0LAor CS5leGl0ID0gdmljX2V4aXQsCit9OworCitzdGF0aWMgaW50IHZpY19vcGVuX2NoYW5uZWwoc3Ry dWN0IHRlZ3JhX2RybV9jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgc3RydWN0IHRlZ3JhX2RybV9j b250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCB2aWMgKnZpYyA9IHRvX3ZpYyhjbGllbnQpOwor CWludCBlcnI7CisKKwllcnIgPSB2aWNfYm9vdCh2aWMtPmRldik7CisJaWYgKGVycikKKwkJcmV0 dXJuIGVycjsKKworCWNvbnRleHQtPmNoYW5uZWwgPSBob3N0MXhfY2hhbm5lbF9nZXQodmljLT5j aGFubmVsKTsKKwlpZiAoIWNvbnRleHQtPmNoYW5uZWwpCisJCXJldHVybiAtRU5PTUVNOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpY19jbG9zZV9jaGFubmVsKHN0cnVjdCB0ZWdy YV9kcm1fY29udGV4dCAqY29udGV4dCkKK3sKKwlob3N0MXhfY2hhbm5lbF9wdXQoY29udGV4dC0+ Y2hhbm5lbCk7Cit9CisKK3N0YXRpYyBpbnQgdmljX2lzX2FkZHJfcmVnKHN0cnVjdCBkZXZpY2Ug KmRldiwgdTMyIGNsYXNzLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXN0cnVjdCB2aWMgKnZp YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJLyogaGFuZGxlIGhvc3QgY2xhc3MgKi8KKwlp ZiAoY2xhc3MgPT0gSE9TVDFYX0NMQVNTX0hPU1QxWCkgeworCQlpZiAob2Zmc2V0ID09IDB4MmIp CisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIHdyaXRlIHRhcmdl dHMgdG93YXJkcyBtZXRob2QgMS4gY2hlY2sgc3Rhc2hlZCB2YWx1ZSAqLworCWlmIChvZmZzZXQg PT0gTlZfUFZJQ19GQUxDT05fTUVUSE9EXzEgPj4gMikKKwkJcmV0dXJuIHZpYy0+bWV0aG9kX2Rh dGFfaXNfYWRkcl9yZWc7CisKKwkvKiB3cml0ZSB0YXJnZXRzIHRvIG1ldGhvZCAwLiBkZXRlcm1p bmUgaWYgdGhlIG1ldGhvZCB0YWtlcyBhbgorCSAqIGFkZHJlc3MgYXMgYSBwYXJhbWV0ZXIgKi8K KwlpZiAob2Zmc2V0ID09IE5WX1BWSUNfRkFMQ09OX01FVEhPRF8wID4+IDIpIHsKKwkJdTMyIG1l dGhvZCA9IHZhbCA8PCAyOworCisJCWlmICgobWV0aG9kID49IDB4NDAwICYmIG1ldGhvZCA8PSAw eDVkYykgfHwKKwkJICAgIChtZXRob2QgPj0gMHg3MjAgJiYgbWV0aG9kIDw9IDB4NzM4KSkKKwkJ CXZpYy0+bWV0aG9kX2RhdGFfaXNfYWRkcl9yZWcgPSB0cnVlOworCQllbHNlCisJCQl2aWMtPm1l dGhvZF9kYXRhX2lzX2FkZHJfcmVnID0gZmFsc2U7CisJfQorCisJLyogZGVmYXVsdCB0byBmYWxz ZSAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9kcm1f Y2xpZW50X29wcyB2aWNfb3BzID0geworCS5vcGVuX2NoYW5uZWwgPSB2aWNfb3Blbl9jaGFubmVs LAorCS5jbG9zZV9jaGFubmVsID0gdmljX2Nsb3NlX2NoYW5uZWwsCisJLmlzX2FkZHJfcmVnID0g dmljX2lzX2FkZHJfcmVnLAorCS5zdWJtaXQgPSB0ZWdyYV9kcm1fc3VibWl0LAorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCB2aWNfY29uZmlnIHZpY190MTI0X2NvbmZpZyA9IHsKKwkudWNvZGVf bmFtZSA9ICJ2aWMwM191Y29kZS5iaW4iLAorCS5jbGFzc19pZCA9IEhPU1QxWF9DTEFTU19WSUMs CisJLnBvd2VyZ2F0ZV9pZCA9IFRFR1JBX1BPV0VSR0FURV9WSUMsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCB2aWNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g Im52aWRpYSx0ZWdyYTEyNC12aWMiLAorCQkuZGF0YSA9ICZ2aWNfdDEyNF9jb25maWcgfSwKKwl7 IH0sCit9OworCitzdGF0aWMgaW50IHZpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCB2aWNfY29uZmlnICp2aWNfY29uZmlnID0gTlVMTDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBob3N0MXhfc3luY3B0ICoqc3luY3B0 czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJc3RydWN0IHZpYyAqdmljOworCWludCBlcnI7 CisKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1h dGNoOworCisJCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHZpY19tYXRjaCwgZGV2KTsKKwkJaWYg KG1hdGNoKQorCQkJdmljX2NvbmZpZyA9IChzdHJ1Y3QgdmljX2NvbmZpZyAqKW1hdGNoLT5kYXRh OworCQllbHNlCisJCQlyZXR1cm4gLUVOWElPOworCX0KKworCXZpYyA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqdmljKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2aWMpCisJCXJldHVybiAtRU5P TUVNOworCisJc3luY3B0cyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc3luY3B0cyksIEdG UF9LRVJORUwpOworCWlmICghc3luY3B0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZWdzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJl Z3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZWdpc3RlcnNcbiIp OworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXZpYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNv dXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIodmljLT5yZWdzKSkKKwkJcmV0dXJuIFBUUl9F UlIodmljLT5yZWdzKTsKKworCXZpYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJ aWYgKElTX0VSUih2aWMtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRv IGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHZpYy0+Y2xrKTsKKwl9CisKKwl2aWMt PnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAidmljMDMiKTsKKwlpZiAoSVNfRVJS KHZpYy0+cnN0KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHJlc2V0XG4i KTsKKwkJcmV0dXJuIFBUUl9FUlIodmljLT5yc3QpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIHZpYyk7CisKKwlJTklUX0xJU1RfSEVBRCgmdmljLT5jbGllbnQuYmFzZS5saXN0 KTsKKwl2aWMtPmNsaWVudC5iYXNlLm9wcyA9ICZ2aWNfY2xpZW50X29wczsKKwl2aWMtPmNsaWVu dC5iYXNlLmRldiA9IGRldjsKKwl2aWMtPmNsaWVudC5iYXNlLmNsYXNzID0gdmljX2NvbmZpZy0+ Y2xhc3NfaWQ7CisJdmljLT5jbGllbnQuYmFzZS5zeW5jcHRzID0gc3luY3B0czsKKwl2aWMtPmNs aWVudC5iYXNlLm51bV9zeW5jcHRzID0gMTsKKwl2aWMtPmRldiA9IGRldjsKKwl2aWMtPmNvbmZp ZyA9IHZpY19jb25maWc7CisKKwlJTklUX0xJU1RfSEVBRCgmdmljLT5jbGllbnQubGlzdCk7CisJ dmljLT5jbGllbnQub3BzID0gJnZpY19vcHM7CisKKwllcnIgPSB0ZWdyYV9wb3dlcmdhdGVfc2Vx dWVuY2VfcG93ZXJfdXAodmljLT5jb25maWctPnBvd2VyZ2F0ZV9pZCwKKwkJCQkJCXZpYy0+Y2xr LCB2aWMtPnJzdCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCB0dXJuIG9u IHRoZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGhvc3QxeF9jbGll bnRfcmVnaXN0ZXIoJnZpYy0+Y2xpZW50LmJhc2UpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGhvc3QxeCBjbGllbnQ6ICVkXG4iLCBlcnIpOwor CQljbGtfZGlzYWJsZV91bnByZXBhcmUodmljLT5jbGspOworCQl0ZWdyYV9wb3dlcmdhdGVfcG93 ZXJfb2ZmKHZpYy0+Y29uZmlnLT5wb3dlcmdhdGVfaWQpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBOVUxMKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2 LCAiaW5pdGlhbGl6ZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpY19yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdmljICp2aWMgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyOworCisJZXJyID0gaG9zdDF4X2Ns aWVudF91bnJlZ2lzdGVyKCZ2aWMtPmNsaWVudC5iYXNlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gdW5yZWdpc3RlciBob3N0MXggY2xpZW50OiAl ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKHZpYy0+Y2xrKTsKKwl0ZWdyYV9wb3dlcmdhdGVfcG93ZXJfb2ZmKHZpYy0+Y29uZmlnLT5w b3dlcmdhdGVfaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg dGVncmFfdmljX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0ZWdyYS12aWMi LAorCQkub2ZfbWF0Y2hfdGFibGUgPSB2aWNfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSB2aWNfcHJv YmUsCisJLnJlbW92ZSA9IHZpY19yZW1vdmUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3RlZ3JhL3ZpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjVjYTM4YThkYTg4Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDE1LCBOVklESUEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFRFR1JBX1ZJQ19ICisjZGVmaW5lIFRFR1JBX1ZJQ19I CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1hdHRycy5o PgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisKK3N0cnVjdCB1Y29kZV9iaW5faGVhZGVyX3YxX3ZpYyB7CisJdTMyIGJpbl9t YWdpYzsgICAgICAgIC8qIDB4MTBkZSAqLworCXUzMiBiaW5fdmVyOyAgICAgICAgICAvKiBjeWEs IHZlcnNpb25pbmcgb2YgYmluIGZvcm1hdCAoMSkgKi8KKwl1MzIgYmluX3NpemU7ICAgICAgICAg LyogZW50aXJlIGltYWdlIHNpemUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyICovCisJdTMyIG9zX2Jp bl9oZWFkZXJfb2Zmc2V0OworCXUzMiBvc19iaW5fZGF0YV9vZmZzZXQ7CisJdTMyIG9zX2Jpbl9z aXplOworCXUzMiBmY2VfYmluX2hlYWRlcl9vZmZzZXQ7CisJdTMyIGZjZV9iaW5fZGF0YV9vZmZz ZXQ7CisJdTMyIGZjZV9iaW5fc2l6ZTsKK307CisKK3N0cnVjdCB1Y29kZV9vc19jb2RlX2hlYWRl cl92MV92aWMgeworCXUzMiBvZmZzZXQ7CisJdTMyIHNpemU7Cit9OworCitzdHJ1Y3QgdWNvZGVf b3NfaGVhZGVyX3YxX3ZpYyB7CisJdTMyIG9zX2NvZGVfb2Zmc2V0OworCXUzMiBvc19jb2RlX3Np emU7CisJdTMyIG9zX2RhdGFfb2Zmc2V0OworCXUzMiBvc19kYXRhX3NpemU7CisJdTMyIG51bV9h cHBzOworCXN0cnVjdCB1Y29kZV9vc19jb2RlX2hlYWRlcl92MV92aWMgKmFwcF9jb2RlOworCXN0 cnVjdCB1Y29kZV9vc19jb2RlX2hlYWRlcl92MV92aWMgKmFwcF9kYXRhOworCXUzMiAqb3Nfb3Zs X29mZnNldDsKKwl1MzIgKm9mX292bF9zaXplOworfTsKKworc3RydWN0IHVjb2RlX2ZjZV9oZWFk ZXJfdjFfdmljIHsKKwl1MzIgZmNlX3Vjb2RlX29mZnNldDsKKwl1MzIgZmNlX3Vjb2RlX2J1ZmZl cl9zaXplOworCXUzMiBmY2VfdWNvZGVfc2l6ZTsKK307CisKK3N0cnVjdCB1Y29kZV92MV92aWMg eworCXN0cnVjdCB1Y29kZV9iaW5faGVhZGVyX3YxX3ZpYyAqYmluX2hlYWRlcjsKKwlzdHJ1Y3Qg dWNvZGVfb3NfaGVhZGVyX3YxX3ZpYyAgKm9zX2hlYWRlcjsKKwlzdHJ1Y3QgdWNvZGVfZmNlX2hl YWRlcl92MV92aWMgKmZjZV9oZWFkZXI7Cit9OworCisvKiBWSUMgbWV0aG9kcyAqLworI2RlZmlu ZSBOVkEwQjZfVklERU9fQ09NUE9TSVRPUl9TRVRfQVBQTElDQVRJT05fSUQJMHgwMDAwMDIwMAor I2RlZmluZSBOVkEwQjZfVklERU9fQ09NUE9TSVRPUl9TRVRfRkNFX1VDT0RFX1NJWkUJMHgwMDAw MDcxQworI2RlZmluZSBOVkEwQjZfVklERU9fQ09NUE9TSVRPUl9TRVRfRkNFX1VDT0RFX09GRlNF VAkweDAwMDAwNzJDCisKKy8qIFZJQyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBOVl9QVklDX0ZB TENPTl9NRVRIT0RfMAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTlZfUFZJQ19GQUxDT05fTUVUSE9E XzEJCQkweDAwMDAwMDQ0CisKKyNkZWZpbmUgTlZfUFZJQ19GQUxDT05fSVJRTVNFVAkJCTB4MDAw MDEwMTAKKyNkZWZpbmUgSVJRTVNFVF9XRFRNUl9TRVQJCQkoMSA8PCAxKQorI2RlZmluZSBJUlFN U0VUX0hBTFRfU0VUCQkJKDEgPDwgNCkKKyNkZWZpbmUgSVJRTVNFVF9FWFRFUlJfU0VUCQkJKDEg PDwgNSkKKyNkZWZpbmUgSVJRTVNFVF9TV0dFTjBfU0VUCQkJKDEgPDwgNikKKyNkZWZpbmUgSVJR TVNFVF9TV0dFTjFfU0VUCQkJKDEgPDwgNykKKyNkZWZpbmUgSVJRTVNFVF9FWFQodmFsKQkJCSgo dmFsICYgMHhmZikgPDwgOCkKKworI2RlZmluZSBOVl9QVklDX0ZBTENPTl9JUlFERVNUCQkJMHgw MDAwMTAxYworI2RlZmluZSBJUlFERVNUX0hPU1RfSEFMVF9IT1NUCQkJKDEgPDwgNCkKKyNkZWZp bmUgSVJRREVTVF9IT1NUX0VYVEVSUl9IT1NUCQkoMSA8PCA1KQorI2RlZmluZSBJUlFERVNUX0hP U1RfU1dHRU4wX0hPU1QJCSgxIDw8IDYpCisjZGVmaW5lIElSUURFU1RfSE9TVF9TV0dFTjFfSE9T VAkJKDEgPDwgNykKKyNkZWZpbmUgSVJRREVTVF9IT1NUX0VYVCh2YWwpCQkJKCh2YWwgJiAweGZm KSA8PCA4KQorCisjZGVmaW5lIE5WX1BWSUNfRkFMQ09OX0lURkVOCQkJMHgwMDAwMTA0OAorI2Rl ZmluZSBJVEZFTl9DVFhFTl9FTkFCTEUJCQkoMSA8PCAwKQorI2RlZmluZSBJVEZFTl9NVEhERU5f RU5BQkxFCQkJKDEgPDwgMSkKKworI2RlZmluZSBOVl9QVklDX0ZBTENPTl9JRExFU1RBVEUJCTB4 MDAwMDEwNGMKKworI2RlZmluZSBOVl9QVklDX0ZBTENPTl9DUFVDVEwJCQkweDAwMDAxMTAwCisj ZGVmaW5lIENQVUNUTF9TVEFSVENQVQkJCQkoMSA8PCAxKQorCisjZGVmaW5lIE5WX1BWSUNfRkFM Q09OX0JPT1RWRUMJCQkweDAwMDAxMTA0CisjZGVmaW5lIEJPT1RWRUNfVkVDKHZhbCkJCQkoKHZh bCAmIDB4ZmZmZmZmZmYpIDw8IDApCisKKyNkZWZpbmUgTlZfUFZJQ19GQUxDT05fRE1BQ1RMCQkJ MHgwMDAwMTEwYworCisjZGVmaW5lIE5WX1BWSUNfRkFMQ09OX0RNQVRSRkJBU0UJCTB4MDAwMDEx MTAKKworI2RlZmluZSBOVl9QVklDX0ZBTENPTl9ETUFUUkZNT0ZGUwkJMHgwMDAwMTExNAorI2Rl ZmluZSBETUFUUkZNT0ZGU19PRkZTKHZhbCkJCQkoKHZhbCAmIDB4ZmZmZikgPDwgMCkKKworI2Rl ZmluZSBOVl9QVklDX0ZBTENPTl9ETUFUUkZDTUQJCTB4MDAwMDExMTgKKyNkZWZpbmUgRE1BVFJG Q01EX0lETEUJCQkJKDEgPDwgMSkKKyNkZWZpbmUgRE1BVFJGQ01EX0lNRU0JCQkJKDEgPDwgNCkK KyNkZWZpbmUgRE1BVFJGQ01EX1NJWkVfMjU2QgkJCSg2IDw8IDgpCisKKyNkZWZpbmUgTlZfUFZJ Q19GQUxDT05fRE1BVFJGRkJPRkZTCQkweDAwMDAxMTFjCisjZGVmaW5lIERNQVRSRkZCT0ZGU19P RkZTKHZhbCkJCQkoKHZhbCAmIDB4ZmZmZmZmZmYpIDw8IDApCisKKyNkZWZpbmUgTlZfUFZJQ19N SVNDX1BSSV9WSUNfQ0cJCQkweDAwMDAxNmQwCisjZGVmaW5lIENHX0lETEVfQ0dfRExZX0NOVCh2 YWwpCQkJKCh2YWwgJiAweDNmKSA8PCAwKQorI2RlZmluZSBDR19JRExFX0NHX0VOCQkJCSgxIDw8 IDYpCisjZGVmaW5lIENHX1dBS0VVUF9ETFlfQ05UKHZhbCkJCQkoKHZhbCAmIDB4ZikgPDwgMTYp CisKKworI2VuZGlmIC8qIFRFR1JBX1ZJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2hvc3QxeC5oIGIvaW5jbHVkZS9saW51eC9ob3N0MXguaAppbmRleCBmYzg2Y2VkNzdlNzYuLmEw MDZkYWQwMDAwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ob3N0MXguaAorKysgYi9pbmNs dWRlL2xpbnV4L2hvc3QxeC5oCkBAIC0yNiw2ICsyNiw3IEBAIGVudW0gaG9zdDF4X2NsYXNzIHsK IAlIT1NUMVhfQ0xBU1NfSE9TVDFYID0gMHgxLAogCUhPU1QxWF9DTEFTU19HUjJEID0gMHg1MSwK IAlIT1NUMVhfQ0xBU1NfR1IyRF9TQiA9IDB4NTIsCisJSE9TVDFYX0NMQVNTX1ZJQyA9IDB4NUQs CiAJSE9TVDFYX0NMQVNTX0dSM0QgPSAweDYwLAogfTsKIAotLSAKMS44LjEuNQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK