From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v7 14/21] drm: imx: Support Synopsys DesignWare MIPI DSI host controller Date: Tue, 30 Dec 2014 11:34:04 +0800 Message-ID: <1419910451-15268-15-git-send-email-Ying.Liu@freescale.com> References: <1419910451-15268-1-git-send-email-Ying.Liu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1419910451-15268-1-git-send-email-Ying.Liu@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, a.hajda@samsung.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kg aG9zdCBjb250cm9sbGVyCndoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBpLk1YNnEvc2RsIFNvQ3Mu CgpTaWduZWQtb2ZmLWJ5OiBMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4KLS0tCnY2 LT52NzoKICogTm9uZS4KCnY1LT52NjoKICogTWFrZSB0aGUgY2hlY2twYXRjaC5wbCBzY3JpcHQg YmUgaGFwcGllci4KCnY0LT52NToKICogTm9uZS4KCnYzLT52NDoKICogTW92ZSB0aGUgcmVsZXZh bnQgZHQtYmluZGluZ3MgdG8gYSBzZXBhcmF0ZSBwYXRjaCB0byBhZGRyZXNzIFN0ZWZhbgogICBX YWhyZW4ncyBjb21tZW50LgoKdjItPnYzOgogKiBUbyBhZGRyZXNzIEFuZHkgWWFuJ3MgY29tbWVu dHMsIG1vdmUgdGhlIGNvbW1vbiBTeW5vcHN5cyBEZXNpZ25XYXJlIE1JUEkgRFNJCiAgIGhvc3Qg Y29udHJvbGxlciBsb2dpYyBpbnRvIGl0J3MgZHJtL2JyaWRnZSBkcml2ZXIgYW5kIGxlYXZlIHRo ZSBpLk1YIHNwZWNpZmljCiAgIGxvZ2ljIG9ubHkuCgp2MS0+djI6CiAqIEFkZHJlc3MgYWxtb3N0 IGFsbCBjb21tZW50cyBmcm9tIFRoaWVycnkgUmVkaW5nIGFuZCBSdXNzZWxsLgogKiBVcGRhdGUg dGhlIERUIGRvY3VtZW50YXRpb24gdG8gcmVtb3ZlIHRoZSBkaXNwbGF5LXRpbWluZ3Mgbm9kZSBp biB0aGUgcGFuZWwgbm9kZS4KICogVXBkYXRlIHRoZSBEVCBkb2N1bWVudGF0aW9uIHRvIHN0YXRl IHRoYXQgdGhlIG5vZGVzIHdoaWNoIHJlcHJlc2VudCB0aGUgcG9zc2libGUKICAgRFJNIENSVENz IHRoZSBjb250cm9sbGVyIG1heSBjb25uZWN0IHdpdGggc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUg bm9kZSAicG9ydHMiLgogKiBSZW1vdmUgdGhlIGZsYWcgJ2VuYWJsZWQnIGZyb20gdGhlIHN0cnVj dCBpbXhfbWlwaV9kc2kuCiAqIE1vdmUgdGhlIGZvcm1hdF90b19icHAoKSBmdW5jdGlvbiBpbiB2 MSB0byB0aGUgY29tbW9uIERSTSBNSVBJIERTSSBkcml2ZXIuCiAqIEltcHJvdmUgdGhlIHdheSB3 ZSB3YWl0IGZvciBjaGVjayBzdGF0dXMgZm9yIERQSFkgYW5kIGNvbW1hbmQgcGFja2V0IHRyYW5z ZmVyLgogKiBJbXByb3ZlIHRoZSBEUE1TIHN1cHBvcnQgZm9yIHRoZSBlbmNvZGVyLgogKiBTcGxp dCB0aGUgZnVuY3Rpb25zIG9mIC0+aG9zdF9hdHRhY2goKSBhbmQgLT5tb2RlX3ZhbGlkKCkgY2xl YXJseSBhcyBzdWdnZXN0ZWQgYnkKICAgVGhpZXJyeSBSZWRpbmcuCiAqIEltcHJvdmUgdGhlIGxv Z2ljcyBpbiBpbXhfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoKS4KICogRW5hYmxlL2Rpc2FibGUg dGhlIHBsbHJlZl9jbGsgYW5kIHBsbHJlZl9nYXRlX2NsayBhdCB0aGUgY29tcG9uZW50IGJpbmRp bmcvdW5iaW5kaW5nCiAgIHN0YWdlcyB0byBoZWxwIHJlbW92ZSB0aGUgZmxhZyAnZW5hYmxlZCcu CiAqIFVwZGF0ZSB0aGUgbW9kdWxlIGxpY2Vuc2UgdG8gYmUgIkdQTCIuCiAqIE90aGVyIG1pbm9y IGNoYW5nZXMsIHN1Y2ggYXMgY29kaW5nIHN0eWxlIGlzc3VlcyBhbmQgbWFjcm8gbmFtaW5nIGlz c3Vlcy4KCiBkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWcgICAgICAgICAgIHwgICA3ICsrCiBk cml2ZXJzL2dwdS9kcm0vaW14L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9pbXgvZHdfbWlwaV9kc2ktaW14LmMgfCAyMzAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyMzggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZHdfbWlwaV9kc2ktaW14LmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vaW14L0tj b25maWcKaW5kZXggODJmYjc1OC4uYzU3NmY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2lteC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZwpAQCAtNTEsMyAr NTEsMTAgQEAgY29uZmlnIERSTV9JTVhfSERNSQogCWRlcGVuZHMgb24gRFJNX0lNWAogCWhlbHAK IAkgIENob29zZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBIRE1JIG9uIGkuTVg2LgorCitjb25m aWcgRFJNX0lNWF9NSVBJX0RTSQorCXRyaXN0YXRlICJGcmVlc2NhbGUgaS5NWCBEUk0gTUlQSSBE U0kiCisJc2VsZWN0IERSTV9EV19NSVBJX0RTSQorCWRlcGVuZHMgb24gRFJNX0lNWAorCWhlbHAK KwkgIENob29zZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBNSVBJIERTSSBvbiBpLk1YNi4KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v aW14L01ha2VmaWxlCmluZGV4IDU4MmM0MzguLmYwZGMyNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pbXgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9NYWtlZmlsZQpA QCAtMTAsMyArMTAsNCBAQCBvYmotJChDT05GSUdfRFJNX0lNWF9MREIpICs9IGlteC1sZGIubwog aW14LWlwdXYzLWNydGMtb2JqcyAgOj0gaXB1djMtY3J0Yy5vIGlwdXYzLXBsYW5lLm8KIG9iai0k KENPTkZJR19EUk1fSU1YX0lQVVYzKQkrPSBpbXgtaXB1djMtY3J0Yy5vCiBvYmotJChDT05GSUdf RFJNX0lNWF9IRE1JKSArPSBpbXgtaGRtaS5vCitvYmotJChDT05GSUdfRFJNX0lNWF9NSVBJX0RT SSkgKz0gZHdfbWlwaV9kc2ktaW14Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgv ZHdfbWlwaV9kc2ktaW14LmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2R3X21pcGlfZHNpLWlteC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzk2ZTIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2R3X21pcGlfZHNpLWlteC5jCkBAIC0wLDAgKzEs MjMwIEBACisvKgorICogaS5NWCBkcm0gZHJpdmVyIC0gTUlQSSBEU0kgSG9zdCBDb250cm9sbGVy CisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Is IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxp bnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4 Yy1ncHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRl b2RldjIuaD4KKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21pcGlfZHNpLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKwor I2luY2x1ZGUgImlteC1kcm0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRQkiaW14LW1pcGktZHNp IgorCitzdHJ1Y3QgaW14X21pcGlfZHNpIHsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgaW14X21pcGlfZHNpICplbmNfdG9fZHNpKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jKQoreworCXJldHVybiBjb250YWluZXJfb2YoZW5jLCBzdHJ1Y3QgaW14X21pcGlf ZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgaW14X21pcGlfZHNpX3NldF9pcHVfZGlf bXV4KHN0cnVjdCBpbXhfbWlwaV9kc2kgKmRzaSwgaW50IGlwdV9kaSkKK3sKKwlyZWdtYXBfdXBk YXRlX2JpdHMoZHNpLT5yZWdtYXAsIElPTVVYQ19HUFIzLAorCQkJICAgSU1YNlFfR1BSM19NSVBJ X01VWF9DVExfTUFTSywKKwkJCSAgIGlwdV9kaSA8PCBJTVg2UV9HUFIzX01JUElfTVVYX0NUTF9T SElGVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgaW14X21pcGlfZHNp X2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBpbXhfZHJtX2VuY29kZXJfZGVzdHJveSwK K307CisKK3N0YXRpYyBib29sIGlteF9taXBpX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7 CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9taXBpX2RzaV9lbmNvZGVyX3By ZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXUzMiBlbmNvZGVyX3BpeF9m bXQsIGludGVyZmFjZV9waXhfZm10OworCisJZW5jb2Rlcl9waXhfZm10ID0gZHdfbWlwaV9kc2lf Z2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KGVuY29kZXIpOworCisJc3dpdGNoIChlbmNvZGVyX3Bp eF9mbXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCWludGVyZmFjZV9waXhfZm10 ID0gVjRMMl9QSVhfRk1UX1JHQjI0OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6CisJCWludGVyZmFjZV9waXhfZm10ID0gVjRMMl9QSVhfRk1UX1JHQjU2NTsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlpbXhfZHJtX3BhbmVsX2Zv cm1hdChlbmNvZGVyLCBpbnRlcmZhY2VfcGl4X2ZtdCk7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9t aXBpX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJ CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworfQorCitzdGF0aWMgdm9pZCBpbXhfbWlwaV9kc2lf ZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBp bXhfbWlwaV9kc2kgKmRzaSA9IGVuY190b19kc2koZW5jb2Rlcik7CisJaW50IG11eCA9IGlteF9k cm1fZW5jb2Rlcl9nZXRfbXV4X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKworCWlt eF9taXBpX2RzaV9zZXRfaXB1X2RpX211eChkc2ksIG11eCk7Cit9CisKK3N0YXRpYyB2b2lkIGlt eF9taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQor eworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBpbXhfbWlwaV9k c2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBpbXhfbWlwaV9kc2lf ZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gaW14X21pcGlfZHNpX2VuY29kZXJfcHJl cGFyZSwKKwkubW9kZV9zZXQgPSBpbXhfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldCwKKwkuY29t bWl0ID0gaW14X21pcGlfZHNpX2VuY29kZXJfY29tbWl0LAorCS5kaXNhYmxlID0gaW14X21pcGlf ZHNpX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBpbnQgaW14X21pcGlfZHNpX3JlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJIHN0cnVjdCBpbXhfbWlwaV9kc2kgKmRz aSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW14X2RybV9lbmNvZGVyX3BhcnNlX29mKGRybSwg JmRzaS0+ZW5jb2RlciwgZHNpLT5kZXYtPm9mX25vZGUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsCisJCQkgICAgICAg JmlteF9taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisJZHJtX2VuY29kZXJfaW5pdChk cm0sICZkc2ktPmVuY29kZXIsICZpbXhfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1f TU9ERV9FTkNPREVSX0RTSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2Rl X3N0YXR1cyBpbXhfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ LyoKKwkgKiBUaGUgVklEX1BLVF9TSVpFIGZpZWxkIGluIHRoZSBEU0lfVklEX1BLVF9DRkcKKwkg KiByZWdpc3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPmhkaXNwbGF5ID4gMHg3ZmYp CisJCXJldHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwkvKgorCSAqIFRoZSBWX0FDVElWRV9MSU5F UyBmaWVsZCBpbiB0aGUgRFNJX1ZUSU1JTkdfQ0ZHCisJICogcmVnaXN0ZXIgaXMgMTEtYml0Lgor CSAqLworCWlmIChtb2RlLT52ZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4gTU9ERV9CQURfVlZB TFVFOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lf cGxhdF9kYXRhIGlteDZxX21pcGlfZHNpX2Rydl9kYXRhID0geworCS5tYXhfZGF0YV9sYW5lcyA9 IDIsCisJLm1vZGVfdmFsaWQgPSBpbXhfbWlwaV9kc2lfbW9kZV92YWxpZCwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteF9taXBpX2RzaV9kdF9pZHNbXSA9IHsKKwl7 CisJIC5jb21wYXRpYmxlID0gImZzbCxpbXg2cS1taXBpLWRzaSIsCisJIC5kYXRhID0gJmlteDZx X21pcGlfZHNpX2Rydl9kYXRhLAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgaW14X21pcGlfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBpbnQgaW14 X21pcGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs CisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9 IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9m X2lkID0KKwkJCW9mX21hdGNoX2RldmljZShpbXhfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOworCWNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgaW14X21pcGlfZHNpICpkc2k7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq ZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNp LT5kZXYgPSBkZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRzaS0+cmVn bWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgImdwciIpOworCWlmIChJ U19FUlIoZHNpLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkc2ktPnJlZ21hcCk7CisKKwly ZXQgPSBpbXhfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBkc2kpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOworCisJcmV0dXJuIGR3X21pcGlf ZHNpX2JpbmQoZGV2LCBtYXN0ZXIsIGRhdGEsICZkc2ktPmVuY29kZXIsIHJlcywgcGRhdGEpOwor fQorCitzdGF0aWMgdm9pZCBpbXhfbWlwaV9kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZSAqbWFzdGVyLAorCXZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGR3X21pcGlf ZHNpX3VuYmluZChkZXYsIG1hc3RlciwgZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29tcG9uZW50X29wcyBpbXhfbWlwaV9kc2lfb3BzID0geworCS5iaW5kCT0gaW14X21pcGlfZHNp X2JpbmQsCisJLnVuYmluZAk9IGlteF9taXBpX2RzaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50 IGlteF9taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl dHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZpbXhfbWlwaV9kc2lfb3BzKTsKK30KKwor c3RhdGljIGludCBpbXhfbWlwaV9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmaW14X21pcGlfZHNpX29wcyk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9taXBpX2Rz aV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGlteF9taXBpX2RzaV9wcm9iZSwKKwkucmVtb3ZlCQk9 IGlteF9taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9 IGlteF9taXBpX2RzaV9kdF9pZHMsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307Citt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlteF9taXBpX2RzaV9kcml2ZXIpOworCitNT0RVTEVfREVT Q1JJUFRJT04oImkuTVggTUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxF X0FVVEhPUigiTGl1IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Iik7CitNT0RVTEVfTElD RU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwotLSAK Mi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==