From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v2 1/2] drm/bridge: analogix_dp: Remove duplicated code v2 Date: Thu, 8 Sep 2016 11:48:26 +0800 Message-ID: <1473306506-4283-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul , Daniel Vetter , Inki Dae , David Airlie Cc: Krzysztof Kozlowski , linux-samsung-soc@vger.kernel.org, Tomeu Vizoso , linux-rockchip@lists.infradead.org, Daniel Vetter , Jingoo Han , dianders@chromium.org, dri-devel@lists.freedesktop.org, Tomasz Figa , Javier Martinez Canillas , Mika Kahola , =?UTF-8?q?St=C3=A9phane=20Marchesin?= , Thierry Reding , linux-kernel@vger.kernel.org List-Id: linux-rockchip.vger.kernel.org RnJvbTogVG9tZXUgVml6b3NvIDx0b21ldS52aXpvc29AY29sbGFib3JhLmNvbT4KClJlbW92ZSBj b2RlIGZvciByZWFkaW5nIHRoZSBFRElEIGFuZCBEUENEIGZpZWxkcyBhbmQgdXNlIHRoZSBoZWxw ZXJzCmluc3RlYWQuCgpCZXNpZGVzIHRoZSBvYnZpb3VzIGNvZGUgcmVkdWN0aW9uLCBvdGhlciBo ZWxwZXJzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUKY29yZSB0aGF0IGNvdWxkIGJlIHVzZWQgaW4g dGhpcyBkcml2ZXIgYW5kIHdpbGwgYmUgZ29vZCB0byBiZSBhYmxlIHRvCnVzZSB0aGVtIGluc3Rl YWQgb2YgZHVwbGljYXRpbmcgdGhlbS4KClNpZ25lZC1vZmYtYnk6IFRvbWV1IFZpem9zbyA8dG9t ZXUudml6b3NvQGNvbGxhYm9yYS5jb20+CkNjOiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGph dmllckBvc2cuc2Ftc3VuZy5jb20+CkNjOiBNaWthIEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwu Y29tPgpDYzogWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPgpDYzogRGFuaWVsIFZldHRl ciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+CgpSZXZpZXdlZC1ieTogU2VhbiBQYXVsIDxzZWFu cGF1bEBjaHJvbWl1bS5vcmc+ClJldmlld2VkLWJ5OiBZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlw cy5jb20+ClRlc3RlZC1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAb3NnLnNh bXN1bmcuY29tPgpUZXN0ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgot LS0KQ2hhbmdlcyBpbiB2MjoKLSBBIGJ1bmNoIG9mIGdvb2QgZml4ZXMgZnJvbSBTZWFuIGFuZCBZ YWtpcgotIE1vdmVkIHRoZSB0cmFuc2ZlciBmdW5jdGlvbiB0byBhbmFsb2dpeF9kcF9yZWcuYwot IFJlbW92ZWQgcmVmZXJlbmNlIHRvIHRoZSBFRElEIGZyb20gdGhlIGRwIHN0cnVjdAotIFJlYmFz ZSBvbiBTZWFuJ3MgbmV4dCB0cmVlCiAgICBnaXQ6Ly9wZW9wbGUuZnJlZWRlc2t0b3Aub3JnL35z ZWFucGF1bC9kb2d3b29kCgogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dp eF9kcF9jb3JlLmMgfCAyNjMgKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fu YWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuaCB8ICA0MSArLQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9yZWcuYyAgfCA0NTEgKysrKysrLS0tLS0tLS0tLS0tLS0t CiAzIGZpbGVzIGNoYW5nZWQsIDIwNCBpbnNlcnRpb25zKCspLCA1NTEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9j b3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUu YwppbmRleCBlZmFjOGFiLi41ZmUzOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1 ZGUgPGRybS9icmlkZ2UvYW5hbG9naXhfZHAuaD4KIAogI2luY2x1ZGUgImFuYWxvZ2l4X2RwX2Nv cmUuaCIKKyNpbmNsdWRlICJhbmFsb2dpeF9kcF9yZWcuaCIKIAogI2RlZmluZSB0b19kcChubSkJ Y29udGFpbmVyX29mKG5tLCBzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlLCBubSkKIApAQCAtMTc0 LDE1MCArMTc1LDIxIEBAIHN0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV9zaW5rX3Bzcihz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKIAlhbmFsb2dpeF9kcF9lbmFibGVfcHNyX2Ny YyhkcCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGFuYWxvZ2l4X2RwX2NhbGNfZWRpZF9j aGVja19zdW0odW5zaWduZWQgY2hhciAqZWRpZF9kYXRhKQotewotCWludCBpOwotCXVuc2lnbmVk IGNoYXIgc3VtID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBFRElEX0JMT0NLX0xFTkdUSDsgaSsr KQotCQlzdW0gPSBzdW0gKyBlZGlkX2RhdGFbaV07Ci0KLQlyZXR1cm4gc3VtOwotfQotCi1zdGF0 aWMgaW50IGFuYWxvZ2l4X2RwX3JlYWRfZWRpZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpk cCkKLXsKLQl1bnNpZ25lZCBjaGFyICplZGlkID0gZHAtPmVkaWQ7Ci0JdW5zaWduZWQgaW50IGV4 dGVuZF9ibG9jayA9IDA7Ci0JdW5zaWduZWQgY2hhciBzdW07Ci0JdW5zaWduZWQgY2hhciB0ZXN0 X3ZlY3RvcjsKLQlpbnQgcmV0dmFsOwotCi0JLyoKLQkgKiBFRElEIGRldmljZSBhZGRyZXNzIGlz IDB4NTAuCi0JICogSG93ZXZlciwgaWYgbmVjZXNzYXJ5LCB5b3UgbXVzdCBoYXZlIHNldCB1cHBl ciBhZGRyZXNzCi0JICogaW50byBFLUVESUQgaW4gSTJDIGRldmljZSwgMHgzMC4KLQkgKi8KLQot CS8qIFJlYWQgRXh0ZW5zaW9uIEZsYWcsIE51bWJlciBvZiAxMjgtYnl0ZSBFRElEIGV4dGVuc2lv biBibG9ja3MgKi8KLQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9pMmMoZHAs IEkyQ19FRElEX0RFVklDRV9BRERSLAotCQkJCQkJRURJRF9FWFRFTlNJT05fRkxBRywKLQkJCQkJ CSZleHRlbmRfYmxvY2spOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpZiAo ZXh0ZW5kX2Jsb2NrID4gMCkgewotCQlkZXZfZGJnKGRwLT5kZXYsICJFRElEIGRhdGEgaW5jbHVk ZXMgYSBzaW5nbGUgZXh0ZW5zaW9uIVxuIik7Ci0KLQkJLyogUmVhZCBFRElEIGRhdGEgKi8KLQkJ cmV0dmFsID0gYW5hbG9naXhfZHBfcmVhZF9ieXRlc19mcm9tX2kyYyhkcCwKLQkJCQkJCUkyQ19F RElEX0RFVklDRV9BRERSLAotCQkJCQkJRURJRF9IRUFERVJfUEFUVEVSTiwKLQkJCQkJCUVESURf QkxPQ0tfTEVOR1RILAotCQkJCQkJJmVkaWRbRURJRF9IRUFERVJfUEFUVEVSTl0pOwotCQlpZiAo cmV0dmFsICE9IDApIHsKLQkJCWRldl9lcnIoZHAtPmRldiwgIkVESUQgUmVhZCBmYWlsZWQhXG4i KTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXN1bSA9IGFuYWxvZ2l4X2RwX2NhbGNfZWRpZF9j aGVja19zdW0oZWRpZCk7Ci0JCWlmIChzdW0gIT0gMCkgewotCQkJZGV2X2VycihkcC0+ZGV2LCAi RURJRCBiYWQgY2hlY2tzdW0hXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJLyogUmVh ZCBhZGRpdGlvbmFsIEVESUQgZGF0YSAqLwotCQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5 dGVzX2Zyb21faTJjKGRwLAotCQkJCUkyQ19FRElEX0RFVklDRV9BRERSLAotCQkJCUVESURfQkxP Q0tfTEVOR1RILAotCQkJCUVESURfQkxPQ0tfTEVOR1RILAotCQkJCSZlZGlkW0VESURfQkxPQ0tf TEVOR1RIXSk7Ci0JCWlmIChyZXR2YWwgIT0gMCkgewotCQkJZGV2X2VycihkcC0+ZGV2LCAiRURJ RCBSZWFkIGZhaWxlZCFcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJc3VtID0gYW5hbG9n aXhfZHBfY2FsY19lZGlkX2NoZWNrX3N1bSgmZWRpZFtFRElEX0JMT0NLX0xFTkdUSF0pOwotCQlp ZiAoc3VtICE9IDApIHsKLQkJCWRldl9lcnIoZHAtPmRldiwgIkVESUQgYmFkIGNoZWNrc3VtIVxu Iik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWFuYWxvZ2l4X2RwX3JlYWRfYnl0ZV9mcm9t X2RwY2QoZHAsIERQX1RFU1RfUkVRVUVTVCwKLQkJCQkJCSZ0ZXN0X3ZlY3Rvcik7Ci0JCWlmICh0 ZXN0X3ZlY3RvciAmIERQX1RFU1RfTElOS19FRElEX1JFQUQpIHsKLQkJCWFuYWxvZ2l4X2RwX3dy aXRlX2J5dGVfdG9fZHBjZChkcCwKLQkJCQlEUF9URVNUX0VESURfQ0hFQ0tTVU0sCi0JCQkJZWRp ZFtFRElEX0JMT0NLX0xFTkdUSCArIEVESURfQ0hFQ0tTVU1dKTsKLQkJCWFuYWxvZ2l4X2RwX3dy aXRlX2J5dGVfdG9fZHBjZChkcCwKLQkJCQlEUF9URVNUX1JFU1BPTlNFLAotCQkJCURQX1RFU1Rf RURJRF9DSEVDS1NVTV9XUklURSk7Ci0JCX0KLQl9IGVsc2UgewotCQlkZXZfaW5mbyhkcC0+ZGV2 LCAiRURJRCBkYXRhIGRvZXMgbm90IGluY2x1ZGUgYW55IGV4dGVuc2lvbnMuXG4iKTsKLQotCQkv KiBSZWFkIEVESUQgZGF0YSAqLwotCQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zy b21faTJjKGRwLAotCQkJCUkyQ19FRElEX0RFVklDRV9BRERSLCBFRElEX0hFQURFUl9QQVRURVJO LAotCQkJCUVESURfQkxPQ0tfTEVOR1RILCAmZWRpZFtFRElEX0hFQURFUl9QQVRURVJOXSk7Ci0J CWlmIChyZXR2YWwgIT0gMCkgewotCQkJZGV2X2VycihkcC0+ZGV2LCAiRURJRCBSZWFkIGZhaWxl ZCFcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJc3VtID0gYW5hbG9naXhfZHBfY2FsY19l ZGlkX2NoZWNrX3N1bShlZGlkKTsKLQkJaWYgKHN1bSAhPSAwKSB7Ci0JCQlkZXZfZXJyKGRwLT5k ZXYsICJFRElEIGJhZCBjaGVja3N1bSFcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlh bmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9URVNUX1JFUVVFU1QsCi0JCQkJ CQkmdGVzdF92ZWN0b3IpOwotCQlpZiAodGVzdF92ZWN0b3IgJiBEUF9URVNUX0xJTktfRURJRF9S RUFEKSB7Ci0JCQlhbmFsb2dpeF9kcF93cml0ZV9ieXRlX3RvX2RwY2QoZHAsCi0JCQkJRFBfVEVT VF9FRElEX0NIRUNLU1VNLCBlZGlkW0VESURfQ0hFQ0tTVU1dKTsKLQkJCWFuYWxvZ2l4X2RwX3dy aXRlX2J5dGVfdG9fZHBjZChkcCwKLQkJCQlEUF9URVNUX1JFU1BPTlNFLCBEUF9URVNUX0VESURf Q0hFQ0tTVU1fV1JJVEUpOwotCQl9Ci0JfQotCi0JZGV2X2RiZyhkcC0+ZGV2LCAiRURJRCBSZWFk IHN1Y2Nlc3MhXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbmFsb2dpeF9kcF9o YW5kbGVfZWRpZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKLXsKLQl1OCBidWZbMTJd OwotCWludCBpOwotCWludCByZXR2YWw7Ci0KLQkvKiBSZWFkIERQQ0QgRFBfRFBDRF9SRVZ+UkVD RUlWRV9QT1JUMV9DQVBfMSAqLwotCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3JlYWRfYnl0ZXNfZnJv bV9kcGNkKGRwLCBEUF9EUENEX1JFViwgMTIsIGJ1Zik7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJu IHJldHZhbDsKLQotCS8qIFJlYWQgRURJRCAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK LQkJcmV0dmFsID0gYW5hbG9naXhfZHBfcmVhZF9lZGlkKGRwKTsKLQkJaWYgKCFyZXR2YWwpCi0J CQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBzdGF0aWMgdm9pZAogYW5hbG9n aXhfZHBfZW5hYmxlX3J4X3RvX2VuaGFuY2VkX21vZGUoc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAsCiAJCQkJICAgICAgIGJvb2wgZW5hYmxlKQogewogCXU4IGRhdGE7CiAKLQlhbmFsb2dp eF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9MQU5FX0NPVU5UX1NFVCwgJmRhdGEpOwor CWRybV9kcF9kcGNkX3JlYWRiKCZkcC0+YXV4LCBEUF9MQU5FX0NPVU5UX1NFVCwgJmRhdGEpOwog CiAJaWYgKGVuYWJsZSkKLQkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLCBEUF9M QU5FX0NPVU5UX1NFVCwKLQkJCQkJICAgICAgIERQX0xBTkVfQ09VTlRfRU5IQU5DRURfRlJBTUVf RU4gfAotCQkJCQkgICAgICAgRFBDRF9MQU5FX0NPVU5UX1NFVChkYXRhKSk7CisJCWRybV9kcF9k cGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfTEFORV9DT1VOVF9TRVQsCisJCQkJICAgRFBfTEFORV9D T1VOVF9FTkhBTkNFRF9GUkFNRV9FTiB8CisJCQkJCURQQ0RfTEFORV9DT1VOVF9TRVQoZGF0YSkp OwogCWVsc2UKLQkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLCBEUF9MQU5FX0NP VU5UX1NFVCwKLQkJCQkJICAgICAgIERQQ0RfTEFORV9DT1VOVF9TRVQoZGF0YSkpOworCQlkcm1f ZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX0xBTkVfQ09VTlRfU0VULAorCQkJCSAgIERQQ0Rf TEFORV9DT1VOVF9TRVQoZGF0YSkpOwogfQogCiBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2lzX2Vu aGFuY2VkX21vZGVfYXZhaWxhYmxlKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQpAQCAt MzI1LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfaXNfZW5oYW5jZWRfbW9kZV9h dmFpbGFibGUoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiAJdTggZGF0YTsKIAlpbnQg cmV0dmFsOwogCi0JYW5hbG9naXhfZHBfcmVhZF9ieXRlX2Zyb21fZHBjZChkcCwgRFBfTUFYX0xB TkVfQ09VTlQsICZkYXRhKTsKKwlkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBfTUFYX0xB TkVfQ09VTlQsICZkYXRhKTsKIAlyZXR2YWwgPSBEUENEX0VOSEFOQ0VEX0ZSQU1FX0NBUChkYXRh KTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0zNDQsOCArMjE2LDggQEAgc3RhdGljIHZvaWQgYW5h bG9naXhfZHBfdHJhaW5pbmdfcGF0dGVybl9kaXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAq ZHApCiB7CiAJYW5hbG9naXhfZHBfc2V0X3RyYWluaW5nX3BhdHRlcm4oZHAsIERQX05PTkUpOwog Ci0JYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLCBEUF9UUkFJTklOR19QQVRURVJO X1NFVCwKLQkJCQkgICAgICAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKKwlkcm1fZHBf ZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAorCQkJICAgRFBf VFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM5MCw4ICsy NjIsOCBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2xpbmtfc3RhcnQoc3RydWN0IGFuYWxvZ2l4 X2RwX2RldmljZSAqZHApCiAJLyogU2V0dXAgUlggY29uZmlndXJhdGlvbiAqLwogCWJ1ZlswXSA9 IGRwLT5saW5rX3RyYWluLmxpbmtfcmF0ZTsKIAlidWZbMV0gPSBkcC0+bGlua190cmFpbi5sYW5l X2NvdW50OwotCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAsIERQ X0xJTktfQldfU0VULCAyLCBidWYpOwotCWlmIChyZXR2YWwpCisJcmV0dmFsID0gZHJtX2RwX2Rw Y2Rfd3JpdGUoJmRwLT5hdXgsIERQX0xJTktfQldfU0VULCBidWYsIDIpOworCWlmIChyZXR2YWwg PCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyogU2V0IFRYIHByZS1lbXBoYXNpcyB0byBtaW5p bXVtICovCkBAIC00MTUsMjAgKzI4NywyMiBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2xpbmtf c3RhcnQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiAJYW5hbG9naXhfZHBfc2V0X3Ry YWluaW5nX3BhdHRlcm4oZHAsIFRSQUlOSU5HX1BUTjEpOwogCiAJLyogU2V0IFJYIHRyYWluaW5n IHBhdHRlcm4gKi8KLQlyZXR2YWwgPSBhbmFsb2dpeF9kcF93cml0ZV9ieXRlX3RvX2RwY2QoZHAs Ci0JCQlEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKLQkJCURQX0xJTktfU0NSQU1CTElOR19ESVNB QkxFIHwgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKLQlpZiAocmV0dmFsKQorCXJldHZhbCA9IGRy bV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCisJCQkJ ICAgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFIHwKKwkJCQkJRFBfVFJBSU5JTkdfUEFUVEVS Tl8xKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAogCWZvciAobGFuZSA9 IDA7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspCiAJCWJ1ZltsYW5lXSA9IERQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzAgfAogCQkJICAgIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDsK IAotCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAsIERQX1RSQUlO SU5HX0xBTkUwX1NFVCwKLQkJCQkJCSBsYW5lX2NvdW50LCBidWYpOworCXJldHZhbCA9IGRybV9k cF9kcGNkX3dyaXRlKCZkcC0+YXV4LCBEUF9UUkFJTklOR19MQU5FMF9TRVQsIGJ1ZiwKKwkJCQkg ICBsYW5lX2NvdW50KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKIAotCXJl dHVybiByZXR2YWw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFuYWxv Z2l4X2RwX2dldF9sYW5lX3N0YXR1cyh1OCBsaW5rX3N0YXR1c1syXSwgaW50IGxhbmUpCkBAIC01 ODAsMjUgKzQ1NCwyMyBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX3Byb2Nlc3NfY2xvY2tfcmVj b3Zlcnkoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiAKIAlsYW5lX2NvdW50ID0gZHAt PmxpbmtfdHJhaW4ubGFuZV9jb3VudDsKIAotCXJldHZhbCA9ICBhbmFsb2dpeF9kcF9yZWFkX2J5 dGVzX2Zyb21fZHBjZChkcCwKLQkJCURQX0xBTkUwXzFfU1RBVFVTLCAyLCBsaW5rX3N0YXR1cyk7 Ci0JaWYgKHJldHZhbCkKKwlyZXR2YWwgPSBkcm1fZHBfZHBjZF9yZWFkKCZkcC0+YXV4LCBEUF9M QU5FMF8xX1NUQVRVUywgbGlua19zdGF0dXMsIDIpOworCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1 cm4gcmV0dmFsOwogCi0JcmV0dmFsID0gIGFuYWxvZ2l4X2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNk KGRwLAotCQkJRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSwgMiwgYWRqdXN0X3JlcXVlc3QpOwot CWlmIChyZXR2YWwpCisJcmV0dmFsID0gZHJtX2RwX2RwY2RfcmVhZCgmZHAtPmF1eCwgRFBfQURK VVNUX1JFUVVFU1RfTEFORTBfMSwKKwkJCQkgIGFkanVzdF9yZXF1ZXN0LCAyKTsKKwlpZiAocmV0 dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAogCWlmIChhbmFsb2dpeF9kcF9jbG9ja19yZWNv dmVyeV9vayhsaW5rX3N0YXR1cywgbGFuZV9jb3VudCkgPT0gMCkgewogCQkvKiBzZXQgdHJhaW5p bmcgcGF0dGVybiAyIGZvciBFUSAqLwogCQlhbmFsb2dpeF9kcF9zZXRfdHJhaW5pbmdfcGF0dGVy bihkcCwgVFJBSU5JTkdfUFROMik7CiAKLQkJcmV0dmFsID0gYW5hbG9naXhfZHBfd3JpdGVfYnl0 ZV90b19kcGNkKGRwLAotCQkJCURQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAotCQkJCURQX0xJTktf U0NSQU1CTElOR19ESVNBQkxFIHwKLQkJCQlEUF9UUkFJTklOR19QQVRURVJOXzIpOwotCQlpZiAo cmV0dmFsKQorCQlyZXR2YWwgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1RSQUlO SU5HX1BBVFRFUk5fU0VULAorCQkJCQkgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUgfAor CQkJCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsKKwkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1 cm4gcmV0dmFsOwogCiAJCWRldl9pbmZvKGRwLT5kZXYsICJMaW5rIFRyYWluaW5nIENsb2NrIFJl Y292ZXJ5IHN1Y2Nlc3NcbiIpOwpAQCAtNjM2LDEzICs1MDgsMTIgQEAgc3RhdGljIGludCBhbmFs b2dpeF9kcF9wcm9jZXNzX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwKQogCQlhbmFsb2dpeF9kcF9zZXRfbGFuZV9saW5rX3RyYWluaW5nKGRwLAogCQkJZHAtPmxp bmtfdHJhaW4udHJhaW5pbmdfbGFuZVtsYW5lXSwgbGFuZSk7CiAKLQlyZXR2YWwgPSBhbmFsb2dp eF9kcF93cml0ZV9ieXRlc190b19kcGNkKGRwLAotCQkJRFBfVFJBSU5JTkdfTEFORTBfU0VULCBs YW5lX2NvdW50LAotCQkJZHAtPmxpbmtfdHJhaW4udHJhaW5pbmdfbGFuZSk7Ci0JaWYgKHJldHZh bCkKKwlyZXR2YWwgPSBkcm1fZHBfZHBjZF93cml0ZSgmZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFO RTBfU0VULAorCQkJCSAgIGRwLT5saW5rX3RyYWluLnRyYWluaW5nX2xhbmUsIGxhbmVfY291bnQp OworCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHJldHZhbDsK KwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhbmFsb2dpeF9kcF9wcm9jZXNzX2VxdWFsaXpl cl90cmFpbmluZyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKQEAgLTY1NSw5ICs1MjYs OCBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX3Byb2Nlc3NfZXF1YWxpemVyX3RyYWluaW5nKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogCiAJbGFuZV9jb3VudCA9IGRwLT5saW5rX3Ry YWluLmxhbmVfY291bnQ7CiAKLQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21f ZHBjZChkcCwKLQkJCURQX0xBTkUwXzFfU1RBVFVTLCAyLCBsaW5rX3N0YXR1cyk7Ci0JaWYgKHJl dHZhbCkKKwlyZXR2YWwgPSBkcm1fZHBfZHBjZF9yZWFkKCZkcC0+YXV4LCBEUF9MQU5FMF8xX1NU QVRVUywgbGlua19zdGF0dXMsIDIpOworCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFs OwogCiAJaWYgKGFuYWxvZ2l4X2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBsYW5l X2NvdW50KSkgewpAQCAtNjY1LDE0ICs1MzUsMTMgQEAgc3RhdGljIGludCBhbmFsb2dpeF9kcF9w cm9jZXNzX2VxdWFsaXplcl90cmFpbmluZyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkK IAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmV0dmFsID0gYW5hbG9naXhfZHBfcmVhZF9ieXRlc19m cm9tX2RwY2QoZHAsCi0JCQlEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xLCAyLCBhZGp1c3RfcmVx dWVzdCk7Ci0JaWYgKHJldHZhbCkKKwlyZXR2YWwgPSBkcm1fZHBfZHBjZF9yZWFkKCZkcC0+YXV4 LCBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xLCBhZGp1c3RfcmVxdWVzdCwgMik7CisJaWYgKHJl dHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFk X2J5dGVfZnJvbV9kcGNkKGRwLAotCQkJRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCwgJmxp bmtfYWxpZ24pOwotCWlmIChyZXR2YWwpCisJcmV0dmFsID0gZHJtX2RwX2RwY2RfcmVhZGIoJmRw LT5hdXgsIERQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQsCisJCQkJICAgJmxpbmtfYWxpZ24p OworCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJYW5hbG9naXhfZHBfZ2V0 X2FkanVzdF90cmFpbmluZ19sYW5lKGRwLCBhZGp1c3RfcmVxdWVzdCk7CkBAIC03MTMsMTAgKzU4 MiwxMiBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX3Byb2Nlc3NfZXF1YWxpemVyX3RyYWluaW5n KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogCQlhbmFsb2dpeF9kcF9zZXRfbGFuZV9s aW5rX3RyYWluaW5nKGRwLAogCQkJZHAtPmxpbmtfdHJhaW4udHJhaW5pbmdfbGFuZVtsYW5lXSwg bGFuZSk7CiAKLQlyZXR2YWwgPSBhbmFsb2dpeF9kcF93cml0ZV9ieXRlc190b19kcGNkKGRwLCBE UF9UUkFJTklOR19MQU5FMF9TRVQsCi0JCQlsYW5lX2NvdW50LCBkcC0+bGlua190cmFpbi50cmFp bmluZ19sYW5lKTsKKwlyZXR2YWwgPSBkcm1fZHBfZHBjZF93cml0ZSgmZHAtPmF1eCwgRFBfVFJB SU5JTkdfTEFORTBfU0VULAorCQkJCSAgIGRwLT5saW5rX3RyYWluLnRyYWluaW5nX2xhbmUsIGxh bmVfY291bnQpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJu IHJldHZhbDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfZ2V0X21h eF9yeF9iYW5kd2lkdGgoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCkBAIC03MzAsNyAr NjAxLDcgQEAgc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfZ2V0X21heF9yeF9iYW5kd2lkdGgoc3Ry dWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCiAJICogRm9yIERQIHJldi4xLjIsIE1heGltdW0g bGluayByYXRlIG9mIE1haW4gTGluayBsYW5lcwogCSAqIDB4MDYgPSAxLjYyIEdicHMsIDB4MGEg PSAyLjcgR2JwcywgMHgxNCA9IDUuNEdicHMKIAkgKi8KLQlhbmFsb2dpeF9kcF9yZWFkX2J5dGVf ZnJvbV9kcGNkKGRwLCBEUF9NQVhfTElOS19SQVRFLCAmZGF0YSk7CisJZHJtX2RwX2RwY2RfcmVh ZGIoJmRwLT5hdXgsIERQX01BWF9MSU5LX1JBVEUsICZkYXRhKTsKIAkqYmFuZHdpZHRoID0gZGF0 YTsKIH0KIApAQCAtNzQzLDcgKzYxNCw3IEBAIHN0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2dldF9t YXhfcnhfbGFuZV9jb3VudChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAkgKiBGb3Ig RFAgcmV2LjEuMSwgTWF4aW11bSBudW1iZXIgb2YgTWFpbiBMaW5rIGxhbmVzCiAJICogMHgwMSA9 IDEgbGFuZSwgMHgwMiA9IDIgbGFuZXMsIDB4MDQgPSA0IGxhbmVzCiAJICovCi0JYW5hbG9naXhf ZHBfcmVhZF9ieXRlX2Zyb21fZHBjZChkcCwgRFBfTUFYX0xBTkVfQ09VTlQsICZkYXRhKTsKKwlk cm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBfTUFYX0xBTkVfQ09VTlQsICZkYXRhKTsKIAkq bGFuZV9jb3VudCA9IERQQ0RfTUFYX0xBTkVfQ09VTlQoZGF0YSk7CiB9CiAKQEAgLTkxMiwxOSAr NzgzLDE1IEBAIHN0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV9zY3JhbWJsZShzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAlpZiAoZW5hYmxlKSB7CiAJCWFuYWxvZ2l4X2RwX2Vu YWJsZV9zY3JhbWJsaW5nKGRwKTsKIAotCQlhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNk KGRwLCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKLQkJCQkJCSZkYXRhKTsKLQkJYW5hbG9naXhf ZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLAotCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCi0J CQkodTgpKGRhdGEgJiB+RFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKTsKKwkJZHJtX2RwX2Rw Y2RfcmVhZGIoJmRwLT5hdXgsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULCAmZGF0YSk7CisJCWRy bV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCisJCQkJ ICAgKHU4KShkYXRhICYgfkRQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKSk7CiAJfSBlbHNlIHsK IAkJYW5hbG9naXhfZHBfZGlzYWJsZV9zY3JhbWJsaW5nKGRwKTsKIAotCQlhbmFsb2dpeF9kcF9y ZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKLQkJCQkJCSZk YXRhKTsKLQkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLAotCQkJRFBfVFJBSU5J TkdfUEFUVEVSTl9TRVQsCi0JCQkodTgpKGRhdGEgfCBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJM RSkpOworCQlkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9T RVQsICZkYXRhKTsKKwkJZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9UUkFJTklOR19Q QVRURVJOX1NFVCwKKwkJCQkgICAodTgpKGRhdGEgfCBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJM RSkpOwogCX0KIH0KIApAQCAtMTA1Myw3ICs5MjAsNyBAQCBvdXQ6CiBpbnQgYW5hbG9naXhfZHBf Z2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGFu YWxvZ2l4X2RwX2RldmljZSAqZHAgPSB0b19kcChjb25uZWN0b3IpOwotCXN0cnVjdCBlZGlkICpl ZGlkID0gKHN0cnVjdCBlZGlkICopZHAtPmVkaWQ7CisJc3RydWN0IGVkaWQgKmVkaWQ7CiAJaW50 IHJldCwgbnVtX21vZGVzID0gMDsKIAogCXJldCA9IGFuYWxvZ2l4X2RwX3ByZXBhcmVfcGFuZWwo ZHAsIHRydWUsIGZhbHNlKTsKQEAgLTEwNjIsOSArOTI5LDExIEBAIGludCBhbmFsb2dpeF9kcF9n ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAkJcmV0dXJuIDA7CiAJ fQogCi0JaWYgKGFuYWxvZ2l4X2RwX2hhbmRsZV9lZGlkKGRwKSA9PSAwKSB7CisJZWRpZCA9IGRy bV9nZXRfZWRpZChjb25uZWN0b3IsICZkcC0+YXV4LmRkYyk7CisJaWYgKGVkaWQpIHsKIAkJZHJt X21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZkcC0+Y29ubmVjdG9yLCBlZGlk KTsKIAkJbnVtX21vZGVzICs9IGRybV9hZGRfZWRpZF9tb2RlcygmZHAtPmNvbm5lY3RvciwgZWRp ZCk7CisJCWtmcmVlKGVkaWQpOwogCX0KIAogCWlmIChkcC0+cGxhdF9kYXRhLT5wYW5lbCkKQEAg LTEzOTUsNiArMTI2NCwxNCBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2R0X3BhcnNlX3BkYXRh KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogCXJldHVybiAwOwogfQogCitzdGF0aWMg c3NpemVfdCBhbmFsb2dpeF9kcGF1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LAor CQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCA9IHRvX2RwKGF1eCk7CisKKwlyZXR1cm4gYW5hbG9naXhfZHBfdHJh bnNmZXIoZHAsIG1zZyk7Cit9CisKIGludCBhbmFsb2dpeF9kcF9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCiAJCSAgICAgc3RydWN0IGFuYWxvZ2l4 X2RwX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQogewpAQCAtMTUxNSw2ICsxMzkyLDE0IEBAIGludCBh bmFsb2dpeF9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9kZXZpY2UgKmRy bV9kZXYsCiAJZHAtPmRybV9kZXYgPSBkcm1fZGV2OwogCWRwLT5lbmNvZGVyID0gZHAtPnBsYXRf ZGF0YS0+ZW5jb2RlcjsKIAorCWRwLT5hdXgubmFtZSA9ICJEUC1BVVgiOworCWRwLT5hdXgudHJh bnNmZXIgPSBhbmFsb2dpeF9kcGF1eF90cmFuc2ZlcjsKKwlkcC0+YXV4LmRldiA9ICZwZGV2LT5k ZXY7CisKKwlyZXQgPSBkcm1fZHBfYXV4X3JlZ2lzdGVyKCZkcC0+YXV4KTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9kaXNhYmxlX3BtX3J1bnRpbWU7CisKIAlyZXQgPSBhbmFsb2dpeF9kcF9jcmVh dGVfYnJpZGdlKGRybV9kZXYsIGRwKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVk IHRvIGNyZWF0ZSBicmlkZ2UgKCVkKVxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmgKaW5kZXggNDczYjk4MC4uYTE1ZjA3 NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9k cF9jb3JlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9k cF9jb3JlLmgKQEAgLTIwLDE1ICsyMCw2IEBACiAjZGVmaW5lIE1BWF9DUl9MT09QIDUKICNkZWZp bmUgTUFYX0VRX0xPT1AgNQogCi0vKiBJMkMgRURJRCBDaGlwIElELCBTbGF2ZSBBZGRyZXNzICov Ci0jZGVmaW5lIEkyQ19FRElEX0RFVklDRV9BRERSCQkJMHg1MAotI2RlZmluZSBJMkNfRV9FRElE X0RFVklDRV9BRERSCQkJMHgzMAotCi0jZGVmaW5lIEVESURfQkxPQ0tfTEVOR1RICQkJMHg4MAot I2RlZmluZSBFRElEX0hFQURFUl9QQVRURVJOCQkJMHgwMAotI2RlZmluZSBFRElEX0VYVEVOU0lP Tl9GTEFHCQkJMHg3ZQotI2RlZmluZSBFRElEX0NIRUNLU1VNCQkJCTB4N2YKLQogLyogRFBfTUFY X0xBTkVfQ09VTlQgKi8KICNkZWZpbmUgRFBDRF9FTkhBTkNFRF9GUkFNRV9DQVAoeCkJCSgoKHgp ID4+IDcpICYgMHgxKQogI2RlZmluZSBEUENEX01BWF9MQU5FX0NPVU5UKHgpCQkJKCh4KSAmIDB4 MWYpCkBAIC0xNjYsNiArMTU3LDcgQEAgc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSB7CiAJc3Ry dWN0IGRybV9kZXZpY2UJKmRybV9kZXY7CiAJc3RydWN0IGRybV9jb25uZWN0b3IJY29ubmVjdG9y OwogCXN0cnVjdCBkcm1fYnJpZGdlCSpicmlkZ2U7CisJc3RydWN0IGRybV9kcF9hdXggICAgICAg YXV4OwogCXN0cnVjdCBjbGsJCSpjbG9jazsKIAl1bnNpZ25lZCBpbnQJCWlycTsKIAl2b2lkIF9f aW9tZW0JCSpyZWdfYmFzZTsKQEAgLTE3Niw3ICsxNjgsNiBAQCBzdHJ1Y3QgYW5hbG9naXhfZHBf ZGV2aWNlIHsKIAlpbnQJCQlkcG1zX21vZGU7CiAJaW50CQkJaHBkX2dwaW87CiAJYm9vbCAgICAg ICAgICAgICAgICAgICAgZm9yY2VfaHBkOwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGVkaWRb RURJRF9CTE9DS19MRU5HVEggKiAyXTsKIAlib29sCQkJcHNyX3N1cHBvcnQ7CiAKIAlzdHJ1Y3Qg bXV0ZXgJCXBhbmVsX2xvY2s7CkBAIC0yMTAsMzMgKzIwMSw2IEBAIHZvaWQgYW5hbG9naXhfZHBf cmVzZXRfYXV4KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKIHZvaWQgYW5hbG9naXhf ZHBfaW5pdF9hdXgoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwogaW50IGFuYWxvZ2l4 X2RwX2dldF9wbHVnX2luX3N0YXR1cyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7CiB2 b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV9zd19mdW5jdGlvbihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2 aWNlICpkcCk7Ci1pbnQgYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKLWludCBhbmFsb2dpeF9kcF93cml0ZV9ieXRlX3RvX2Rw Y2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCi0JCQkJICAgdW5zaWduZWQgaW50IHJl Z19hZGRyLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgZGF0YSk7Ci1pbnQgYW5hbG9naXhfZHBfcmVh ZF9ieXRlX2Zyb21fZHBjZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKLQkJCQkgICAg dW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCSAgICB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLWlu dCBhbmFsb2dpeF9kcF93cml0ZV9ieXRlc190b19kcGNkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZp Y2UgKmRwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsCi0JCQkJICAgIHVuc2lnbmVk IGludCBjb3VudCwKLQkJCQkgICAgdW5zaWduZWQgY2hhciBkYXRhW10pOwotaW50IGFuYWxvZ2l4 X2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAot CQkJCSAgICAgdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCSAgICAgdW5zaWduZWQgaW50IGNv dW50LAotCQkJCSAgICAgdW5zaWduZWQgY2hhciBkYXRhW10pOwotaW50IGFuYWxvZ2l4X2RwX3Nl bGVjdF9pMmNfZGV2aWNlKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAotCQkJCSAgdW5z aWduZWQgaW50IGRldmljZV9hZGRyLAotCQkJCSAgdW5zaWduZWQgaW50IHJlZ19hZGRyKTsKLWlu dCBhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9pMmMoc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAsCi0JCQkJICAgdW5zaWduZWQgaW50IGRldmljZV9hZGRyLAotCQkJCSAgIHVuc2lnbmVk IGludCByZWdfYWRkciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwotaW50IGFuYWxvZ2l4 X2RwX3JlYWRfYnl0ZXNfZnJvbV9pMmMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCi0J CQkJICAgIHVuc2lnbmVkIGludCBkZXZpY2VfYWRkciwKLQkJCQkgICAgdW5zaWduZWQgaW50IHJl Z19hZGRyLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQsCi0JCQkJICAgIHVuc2lnbmVkIGNo YXIgZWRpZFtdKTsKIHZvaWQgYW5hbG9naXhfZHBfc2V0X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgYnd0eXBlKTsKIHZvaWQgYW5hbG9naXhfZHBfZ2V0 X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgKmJ3dHlw ZSk7CiB2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lX2NvdW50KHN0cnVjdCBhbmFsb2dpeF9kcF9k ZXZpY2UgKmRwLCB1MzIgY291bnQpOwpAQCAtMjg1LDUgKzI0OSw2IEBAIHZvaWQgYW5hbG9naXhf ZHBfZGlzYWJsZV9zY3JhbWJsaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKIHZv aWQgYW5hbG9naXhfZHBfZW5hYmxlX3Bzcl9jcmMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAq ZHApOwogdm9pZCBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoc3RydWN0IGFuYWxvZ2l4X2RwX2Rl dmljZSAqZHAsCiAJCQkgICAgICBzdHJ1Y3QgZWRwX3ZzY19wc3IgKnZzYyk7Ci0KK3NzaXplX3Qg YW5hbG9naXhfZHBfdHJhbnNmZXIoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCisJCQkg ICAgIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKTsKICNlbmRpZiAvKiBfQU5BTE9HSVhfRFBf Q09SRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2Fu YWxvZ2l4X2RwX3JlZy5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dp eF9kcF9yZWcuYwppbmRleCA1MmMxYjZiLi5hNGQxN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX3JlZy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfcmVnLmMKQEAgLTU4NSwzMzAgKzU4NSw2 IEBAIGludCBhbmFsb2dpeF9kcF93cml0ZV9ieXRlX3RvX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2Rw X2RldmljZSAqZHAsCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IGFuYWxvZ2l4X2RwX3JlYWRf Ynl0ZV9mcm9tX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCi0JCQkJICAgIHVu c2lnbmVkIGludCByZWdfYWRkciwKLQkJCQkgICAgdW5zaWduZWQgY2hhciAqZGF0YSkKLXsKLQl1 MzIgcmVnOwotCWludCBpOwotCWludCByZXR2YWw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KSB7Ci0JCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLwotCQlyZWcgPSBCVUZfQ0xSOwot CQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZGRVJfREFUQV9DVEwp OwotCi0JCS8qIFNlbGVjdCBEUENEIGRldmljZSBhZGRyZXNzICovCi0JCXJlZyA9IEFVWF9BRERS XzdfMChyZWdfYWRkcik7Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X0FVWF9BRERSXzdfMCk7Ci0JCXJlZyA9IEFVWF9BRERSXzE1XzgocmVnX2FkZHIpOwotCQl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xNV84KTsKLQkJcmVn ID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIpOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xOV8xNik7Ci0KLQkJLyoKLQkJICogU2V0IERpc3BsYXlQ b3J0IHRyYW5zYWN0aW9uIGFuZCByZWFkIDEgYnl0ZQotCQkgKiBJZiBiaXQgMyBpcyAxLCBEaXNw bGF5UG9ydCB0cmFuc2FjdGlvbi4KLQkJICogSWYgQml0IDMgaXMgMCwgSTJDIHRyYW5zYWN0aW9u LgotCQkgKi8KLQkJcmVnID0gQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJT04gfCBBVVhfVFhfQ09N TV9SRUFEOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hf Q1RMXzEpOwotCi0JCS8qIFN0YXJ0IEFVWCB0cmFuc2FjdGlvbiAqLwotCQlyZXR2YWwgPSBhbmFs b2dpeF9kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOwotCQlpZiAocmV0dmFsID09IDApCi0J CQlicmVhazsKLQotCQlkZXZfZGJnKGRwLT5kZXYsICIlczogQXV4IFRyYW5zYWN0aW9uIGZhaWwh XG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JLyogUmVhZCBkYXRhIGJ1ZmZlciAqLwotCXJlZyA9IHJl YWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRl9EQVRBXzApOwotCSpkYXRhID0gKHVu c2lnbmVkIGNoYXIpKHJlZyAmIDB4ZmYpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IGFu YWxvZ2l4X2RwX3dyaXRlX2J5dGVzX3RvX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAq ZHAsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZWdfYWRkciwKLQkJCQkgICAgdW5zaWduZWQgaW50 IGNvdW50LAotCQkJCSAgICB1bnNpZ25lZCBjaGFyIGRhdGFbXSkKLXsKLQl1MzIgcmVnOwotCXVu c2lnbmVkIGludCBzdGFydF9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGN1cl9kYXRhX2NvdW50Owot CXVuc2lnbmVkIGludCBjdXJfZGF0YV9pZHg7Ci0JaW50IGk7Ci0JaW50IHJldHZhbCA9IDA7Ci0K LQkvKiBDbGVhciBBVVggQ0ggZGF0YSBidWZmZXIgKi8KLQlyZWcgPSBCVUZfQ0xSOwotCXdyaXRl bChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRkZFUl9EQVRBX0NUTCk7Ci0KLQlz dGFydF9vZmZzZXQgPSAwOwotCXdoaWxlIChzdGFydF9vZmZzZXQgPCBjb3VudCkgewotCQkvKiBC dWZmZXIgc2l6ZSBvZiBBVVggQ0ggaXMgMTYgKiA0Ynl0ZXMgKi8KLQkJaWYgKChjb3VudCAtIHN0 YXJ0X29mZnNldCkgPiAxNikKLQkJCWN1cl9kYXRhX2NvdW50ID0gMTY7Ci0JCWVsc2UKLQkJCWN1 cl9kYXRhX2NvdW50ID0gY291bnQgLSBzdGFydF9vZmZzZXQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgewotCQkJLyogU2VsZWN0IERQQ0QgZGV2aWNlIGFkZHJlc3MgKi8KLQkJCXJlZyA9 IEFVWF9BRERSXzdfMChyZWdfYWRkciArIHN0YXJ0X29mZnNldCk7Ci0JCQl3cml0ZWwocmVnLCBk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl83XzApOwotCQkJcmVnID0gQVVYX0FE RFJfMTVfOChyZWdfYWRkciArIHN0YXJ0X29mZnNldCk7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xNV84KTsKLQkJCXJlZyA9IEFVWF9BRERSXzE5 XzE2KHJlZ19hZGRyICsgc3RhcnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE5XzE2KTsKLQotCQkJZm9yIChjdXJfZGF0YV9pZHgg PSAwOyBjdXJfZGF0YV9pZHggPCBjdXJfZGF0YV9jb3VudDsKLQkJCSAgICAgY3VyX2RhdGFfaWR4 KyspIHsKLQkJCQlyZWcgPSBkYXRhW3N0YXJ0X29mZnNldCArIGN1cl9kYXRhX2lkeF07Ci0JCQkJ d3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsKLQkJCQkgICAgICAgQU5BTE9HSVhfRFBfQlVGX0RB VEFfMCArCi0JCQkJICAgICAgIDQgKiBjdXJfZGF0YV9pZHgpOwotCQkJfQotCi0JCQkvKgotCQkJ ICogU2V0IERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uIGFuZCB3cml0ZQotCQkJICogSWYgYml0IDMg aXMgMSwgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24uCi0JCQkgKiBJZiBCaXQgMyBpcyAwLCBJMkMg dHJhbnNhY3Rpb24uCi0JCQkgKi8KLQkJCXJlZyA9IEFVWF9MRU5HVEgoY3VyX2RhdGFfY291bnQp IHwKLQkJCQlBVVhfVFhfQ09NTV9EUF9UUkFOU0FDVElPTiB8IEFVWF9UWF9DT01NX1dSSVRFOwot CQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0NIX0NUTF8xKTsK LQotCQkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICovCi0JCQlyZXR2YWwgPSBhbmFsb2dpeF9k cF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOwotCQkJaWYgKHJldHZhbCA9PSAwKQotCQkJCWJy ZWFrOwotCi0JCQlkZXZfZGJnKGRwLT5kZXYsICIlczogQXV4IFRyYW5zYWN0aW9uIGZhaWwhXG4i LAotCQkJCV9fZnVuY19fKTsKLQkJfQotCi0JCXN0YXJ0X29mZnNldCArPSBjdXJfZGF0YV9jb3Vu dDsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQgYW5hbG9naXhfZHBfcmVhZF9ieXRl c19mcm9tX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCi0JCQkJICAgICB1bnNp Z25lZCBpbnQgcmVnX2FkZHIsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQsCi0JCQkJICAg ICB1bnNpZ25lZCBjaGFyIGRhdGFbXSkKLXsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBzdGFy dF9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGN1cl9kYXRhX2NvdW50OwotCXVuc2lnbmVkIGludCBj dXJfZGF0YV9pZHg7Ci0JaW50IGk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBDbGVhciBBVVgg Q0ggZGF0YSBidWZmZXIgKi8KLQlyZWcgPSBCVUZfQ0xSOwotCXdyaXRlbChyZWcsIGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX0JVRkZFUl9EQVRBX0NUTCk7Ci0KLQlzdGFydF9vZmZzZXQgPSAw OwotCXdoaWxlIChzdGFydF9vZmZzZXQgPCBjb3VudCkgewotCQkvKiBCdWZmZXIgc2l6ZSBvZiBB VVggQ0ggaXMgMTYgKiA0Ynl0ZXMgKi8KLQkJaWYgKChjb3VudCAtIHN0YXJ0X29mZnNldCkgPiAx NikKLQkJCWN1cl9kYXRhX2NvdW50ID0gMTY7Ci0JCWVsc2UKLQkJCWN1cl9kYXRhX2NvdW50ID0g Y291bnQgLSBzdGFydF9vZmZzZXQ7Ci0KLQkJLyogQVVYIENIIFJlcXVlc3QgVHJhbnNhY3Rpb24g cHJvY2VzcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQkvKiBTZWxlY3QgRFBD RCBkZXZpY2UgYWRkcmVzcyAqLwotCQkJcmVnID0gQVVYX0FERFJfN18wKHJlZ19hZGRyICsgc3Rh cnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FV WF9BRERSXzdfMCk7Ci0JCQlyZWcgPSBBVVhfQUREUl8xNV84KHJlZ19hZGRyICsgc3RhcnRfb2Zm c2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERS XzE1XzgpOwotCQkJcmVnID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIgKyBzdGFydF9vZmZzZXQp OwotCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0FERFJfMTlf MTYpOwotCi0JCQkvKgotCQkJICogU2V0IERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uIGFuZCByZWFk Ci0JCQkgKiBJZiBiaXQgMyBpcyAxLCBEaXNwbGF5UG9ydCB0cmFuc2FjdGlvbi4KLQkJCSAqIElm IEJpdCAzIGlzIDAsIEkyQyB0cmFuc2FjdGlvbi4KLQkJCSAqLwotCQkJcmVnID0gQVVYX0xFTkdU SChjdXJfZGF0YV9jb3VudCkgfAotCQkJCUFVWF9UWF9DT01NX0RQX1RSQU5TQUNUSU9OIHwgQVVY X1RYX0NPTU1fUkVBRDsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X0FVWF9DSF9DVExfMSk7Ci0KLQkJCS8qIFN0YXJ0IEFVWCB0cmFuc2FjdGlvbiAqLwotCQkJcmV0 dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKLQkJCWlmIChyZXR2 YWwgPT0gMCkKLQkJCQlicmVhazsKLQotCQkJZGV2X2RiZyhkcC0+ZGV2LCAiJXM6IEF1eCBUcmFu c2FjdGlvbiBmYWlsIVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCX0KLQotCQlmb3IgKGN1cl9kYXRh X2lkeCA9IDA7IGN1cl9kYXRhX2lkeCA8IGN1cl9kYXRhX2NvdW50OwotCQkgICAgY3VyX2RhdGFf aWR4KyspIHsKLQkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRl9E QVRBXzAKLQkJCQkJCSArIDQgKiBjdXJfZGF0YV9pZHgpOwotCQkJZGF0YVtzdGFydF9vZmZzZXQg KyBjdXJfZGF0YV9pZHhdID0KLQkJCQkodW5zaWduZWQgY2hhcilyZWc7Ci0JCX0KLQotCQlzdGFy dF9vZmZzZXQgKz0gY3VyX2RhdGFfY291bnQ7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQot aW50IGFuYWxvZ2l4X2RwX3NlbGVjdF9pMmNfZGV2aWNlKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZp Y2UgKmRwLAotCQkJCSAgdW5zaWduZWQgaW50IGRldmljZV9hZGRyLAotCQkJCSAgdW5zaWduZWQg aW50IHJlZ19hZGRyKQotewotCXUzMiByZWc7Ci0JaW50IHJldHZhbDsKLQotCS8qIFNldCBFRElE IGRldmljZSBhZGRyZXNzICovCi0JcmVnID0gZGV2aWNlX2FkZHI7Ci0Jd3JpdGVsKHJlZywgZHAt PnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0FERFJfN18wKTsKLQl3cml0ZWwoMHgwLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xNV84KTsKLQl3cml0ZWwoMHgwLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xOV8xNik7Ci0KLQkvKiBTZXQgb2Zmc2V0 IGZyb20gYmFzZSBhZGRyZXNzIG9mIEVESUQgZGV2aWNlICovCi0Jd3JpdGVsKHJlZ19hZGRyLCBk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZfREFUQV8wKTsKLQotCS8qCi0JICogU2V0IEky QyB0cmFuc2FjdGlvbiBhbmQgd3JpdGUgYWRkcmVzcwotCSAqIElmIGJpdCAzIGlzIDEsIERpc3Bs YXlQb3J0IHRyYW5zYWN0aW9uLgotCSAqIElmIEJpdCAzIGlzIDAsIEkyQyB0cmFuc2FjdGlvbi4K LQkgKi8KLQlyZWcgPSBBVVhfVFhfQ09NTV9JMkNfVFJBTlNBQ1RJT04gfCBBVVhfVFhfQ09NTV9N T1QgfAotCQlBVVhfVFhfQ09NTV9XUklURTsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9BVVhfQ0hfQ1RMXzEpOwotCi0JLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICov Ci0JcmV0dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKLQlpZiAo cmV0dmFsICE9IDApCi0JCWRldl9kYmcoZHAtPmRldiwgIiVzOiBBdXggVHJhbnNhY3Rpb24gZmFp bCFcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBhbmFsb2dpeF9k cF9yZWFkX2J5dGVfZnJvbV9pMmMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsCi0JCQkJ ICAgdW5zaWduZWQgaW50IGRldmljZV9hZGRyLAotCQkJCSAgIHVuc2lnbmVkIGludCByZWdfYWRk ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpCi17Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQlp bnQgcmV0dmFsOwotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQkvKiBDbGVhciBBVVgg Q0ggZGF0YSBidWZmZXIgKi8KLQkJcmVnID0gQlVGX0NMUjsKLQkJd3JpdGVsKHJlZywgZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfQlVGRkVSX0RBVEFfQ1RMKTsKLQotCQkvKiBTZWxlY3QgRURJ RCBkZXZpY2UgKi8KLQkJcmV0dmFsID0gYW5hbG9naXhfZHBfc2VsZWN0X2kyY19kZXZpY2UoZHAs IGRldmljZV9hZGRyLAotCQkJCQkJICAgICAgIHJlZ19hZGRyKTsKLQkJaWYgKHJldHZhbCAhPSAw KQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogU2V0IEkyQyB0cmFuc2FjdGlvbiBhbmQgcmVh ZCBkYXRhCi0JCSAqIElmIGJpdCAzIGlzIDEsIERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uLgotCQkg KiBJZiBCaXQgMyBpcyAwLCBJMkMgdHJhbnNhY3Rpb24uCi0JCSAqLwotCQlyZWcgPSBBVVhfVFhf Q09NTV9JMkNfVFJBTlNBQ1RJT04gfAotCQkJQVVYX1RYX0NPTU1fUkVBRDsKLQkJd3JpdGVsKHJl ZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0NIX0NUTF8xKTsKLQotCQkvKiBTdGFy dCBBVVggdHJhbnNhY3Rpb24gKi8KLQkJcmV0dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3Ry YW5zYWN0aW9uKGRwKTsKLQkJaWYgKHJldHZhbCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZGV2X2Ri ZyhkcC0+ZGV2LCAiJXM6IEF1eCBUcmFuc2FjdGlvbiBmYWlsIVxuIiwgX19mdW5jX18pOwotCX0K LQotCS8qIFJlYWQgZGF0YSAqLwotCWlmIChyZXR2YWwgPT0gMCkKLQkJKmRhdGEgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZfREFUQV8wKTsKLQotCXJldHVybiByZXR2YWw7 Ci19Ci0KLWludCBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21faTJjKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCi0JCQkJ ICAgIHVuc2lnbmVkIGludCByZWdfYWRkciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LAot CQkJCSAgICB1bnNpZ25lZCBjaGFyIGVkaWRbXSkKLXsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGlu dCBpLCBqOwotCXVuc2lnbmVkIGludCBjdXJfZGF0YV9pZHg7Ci0JdW5zaWduZWQgaW50IGRlZmVy ID0gMDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSArPSAx NikgewotCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0JCQkvKiBDbGVhciBBVVggQ0ggZGF0 YSBidWZmZXIgKi8KLQkJCXJlZyA9IEJVRl9DTFI7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBBTkFMT0dJWF9EUF9CVUZGRVJfREFUQV9DVEwpOwotCi0JCQkvKiBTZXQgbm9ybWFsIEFV WCBDSCBjb21tYW5kICovCi0JCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9BVVhfQ0hfQ1RMXzIpOwotCQkJcmVnICY9IH5BRERSX09OTFk7Ci0JCQl3cml0ZWwocmVnLCBk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfQ1RMXzIpOwotCi0JCQkvKgotCQkJICog SWYgUnggc2VuZHMgZGVmZXIsIFR4IHNlbmRzIG9ubHkgcmVhZHMKLQkJCSAqIHJlcXVlc3Qgd2l0 aG91dCBzZW5kaW5nIGFkZHJlc3MKLQkJCSAqLwotCQkJaWYgKCFkZWZlcikKLQkJCQlyZXR2YWwg PSBhbmFsb2dpeF9kcF9zZWxlY3RfaTJjX2RldmljZShkcCwKLQkJCQkJCWRldmljZV9hZGRyLCBy ZWdfYWRkciArIGkpOwotCQkJZWxzZQotCQkJCWRlZmVyID0gMDsKLQotCQkJaWYgKHJldHZhbCA9 PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBTZXQgSTJDIHRyYW5zYWN0aW9uIGFuZCB3cml0ZSBkYXRh Ci0JCQkJICogSWYgYml0IDMgaXMgMSwgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24uCi0JCQkJICog SWYgQml0IDMgaXMgMCwgSTJDIHRyYW5zYWN0aW9uLgotCQkJCSAqLwotCQkJCXJlZyA9IEFVWF9M RU5HVEgoMTYpIHwKLQkJCQkJQVVYX1RYX0NPTU1fSTJDX1RSQU5TQUNUSU9OIHwKLQkJCQkJQVVY X1RYX0NPTU1fUkVBRDsKLQkJCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKwotCQkJCQlBTkFM T0dJWF9EUF9BVVhfQ0hfQ1RMXzEpOwotCi0JCQkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICov Ci0JCQkJcmV0dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKLQkJ CQlpZiAocmV0dmFsID09IDApCi0JCQkJCWJyZWFrOwotCi0JCQkJZGV2X2RiZyhkcC0+ZGV2LCAi JXM6IEF1eCBUcmFuc2FjdGlvbiBmYWlsIVxuIiwKLQkJCQkJX19mdW5jX18pOwotCQkJfQotCQkJ LyogQ2hlY2sgaWYgUnggc2VuZHMgZGVmZXIgKi8KLQkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX0FVWF9SWF9DT01NKTsKLQkJCWlmIChyZWcgPT0gQVVYX1JYX0NPTU1f QVVYX0RFRkVSIHx8Ci0JCQkgICAgcmVnID09IEFVWF9SWF9DT01NX0kyQ19ERUZFUikgewotCQkJ CWRldl9lcnIoZHAtPmRldiwgIkRlZmVyOiAlZFxuXG4iLCByZWcpOwotCQkJCWRlZmVyID0gMTsK LQkJCX0KLQkJfQotCi0JCWZvciAoY3VyX2RhdGFfaWR4ID0gMDsgY3VyX2RhdGFfaWR4IDwgMTY7 IGN1cl9kYXRhX2lkeCsrKSB7Ci0JCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJ WF9EUF9CVUZfREFUQV8wCi0JCQkJCQkgKyA0ICogY3VyX2RhdGFfaWR4KTsKLQkJCWVkaWRbaSAr IGN1cl9kYXRhX2lkeF0gPSAodW5zaWduZWQgY2hhcilyZWc7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g cmV0dmFsOwotfQotCiB2b2lkIGFuYWxvZ2l4X2RwX3NldF9saW5rX2JhbmR3aWR0aChzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCwgdTMyIGJ3dHlwZSkKIHsKIAl1MzIgcmVnOwpAQCAtMTM3 MywzICsxMDQ5LDEzMCBAQCB2b2lkIGFuYWxvZ2l4X2RwX3NlbmRfcHNyX3NwZChzdHJ1Y3QgYW5h bG9naXhfZHBfZGV2aWNlICpkcCwKIAl2YWwgfD0gSUZfRU47CiAJd3JpdGVsKHZhbCwgZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfUEtUX1NFTkRfQ1RMKTsKIH0KKworc3NpemVfdCBhbmFsb2dp eF9kcF90cmFuc2ZlcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJCSAgICAgc3Ry dWN0IGRybV9kcF9hdXhfbXNnICptc2cpCit7CisJdTMyIHJlZzsKKwl1OCAqYnVmZmVyID0gbXNn LT5idWZmZXI7CisJaW50IHRpbWVvdXRfbG9vcCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50 IG51bV90cmFuc2ZlcnJlZCA9IDA7CisKKwkvKiBCdWZmZXIgc2l6ZSBvZiBBVVggQ0ggaXMgMTYg Ynl0ZXMgKi8KKwlpZiAoV0FSTl9PTihtc2ctPnNpemUgPiAxNikpCisJCXJldHVybiAtRTJCSUc7 CisKKwkvKiBDbGVhciBBVVggQ0ggZGF0YSBidWZmZXIgKi8KKwlyZWcgPSBCVUZfQ0xSOworCXdy aXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRkZFUl9EQVRBX0NUTCk7CisK Kwlzd2l0Y2ggKG1zZy0+cmVxdWVzdCAmIH5EUF9BVVhfSTJDX01PVCkgeworCWNhc2UgRFBfQVVY X0kyQ19XUklURToKKwkJcmVnID0gQVVYX1RYX0NPTU1fV1JJVEUgfCBBVVhfVFhfQ09NTV9JMkNf VFJBTlNBQ1RJT047CisJCWlmIChtc2ctPnJlcXVlc3QgJiBEUF9BVVhfSTJDX01PVCkKKwkJCXJl ZyB8PSBBVVhfVFhfQ09NTV9NT1Q7CisJCWJyZWFrOworCisJY2FzZSBEUF9BVVhfSTJDX1JFQUQ6 CisJCXJlZyA9IEFVWF9UWF9DT01NX1JFQUQgfCBBVVhfVFhfQ09NTV9JMkNfVFJBTlNBQ1RJT047 CisJCWlmIChtc2ctPnJlcXVlc3QgJiBEUF9BVVhfSTJDX01PVCkKKwkJCXJlZyB8PSBBVVhfVFhf Q09NTV9NT1Q7CisJCWJyZWFrOworCisJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOgorCQlyZWcg PSBBVVhfVFhfQ09NTV9XUklURSB8IEFVWF9UWF9DT01NX0RQX1RSQU5TQUNUSU9OOworCQlicmVh azsKKworCWNhc2UgRFBfQVVYX05BVElWRV9SRUFEOgorCQlyZWcgPSBBVVhfVFhfQ09NTV9SRUFE IHwgQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJT047CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnIHw9IEFVWF9MRU5HVEgobXNnLT5zaXplKTsKKwl3 cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfQ1RMXzEpOworCisJ LyogU2VsZWN0IERQQ0QgZGV2aWNlIGFkZHJlc3MgKi8KKwlyZWcgPSBBVVhfQUREUl83XzAobXNn LT5hZGRyZXNzKTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhf QUREUl83XzApOworCXJlZyA9IEFVWF9BRERSXzE1XzgobXNnLT5hZGRyZXNzKTsKKwl3cml0ZWwo cmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xNV84KTsKKwlyZWcgPSBB VVhfQUREUl8xOV8xNihtc2ctPmFkZHJlc3MpOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSAr IEFOQUxPR0lYX0RQX0FVWF9BRERSXzE5XzE2KTsKKworCWlmICghKG1zZy0+cmVxdWVzdCAmIERQ X0FVWF9JMkNfUkVBRCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1zZy0+c2l6ZTsgaSsrKSB7CisJ CQlyZWcgPSBidWZmZXJbaV07CisJCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJ WF9EUF9CVUZfREFUQV8wICsKKwkJCSAgICAgICA0ICogaSk7CisJCQludW1fdHJhbnNmZXJyZWQr KzsKKwkJfQorCX0KKworCS8qIEVuYWJsZSBBVVggQ0ggb3BlcmF0aW9uICovCisJcmVnID0gQVVY X0VOOworCisJLyogWmVyby1zaXplZCBtZXNzYWdlcyBzcGVjaWZ5IGFkZHJlc3Mtb25seSB0cmFu c2FjdGlvbnMuICovCisJaWYgKG1zZy0+c2l6ZSA8IDEpCisJCXJlZyB8PSBBRERSX09OTFk7CisK Kwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfQ1RMXzIpOwor CisJLyogSXMgQVVYIENIIGNvbW1hbmQgcmVwbHkgcmVjZWl2ZWQ/ICovCisJLyogVE9ETzogV2Fp dCBmb3IgYW4gaW50ZXJydXB0IGluc3RlYWQgb2YgbG9vcGluZz8gKi8KKwlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9JTlRfU1RBKTsKKwl3aGlsZSAoIShyZWcgJiBSUExZ X1JFQ0VJVikpIHsKKwkJdGltZW91dF9sb29wKys7CisJCWlmICh0aW1lb3V0X2xvb3AgPiBEUF9U SU1FT1VUX0xPT1BfQ09VTlQpIHsKKwkJCWRldl9lcnIoZHAtPmRldiwgIkFVWCBDSCBjb21tYW5k IHJlcGx5IGZhaWxlZCFcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJcmVnID0g cmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfSU5UX1NUQSk7CisJCXVzbGVlcF9yYW5n ZSgxMCwgMTEpOworCX0KKworCS8qIENsZWFyIGludGVycnVwdCBzb3VyY2UgZm9yIEFVWCBDSCBj b21tYW5kIHJlcGx5ICovCisJd3JpdGVsKFJQTFlfUkVDRUlWLCBkcC0+cmVnX2Jhc2UgKyBBTkFM T0dJWF9EUF9JTlRfU1RBKTsKKworCS8qIENsZWFyIGludGVycnVwdCBzb3VyY2UgZm9yIEFVWCBD SCBhY2Nlc3MgZXJyb3IgKi8KKwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9JTlRfU1RBKTsKKwlpZiAocmVnICYgQVVYX0VSUikgeworCQl3cml0ZWwoQVVYX0VSUiwgZHAt PnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfSU5UX1NUQSk7CisJCXJldHVybiAtRVJFTU9URUlPOwor CX0KKworCS8qIENoZWNrIEFVWCBDSCBlcnJvciBhY2Nlc3Mgc3RhdHVzICovCisJcmVnID0gcmVh ZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0NIX1NUQSk7CisJaWYgKChyZWcgJiBB VVhfU1RBVFVTX01BU0spKSB7CisJCWRldl9lcnIoZHAtPmRldiwgIkFVWCBDSCBlcnJvciBoYXBw ZW5lZDogJWRcblxuIiwKKwkJCXJlZyAmIEFVWF9TVEFUVVNfTUFTSyk7CisJCXJldHVybiAtRVJF TU9URUlPOworCX0KKworCWlmIChtc2ctPnJlcXVlc3QgJiBEUF9BVVhfSTJDX1JFQUQpIHsKKwkJ Zm9yIChpID0gMDsgaSA8IG1zZy0+c2l6ZTsgaSsrKSB7CisJCQlyZWcgPSByZWFkbChkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZfREFUQV8wICsKKwkJCQkgICAgNCAqIGkpOworCQkJYnVm ZmVyW2ldID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCQkJbnVtX3RyYW5zZmVycmVkKys7CisJCX0K Kwl9CisKKwkvKiBDaGVjayBpZiBSeCBzZW5kcyBkZWZlciAqLworCXJlZyA9IHJlYWRsKGRwLT5y ZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9SWF9DT01NKTsKKwlpZiAocmVnID09IEFVWF9SWF9D T01NX0FVWF9ERUZFUikKKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVI7 CisJZWxzZSBpZiAocmVnID09IEFVWF9SWF9DT01NX0kyQ19ERUZFUikKKwkJbXNnLT5yZXBseSA9 IERQX0FVWF9JMkNfUkVQTFlfREVGRVI7CisJZWxzZSBpZiAoKG1zZy0+cmVxdWVzdCAmIH5EUF9B VVhfSTJDX01PVCkgPT0gRFBfQVVYX0kyQ19XUklURSB8fAorCQkgKG1zZy0+cmVxdWVzdCAmIH5E UF9BVVhfSTJDX01PVCkgPT0gRFBfQVVYX0kyQ19SRUFEKQorCQltc2ctPnJlcGx5ID0gRFBfQVVY X0kyQ19SRVBMWV9BQ0s7CisJZWxzZSBpZiAoKG1zZy0+cmVxdWVzdCAmIH5EUF9BVVhfSTJDX01P VCkgPT0gRFBfQVVYX05BVElWRV9XUklURSB8fAorCQkgKG1zZy0+cmVxdWVzdCAmIH5EUF9BVVhf STJDX01PVCkgPT0gRFBfQVVYX05BVElWRV9SRUFEKQorCQltc2ctPnJlcGx5ID0gRFBfQVVYX05B VElWRV9SRVBMWV9BQ0s7CisKKwlyZXR1cm4gbnVtX3RyYW5zZmVycmVkOworfQotLSAKMS45LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK