From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v4 2/2] drm/pl111: Initial drm/kms driver for pl111 Date: Thu, 30 Mar 2017 17:30:09 -0700 Message-ID: <20170331003009.27104-2-eric@anholt.net> References: <20170331003009.27104-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id 9C3126E996 for ; Fri, 31 Mar 2017 00:30:15 +0000 (UTC) In-Reply-To: <20170331003009.27104-1-eric@anholt.net> 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, tom.cooksey@arm.com, Russell King Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVG9tIENvb2tzZXkgPHRvbS5jb29rc2V5QGFybS5jb20+CgpUaGlzIGlzIGEgbW9kZXNl dHRpbmcgZHJpdmVyIGZvciB0aGUgcGwxMTEgQ0xDRCBkaXNwbGF5IGNvbnRyb2xsZXIKZm91bmQg b24gdmFyaW91cyBBUk0gcGxhdGZvcm1zIHN1Y2ggYXMgdGhlIFZlcnNhdGlsZSBFeHByZXNzLiBU aGUKZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIG9uIHRoZSBiY205MTEzNjBfZW50cGhuIHBs YXRmb3JtIHNvIGZhciwKd2l0aCBQUklNRS1iYXNlZCBidWZmZXIgc2hhcmluZyBiZXR3ZWVuIHZj NCBhbmQgY2xjZC4KCkl0IHJldXNlcyB0aGUgZXhpc3RpbmcgZGV2aWNldHJlZSBiaW5kaW5nLCB3 aGlsZSBub3QgdXNpbmcgcXVpdGUgYXMKbWFueSBvZiBpdHMgcHJvcGVydGllcyBhcyB0aGUgZmJk ZXYgZHJpdmVyIGRvZXMgKHRob3NlIGFyZSBsZWZ0IGZvcgpmdXR1cmUgd29yaykuCgp2MjogTmVh cmx5IGNvbXBsZXRlIHJld3JpdGUgYnkgYW5ob2x0LCBjdXR0aW5nIDIvMyBvZiB0aGUgY29kZSB0 aGFua3MKICAgIHRvIERSTSBjb3JlJ3MgZXhjZWxsZW50IG5ldyBoZWxwZXJzLgp2MzogRG9uJ3Qg bWF0Y2ggcGwxMTAgYW55IG1vcmUsIGRvbid0IGF0dGFjaCBpZiB3ZSBkb24ndCBoYXZlIGEgRFJN CiAgICBwYW5lbCwgdXNlIERSTV9HRU1fQ01BX0ZPUFMsIHVwZGF0ZSBNQUlOVEFJTkVSUywgdXNl IHRoZSBzaW1wbGUKICAgIGRpc3BsYXkgaGVscGVyLCB1c2UgZHJtX2dlbV9jbWFfZHVtYl9jcmVh dGUgKHNhbWUgYXMgb3VyIHdyYXBwZXIpLgp2NDogQ2hhbmdlIHRoZSBkcml2ZXIncyAubmFtZSB0 byBub3QgY2xhc2ggd2l0aCBmYmRldiBpbiBzeXNmcywgZHJvcAogICAgcGxhdGZvcm0gYWxpYXMs IGRyb3AgcmVkdW5kYW50ICJkcm0iIGluIERSTSBkcml2ZXIgbmFtZSwgaG9vayB1cAogICAgLnBy ZXBhcmVfZmIgdG8gdGhlIENNQSBoZWxwZXIgc28gdGhhdCBETUEgZmVuY2VzIHNob3VsZCB3b3Jr LgoKU2lnbmVkLW9mZi1ieTogVG9tIENvb2tzZXkgPHRvbS5jb29rc2V5QGFybS5jb20+ClNpZ25l ZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0tLQogRG9jdW1lbnRhdGlv bi9ncHUvaW5kZXgucnN0ICAgICAgICAgICAgIHwgICAxICsKIERvY3VtZW50YXRpb24vZ3B1L3Bs MTExLnJzdCAgICAgICAgICAgICB8ICAgNiArCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAg ICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAg MSArCiBkcml2ZXJzL2dwdS9kcm0vcGwxMTEvS2NvbmZpZyAgICAgICAgICAgfCAgMTIgKysKIGRy aXZlcnMvZ3B1L2RybS9wbDExMS9NYWtlZmlsZSAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dw dS9kcm0vcGwxMTEvcGwxMTFfY29ubmVjdG9yLmMgfCAxMjcgKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vcGwxMTEvcGwxMTFfZGlzcGxheS5jICAgfCAzNDUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcm0uaCAgICAgICB8 ICA1NiArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcnYuYyAgICAgICB8IDI3 MiArKysrKysrKysrKysrKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA4MzMgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZ3B1L3BsMTExLnJzdAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wbDExMS9LY29uZmlnCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BsMTExL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Nvbm5lY3Rvci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcm0uaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcnYuYwoKZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZ3B1L2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2luZGV4LnJzdApp bmRleCBlOTk4ZWUwZDBkZDUuLjcxYmY1MTBkNDdlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlv bi9ncHUvaW5kZXgucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2luZGV4LnJzdApAQCAtMTEs NiArMTEsNyBAQCBMaW51eCBHUFUgRHJpdmVyIERldmVsb3BlcidzIEd1aWRlCiAgICBkcm0ta21z LWhlbHBlcnMKICAgIGRybS11YXBpCiAgICBpOTE1CisgICBwbDExMQogICAgdGlueWRybQogICAg dmM0CiAgICB2Z2Etc3dpdGNoZXJvbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvcGwx MTEucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvcGwxMTEucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uOWIwMzczNmQzM2RkCi0tLSAvZGV2L251bGwKKysrIGIvRG9j dW1lbnRhdGlvbi9ncHUvcGwxMTEucnN0CkBAIC0wLDAgKzEsNiBAQAorPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgZHJtL3BsMTExIEFSTSBQcmltZUNlbGwgUEwx MTEgQ0xDRCBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jCisg ICA6ZG9jOiBBUk0gUHJpbWVDZWxsIFBMMTExIENMQ0QgRHJpdmVyCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGUwM2U2YmNlZmFjMy4uNWZiYWZiMzllZTJlIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNDE2MCw2ICs0MTYw LDEyIEBAIEY6CWRyaXZlcnMvZ3B1L2RybS8qCiBGOglpbmNsdWRlL2RybS9kcm0qCiBGOglpbmNs dWRlL3VhcGkvZHJtL2RybSoKIAorRFJNIERSSVZFUiBGT1IgQVJNIFBMMTExIENMQ0QKK006CUVy aWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CitUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVz a3RvcC5vcmcvZHJtL2RybS1taXNjCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvZ3B1L2RybS9w bDExMS8KKwogRFJNIERSSVZFUiBGT1IgQVNUIFNFUlZFUiBHUkFQSElDUyBDSElQUwogTToJRGF2 ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KIFM6CU9kZCBGaXhlcwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA3 OGQ3ZmMwZWJiNTcuLmQxYzZjMTIxOTliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI3NCw2ICsyNzQsOCBAQCBz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZXNvbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS90aW55ZHJtL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3BsMTEx L0tjb25maWciCisKICMgS2VlcCBsZWdhY3kgZHJpdmVycyBsYXN0CiAKIG1lbnVjb25maWcgRFJN X0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCmluZGV4IDU5ZjBmOWI2OTZlYi4uMjhkY2Y5M2UxZDhmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCkBAIC05NiwzICs5Niw0IEBAIG9iai15CQkJKz0gaGlzaWxpY29uLwogb2JqLSQoQ09ORklH X0RSTV9aVEUpCSs9IHp0ZS8KIG9iai0kKENPTkZJR19EUk1fTVhTRkIpCSs9IG14c2ZiLwogb2Jq LSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLworb2JqLSQoQ09ORklHX0RSTV9QTDEx MSkgKz0gcGwxMTEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvS2NvbmZpZyBi L2RyaXZlcnMvZ3B1L2RybS9wbDExMS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZWRlNDllZmQ1MzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BsMTExL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmlnIERSTV9QTDExMQor CXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgUEwxMTEgQ0xDRCBDb250cm9sbGVyIgorCWRlcGVu ZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUCisJc2Vs ZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgorCXNlbGVjdCBE Uk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxlY3QgVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlmIEZSQU1F QlVGRkVSX0NPTlNPTEUKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gZm9yIERSTSBzdXBw b3J0IGZvciB0aGUgUEwxMTEgQ0xDRCBjb250cm9sbGVyLgorCSAgSWYgTSBpcyBzZWxlY3RlZCB0 aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBsMTExX2RybS4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3BsMTExL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL01ha2VmaWxl Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDFjYWVlNzI3YzEzCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL01ha2VmaWxlCkBAIC0wLDAg KzEsNSBAQAorcGwxMTFfZHJtLXkgKz0JcGwxMTFfY29ubmVjdG9yLm8gXAorCQlwbDExMV9kaXNw bGF5Lm8gXAorCQlwbDExMV9kcnYubworCitvYmotJChDT05GSUdfRFJNX1BMMTExKSArPSBwbDEx MV9kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Nvbm5lY3Rv ci5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Nvbm5lY3Rvci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2YyMTNkN2U3NjkyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Nvbm5lY3Rvci5jCkBAIC0wLDAgKzEs MTI3IEBACisvKgorICogKEMpIENPUFlSSUdIVCAyMDEyLTIwMTMgQVJNIExpbWl0ZWQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGFydHMgb2YgdGhpcyBmaWxlIHdlcmUgYmFzZWQgb24g c291cmNlcyBhcyBmb2xsb3dzOgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEludGVs IENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2ZSBBaXJsaWUgPGFpcmxpZWRA bGludXguaWU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFu ZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMg b2YKKyAqIHN1Y2ggR05VIGxpY2VuY2UuCisgKgorICovCisKKy8qKgorICogcGwxMTFfZHJtX2Nv bm5lY3Rvci5jCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ubmVjdG9yIGZ1bmN0aW9ucyBm b3IgUEwxMTEgRFJNCisgKi8KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QtcmVncy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ CisKKyNpbmNsdWRlICJwbDExMV9kcm0uaCIKKworc3RhdGljIHZvaWQgcGwxMTFfY29ubmVjdG9y X2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcGwx MTFfZHJtX2Nvbm5lY3RvciAqcGwxMTFfY29ubmVjdG9yID0KKwkJdG9fcGwxMTFfY29ubmVjdG9y KGNvbm5lY3Rvcik7CisKKwlpZiAocGwxMTFfY29ubmVjdG9yLT5wYW5lbCkKKwkJZHJtX3BhbmVs X2RldGFjaChwbDExMV9jb25uZWN0b3ItPnBhbmVsKTsKKworCWRybV9jb25uZWN0b3JfdW5yZWdp c3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQor CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBwbDExMV9jb25uZWN0b3JfZGV0ZWN0 KHN0cnVjdCBkcm1fY29ubmVjdG9yCisJCQkJCQkJKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sK KwlzdHJ1Y3QgcGwxMTFfZHJtX2Nvbm5lY3RvciAqcGwxMTFfY29ubmVjdG9yID0KKwkJdG9fcGwx MTFfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gKHBsMTExX2Nvbm5lY3Rvci0+cGFu ZWwgPworCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6CisJCWNvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkKTsKK30KKworc3RhdGljIGludCBwbDExMV9jb25uZWN0b3JfaGVscGVyX2dl dF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBwbDEx MV9kcm1fY29ubmVjdG9yICpwbDExMV9jb25uZWN0b3IgPQorCQl0b19wbDExMV9jb25uZWN0b3Io Y29ubmVjdG9yKTsKKworCWlmICghcGwxMTFfY29ubmVjdG9yLT5wYW5lbCkKKwkJcmV0dXJuIDA7 CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2RlcyhwbDExMV9jb25uZWN0b3ItPnBhbmVsKTsK K30KKworY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgY29ubmVjdG9yX2Z1bmNzID0g eworCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVz LAorCS5kZXN0cm95ID0gcGwxMTFfY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmRldGVjdCA9IHBsMTEx X2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHBtcywKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0 b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGlj YXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzIGNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHBs MTExX2Nvbm5lY3Rvcl9oZWxwZXJfZ2V0X21vZGVzLAorfTsKKworLyogV2Fsa3MgdGhlIE9GIGdy YXBoIHRvIGZpbmQgdGhlIHBhbmVsIG5vZGUgYW5kIHRoZW4gYXNrcyBEUk0gdG8gbG9vaworICog dXAgdGhlIHBhbmVsLgorICovCitzdGF0aWMgc3RydWN0IGRybV9wYW5lbCAqcGwxMTFfZ2V0X3Bh bmVsKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuZHBvaW50 LCAqcGFuZWxfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwor CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCisJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4 dF9lbmRwb2ludChucCwgTlVMTCk7CisJaWYgKCFlbmRwb2ludCkgeworCQlkZXZfZXJyKGRldiwg Im5vIGVuZHBvaW50IHRvIGZldGNoIHBhbmVsXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ LyogZG9uJ3QgcHJvY2VlZCBpZiB3ZSBoYXZlIGFuIGVuZHBvaW50IGJ1dCBubyBwYW5lbF9ub2Rl IHRpZWQgdG8gaXQgKi8KKwlwYW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChlbmRwb2ludCk7CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCWlmICghcGFuZWxfbm9k ZSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHZhbGlkIHBhbmVsIG5vZGVcbiIpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlwYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVsX25vZGUpOworCW9m X25vZGVfcHV0KHBhbmVsX25vZGUpOworCisJcmV0dXJuIHBhbmVsOworfQorCitpbnQgcGwxMTFf Y29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGwxMTFf ZHJtX2Rldl9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGwxMTFf ZHJtX2Nvbm5lY3RvciAqcGwxMTFfY29ubmVjdG9yID0gJnByaXYtPmNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJnBsMTExX2Nvbm5lY3Rvci0+Y29ubmVjdG9y OworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmY29ubmVjdG9yX2Z1bmNz LAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RQSSk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKGNvbm5lY3RvciwgJmNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJcGwxMTFfY29ubmVj dG9yLT5wYW5lbCA9IHBsMTExX2dldF9wYW5lbChkZXYtPmRldik7CisJaWYgKHBsMTExX2Nvbm5l Y3Rvci0+cGFuZWwpCisJCWRybV9wYW5lbF9hdHRhY2gocGwxMTFfY29ubmVjdG9yLT5wYW5lbCwg Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcGwxMTEvcGwxMTFfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rp c3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRhMmY1MWU5 ZjE0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kaXNw bGF5LmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiAoQykgQ09QWVJJR0hUIDIwMTItMjAxMyBB Uk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGZp bGUgd2VyZSBiYXNlZCBvbiBzb3VyY2VzIGFzIGZvbGxvd3M6CisgKgorICogQ29weXJpZ2h0IChj KSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZl IEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBJ bnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBw cm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcyBvZgorICogc3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC1yZWdzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorCisjaW5jbHVkZSAicGwxMTFf ZHJtLmgiCisKK2lycXJldHVybl90IHBsMTExX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQorewor CXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkYXRhOworCXUzMiBpcnFfc3Rh dDsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKworCWlycV9zdGF0ID0gcmVhZGwo cHJpdi0+cmVncyArIENMQ0RfUEwxMTFfTUlTKTsKKworCWlmICghaXJxX3N0YXQpCisJCXJldHVy biBJUlFfTk9ORTsKKworCWlmIChpcnFfc3RhdCAmIENMQ0RfSVJRX05FWFRCQVNFX1VQREFURSkg eworCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZwcml2LT5waXBlLmNydGMpOworCisJCXN0YXR1 cyA9IElSUV9IQU5ETEVEOworCX0KKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb25jZSBkb25l ICovCisJd3JpdGVsKGlycV9zdGF0LCBwcml2LT5yZWdzICsgQ0xDRF9QTDExMV9JQ1IpOworCisJ cmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBwbDExMV9nZXRfZmJfb2Zmc2V0KHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IHBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqb2JqID0gZHJtX2Zi X2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisKKwlyZXR1cm4gKG9iai0+cGFkZHIgKworCQlmYi0+ b2Zmc2V0c1swXSArCisJCWZiLT5mb3JtYXQtPmNwcFswXSAqIHBzdGF0ZS0+c3JjX3ggKworCQlm Yi0+cGl0Y2hlc1swXSAqIHBzdGF0ZS0+c3JjX3kpOworfQorCitzdGF0aWMgaW50IHBsMTExX2Rp c3BsYXlfY2hlY2soc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJICAg ICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNzdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZjc3RhdGUtPm1vZGU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiID0g cGlwZS0+cGxhbmUuc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcHN0 YXRlLT5mYjsKKworCWlmIChtb2RlLT5oZGlzcGxheSAlIDE2KQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmIChmYikgeworCQl1MzIgb2Zmc2V0ID0gcGwxMTFfZ2V0X2ZiX29mZnNldChwc3RhdGUp OworCisJCS8qIEZCIGJhc2UgYWRkcmVzcyBtdXN0IGJlIGR3b3JkIGFsaWduZWQuICovCisJCWlm IChvZmZzZXQgJiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogVGhlcmUncyBubyBwaXRj aCByZWdpc3RlciAtLSB0aGUgbW9kZSdzIGhkaXNwbGF5CisJCSAqIGNvbnRyb2xzIGl0LgorCQkg Ki8KKwkJaWYgKGZiLT5waXRjaGVzWzBdICE9IG1vZGUtPmhkaXNwbGF5ICogZmItPmZvcm1hdC0+ Y3BwWzBdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogV2UgY2FuJ3QgY2hhbmdlIHRoZSBG QiBmb3JtYXQgaW4gYSBmbGlja2VyLWZyZWUKKwkJICogbWFubmVyIChhbmQgb25seSB1cGRhdGUg aXQgZHVyaW5nIENSVEMgZW5hYmxlKS4KKwkJICovCisJCWlmIChvbGRfZmIgJiYgb2xkX2ZiLT5m b3JtYXQgIT0gZmItPmZvcm1hdCkKKwkJCWNzdGF0ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGwxMTFfZGlzcGxheV9lbmFibGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsK KwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZwaXBlLT5wbGFuZTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnBy aXYgPSBkcm0tPmRldl9wcml2YXRlOworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlID0gJmNzdGF0ZS0+bW9kZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l LT5zdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZwcml2LT5j b25uZWN0b3IuY29ubmVjdG9yOworCXUzMiBjbnRsOworCXUzMiBwcGwsIGhzdywgaGZwLCBoYnA7 CisJdTMyIGxwcCwgdnN3LCB2ZnAsIHZicDsKKwl1MzIgY3BsOworCWludCByZXQ7CisKKwlyZXQg PSBjbGtfc2V0X3JhdGUocHJpdi0+Y2xrLCBtb2RlLT5jbG9jayAqIDEwMDApOworCWlmIChyZXQp IHsKKwkJZGV2X2Vycihkcm0tPmRldiwKKwkJCSJGYWlsZWQgdG8gc2V0IHBpeGVsIGNsb2NrIHJh dGUgdG8gJWQ6ICVkXG4iLAorCQkJbW9kZS0+Y2xvY2sgKiAxMDAwLCByZXQpOworCX0KKworCWNs a19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGspOworCisJcHBsID0gKG1vZGUtPmhkaXNwbGF5IC8g MTYpIC0gMTsKKwloc3cgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCAtIDE7 CisJaGZwID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSAtIDE7CisJaGJwID0g bW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kIC0gMTsKKworCWxwcCA9IG1vZGUtPnZkaXNw bGF5IC0gMTsKKwl2c3cgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCAtIDE7 CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2YnAgPSBtb2Rl LT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwljcGwgPSBtb2RlLT5oZGlzcGxheSAtIDE7 CisKKwl3cml0ZWwoKHBwbCA8PCAyKSB8CisJICAgICAgIChoc3cgPDwgOCkgfAorCSAgICAgICAo aGZwIDw8IDE2KSB8CisJICAgICAgIChoYnAgPDwgMjQpLAorCSAgICAgICBwcml2LT5yZWdzICsg Q0xDRF9USU0wKTsKKwl3cml0ZWwobHBwIHwKKwkgICAgICAgKHZzdyA8PCAxMCkgfAorCSAgICAg ICAodmZwIDw8IDE2KSB8CisJICAgICAgICh2YnAgPDwgMjQpLAorCSAgICAgICBwcml2LT5yZWdz ICsgQ0xDRF9USU0xKTsKKwkvKiBYWFg6IFdlIGN1cnJlbnRseSBhbHdheXMgdXNlIENMQ0RDTEsg d2l0aCBubyBkaXZpc29yLiAgV2UKKwkgKiBjb3VsZCBwcm9iYWJseSByZWR1Y2UgcG93ZXIgY29u c3VtcHRpb24gYnkgdXNpbmcgSENMSworCSAqIChhcGJfcGNsaykgd2l0aCBhIGRpdmlzb3Igd2hl biBpdCBnZXRzIHVzIG5lYXIgb3VyIHRhcmdldAorCSAqIHBpeGVsIGNsb2NrLgorCSAqLworCXdy aXRlbCgoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8gVElNMl9JSFMgOiAw KSB8CisJICAgICAgICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykgPyBUSU0y X0lWUyA6IDApIHwKKwkgICAgICAgKChjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNfZmxhZ3Mg JgorCQkgRFJNX0JVU19GTEFHX0RFX0xPVykgPyBUSU0yX0lPRSA6IDApIHwKKwkgICAgICAgKChj b25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNfZmxhZ3MgJgorCQkgRFJNX0JVU19GTEFHX1BJWERB VEFfTkVHRURHRSkgPyBUSU0yX0lQQyA6IDApIHwKKwkgICAgICAgVElNMl9CQ0QgfAorCSAgICAg ICAoY3BsIDw8IDE2KSB8CisJICAgICAgIFRJTTJfQ0xLU0VMLAorCSAgICAgICBwcml2LT5yZWdz ICsgQ0xDRF9USU0yKTsKKwl3cml0ZWwoMCwgcHJpdi0+cmVncyArIENMQ0RfVElNMyk7CisKKwlk cm1fcGFuZWxfcHJlcGFyZShwcml2LT5jb25uZWN0b3IucGFuZWwpOworCisJLyogRW5hYmxlIGFu ZCBQb3dlciBVcCAqLworCWNudGwgPSBDTlRMX0xDREVOIHwgQ05UTF9MQ0RURlQgfCBDTlRMX0xD RFBXUiB8IENOVExfTENEVkNPTVAoMSk7CisKKwkvKiBOb3RlIHRoYXQgdGhlIHRoZSBoYXJkd2Fy ZSdzIGZvcm1hdCByZWFkZXIgdGFrZXMgJ3InIGZyb20KKwkgKiB0aGUgbG93IGJpdCwgd2hpbGUg RFJNIGZvcm1hdHMgbGlzdCBjaGFubmVscyBmcm9tIGhpZ2ggYml0CisJICogdG8gbG93IGJpdCBh cyB5b3UgcmVhZCBsZWZ0IHRvIHJpZ2h0LgorCSAqLworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9y bWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdS ODg4ODoKKwkJY250bCB8PSBDTlRMX0xDREJQUDI0OworCQlicmVhazsKKwljYXNlIERSTV9GT1JN QVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQljbnRsIHw9IENOVExf TENEQlBQMjQgfCBDTlRMX0JHUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToK KwkJY250bCB8PSBDTlRMX0xDREJQUDE2XzU2NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKKwkJY250bCB8PSBDTlRMX0xDREJQUDE2XzU2NSB8IENOVExfQkdSOworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1 OgorCQljbnRsIHw9IENOVExfTENEQlBQMTY7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJCWNudGwgfD0gQ05UTF9MQ0RC UFAxNiB8IENOVExfQkdSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1I0NDQ0OgorCQljbnRsIHw9IENOVExfTENEQlBQMTZfNDQ0Owor CQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1hS R0I0NDQ0OgorCQljbnRsIHw9IENOVExfTENEQlBQMTZfNDQ0IHwgQ05UTF9CR1I7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCVdBUk5fT05DRSh0cnVlLCAiVW5rbm93biBGQiBmb3JtYXQgMHglMDh4 XG4iLAorCQkJICBmYi0+Zm9ybWF0LT5mb3JtYXQpOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwo Y250bCwgcHJpdi0+cmVncyArIENMQ0RfUEwxMTFfQ05UTCk7CisKKwlkcm1fcGFuZWxfZW5hYmxl KHByaXYtPmNvbm5lY3Rvci5wYW5lbCk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cit9 CisKK3ZvaWQgcGwxMTFfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlf cGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwbDExMV9kcm1fZGV2 X3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2NydGNfdmJsYW5rX29m ZihjcnRjKTsKKworCWRybV9wYW5lbF9kaXNhYmxlKHByaXYtPmNvbm5lY3Rvci5wYW5lbCk7CisK KwkvKiBEaXNhYmxlIGFuZCBQb3dlciBEb3duICovCisJd3JpdGVsKDAsIHByaXYtPnJlZ3MgKyBD TENEX1BMMTExX0NOVEwpOworCisJZHJtX3BhbmVsX3VucHJlcGFyZShwcml2LT5jb25uZWN0b3Iu cGFuZWwpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7Cit9CisKK3N0YXRp YyB2b2lkIHBsMTExX2Rpc3BsYXlfdXBkYXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZSAqcGlwZSwKKwkJCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3BzdGF0ZSkKK3sKKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBk cm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50 ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJnBpcGUt PnBsYW5lOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsK KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBzdGF0ZS0+ZmI7CisKKwlpZiAoZmIpIHsK KwkJdTMyIGFkZHIgPSBwbDExMV9nZXRfZmJfb2Zmc2V0KHBzdGF0ZSk7CisKKwkJd3JpdGVsKGFk ZHIsIHByaXYtPnJlZ3MgKyBDTENEX1VCQVMpOworCX0KKworCWlmIChldmVudCkgeworCQljcnRj LT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCisJCXNwaW5fbG9ja19pcnEoJmNydGMtPmRldi0+ZXZl bnRfbG9jayk7CisJCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZlICYmIGRybV9jcnRjX3ZibGFua19n ZXQoY3J0YykgPT0gMCkKKwkJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQp OworCQllbHNlCisJCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJ CXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisKK2ludCBw bDExMV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBj cnRjKQoreworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9w cml2YXRlOworCisJd3JpdGVsKENMQ0RfSVJRX05FWFRCQVNFX1VQREFURSwgcHJpdi0+cmVncyAr IENMQ0RfUEwxMTFfSUVOQik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwbDExMV9kaXNhYmxl X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgY3J0YykKK3sKKwlz dHJ1Y3QgcGwxMTFfZHJtX2Rldl9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwor CXdyaXRlbCgwLCBwcml2LT5yZWdzICsgQ0xDRF9QTDExMV9JRU5CKTsKK30KKworc3RhdGljIGlu dCBwbDExMV9kaXNwbGF5X3ByZXBhcmVfZmIoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBl ICpwaXBlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK KwlyZXR1cm4gZHJtX2ZiX2NtYV9wcmVwYXJlX2ZiKCZwaXBlLT5wbGFuZSwgcGxhbmVfc3RhdGUp OworfQorCitjb25zdCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3MgcGwxMTFf ZGlzcGxheV9mdW5jcyA9IHsKKwkuY2hlY2sgPSBwbDExMV9kaXNwbGF5X2NoZWNrLAorCS5lbmFi bGUgPSBwbDExMV9kaXNwbGF5X2VuYWJsZSwKKwkuZGlzYWJsZSA9IHBsMTExX2Rpc3BsYXlfZGlz YWJsZSwKKwkudXBkYXRlID0gcGwxMTFfZGlzcGxheV91cGRhdGUsCisJLnByZXBhcmVfZmIgPSBw bDExMV9kaXNwbGF5X3ByZXBhcmVfZmIsCit9OworCitpbnQgcGwxMTFfZGlzcGxheV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IHBsMTExX2RybV9kZXZfcHJpdmF0ZSAq cHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtLT5kZXY7 CisJc3RydWN0IGRldmljZV9ub2RlICplbmRwb2ludDsKKwl1MzIgdGZ0X3IwYjBnMFszXTsKKwlp bnQgcmV0OworCXN0YXRpYyBjb25zdCB1MzIgZm9ybWF0c1tdID0geworCQlEUk1fRk9STUFUX0FC R1I4ODg4LAorCQlEUk1fRk9STUFUX1hCR1I4ODg4LAorCQlEUk1fRk9STUFUX0FSR0I4ODg4LAor CQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQlEUk1fRk9STUFUX0JHUjU2NSwKKwkJRFJNX0ZPUk1B VF9SR0I1NjUsCisJCURSTV9GT1JNQVRfQUJHUjE1NTUsCisJCURSTV9GT1JNQVRfWEJHUjE1NTUs CisJCURSTV9GT1JNQVRfQVJHQjE1NTUsCisJCURSTV9GT1JNQVRfWFJHQjE1NTUsCisJCURSTV9G T1JNQVRfQUJHUjQ0NDQsCisJCURSTV9GT1JNQVRfWEJHUjQ0NDQsCisJCURSTV9GT1JNQVRfQVJH QjQ0NDQsCisJCURSTV9GT1JNQVRfWFJHQjQ0NDQsCisJfTsKKworCWVuZHBvaW50ID0gb2ZfZ3Jh cGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlpZiAoIWVuZHBvaW50 KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShl bmRwb2ludCwKKwkJCQkgICAgICAgImFybSxwbDExeCx0ZnQtcjBnMGIwLXBhZHMiLAorCQkJCSAg ICAgICB0ZnRfcjBiMGcwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHRmdF9yMGIwZzApKSAhPSAw KSB7CisJCWRldl9lcnIoZGV2LCAiYXJtLHBsMTF4LHRmdC1yMGcwYjAtcGFkcyBzaG91bGQgYmUg MyBpbnRzXG4iKTsKKwkJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCQlyZXR1cm4gLUVOT0VOVDsK Kwl9CisJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOworCisJaWYgKHRmdF9yMGIwZzBbMF0gIT0gMCB8 fAorCSAgICB0ZnRfcjBiMGcwWzFdICE9IDggfHwKKwkgICAgdGZ0X3IwYjBnMFsyXSAhPSAxNikg eworCQlkZXZfZXJyKGRldiwgImFybSxwbDExeCx0ZnQtcjBnMGIwLXBhZHMgIT0gWzAsOCwxNl0g bm90IHlldCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBk cm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KGRybSwgJnByaXYtPnBpcGUsCisJCQkJCSAgICZw bDExMV9kaXNwbGF5X2Z1bmNzLAorCQkJCQkgICBmb3JtYXRzLCBBUlJBWV9TSVpFKGZvcm1hdHMp LAorCQkJCQkgICAmcHJpdi0+Y29ubmVjdG9yLmNvbm5lY3Rvcik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RybS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjM4MTU5MzkyMWI3Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RybS5oCkBAIC0wLDAgKzEs NTYgQEAKKy8qCisgKgorICogKEMpIENPUFlSSUdIVCAyMDEyLTIwMTMgQVJNIExpbWl0ZWQuIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFBhcnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGJh c2VkIG9uIHNvdXJjZXMgYXMgZm9sbG93czoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw OCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmUgQWlybGllIDxh aXJsaWVkQGxpbnV4LmllPgorICogQ29weXJpZ2h0IChDKSAyMDExIFRleGFzIEluc3RydW1lbnRz CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRv IHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhl IHRlcm1zIG9mCisgKiBzdWNoIEdOVSBsaWNlbmNlLgorICoKKyAqLworCisjaWZuZGVmIF9QTDEx MV9EUk1fSF8KKyNkZWZpbmUgX1BMMTExX0RSTV9IXworCisjaW5jbHVkZSA8ZHJtL2RybV9nZW0u aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CisKKyNkZWZpbmUgQ0xD RF9JUlFfTkVYVEJBU0VfVVBEQVRFIEJJVCgyKQorCitzdHJ1Y3QgcGwxMTFfZHJtX2Nvbm5lY3Rv ciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsOworfTsKKworc3RydWN0IHBsMTExX2RybV9kZXZfcHJpdmF0ZSB7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybTsKKworCXN0cnVjdCBwbDExMV9kcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsK KwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgcGlwZTsKKwlzdHJ1Y3QgZHJtX2ZiZGV2 X2NtYSAqZmJkZXY7CisKKwl2b2lkICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKK307CisKKyNk ZWZpbmUgdG9fcGwxMTFfY29ubmVjdG9yKHgpIFwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHBs MTExX2RybV9jb25uZWN0b3IsIGNvbm5lY3RvcikKKworaW50IHBsMTExX2Rpc3BsYXlfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBwbDExMV9lbmFibGVfdmJsYW5rKHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBjcnRjKTsKK3ZvaWQgcGwxMTFfZGlzYWJsZV92 Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IGNydGMpOworaXJxcmV0 dXJuX3QgcGwxMTFfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpOworaW50IHBsMTExX2Nvbm5lY3Rv cl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IHBsMTExX2VuY29kZXJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBwbDExMV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAg ICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKKworI2VuZGlmIC8qIF9QTDEx MV9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjIwNDkzM2UxNWNlYgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcnYuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAq IChDKSBDT1BZUklHSFQgMjAxMi0yMDEzIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFBhcnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGJhc2VkIG9uIHNvdXJjZXMgYXMgZm9s bG93czoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgor ICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICog Q29weXJpZ2h0IChDKSAyMDExIFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMg b2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5 b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mCisgKiBzdWNoIEdO VSBsaWNlbmNlLgorICoKKyAqLworCisvKioKKyAqIERPQzogQVJNIFByaW1lQ2VsbCBQTDExMSBD TENEIERyaXZlcgorICoKKyAqIFRoZSBQTDExMSBpcyBhIHNpbXBsZSBMQ0QgY29udHJvbGxlciB0 aGF0IGNhbiBzdXBwb3J0IFRGVCBhbmQgU1ROCisgKiBkaXNwbGF5cy4gIFRoaXMgZHJpdmVyIGV4 cG9zZXMgYSBzdGFuZGFyZCBLTVMgaW50ZXJmYWNlIGZvciB0aGVtLgorICoKKyAqIFRoaXMgZHJp dmVyIHVzZXMgdGhlIHNhbWUgRGV2aWNlIFRyZWUgYmluZGluZyBhcyB0aGUgZmJkZXYgQ0xDRAor ICogZHJpdmVyLiAgV2hpbGUgdGhlIGZiZGV2IGRyaXZlciBzdXBwb3J0cyBwYW5lbHMgdGhhdCBt YXkgYmUKKyAqIGNvbm5lY3RlZCB0byB0aGUgQ0xDRCBpbnRlcm5hbGx5IHRvIHRoZSBDTENEIGRy aXZlciwgaW4gRFJNIHRoZQorICogcGFuZWxzIGdldCBzcGxpdCBvdXQgdG8gZHJpdmVycy9ncHUv ZHJtL3BhbmVscy8uICBUaGlzIG1lYW5zIHRoYXQsCisgKiBpbiBjb252ZXJ0aW5nIGZyb20gdXNp bmcgZmJkZXYgdG8gdXNpbmcgRFJNLCB5b3UgYWxzbyBuZWVkIHRvIHdyaXRlCisgKiBhIHBhbmVs IGRyaXZlciAod2hpY2ggbWF5IGJlIGFzIHNpbXBsZSBhcyBhbiBlbnRyeSBpbgorICogcGFuZWwt c2ltcGxlLmMpLgorICoKKyAqIFRoZSBkcml2ZXIgY3VycmVudGx5IGRvZXNuJ3QgZXhwb3NlIHRo ZSBjdXJzb3IuICBUaGUgRFJNIEFQSSBmb3IKKyAqIGN1cnNvcnMgcmVxdWlyZXMgc3VwcG9ydCBm b3IgNjR4NjQgQVJHQjg4ODggY3Vyc29yIGltYWdlcywgd2hpbGUKKyAqIHRoZSBoYXJkd2FyZSBj YW4gb25seSBzdXBwb3J0IDY0eDY0IG1vbm9jaHJvbWUgd2l0aCBtYXNraW5nCisgKiBjdXJzb3Jz LiAgV2hpbGUgb25lIGNvdWxkIGltYWdpbmUgdHJ5aW5nIHRvIGhhY2sgc29tZXRoaW5nIHRvZ2V0 aGVyCisgKiB0byBsb29rIGF0IHRoZSBBUkdCODg4OCBhbmQgcHJvZ3JhbSByZWFzb25hYmxlIGlu IG1vbm9jaHJvbWUsIHdlCisgKiBqdXN0IGRvbid0IGV4cG9zZSB0aGUgY3Vyc29yIGF0IGFsbCBp bnN0ZWFkLCBhbmQgbGVhdmUgY3Vyc29yCisgKiBzdXBwb3J0IHRvIHRoZSBYMTEgc29mdHdhcmUg Y3Vyc29yIGxheWVyLgorICoKKyAqIFRPRE86CisgKgorICogLSBGaXggcmFjZSBiZXR3ZWVuIHNl dHRpbmcgcGxhbmUgYmFzZSBhZGRyZXNzIGFuZCBnZXR0aW5nIElSUSBmb3IKKyAqICAgdnN5bmMg ZmlyaW5nIHRoZSBwYWdlZmxpcCBjb21wbGV0aW9uLgorICoKKyAqIC0gRXhwb3NlIHRoZSBjb3Jy ZWN0IHNldCBvZiBmb3JtYXRzIHdlIGNhbiBzdXBwb3J0IGJhc2VkIG9uIHRoZQorICogICAiYXJt LHBsMTF4LHRmdC1yMGcwYjAtcGFkcyIgRFQgcHJvcGVydHkuCisgKgorICogLSBVc2UgdGhlICJt YXgtbWVtb3J5LWJhbmR3aWR0aCIgRFQgcHJvcGVydHkgdG8gZmlsdGVyIHRoZQorICogICBzdXBw b3J0ZWQgZm9ybWF0cy4KKyAqCisgKiAtIFJlYWQgYmFjayBoYXJkd2FyZSBzdGF0ZSBhdCBib290 IHRvIHNraXAgcmVwcm9ncmFtbWluZyB0aGUKKyAqICAgaGFyZHdhcmUgd2hlbiBkb2luZyBhIG5v LW9wIG1vZGVzZXQuCisgKgorICogLSBVc2UgdGhlIGludGVybmFsIGNsb2NrIGRpdmlzb3IgdG8g cmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uIGJ5CisgKiAgIHVzaW5nIEhDTEsgKGFwYl9wY2xrKSB3 aGVuIGFwcHJvcHJpYXRlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC1yZWdzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o PgorI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKworI2lu Y2x1ZGUgInBsMTExX2RybS5oIgorCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICAgIkRSTSBtb2R1 bGUgZm9yIFBMMTExIgorCitzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIG1vZGVfY29uZmln X2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKKwkuYXRvbWljX2No ZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jb21taXQsCit9OworCitzdGF0aWMgaW50IHBsMTExX21vZGVzZXRfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVf Y29uZmlnOworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9w cml2YXRlOworCWludCByZXQgPSAwOworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKKwlt b2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCW1vZGVfY29uZmlnLT5mdW5jcyA9ICZt b2RlX2NvbmZpZ19mdW5jczsKKwltb2RlX2NvbmZpZy0+bWluX3dpZHRoID0gMTsKKwltb2RlX2Nv bmZpZy0+bWF4X3dpZHRoID0gMTAyNDsKKwltb2RlX2NvbmZpZy0+bWluX2hlaWdodCA9IDE7CisJ bW9kZV9jb25maWctPm1heF9oZWlnaHQgPSA3Njg7CisKKwlyZXQgPSBwbDExMV9jb25uZWN0b3Jf aW5pdChkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBj cmVhdGUgcGwxMTFfZHJtX2Nvbm5lY3RvclxuIik7CisJCWdvdG8gb3V0X2NvbmZpZzsKKwl9CisK KwkvKiBEb24ndCBhY3R1YWxseSBhdHRhY2ggaWYgd2UgZGlkbid0IGZpbmQgYSBkcm1fcGFuZWwK KwkgKiBhdHRhY2hlZCB0byB1cy4gIFRoaXMgd2lsbCBhbGxvdyBhIGtlcm5lbCB0byBpbmNsdWRl IGJvdGgKKwkgKiB0aGUgZmJkZXYgcGwxMTEgZHJpdmVyIGFuZCB0aGlzIG9uZSwgYW5kIGNob29z ZSBiZXR3ZWVuCisJICogdGhlbSBiYXNlZCBvbiB3aGljaCBzdWJzeXN0ZW0gaGFzIHN1cHBvcnQg Zm9yIHRoZSBwYW5lbC4KKwkgKi8KKwlpZiAoIXByaXYtPmNvbm5lY3Rvci5wYW5lbCkgeworCQlk ZXZfaW5mbyhkZXYtPmRldiwKKwkJCSAiRGlzYWJsaW5nIGR1ZSB0byBsYWNrIG9mIERSTSBwYW5l bCBkZXZpY2UuXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfY29uZmlnOworCX0K KworCXJldCA9IHBsMTExX2Rpc3BsYXlfaW5pdChkZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlk ZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXQgZGlzcGxheVxuIik7CisJCWdvdG8gb3V0 X2NvbmZpZzsKKwl9CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlpZiAocmV0 ICE9IDApIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0IHZibGFua1xuIik7 CisJCWdvdG8gb3V0X2NvbmZpZzsKKwl9CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsK KworCXByaXYtPmZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0KGRldiwgMzIsCisJCQkJCSBkZXYt Pm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0 KGRldik7CisKKwlnb3RvIGZpbmlzaDsKKworb3V0X2NvbmZpZzoKKwlkcm1fbW9kZV9jb25maWdf Y2xlYW51cChkZXYpOworZmluaXNoOgorCXJldHVybiByZXQ7Cit9CisKK0RFRklORV9EUk1fR0VN X0NNQV9GT1BTKGRybV9mb3BzKTsKKworc3RhdGljIHZvaWQgcGwxMTFfbGFzdGNsb3NlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsMTExX2RybV9kZXZfcHJpdmF0ZSAqcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShwcml2 LT5mYmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBwbDExMV9kcm1fZHJpdmVy ID0geworCS5kcml2ZXJfZmVhdHVyZXMgPQorCQlEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0g fCBEUklWRVJfUFJJTUUgfCBEUklWRVJfQVRPTUlDLAorCS5sYXN0Y2xvc2UgPSBwbDExMV9sYXN0 Y2xvc2UsCisJLmlvY3RscyA9IE5VTEwsCisJLmZvcHMgPSAmZHJtX2ZvcHMsCisJLm5hbWUgPSAi cGwxMTEiLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSAiMjAxNzAzMTciLAorCS5t YWpvciA9IDEsCisJLm1pbm9yID0gMCwKKwkucGF0Y2hsZXZlbCA9IDAsCisJLmR1bWJfY3JlYXRl ID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCisJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVt Yl9kZXN0cm95LAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZz ZXQsCisJLmdlbV9mcmVlX29iamVjdCA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1f dm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKKworCS5lbmFibGVfdmJsYW5rID0gcGwxMTFf ZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBwbDExMV9kaXNhYmxlX3ZibGFuaywK KworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwku cHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9w cmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydF9z Z190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1l X2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxl CT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorfTsKKworI2lmZGVmIENPTkZJR19B Uk1fQU1CQQorc3RhdGljIGludCBwbDExMV9hbWJhX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAq YW1iYV9kZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IGFtYmFfaWQgKmlkKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZhbWJhX2Rldi0+ZGV2OworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZh dGUgKnByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQgcmV0OworCisJcHJpdiA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJp dikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZwbDExMV9kcm1f ZHJpdmVyLCBkZXYpOworCWlmIChJU19FUlIoZHJtKSkKKwkJcmV0dXJuIFBUUl9FUlIoZHJtKTsK KwlhbWJhX3NldF9kcnZkYXRhKGFtYmFfZGV2LCBkcm0pOworCXByaXYtPmRybSA9IGRybTsKKwlk cm0tPmRldl9wcml2YXRlID0gcHJpdjsKKworCXByaXYtPmNsayA9IGRldm1fY2xrX2dldChkZXYs ICJjbGNkY2xrIik7CisJaWYgKElTX0VSUihwcml2LT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAi Q0xDRDogdW5hYmxlIHRvIGdldCBjbGsuXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5jbGsp OworCQlnb3RvIGRldl91bnJlZjsKKwl9CisKKwlwcml2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgJmFtYmFfZGV2LT5yZXMpOworCWlmICghcHJpdi0+cmVncykgeworCQlkZXZf ZXJyKGRldiwgIiVzIGZhaWxlZCBtbWlvXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCS8qIHR1cm4gb2ZmIGludGVycnVwdHMgYmVmb3JlIHJlcXVlc3RpbmcgdGhlIGly cSAqLworCXdyaXRlbCgwLCBwcml2LT5yZWdzICsgQ0xDRF9QTDExMV9JRU5CKTsKKworCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBhbWJhX2Rldi0+aXJxWzBdLCBwbDExMV9pcnEsIDAsCisJ CQkgICAgICAgInBsMTExIiwgcHJpdik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2 LCAiJXMgZmFpbGVkIGlycSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gcGwxMTFfbW9kZXNldF9pbml0KGRybSk7CisJaWYgKHJldCAhPSAwKQorCQln b3RvIGRldl91bnJlZjsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAo cmV0IDwgMCkKKwkJZ290byBkZXZfdW5yZWY7CisKKwlyZXR1cm4gMDsKKworZGV2X3VucmVmOgor CWRybV9kZXZfdW5yZWYoZHJtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBsMTEx X2FtYmFfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXYpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9IGFtYmFfZ2V0X2RydmRhdGEoYW1iYV9kZXYpOworCXN0cnVjdCBwbDEx MV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2Rldl91 bnJlZ2lzdGVyKGRybSk7CisJaWYgKHByaXYtPmZiZGV2KQorCQlkcm1fZmJkZXZfY21hX2Zpbmko cHJpdi0+ZmJkZXYpOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtX2Rldl91 bnJlZihkcm0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDEx MV9pZF90YWJsZVtdID0geworCXsKKwkJLmlkID0gMHgwMDA0MTExMSwKKwkJLm1hc2sgPSAweDAw MGZmZmZmLAorCX0sCisJezAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RyaXZlciBw bDExMV9hbWJhX2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZSA9ICJkcm0tY2xjZC1wbDEx MSIsCisJfSwKKwkucHJvYmUgPSBwbDExMV9hbWJhX3Byb2JlLAorCS5yZW1vdmUgPSBwbDExMV9h bWJhX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBwbDExMV9pZF90YWJsZSwKK307CisjZW5kaWYgLyog Q09ORklHX0FSTV9BTUJBICovCisKK21vZHVsZV9hbWJhX2RyaXZlcihwbDExMV9hbWJhX2RyaXZl cik7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJB Uk0gTHRkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi4xMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK