From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jon Hunter Subject: Re: [PATCH v2 2/4] drm/tegra: Add VIC support Date: Mon, 20 Jul 2015 09:28:36 +0100 Message-ID: <55ACB134.8010401@nvidia.com> References: <1437378869-10451-1-git-send-email-mperttunen@nvidia.com> <1437378869-10451-3-git-send-email-mperttunen@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 ESMTPS id 848446E0D0 for ; Mon, 20 Jul 2015 01:28:44 -0700 (PDT) In-Reply-To: <1437378869-10451-3-git-send-email-mperttunen@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mikko Perttunen , thierry.reding@gmail.com, tbergstrom@nvidia.com Cc: gnurou@gmail.com, Andrew Chew , swarren@wwwdotorg.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, amerilainen@nvidia.com, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgTWlra28sCgpPbiAyMC8wNy8xNSAwODo1NCwgTWlra28gUGVydHR1bmVuIHdyb3RlOgo+IEZy b206IEFydG8gTWVyaWxhaW5lbiA8YW1lcmlsYWluZW5AbnZpZGlhLmNvbT4KPiAKPiBUaGlzIHBh dGNoIGFkZHMgc3VwcG9ydCBmb3IgVmlkZW8gSW1hZ2UgQ29tcG9zaXRvciBlbmdpbmUgd2hpY2gK PiBjYW4gYmUgdXNlZCBmb3IgMmQgb3BlcmF0aW9ucy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRy ZXcgQ2hldyA8YWNoZXdAbnZpZGlhLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBcnRvIE1lcmlsYWlu ZW4gPGFtZXJpbGFpbmVuQG52aWRpYS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWlra28gUGVydHR1 bmVuIDxtcGVydHR1bmVuQG52aWRpYS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS90ZWdy YS9NYWtlZmlsZSB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMgICAgfCAg IDcgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmggICAgfCAgIDEgKwo+ICBkcml2ZXJz L2dwdS9kcm0vdGVncmEvdmljLmMgICAgfCA0NTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5oICAgIHwgIDM1ICsr KysKPiAgaW5jbHVkZS9saW51eC9ob3N0MXguaCAgICAgICAgIHwgICAxICsKPiAgNiBmaWxlcyBj aGFuZ2VkLCA1MDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vdGVncmEvdmljLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3RlZ3JhL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL01ha2VmaWxlCj4gaW5k ZXggOTNlOWE0YS4uNmFmM2E5YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEv TWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvTWFrZWZpbGUKPiBAQCAtMTQs NiArMTQsNyBAQCB0ZWdyYS1kcm0teSA6PSBcCj4gIAlkcGF1eC5vIFwKPiAgCWdyMmQubyBcCj4g IAlncjNkLm8gXAo+IC0JZmFsY29uLm8KPiArCWZhbGNvbi5vIFwKPiArCXZpYy5vCj4gIAo+ICBv YmotJChDT05GSUdfRFJNX1RFR1JBKSArPSB0ZWdyYS1kcm0ubwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKPiBp bmRleCBhZjRmZjg2Li5iYzhjYzJhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9kcm0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYwo+IEBAIC0xMTQ1LDYg KzExNDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBob3N0MXhfZHJtX3N1 YmRldnNbXSA9IHsKPiAgCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LWRjIiwgfSwK PiAgCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LXNvciIsIH0sCj4gIAl7IC5jb21w YXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC1oZG1pIiwgfSwKPiArCXsgLmNvbXBhdGlibGUgPSAi bnZpZGlhLHRlZ3JhMTI0LXZpYyIsIH0sCj4gIAl7IC8qIHNlbnRpbmVsICovIH0KPiAgfTsKPiAg Cj4gQEAgLTExOTQsOCArMTE5NSwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBob3N0MXhfZHJtX2lu aXQodm9pZCkKPiAgCWlmIChlcnIgPCAwKQo+ICAJCWdvdG8gdW5yZWdpc3Rlcl9ncjJkOwo+ICAK PiArCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfdmljX2RyaXZlcik7Cj4g KwlpZiAoZXJyIDwgMCkKPiArCQlnb3RvIHVucmVnaXN0ZXJfZ3IzZDsKPiArCj4gIAlyZXR1cm4g MDsKPiAgCj4gK3VucmVnaXN0ZXJfZ3IzZDoKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KCZ0ZWdyYV9ncjNkX2RyaXZlcik7Cj4gIHVucmVnaXN0ZXJfZ3IyZDoKPiAgCXBsYXRmb3JtX2Ry aXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9ncjJkX2RyaXZlcik7Cj4gIHVucmVnaXN0ZXJfZHBhdXg6 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaCBiL2RyaXZlcnMvZ3B1 L2RybS90ZWdyYS9kcm0uaAo+IGluZGV4IDU4YzgzYjExLi4yZmM3ZTQyIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9kcm0uaAo+IEBAIC0yODQsNSArMjg0LDYgQEAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgdGVncmFfaGRtaV9kcml2ZXI7Cj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRl Z3JhX2RwYXV4X2RyaXZlcjsKPiAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFf Z3IyZF9kcml2ZXI7Cj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX2dyM2Rf ZHJpdmVyOwo+ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV92aWNfZHJpdmVy Owo+ICAKPiAgI2VuZGlmIC8qIEhPU1QxWF9EUk1fSCAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGVncmEvdmljLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvdmljLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmZjZTdjMDQKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3ZpYy5jCj4gQEAgLTAsMCArMSw0NTYgQEAK PiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE1LCBOVklESUEgQ29ycG9yYXRpb24uCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2hvc3QxeC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9t bXUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Yu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Zf cGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KPiAr Cj4gKyNpbmNsdWRlIDxzb2MvdGVncmEvcG1jLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHJtLmgiCj4g KyNpbmNsdWRlICJmYWxjb24uaCIKPiArI2luY2x1ZGUgInZpYy5oIgo+ICsKPiArc3RydWN0IHZp Y19jb25maWcgewo+ICsJLyogRmlybXdhcmUgbmFtZSAqLwo+ICsJY29uc3QgY2hhciAqdWNvZGVf bmFtZTsKPiArfTsKPiArCj4gK3N0cnVjdCB2aWMgewo+ICsJc3RydWN0IGZhbGNvbiBmYWxjb247 Cj4gKwlib29sIGJvb3RlZDsKPiArCj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwlzdHJ1Y3Qg dGVncmFfZHJtX2NsaWVudCBjbGllbnQ7Cj4gKwlzdHJ1Y3QgaG9zdDF4X2NoYW5uZWwgKmNoYW5u ZWw7Cj4gKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7Cj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0Owo+ ICsKPiArCS8qIFBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gKi8KPiArCWNvbnN0IHN0cnVjdCB2aWNf Y29uZmlnICpjb25maWc7Cj4gKwo+ICsJLyogZm9yIGZpcmV3YWxsIC0gdGhpcyBkZXRlcm1pbmVz IGlmIG1ldGhvZCAxIHNob3VsZCBiZSByZWdhcmRlZAo+ICsJICogYXMgYW4gYWRkcmVzcyByZWdp c3RlciAqLwo+ICsJYm9vbCBtZXRob2RfZGF0YV9pc19hZGRyX3JlZzsKPiArfTsKPiArCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHZpYyAqdG9fdmljKHN0cnVjdCB0ZWdyYV9kcm1fY2xpZW50ICpj bGllbnQpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY2xpZW50LCBzdHJ1Y3QgdmljLCBj bGllbnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aWNfd3JpdGVsKHN0cnVjdCB2aWMgKnZp YywgdTMyIHZhbHVlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+ICt7Cj4gKwl3cml0ZWwodmFsdWUs IHZpYy0+cmVncyArIG9mZnNldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmljX3J1bnRpbWVf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHZpYyAqdmljID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9IHRlZ3JhX3Bvd2Vy Z2F0ZV9zZXF1ZW5jZV9wb3dlcl91cChURUdSQV9QT1dFUkdBVEVfVklDLAo+ICsJCQkJCQl2aWMt PmNsaywgdmljLT5yc3QpOwoKSSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB1c2Ugb2YgdGhlIGFi b3ZlIGZ1bmN0aW9uIFsxXS4gSSBoYXZlIGJlZW4KdHJ5aW5nIHRvIG1pZ3JhdGUgZHJpdmVyIHRv IHVzZSBhIG5ldyBBUEkgaW5zdGVhZCBvZiB0aGUgYWJvdmUuCgo+ICsJaWYgKGVyciA8IDApCj4g KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcG93ZXIgdXAgZGV2aWNlXG4iKTsKPiArCj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpY19ydW50aW1lX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmljICp2aWMgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKPiArCj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUodmljLT5jbGspOwo+ICsJcmVz ZXRfY29udHJvbF9hc3NlcnQodmljLT5yc3QpOwo+ICsJdGVncmFfcG93ZXJnYXRlX3Bvd2VyX29m ZihURUdSQV9QT1dFUkdBVEVfVklDKTsKClNpbWlsYXJseSBoZXJlLiBJIHdvdWxkIGxpa2UgdG8g Z2V0IHJpZCBvZiB0aGUgYWJvdmUgQVBJIGluIGZhdm91ciBvZiBhCmRpZmZlcmVudCBBUEkgdG8g aGVscCBtaWdyYXRlIHRvIGdlbmVyaWMgcG93ZXIgZG9tYWluIHN1cHBvcnQuCgo+ICsJdmljLT5i b290ZWQgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2 aWNfYm9vdChzdHJ1Y3QgdmljICp2aWMpCj4gK3sKPiArCXUzMiBmY2VfdWNvZGVfc2l6ZSwgZmNl X2Jpbl9kYXRhX29mZnNldDsKPiArCXZvaWQgKmhkcjsKPiArCWludCBlcnIgPSAwOwo+ICsKPiAr CWlmICh2aWMtPmJvb3RlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoIXZpYy0+ZmFsY29u LmZpcm13YXJlLnZhbGlkKSB7Cj4gKwkJZXJyID0gZmFsY29uX3JlYWRfZmlybXdhcmUoJnZpYy0+ ZmFsY29uLAo+ICsJCQkJCSAgIHZpYy0+Y29uZmlnLT51Y29kZV9uYW1lKTsKPiArCQlpZiAoZXJy IDwgMCkKPiArCQkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwkvKiBlbnN1cmUgdGhhdCB0aGUg ZW5naW5lIGlzIGluIHNhbmUgc3RhdGUgKi8KPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHZpYy0+ cnN0KTsKPiArCXVzbGVlcF9yYW5nZSgxMCwgMTAwKTsKPiArCXJlc2V0X2NvbnRyb2xfZGVhc3Nl cnQodmljLT5yc3QpOwo+ICsKPiArCS8qIHNldHVwIGNsb2NrZ2F0aW5nIHJlZ2lzdGVycyAqLwo+ ICsJdmljX3dyaXRlbCh2aWMsIENHX0lETEVfQ0dfRExZX0NOVCg0KSB8Cj4gKwkJCUNHX0lETEVf Q0dfRU4gfAo+ICsJCQlDR19XQUtFVVBfRExZX0NOVCg0KSwKPiArCQkgICBOVl9QVklDX01JU0Nf UFJJX1ZJQ19DRyk7Cj4gKwo+ICsJZXJyID0gZmFsY29uX2Jvb3QoJnZpYy0+ZmFsY29uKTsKPiAr CWlmIChlcnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJaGRyID0gdmljLT5mYWxjb24u ZmlybXdhcmUudmFkZHI7Cj4gKwlmY2VfYmluX2RhdGFfb2Zmc2V0ID0gKih1MzIgKikoaGRyICsg VklDX1VDT0RFX0ZDRV9EQVRBX09GRlNFVCk7Cj4gKwloZHIgPSB2aWMtPmZhbGNvbi5maXJtd2Fy ZS52YWRkciArCj4gKwkJKih1MzIgKikoaGRyICsgVklDX1VDT0RFX0ZDRV9IRUFERVJfT0ZGU0VU KTsKPiArCWZjZV91Y29kZV9zaXplID0gKih1MzIgKikoaGRyICsgRkNFX1VDT0RFX1NJWkVfT0ZG U0VUKTsKPiArCj4gKwlmYWxjb25fZXhlY3V0ZV9tZXRob2QoJnZpYy0+ZmFsY29uLCBWSUNfU0VU X0FQUExJQ0FUSU9OX0lELCAxKTsKPiArCWZhbGNvbl9leGVjdXRlX21ldGhvZCgmdmljLT5mYWxj b24sIFZJQ19TRVRfRkNFX1VDT0RFX1NJWkUsCj4gKwkJCSAgICAgIGZjZV91Y29kZV9zaXplKTsK PiArCWZhbGNvbl9leGVjdXRlX21ldGhvZCgmdmljLT5mYWxjb24sIFZJQ19TRVRfRkNFX1VDT0RF X09GRlNFVCwKPiArCQkJICAgICAgKHZpYy0+ZmFsY29uLmZpcm13YXJlLnBhZGRyICsgZmNlX2Jp bl9kYXRhX29mZnNldCkKPiArCQkJCT4+IDgpOwo+ICsKPiArCWVyciA9IGZhbGNvbl93YWl0X2lk bGUoJnZpYy0+ZmFsY29uKTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJZGV2X2Vycih2aWMtPmRl diwKPiArCQkJImZhaWxlZCB0byBzZXQgYXBwbGljYXRpb24gSUQgYW5kIEZDRSBiYXNlXG4iKTsK PiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCXZpYy0+Ym9vdGVkID0gdHJ1ZTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnZpY19mYWxjb25fYWxsb2Moc3Ry dWN0IGZhbGNvbiAqZmFsY29uLCBzaXplX3Qgc2l6ZSwKPiArCQkJICAgICAgIGRtYV9hZGRyX3Qg KmlvdmEpCj4gK3sKPiArCXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZmFsY29uLT5kYXRhOwo+ ICsKPiArCXJldHVybiB0ZWdyYV9kcm1fYWxsb2ModGVncmEsIHNpemUsIGlvdmEpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB2aWNfZmFsY29uX2ZyZWUoc3RydWN0IGZhbGNvbiAqZmFsY29uLCBz aXplX3Qgc2l6ZSwKPiArCQkJICAgIGRtYV9hZGRyX3QgaW92YSwgdm9pZCAqdmEpCj4gK3sKPiAr CXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZmFsY29uLT5kYXRhOwo+ICsKPiArCXJldHVybiB0 ZWdyYV9kcm1fZnJlZSh0ZWdyYSwgc2l6ZSwgdmEsIGlvdmEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGZhbGNvbl9vcHMgdmljX2ZhbGNvbl9vcHMgPSB7Cj4gKwkuYWxsb2MgPSB2 aWNfZmFsY29uX2FsbG9jLAo+ICsJLmZyZWUgPSB2aWNfZmFsY29uX2ZyZWUKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgdmljX2luaXQoc3RydWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCkKPiArewo+ ICsJc3RydWN0IHRlZ3JhX2RybV9jbGllbnQgKmRybSA9IGhvc3QxeF90b19kcm1fY2xpZW50KGNs aWVudCk7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGNsaWVu dC0+cGFyZW50KTsKPiArCXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiArCXN0cnVjdCB2aWMgKnZpYyA9IHRvX3ZpYyhkcm0pOwo+ICsJaW50IGVycjsKPiArCj4g KwlpZiAodGVncmEtPmRvbWFpbikgewo+ICsJCWVyciA9IGlvbW11X2F0dGFjaF9kZXZpY2UodGVn cmEtPmRvbWFpbiwgdmljLT5kZXYpOwo+ICsJCWlmIChlcnIgPCAwKSB7Cj4gKwkJCWRldl9lcnIo dmljLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIHRvIGRvbWFpbjogJWRcbiIsCj4gKwkJCQllcnIp Owo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJdmljLT5kb21haW4gPSB0ZWdyYS0+ ZG9tYWluOwo+ICsJfQo+ICsKPiArCXZpYy0+ZmFsY29uLmRldiA9IHZpYy0+ZGV2Owo+ICsJdmlj LT5mYWxjb24ucmVncyA9IHZpYy0+cmVnczsKPiArCXZpYy0+ZmFsY29uLmRhdGEgPSB0ZWdyYTsK PiArCXZpYy0+ZmFsY29uLm9wcyA9ICZ2aWNfZmFsY29uX29wczsKPiArCWVyciA9IGZhbGNvbl9p bml0KCZ2aWMtPmZhbGNvbik7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQlnb3RvIGRldGFjaF9kZXZp Y2U7Cj4gKwo+ICsJdmljLT5jaGFubmVsID0gaG9zdDF4X2NoYW5uZWxfcmVxdWVzdChjbGllbnQt PmRldik7Cj4gKwlpZiAoIXZpYy0+Y2hhbm5lbCkgewo+ICsJCWVyciA9IC1FTk9NRU07Cj4gKwkJ Z290byBleGl0X2ZhbGNvbjsKPiArCX0KPiArCj4gKwljbGllbnQtPnN5bmNwdHNbMF0gPSBob3N0 MXhfc3luY3B0X3JlcXVlc3QoY2xpZW50LT5kZXYsIDApOwo+ICsJaWYgKCFjbGllbnQtPnN5bmNw dHNbMF0pIHsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZnJlZV9jaGFubmVsOwo+ICsJ fQo+ICsKPiArCWVyciA9IHRlZ3JhX2RybV9yZWdpc3Rlcl9jbGllbnQodGVncmEsIGRybSk7Cj4g KwlpZiAoZXJyIDwgMCkKPiArCQlnb3RvIGZyZWVfc3luY3B0Owo+ICsKPiArCXJldHVybiAwOwo+ ICsKPiArZnJlZV9zeW5jcHQ6Cj4gKwlob3N0MXhfc3luY3B0X2ZyZWUoY2xpZW50LT5zeW5jcHRz WzBdKTsKPiArZnJlZV9jaGFubmVsOgo+ICsJaG9zdDF4X2NoYW5uZWxfZnJlZSh2aWMtPmNoYW5u ZWwpOwo+ICtleGl0X2ZhbGNvbjoKPiArCWZhbGNvbl9leGl0KCZ2aWMtPmZhbGNvbik7Cj4gK2Rl dGFjaF9kZXZpY2U6Cj4gKwlpZiAodGVncmEtPmRvbWFpbikKPiArCQlpb21tdV9kZXRhY2hfZGV2 aWNlKHRlZ3JhLT5kb21haW4sIHZpYy0+ZGV2KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHZpY19leGl0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpCj4g K3sKPiArCXN0cnVjdCB0ZWdyYV9kcm1fY2xpZW50ICpkcm0gPSBob3N0MXhfdG9fZHJtX2NsaWVu dChjbGllbnQpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShj bGllbnQtPnBhcmVudCk7Cj4gKwlzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gKwlzdHJ1Y3QgdmljICp2aWMgPSB0b192aWMoZHJtKTsKPiArCWludCBlcnI7Cj4g Kwo+ICsJZXJyID0gdGVncmFfZHJtX3VucmVnaXN0ZXJfY2xpZW50KHRlZ3JhLCBkcm0pOwo+ICsJ aWYgKGVyciA8IDApCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlob3N0MXhfc3luY3B0X2ZyZWUo Y2xpZW50LT5zeW5jcHRzWzBdKTsKPiArCWhvc3QxeF9jaGFubmVsX2ZyZWUodmljLT5jaGFubmVs KTsKPiArCj4gKwlpZiAodmljLT5ib290ZWQpIHsKPiArCQlyZXNldF9jb250cm9sX2Fzc2VydCh2 aWMtPnJzdCk7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwLCAxMDApOwo+ICsJCXJlc2V0X2NvbnRyb2xf ZGVhc3NlcnQodmljLT5yc3QpOwo+ICsJfQo+ICsKPiArCWZhbGNvbl9leGl0KCZ2aWMtPmZhbGNv bik7Cj4gKwo+ICsJaWYgKHZpYy0+ZG9tYWluKSB7Cj4gKwkJaW9tbXVfZGV0YWNoX2RldmljZSh2 aWMtPmRvbWFpbiwgdmljLT5kZXYpOwo+ICsJCXZpYy0+ZG9tYWluID0gTlVMTDsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBob3N0MXhfY2xp ZW50X29wcyB2aWNfY2xpZW50X29wcyA9IHsKPiArCS5pbml0ID0gdmljX2luaXQsCj4gKwkuZXhp dCA9IHZpY19leGl0LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2aWNfb3Blbl9jaGFubmVsKHN0 cnVjdCB0ZWdyYV9kcm1fY2xpZW50ICpjbGllbnQsCj4gKwkJCSAgICBzdHJ1Y3QgdGVncmFfZHJt X2NvbnRleHQgKmNvbnRleHQpCj4gK3sKPiArCXN0cnVjdCB2aWMgKnZpYyA9IHRvX3ZpYyhjbGll bnQpOwo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBwbV9ydW50aW1lX2dldF9zeW5jKHZpYy0+ ZGV2KTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJLyoKPiArCSAq IFRyeSB0byBib290IHRoZSBGYWxjb24gbWljcm9jb250cm9sbGVyLiBCb290aW5nIGlzIGRlZmVy cmVkIHVudGlsCj4gKwkgKiBoZXJlIGJlY2F1c2UgdGhlIGZpcm13YXJlIG1pZ2h0IG5vdCB5ZXQg YmUgYXZhaWxhYmxlIGR1cmluZyBzeXN0ZW0KPiArCSAqIGJvb3QsIGZvciBleGFtcGxlIGlmIGl0 J3Mgb24gcmVtb3RlIHN0b3JhZ2UuCj4gKwkgKi8KPiArCWVyciA9IHZpY19ib290KHZpYyk7Cj4g KwlpZiAoZXJyIDwgMCkgewo+ICsJCXBtX3J1bnRpbWVfcHV0KHZpYy0+ZGV2KTsKPiArCQlyZXR1 cm4gZXJyOwo+ICsJfQo+ICsKPiArCWNvbnRleHQtPmNoYW5uZWwgPSBob3N0MXhfY2hhbm5lbF9n ZXQodmljLT5jaGFubmVsKTsKPiArCWlmICghY29udGV4dC0+Y2hhbm5lbCkgewo+ICsJCXBtX3J1 bnRpbWVfcHV0KHZpYy0+ZGV2KTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmljX2Nsb3NlX2NoYW5uZWwoc3RydWN0 IHRlZ3JhX2RybV9jb250ZXh0ICpjb250ZXh0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmljICp2aWMgPSB0 b192aWMoY29udGV4dC0+Y2xpZW50KTsKPiArCj4gKwlob3N0MXhfY2hhbm5lbF9wdXQoY29udGV4 dC0+Y2hhbm5lbCk7Cj4gKwo+ICsJcG1fcnVudGltZV9wdXQodmljLT5kZXYpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZpY19pc19hZGRyX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBjbGFz cywgdTMyIG9mZnNldCwgdTMyIHZhbCkKPiArewo+ICsJc3RydWN0IHZpYyAqdmljID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJaWYgKGNsYXNzICE9IEhPU1QxWF9DTEFTU19WSUMpCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qCj4gKwkgKiBNZXRob2QgY2FsbCBwYXJhbWV0ZXIu IENoZWNrIHN0b3JlZCB2YWx1ZSB0byBzZWUgaWYgc2V0IG1ldGhvZCB1c2VzCj4gKwkgKiBwYXJh bWV0ZXIgYXMgbWVtb3J5IGFkZHJlc3MuCj4gKwkgKi8KPiArCWlmIChvZmZzZXQgPT0gRkFMQ09O X1VDTEFTU19NRVRIT0RfREFUQSA+PiAyKQo+ICsJCXJldHVybiB2aWMtPm1ldGhvZF9kYXRhX2lz X2FkZHJfcmVnOwo+ICsKPiArCS8qIE1ldGhvZCBjYWxsIG51bWJlciBzdG9yZS4gKi8KPiArCWlm IChvZmZzZXQgPT0gRkFMQ09OX1VDTEFTU19NRVRIT0RfT0ZGU0VUID4+IDIpIHsKPiArCQl1MzIg bWV0aG9kID0gdmFsIDw8IDI7Cj4gKwo+ICsJCWlmICgobWV0aG9kID49IFZJQ19TRVRfU1VSRkFD RTBfU0xPVDBfTFVNQV9PRkZTRVQgJiYKPiArCQkgICAgIG1ldGhvZCA8PSBWSUNfU0VUX1NVUkZB Q0U3X1NMT1Q0X0NIUk9NQVZfT0ZGU0VUKSB8fAo+ICsJCSAgICAobWV0aG9kID49IFZJQ19TRVRf Q09ORklHX1NUUlVDVF9PRkZTRVQgJiYKPiArCQkgICAgIG1ldGhvZCA8PSBWSUNfU0VUX09VVFBV VF9TVVJGQUNFX0NIUk9NQVZfT0ZGU0VUKSkKPiArCQkJdmljLT5tZXRob2RfZGF0YV9pc19hZGRy X3JlZyA9IHRydWU7Cj4gKwkJZWxzZQo+ICsJCQl2aWMtPm1ldGhvZF9kYXRhX2lzX2FkZHJfcmVn ID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHRlZ3JhX2RybV9jbGllbnRfb3BzIHZpY19vcHMgPSB7Cj4gKwkub3Blbl9j aGFubmVsID0gdmljX29wZW5fY2hhbm5lbCwKPiArCS5jbG9zZV9jaGFubmVsID0gdmljX2Nsb3Nl X2NoYW5uZWwsCj4gKwkuaXNfYWRkcl9yZWcgPSB2aWNfaXNfYWRkcl9yZWcsCj4gKwkuc3VibWl0 ID0gdGVncmFfZHJtX3N1Ym1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdmlj X2NvbmZpZyB2aWNfdDEyNF9jb25maWcgPSB7Cj4gKwkudWNvZGVfbmFtZSA9ICJ2aWMwM191Y29k ZS5iaW4iLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmlj X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC12aWMiLCAu ZGF0YSA9ICZ2aWNfdDEyNF9jb25maWcgfSwKPiArCXsgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQgdmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCB2aWNfY29uZmlnICp2aWNfY29uZmlnID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgaG9zdDF4X3N5bmNwdCAqKnN5bmNwdHM7Cj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlZ3M7Cj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsK PiArCXN0cnVjdCB2aWMgKnZpYzsKPiArCWludCBlcnI7Cj4gKwo+ICsJbWF0Y2ggPSBvZl9tYXRj aF9kZXZpY2UodmljX21hdGNoLCBkZXYpOwo+ICsJdmljX2NvbmZpZyA9IChzdHJ1Y3QgdmljX2Nv bmZpZyAqKW1hdGNoLT5kYXRhOwo+ICsKPiArCXZpYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqdmljKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZpYykKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlzeW5jcHRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzeW5jcHRzKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIXN5bmNwdHMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ cmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4g KwlpZiAoIXJlZ3MpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJl Z2lzdGVyc1xuIik7Cj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4gKwl2aWMtPnJlZ3Mg PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsKPiArCWlmIChJU19FUlIodmljLT5y ZWdzKSkKPiArCQlyZXR1cm4gUFRSX0VSUih2aWMtPnJlZ3MpOwo+ICsKPiArCXZpYy0+Y2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZpYy0+Y2xrKSkgewo+ICsJ CWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOwo+ICsJCXJldHVy biBQVFJfRVJSKHZpYy0+Y2xrKTsKPiArCX0KPiArCj4gKwl2aWMtPnJzdCA9IGRldm1fcmVzZXRf Y29udHJvbF9nZXQoZGV2LCAidmljIik7Cj4gKwlpZiAoSVNfRVJSKHZpYy0+cnN0KSkgewo+ICsJ CWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgcmVzZXRcbiIpOwo+ICsJCXJldHVybiBQ VFJfRVJSKHZpYy0+cnN0KTsKPiArCX0KPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCB2aWMpOwo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZ2aWMtPmNsaWVudC5iYXNlLmxpc3QpOwo+ ICsJdmljLT5jbGllbnQuYmFzZS5vcHMgPSAmdmljX2NsaWVudF9vcHM7Cj4gKwl2aWMtPmNsaWVu dC5iYXNlLmRldiA9IGRldjsKPiArCXZpYy0+Y2xpZW50LmJhc2UuY2xhc3MgPSBIT1NUMVhfQ0xB U1NfVklDOwo+ICsJdmljLT5jbGllbnQuYmFzZS5zeW5jcHRzID0gc3luY3B0czsKPiArCXZpYy0+ Y2xpZW50LmJhc2UubnVtX3N5bmNwdHMgPSAxOwo+ICsJdmljLT5kZXYgPSBkZXY7Cj4gKwl2aWMt PmNvbmZpZyA9IHZpY19jb25maWc7Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJnZpYy0+Y2xpZW50 Lmxpc3QpOwo+ICsJdmljLT5jbGllbnQub3BzID0gJnZpY19vcHM7Cj4gKwo+ICsJZXJyID0gaG9z dDF4X2NsaWVudF9yZWdpc3RlcigmdmljLT5jbGllbnQuYmFzZSk7Cj4gKwlpZiAoZXJyIDwgMCkg ewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGhvc3QxeCBjbGllbnQ6ICVk XG4iLCBlcnIpOwo+ICsJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+ICsJCXJl dHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Cj4g KwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZCgmcGRldi0+ZGV2KSkgewo+ICsJCWVyciA9IHZpY19y dW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKPiArCQlpZiAoZXJyIDwgMCkKPiArCQkJZ290byB1 bnJlZ2lzdGVyX2NsaWVudDsKPiArCX0KCkkgZG9uJ3Qgc2VlIHdoeSBwbV9ydW50aW1lX2VuYWJs ZSgpIHNob3VsZCBldmVyIGZhaWwgdG8gZW5hYmxlCnBtX3J1bnRpbWUgaGVyZS4gSGVuY2UsIHRo ZSBpZi1zdGF0ZW1lbnQgYXBwZWFycyB0byBiZSByZWR1bmRhbnQuIElmIHlvdQphcmUgdHJ5aW5n IHRvIGRldGVybWluZSB3aGV0aGVyIHJwbSBpcyBzdXBwb3J0ZWQgZm9yIHRoZSBwb3dlci1kb21h aW5zCnRoZW4geW91IHNob3VsZCBzaW1wbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBEVCBub2RlIGZv ciB0aGUgZGV2aWNlIGhhcwp0aGUgInBvd2VyLWRvbWFpbnMiIHByb3BlcnR5LiBTZWUgbXkgc2Vy aWVzIFsxXS4KCkNoZWVycwpKb24KClsxXSBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2Fy bS1rZXJuZWwvbXNnNDMxMDUxLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK