From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v2 02/10] drm/msm/dsi: Add DSI PLL for 28nm 8960 PHY Date: Wed, 18 Nov 2015 16:25:23 +0530 Message-ID: <1447844131-4182-3-git-send-email-architt@codeaurora.org> References: <1444827544-25656-1-git-send-email-architt@codeaurora.org> <1447844131-4182-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1447844131-4182-1-git-send-email-architt@codeaurora.org> 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, robdclark@gmail.com Cc: linux-arm-msm@vger.kernel.org, Stephen Boyd List-Id: linux-arm-msm@vger.kernel.org QWRkIERTSSBQTEwgY29tbW9uIGNsb2NrIGZyYW1ld29yayBjbG9ja3MgZm9yIDg5NjAgUEhZLgoK VGhlIFBMTCBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmVzIGZvdW5kIGluIEIgZmFtaWx5 IG1zbSBjaGlwcy4gQXMKYmVmb3JlLCB0aGUgRFNJIHByb3ZpZGVzIHR3byBjbG9ja3MgdG8gdGhl IG91dHNpZGUgd29ybGQuIGRzaXhwbGwgYW5kCmRzaXhwbGxieXRlICh4ID0gMSwgMikuIGRzaXhw bGwgaXMgYSByZWd1bGFyIGNsb2NrIGRpdmlkZXIsIGJ1dApkc2l4cGxsYnl0ZSBpcyBtb2RlbGxl ZCBhcyBhIGN1c3RvbSBjbG9jayBkaXZpZGVyLgoKZHNpeHBsbGJ5dGUgaXMgdGhlIHN0YXJ0aW5n IHBvaW50IG9mIHRoZSBQTEwgY29uZmlndXJhdGlvbi4gSXQgaXMgdGhlCm9uZSB0aGF0IHNldHMg dXAgdGhlIFZDTyBjbG9jayByYXRlLiBXZSBuZWVkIHRoZSBWQ08gY2xvY2sgcmF0ZSBpbiB0aGUK Zm9ybTogRiAqIGJ5dGVjbGssIHdoZXJlIEYgaXMgYSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdGhh dCB2YXJpZXMgb24KdGhlIGJ5dGUgY2xvY2sgdGhlIERTSSBkcml2ZXIgaXMgdHJ5aW5nIHRvIHNl dC4gV2UgdXNlIHRoZSBjdXN0b20KY2xrX29wcyBmb3IgZHNpeHBsbGJ5dGUgdG8gZW5zdXJlIHRo YXQgdGhlIHBhcmVudCAoVkNPKSBpcyBzZXQgYXQgdGhpcwpyYXRlLgoKQW4gYWRkaXRpb25hbCBk aXZpZGVyIChQT1NURElWMSkgZ2VuZXJhdGVzIHRoZSBiaXRjbGsuIFNpbmNlIGJpdCBjbG9jawpj YW4gYmUgZGVyaXZlZCBmcm9tIGJ5dGVjbG9jaywgd2UgY2FsY3VsYXRlIGl0IGludGVybmFsbHks IGFuZCBkb24ndApleHBvc2UgaXQgYXMgYSBjbG9jay4KCkNjOiBTdGVwaGVuIEJveWQgPHNib3lk QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNv ZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmMg ICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmgg ICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4 bm1fODk2MC5jIHwgNTMzICsrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCA1NDcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggNzUy M2VjYS4uMTU2YTkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw3IEBAIG1zbS0k KENPTkZJR19EUk1fTVNNX0RTSV8yOE5NXzg5NjBfUEhZKSArPSBkc2kvcGh5L2RzaV9waHlfMjhu bV84OTYwLm8KIGlmZXEgKCQoQ09ORklHX0RSTV9NU01fRFNJX1BMTCkseSkKIG1zbS15ICs9IGRz aS9wbGwvZHNpX3BsbC5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMjhOTV9QSFkpICs9IGRz aS9wbGwvZHNpX3BsbF8yOG5tLm8KK21zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8yOE5NXzg5NjBf UEhZKSArPSBkc2kvcGxsL2RzaV9wbGxfMjhubV84OTYwLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJ R19EUk1fTVNNKQkrPSBtc20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGxsL2RzaV9wbGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmMKaW5k ZXggNTEwNGZjOS4uNWNkNDM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGxsL2RzaV9wbGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3BsbC5j CkBAIC0xNTEsNiArMTUxLDkgQEAgc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BsbF9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJY2FzZSBNU01fRFNJX1BIWV8yOE5NX0xQ OgogCQlwbGwgPSBtc21fZHNpX3BsbF8yOG5tX2luaXQocGRldiwgdHlwZSwgaWQpOwogCQlicmVh azsKKwljYXNlIE1TTV9EU0lfUEhZXzI4Tk1fODk2MDoKKwkJcGxsID0gbXNtX2RzaV9wbGxfMjhu bV84OTYwX2luaXQocGRldiwgaWQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwbGwgPSBFUlJf UFRSKC1FTlhJTyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2kvcGxsL2RzaV9wbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsLmgK aW5kZXggMDYzY2FhMi4uODBiNjAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2kvcGxsL2RzaV9wbGwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9wbGwvZHNpX3Bs bC5oCkBAIC05Myw2ICs5MywxNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtc21fZHNpX3BsbCAq bXNtX2RzaV9wbGxfMjhubV9pbml0KAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogI2Vu ZGlmCisjaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJXzI4Tk1fODk2MF9QSFkKK3N0cnVjdCBtc21f ZHNpX3BsbCAqbXNtX2RzaV9wbGxfMjhubV84OTYwX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwkJCQkJICAgICAgIGludCBpZCk7CisjZWxzZQorc3RydWN0IG1zbV9kc2lfcGxs ICptc21fZHNpX3BsbF8yOG5tXzg5NjBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LAorCQkJCQkgICAgICAgaW50IGlkKQoreworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworfQor I2VuZGlmCiAKICNlbmRpZiAvKiBfX0RTSV9QTExfSF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kc2kvcGxsL2RzaV9wbGxfMjhubV84OTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMzhjOTBlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpL3BsbC9kc2lfcGxsXzI4bm1fODk2MC5jCkBAIC0wLDAgKzEsNTMzIEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPgorCisjaW5jbHVkZSAiZHNpX3BsbC5oIgorI2luY2x1ZGUgImRzaS54bWwuaCIKKwor LyoKKyAqIERTSSBQTEwgMjhubSAoODk2MC9BIGZhbWlseSkgLSBjbG9jayBkaWFncmFtIChlZzog RFNJMSk6CisgKgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLSsKKyAqICBk c2kxdmNvX2NsayAtLS0tby0tLS0tfCBESVYxIHwtLS1kc2kxcGxsYml0IChub3QgZXhwb3NlZCBh cyBjbG9jaykKKyAqICBGICogYnl0ZV9jbGsgICAgfCAgICAgKy0tLS0tLSsKKyAqICAgICAgICAg ICAgICAgICAgfCBiaXQgY2xvY2sgZGl2aWRlciAoRiAvIDgpCisgKiAgICAgICAgICAgICAgICAg IHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLSsKKyAqICAgICAgICAgICAgICAg ICAgby0tLS0tfCBESVYyIHwtLS1kc2kwcGxsYnl0ZS0tLW8tLS0+IFRvIGJ5dGUgUkNHCisgKiAg ICAgICAgICAgICAgICAgIHwgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICB8IChzZXRzIHBh cmVudCByYXRlKQorICogICAgICAgICAgICAgICAgICB8IGJ5dGUgY2xvY2sgZGl2aWRlciAoRikg ICAgICAgfAorICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAorICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg by0tLT4gVG8gZXNjIFJDRworICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZG9lc24ndCBzZXQgcGFyZW50IHJhdGUpCisgKiAgICAgICAgICAgICAg ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLSsKKyAqICAgICAgICAgICAg ICAgICAgby0tLS0tfCBESVYzIHwtLS0tZHNpMHBsbC0tLS0tLW8tLS0+IFRvIGRzaSBSQ0cKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgIHwgKHNldHMg cGFyZW50IHJhdGUpCisgKiAgICAgICAgICAgICAgICAgIGRzaSBjbG9jayBkaXZpZGVyIChGICog bWFnaWMpICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvLS0tPiBUbyBwaXhlbCByY2cKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZG9lc24ndCBzZXQgcGFyZW50IHJhdGUpCisgKi8KKworI2RlZmlu ZSBQT0xMX01BWF9SRUFEUwkJODAwMAorI2RlZmluZSBQT0xMX1RJTUVPVVRfVVMJCTEKKworI2Rl ZmluZSBOVU1fUFJPVklERURfQ0xLUwkyCisKKyNkZWZpbmUgVkNPX1JFRl9DTEtfUkFURQkyNzAw MDAwMAorI2RlZmluZSBWQ09fTUlOX1JBVEUJCTYwMDAwMDAwMAorI2RlZmluZSBWQ09fTUFYX1JB VEUJCTEyMDAwMDAwMDAKKworI2RlZmluZSBEU0lfQllURV9QTExfQ0xLCTAKKyNkZWZpbmUgRFNJ X1BJWEVMX1BMTF9DTEsJMQorCisjZGVmaW5lIFZDT19QUkVGX0RJVl9SQVRJTwkyNworCitzdHJ1 Y3QgcGxsXzI4bm1fY2FjaGVkX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIHZjb19yYXRlOworCXU4 IHBvc3RkaXYzOworCXU4IHBvc3RkaXYyOworCXU4IHBvc3RkaXYxOworfTsKKworc3RydWN0IGNs a19ieXRlZGl2IHsKKwlzdHJ1Y3QgY2xrX2h3IGh3OworCXZvaWQgX19pb21lbSAqcmVnOworfTsK Kworc3RydWN0IGRzaV9wbGxfMjhubSB7CisJc3RydWN0IG1zbV9kc2lfcGxsIGJhc2U7CisKKwlp bnQgaWQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl2b2lkIF9faW9tZW0gKm1t aW87CisKKwkvKiBjdXN0b20gYnl0ZSBjbG9jayBkaXZpZGVyICovCisJc3RydWN0IGNsa19ieXRl ZGl2ICpieXRlZGl2OworCisJLyogcHJpdmF0ZSBjbG9ja3M6ICovCisJc3RydWN0IGNsayAqY2xr c1tOVU1fRFNJX0NMT0NLU19NQVhdOworCXUzMiBudW1fY2xrczsKKworCS8qIGNsb2NrLXByb3Zp ZGVyOiAqLworCXN0cnVjdCBjbGsgKnByb3ZpZGVkX2Nsa3NbTlVNX1BST1ZJREVEX0NMS1NdOwor CXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOworCisJc3RydWN0IHBsbF8yOG5tX2Nh Y2hlZF9zdGF0ZSBjYWNoZWRfc3RhdGU7Cit9OworCisjZGVmaW5lIHRvX3BsbF8yOG5tKHgpCWNv bnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHNpX3BsbF8yOG5tLCBiYXNlKQorCitzdGF0aWMgYm9vbCBw bGxfMjhubV9wb2xsX2Zvcl9yZWFkeShzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSwKKwkJ CQkgICAgaW50IG5iX3RyaWVzLCBpbnQgdGltZW91dF91cykKK3sKKwlib29sIHBsbF9sb2NrZWQg PSBmYWxzZTsKKwl1MzIgdmFsOworCisJd2hpbGUgKG5iX3RyaWVzLS0pIHsKKwkJdmFsID0gcGxs X3JlYWQocGxsXzI4bm0tPm1taW8gKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX1JEWSk7CisJ CXBsbF9sb2NrZWQgPSAhISh2YWwgJiBEU0lfMjhubV84OTYwX1BIWV9QTExfUkRZX1BMTF9SRFkp OworCisJCWlmIChwbGxfbG9ja2VkKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KHRpbWVvdXRfdXMp OworCX0KKwlEQkcoIkRTSSBQTEwgaXMgJXNsb2NrZWQiLCBwbGxfbG9ja2VkID8gIiIgOiAiKm5v dCogIik7CisKKwlyZXR1cm4gcGxsX2xvY2tlZDsKK30KKworLyoKKyAqIENsb2NrIENhbGxiYWNr cworICovCitzdGF0aWMgaW50IGRzaV9wbGxfMjhubV9jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19o dyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCit7CisJc3RydWN0IG1zbV9kc2lfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsK KwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9IHRvX3BsbF8yOG5tKHBsbCk7CisJdm9p ZCBfX2lvbWVtICpiYXNlID0gcGxsXzI4bm0tPm1taW87CisJdTMyIHZhbCwgdGVtcCwgZmJfZGl2 aWRlcjsKKworCURCRygicmF0ZT0lbHUsIHBhcmVudCdzPSVsdSIsIHJhdGUsIHBhcmVudF9yYXRl KTsKKworCXRlbXAgPSByYXRlIC8gMTA7CisJdmFsID0gVkNPX1JFRl9DTEtfUkFURSAvIDEwOwor CWZiX2RpdmlkZXIgPSAodGVtcCAqIFZDT19QUkVGX0RJVl9SQVRJTykgLyB2YWw7CisJZmJfZGl2 aWRlciA9IGZiX2RpdmlkZXIgLyAyIC0gMTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhu bV84OTYwX1BIWV9QTExfQ1RSTF8xLAorCQkJZmJfZGl2aWRlciAmIDB4ZmYpOworCisJdmFsID0g cGxsX3JlYWQoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8yKTsKKworCXZh bCB8PSAoZmJfZGl2aWRlciA+PiA4KSAmIDB4MDc7CisKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19E U0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8yLAorCQkJdmFsKTsKKworCXZhbCA9IHBsbF9yZWFk KGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMyk7CisKKwl2YWwgfD0gKFZD T19QUkVGX0RJVl9SQVRJTyAtIDEpICYgMHgzZjsKKworCXBsbF93cml0ZShiYXNlICsgUkVHX0RT SV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzMsCisJCQl2YWwpOworCisJcGxsX3dyaXRlKGJhc2Ug KyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfNiwKKwkJCTB4Zik7CisKKwl2YWwgPSBw bGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzgpOworCXZhbCB8 PSAweDcgPDwgNDsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExf Q1RSTF84LAorCQkJdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzaV9wbGxf MjhubV9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXNtX2Rz aV9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBs bF8yOG5tID0gdG9fcGxsXzI4bm0ocGxsKTsKKworCXJldHVybiBwbGxfMjhubV9wb2xsX2Zvcl9y ZWFkeShwbGxfMjhubSwgUE9MTF9NQVhfUkVBRFMsCisJCQkJCVBPTExfVElNRU9VVF9VUyk7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRzaV9wbGxfMjhubV9jbGtfcmVjYWxjX3JhdGUoc3Ry dWN0IGNsa19odyAqaHcsCisJCQkJCQkgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJ c3RydWN0IG1zbV9kc2lfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHNp X3BsbF8yOG5tICpwbGxfMjhubSA9IHRvX3BsbF8yOG5tKHBsbCk7CisJdm9pZCBfX2lvbWVtICpi YXNlID0gcGxsXzI4bm0tPm1taW87CisJdW5zaWduZWQgbG9uZyB2Y29fcmF0ZTsKKwl1MzIgc3Rh dHVzLCBmYl9kaXZpZGVyLCB0ZW1wLCByZWZfZGl2aWRlcjsKKworCVZFUkIoInBhcmVudF9yYXRl PSVsdSIsIHBhcmVudF9yYXRlKTsKKworCXN0YXR1cyA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJ XzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMCk7CisKKwlpZiAoc3RhdHVzICYgRFNJXzI4bm1fODk2 MF9QSFlfUExMX0NUUkxfMF9FTkFCTEUpIHsKKwkJZmJfZGl2aWRlciA9IHBsbF9yZWFkKGJhc2Ug KyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMSk7CisJCWZiX2RpdmlkZXIgJj0gMHhm ZjsKKwkJdGVtcCA9IHBsbF9yZWFkKGJhc2UgKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NU UkxfMikgJiAweDA3OworCQlmYl9kaXZpZGVyID0gKHRlbXAgPDwgOCkgfCBmYl9kaXZpZGVyOwor CQlmYl9kaXZpZGVyICs9IDE7CisKKwkJcmVmX2RpdmlkZXIgPSBwbGxfcmVhZChiYXNlICsgUkVH X0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzMpOworCQlyZWZfZGl2aWRlciAmPSAweDNmOwor CQlyZWZfZGl2aWRlciArPSAxOworCisJCS8qIG11bHRpcGx5IGJ5IDIgKi8KKwkJdmNvX3JhdGUg PSAocGFyZW50X3JhdGUgLyByZWZfZGl2aWRlcikgKiBmYl9kaXZpZGVyICogMjsKKwl9IGVsc2Ug eworCQl2Y29fcmF0ZSA9IDA7CisJfQorCisJREJHKCJyZXR1cm5pbmcgdmNvIHJhdGUgPSAlbHUi LCB2Y29fcmF0ZSk7CisKKwlyZXR1cm4gdmNvX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY2xrX29wcyBjbGtfb3BzX2RzaV9wbGxfMjhubV92Y28gPSB7CisJLnJvdW5kX3JhdGUgPSBt c21fZHNpX3BsbF9oZWxwZXJfY2xrX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gZHNpX3BsbF8y OG5tX2Nsa19zZXRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBkc2lfcGxsXzI4bm1fY2xrX3JlY2Fs Y19yYXRlLAorCS5wcmVwYXJlID0gbXNtX2RzaV9wbGxfaGVscGVyX2Nsa19wcmVwYXJlLAorCS51 bnByZXBhcmUgPSBtc21fZHNpX3BsbF9oZWxwZXJfY2xrX3VucHJlcGFyZSwKKwkuaXNfZW5hYmxl ZCA9IGRzaV9wbGxfMjhubV9jbGtfaXNfZW5hYmxlZCwKK307CisKKy8qCisgKiBDdXN0b20gYnl0 ZSBjbG9jayBkaXZpZXIgY2xrX29wcworICoKKyAqIFRoaXMgY2xvY2sgaXMgdGhlIGVudHJ5IHBv aW50IHRvIGNvbmZpZ3VyaW5nIHRoZSBQTEwuIFRoZSB1c2VyIChkc2kgaG9zdCkKKyAqIHdpbGwg c2V0IHRoaXMgY2xvY2sncyByYXRlIHRvIHRoZSBkZXNpcmVkIGJ5dGUgY2xvY2sgcmF0ZS4gVGhl IFZDTyBsb2NrCisgKiBmcmVxdWVuY3kgaXMgYSBtdWx0aXBsZSBvZiB0aGUgYnl0ZSBjbG9jayBy YXRlLiBUaGUgbXVsdGlwbGljYXRpb24gZmFjdG9yCisgKiAoc2hvd24gYXMgRiBpbiB0aGUgZGlh Z3JhbSBhYm92ZSkgaXMgYSBmdW5jdGlvbiBvZiB0aGUgYnl0ZSBjbG9jayByYXRlLgorICoKKyAq IFRoaXMgY3VzdG9tIGRpdmlkZXIgY2xvY2sgZW5zdXJlcyB0aGF0IGl0cyBwYXJlbnQgKFZDTykg aXMgc2V0IHRvIHRoZQorICogZGVzaXJlZCByYXRlLCBhbmQgdGhhdCB0aGUgYnl0ZSBjbG9jayBw b3N0ZGl2aWRlciAoUE9TVERJVjIpIGlzIGNvbmZpZ3VyZWQKKyAqIGFjY29yZGluZ2x5CisgKi8K KyNkZWZpbmUgdG9fY2xrX2J5dGVkaXYoX2h3KSBjb250YWluZXJfb2YoX2h3LCBzdHJ1Y3QgY2xr X2J5dGVkaXYsIGh3KQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfYnl0ZWRpdl9yZWNhbGNf cmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sK KwlzdHJ1Y3QgY2xrX2J5dGVkaXYgKmJ5dGVkaXYgPSB0b19jbGtfYnl0ZWRpdihodyk7CisJdW5z aWduZWQgaW50IGRpdjsKKworCWRpdiA9IHBsbF9yZWFkKGJ5dGVkaXYtPnJlZykgJiAweGZmOwor CisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCisvKiBmaW5kIG11bHRpcGxp Y2F0aW9uIGZhY3Rvcih3cnQgYnl0ZSBjbG9jaykgYXQgd2hpY2ggdGhlIFZDTyBzaG91bGQgYmUg c2V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF92Y29fbXVsX2ZhY3Rvcih1bnNpZ25lZCBs b25nIGJ5dGVfY2xrX3JhdGUpCit7CisJdW5zaWduZWQgbG9uZyBiaXRfbWh6OworCisJLyogY29u dmVydCB0byBiaXQgY2xvY2sgaW4gTWh6ICovCisJYml0X21oeiA9IChieXRlX2Nsa19yYXRlICog OCkgLyAxMDAwMDAwOworCisJaWYgKGJpdF9taHogPCAxMjUpCisJCXJldHVybiA2NDsKKwllbHNl IGlmIChiaXRfbWh6IDwgMjUwKQorCQlyZXR1cm4gMzI7CisJZWxzZSBpZiAoYml0X21oeiA8IDYw MCkKKwkJcmV0dXJuIDE2OworCWVsc2UKKwkJcmV0dXJuIDg7Cit9CisKK3N0YXRpYyBsb25nIGNs a19ieXRlZGl2X3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0 ZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpwcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJlc3Rf cGFyZW50OworCXVuc2lnbmVkIGludCBmYWN0b3I7CisKKwlmYWN0b3IgPSBnZXRfdmNvX211bF9m YWN0b3IocmF0ZSk7CisKKwliZXN0X3BhcmVudCA9IHJhdGUgKiBmYWN0b3I7CisJKnByYXRlID0g Y2xrX2h3X3JvdW5kX3JhdGUoY2xrX2h3X2dldF9wYXJlbnQoaHcpLCBiZXN0X3BhcmVudCk7CisK KwlyZXR1cm4gKnByYXRlIC8gZmFjdG9yOworfQorCitzdGF0aWMgaW50IGNsa19ieXRlZGl2X3Nl dF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJdW5zaWdu ZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrX2J5dGVkaXYgKmJ5dGVkaXYgPSB0 b19jbGtfYnl0ZWRpdihodyk7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgZmFjdG9yOworCisJ ZmFjdG9yID0gZ2V0X3Zjb19tdWxfZmFjdG9yKHJhdGUpOworCisJdmFsID0gcGxsX3JlYWQoYnl0 ZWRpdi0+cmVnKTsKKwl2YWwgfD0gKGZhY3RvciAtIDEpICYgMHhmZjsKKwlwbGxfd3JpdGUoYnl0 ZWRpdi0+cmVnLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE91ciBzcGVjaWFsIGJ5dGUg Y2xvY2sgZGl2aWRlciBvcHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfYnl0 ZWRpdl9vcHMgPSB7CisJLnJvdW5kX3JhdGUgPSBjbGtfYnl0ZWRpdl9yb3VuZF9yYXRlLAorCS5z ZXRfcmF0ZSA9IGNsa19ieXRlZGl2X3NldF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IGNsa19ieXRl ZGl2X3JlY2FsY19yYXRlLAorfTsKKworLyoKKyAqIFBMTCBDYWxsYmFja3MKKyAqLworc3RhdGlj IGludCBkc2lfcGxsXzI4bm1fZW5hYmxlX3NlcShzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCkKK3sK KwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9IHRvX3BsbF8yOG5tKHBsbCk7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBsbF8yOG5tLT5wZGV2LT5kZXY7CisJdm9pZCBfX2lvbWVtICpi YXNlID0gcGxsXzI4bm0tPm1taW87CisJYm9vbCBsb2NrZWQ7CisJdW5zaWduZWQgaW50IGJpdF9k aXYsIGJ5dGVfZGl2OworCWludCBtYXhfcmVhZHMgPSAxMDAwLCB0aW1lb3V0X3VzID0gMTAwOwor CXUzMiB2YWw7CisKKwlEQkcoImlkPSVkIiwgcGxsXzI4bm0tPmlkKTsKKworCS8qCisJICogYmVm b3JlIGVuYWJsaW5nIHRoZSBQTEwsIGNvbmZpZ3VyZSB0aGUgYml0IGNsb2NrIGRpdmlkZXIgc2lu Y2Ugd2UKKwkgKiBkb24ndCBleHBvc2UgaXQgYXMgYSBjbG9jayB0byB0aGUgb3V0c2lkZSB3b3Js ZAorCSAqIDE6IHJlYWQgYmFjayB0aGUgYnl0ZSBjbG9jayBkaXZpZGVyIHRoYXQgc2hvdWxkIGFs cmVhZHkgYmUgc2V0CisJICogMjogZGl2aWRlIGJ5IDggdG8gZ2V0IGJpdCBjbG9jayBkaXZpZGVy CisJICogMzogd3JpdGUgaXQgdG8gUE9TVERJVjEKKwkgKi8KKwl2YWwgPSBwbGxfcmVhZChiYXNl ICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzkpOworCWJ5dGVfZGl2ID0gdmFsICsg MTsKKwliaXRfZGl2ID0gYnl0ZV9kaXYgLyA4OworCisJdmFsID0gcGxsX3JlYWQoYmFzZSArIFJF R19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF84KTsKKwl2YWwgJj0gfjB4ZjsKKwl2YWwgfD0g KGJpdF9kaXYgLSAxKTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9Q TExfQ1RSTF84LCB2YWwpOworCisJLyogZW5hYmxlIHRoZSBQTEwgKi8KKwlwbGxfd3JpdGUoYmFz ZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8wLAorCQkJRFNJXzI4bm1fODk2MF9Q SFlfUExMX0NUUkxfMF9FTkFCTEUpOworCisJbG9ja2VkID0gcGxsXzI4bm1fcG9sbF9mb3JfcmVh ZHkocGxsXzI4bm0sIG1heF9yZWFkcywgdGltZW91dF91cyk7CisKKwlpZiAodW5saWtlbHkoIWxv Y2tlZCkpCisJCWRldl9lcnIoZGV2LCAiRFNJIFBMTCBsb2NrIGZhaWxlZFxuIik7CisJZWxzZQor CQlEQkcoIkRTSSBQTEwgbG9jayBzdWNjZXNzIik7CisKKwlyZXR1cm4gbG9ja2VkID8gMCA6IC1F SU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wbGxfMjhubV9kaXNhYmxlX3NlcShzdHJ1Y3Qg bXNtX2RzaV9wbGwgKnBsbCkKK3sKKwlzdHJ1Y3QgZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9IHRv X3BsbF8yOG5tKHBsbCk7CisKKwlEQkcoImlkPSVkIiwgcGxsXzI4bm0tPmlkKTsKKwlwbGxfd3Jp dGUocGxsXzI4bm0tPm1taW8gKyBSRUdfRFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMCwgMHgw MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wbGxfMjhubV9zYXZlX3N0YXRlKHN0cnVjdCBtc21f ZHNpX3BsbCAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tID0gdG9fcGxs XzI4bm0ocGxsKTsKKwlzdHJ1Y3QgcGxsXzI4bm1fY2FjaGVkX3N0YXRlICpjYWNoZWRfc3RhdGUg PSAmcGxsXzI4bm0tPmNhY2hlZF9zdGF0ZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwbGxfMjhu bS0+bW1pbzsKKworCWNhY2hlZF9zdGF0ZS0+cG9zdGRpdjMgPQorCQkJcGxsX3JlYWQoYmFzZSAr IFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF8xMCk7CisJY2FjaGVkX3N0YXRlLT5wb3N0 ZGl2MiA9CisJCQlwbGxfcmVhZChiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJM XzkpOworCWNhY2hlZF9zdGF0ZS0+cG9zdGRpdjEgPQorCQkJcGxsX3JlYWQoYmFzZSArIFJFR19E U0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF84KTsKKworCWNhY2hlZF9zdGF0ZS0+dmNvX3JhdGUg PSBjbGtfaHdfZ2V0X3JhdGUoJnBsbC0+Y2xrX2h3KTsKK30KKworc3RhdGljIGludCBkc2lfcGxs XzI4bm1fcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbCkKK3sKKwlzdHJ1Y3Qg ZHNpX3BsbF8yOG5tICpwbGxfMjhubSA9IHRvX3BsbF8yOG5tKHBsbCk7CisJc3RydWN0IHBsbF8y OG5tX2NhY2hlZF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gJnBsbF8yOG5tLT5jYWNoZWRfc3RhdGU7 CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsXzI4bm0tPm1taW87CisJaW50IHJldDsKKworCXJl dCA9IGRzaV9wbGxfMjhubV9jbGtfc2V0X3JhdGUoJnBsbC0+Y2xrX2h3LAorCQkJCQljYWNoZWRf c3RhdGUtPnZjb19yYXRlLCAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBsbF8yOG5tLT5w ZGV2LT5kZXYsCisJCQkicmVzdG9yZSB2Y28gcmF0ZSBmYWlsZWQuIHJldD0lZFxuIiwgcmV0KTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYw X1BIWV9QTExfQ1RSTF8xMCwKKwkJCWNhY2hlZF9zdGF0ZS0+cG9zdGRpdjMpOworCXBsbF93cml0 ZShiYXNlICsgUkVHX0RTSV8yOG5tXzg5NjBfUEhZX1BMTF9DVFJMXzksCisJCQljYWNoZWRfc3Rh dGUtPnBvc3RkaXYyKTsKKwlwbGxfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV84OTYwX1BIWV9Q TExfQ1RSTF84LAorCQkJY2FjaGVkX3N0YXRlLT5wb3N0ZGl2MSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBkc2lfcGxsXzI4bm1fZ2V0X3Byb3ZpZGVyKHN0cnVjdCBtc21fZHNpX3Bs bCAqcGxsLAorCQkJCXN0cnVjdCBjbGsgKipieXRlX2Nsa19wcm92aWRlciwKKwkJCQlzdHJ1Y3Qg Y2xrICoqcGl4ZWxfY2xrX3Byb3ZpZGVyKQoreworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8y OG5tID0gdG9fcGxsXzI4bm0ocGxsKTsKKworCWlmIChieXRlX2Nsa19wcm92aWRlcikKKwkJKmJ5 dGVfY2xrX3Byb3ZpZGVyID0gcGxsXzI4bm0tPnByb3ZpZGVkX2Nsa3NbRFNJX0JZVEVfUExMX0NM S107CisJaWYgKHBpeGVsX2Nsa19wcm92aWRlcikKKwkJKnBpeGVsX2Nsa19wcm92aWRlciA9CisJ CQkJcGxsXzI4bm0tPnByb3ZpZGVkX2Nsa3NbRFNJX1BJWEVMX1BMTF9DTEtdOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wbGxfMjhubV9kZXN0cm95KHN0cnVjdCBtc21fZHNp X3BsbCAqcGxsKQoreworCXN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5tID0gdG9fcGxsXzI4 bm0ocGxsKTsKKworCW1zbV9kc2lfcGxsX2hlbHBlcl91bnJlZ2lzdGVyX2Nsa3MocGxsXzI4bm0t PnBkZXYsCisJCQkJCXBsbF8yOG5tLT5jbGtzLCBwbGxfMjhubS0+bnVtX2Nsa3MpOworfQorCitz dGF0aWMgaW50IHBsbF8yOG5tX3JlZ2lzdGVyKHN0cnVjdCBkc2lfcGxsXzI4bm0gKnBsbF8yOG5t KQoreworCWNoYXIgKmNsa19uYW1lLCAqcGFyZW50X25hbWUsICp2Y29fbmFtZTsKKwlzdHJ1Y3Qg Y2xrX2luaXRfZGF0YSB2Y29faW5pdCA9IHsKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFy ICpbXSl7ICJweG8iIH0sCisJCS5udW1fcGFyZW50cyA9IDEsCisJCS5vcHMgPSAmY2xrX29wc19k c2lfcGxsXzI4bm1fdmNvLAorCX07CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBsbF8yOG5tLT5w ZGV2LT5kZXY7CisJc3RydWN0IGNsayAqKmNsa3MgPSBwbGxfMjhubS0+Y2xrczsKKwlzdHJ1Y3Qg Y2xrICoqcHJvdmlkZWRfY2xrcyA9IHBsbF8yOG5tLT5wcm92aWRlZF9jbGtzOworCXN0cnVjdCBj bGtfYnl0ZWRpdiAqYnl0ZWRpdjsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBieXRlZGl2X2luaXQg PSB7IH07CisJaW50IHJldCwgbnVtID0gMDsKKworCURCRygiJWQiLCBwbGxfMjhubS0+aWQpOwor CisJYnl0ZWRpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYnl0ZWRpdiksIEdGUF9LRVJO RUwpOworCWlmICghYnl0ZWRpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2Y29fbmFtZSA9IGRl dm1fa3phbGxvYyhkZXYsIDMyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjb19uYW1lKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCXBhcmVudF9uYW1lID0gZGV2bV9remFsbG9jKGRldiwgMzIsIEdGUF9L RVJORUwpOworCWlmICghcGFyZW50X25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCisJY2xrX25h bWUgPSBkZXZtX2t6YWxsb2MoZGV2LCAzMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGtfbmFtZSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGxfMjhubS0+Ynl0ZWRpdiA9IGJ5dGVkaXY7CisKKwlz bnByaW50Zih2Y29fbmFtZSwgMzIsICJkc2klZHZjb19jbGsiLCBwbGxfMjhubS0+aWQpOworCXZj b19pbml0Lm5hbWUgPSB2Y29fbmFtZTsKKworCXBsbF8yOG5tLT5iYXNlLmNsa19ody5pbml0ID0g JnZjb19pbml0OworCisJY2xrc1tudW0rK10gPSBjbGtfcmVnaXN0ZXIoZGV2LCAmcGxsXzI4bm0t PmJhc2UuY2xrX2h3KTsKKworCS8qIHByZXBhcmUgYW5kIHJlZ2lzdGVyIGJ5dGVkaXYgKi8KKwli eXRlZGl2LT5ody5pbml0ID0gJmJ5dGVkaXZfaW5pdDsKKwlieXRlZGl2LT5yZWcgPSBwbGxfMjhu bS0+bW1pbyArIFJFR19EU0lfMjhubV84OTYwX1BIWV9QTExfQ1RSTF85OworCisJc25wcmludGYo cGFyZW50X25hbWUsIDMyLCAiZHNpJWR2Y29fY2xrIiwgcGxsXzI4bm0tPmlkKTsKKwlzbnByaW50 ZihjbGtfbmFtZSwgMzIsICJkc2klZHBsbGJ5dGUiLCBwbGxfMjhubS0+aWQpOworCisJYnl0ZWRp dl9pbml0Lm5hbWUgPSBjbGtfbmFtZTsKKwlieXRlZGl2X2luaXQub3BzID0gJmNsa19ieXRlZGl2 X29wczsKKwlieXRlZGl2X2luaXQuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UOworCWJ5dGVk aXZfaW5pdC5wYXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqIGNvbnN0ICopICZwYXJlbnRfbmFt ZTsKKwlieXRlZGl2X2luaXQubnVtX3BhcmVudHMgPSAxOworCisJLyogRElWMiAqLworCWNsa3Nb bnVtKytdID0gcHJvdmlkZWRfY2xrc1tEU0lfQllURV9QTExfQ0xLXSA9CisJCQljbGtfcmVnaXN0 ZXIoZGV2LCAmYnl0ZWRpdi0+aHcpOworCisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHNpJWRw bGwiLCBwbGxfMjhubS0+aWQpOworCS8qIERJVjMgKi8KKwljbGtzW251bSsrXSA9IHByb3ZpZGVk X2Nsa3NbRFNJX1BJWEVMX1BMTF9DTEtdID0KKwkJCWNsa19yZWdpc3Rlcl9kaXZpZGVyKGRldiwg Y2xrX25hbWUsCisJCQkJcGFyZW50X25hbWUsIDAsIHBsbF8yOG5tLT5tbWlvICsKKwkJCQlSRUdf RFNJXzI4bm1fODk2MF9QSFlfUExMX0NUUkxfMTAsCisJCQkJMCwgOCwgMCwgTlVMTCk7CisKKwlw bGxfMjhubS0+bnVtX2Nsa3MgPSBudW07CisKKwlwbGxfMjhubS0+Y2xrX2RhdGEuY2xrX251bSA9 IE5VTV9QUk9WSURFRF9DTEtTOworCXBsbF8yOG5tLT5jbGtfZGF0YS5jbGtzID0gcHJvdmlkZWRf Y2xrczsKKworCXJldCA9IG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLAorCQkJb2Zf Y2xrX3NyY19vbmVjZWxsX2dldCwgJnBsbF8yOG5tLT5jbGtfZGF0YSk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBjbGsgcHJvdmlkZXI6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXNtX2Rz aV9wbGwgKm1zbV9kc2lfcGxsXzI4bm1fODk2MF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCisJCQkJCSAgICAgICBpbnQgaWQpCit7CisJc3RydWN0IGRzaV9wbGxfMjhubSAqcGxs XzI4bm07CisJc3RydWN0IG1zbV9kc2lfcGxsICpwbGw7CisJaW50IHJldDsKKworCWlmICghcGRl dikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwlwbGxfMjhubSA9IGRldm1fa3phbGxv YygmcGRldi0+ZGV2LCBzaXplb2YoKnBsbF8yOG5tKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbGxf MjhubSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwbGxfMjhubS0+cGRldiA9IHBk ZXY7CisJcGxsXzI4bm0tPmlkID0gaWQgKyAxOworCisJcGxsXzI4bm0tPm1taW8gPSBtc21faW9y ZW1hcChwZGV2LCAiZHNpX3BsbCIsICJEU0lfUExMIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHBs bF8yOG5tLT5tbWlvKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIG1h cCBwbGwgYmFzZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9 CisKKwlwbGwgPSAmcGxsXzI4bm0tPmJhc2U7CisJcGxsLT5taW5fcmF0ZSA9IFZDT19NSU5fUkFU RTsKKwlwbGwtPm1heF9yYXRlID0gVkNPX01BWF9SQVRFOworCXBsbC0+Z2V0X3Byb3ZpZGVyID0g ZHNpX3BsbF8yOG5tX2dldF9wcm92aWRlcjsKKwlwbGwtPmRlc3Ryb3kgPSBkc2lfcGxsXzI4bm1f ZGVzdHJveTsKKwlwbGwtPmRpc2FibGVfc2VxID0gZHNpX3BsbF8yOG5tX2Rpc2FibGVfc2VxOwor CXBsbC0+c2F2ZV9zdGF0ZSA9IGRzaV9wbGxfMjhubV9zYXZlX3N0YXRlOworCXBsbC0+cmVzdG9y ZV9zdGF0ZSA9IGRzaV9wbGxfMjhubV9yZXN0b3JlX3N0YXRlOworCisJcGxsLT5lbl9zZXFfY250 ID0gMTsKKwlwbGwtPmVuYWJsZV9zZXFzWzBdID0gZHNpX3BsbF8yOG5tX2VuYWJsZV9zZXE7CisK KwlyZXQgPSBwbGxfMjhubV9yZWdpc3RlcihwbGxfMjhubSk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gcGxsOworfQotLSAKVGhlIFF1YWxj b21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9y YSBGb3J1bSwKaG9zdGVkIGJ5IFRoZSBMaW51eCBGb3VuZGF0aW9uCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=