From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v8 14/21] drm: imx: Support Synopsys DesignWare MIPI DSI host controller Date: Wed, 31 Dec 2014 16:23:32 +0800 Message-ID: <1420014219-915-15-git-send-email-Ying.Liu@freescale.com> References: <1420014219-915-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: <1420014219-915-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 CgpTaWduZWQtb2ZmLWJ5OiBMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4KLS0tCnY3 LT52ODoKICogTm9uZS4KCnY2LT52NzoKICogTm9uZS4KCnY1LT52NjoKICogTWFrZSB0aGUgY2hl Y2twYXRjaC5wbCBzY3JpcHQgYmUgaGFwcGllci4KCnY0LT52NToKICogTm9uZS4KCnYzLT52NDoK ICogTW92ZSB0aGUgcmVsZXZhbnQgZHQtYmluZGluZ3MgdG8gYSBzZXBhcmF0ZSBwYXRjaCB0byBh ZGRyZXNzIFN0ZWZhbgogICBXYWhyZW4ncyBjb21tZW50LgoKdjItPnYzOgogKiBUbyBhZGRyZXNz IEFuZHkgWWFuJ3MgY29tbWVudHMsIG1vdmUgdGhlIGNvbW1vbiBTeW5vcHN5cyBEZXNpZ25XYXJl IE1JUEkgRFNJCiAgIGhvc3QgY29udHJvbGxlciBsb2dpYyBpbnRvIGl0J3MgZHJtL2JyaWRnZSBk cml2ZXIgYW5kIGxlYXZlIHRoZSBpLk1YIHNwZWNpZmljCiAgIGxvZ2ljIG9ubHkuCgp2MS0+djI6 CiAqIEFkZHJlc3MgYWxtb3N0IGFsbCBjb21tZW50cyBmcm9tIFRoaWVycnkgUmVkaW5nIGFuZCBS dXNzZWxsLgogKiBVcGRhdGUgdGhlIERUIGRvY3VtZW50YXRpb24gdG8gcmVtb3ZlIHRoZSBkaXNw bGF5LXRpbWluZ3Mgbm9kZSBpbiB0aGUgcGFuZWwgbm9kZS4KICogVXBkYXRlIHRoZSBEVCBkb2N1 bWVudGF0aW9uIHRvIHN0YXRlIHRoYXQgdGhlIG5vZGVzIHdoaWNoIHJlcHJlc2VudCB0aGUgcG9z c2libGUKICAgRFJNIENSVENzIHRoZSBjb250cm9sbGVyIG1heSBjb25uZWN0IHdpdGggc2hvdWxk IGJlIHBsYWNlZCBpbiB0aGUgbm9kZSAicG9ydHMiLgogKiBSZW1vdmUgdGhlIGZsYWcgJ2VuYWJs ZWQnIGZyb20gdGhlIHN0cnVjdCBpbXhfbWlwaV9kc2kuCiAqIE1vdmUgdGhlIGZvcm1hdF90b19i cHAoKSBmdW5jdGlvbiBpbiB2MSB0byB0aGUgY29tbW9uIERSTSBNSVBJIERTSSBkcml2ZXIuCiAq IEltcHJvdmUgdGhlIHdheSB3ZSB3YWl0IGZvciBjaGVjayBzdGF0dXMgZm9yIERQSFkgYW5kIGNv bW1hbmQgcGFja2V0IHRyYW5zZmVyLgogKiBJbXByb3ZlIHRoZSBEUE1TIHN1cHBvcnQgZm9yIHRo ZSBlbmNvZGVyLgogKiBTcGxpdCB0aGUgZnVuY3Rpb25zIG9mIC0+aG9zdF9hdHRhY2goKSBhbmQg LT5tb2RlX3ZhbGlkKCkgY2xlYXJseSBhcyBzdWdnZXN0ZWQgYnkKICAgVGhpZXJyeSBSZWRpbmcu CiAqIEltcHJvdmUgdGhlIGxvZ2ljcyBpbiBpbXhfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoKS4K ICogRW5hYmxlL2Rpc2FibGUgdGhlIHBsbHJlZl9jbGsgYW5kIHBsbHJlZl9nYXRlX2NsayBhdCB0 aGUgY29tcG9uZW50IGJpbmRpbmcvdW5iaW5kaW5nCiAgIHN0YWdlcyB0byBoZWxwIHJlbW92ZSB0 aGUgZmxhZyAnZW5hYmxlZCcuCiAqIFVwZGF0ZSB0aGUgbW9kdWxlIGxpY2Vuc2UgdG8gYmUgIkdQ TCIuCiAqIE90aGVyIG1pbm9yIGNoYW5nZXMsIHN1Y2ggYXMgY29kaW5nIHN0eWxlIGlzc3VlcyBh bmQgbWFjcm8gbmFtaW5nIGlzc3Vlcy4KCiBkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWcgICAg ICAgICAgIHwgICA3ICsrCiBkcml2ZXJzL2dwdS9kcm0vaW14L01ha2VmaWxlICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pbXgvZHdfbWlwaV9kc2ktaW14LmMgfCAyMzAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyMzggaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZHdfbWlwaV9k c2ktaW14LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vaW14L0tjb25maWcKaW5kZXggODJmYjc1OC4uYzU3NmY2YiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgv S2NvbmZpZwpAQCAtNTEsMyArNTEsMTAgQEAgY29uZmlnIERSTV9JTVhfSERNSQogCWRlcGVuZHMg b24gRFJNX0lNWAogCWhlbHAKIAkgIENob29zZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBIRE1J IG9uIGkuTVg2LgorCitjb25maWcgRFJNX0lNWF9NSVBJX0RTSQorCXRyaXN0YXRlICJGcmVlc2Nh bGUgaS5NWCBEUk0gTUlQSSBEU0kiCisJc2VsZWN0IERSTV9EV19NSVBJX0RTSQorCWRlcGVuZHMg b24gRFJNX0lNWAorCWhlbHAKKwkgIENob29zZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBNSVBJ IERTSSBvbiBpLk1YNi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaW14L01ha2VmaWxlCmluZGV4IDU4MmM0MzguLmYwZGMyNzggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2lteC9NYWtlZmlsZQpAQCAtMTAsMyArMTAsNCBAQCBvYmotJChDT05GSUdfRFJNX0lNWF9M REIpICs9IGlteC1sZGIubwogaW14LWlwdXYzLWNydGMtb2JqcyAgOj0gaXB1djMtY3J0Yy5vIGlw dXYzLXBsYW5lLm8KIG9iai0kKENPTkZJR19EUk1fSU1YX0lQVVYzKQkrPSBpbXgtaXB1djMtY3J0 Yy5vCiBvYmotJChDT05GSUdfRFJNX0lNWF9IRE1JKSArPSBpbXgtaGRtaS5vCitvYmotJChDT05G SUdfRFJNX0lNWF9NSVBJX0RTSSkgKz0gZHdfbWlwaV9kc2ktaW14Lm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pbXgvZHdfbWlwaV9kc2ktaW14LmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14 L2R3X21pcGlfZHNpLWlteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIy Yzk2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2R3X21pcGlfZHNp LWlteC5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogaS5NWCBkcm0gZHJpdmVyIC0gTUlQSSBE U0kgSG9zdCBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgRnJlZXNj YWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAq IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVu dC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQv c3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNp bmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21pcGlf ZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fbWlwaV9kc2kuaD4KKworI2luY2x1ZGUgImlteC1kcm0uaCIKKworI2RlZmluZSBEUklWRVJf TkFNRQkiaW14LW1pcGktZHNpIgorCitzdHJ1Y3QgaW14X21pcGlfZHNpIHsKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlZ21hcCAq cmVnbWFwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW14X21pcGlfZHNpICplbmNfdG9f ZHNpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQoreworCXJldHVybiBjb250YWluZXJfb2YoZW5j LCBzdHJ1Y3QgaW14X21pcGlfZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgaW14X21p cGlfZHNpX3NldF9pcHVfZGlfbXV4KHN0cnVjdCBpbXhfbWlwaV9kc2kgKmRzaSwgaW50IGlwdV9k aSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNpLT5yZWdtYXAsIElPTVVYQ19HUFIzLAorCQkJ ICAgSU1YNlFfR1BSM19NSVBJX01VWF9DVExfTUFTSywKKwkJCSAgIGlwdV9kaSA8PCBJTVg2UV9H UFIzX01JUElfTVVYX0NUTF9TSElGVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXJf ZnVuY3MgaW14X21pcGlfZHNpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBpbXhfZHJt X2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIGlteF9taXBpX2RzaV9lbmNvZGVy X21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9t aXBpX2RzaV9lbmNvZGVyX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CXUzMiBlbmNvZGVyX3BpeF9mbXQsIGludGVyZmFjZV9waXhfZm10OworCisJZW5jb2Rlcl9waXhf Zm10ID0gZHdfbWlwaV9kc2lfZ2V0X2VuY29kZXJfcGl4ZWxfZm9ybWF0KGVuY29kZXIpOworCisJ c3dpdGNoIChlbmNvZGVyX3BpeF9mbXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJ CWludGVyZmFjZV9waXhfZm10ID0gVjRMMl9QSVhfRk1UX1JHQjI0OworCQlicmVhazsKKwljYXNl IE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCWludGVyZmFjZV9waXhfZm10ID0gVjRMMl9QSVhfRk1U X1JHQjU2NTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisK KwlpbXhfZHJtX3BhbmVsX2Zvcm1hdChlbmNvZGVyLCBpbnRlcmZhY2VfcGl4X2ZtdCk7Cit9CisK K3N0YXRpYyB2b2lkIGlteF9taXBpX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJ CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworfQorCitzdGF0aWMg dm9pZCBpbXhfbWlwaV9kc2lfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworCXN0cnVjdCBpbXhfbWlwaV9kc2kgKmRzaSA9IGVuY190b19kc2koZW5jb2Rlcik7 CisJaW50IG11eCA9IGlteF9kcm1fZW5jb2Rlcl9nZXRfbXV4X2lkKGRzaS0+ZGV2LT5vZl9ub2Rl LCBlbmNvZGVyKTsKKworCWlteF9taXBpX2RzaV9zZXRfaXB1X2RpX211eChkc2ksIG11eCk7Cit9 CisKK3N0YXRpYyB2b2lkIGlteF9taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBl cl9mdW5jcyBpbXhfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4 dXAgPSBpbXhfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gaW14X21p cGlfZHNpX2VuY29kZXJfcHJlcGFyZSwKKwkubW9kZV9zZXQgPSBpbXhfbWlwaV9kc2lfZW5jb2Rl cl9tb2RlX3NldCwKKwkuY29tbWl0ID0gaW14X21pcGlfZHNpX2VuY29kZXJfY29tbWl0LAorCS5k aXNhYmxlID0gaW14X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKK307CisKK3N0YXRpYyBpbnQg aW14X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJIHN0cnVj dCBpbXhfbWlwaV9kc2kgKmRzaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW14X2RybV9lbmNv ZGVyX3BhcnNlX29mKGRybSwgJmRzaS0+ZW5jb2RlciwgZHNpLT5kZXYtPm9mX25vZGUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVu Y29kZXIsCisJCQkgICAgICAgJmlteF9taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisJ ZHJtX2VuY29kZXJfaW5pdChkcm0sICZkc2ktPmVuY29kZXIsICZpbXhfbWlwaV9kc2lfZW5jb2Rl cl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0RTSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBpbXhfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCit7CisJLyoKKwkgKiBUaGUgVklEX1BLVF9TSVpFIGZpZWxkIGluIHRoZSBE U0lfVklEX1BLVF9DRkcKKwkgKiByZWdpc3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUt PmhkaXNwbGF5ID4gMHg3ZmYpCisJCXJldHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwkvKgorCSAq IFRoZSBWX0FDVElWRV9MSU5FUyBmaWVsZCBpbiB0aGUgRFNJX1ZUSU1JTkdfQ0ZHCisJICogcmVn aXN0ZXIgaXMgMTEtYml0LgorCSAqLworCWlmIChtb2RlLT52ZGlzcGxheSA+IDB4N2ZmKQorCQly ZXR1cm4gTU9ERV9CQURfVlZBTFVFOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIGlteDZxX21pcGlfZHNpX2Rydl9kYXRhID0gewor CS5tYXhfZGF0YV9sYW5lcyA9IDIsCisJLm1vZGVfdmFsaWQgPSBpbXhfbWlwaV9kc2lfbW9kZV92 YWxpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteF9taXBpX2Rz aV9kdF9pZHNbXSA9IHsKKwl7CisJIC5jb21wYXRpYmxlID0gImZzbCxpbXg2cS1taXBpLWRzaSIs CisJIC5kYXRhID0gJmlteDZxX21pcGlfZHNpX2Rydl9kYXRhLAorCX0sCisJeyAvKiBzZW50aW5l bCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14X21pcGlfZHNpX2R0X2lkcyk7 CisKK3N0YXRpYyBpbnQgaW14X21pcGlfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KKwkJCW9mX21hdGNoX2RldmljZShpbXhfbWlwaV9kc2lf ZHRfaWRzLCBkZXYpOworCWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRh ID0gb2ZfaWQtPmRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0 IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgaW14X21pcGlfZHNpICpk c2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVy biAtRU5PTUVNOworCisJZHNpLT5kZXYgPSBkZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVO T0RFVjsKKworCWRzaS0+cmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShu cCwgImdwciIpOworCWlmIChJU19FUlIoZHNpLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihk c2ktPnJlZ21hcCk7CisKKwlyZXQgPSBpbXhfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBkc2kpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOwor CisJcmV0dXJuIGR3X21pcGlfZHNpX2JpbmQoZGV2LCBtYXN0ZXIsIGRhdGEsICZkc2ktPmVuY29k ZXIsIHJlcywgcGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBpbXhfbWlwaV9kc2lfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCXZvaWQgKmRhdGEpCit7 CisJcmV0dXJuIGR3X21pcGlfZHNpX3VuYmluZChkZXYsIG1hc3RlciwgZGF0YSk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBpbXhfbWlwaV9kc2lfb3BzID0geworCS5i aW5kCT0gaW14X21pcGlfZHNpX2JpbmQsCisJLnVuYmluZAk9IGlteF9taXBpX2RzaV91bmJpbmQs Cit9OworCitzdGF0aWMgaW50IGlteF9taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZpbXhfbWlw aV9kc2lfb3BzKTsKK30KKworc3RhdGljIGludCBpbXhfbWlwaV9kc2lfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmaW14 X21pcGlfZHNpX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGlteF9taXBpX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGlteF9taXBpX2RzaV9w cm9iZSwKKwkucmVtb3ZlCQk9IGlteF9taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJ CS5vZl9tYXRjaF90YWJsZSA9IGlteF9taXBpX2RzaV9kdF9pZHMsCisJCS5uYW1lCT0gRFJJVkVS X05BTUUsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlteF9taXBpX2RzaV9kcml2 ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVggTUlQSSBEU0kgaG9zdCBjb250cm9sbGVy IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGl1IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5j b20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIg RFJJVkVSX05BTUUpOwotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==