From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH 03/11] drm: add driver for simple vga encoders Date: Sat, 31 Jan 2015 17:32:56 +0100 Message-ID: <1422721984-27782-4-git-send-email-heiko@sntech.de> References: <1422721984-27782-1-git-send-email-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gloria.sntech.de (gloria.sntech.de [95.129.55.99]) by gabe.freedesktop.org (Postfix) with ESMTP id 2B4406E244 for ; Sat, 31 Jan 2015 08:28:07 -0800 (PST) In-Reply-To: <1422721984-27782-1-git-send-email-heiko@sntech.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, mark.yao@rock-chips.com Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, robh+dt@kernel.org, galak@codeaurora.org, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org VGhlcmUgZXhpc3Qgc2ltcGxlIHZnYSBlbmNvZGVycyB3aXRob3V0IGFueSB0eXBlIG9mIG1hbmFn ZW1lbnQgaW50ZXJmYWNlCmFuZCBqdXN0IG1heWJlIGEgc2ltcGxlIGdwaW8gZm9yIHR1cm5pbmcg aXQgb24gb3Igb2ZmLiBFeGFtcGxlcyBmb3IgdGhlc2UKYXJlIHRoZSBBbmFsb2cgRGV2aWNlcyBB RFY3MTIzLCBDaGlwc2VhIENTNzEyMyBvciBNaWNyb25hcyBTREE3MTIzLgoKQWRkIGEgZ2VuZXJp YyBlbmNvZGVyIGRyaXZlciBmb3IgdGhvc2UgdGhhdCBjYW4gYmUgdXNlZCBieSBkcm0gZHJpdmVy cwp1c2luZyB0aGUgY29tcG9uZW50IGZyYW1ld29yay4KClNpZ25lZC1vZmYtYnk6IEhlaWtvIFN0 dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmln ICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZSAgICAgfCAgIDIgKwog ZHJpdmVycy9ncHUvZHJtL2kyYy92Z2Etc2ltcGxlLmMgfCAzMjUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzMyBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2kyYy92Z2Etc2ltcGxlLmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v aTJjL0tjb25maWcKaW5kZXggMjJjN2VkNi4uMzE5ZjJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2kyYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwpAQCAt MzEsNCArMzEsMTAgQEAgY29uZmlnIERSTV9JMkNfTlhQX1REQTk5OFgKIAloZWxwCiAJICBTdXBw b3J0IGZvciBOWFAgU2VtaWNvbmR1Y3RvcnMgVERBOTk4WCBIRE1JIGVuY29kZXJzLgogCitjb25m aWcgRFJNX1ZHQV9TSU1QTEUKKwl0cmlzdGF0ZSAiR2VuZXJpYyBzaW1wbGUgdmdhIGVuY29kZXIi CisJaGVscAorCSAgU3VwcG9ydCBmb3IgdmdhIGVuY29kZXIgY2hpcHMgd2l0aG91dCBhbnkgc3Bl Y2lhbCBzZXR0aW5ncworCSAgYW5kIGF0IG1vc3QgYSBwb3dlci1jb250cm9sIGdwaW8uCisKIGVu ZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTJjL01ha2VmaWxlCmluZGV4IDJjNzJlYjUuLjg1ODk2MWYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9N YWtlZmlsZQpAQCAtMTAsMyArMTAsNSBAQCBvYmotJChDT05GSUdfRFJNX0kyQ19TSUwxNjQpICs9 IHNpbDE2NC5vCiAKIHRkYTk5OHgteSA6PSB0ZGE5OTh4X2Rydi5vCiBvYmotJChDT05GSUdfRFJN X0kyQ19OWFBfVERBOTk4WCkgKz0gdGRhOTk4eC5vCisKK29iai0kKENPTkZJR19EUk1fVkdBX1NJ TVBMRSkgKz0gdmdhLXNpbXBsZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3Zn YS1zaW1wbGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvdmdhLXNpbXBsZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWQxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTJjL3ZnYS1zaW1wbGUuYwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIFNp bXBsZSB2Z2EgZW5jb2RlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSGVpa28g U3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxs aW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2VkaWQuaD4KKworI2RlZmluZSBjb25uZWN0b3JfdG9fdmdhX3NpbXBsZSh4KSBj b250YWluZXJfb2YoeCwgc3RydWN0IHZnYV9zaW1wbGUsIGNvbm5lY3RvcikKKyNkZWZpbmUgZW5j b2Rlcl90b192Z2Ffc2ltcGxlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdmdhX3NpbXBsZSwg ZW5jb2RlcikKKworc3RydWN0IHZnYV9zaW1wbGUgeworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNv bm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKKworCXN0cnVjdCBkZXZpY2Ug KmRldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKKworCXN0cnVjdCByZWd1bGF0b3IgKnZh YV9yZWc7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87CisKKwlzdHJ1Y3QgbXV0ZXgg ZW5hYmxlX2xvY2s7CisJYm9vbCBlbmFibGVkOworfTsKKworLyoKKyAqIENvbm5lY3RvciBmdW5j dGlvbnMKKyAqLworCitlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHZnYV9zaW1wbGVfZGV0ZWN0 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCSAgICBib29sIGZvcmNlKQor eworCXN0cnVjdCB2Z2Ffc2ltcGxlICp2Z2EgPSBjb25uZWN0b3JfdG9fdmdhX3NpbXBsZShjb25u ZWN0b3IpOworCisJaWYgKCF2Z2EtPmRkYykKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5r bm93bjsKKworCWlmIChkcm1fcHJvYmVfZGRjKHZnYS0+ZGRjKSkKKwkJcmV0dXJuIGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkOworCisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOworfQorCit2b2lkIHZnYV9zaW1wbGVfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVj dG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKK30KKworc3RydWN0IGRy bV9jb25uZWN0b3JfZnVuY3MgdmdhX3NpbXBsZV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMg PSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9w cm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSB2Z2Ffc2ltcGxlX2RldGVj dCwKKwkuZGVzdHJveSA9IHZnYV9zaW1wbGVfY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCisvKgor ICogQ29ubmVjdG9yIGhlbHBlciBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IHZnYV9zaW1w bGVfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCXN0cnVjdCB2Z2Ffc2ltcGxlICp2Z2EgPSBjb25uZWN0b3JfdG9fdmdhX3NpbXBsZShjb25u ZWN0b3IpOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQgPSAwOworCisJaWYgKCF2Z2Et PmRkYykKKwkJcmV0dXJuIDA7CisKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rvciwgdmdh LT5kZGMpOworCWlmIChlZGlkKSB7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9w cm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29u bmVjdG9yLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB2Z2Ffc2ltcGxlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQor eworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyCisqdmdh X3NpbXBsZV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJc3RydWN0IHZnYV9zaW1wbGUgKnZnYSA9IGNvbm5lY3Rvcl90b192Z2Ffc2lt cGxlKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJnZnYS0+ZW5jb2RlcjsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB2Z2Ffc2ltcGxlX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHZnYV9zaW1wbGVfY29ubmVjdG9yX2dldF9tb2Rl cywKKwkuYmVzdF9lbmNvZGVyID0gdmdhX3NpbXBsZV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAor CS5tb2RlX3ZhbGlkID0gdmdhX3NpbXBsZV9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKKy8q CisgKiBFbmNvZGVyIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHZnYV9zaW1wbGVfZW5j b2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rl cl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy X2Z1bmNzIHZnYV9zaW1wbGVfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IHZnYV9zaW1w bGVfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworLyoKKyAqIEVuY29kZXIgaGVscGVyIGZ1bmN0aW9u cworICovCisKK3N0YXRpYyB2b2lkIHZnYV9zaW1wbGVfZW5jb2Rlcl9kcG1zKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IHZnYV9zaW1wbGUgKnZnYSA9 IGVuY29kZXJfdG9fdmdhX3NpbXBsZShlbmNvZGVyKTsKKworCW11dGV4X2xvY2soJnZnYS0+ZW5h YmxlX2xvY2spOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgor CQlpZiAodmdhLT5lbmFibGVkKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCFJU19FUlIodmdhLT52 YWFfcmVnKSkKKwkJCXJlZ3VsYXRvcl9lbmFibGUodmdhLT52YWFfcmVnKTsKKworCQlpZiAodmdh LT5lbmFibGVfZ3BpbykKKwkJCWdwaW9kX3NldF92YWx1ZSh2Z2EtPmVuYWJsZV9ncGlvLCAxKTsK KworCQl2Z2EtPmVuYWJsZWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0RQTVNf U1RBTkRCWToKKwljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKKwljYXNlIERSTV9NT0RFX0RQ TVNfT0ZGOgorCQlpZiAoIXZnYS0+ZW5hYmxlZCkKKwkJCWdvdG8gb3V0OworCisJCWlmICh2Z2Et PmVuYWJsZV9ncGlvKQorCQkJZ3Bpb2Rfc2V0X3ZhbHVlKHZnYS0+ZW5hYmxlX2dwaW8sIDApOwor CisJCWlmICghSVNfRVJSKHZnYS0+dmFhX3JlZykpCisJCQlyZWd1bGF0b3JfZW5hYmxlKHZnYS0+ dmFhX3JlZyk7CisKKwkJdmdhLT5lbmFibGVkID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWJyZWFrOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmdmdhLT5lbmFibGVfbG9jayk7 Cit9CisKK3N0YXRpYyBib29sIHZnYV9zaW1wbGVfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIsCisJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwK KwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgdm9pZCB2Z2Ffc2ltcGxlX2VuY29kZXJfcHJlcGFyZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lkIHZnYV9zaW1wbGVf ZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq YWRqdXN0ZWRfbW9kZSkKK3sKK30KKworc3RhdGljIHZvaWQgdmdhX3NpbXBsZV9lbmNvZGVyX2Nv bW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJdmdhX3NpbXBsZV9lbmNvZGVy X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PTik7Cit9CisKK3N0YXRpYyB2b2lkIHZnYV9z aW1wbGVfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwl2 Z2Ffc2ltcGxlX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZnYV9zaW1wbGVf ZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSB2Z2Ffc2ltcGxlX2VuY29kZXJfZHBt cywKKwkubW9kZV9maXh1cCA9IHZnYV9zaW1wbGVfbW9kZV9maXh1cCwKKwkucHJlcGFyZSA9IHZn YV9zaW1wbGVfZW5jb2Rlcl9wcmVwYXJlLAorCS5tb2RlX3NldCA9IHZnYV9zaW1wbGVfZW5jb2Rl cl9tb2RlX3NldCwKKwkuY29tbWl0ID0gdmdhX3NpbXBsZV9lbmNvZGVyX2NvbW1pdCwKKwkuZGlz YWJsZSA9IHZnYV9zaW1wbGVfZW5jb2Rlcl9kaXNhYmxlLAorfTsKKworLyoKKyAqIENvbXBvbmVu dCBoZWxwZXIgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCB2Z2Ffc2ltcGxlX2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShk ZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCisJc3RydWN0IGRldmljZV9u b2RlICpkZGNfbm9kZSwgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IHZnYV9zaW1w bGUgKnZnYTsKKwlpbnQgcmV0OworCisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2 Z2EgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnZnYSksIEdGUF9LRVJORUwpOworCWlmICgh dmdhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZnYS0+ZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2 ZGF0YShkZXYsIHZnYSk7CisJbXV0ZXhfaW5pdCgmdmdhLT5lbmFibGVfbG9jayk7CisKKwl2Z2Et PmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAiZW5hYmxlIiwKKwkJ CQkJCSAgIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIodmdhLT5lbmFibGVfZ3BpbykpIHsK KwkJcmV0ID0gUFRSX0VSUih2Z2EtPmVuYWJsZV9ncGlvKTsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gcmVxdWVzdCBHUElPOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2 Z2EtPmVuYWJsZWQgPSBmYWxzZTsKKworCWRkY19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwg ImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKGRkY19ub2RlKSB7CisJCXZnYS0+ZGRjID0gb2ZfZmlu ZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKKwkJb2Zfbm9kZV9wdXQoZGRjX25vZGUp OworCQlpZiAoIXZnYS0+ZGRjKSB7CisJCQlkZXZfZGJnKHZnYS0+ZGV2LCAiZmFpbGVkIHRvIHJl YWQgZGRjIG5vZGVcbiIpOworCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9IGVsc2Ug eworCQlkZXZfZGJnKHZnYS0+ZGV2LCAibm8gZGRjIHByb3BlcnR5IGZvdW5kXG4iKTsKKwl9CisK Kwl2Z2EtPnZhYV9yZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAidmFhIik7 CisKKwl2Z2EtPmVuY29kZXIucG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9j cnRjcyhkcm0sIG5wKTsKKwl2Z2EtPmVuY29kZXIub2Zfbm9kZSA9IG5wOworCXZnYS0+Y29ubmVj dG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUIHwKKwkJCQlEUk1fQ09OTkVD VE9SX1BPTExfRElTQ09OTkVDVDsKKworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJnZnYS0+ZW5j b2RlciwgJnZnYV9zaW1wbGVfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCWRybV9lbmNvZGVyX2lu aXQoZHJtLCAmdmdhLT5lbmNvZGVyLCAmdmdhX3NpbXBsZV9lbmNvZGVyX2Z1bmNzLAorCQkJIERS TV9NT0RFX0VOQ09ERVJfREFDKTsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmdmdhLT5j b25uZWN0b3IsCisJCQkJICZ2Z2Ffc2ltcGxlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWRy bV9jb25uZWN0b3JfaW5pdChkcm0sICZ2Z2EtPmNvbm5lY3RvciwgJnZnYV9zaW1wbGVfY29ubmVj dG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSk7CisKKwlkcm1fbW9kZV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnZnYS0+Y29ubmVjdG9yLCAmdmdhLT5lbmNvZGVyKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2Z2Ffc2ltcGxlX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQkgICAgdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgdmdhX3NpbXBsZSAqdmdhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl2 Z2EtPmNvbm5lY3Rvci5mdW5jcy0+ZGVzdHJveSgmdmdhLT5jb25uZWN0b3IpOworCXZnYS0+ZW5j b2Rlci5mdW5jcy0+ZGVzdHJveSgmdmdhLT5lbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb21wb25lbnRfb3BzIHZnYV9zaW1wbGVfb3BzID0geworCS5iaW5kID0gdmdhX3NpbXBs ZV9iaW5kLAorCS51bmJpbmQgPSB2Z2Ffc2ltcGxlX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQg dmdhX3NpbXBsZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVy biBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2Z2Ffc2ltcGxlX29wcyk7Cit9CisKK3N0YXRp YyBpbnQgdmdhX3NpbXBsZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK Kwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2Z2Ffc2ltcGxlX29wcyk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmdhX3NpbXBsZV9pZHNb XSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFkaSxhZHY3MTIzIiwgfSwKKwl7fSwKK307CitNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCB2Z2Ffc2ltcGxlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIHZnYV9zaW1wbGVfZHJpdmVyID0geworCS5wcm9iZSAgPSB2Z2Ffc2ltcGxl X3Byb2JlLAorCS5yZW1vdmUgPSB2Z2Ffc2ltcGxlX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJ2Z2Etc2ltcGxlIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdmdhX3NpbXBsZV9pZHMs CisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHZnYV9zaW1wbGVfZHJpdmVyKTsKKwor TU9EVUxFX0FVVEhPUigiSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4iKTsKK01PRFVM RV9ERVNDUklQVElPTigiU2ltcGxlIHZnYSBjb252ZXJ0ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKLS0gCjIuMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=