From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2 19/21] drm/i915: Merge i915_dma.c into i915_drv.c Date: Mon, 30 May 2016 09:38:37 +0100 Message-ID: <1464597519-16659-20-git-send-email-chris@chris-wilson.co.uk> References: <1464597519-16659-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C66A6E6DC for ; Mon, 30 May 2016 08:39:14 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id n129so20276753wmn.1 for ; Mon, 30 May 2016 01:39:13 -0700 (PDT) In-Reply-To: <1464597519-16659-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org aTkxNV9kbWEuYyB1c2VkIHRvIGNvbnRhaW4gdGhlIERSSTEvVU1TIGhvcnJvciBzaG93LCBidXQg bm93IGFsbCB0aGF0CnJlbWFpbnMgYXJlIHRoZSBvdXQtb2YtcGxhY2UgZHJpdmVyIGxldmVsIGlu dGVyZmFjZXMgKHN1Y2ggYXMKYWxsb2NhdGluZywgaW5pdGlhbGlzaW5nIGFuZCByZWdpc3Rlcmlu ZyB0aGUgZHJpdmVyKS4gVGhlc2Ugc2hvdWxkIGJlIGluCmk5MTVfZHJ2LmMgYWxvbmdzaWRlIHNp bWlsYXIgcm91dGluZXMgZm9yIHN1c3BlbmQvcmVzdW1lLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWwudmV0dGVyQGZmd2xsLmNoPgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMu bGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlICAgfCAgICAzIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgfCAxNjgxIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jIHwgMjA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfCAgIDE2ICstCiA0IGZpbGVzIGNoYW5nZWQs IDE4NDMgaW5zZXJ0aW9ucygrKSwgMTkwNiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRl eCA3ZTI5NDQ0MDZiOGYuLjJlYTdjMjQ1OTIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTEw MSw5ICsxMDEsNiBAQCBpOTE1LXkgKz0gZHZvX2NoNzAxNy5vIFwKICMgdmlydHVhbCBncHUgY29k ZQogaTkxNS15ICs9IGk5MTVfdmdwdS5vCiAKLSMgbGVnYWN5IGhvcnJvcnMKLWk5MTUteSArPSBp OTE1X2RtYS5vCi0KIG9iai0kKENPTkZJR19EUk1fSTkxNSkgICs9IGk5MTUubwogCiBDRkxBR1Nf aTkxNV90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTIyNjJmOWMzYy4uMDAwMDAwMDAwMDAwCi0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwx NjgxICswLDAgQEAKLS8qIGk5MTVfZG1hLmMgLS0gRE1BIHN1cHBvcnQgZm9yIHRoZSBJOTE1IC0q LSBsaW51eC1jIC0qLQotICovCi0vKgotICogQ29weXJpZ2h0IDIwMDMgVHVuZ3N0ZW4gR3JhcGhp Y3MsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq Ci0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotICogd2l0aG91dCBs aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LAotICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0bwotICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCi0gKiBvZiB0aGUg U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAqIE9SIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElU WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQu Ci0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBM SUVSUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKLSAqIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0gKiBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAq Ci0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAotCi0j aW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Ci0j aW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2xlZ2FjeS5o PgotI2luY2x1ZGUgImludGVsX2Rydi5oIgotI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgotI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAiaTkxNV92Z3B1LmgiCi0jaW5jbHVkZSAiaTkx NV90cmFjZS5oIgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNv bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92dC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgot I2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRl IDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNs dWRlIDxhY3BpL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvb29tLmg+Ci0KLXN0YXRpYyB1bnNpZ25l ZCBpbnQgaTkxNV9sb2FkX2ZhaWxfY291bnQ7Ci0KLWJvb2wgX19pOTE1X2luamVjdF9sb2FkX2Zh aWx1cmUoY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmUpCi17Ci0JaWYgKGk5MTVfbG9hZF9mYWls X2NvdW50ID49IGk5MTUuaW5qZWN0X2xvYWRfZmFpbHVyZSkKLQkJcmV0dXJuIGZhbHNlOwotCi0J aWYgKCsraTkxNV9sb2FkX2ZhaWxfY291bnQgPT0gaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJlKSB7 Ci0JCURSTV9JTkZPKCJJbmplY3RpbmcgZmFpbHVyZSBhdCBjaGVja3BvaW50ICV1IFslczolZF1c biIsCi0JCQkgaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJlLCBmdW5jLCBsaW5lKTsKLQkJcmV0dXJu IHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi0jZGVmaW5lIEZET19CVUdfVVJMICJo dHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1EUkkiCi0j ZGVmaW5lIEZET19CVUdfTVNHICJQbGVhc2UgZmlsZSBhIGJ1ZyBhdCAiIEZET19CVUdfVVJMICIg YWdhaW5zdCBEUk0vSW50ZWwgIiBcCi0JCSAgICAicHJvdmlkaW5nIHRoZSBkbWVzZyBsb2cgYnkg Ym9vdGluZyB3aXRoIGRybS5kZWJ1Zz0weGYiCi0KLXZvaWQKLV9faTkxNV9wcmludGsoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCBjaGFyICpsZXZlbCwKLQkgICAgICBj b25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlzdGF0aWMgYm9vbCBzaG93bl9idWdfb25jZTsKLQlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2LT5kZXY7Ci0JYm9vbCBpc19lcnJvciA9 IGxldmVsWzFdIDw9IEtFUk5fRVJSWzFdOwotCWJvb2wgaXNfZGVidWcgPSBsZXZlbFsxXSA9PSBL RVJOX0RFQlVHWzFdOwotCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwotCXZhX2xpc3QgYXJnczsKLQot CWlmIChpc19kZWJ1ZyAmJiAhKGRybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpKQotCQlyZXR1cm47 Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCi0JdmFmLmZtdCA9IGZtdDsKLQl2YWYudmEgPSAm YXJnczsKLQotCWRldl9wcmludGsobGV2ZWwsIGRldiwgIlsiIERSTV9OQU1FICI6JXBzXSAlcFYi LAotCQkgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksICZ2YWYpOwotCi0JaWYgKGlzX2Vy cm9yICYmICFzaG93bl9idWdfb25jZSkgewotCQlkZXZfbm90aWNlKGRldiwgIiVzIiwgRkRPX0JV R19NU0cpOwotCQlzaG93bl9idWdfb25jZSA9IHRydWU7Ci0JfQotCi0JdmFfZW5kKGFyZ3MpOwot fQotCi1zdGF0aWMgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlyZXR1cm4gaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJlICYmCi0J ICAgICAgIGk5MTVfbG9hZF9mYWlsX2NvdW50ID09IGk5MTUuaW5qZWN0X2xvYWRfZmFpbHVyZTsK LX0KLQotI2RlZmluZSBpOTE1X2xvYWRfZXJyb3IoZGV2X3ByaXYsIGZtdCwgLi4uKQkJCQkgICAg IFwKLQlfX2k5MTVfcHJpbnRrKGRldl9wcml2LAkJCQkJCSAgICAgXAotCQkgICAgICBpOTE1X2Vy cm9yX2luamVjdGVkKGRldl9wcml2KSA/IEtFUk5fREVCVUcgOiBLRVJOX0VSUiwgXAotCQkgICAg ICBmbXQsICMjX19WQV9BUkdTX18pCi0KLXN0YXRpYyBpbnQgaTkxNV9nZXRwYXJhbShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Ci0JZHJtX2k5MTVfZ2V0cGFyYW1fdCAqcGFyYW0gPSBkYXRhOwotCWludCB2YWx1ZTsK LQotCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7Ci0JY2FzZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkU6 Ci0JY2FzZSBJOTE1X1BBUkFNX0FMTE9XX0JBVENIQlVGRkVSOgotCWNhc2UgSTkxNV9QQVJBTV9M QVNUX0RJU1BBVENIOgotCQkvKiBSZWplY3QgYWxsIG9sZCB1bXMvZHJpIHBhcmFtcy4gKi8KLQkJ cmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQ6Ci0JCXZhbHVlID0g ZGV2LT5wZGV2LT5kZXZpY2U7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9SRVZJU0lPTjoK LQkJdmFsdWUgPSBkZXYtPnBkZXYtPnJldmlzaW9uOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFS QU1fSEFTX0dFTToKLQkJdmFsdWUgPSAxOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fTlVN X0ZFTkNFU19BVkFJTDoKLQkJdmFsdWUgPSBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7Ci0JCWJy ZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfT1ZFUkxBWToKLQkJdmFsdWUgPSBkZXZfcHJpdi0+ b3ZlcmxheSA/IDEgOiAwOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fSEFTX1BBR0VGTElQ UElORzoKLQkJdmFsdWUgPSAxOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fSEFTX0VYRUNC VUYyOgotCQkvKiBkZXBlbmRzIG9uIEdFTSAqLwotCQl2YWx1ZSA9IDE7Ci0JCWJyZWFrOwotCWNh c2UgSTkxNV9QQVJBTV9IQVNfQlNEOgotCQl2YWx1ZSA9IGludGVsX2VuZ2luZV9pbml0aWFsaXpl ZCgmZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BBUkFNX0hB U19CTFQ6Ci0JCXZhbHVlID0gaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKCZkZXZfcHJpdi0+ZW5n aW5lW0JDU10pOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fSEFTX1ZFQk9YOgotCQl2YWx1 ZSA9IGludGVsX2VuZ2luZV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmVuZ2luZVtWRUNTXSk7Ci0J CWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfQlNEMjoKLQkJdmFsdWUgPSBpbnRlbF9lbmdp bmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkNTMl0pOwotCQlicmVhazsKLQljYXNl IEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfRkVOQ0lORzoKLQkJdmFsdWUgPSAxOwotCQlicmVhazsK LQljYXNlIEk5MTVfUEFSQU1fSEFTX0NPSEVSRU5UX1JJTkdTOgotCQl2YWx1ZSA9IDE7Ci0JCWJy ZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19DT05TVEFOVFM6Ci0JCXZhbHVlID0gSU5U RUxfSU5GTyhkZXYpLT5nZW4gPj0gNDsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BBUkFNX0hBU19S RUxBWEVEX0RFTFRBOgotCQl2YWx1ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9I QVNfR0VON19TT0xfUkVTRVQ6Ci0JCXZhbHVlID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BB UkFNX0hBU19MTEM6Ci0JCXZhbHVlID0gSEFTX0xMQyhkZXYpOwotCQlicmVhazsKLQljYXNlIEk5 MTVfUEFSQU1fSEFTX1dUOgotCQl2YWx1ZSA9IEhBU19XVChkZXYpOwotCQlicmVhazsKLQljYXNl IEk5MTVfUEFSQU1fSEFTX0FMSUFTSU5HX1BQR1RUOgotCQl2YWx1ZSA9IFVTRVNfUFBHVFQoZGV2 KTsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BBUkFNX0hBU19XQUlUX1RJTUVPVVQ6Ci0JCXZhbHVl ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BBUkFNX0hBU19TRU1BUEhPUkVTOgotCQl2YWx1 ZSA9IGk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQoZGV2X3ByaXYpOwotCQlicmVhazsKLQljYXNl IEk5MTVfUEFSQU1fSEFTX1BSSU1FX1ZNQVBfRkxVU0g6Ci0JCXZhbHVlID0gMTsKLQkJYnJlYWs7 Ci0JY2FzZSBJOTE1X1BBUkFNX0hBU19TRUNVUkVfQkFUQ0hFUzoKLQkJdmFsdWUgPSBjYXBhYmxl KENBUF9TWVNfQURNSU4pOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fSEFTX1BJTk5FRF9C QVRDSEVTOgotCQl2YWx1ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhF Q19OT19SRUxPQzoKLQkJdmFsdWUgPSAxOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fSEFT X0VYRUNfSEFORExFX0xVVDoKLQkJdmFsdWUgPSAxOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFS QU1fQ01EX1BBUlNFUl9WRVJTSU9OOgotCQl2YWx1ZSA9IGk5MTVfY21kX3BhcnNlcl9nZXRfdmVy c2lvbihkZXZfcHJpdik7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfQ09IRVJFTlRf UEhZU19HVFQ6Ci0JCXZhbHVlID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X1BBUkFNX01NQVBf VkVSU0lPTjoKLQkJdmFsdWUgPSAxOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1fU1VCU0xJ Q0VfVE9UQUw6Ci0JCXZhbHVlID0gSU5URUxfSU5GTyhkZXYpLT5zdWJzbGljZV90b3RhbDsKLQkJ aWYgKCF2YWx1ZSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFS QU1fRVVfVE9UQUw6Ci0JCXZhbHVlID0gSU5URUxfSU5GTyhkZXYpLT5ldV90b3RhbDsKLQkJaWYg KCF2YWx1ZSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlicmVhazsKLQljYXNlIEk5MTVfUEFSQU1f SEFTX0dQVV9SRVNFVDoKLQkJdmFsdWUgPSBpOTE1LmVuYWJsZV9oYW5nY2hlY2sgJiYgaW50ZWxf aGFzX2dwdV9yZXNldChkZXZfcHJpdik7Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNf UkVTT1VSQ0VfU1RSRUFNRVI6Ci0JCXZhbHVlID0gSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldik7 Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19TT0ZUUElOOgotCQl2YWx1ZSA9 IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9ERUJVRygiVW5rbm93biBwYXJhbWV0ZXIg JWRcbiIsIHBhcmFtLT5wYXJhbSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjb3B5 X3RvX3VzZXIocGFyYW0tPnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpKSkgewotCQlEUk1fRVJS T1IoImNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dldF9icmlkZ2VfZGV2KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKLQotCWRldl9wcml2LT5icmlkZ2VfZGV2ID0gcGNpX2dldF9idXNfYW5k X3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKTsKLQlpZiAoIWRldl9wcml2LT5icmlkZ2VfZGV2KSB7 Ci0JCURSTV9FUlJPUigiYnJpZGdlIGRldmljZSBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLTE7 Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIE1DSCByZWdz IGlmIG5lZWRlZCwgcmV0dXJuIG5vbnplcm8gb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQKLWludGVs X2FsbG9jX21jaGJhcl9yZXNvdXJjZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJl ZyA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgPyBNQ0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1 OwotCXUzMiB0ZW1wX2xvLCB0ZW1wX2hpID0gMDsKLQl1NjQgbWNoYmFyX2FkZHI7Ci0JaW50IHJl dDsKLQotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQotCQlwY2lfcmVhZF9jb25maWdf ZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsICZ0ZW1wX2hpKTsKLQlwY2lfcmVh ZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOwotCW1j aGJhcl9hZGRyID0gKCh1NjQpdGVtcF9oaSA8PCAzMikgfCB0ZW1wX2xvOwotCi0JLyogSWYgQUNQ SSBkb2Vzbid0IGhhdmUgaXQsIGFzc3VtZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGl0IG91cnNlbHZl cyAqLwotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAobWNoYmFyX2FkZHIgJiYKLQkgICAgcG5wX3Jh bmdlX3Jlc2VydmVkKG1jaGJhcl9hZGRyLCBtY2hiYXJfYWRkciArIE1DSEJBUl9TSVpFKSkKLQkJ cmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qIEdldCBzb21lIHNwYWNlIGZvciBpdCAqLwotCWRldl9w cml2LT5tY2hfcmVzLm5hbWUgPSAiaTkxNSBNQ0hCQVIiOwotCWRldl9wcml2LT5tY2hfcmVzLmZs YWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShkZXZf cHJpdi0+YnJpZGdlX2Rldi0+YnVzLAotCQkJCSAgICAgJmRldl9wcml2LT5tY2hfcmVzLAotCQkJ CSAgICAgTUNIQkFSX1NJWkUsIE1DSEJBUl9TSVpFLAotCQkJCSAgICAgUENJQklPU19NSU5fTUVN LAotCQkJCSAgICAgMCwgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSwKLQkJCQkgICAgIGRldl9wcml2 LT5icmlkZ2VfZGV2KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCBi dXMgYWxsb2M6ICVkXG4iLCByZXQpOwotCQlkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCA9IDA7Ci0J CXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQpCi0JCXBj aV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQsCi0JCQkJ ICAgICAgIHVwcGVyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKLQotCXBjaV93 cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywKLQkJCSAgICAgICBs b3dlcl8zMl9iaXRzKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7Ci0JcmV0dXJuIDA7Ci19Ci0K LS8qIFNldHVwIE1DSEJBUiBpZiBwb3NzaWJsZSwgcmV0dXJuIHRydWUgaWYgd2Ugc2hvdWxkIGRp c2FibGUgaXQgYWdhaW4gKi8KLXN0YXRpYyB2b2lkCi1pbnRlbF9zZXR1cF9tY2hiYXIoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwotCWludCBtY2hiYXJfcmVnID0gSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gNCA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Ci0JdTMyIHRlbXA7Ci0JYm9vbCBl bmFibGVkOwotCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19DSEVSUllWSUVXKGRldikp Ci0JCXJldHVybjsKLQotCWRldl9wcml2LT5tY2hiYXJfbmVlZF9kaXNhYmxlID0gZmFsc2U7Ci0K LQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewotCQlwY2lfcmVhZF9jb25m aWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLCAmdGVtcCk7Ci0JCWVuYWJsZWQg PSAhISh0ZW1wICYgREVWRU5fTUNIQkFSX0VOKTsKLQl9IGVsc2UgewotCQlwY2lfcmVhZF9jb25m aWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKLQkJZW5h YmxlZCA9IHRlbXAgJiAxOwotCX0KLQotCS8qIElmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBkb24n dCBoYXZlIHRvIGRvIGFueXRoaW5nICovCi0JaWYgKGVuYWJsZWQpCi0JCXJldHVybjsKLQotCWlm IChpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2UoZGV2KSkKLQkJcmV0dXJuOwotCi0JZGV2X3By aXYtPm1jaGJhcl9uZWVkX2Rpc2FibGUgPSB0cnVlOwotCi0JLyogU3BhY2UgaXMgYWxsb2NhdGVk IG9yIHJlc2VydmVkLCBzbyBlbmFibGUgaXQuICovCi0JaWYgKElTX0k5MTVHKGRldikgfHwgSVNf STkxNUdNKGRldikpIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdl X2RldiwgREVWRU4sCi0JCQkJICAgICAgIHRlbXAgfCBERVZFTl9NQ0hCQVJfRU4pOwotCX0gZWxz ZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFy X3JlZywgJnRlbXApOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2Vf ZGV2LCBtY2hiYXJfcmVnLCB0ZW1wIHwgMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaW50ZWxf dGVhcmRvd25fbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgbWNoYmFyX3Jl ZyA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgPyBNQ0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1 OwotCi0JaWYgKGRldl9wcml2LT5tY2hiYXJfbmVlZF9kaXNhYmxlKSB7Ci0JCWlmIChJU19JOTE1 RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCQl1MzIgZGV2ZW5fdmFsOwotCi0JCQlwY2lf cmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLAotCQkJCQkgICAg ICAmZGV2ZW5fdmFsKTsKLQkJCWRldmVuX3ZhbCAmPSB+REVWRU5fTUNIQkFSX0VOOwotCQkJcGNp X3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU4sCi0JCQkJCSAg ICAgICBkZXZlbl92YWwpOwotCQl9IGVsc2UgewotCQkJdTMyIG1jaGJhcl92YWw7Ci0KLQkJCXBj aV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywKLQkJ CQkJICAgICAgJm1jaGJhcl92YWwpOwotCQkJbWNoYmFyX3ZhbCAmPSB+MTsKLQkJCXBjaV93cml0 ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsCi0JCQkJCSAg ICAgICBtY2hiYXJfdmFsKTsKLQkJfQotCX0KLQotCWlmIChkZXZfcHJpdi0+bWNoX3Jlcy5zdGFy dCkKLQkJcmVsZWFzZV9yZXNvdXJjZSgmZGV2X3ByaXYtPm1jaF9yZXMpOwotfQotCi0vKiB0cnVl ID0gZW5hYmxlIGRlY29kZSwgZmFsc2UgPSBkaXNhYmxlIGRlY29kZXIgKi8KLXN0YXRpYyB1bnNp Z25lZCBpbnQgaTkxNV92Z2Ffc2V0X2RlY29kZSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpCi17 Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvb2tpZTsKLQotCWludGVsX21vZGVzZXRfdmdh X3NldF9zdGF0ZShkZXYsIHN0YXRlKTsKLQlpZiAoc3RhdGUpCi0JCXJldHVybiBWR0FfUlNSQ19M RUdBQ1lfSU8gfCBWR0FfUlNSQ19MRUdBQ1lfTUVNIHwKLQkJICAgICAgIFZHQV9SU1JDX05PUk1B TF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07Ci0JZWxzZQotCQlyZXR1cm4gVkdBX1JTUkNfTk9S TUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9zd2l0 Y2hlcm9vX3NldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB2Z2Ffc3dpdGNoZXJv b19zdGF0ZSBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZk YXRhKHBkZXYpOwotCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BF TkQgfTsKLQotCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgewotCQlwcl9pbmZvKCJz d2l0Y2hlZCBvblxuIik7Ci0JCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9Q T1dFUl9DSEFOR0lORzsKLQkJLyogaTkxNSByZXN1bWUgaGFuZGxlciBkb2Vzbid0IHNldCB0byBE MCAqLwotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKLQkJaTkxNV9y ZXN1bWVfc3dpdGNoZXJvbyhkZXYpOwotCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9T V0lUQ0hfUE9XRVJfT047Ci0JfSBlbHNlIHsKLQkJcHJfaW5mbygic3dpdGNoZWQgb2ZmXG4iKTsK LQkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX0NIQU5HSU5HOwot CQlpOTE1X3N1c3BlbmRfc3dpdGNoZXJvbyhkZXYsIHBtbSk7Ci0JCWRldi0+c3dpdGNoX3Bvd2Vy X3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9PRkY7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCBpOTE1 X3N3aXRjaGVyb29fY2FuX3N3aXRjaChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyoKLQkgKiBGSVhN RTogb3Blbl9jb3VudCBpcyBwcm90ZWN0ZWQgYnkgZHJtX2dsb2JhbF9tdXRleCBidXQgdGhhdCB3 b3VsZCBsZWFkIHRvCi0JICogbG9ja2luZyBpbnZlcnNpb24gd2l0aCB0aGUgZHJpdmVyIGxvYWQg cGF0aC4gQW5kIHRoZSBhY2Nlc3MgaGVyZSBpcwotCSAqIGNvbXBsZXRlbHkgcmFjeSBhbnl3YXku IFNvIGRvbid0IGJvdGhlciB3aXRoIGxvY2tpbmcgZm9yIG5vdy4KLQkgKi8KLQlyZXR1cm4gZGV2 LT5vcGVuX2NvdW50ID09IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3N3aXRjaGVy b29fY2xpZW50X29wcyBpOTE1X3N3aXRjaGVyb29fb3BzID0gewotCS5zZXRfZ3B1X3N0YXRlID0g aTkxNV9zd2l0Y2hlcm9vX3NldF9zdGF0ZSwKLQkucmVwcm9iZSA9IE5VTEwsCi0JLmNhbl9zd2l0 Y2ggPSBpOTE1X3N3aXRjaGVyb29fY2FuX3N3aXRjaCwKLX07Ci0KLXN0YXRpYyB2b2lkIGk5MTVf Z2VtX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0KLQkvKgotCSAqIE5laXRoZXIgdGhlIEJJ T1MsIG91cnNlbHZlcyBvciBhbnkgb3RoZXIga2VybmVsCi0JICogZXhwZWN0cyB0aGUgc3lzdGVt IHRvIGJlIGluIGV4ZWNsaXN0cyBtb2RlIG9uIHN0YXJ0dXAsCi0JICogc28gd2UgbmVlZCB0byBy ZXNldCB0aGUgR1BVIGJhY2sgdG8gbGVnYWN5IG1vZGUuIEFuZCB0aGUgb25seQotCSAqIGtub3du IHdheSB0byBkaXNhYmxlIGxvZ2ljYWwgY29udGV4dHMgaXMgdGhyb3VnaCBhIEdQVSByZXNldC4K LQkgKgotCSAqIFNvIGluIG9yZGVyIHRvIGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBrbm93biBkZWZh dWx0IGNvbmZpZ3VyYXRpb24sCi0JICogYWx3YXlzIHJlc2V0IHRoZSBHUFUgdXBvbiB1bmxvYWQu IEFmdGVyd2FyZHMgd2UgdGhlbiBjbGVhbiB1cCB0aGUKLQkgKiBHRU0gc3RhdGUgdHJhY2tpbmcs IGZsdXNoaW5nIG9mZiB0aGUgcmVxdWVzdHMgYW5kIGxlYXZpbmcgdGhlCi0JICogc3lzdGVtIGlu IGEga25vd24gaWRsZSBzdGF0ZS4KLQkgKgotCSAqIE5vdGUgdGhhdCBpcyBvZiB0aGUgdXBtb3N0 IGltcG9ydGFuY2UgdGhhdCB0aGUgR1BVIGlzIGlkbGUgYW5kCi0JICogYWxsIHN0cmF5IHdyaXRl cyBhcmUgZmx1c2hlZCAqYmVmb3JlKiB3ZSBkaXNtYW50bGUgdGhlIGJhY2tpbmcKLQkgKiBzdG9y YWdlIGZvciB0aGUgcGlubmVkIG9iamVjdHMuCi0JICoKLQkgKiBIb3dldmVyLCBzaW5jZSB3ZSBh cmUgdW5jZXJ0YWluIHRoYXQgcmVzZXRpbmcgdGhlIEdQVSBvbiBvbGRlcgotCSAqIG1hY2hpbmVz IGlzIGEgZ29vZCBpZGVhLCB3ZSBkb24ndCAtIGp1c3QgaW4gY2FzZSBpdCBsZWF2ZXMgdGhlCi0J ICogbWFjaGluZSBpbiBhbiB1bnVzYWJsZSBjb25kaXRpb24uCi0JICovCi0JaWYgKEhBU19IV19D T05URVhUUyhkZXYpKSB7Ci0JCWludCByZXNldCA9IGludGVsX2dwdV9yZXNldChkZXZfcHJpdiwg QUxMX0VOR0lORVMpOwotCQlXQVJOX09OKHJlc2V0ICYmIHJlc2V0ICE9IC1FTk9ERVYpOwotCX0K LQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpOTE1X2dlbV9yZXNldChkZXYp OwotCWk5MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhkZXYpOwotCWk5MTVfZ2VtX2NvbnRleHRfZmlu aShkZXYpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JV0FSTl9PTigh bGlzdF9lbXB0eSgmdG9faTkxNShkZXYpLT5jb250ZXh0X2xpc3QpKTsKLX0KLQotc3RhdGljIGlu dCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQg cmV0OwotCi0JaWYgKGk5MTVfaW5qZWN0X2xvYWRfZmFpbHVyZSgpKQotCQlyZXR1cm4gLUVOT0RF VjsKLQotCXJldCA9IGludGVsX2Jpb3NfaW5pdChkZXZfcHJpdik7Ci0JaWYgKHJldCkKLQkJRFJN X0lORk8oImZhaWxlZCB0byBmaW5kIFZCSU9TIHRhYmxlc1xuIik7Ci0KLQkvKiBJZiB3ZSBoYXZl ID4gMSBWR0EgY2FyZHMsIHRoZW4gd2UgbmVlZCB0byBhcmJpdHJhdGUgYWNjZXNzCi0JICogdG8g dGhlIGNvbW1vbiBWR0EgcmVzb3VyY2VzLgotCSAqCi0JICogSWYgd2UgYXJlIGEgc2Vjb25kYXJ5 IGRpc3BsYXkgY29udHJvbGxlciAoIVBDSV9ESVNQTEFZX0NMQVNTX1ZHQSksCi0JICogdGhlbiB3 ZSBkbyBub3QgdGFrZSBwYXJ0IGluIFZHQSBhcmJpdHJhdGlvbiBhbmQgdGhlCi0JICogdmdhX2Ns aWVudF9yZWdpc3RlcigpIGZhaWxzIHdpdGggLUVOT0RFVi4KLQkgKi8KLQlyZXQgPSB2Z2FfY2xp ZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBpOTE1X3ZnYV9zZXRfZGVjb2RlKTsK LQlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQotCQlnb3RvIG91dDsKLQotCWludGVsX3JlZ2lz dGVyX2RzbV9oYW5kbGVyKCk7Ci0KLQlyZXQgPSB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGll bnQoZGV2LT5wZGV2LCAmaTkxNV9zd2l0Y2hlcm9vX29wcywgZmFsc2UpOwotCWlmIChyZXQpCi0J CWdvdG8gY2xlYW51cF92Z2FfY2xpZW50OwotCi0JLyogbXVzdCBoYXBwZW4gYmVmb3JlIGludGVs X3Bvd2VyX2RvbWFpbnNfaW5pdF9odygpIG9uIFZMVi9DSFYgKi8KLQlpbnRlbF91cGRhdGVfcmF3 Y2xrKGRldl9wcml2KTsKLQotCWludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odyhkZXZfcHJpdiwg ZmFsc2UpOwotCi0JaW50ZWxfY3NyX3Vjb2RlX2luaXQoZGV2X3ByaXYpOwotCi0JcmV0ID0gaW50 ZWxfaXJxX2luc3RhbGwoZGV2X3ByaXYpOwotCWlmIChyZXQpCi0JCWdvdG8gY2xlYW51cF9jc3I7 Ci0KLQlpbnRlbF9zZXR1cF9nbWJ1cyhkZXYpOwotCi0JLyogSW1wb3J0YW50OiBUaGUgb3V0cHV0 IHNldHVwIGZ1bmN0aW9ucyBjYWxsZWQgYnkgbW9kZXNldF9pbml0IG5lZWQKLQkgKiB3b3JraW5n IGlycXMgZm9yIGUuZy4gZ21idXMgYW5kIGRwIGF1eCB0cmFuc2ZlcnMuICovCi0JaW50ZWxfbW9k ZXNldF9pbml0KGRldik7Ci0KLQlpbnRlbF9ndWNfaW5pdChkZXYpOwotCi0JcmV0ID0gaTkxNV9n ZW1faW5pdChkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gY2xlYW51cF9pcnE7Ci0KLQlpbnRlbF9t b2Rlc2V0X2dlbV9pbml0KGRldik7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5udW1fcGlwZXMg PT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBpbnRlbF9mYmRldl9pbml0KGRldik7Ci0JaWYg KHJldCkKLQkJZ290byBjbGVhbnVwX2dlbTsKLQotCS8qIE9ubHkgZW5hYmxlIGhvdHBsdWcgaGFu ZGxpbmcgb25jZSB0aGUgZmJkZXYgaXMgZnVsbHkgc2V0IHVwLiAqLwotCWludGVsX2hwZF9pbml0 KGRldl9wcml2KTsKLQotCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwotCi0JcmV0dXJu IDA7Ci0KLWNsZWFudXBfZ2VtOgotCWk5MTVfZ2VtX2ZpbmkoZGV2KTsKLWNsZWFudXBfaXJxOgot CWludGVsX2d1Y19maW5pKGRldik7Ci0JZHJtX2lycV91bmluc3RhbGwoZGV2KTsKLQlpbnRlbF90 ZWFyZG93bl9nbWJ1cyhkZXYpOwotY2xlYW51cF9jc3I6Ci0JaW50ZWxfY3NyX3Vjb2RlX2Zpbmko ZGV2X3ByaXYpOwotCWludGVsX3Bvd2VyX2RvbWFpbnNfZmluaShkZXZfcHJpdik7Ci0JdmdhX3N3 aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2KTsKLWNsZWFudXBfdmdhX2NsaWVu dDoKLQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci1v dXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZCKQotc3RhdGlj IGludCBpOTE1X2tpY2tfb3V0X2Zpcm13YXJlX2ZiKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKLXsKLQlzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYXA7Ci0Jc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZGV2LT5wZGV2OwotCXN0cnVjdCBpOTE1X2dndHQgKmdndHQg PSAmZGV2X3ByaXYtPmdndHQ7Ci0JYm9vbCBwcmltYXJ5OwotCWludCByZXQ7Ci0KLQlhcCA9IGFs bG9jX2FwZXJ0dXJlcygxKTsKLQlpZiAoIWFwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWFwLT5y YW5nZXNbMF0uYmFzZSA9IGdndHQtPm1hcHBhYmxlX2Jhc2U7Ci0JYXAtPnJhbmdlc1swXS5zaXpl ID0gZ2d0dC0+bWFwcGFibGVfZW5kOwotCi0JcHJpbWFyeSA9Ci0JCXBkZXYtPnJlc291cmNlW1BD SV9ST01fUkVTT1VSQ0VdLmZsYWdzICYgSU9SRVNPVVJDRV9ST01fU0hBRE9XOwotCi0JcmV0ID0g cmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhhcCwgImludGVsZHJtZmIiLCBwcmltYXJ5 KTsKLQotCWtmcmVlKGFwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotc3RhdGljIGludCBp OTE1X2tpY2tfb3V0X2Zpcm13YXJlX2ZiKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX1ZHQV9D T05TT0xFKQotc3RhdGljIGludCBpOTE1X2tpY2tfb3V0X3ZnYWNvbihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZWxpZiAhZGVmaW5lZChDT05G SUdfRFVNTVlfQ09OU09MRSkKLXN0YXRpYyBpbnQgaTkxNV9raWNrX291dF92Z2Fjb24oc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXJldHVybiAtRU5PREVWOwotfQotI2Vs c2UKLXN0YXRpYyBpbnQgaTkxNV9raWNrX291dF92Z2Fjb24oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQotewotCWludCByZXQgPSAwOwotCi0JRFJNX0lORk8oIlJlcGxhY2luZyBW R0EgY29uc29sZSBkcml2ZXJcbiIpOwotCi0JY29uc29sZV9sb2NrKCk7Ci0JaWYgKGNvbl9pc19i b3VuZCgmdmdhX2NvbikpCi0JCXJldCA9IGRvX3Rha2Vfb3Zlcl9jb25zb2xlKCZkdW1teV9jb24s IDAsIE1BWF9OUl9DT05TT0xFUyAtIDEsIDEpOwotCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBk b191bnJlZ2lzdGVyX2Nvbl9kcml2ZXIoJnZnYV9jb24pOwotCi0JCS8qIElnbm9yZSAiYWxyZWFk eSB1bnJlZ2lzdGVyZWQiLiAqLwotCQlpZiAocmV0ID09IC1FTk9ERVYpCi0JCQlyZXQgPSAwOwot CX0KLQljb25zb2xlX3VubG9jaygpOwotCi0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi1zdGF0 aWMgdm9pZCBpOTE1X2R1bXBfZGV2aWNlX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCWNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZkZXZf cHJpdi0+aW5mbzsKLQotI2RlZmluZSBQUklOVF9TKG5hbWUpICIlcyIKLSNkZWZpbmUgU0VQX0VN UFRZCi0jZGVmaW5lIFBSSU5UX0ZMQUcobmFtZSkgaW5mby0+bmFtZSA/ICNuYW1lICIsIiA6ICIi Ci0jZGVmaW5lIFNFUF9DT01NQSAsCi0JRFJNX0RFQlVHX0RSSVZFUigiaTkxNSBkZXZpY2UgaW5m bzogZ2VuPSVpLCBwY2lpZD0weCUwNHggcmV2PTB4JTAyeCBmbGFncz0iCi0JCQkgREVWX0lORk9f Rk9SX0VBQ0hfRkxBRyhQUklOVF9TLCBTRVBfRU1QVFkpLAotCQkJIGluZm8tPmdlbiwKLQkJCSBk ZXZfcHJpdi0+ZGV2LT5wZGV2LT5kZXZpY2UsCi0JCQkgZGV2X3ByaXYtPmRldi0+cGRldi0+cmV2 aXNpb24sCi0JCQkgREVWX0lORk9fRk9SX0VBQ0hfRkxBRyhQUklOVF9GTEFHLCBTRVBfQ09NTUEp KTsKLSN1bmRlZiBQUklOVF9TCi0jdW5kZWYgU0VQX0VNUFRZCi0jdW5kZWYgUFJJTlRfRkxBRwot I3VuZGVmIFNFUF9DT01NQQotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X3NzZXVfaW5mb19p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8g KmluZm87Ci0JdTMyIGZ1c2UsIGV1X2RpczsKLQotCWluZm8gPSAoc3RydWN0IGludGVsX2Rldmlj ZV9pbmZvICopJmRldl9wcml2LT5pbmZvOwotCWZ1c2UgPSBJOTE1X1JFQUQoQ0hWX0ZVU0VfR1Qp OwotCi0JaW5mby0+c2xpY2VfdG90YWwgPSAxOwotCi0JaWYgKCEoZnVzZSAmIENIVl9GR1RfRElT QUJMRV9TUzApKSB7Ci0JCWluZm8tPnN1YnNsaWNlX3Blcl9zbGljZSsrOwotCQlldV9kaXMgPSBm dXNlICYgKENIVl9GR1RfRVVfRElTX1NTMF9SMF9NQVNLIHwKLQkJCQkgQ0hWX0ZHVF9FVV9ESVNf U1MwX1IxX01BU0spOwotCQlpbmZvLT5ldV90b3RhbCArPSA4IC0gaHdlaWdodDMyKGV1X2Rpcyk7 Ci0JfQotCi0JaWYgKCEoZnVzZSAmIENIVl9GR1RfRElTQUJMRV9TUzEpKSB7Ci0JCWluZm8tPnN1 YnNsaWNlX3Blcl9zbGljZSsrOwotCQlldV9kaXMgPSBmdXNlICYgKENIVl9GR1RfRVVfRElTX1NT MV9SMF9NQVNLIHwKLQkJCQkgQ0hWX0ZHVF9FVV9ESVNfU1MxX1IxX01BU0spOwotCQlpbmZvLT5l dV90b3RhbCArPSA4IC0gaHdlaWdodDMyKGV1X2Rpcyk7Ci0JfQotCi0JaW5mby0+c3Vic2xpY2Vf dG90YWwgPSBpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2U7Ci0JLyoKLQkgKiBDSFYgZXhwZWN0ZWQg dG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBFVQotCSAqIGFjcm9zcyBz dWJzbGljZXMuCi0JKi8KLQlpbmZvLT5ldV9wZXJfc3Vic2xpY2UgPSBpbmZvLT5zdWJzbGljZV90 b3RhbCA/Ci0JCQkJaW5mby0+ZXVfdG90YWwgLyBpbmZvLT5zdWJzbGljZV90b3RhbCA6Ci0JCQkJ MDsKLQkvKgotCSAqIENIViBzdXBwb3J0cyBzdWJzbGljZSBwb3dlciBnYXRpbmcgb24gZGV2aWNl cyB3aXRoIG1vcmUgdGhhbgotCSAqIG9uZSBzdWJzbGljZSwgYW5kIHN1cHBvcnRzIEVVIHBvd2Vy IGdhdGluZyBvbiBkZXZpY2VzIHdpdGgKLQkgKiBtb3JlIHRoYW4gb25lIEVVIHBhaXIgcGVyIHN1 YnNsaWNlLgotCSovCi0JaW5mby0+aGFzX3NsaWNlX3BnID0gMDsKLQlpbmZvLT5oYXNfc3Vic2xp Y2VfcGcgPSAoaW5mby0+c3Vic2xpY2VfdG90YWwgPiAxKTsKLQlpbmZvLT5oYXNfZXVfcGcgPSAo aW5mby0+ZXVfcGVyX3N1YnNsaWNlID4gMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjlfc3NldV9p bmZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbnRlbF9kZXZpY2Vf aW5mbyAqaW5mbzsKLQlpbnQgc19tYXggPSAzLCBzc19tYXggPSA0LCBldV9tYXggPSA4OwotCWlu dCBzLCBzczsKLQl1MzIgZnVzZTIsIHNfZW5hYmxlLCBzc19kaXNhYmxlLCBldV9kaXNhYmxlOwot CXU4IGV1X21hc2sgPSAweGZmOwotCi0JaW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8g KikmZGV2X3ByaXYtPmluZm87Ci0JZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7Ci0Jc19l bmFibGUgPSAoZnVzZTIgJiBHRU44X0YyX1NfRU5BX01BU0spID4+Ci0JCSAgIEdFTjhfRjJfU19F TkFfU0hJRlQ7Ci0Jc3NfZGlzYWJsZSA9IChmdXNlMiAmIEdFTjlfRjJfU1NfRElTX01BU0spID4+ Ci0JCSAgICAgR0VOOV9GMl9TU19ESVNfU0hJRlQ7Ci0KLQlpbmZvLT5zbGljZV90b3RhbCA9IGh3 ZWlnaHQzMihzX2VuYWJsZSk7Ci0JLyoKLQkgKiBUaGUgc3Vic2xpY2UgZGlzYWJsZSBmaWVsZCBp cyBnbG9iYWwsIGkuZS4gaXQgYXBwbGllcwotCSAqIHRvIGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xp Y2VzLgotCSovCi0JaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlID0gc3NfbWF4IC0gaHdlaWdodDMy KHNzX2Rpc2FibGUpOwotCWluZm8tPnN1YnNsaWNlX3RvdGFsID0gaW5mby0+c2xpY2VfdG90YWwg KgotCQkJICAgICAgIGluZm8tPnN1YnNsaWNlX3Blcl9zbGljZTsKLQotCS8qCi0JICogSXRlcmF0 ZSB0aHJvdWdoIGVuYWJsZWQgc2xpY2VzIGFuZCBzdWJzbGljZXMgdG8KLQkgKiBjb3VudCB0aGUg dG90YWwgZW5hYmxlZCBFVS4KLQkqLwotCWZvciAocyA9IDA7IHMgPCBzX21heDsgcysrKSB7Ci0J CWlmICghKHNfZW5hYmxlICYgKDB4MSA8PCBzKSkpCi0JCQkvKiBza2lwIGRpc2FibGVkIHNsaWNl ICovCi0JCQljb250aW51ZTsKLQotCQlldV9kaXNhYmxlID0gSTkxNV9SRUFEKEdFTjlfRVVfRElT QUJMRShzKSk7Ci0JCWZvciAoc3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykgewotCQkJaW50IGV1 X3Blcl9zczsKLQotCQkJaWYgKHNzX2Rpc2FibGUgJiAoMHgxIDw8IHNzKSkKLQkJCQkvKiBza2lw IGRpc2FibGVkIHN1YnNsaWNlICovCi0JCQkJY29udGludWU7Ci0KLQkJCWV1X3Blcl9zcyA9IGV1 X21heCAtIGh3ZWlnaHQ4KChldV9kaXNhYmxlID4+IChzcyo4KSkgJgotCQkJCQkJICAgICAgZXVf bWFzayk7Ci0KLQkJCS8qCi0JCQkgKiBSZWNvcmQgd2hpY2ggc3Vic2xpY2UocykgaGFzKGhhdmUp IDcgRVVzLiB3ZQotCQkJICogY2FuIHR1bmUgdGhlIGhhc2ggdXNlZCB0byBzcHJlYWQgd29yayBh bW9uZwotCQkJICogc3Vic2xpY2VzIGlmIHRoZXkgYXJlIHVuYmFsYW5jZWQuCi0JCQkgKi8KLQkJ CWlmIChldV9wZXJfc3MgPT0gNykKLQkJCQlpbmZvLT5zdWJzbGljZV83ZXVbc10gfD0gMSA8PCBz czsKLQotCQkJaW5mby0+ZXVfdG90YWwgKz0gZXVfcGVyX3NzOwotCQl9Ci0JfQotCi0JLyoKLQkg KiBTS0wgaXMgZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbgot CSAqIG9mIEVVIGFjcm9zcyBzdWJzbGljZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IG9u ZQotCSAqIEVVIGluIGFueSBvbmUgc3Vic2xpY2UgbWF5IGJlIGZ1c2VkIG9mZiBmb3IgZGllCi0J ICogcmVjb3ZlcnkuIEJYVCBpcyBleHBlY3RlZCB0byBiZSBwZXJmZWN0bHkgdW5pZm9ybSBpbiBF VQotCSAqIGRpc3RyaWJ1dGlvbi4KLQkqLwotCWluZm8tPmV1X3Blcl9zdWJzbGljZSA9IGluZm8t PnN1YnNsaWNlX3RvdGFsID8KLQkJCQlESVZfUk9VTkRfVVAoaW5mby0+ZXVfdG90YWwsCi0JCQkJ CSAgICAgaW5mby0+c3Vic2xpY2VfdG90YWwpIDogMDsKLQkvKgotCSAqIFNLTCBzdXBwb3J0cyBz bGljZSBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbgotCSAqIG9uZSBzbGlj ZSwgYW5kIHN1cHBvcnRzIEVVIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdpdGgKLQkgKiBtb3Jl IHRoYW4gb25lIEVVIHBhaXIgcGVyIHN1YnNsaWNlLiBCWFQgc3VwcG9ydHMgc3Vic2xpY2UKLQkg KiBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiBvbmUgc3Vic2xpY2UsIGFu ZAotCSAqIHN1cHBvcnRzIEVVIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdpdGggbW9yZSB0aGFu IG9uZSBFVQotCSAqIHBhaXIgcGVyIHN1YnNsaWNlLgotCSovCi0JaW5mby0+aGFzX3NsaWNlX3Bn ID0gKChJU19TS1lMQUtFKGRldikgfHwgSVNfS0FCWUxBS0UoZGV2KSkgJiYKLQkJCSAgICAgICAo aW5mby0+c2xpY2VfdG90YWwgPiAxKSk7Ci0JaW5mby0+aGFzX3N1YnNsaWNlX3BnID0gKElTX0JS T1hUT04oZGV2KSAmJiAoaW5mby0+c3Vic2xpY2VfdG90YWwgPiAxKSk7Ci0JaW5mby0+aGFzX2V1 X3BnID0gKGluZm8tPmV1X3Blcl9zdWJzbGljZSA+IDIpOwotfQotCi1zdGF0aWMgdm9pZCBicm9h ZHdlbGxfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyAqaW5mbzsKLQljb25zdCBpbnQgc19tYXggPSAzLCBzc19tYXggPSAz LCBldV9tYXggPSA4OwotCWludCBzLCBzczsKLQl1MzIgZnVzZTIsIGV1X2Rpc2FibGVbc19tYXhd LCBzX2VuYWJsZSwgc3NfZGlzYWJsZTsKLQotCWZ1c2UyID0gSTkxNV9SRUFEKEdFTjhfRlVTRTIp OwotCXNfZW5hYmxlID0gKGZ1c2UyICYgR0VOOF9GMl9TX0VOQV9NQVNLKSA+PiBHRU44X0YyX1Nf RU5BX1NISUZUOwotCXNzX2Rpc2FibGUgPSAoZnVzZTIgJiBHRU44X0YyX1NTX0RJU19NQVNLKSA+ PiBHRU44X0YyX1NTX0RJU19TSElGVDsKLQotCWV1X2Rpc2FibGVbMF0gPSBJOTE1X1JFQUQoR0VO OF9FVV9ESVNBQkxFMCkgJiBHRU44X0VVX0RJUzBfUzBfTUFTSzsKLQlldV9kaXNhYmxlWzFdID0g KEk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUwKSA+PiBHRU44X0VVX0RJUzBfUzFfU0hJRlQpIHwK LQkJCSgoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpICYgR0VOOF9FVV9ESVMxX1MxX01BU0sp IDw8Ci0JCQkgKDMyIC0gR0VOOF9FVV9ESVMwX1MxX1NISUZUKSk7Ci0JZXVfZGlzYWJsZVsyXSA9 IChJOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMSkgPj4gR0VOOF9FVV9ESVMxX1MyX1NISUZUKSB8 Ci0JCQkoKEk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUyKSAmIEdFTjhfRVVfRElTMl9TMl9NQVNL KSA8PAotCQkJICgzMiAtIEdFTjhfRVVfRElTMV9TMl9TSElGVCkpOwotCi0KLQlpbmZvID0gKHN0 cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+aW5mbzsKLQlpbmZvLT5zbGljZV90 b3RhbCA9IGh3ZWlnaHQzMihzX2VuYWJsZSk7Ci0KLQkvKgotCSAqIFRoZSBzdWJzbGljZSBkaXNh YmxlIGZpZWxkIGlzIGdsb2JhbCwgaS5lLiBpdCBhcHBsaWVzCi0JICogdG8gZWFjaCBvZiB0aGUg ZW5hYmxlZCBzbGljZXMuCi0JICovCi0JaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlID0gc3NfbWF4 IC0gaHdlaWdodDMyKHNzX2Rpc2FibGUpOwotCWluZm8tPnN1YnNsaWNlX3RvdGFsID0gaW5mby0+ c2xpY2VfdG90YWwgKiBpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2U7Ci0KLQkvKgotCSAqIEl0ZXJh dGUgdGhyb3VnaCBlbmFibGVkIHNsaWNlcyBhbmQgc3Vic2xpY2VzIHRvCi0JICogY291bnQgdGhl IHRvdGFsIGVuYWJsZWQgRVUuCi0JICovCi0JZm9yIChzID0gMDsgcyA8IHNfbWF4OyBzKyspIHsK LQkJaWYgKCEoc19lbmFibGUgJiAoMHgxIDw8IHMpKSkKLQkJCS8qIHNraXAgZGlzYWJsZWQgc2xp Y2UgKi8KLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoc3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykg ewotCQkJdTMyIG5fZGlzYWJsZWQ7Ci0KLQkJCWlmIChzc19kaXNhYmxlICYgKDB4MSA8PCBzcykp Ci0JCQkJLyogc2tpcCBkaXNhYmxlZCBzdWJzbGljZSAqLwotCQkJCWNvbnRpbnVlOwotCi0JCQlu X2Rpc2FibGVkID0gaHdlaWdodDgoZXVfZGlzYWJsZVtzXSA+PiAoc3MgKiBldV9tYXgpKTsKLQot CQkJLyoKLQkJCSAqIFJlY29yZCB3aGljaCBzdWJzbGljZXMgaGF2ZSA3IEVVcy4KLQkJCSAqLwot CQkJaWYgKGV1X21heCAtIG5fZGlzYWJsZWQgPT0gNykKLQkJCQlpbmZvLT5zdWJzbGljZV83ZXVb c10gfD0gMSA8PCBzczsKLQotCQkJaW5mby0+ZXVfdG90YWwgKz0gZXVfbWF4IC0gbl9kaXNhYmxl ZDsKLQkJfQotCX0KLQotCS8qCi0JICogQkRXIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEg dW5pZm9ybSBkaXN0cmlidXRpb24gb2YgRVUgYWNyb3NzCi0JICogc3Vic2xpY2VzIHdpdGggdGhl IGV4Y2VwdGlvbiB0aGF0IGFueSBvbmUgRVUgaW4gYW55IG9uZSBzdWJzbGljZSBtYXkKLQkgKiBi ZSBmdXNlZCBvZmYgZm9yIGRpZSByZWNvdmVyeS4KLQkgKi8KLQlpbmZvLT5ldV9wZXJfc3Vic2xp Y2UgPSBpbmZvLT5zdWJzbGljZV90b3RhbCA/Ci0JCURJVl9ST1VORF9VUChpbmZvLT5ldV90b3Rh bCwgaW5mby0+c3Vic2xpY2VfdG90YWwpIDogMDsKLQotCS8qCi0JICogQkRXIHN1cHBvcnRzIHNs aWNlIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdpdGggbW9yZSB0aGFuCi0JICogb25lIHNsaWNl LgotCSAqLwotCWluZm8tPmhhc19zbGljZV9wZyA9IChpbmZvLT5zbGljZV90b3RhbCA+IDEpOwot CWluZm8tPmhhc19zdWJzbGljZV9wZyA9IDA7Ci0JaW5mby0+aGFzX2V1X3BnID0gMDsKLX0KLQot LyoKLSAqIERldGVybWluZSB2YXJpb3VzIGludGVsX2RldmljZV9pbmZvIGZpZWxkcyBhdCBydW50 aW1lLgotICoKLSAqIFVzZSBpdCB3aGVuIGVpdGhlcjoKLSAqICAgLSBpdCdzIGp1ZGdlZCB0b28g bGFib3Jpb3VzIHRvIGZpbGwgbiBzdGF0aWMgc3RydWN0dXJlcyB3aXRoIHRoZSBsaW1pdAotICog ICAgIHdoZW4gYSBzaW1wbGUgaWYgc3RhdGVtZW50IGRvZXMgdGhlIGpvYiwKLSAqICAgLSBydW4t dGltZSBjaGVja3MgKGVnIHJlYWQgZnVzZS9zdHJhcCByZWdpc3RlcnMpIGFyZSBuZWVkZWQuCi0g KgotICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQ6Ci0gKiAgIC0gYWZ0ZXIgdGhl IE1NSU8gaGFzIGJlZW4gc2V0dXAgYXMgd2UgYXJlIHJlYWRpbmcgcmVnaXN0ZXJzLAotICogICAt IGFmdGVyIHRoZSBQQ0ggaGFzIGJlZW4gZGV0ZWN0ZWQsCi0gKiAgIC0gYmVmb3JlIHRoZSBmaXJz dCB1c2FnZSBvZiB0aGUgZmllbGRzIGl0IGNhbiB0d2Vhay4KLSAqLwotc3RhdGljIHZvaWQgaW50 ZWxfZGV2aWNlX2luZm9fcnVudGltZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlz dHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm87Ci0JZW51bSBwaXBlIHBpcGU7Ci0KLQlpbmZv ID0gKHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+aW5mbzsKLQotCS8qCi0J ICogU2t5bGFrZSBhbmQgQnJveHRvbiBjdXJyZW50bHkgZG9uJ3QgZXhwb3NlIHRoZSB0b3Btb3N0 IHBsYW5lIGFzIGl0cwotCSAqIHVzZSBpcyBleGNsdXNpdmUgd2l0aCB0aGUgbGVnYWN5IGN1cnNv ciBhbmQgd2Ugb25seSB3YW50IHRvIGV4cG9zZQotCSAqIG9uZSBvZiB0aG9zZSwgbm90IGJvdGgu IFVudGlsIHdlIGNhbiBzYWZlbHkgZXhwb3NlIHRoZSB0b3Btb3N0IHBsYW5lCi0JICogYXMgYSBE Uk1fUExBTkVfVFlQRV9DVVJTT1Igd2l0aCBhbGwgdGhlIGZlYXR1cmVzIGV4cG9zZWQvc3VwcG9y dGVkLAotCSAqIHdlIGRvbid0IGV4cG9zZSB0aGUgdG9wbW9zdCBwbGFuZSBhdCBhbGwgdG8gcHJl dmVudCBBQkkgYnJlYWthZ2UKLQkgKiBkb3duIHRoZSBsaW5lLgotCSAqLwotCWlmIChJU19CUk9Y VE9OKGRldikpIHsKLQkJaW5mby0+bnVtX3Nwcml0ZXNbUElQRV9BXSA9IDI7Ci0JCWluZm8tPm51 bV9zcHJpdGVzW1BJUEVfQl0gPSAyOwotCQlpbmZvLT5udW1fc3ByaXRlc1tQSVBFX0NdID0gMTsK LQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19DSEVSUllWSUVXKGRldikpCi0J CWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpCi0JCQlpbmZvLT5udW1fc3ByaXRlc1twaXBl XSA9IDI7Ci0JZWxzZQotCQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQotCQkJaW5mby0+ bnVtX3Nwcml0ZXNbcGlwZV0gPSAxOwotCi0JaWYgKGk5MTUuZGlzYWJsZV9kaXNwbGF5KSB7Ci0J CURSTV9JTkZPKCJEaXNwbGF5IGRpc2FibGVkIChtb2R1bGUgcGFyYW1ldGVyKVxuIik7Ci0JCWlu Zm8tPm51bV9waXBlcyA9IDA7Ci0JfSBlbHNlIGlmIChpbmZvLT5udW1fcGlwZXMgPiAwICYmCi0J CSAgIChJU19HRU43KGRldl9wcml2KSB8fCBJU19HRU44KGRldl9wcml2KSkgJiYKLQkJICAgSEFT X1BDSF9TUExJVChkZXYpKSB7Ci0JCXUzMiBmdXNlX3N0cmFwID0gSTkxNV9SRUFEKEZVU0VfU1RS QVApOwotCQl1MzIgc2Z1c2Vfc3RyYXAgPSBJOTE1X1JFQUQoU0ZVU0VfU1RSQVApOwotCi0JCS8q Ci0JCSAqIFNGVVNFX1NUUkFQIGlzIHN1cHBvc2VkIHRvIGhhdmUgYSBiaXQgc2lnbmFsbGluZyB0 aGUgZGlzcGxheQotCQkgKiBpcyBmdXNlZCBvZmYuIFVuZm9ydHVuYXRlbHkgaXQgc2VlbXMgdGhh dCwgYXQgbGVhc3QgaW4KLQkJICogY2VydGFpbiBjYXNlcywgZnVzZWQgb2ZmIGRpc3BsYXkgbWVh bnMgdGhhdCBQQ0ggZGlzcGxheQotCQkgKiByZWFkcyBkb24ndCBsYW5kIGFueXdoZXJlLiBJbiB0 aGF0IGNhc2UsIHdlIHJlYWQgMHMuCi0JCSAqCi0JCSAqIE9uIENQVC9QUFQsIHdlIGNhbiBkZXRl Y3QgdGhpcyBjYXNlIGFzIFNGVVNFX1NUUkFQX0ZVU0VfTE9DSwotCQkgKiBzaG91bGQgYmUgc2V0 IHdoZW4gdGFraW5nIG92ZXIgYWZ0ZXIgdGhlIGZpcm13YXJlLgotCQkgKi8KLQkJaWYgKGZ1c2Vf c3RyYXAgJiBJTEtfSU5URVJOQUxfRElTUExBWV9ESVNBQkxFIHx8Ci0JCSAgICBzZnVzZV9zdHJh cCAmIFNGVVNFX1NUUkFQX0RJU1BMQVlfRElTQUJMRUQgfHwKLQkJICAgIChkZXZfcHJpdi0+cGNo X3R5cGUgPT0gUENIX0NQVCAmJgotCQkgICAgICEoc2Z1c2Vfc3RyYXAgJiBTRlVTRV9TVFJBUF9G VVNFX0xPQ0spKSkgewotCQkJRFJNX0lORk8oIkRpc3BsYXkgZnVzZWQgb2ZmLCBkaXNhYmxpbmdc biIpOwotCQkJaW5mby0+bnVtX3BpcGVzID0gMDsKLQkJfSBlbHNlIGlmIChmdXNlX3N0cmFwICYg SVZCX1BJUEVfQ19ESVNBQkxFKSB7Ci0JCQlEUk1fSU5GTygiUGlwZUMgZnVzZWQgb2ZmXG4iKTsK LQkJCWluZm8tPm51bV9waXBlcyAtPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChpbmZvLT5udW1fcGlw ZXMgPiAwICYmIElTX0dFTjkoZGV2X3ByaXYpKSB7Ci0JCXUzMiBkZnNtID0gSTkxNV9SRUFEKFNL TF9ERlNNKTsKLQkJdTggZGlzYWJsZWRfbWFzayA9IDA7Ci0JCWJvb2wgaW52YWxpZDsKLQkJaW50 IG51bV9iaXRzOwotCi0JCWlmIChkZnNtICYgU0tMX0RGU01fUElQRV9BX0RJU0FCTEUpCi0JCQlk aXNhYmxlZF9tYXNrIHw9IEJJVChQSVBFX0EpOwotCQlpZiAoZGZzbSAmIFNLTF9ERlNNX1BJUEVf Ql9ESVNBQkxFKQotCQkJZGlzYWJsZWRfbWFzayB8PSBCSVQoUElQRV9CKTsKLQkJaWYgKGRmc20g JiBTS0xfREZTTV9QSVBFX0NfRElTQUJMRSkKLQkJCWRpc2FibGVkX21hc2sgfD0gQklUKFBJUEVf Qyk7Ci0KLQkJbnVtX2JpdHMgPSBod2VpZ2h0OChkaXNhYmxlZF9tYXNrKTsKLQotCQlzd2l0Y2gg KGRpc2FibGVkX21hc2spIHsKLQkJY2FzZSBCSVQoUElQRV9BKToKLQkJY2FzZSBCSVQoUElQRV9C KToKLQkJY2FzZSBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpOgotCQljYXNlIEJJVChQSVBFX0Ep IHwgQklUKFBJUEVfQyk6Ci0JCQlpbnZhbGlkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0 OgotCQkJaW52YWxpZCA9IGZhbHNlOwotCQl9Ci0KLQkJaWYgKG51bV9iaXRzID4gaW5mby0+bnVt X3BpcGVzIHx8IGludmFsaWQpCi0JCQlEUk1fRVJST1IoImludmFsaWQgcGlwZSBmdXNlIGNvbmZp Z3VyYXRpb246IDB4JXhcbiIsCi0JCQkJICBkaXNhYmxlZF9tYXNrKTsKLQkJZWxzZQotCQkJaW5m by0+bnVtX3BpcGVzIC09IG51bV9iaXRzOwotCX0KLQotCS8qIEluaXRpYWxpemUgc2xpY2Uvc3Vi c2xpY2UvRVUgaW5mbyAqLwotCWlmIChJU19DSEVSUllWSUVXKGRldikpCi0JCWNoZXJyeXZpZXdf c3NldV9pbmZvX2luaXQoZGV2KTsKLQllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2KSkKLQkJYnJv YWR3ZWxsX3NzZXVfaW5mb19pbml0KGRldik7Ci0JZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gOSkKLQkJZ2VuOV9zc2V1X2luZm9faW5pdChkZXYpOwotCi0JaW5mby0+aGFzX3Nub29w ID0gIWluZm8tPmhhc19sbGM7Ci0KLQkvKiBTbm9vcGluZyBpcyBicm9rZW4gb24gQlhUIEEgc3Rl cHBpbmcuICovCi0JaWYgKElTX0JYVF9SRVZJRChkZXYsIDAsIEJYVF9SRVZJRF9BMSkpCi0JCWlu Zm8tPmhhc19zbm9vcCA9IGZhbHNlOwotCi0JRFJNX0RFQlVHX0RSSVZFUigic2xpY2UgdG90YWw6 ICV1XG4iLCBpbmZvLT5zbGljZV90b3RhbCk7Ci0JRFJNX0RFQlVHX0RSSVZFUigic3Vic2xpY2Ug dG90YWw6ICV1XG4iLCBpbmZvLT5zdWJzbGljZV90b3RhbCk7Ci0JRFJNX0RFQlVHX0RSSVZFUigi c3Vic2xpY2UgcGVyIHNsaWNlOiAldVxuIiwgaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlKTsKLQlE Uk1fREVCVUdfRFJJVkVSKCJFVSB0b3RhbDogJXVcbiIsIGluZm8tPmV1X3RvdGFsKTsKLQlEUk1f REVCVUdfRFJJVkVSKCJFVSBwZXIgc3Vic2xpY2U6ICV1XG4iLCBpbmZvLT5ldV9wZXJfc3Vic2xp Y2UpOwotCURSTV9ERUJVR19EUklWRVIoImhhcyBzbGljZSBwb3dlciBnYXRpbmc6ICVzXG4iLAot CQkJIGluZm8tPmhhc19zbGljZV9wZyA/ICJ5IiA6ICJuIik7Ci0JRFJNX0RFQlVHX0RSSVZFUigi aGFzIHN1YnNsaWNlIHBvd2VyIGdhdGluZzogJXNcbiIsCi0JCQkgaW5mby0+aGFzX3N1YnNsaWNl X3BnID8gInkiIDogIm4iKTsKLQlEUk1fREVCVUdfRFJJVkVSKCJoYXMgRVUgcG93ZXIgZ2F0aW5n OiAlc1xuIiwKLQkJCSBpbmZvLT5oYXNfZXVfcGcgPyAieSIgOiAibiIpOwotCi0JaTkxNS5lbmFi bGVfZXhlY2xpc3RzID0KLQkJaW50ZWxfc2FuaXRpemVfZW5hYmxlX2V4ZWNsaXN0cyhkZXZfcHJp diwKLQkJCQkJICAgICAgIAlpOTE1LmVuYWJsZV9leGVjbGlzdHMpOwotCi0JLyoKLQkgKiBpOTE1 LmVuYWJsZV9wcGd0dCBpcyByZWFkLW9ubHksIHNvIGRvIGFuIGVhcmx5IHBhc3MgdG8gdmFsaWRh dGUgdGhlCi0JICogdXNlcidzIHJlcXVlc3RlZCBzdGF0ZSBhZ2FpbnN0IHRoZSBoYXJkd2FyZS9k cml2ZXIgY2FwYWJpbGl0aWVzLiAgV2UKLQkgKiBkbyB0aGlzIG5vdyBzbyB0aGF0IHdlIGNhbiBw cmludCBvdXQgYW55IGxvZyBtZXNzYWdlcyBvbmNlIHJhdGhlcgotCSAqIHRoYW4gZXZlcnkgdGlt ZSB3ZSBjaGVjayBpbnRlbF9lbmFibGVfcHBndHQoKS4KLQkgKi8KLQlpOTE1LmVuYWJsZV9wcGd0 dCA9Ci0JCWludGVsX3Nhbml0aXplX2VuYWJsZV9wcGd0dChkZXZfcHJpdiwgaTkxNS5lbmFibGVf cHBndHQpOwotCURSTV9ERUJVR19EUklWRVIoInBwZ3R0IG1vZGU6ICVpXG4iLCBpOTE1LmVuYWJs ZV9wcGd0dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2luaXRfZHBpbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyoKLQkgKiBJT1NGX1BPUlRfRFBJTyBpcyB1c2Vk IGZvciBWTFYgeDIgUEhZIChEUC9IRE1JIEIgYW5kIEMpLAotCSAqIENIViB4MSBQSFkgKERQL0hE TUkgRCkKLQkgKiBJT1NGX1BPUlRfRFBJT18yIGlzIHVzZWQgZm9yIENIViB4MiBQSFkgKERQL0hE TUkgQiBhbmQgQykKLQkgKi8KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKLQkJRFBJ T19QSFlfSU9TRl9QT1JUKERQSU9fUEhZMCkgPSBJT1NGX1BPUlRfRFBJT18yOwotCQlEUElPX1BI WV9JT1NGX1BPUlQoRFBJT19QSFkxKSA9IElPU0ZfUE9SVF9EUElPOwotCX0gZWxzZSBpZiAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikpIHsKLQkJRFBJT19QSFlfSU9TRl9QT1JUKERQSU9fUEhZMCkg PSBJT1NGX1BPUlRfRFBJTzsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV93b3JrcXVldWVzX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCS8qCi0JICogVGhlIGk5 MTUgd29ya3F1ZXVlIGlzIHByaW1hcmlseSB1c2VkIGZvciBiYXRjaGVkIHJldGlyZW1lbnQgb2YK LQkgKiByZXF1ZXN0cyAoYW5kIHRodXMgbWFuYWdpbmcgYm8pIG9uY2UgdGhlIHRhc2sgaGFzIGJl ZW4gY29tcGxldGVkCi0JICogYnkgdGhlIEdQVS4gaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKCkg aXMgY2FsbGVkIGRpcmVjdGx5IHdoZW4gd2UKLQkgKiBuZWVkIGhpZ2gtcHJpb3JpdHkgcmV0aXJl bWVudCwgc3VjaCBhcyB3YWl0aW5nIGZvciBhbiBleHBsaWNpdAotCSAqIGJvLgotCSAqCi0JICog SXQgaXMgYWxzbyB1c2VkIGZvciBwZXJpb2RpYyBsb3ctcHJpb3JpdHkgZXZlbnRzLCBzdWNoIGFz Ci0JICogaWRsZS10aW1lcnMgYW5kIHJlY29yZGluZyBlcnJvciBzdGF0ZS4KLQkgKgotCSAqIEFs bCB0YXNrcyBvbiB0aGUgd29ya3F1ZXVlIGFyZSBleHBlY3RlZCB0byBhY3F1aXJlIHRoZSBkZXYg bXV0ZXgKLQkgKiBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIG1vcmUgdGhhbiBvbmUg aW5zdGFuY2Ugb2YgdGhlCi0JICogd29ya3F1ZXVlIGF0IGFueSB0aW1lLiAgVXNlIGFuIG9yZGVy ZWQgb25lLgotCSAqLwotCWRldl9wcml2LT53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJp OTE1IiwgMCk7Ci0JaWYgKGRldl9wcml2LT53cSA9PSBOVUxMKQotCQlnb3RvIG91dF9lcnI7Ci0K LQlkZXZfcHJpdi0+aG90cGx1Zy5kcF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1 LWRwIiwgMCk7Ci0JaWYgKGRldl9wcml2LT5ob3RwbHVnLmRwX3dxID09IE5VTEwpCi0JCWdvdG8g b3V0X2ZyZWVfd3E7Ci0KLQlkZXZfcHJpdi0+Z3B1X2Vycm9yLmhhbmdjaGVja193cSA9Ci0JCWFs bG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1LWhhbmdjaGVjayIsIDApOwotCWlmIChkZXZfcHJp di0+Z3B1X2Vycm9yLmhhbmdjaGVja193cSA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlX2RwX3dx OwotCi0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlX2RwX3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGRl dl9wcml2LT5ob3RwbHVnLmRwX3dxKTsKLW91dF9mcmVlX3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVl KGRldl9wcml2LT53cSk7Ci1vdXRfZXJyOgotCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRl IHdvcmtxdWV1ZXMuXG4iKTsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBp OTE1X3dvcmtxdWV1ZXNfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Ci17Ci0JZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd3Ep OwotCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9wcml2LT5ob3RwbHVnLmRwX3dxKTsKLQlkZXN0cm95 X3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOwotfQotCi0vKioKLSAqIGk5MTVfZHJpdmVyX2luaXRf ZWFybHkgLSBzZXR1cCBzdGF0ZSBub3QgcmVxdWlyaW5nIGRldmljZSBhY2Nlc3MKLSAqIEBkZXZf cHJpdjogZGV2aWNlIHByaXZhdGUKLSAqCi0gKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgdGhhdCBp cyBhICJTVy1vbmx5IiBzdGF0ZSwgdGhhdCBpcyBzdGF0ZSBub3QKLSAqIHJlcXVpcmluZyBhY2Nl c3NpbmcgdGhlIGRldmljZSBvciBleHBvc2luZyB0aGUgZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJu YWwKLSAqIG9yIHVzZXJzcGFjZSBpbnRlcmZhY2VzLiBFeGFtcGxlIHN0ZXBzIGJlbG9uZ2luZyBo ZXJlOiBsb2NrIGluaXRpYWxpemF0aW9uLAotICogc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uLCBz ZXR0aW5nIHVwIGRldmljZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZAotICogZnVuY3Rpb24gaG9v a3Mgbm90IHJlcXVpcmluZyBhY2Nlc3NpbmcgdGhlIGRldmljZS4KLSAqLwotc3RhdGljIGludCBp OTE1X2RyaXZlcl9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCi17Ci0JY29uc3Qgc3RydWN0 IGludGVsX2RldmljZV9pbmZvICptYXRjaF9pbmZvID0KLQkJKHN0cnVjdCBpbnRlbF9kZXZpY2Vf aW5mbyAqKWVudC0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGludGVsX2RldmljZV9pbmZvICpkZXZp Y2VfaW5mbzsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChpOTE1X2luamVjdF9sb2FkX2ZhaWx1cmUo KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBTZXR1cCB0aGUgd3JpdGUtb25jZSAiY29uc3Rh bnQiIGRldmljZSBpbmZvICovCi0JZGV2aWNlX2luZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9p bmZvICopJmRldl9wcml2LT5pbmZvOwotCW1lbWNweShkZXZpY2VfaW5mbywgbWF0Y2hfaW5mbywg c2l6ZW9mKCpkZXZpY2VfaW5mbykpOwotCWRldmljZV9pbmZvLT5kZXZpY2VfaWQgPSBkZXZfcHJp di0+ZHJtLnBkZXYtPmRldmljZTsKLQotCUJVR19PTihkZXZpY2VfaW5mby0+Z2VuID4gc2l6ZW9m KGRldmljZV9pbmZvLT5nZW5fbWFzaykgKiBCSVRTX1BFUl9CWVRFKTsKLQlkZXZpY2VfaW5mby0+ Z2VuX21hc2sgPSBCSVQoZGV2aWNlX2luZm8tPmdlbiAtIDEpOwotCi0Jc3Bpbl9sb2NrX2luaXQo JmRldl9wcml2LT5pcnFfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5ncHVfZXJy b3IubG9jayk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmJhY2tsaWdodF9sb2NrKTsKLQlzcGlu X2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2 X3ByaXYtPm1tLm9iamVjdF9zdGF0X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ bW1pb19mbGlwX2xvY2spOwotCW11dGV4X2luaXQoJmRldl9wcml2LT5zYl9sb2NrKTsKLQltdXRl eF9pbml0KCZkZXZfcHJpdi0+bW9kZXNldF9yZXN0b3JlX2xvY2spOwotCW11dGV4X2luaXQoJmRl dl9wcml2LT5hdl9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPndtLndtX211dGV4KTsK LQltdXRleF9pbml0KCZkZXZfcHJpdi0+cHBzX211dGV4KTsKLQotCXJldCA9IGk5MTVfd29ya3F1 ZXVlc19pbml0KGRldl9wcml2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8q IFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBjYWxscyB0byBIQVNfUENIXyogKi8KLQlp bnRlbF9kZXRlY3RfcGNoKCZkZXZfcHJpdi0+ZHJtKTsKLQotCWludGVsX3BtX3NldHVwKCZkZXZf cHJpdi0+ZHJtKTsKLQlpbnRlbF9pbml0X2RwaW8oZGV2X3ByaXYpOwotCWludGVsX3Bvd2VyX2Rv bWFpbnNfaW5pdChkZXZfcHJpdik7Ci0JaW50ZWxfaXJxX2luaXQoZGV2X3ByaXYpOwotCWludGVs X2luaXRfZGlzcGxheV9ob29rcyhkZXZfcHJpdik7Ci0JaW50ZWxfaW5pdF9jbG9ja19nYXRpbmdf aG9va3MoZGV2X3ByaXYpOwotCWludGVsX2luaXRfYXVkaW9faG9va3MoZGV2X3ByaXYpOwotCWk5 MTVfZ2VtX2xvYWRfaW5pdCgmZGV2X3ByaXYtPmRybSk7Ci0KLQlpbnRlbF9kaXNwbGF5X2NyY19p bml0KCZkZXZfcHJpdi0+ZHJtKTsKLQotCWk5MTVfZHVtcF9kZXZpY2VfaW5mbyhkZXZfcHJpdik7 Ci0KLQkvKiBOb3QgYWxsIHByZS1wcm9kdWN0aW9uIG1hY2hpbmVzIGZhbGwgaW50byB0aGlzIGNh dGVnb3J5LCBvbmx5IHRoZQotCSAqIHZlcnkgZmlyc3Qgb25lcy4gQWxtb3N0IGV2ZXJ5dGhpbmcg c2hvdWxkIHdvcmssIGV4Y2VwdCBmb3IgbWF5YmUKLQkgKiBzdXNwZW5kL3Jlc3VtZS4gQW5kIHdl IGRvbid0IGltcGxlbWVudCB3b3JrYXJvdW5kcyB0aGF0IGFmZmVjdCBvbmx5Ci0JICogcHJlLXBy b2R1Y3Rpb24gbWFjaGluZXMuICovCi0JaWYgKElTX0hTV19FQVJMWV9TRFYoZGV2X3ByaXYpKQot CQlEUk1fSU5GTygiVGhpcyBpcyBhbiBlYXJseSBwcmUtcHJvZHVjdGlvbiBIYXN3ZWxsIG1hY2hp bmUuICIKLQkJCSAiSXQgbWF5IG5vdCBiZSBmdWxseSBmdW5jdGlvbmFsLlxuIik7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotLyoqCi0gKiBpOTE1X2RyaXZlcl9jbGVhbnVwX2Vhcmx5IC0gY2xlYW51cCB0 aGUgc2V0dXAgZG9uZSBpbiBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KCkKLSAqIEBkZXZfcHJpdjog ZGV2aWNlIHByaXZhdGUKLSAqLwotc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfY2xlYW51cF9lYXJs eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaTkxNV9nZW1fbG9hZF9j bGVhbnVwKGRldl9wcml2LT5kZXYpOwotCWk5MTVfd29ya3F1ZXVlc19jbGVhbnVwKGRldl9wcml2 KTsKLX0KLQotc3RhdGljIGludCBpOTE1X21taW9fc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 Ci0JaW50IG1taW9fYmFyOwotCWludCBtbWlvX3NpemU7Ci0KLQltbWlvX2JhciA9IElTX0dFTjIo ZGV2KSA/IDEgOiAwOwotCS8qCi0JICogQmVmb3JlIGdlbjQsIHRoZSByZWdpc3RlcnMgYW5kIHRo ZSBHVFQgYXJlIGJlaGluZCBkaWZmZXJlbnQgQkFScy4KLQkgKiBIb3dldmVyLCBmcm9tIGdlbjQg b253YXJkcywgdGhlIHJlZ2lzdGVycyBhbmQgdGhlIEdUVCBhcmUgc2hhcmVkCi0JICogaW4gdGhl IHNhbWUgQkFSLCBzbyB3ZSB3YW50IHRvIHJlc3RyaWN0IHRoaXMgaW9yZW1hcCBmcm9tCi0JICog Y2xvYmJlcmluZyB0aGUgR1RUIHdoaWNoIHdlIHdhbnQgaW9yZW1hcF93YyBpbnN0ZWFkLiBGb3J0 dW5hdGVseSwKLQkgKiB0aGUgcmVnaXN0ZXIgQkFSIHJlbWFpbnMgdGhlIHNhbWUgc2l6ZSBmb3Ig YWxsIHRoZSBlYXJsaWVyCi0JICogZ2VuZXJhdGlvbnMgdXAgdG8gSXJvbmxha2UuCi0JICovCi0J aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNSkKLQkJbW1pb19zaXplID0gNTEyICogMTAyNDsK LQllbHNlCi0JCW1taW9fc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsKLQlkZXZfcHJpdi0+cmVncyA9 IHBjaV9pb21hcChkZXYtPnBkZXYsIG1taW9fYmFyLCBtbWlvX3NpemUpOwotCWlmIChkZXZfcHJp di0+cmVncyA9PSBOVUxMKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNc biIpOwotCi0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIFRyeSB0byBtYWtlIHN1cmUgTUNIQkFS IGlzIGVuYWJsZWQgYmVmb3JlIHBva2luZyBhdCBpdCAqLwotCWludGVsX3NldHVwX21jaGJhcihk ZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfbW1pb19jbGVhbnVwKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwotCi0JaW50ZWxfdGVhcmRvd25fbWNoYmFyKGRldik7Ci0JcGNp X2lvdW5tYXAoZGV2LT5wZGV2LCBkZXZfcHJpdi0+cmVncyk7Ci19Ci0KLS8qKgotICogaTkxNV9k cml2ZXJfaW5pdF9tbWlvIC0gc2V0dXAgZGV2aWNlIE1NSU8KLSAqIEBkZXZfcHJpdjogZGV2aWNl IHByaXZhdGUKLSAqCi0gKiBTZXR1cCBtaW5pbWFsIGRldmljZSBzdGF0ZSBuZWNlc3NhcnkgZm9y IE1NSU8gYWNjZXNzZXMgbGF0ZXIgaW4gdGhlCi0gKiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4g VGhlIHNldHVwIGhlcmUgc2hvdWxkIGF2b2lkIGFueSBvdGhlciBkZXZpY2Utd2lkZQotICogc2lk ZSBlZmZlY3RzIG9yIGV4cG9zaW5nIHRoZSBkcml2ZXIgdmlhIGtlcm5lbCBpbnRlcm5hbCBvciB1 c2VyIHNwYWNlCi0gKiBpbnRlcmZhY2VzLgotICovCi1zdGF0aWMgaW50IGk5MTVfZHJpdmVyX2lu aXRfbW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Ci0JaW50IHJldDsKLQotCWlmIChpOTE1X2lu amVjdF9sb2FkX2ZhaWx1cmUoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoaTkxNV9nZXRf YnJpZGdlX2RldihkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9IGk5MTVfbW1pb19zZXR1 cChkZXYpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHB1dF9icmlkZ2U7Ci0KLQlpbnRlbF91bmNv cmVfaW5pdChkZXZfcHJpdik7Ci0KLQlyZXR1cm4gMDsKLQotcHV0X2JyaWRnZToKLQlwY2lfZGV2 X3B1dChkZXZfcHJpdi0+YnJpZGdlX2Rldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAq IGk5MTVfZHJpdmVyX2NsZWFudXBfbW1pbyAtIGNsZWFudXAgdGhlIHNldHVwIGRvbmUgaW4gaTkx NV9kcml2ZXJfaW5pdF9tbWlvKCkKLSAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKLSAqLwot c3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfY2xlYW51cF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRl djsKLQotCWludGVsX3VuY29yZV9maW5pKGRldl9wcml2KTsKLQlpOTE1X21taW9fY2xlYW51cChk ZXYpOwotCXBjaV9kZXZfcHV0KGRldl9wcml2LT5icmlkZ2VfZGV2KTsKLX0KLQotLyoqCi0gKiBp OTE1X2RyaXZlcl9pbml0X2h3IC0gc2V0dXAgc3RhdGUgcmVxdWlyaW5nIGRldmljZSBhY2Nlc3MK LSAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKLSAqCi0gKiBTZXR1cCBzdGF0ZSB0aGF0IHJl cXVpcmVzIGFjY2Vzc2luZyB0aGUgZGV2aWNlLCBidXQgZG9lc24ndCByZXF1aXJlCi0gKiBleHBv c2luZyB0aGUgZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJuYWwgb3IgdXNlcnNwYWNlIGludGVyZmFj ZXMuCi0gKi8KLXN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2 LT5kZXY7Ci0Jc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+Z2d0dDsKLQl1aW50 MzJfdCBhcGVydHVyZV9zaXplOwotCWludCByZXQ7Ci0KLQlpZiAoaTkxNV9pbmplY3RfbG9hZF9m YWlsdXJlKCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW50ZWxfZGV2aWNlX2luZm9fcnVudGlt ZV9pbml0KGRldik7Ci0KLQlyZXQgPSBpOTE1X2dndHRfaW5pdF9odyhkZXYpOwotCWlmIChyZXQp Ci0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dndHRfZW5hYmxlX2h3KGRldik7Ci0JaWYg KHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgR0dUVFxuIik7Ci0JCWdvdG8g b3V0X2dndHQ7Ci0JfQotCi0JLyogV0FSTklORzogQXBwYXJlbnRseSB3ZSBtdXN0IGtpY2sgZmJk ZXYgZHJpdmVycyBiZWZvcmUgdmdhY29uLAotCSAqIG90aGVyd2lzZSB0aGUgdmdhIGZiZGV2IGRy aXZlciBmYWxscyBvdmVyLiAqLwotCXJldCA9IGk5MTVfa2lja19vdXRfZmlybXdhcmVfZmIoZGV2 X3ByaXYpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVtb3ZlIGNvbmZs aWN0aW5nIGZyYW1lYnVmZmVyIGRyaXZlcnNcbiIpOwotCQlnb3RvIG91dF9nZ3R0OwotCX0KLQot CXJldCA9IGk5MTVfa2lja19vdXRfdmdhY29uKGRldl9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCURS TV9FUlJPUigiZmFpbGVkIHRvIHJlbW92ZSBjb25mbGljdGluZyBWR0EgY29uc29sZVxuIik7Ci0J CWdvdG8gb3V0X2dndHQ7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKLQotCS8q IG92ZXJsYXkgb24gZ2VuMiBpcyBicm9rZW4gYW5kIGNhbid0IGFkZHJlc3MgYWJvdmUgMUcgKi8K LQlpZiAoSVNfR0VOMihkZXYpKSB7Ci0JCXJldCA9IGRtYV9zZXRfY29oZXJlbnRfbWFzaygmZGV2 LT5wZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMCkpOwotCQlpZiAocmV0KSB7Ci0JCQlEUk1fRVJS T1IoImZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwotCi0JCQlnb3RvIG91dF9nZ3R0OwotCQl9 Ci0JfQotCi0KLQkvKiA5NjVHTSBzb21ldGltZXMgaW5jb3JyZWN0bHkgd3JpdGVzIHRvIGhhcmR3 YXJlIHN0YXR1cyBwYWdlIChIV1MpCi0JICogdXNpbmcgMzJiaXQgYWRkcmVzc2luZywgb3Zlcndy aXRpbmcgbWVtb3J5IGlmIEhXUyBpcyBsb2NhdGVkCi0JICogYWJvdmUgNEdCLgotCSAqCi0JICog VGhlIGRvY3VtZW50YXRpb24gYWxzbyBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHVuZGVmaW5lZAot CSAqIGJlaGF2aW91ciBpZiBhbnkgZ2VuZXJhbCBzdGF0ZSBpcyBhY2Nlc3NlZCB3aXRoaW4gYSBw YWdlIGFib3ZlIDRHQiwKLQkgKiB3aGljaCBhbHNvIG5lZWRzIHRvIGJlIGhhbmRsZWQgY2FyZWZ1 bGx5LgotCSAqLwotCWlmIChJU19CUk9BRFdBVEVSKGRldikgfHwgSVNfQ1JFU1RMSU5FKGRldikp IHsKLQkJcmV0ID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKCZkZXYtPnBkZXYtPmRldiwgRE1BX0JJ VF9NQVNLKDMyKSk7Ci0KLQkJaWYgKHJldCkgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0 IERNQSBtYXNrXG4iKTsKLQotCQkJZ290byBvdXRfZ2d0dDsKLQkJfQotCX0KLQotCWFwZXJ0dXJl X3NpemUgPSBnZ3R0LT5tYXBwYWJsZV9lbmQ7Ci0KLQlnZ3R0LT5tYXBwYWJsZSA9Ci0JCWlvX21h cHBpbmdfY3JlYXRlX3djKGdndHQtPm1hcHBhYmxlX2Jhc2UsCi0JCQkJICAgICBhcGVydHVyZV9z aXplKTsKLQlpZiAoIWdndHQtPm1hcHBhYmxlKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0 X2dndHQ7Ci0JfQotCi0JZ2d0dC0+bXRyciA9IGFyY2hfcGh5c193Y19hZGQoZ2d0dC0+bWFwcGFi bGVfYmFzZSwKLQkJCQkJICAgICAgYXBlcnR1cmVfc2l6ZSk7Ci0KLQlwbV9xb3NfYWRkX3JlcXVl c3QoJmRldl9wcml2LT5wbV9xb3MsIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCi0JCQkgICBQTV9R T1NfREVGQVVMVF9WQUxVRSk7Ci0KLQlpbnRlbF91bmNvcmVfc2FuaXRpemUoZGV2X3ByaXYpOwot Ci0JaW50ZWxfb3ByZWdpb25fc2V0dXAoZGV2X3ByaXYpOwotCi0JaTkxNV9nZW1fbG9hZF9pbml0 X2ZlbmNlcyhkZXZfcHJpdik7Ci0KLQkvKiBPbiB0aGUgOTQ1Ry9HTSwgdGhlIGNoaXBzZXQgcmVw b3J0cyB0aGUgTVNJIGNhcGFiaWxpdHkgb24gdGhlCi0JICogaW50ZWdyYXRlZCBncmFwaGljcyBl dmVuIHRob3VnaCB0aGUgc3VwcG9ydCBpc24ndCBhY3R1YWxseSB0aGVyZQotCSAqIGFjY29yZGlu ZyB0byB0aGUgcHVibGlzaGVkIHNwZWNzLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gZnVuY3Rpb24K LQkgKiBjb3JyZWN0bHkgaW4gdGVzdGluZyBvbiA5NDVHLgotCSAqIFRoaXMgbWF5IGJlIGEgc2lk ZSBlZmZlY3Qgb2YgTVNJIGhhdmluZyBiZWVuIG1hZGUgYXZhaWxhYmxlIGZvciBQRUcKLQkgKiBh bmQgdGhlIHJlZ2lzdGVycyBiZWluZyBjbG9zZWx5IGFzc29jaWF0ZWQuCi0JICoKLQkgKiBBY2Nv cmRpbmcgdG8gY2hpcHNldCBlcnJhdGEsIG9uIHRoZSA5NjVHTSwgTVNJIGludGVycnVwdHMgbWF5 Ci0JICogYmUgbG9zdCBvciBkZWxheWVkLCBidXQgd2UgdXNlIHRoZW0gYW55d2F5cyB0byBhdm9p ZAotCSAqIHN0dWNrIGludGVycnVwdHMgb24gc29tZSBtYWNoaW5lcy4KLQkgKi8KLQlpZiAoIUlT X0k5NDVHKGRldikgJiYgIUlTX0k5NDVHTShkZXYpKSB7Ci0JCWlmIChwY2lfZW5hYmxlX21zaShk ZXYtPnBkZXYpIDwgMCkKLQkJCURSTV9ERUJVR19EUklWRVIoImNhbid0IGVuYWJsZSBNU0kiKTsK LQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2dndHQ6Ci0JaTkxNV9nZ3R0X2NsZWFudXBfaHcoZGV2 KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogaTkxNV9kcml2ZXJfY2xlYW51cF9odyAt IGNsZWFudXAgdGhlIHNldHVwIGRvbmUgaW4gaTkxNV9kcml2ZXJfaW5pdF9odygpCi0gKiBAZGV2 X3ByaXY6IGRldmljZSBwcml2YXRlCi0gKi8KLXN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFu dXBfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwotCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAm ZGV2X3ByaXYtPmdndHQ7Ci0KLQlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKLQkJcGNpX2Rp c2FibGVfbXNpKGRldi0+cGRldik7Ci0KLQlwbV9xb3NfcmVtb3ZlX3JlcXVlc3QoJmRldl9wcml2 LT5wbV9xb3MpOwotCWFyY2hfcGh5c193Y19kZWwoZ2d0dC0+bXRycik7Ci0JaW9fbWFwcGluZ19m cmVlKGdndHQtPm1hcHBhYmxlKTsKLQlpOTE1X2dndHRfY2xlYW51cF9odyhkZXYpOwotfQotCi0v KioKLSAqIGk5MTVfZHJpdmVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRyaXZlciB3aXRoIHRo ZSByZXN0IG9mIHRoZSBzeXN0ZW0KLSAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKLSAqCi0g KiBQZXJmb3JtIGFueSBzdGVwcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgZHJpdmVyIGF2YWlsYWJs ZSB2aWEga2VybmVsCi0gKiBpbnRlcm5hbCBvciB1c2Vyc3BhY2UgaW50ZXJmYWNlcy4KLSAqLwot c3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owot Ci0JaTkxNV9nZW1fc2hyaW5rZXJfaW5pdChkZXZfcHJpdik7Ci0KLQkvKgotCSAqIE5vdGlmeSBh IHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCi0JICogd2hlbiBydW5uaW5nIGluc2lk ZSBhIFZNLgotCSAqLwotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCi0JCUk5MTVf V1JJVEUodmd0aWZfcmVnKGRpc3BsYXlfcmVhZHkpLCBWR1RfRFJWX0RJU1BMQVlfUkVBRFkpOwot Ci0JLyogUmV2ZWFsIG91ciBwcmVzZW5jZSB0byB1c2Vyc3BhY2UgKi8KLQlpZiAoZHJtX2Rldl9y ZWdpc3RlcihkZXYsIDApID09IDApIHsKLQkJaTkxNV9kZWJ1Z2ZzX3JlZ2lzdGVyKGRldl9wcml2 KTsKLQkJaTkxNV9zZXR1cF9zeXNmcyhkZXYpOwotCQlpbnRlbF9tb2Rlc2V0X3JlZ2lzdGVyKGRl dl9wcml2KTsKLQl9IGVsc2UKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZHJpdmVy IGZvciB1c2Vyc3BhY2UgYWNjZXNzIVxuIik7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdikt Pm51bV9waXBlcykgewotCQkvKiBNdXN0IGJlIGRvbmUgYWZ0ZXIgcHJvYmluZyBvdXRwdXRzICov Ci0JCWludGVsX29wcmVnaW9uX3JlZ2lzdGVyKGRldl9wcml2KTsKLQkJYWNwaV92aWRlb19yZWdp c3RlcigpOwotCX0KLQotCWlmIChJU19HRU41KGRldl9wcml2KSkKLQkJaW50ZWxfZ3B1X2lwc19p bml0KGRldl9wcml2KTsKLQotCWk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoZGV2X3ByaXYpOwot Ci0JLyoKLQkgKiBTb21lIHBvcnRzIHJlcXVpcmUgY29ycmVjdGx5IHNldC11cCBocGQgcmVnaXN0 ZXJzIGZvciBkZXRlY3Rpb24gdG8KLQkgKiB3b3JrIHByb3Blcmx5IChsZWFkaW5nIHRvIGdob3N0 IGNvbm5lY3RlZCBjb25uZWN0b3Igc3RhdHVzKSwgZS5nLiBWR0EKLQkgKiBvbiBnbTQ1LiAgSGVu Y2Ugd2UgY2FuIG9ubHkgc2V0IHVwIHRoZSBpbml0aWFsIGZiZGV2IGNvbmZpZyBhZnRlciBocGQK LQkgKiBpcnFzIGFyZSBmdWxseSBlbmFibGVkLiBOb3cgd2Ugc2hvdWxkIHNjYW4gZm9yIHRoZSBp bml0aWFsIGNvbmZpZwotCSAqIG9ubHkgb25jZSBob3RwbHVnIGhhbmRsaW5nIGlzIGVuYWJsZWQs IGJ1dCBkdWUgdG8gc2NyZXdlZC11cCBsb2NraW5nCi0JICogYXJvdW5kIGttcy9mYmRldiBpbml0 IHdlIGNhbid0IHByb3RlY3QgdGhlIGZkYmV2IGluaXRpYWwgY29uZmlnCi0JICogc2Nhbm5pbmcg YWdhaW5zdCBob3RwbHVnIGV2ZW50cy4gSGVuY2UgZG8gdGhpcyBmaXJzdCBhbmQgaWdub3JlIHRo ZQotCSAqIHRpbnkgd2luZG93IHdoZXJlIHdlIHdpbGwgbG9vc2UgaG90cGx1ZyBub3RpZmFjdGlv bnMuCi0JICovCi0JaW50ZWxfZmJkZXZfaW5pdGlhbF9jb25maWdfYXN5bmMoZGV2KTsKLX0KLQot LyoqCi0gKiBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyIC0gY2xlYW51cCB0aGUgcmVnaXN0cmF0aW9u IGRvbmUgaW4gaTkxNV9kcml2ZXJfcmVnaXNlcigpCi0gKiBAZGV2X3ByaXY6IGRldmljZSBwcml2 YXRlCi0gKi8KLXN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAo ZGV2X3ByaXYpOwotCi0JaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwotCWFjcGlfdmlkZW9fdW5y ZWdpc3RlcigpOwotCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwotCi0JaW50 ZWxfbW9kZXNldF91bnJlZ2lzdGVyKGRldl9wcml2KTsKLQlpOTE1X3RlYXJkb3duX3N5c2ZzKGRl dl9wcml2LT5kZXYpOwotCWk5MTVfZGVidWdmc191bnJlZ2lzdGVyKGRldl9wcml2KTsKLQlkcm1f ZGV2X3VucmVnaXN0ZXIoZGV2X3ByaXYtPmRldik7Ci0KLQlpOTE1X2dlbV9zaHJpbmtlcl9jbGVh bnVwKGRldl9wcml2KTsKLX0KLQotLyoqCi0gKiBpOTE1X2RyaXZlcl9sb2FkIC0gc2V0dXAgY2hp cCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29uZmlnCi0gKiBAZGV2OiBEUk0gZGV2aWNlCi0gKiBA ZmxhZ3M6IHN0YXJ0dXAgZmxhZ3MKLSAqCi0gKiBUaGUgZHJpdmVyIGxvYWQgcm91dGluZSBoYXMg dG8gZG8gc2V2ZXJhbCB0aGluZ3M6Ci0gKiAgIC0gZHJpdmUgb3V0cHV0IGRpc2NvdmVyeSB2aWEg aW50ZWxfbW9kZXNldF9pbml0KCkKLSAqICAgLSBpbml0aWFsaXplIHRoZSBtZW1vcnkgbWFuYWdl cgotICogICAtIGFsbG9jYXRlIGluaXRpYWwgY29uZmlnIG1lbW9yeQotICogICAtIHNldHVwIHRo ZSBEUk0gZnJhbWVidWZmZXIgd2l0aCB0aGUgYWxsb2NhdGVkIG1lbW9yeQotICovCi1pbnQgaTkx NV9kcml2ZXJfbG9hZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJICAgICBjb25zdCBzdHJ1Y3Qg cGNpX2RldmljZV9pZCAqZW50LAotCQkgICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OwotCWludCByZXQ7Ci0KLQlkZXZf cHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChkZXZf cHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IGRybV9kZXZfaW5pdCgm ZGV2X3ByaXYtPmRybSwgZHJpdmVyLCAmcGRldi0+ZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVl KGRldl9wcml2KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogTXVzdCBiZSBzZXQgYmVmb3JlIGNh bGxpbmcgX19pOTE1X3ByaW50ayAqLwotCWRldl9wcml2LT5kcm0ucGRldiA9IHBkZXY7Ci0JZGV2 X3ByaXYtPmRybS5kZXZfcHJpdmF0ZSA9IGRldl9wcml2OwotCWRldl9wcml2LT5kZXYgPSAmZGV2 X3ByaXYtPmRybTsKLQotCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyZXQp Ci0JCWdvdG8gb3V0X2ZyZWVfcHJpdjsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAmZGV2X3By aXYtPmRybSk7Ci0KLQlyZXQgPSBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KGRldl9wcml2LCBlbnQp OwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9wY2lfZGlzYWJsZTsKLQotCWludGVsX3J1bnRp bWVfcG1fZ2V0KGRldl9wcml2KTsKLQotCXJldCA9IGk5MTVfZHJpdmVyX2luaXRfbW1pbyhkZXZf cHJpdik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3J1bnRpbWVfcG1fcHV0OwotCi0JcmV0 ID0gaTkxNV9kcml2ZXJfaW5pdF9odyhkZXZfcHJpdik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8g b3V0X2NsZWFudXBfbW1pbzsKLQotCS8qCi0JICogVE9ETzogbW92ZSB0aGUgdmJsYW5rIGluaXQg YW5kIHBhcnRzIG9mIG1vZGVzZXQgaW5pdCBzdGVwcyBpbnRvIG9uZQotCSAqIG9mIHRoZSBpOTE1 X2RyaXZlcl9pbml0Xy9pOTE1X2RyaXZlcl9yZWdpc3RlciBmdW5jdGlvbnMgYWNjb3JkaW5nCi0J ICogdG8gdGhlIHJvbGUvZWZmZWN0IG9mIHRoZSBnaXZlbiBpbml0IHN0ZXAuCi0JICovCi0JaWYg KElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMpIHsKLQkJcmV0ID0gZHJtX3ZibGFua19p bml0KGRldl9wcml2LT5kZXYsCi0JCQkJICAgICAgSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9w aXBlcyk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9jbGVhbnVwX2h3OwotCX0KLQotCXJldCA9 IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoZGV2X3ByaXYtPmRldik7Ci0JaWYgKHJldCA8IDApCi0J CWdvdG8gb3V0X2NsZWFudXBfdmJsYW5rOwotCi0JaTkxNV9kcml2ZXJfcmVnaXN0ZXIoZGV2X3By aXYpOwotCi0JaW50ZWxfcnVudGltZV9wbV9lbmFibGUoZGV2X3ByaXYpOwotCi0JaW50ZWxfcnVu dGltZV9wbV9wdXQoZGV2X3ByaXYpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9jbGVhbnVwX3ZibGFu azoKLQlkcm1fdmJsYW5rX2NsZWFudXAoZGV2X3ByaXYtPmRldik7Ci1vdXRfY2xlYW51cF9odzoK LQlpOTE1X2RyaXZlcl9jbGVhbnVwX2h3KGRldl9wcml2KTsKLW91dF9jbGVhbnVwX21taW86Ci0J aTkxNV9kcml2ZXJfY2xlYW51cF9tbWlvKGRldl9wcml2KTsKLW91dF9ydW50aW1lX3BtX3B1dDoK LQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Ci0JaTkxNV9kcml2ZXJfY2xlYW51cF9l YXJseShkZXZfcHJpdik7Ci1vdXRfcGNpX2Rpc2FibGU6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBk ZXYpOwotb3V0X2ZyZWVfcHJpdjoKLQlkcm1fZGV2X3VucmVmKCZkZXZfcHJpdi0+ZHJtKTsKLW91 dDoKLQlpOTE1X2xvYWRfZXJyb3IoZGV2X3ByaXYsICJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFp bGVkICglZClcbiIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGk5MTVfZHJpdmVyX3Vu bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHJldDsKLQotCWludGVsX2ZiZGV2 X2ZpbmkoZGV2KTsKLQotCXJldCA9IGk5MTVfZ2VtX3N1c3BlbmQoZGV2KTsKLQlpZiAocmV0KSB7 Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGlkbGUgaGFyZHdhcmU6ICVkXG4iLCByZXQpOwotCQly ZXR1cm4gcmV0OwotCX0KLQotCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dF Ul9ET01BSU5fSU5JVCk7Ci0KLQlpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKGRldl9wcml2KTsKLQot CWRybV92YmxhbmtfY2xlYW51cChkZXYpOwotCi0JaW50ZWxfbW9kZXNldF9jbGVhbnVwKGRldik7 Ci0KLQkvKgotCSAqIGZyZWUgdGhlIG1lbW9yeSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBjaGls ZCBkZXZpY2UKLQkgKiBjb25maWcgcGFyc2VkIGZyb20gVkJUCi0JICovCi0JaWYgKGRldl9wcml2 LT52YnQuY2hpbGRfZGV2ICYmIGRldl9wcml2LT52YnQuY2hpbGRfZGV2X251bSkgewotCQlrZnJl ZShkZXZfcHJpdi0+dmJ0LmNoaWxkX2Rldik7Ci0JCWRldl9wcml2LT52YnQuY2hpbGRfZGV2ID0g TlVMTDsKLQkJZGV2X3ByaXYtPnZidC5jaGlsZF9kZXZfbnVtID0gMDsKLQl9Ci0Ja2ZyZWUoZGV2 X3ByaXYtPnZidC5zZHZvX2x2ZHNfdmJ0X21vZGUpOwotCWRldl9wcml2LT52YnQuc2R2b19sdmRz X3ZidF9tb2RlID0gTlVMTDsKLQlrZnJlZShkZXZfcHJpdi0+dmJ0LmxmcF9sdmRzX3ZidF9tb2Rl KTsKLQlkZXZfcHJpdi0+dmJ0LmxmcF9sdmRzX3ZidF9tb2RlID0gTlVMTDsKLQotCXZnYV9zd2l0 Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldik7Ci0JdmdhX2NsaWVudF9yZWdpc3Rl cihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0JaW50ZWxfY3NyX3Vjb2RlX2Zpbmko ZGV2X3ByaXYpOwotCi0JLyogRnJlZSBlcnJvciBzdGF0ZSBhZnRlciBpbnRlcnJ1cHRzIGFyZSBm dWxseSBkaXNhYmxlZC4gKi8KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5n cHVfZXJyb3IuaGFuZ2NoZWNrX3dvcmspOwotCWk5MTVfZGVzdHJveV9lcnJvcl9zdGF0ZShkZXYp OwotCi0JLyogRmx1c2ggYW55IG91dHN0YW5kaW5nIHVucGluX3dvcmsuICovCi0JZmx1c2hfd29y a3F1ZXVlKGRldl9wcml2LT53cSk7Ci0KLQlpbnRlbF9ndWNfZmluaShkZXYpOwotCWk5MTVfZ2Vt X2ZpbmkoZGV2KTsKLQlpbnRlbF9mYmNfY2xlYW51cF9jZmIoZGV2X3ByaXYpOwotCi0JaW50ZWxf cG93ZXJfZG9tYWluc19maW5pKGRldl9wcml2KTsKLQotCWk5MTVfZHJpdmVyX2NsZWFudXBfaHco ZGV2X3ByaXYpOwotCWk5MTVfZHJpdmVyX2NsZWFudXBfbW1pbyhkZXZfcHJpdik7Ci0KLQlpbnRl bF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0lOSVQpOwotCi0JaTkx NV9kcml2ZXJfY2xlYW51cF9lYXJseShkZXZfcHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50 IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dlbV9vcGVuKGRldiwgZmlsZSk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGk5 MTVfZHJpdmVyX2xhc3RjbG9zZSAtIGNsZWFuIHVwIGFmdGVyIGFsbCBEUk0gY2xpZW50cyBoYXZl IGV4aXRlZAotICogQGRldjogRFJNIGRldmljZQotICoKLSAqIFRha2UgY2FyZSBvZiBjbGVhbmlu ZyB1cCBhZnRlciBhbGwgRFJNIGNsaWVudHMgaGF2ZSBleGl0ZWQuICBJbiB0aGUKLSAqIG1vZGUg c2V0dGluZyBjYXNlLCB3ZSB3YW50IHRvIHJlc3RvcmUgdGhlIGtlcm5lbCdzIGluaXRpYWwgbW9k ZSAoanVzdAotICogaW4gY2FzZSB0aGUgbGFzdCBjbGllbnQgbGVmdCB1cyBpbiBhIGJhZCBzdGF0 ZSkuCi0gKgotICogQWRkaXRpb25hbGx5LCBpbiB0aGUgbm9uLW1vZGUgc2V0dGluZyBjYXNlLCB3 ZSdsbCB0ZWFyIGRvd24gdGhlIEdUVAotICogYW5kIERNQSBzdHJ1Y3R1cmVzLCBzaW5jZSB0aGUg a2VybmVsIHdvbid0IGJlIHVzaW5nIHRoZW0sIGFuZCBjbGVhCi0gKiB1cCBhbnkgR0VNIHN0YXRl LgotICovCi12b2lkIGk5MTVfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQotewotCWludGVsX2ZiZGV2X3Jlc3RvcmVfbW9kZShkZXYpOwotCXZnYV9zd2l0Y2hlcm9vX3By b2Nlc3NfZGVsYXllZF9zd2l0Y2goKTsKLX0KLQotdm9pZCBpOTE1X2RyaXZlcl9wcmVjbG9zZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCi17Ci0JbXV0ZXhf bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWk5MTVfZ2VtX2NvbnRleHRfY2xvc2UoZGV2LCBm aWxlKTsKLQlpOTE1X2dlbV9yZWxlYXNlKGRldiwgZmlsZSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Ci19Ci0KLXZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKLQotCWtmcmVl KGZpbGVfcHJpdik7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX3JlamVjdF9waW5faW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgc3RydWN0IGRybV9maWxl ICpmaWxlKQotewotCXJldHVybiAtRU5PREVWOwotfQotCi1jb25zdCBzdHJ1Y3QgZHJtX2lvY3Rs X2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0lOSVQsIGRy bV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAotCURSTV9JT0NUTF9E RUZfRFJWKEk5MTVfRkxVU0gsIGRybV9ub29wLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRl9E UlYoSTkxNV9GTElQLCBkcm1fbm9vcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5 MTVfQkFUQ0hCVUZGRVIsIGRybV9ub29wLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRl9EUlYo STkxNV9JUlFfRU1JVCwgZHJtX25vb3AsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RSVihJ OTE1X0lSUV9XQUlULCBkcm1fbm9vcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5 MTVfR0VUUEFSQU0sIGk5MTVfZ2V0cGFyYW0sIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAot CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfU0VUUEFSQU0sIGRybV9ub29wLCBEUk1fQVVUSHxEUk1f TUFTVEVSfERSTV9ST09UX09OTFkpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfQUxMT0MsIGRy bV9ub29wLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9GUkVFLCBkcm1fbm9v cCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfSU5JVF9IRUFQLCBkcm1fbm9v cCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKLQlEUk1fSU9DVExfREVGX0RS VihJOTE1X0NNREJVRkZFUiwgZHJtX25vb3AsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGX0RS VihJOTE1X0RFU1RST1lfSEVBUCwgIGRybV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9S T09UX09OTFkpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfU0VUX1ZCTEFOS19QSVBFLCAgZHJt X25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRVRfVkJMQU5LX1BJUEUsICBkcm1fbm9vcCwgRFJNX0FVVEgpLAotCURSTV9J T0NUTF9ERUZfRFJWKEk5MTVfVkJMQU5LX1NXQVAsIGRybV9ub29wLCBEUk1fQVVUSCksCi0JRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9IV1NfQUREUiwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNU RVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fSU5JVCwgZHJt X25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRU1fRVhFQ0JVRkZFUiwgaTkxNV9nZW1fZXhlY2J1ZmZlciwgRFJNX0FVVEgp LAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0VYRUNCVUZGRVIyLCBpOTE1X2dlbV9leGVj YnVmZmVyMiwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRl9EUlYo STkxNV9HRU1fUElOLCBpOTE1X2dlbV9yZWplY3RfcGluX2lvY3RsLCBEUk1fQVVUSHxEUk1fUk9P VF9PTkxZKSwKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9VTlBJTiwgaTkxNV9nZW1fcmVq ZWN0X3Bpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RFRl9E UlYoSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRF Ul9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fU0VUX0NBQ0hJTkcsIGk5MTVf Z2VtX3NldF9jYWNoaW5nX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKLQlEUk1fSU9DVExfREVG X0RSVihJOTE1X0dFTV9HRVRfQ0FDSElORywgaTkxNV9nZW1fZ2V0X2NhY2hpbmdfaW9jdGwsIERS TV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1RIUk9UVExFLCBp OTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCi0JRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fRU5URVJWVCwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9N QVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fTEVBVkVW VCwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCi0JRFJNX0lP Q1RMX0RFRl9EUlYoSTkxNV9HRU1fQ1JFQVRFLCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwsIERSTV9S RU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1BSRUFELCBpOTE1X2dl bV9wcmVhZF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9HRU1fUFdSSVRFLCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAot CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX01NQVAsIGk5MTVfZ2VtX21tYXBfaW9jdGwsIERS TV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX01NQVBfR1RULCBp OTE1X2dlbV9tbWFwX2d0dF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCi0JRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgRFJN X1JFTkRFUl9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fU1dfRklOSVNILCBp OTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9E RUZfRFJWKEk5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2VtX3NldF90aWxpbmcsIERSTV9SRU5E RVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVf Z2VtX2dldF90aWxpbmcsIERSTV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5 MTVfR0VNX0dFVF9BUEVSVFVSRSwgaTkxNV9nZW1fZ2V0X2FwZXJ0dXJlX2lvY3RsLCBEUk1fUkVO REVSX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFVF9QSVBFX0ZST01fQ1JUQ19J RCwgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkLCAwKSwKLQlEUk1fSU9DVExfREVGX0RSVihJ OTE1X0dFTV9NQURWSVNFLCBpOTE1X2dlbV9tYWR2aXNlX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9X KSwKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X09WRVJMQVlfUFVUX0lNQUdFLCBpbnRlbF9vdmVy bGF5X3B1dF9pbWFnZV9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9PVkVSTEFZX0FUVFJTLCBpbnRlbF9vdmVybGF5X2F0dHJzX2lv Y3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGX0RSVihJ OTE1X1NFVF9TUFJJVEVfQ09MT1JLRVksIGludGVsX3Nwcml0ZV9zZXRfY29sb3JrZXksIERSTV9N QVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUX1NQ UklURV9DT0xPUktFWSwgZHJtX25vb3AsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAot CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1dBSVQsIGk5MTVfZ2VtX3dhaXRfaW9jdGwsIERS TV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NP TlRFWFRfQ1JFQVRFLCBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCi0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZLCBpOTE1 X2dlbV9jb250ZXh0X2Rlc3Ryb3lfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAotCURSTV9JT0NU TF9ERUZfRFJWKEk5MTVfUkVHX1JFQUQsIGk5MTVfcmVnX3JlYWRfaW9jdGwsIERSTV9SRU5ERVJf QUxMT1cpLAotCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUX1JFU0VUX1NUQVRTLCBpOTE1X2dl bV9jb250ZXh0X3Jlc2V0X3N0YXRzX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKLQlEUk1fSU9D VExfREVGX0RSVihJOTE1X0dFTV9VU0VSUFRSLCBpOTE1X2dlbV91c2VycHRyX2lvY3RsLCBEUk1f UkVOREVSX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX0dFVFBB UkFNLCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwK LQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFNLCBpOTE1X2dlbV9j b250ZXh0X3NldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKLX07Ci0KLWludCBpOTE1 X21heF9pb2N0bCA9IEFSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMKaW5kZXggYjEzZDY3NTFlYmU0Li4zYWUzMTNhODZmNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYwpAQCAtMjcsMjEgKzI3LDMwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNp bmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KLSNpbmNsdWRlICJpOTE1X2Rydi5oIgotI2luY2x1ZGUg Imk5MTVfdHJhY2UuaCIKLSNpbmNsdWRlICJpbnRlbF9kcnYuaCIKLQogI2luY2x1ZGUgPGxpbnV4 L2FwcGxlLWdtdXguaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb29tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogI2luY2x1ZGUg PGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CisjaW5jbHVkZSA8bGludXgvdnQuaD4KKyNpbmNsdWRl IDxhY3BpL3ZpZGVvLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KKworI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgorI2luY2x1ZGUgImk5MTVfdmdw dS5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg ZHJpdmVyOwogCkBAIC0zMjMsMjM2ICszMzIsMTgwMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9ndDNtX2luZm8gPSB7CiAJLnJpbmdfbWFz ayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcgfCBCU0Qy X1JJTkcsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVs X2NoZXJyeXZpZXdfaW5mbyA9IHsKLQkuZ2VuID0gOCwgLm51bV9waXBlcyA9IDMsCi0JLm5lZWRf Z2Z4X2h3cyA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCi0JLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5H IHwgQlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcsCi0JLmlzX2NoZXJyeXZpZXcgPSAx LAotCS5kaXNwbGF5X21taW9fb2Zmc2V0ID0gVkxWX0RJU1BMQVlfQkFTRSwKLQlHRU5fQ0hWX1BJ UEVPRkZTRVRTLAotCUNVUlNPUl9PRkZTRVRTLAotCUNIVl9DT0xPUlMsCi19Oworc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9jaGVycnl2aWV3X2luZm8gPSB7CisJ LmdlbiA9IDgsIC5udW1fcGlwZXMgPSAzLAorCS5uZWVkX2dmeF9od3MgPSAxLCAuaGFzX2hvdHBs dWcgPSAxLAorCS5yaW5nX21hc2sgPSBSRU5ERVJfUklORyB8IEJTRF9SSU5HIHwgQkxUX1JJTkcg fCBWRUJPWF9SSU5HLAorCS5pc19jaGVycnl2aWV3ID0gMSwKKwkuZGlzcGxheV9tbWlvX29mZnNl dCA9IFZMVl9ESVNQTEFZX0JBU0UsCisJR0VOX0NIVl9QSVBFT0ZGU0VUUywKKwlDVVJTT1JfT0ZG U0VUUywKKwlDSFZfQ09MT1JTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZp Y2VfaW5mbyBpbnRlbF9za3lsYWtlX2luZm8gPSB7CisJQkRXX0ZFQVRVUkVTLAorCS5pc19za3ls YWtlID0gMSwKKwkuZ2VuID0gOSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2 aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyA9IHsKKwlCRFdfRkVBVFVSRVMsCisJLmlz X3NreWxha2UgPSAxLAorCS5nZW4gPSA5LAorCS5yaW5nX21hc2sgPSBSRU5ERVJfUklORyB8IEJT RF9SSU5HIHwgQkxUX1JJTkcgfCBWRUJPWF9SSU5HIHwgQlNEMl9SSU5HLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9icm94dG9uX2luZm8gPSB7CisJ LmlzX3ByZWxpbWluYXJ5ID0gMSwKKwkuaXNfYnJveHRvbiA9IDEsCisJLmdlbiA9IDksCisJLm5l ZWRfZ2Z4X2h3cyA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCisJLnJpbmdfbWFzayA9IFJFTkRFUl9S SU5HIHwgQlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcsCisJLm51bV9waXBlcyA9IDMs CisJLmhhc19kZGkgPSAxLAorCS5oYXNfZnBnYV9kYmcgPSAxLAorCS5oYXNfZmJjID0gMSwKKwlH RU5fREVGQVVMVF9QSVBFT0ZGU0VUUywKKwlJVkJfQ1VSU09SX09GRlNFVFMsCisJQkRXX0NPTE9S UywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2Fi eWxha2VfaW5mbyA9IHsKKwlCRFdfRkVBVFVSRVMsCisJLmlzX2thYnlsYWtlID0gMSwKKwkuZ2Vu ID0gOSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxf a2FieWxha2VfZ3QzX2luZm8gPSB7CisJQkRXX0ZFQVRVUkVTLAorCS5pc19rYWJ5bGFrZSA9IDEs CisJLmdlbiA9IDksCisJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRf UklORyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCit9OworCisvKgorICogTWFrZSBzdXJlIGFu eSBkZXZpY2UgbWF0Y2hlcyBoZXJlIGFyZSBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbW9zdAorICog Z2VuZXJhbC4gIEZvciBleGFtcGxlLCBzaW5jZSB0aGUgUXVhbnRhIG1hdGNoIGlzIGJhc2VkIG9u IHRoZSBzdWJzeXN0ZW0KKyAqIGFuZCBzdWJ2ZW5kb3IgSURzLCB3ZSBuZWVkIGl0IHRvIGNvbWUg YmVmb3JlIHRoZSBtb3JlIGdlbmVyYWwgSVZCCisgKiBQQ0kgSUQgbWF0Y2hlcywgb3RoZXJ3aXNl IHdlJ2xsIHVzZSB0aGUgd3JvbmcgaW5mbyBzdHJ1Y3QgYWJvdmUuCisgKi8KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKKwlJTlRFTF9JODMwX0lEUygm aW50ZWxfaTgzMF9pbmZvKSwKKwlJTlRFTF9JODQ1R19JRFMoJmludGVsXzg0NWdfaW5mbyksCisJ SU5URUxfSTg1WF9JRFMoJmludGVsX2k4NXhfaW5mbyksCisJSU5URUxfSTg2NUdfSURTKCZpbnRl bF9pODY1Z19pbmZvKSwKKwlJTlRFTF9JOTE1R19JRFMoJmludGVsX2k5MTVnX2luZm8pLAorCUlO VEVMX0k5MTVHTV9JRFMoJmludGVsX2k5MTVnbV9pbmZvKSwKKwlJTlRFTF9JOTQ1R19JRFMoJmlu dGVsX2k5NDVnX2luZm8pLAorCUlOVEVMX0k5NDVHTV9JRFMoJmludGVsX2k5NDVnbV9pbmZvKSwK KwlJTlRFTF9JOTY1R19JRFMoJmludGVsX2k5NjVnX2luZm8pLAorCUlOVEVMX0czM19JRFMoJmlu dGVsX2czM19pbmZvKSwKKwlJTlRFTF9JOTY1R01fSURTKCZpbnRlbF9pOTY1Z21faW5mbyksCisJ SU5URUxfR000NV9JRFMoJmludGVsX2dtNDVfaW5mbyksCisJSU5URUxfRzQ1X0lEUygmaW50ZWxf ZzQ1X2luZm8pLAorCUlOVEVMX1BJTkVWSUVXX0lEUygmaW50ZWxfcGluZXZpZXdfaW5mbyksCisJ SU5URUxfSVJPTkxBS0VfRF9JRFMoJmludGVsX2lyb25sYWtlX2RfaW5mbyksCisJSU5URUxfSVJP TkxBS0VfTV9JRFMoJmludGVsX2lyb25sYWtlX21faW5mbyksCisJSU5URUxfU05CX0RfSURTKCZp bnRlbF9zYW5keWJyaWRnZV9kX2luZm8pLAorCUlOVEVMX1NOQl9NX0lEUygmaW50ZWxfc2FuZHli cmlkZ2VfbV9pbmZvKSwKKwlJTlRFTF9JVkJfUV9JRFMoJmludGVsX2l2eWJyaWRnZV9xX2luZm8p LCAvKiBtdXN0IGJlIGZpcnN0IElWQiAqLworCUlOVEVMX0lWQl9NX0lEUygmaW50ZWxfaXZ5YnJp ZGdlX21faW5mbyksCisJSU5URUxfSVZCX0RfSURTKCZpbnRlbF9pdnlicmlkZ2VfZF9pbmZvKSwK KwlJTlRFTF9IU1dfRF9JRFMoJmludGVsX2hhc3dlbGxfZF9pbmZvKSwKKwlJTlRFTF9IU1dfTV9J RFMoJmludGVsX2hhc3dlbGxfbV9pbmZvKSwKKwlJTlRFTF9WTFZfTV9JRFMoJmludGVsX3ZhbGxl eXZpZXdfbV9pbmZvKSwKKwlJTlRFTF9WTFZfRF9JRFMoJmludGVsX3ZhbGxleXZpZXdfZF9pbmZv KSwKKwlJTlRFTF9CRFdfR1QxMk1fSURTKCZpbnRlbF9icm9hZHdlbGxfbV9pbmZvKSwKKwlJTlRF TF9CRFdfR1QxMkRfSURTKCZpbnRlbF9icm9hZHdlbGxfZF9pbmZvKSwKKwlJTlRFTF9CRFdfR1Qz TV9JRFMoJmludGVsX2Jyb2Fkd2VsbF9ndDNtX2luZm8pLAorCUlOVEVMX0JEV19HVDNEX0lEUygm aW50ZWxfYnJvYWR3ZWxsX2d0M2RfaW5mbyksCisJSU5URUxfQ0hWX0lEUygmaW50ZWxfY2hlcnJ5 dmlld19pbmZvKSwKKwlJTlRFTF9TS0xfR1QxX0lEUygmaW50ZWxfc2t5bGFrZV9pbmZvKSwKKwlJ TlRFTF9TS0xfR1QyX0lEUygmaW50ZWxfc2t5bGFrZV9pbmZvKSwKKwlJTlRFTF9TS0xfR1QzX0lE UygmaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyksCisJSU5URUxfU0tMX0dUNF9JRFMoJmludGVsX3Nr eWxha2VfZ3QzX2luZm8pLAorCUlOVEVMX0JYVF9JRFMoJmludGVsX2Jyb3h0b25faW5mbyksCisJ SU5URUxfS0JMX0dUMV9JRFMoJmludGVsX2thYnlsYWtlX2luZm8pLAorCUlOVEVMX0tCTF9HVDJf SURTKCZpbnRlbF9rYWJ5bGFrZV9pbmZvKSwKKwlJTlRFTF9LQkxfR1QzX0lEUygmaW50ZWxfa2Fi eWxha2VfZ3QzX2luZm8pLAorCUlOVEVMX0tCTF9HVDRfSURTKCZpbnRlbF9rYWJ5bGFrZV9ndDNf aW5mbyksCisJezAsIDAsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaWlkbGlz dCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9sb2FkX2ZhaWxfY291bnQ7CisKK2Jvb2wg X19pOTE1X2luamVjdF9sb2FkX2ZhaWx1cmUoY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmUpCit7 CisJaWYgKGk5MTVfbG9hZF9mYWlsX2NvdW50ID49IGk5MTUuaW5qZWN0X2xvYWRfZmFpbHVyZSkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCsraTkxNV9sb2FkX2ZhaWxfY291bnQgPT0gaTkxNS5p bmplY3RfbG9hZF9mYWlsdXJlKSB7CisJCURSTV9JTkZPKCJJbmplY3RpbmcgZmFpbHVyZSBhdCBj aGVja3BvaW50ICV1IFslczolZF1cbiIsCisJCQkgaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJlLCBm dW5jLCBsaW5lKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisj ZGVmaW5lIEZET19CVUdfVVJMICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1 Zy5jZ2k/cHJvZHVjdD1EUkkiCisjZGVmaW5lIEZET19CVUdfTVNHICJQbGVhc2UgZmlsZSBhIGJ1 ZyBhdCAiIEZET19CVUdfVVJMICIgYWdhaW5zdCBEUk0vSW50ZWwgIiBcCisJCSAgICAicHJvdmlk aW5nIHRoZSBkbWVzZyBsb2cgYnkgYm9vdGluZyB3aXRoIGRybS5kZWJ1Zz0weGYiCisKK3ZvaWQK K19faTkxNV9wcmludGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCBj aGFyICpsZXZlbCwKKwkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdGF0aWMgYm9v bCBzaG93bl9idWdfb25jZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2LT5k ZXY7CisJYm9vbCBpc19lcnJvciA9IGxldmVsWzFdIDw9IEtFUk5fRVJSWzFdOworCWJvb2wgaXNf ZGVidWcgPSBsZXZlbFsxXSA9PSBLRVJOX0RFQlVHWzFdOworCXN0cnVjdCB2YV9mb3JtYXQgdmFm OworCXZhX2xpc3QgYXJnczsKKworCWlmIChpc19kZWJ1ZyAmJiAhKGRybV9kZWJ1ZyAmIERSTV9V VF9EUklWRVIpKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCisJdmFmLmZt dCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCWRldl9wcmludGsobGV2ZWwsIGRldiwgIlsi IERSTV9OQU1FICI6JXBzXSAlcFYiLAorCQkgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCks ICZ2YWYpOworCisJaWYgKGlzX2Vycm9yICYmICFzaG93bl9idWdfb25jZSkgeworCQlkZXZfbm90 aWNlKGRldiwgIiVzIiwgRkRPX0JVR19NU0cpOworCQlzaG93bl9idWdfb25jZSA9IHRydWU7CisJ fQorCisJdmFfZW5kKGFyZ3MpOworfQorCitzdGF0aWMgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlyZXR1cm4gaTkxNS5pbmpl Y3RfbG9hZF9mYWlsdXJlICYmCisJICAgICAgIGk5MTVfbG9hZF9mYWlsX2NvdW50ID09IGk5MTUu aW5qZWN0X2xvYWRfZmFpbHVyZTsKK30KKworI2RlZmluZSBpOTE1X2xvYWRfZXJyb3IoZGV2X3By aXYsIGZtdCwgLi4uKQkJCQkgICAgIFwKKwlfX2k5MTVfcHJpbnRrKGRldl9wcml2LAkJCQkJCSAg ICAgXAorCQkgICAgICBpOTE1X2Vycm9yX2luamVjdGVkKGRldl9wcml2KSA/IEtFUk5fREVCVUcg OiBLRVJOX0VSUiwgXAorCQkgICAgICBmbXQsICMjX19WQV9BUkdTX18pCisKKworc3RhdGljIGVu dW0gaW50ZWxfcGNoIGludGVsX3ZpcnRfZGV0ZWN0X3BjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCWVudW0gaW50ZWxfcGNoIHJldCA9IFBDSF9OT1A7CisKKwkvKgorCSAqIEluIGEgdmly dHVhbGl6ZWQgcGFzc3Rocm91Z2ggZW52aXJvbm1lbnQgd2UgY2FuIGJlIGluIGEKKwkgKiBzZXR1 cCB3aGVyZSB0aGUgSVNBIGJyaWRnZSBpcyBub3QgYWJsZSB0byBiZSBwYXNzZWQgdGhyb3VnaC4K KwkgKiBJbiB0aGlzIGNhc2UsIGEgc291dGggYnJpZGdlIGNhbiBiZSBlbXVsYXRlZCBhbmQgd2Ug aGF2ZSB0bworCSAqIG1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MgYXMgdG8gd2hpY2ggUENIIGlzIHJl YWxseSB0aGVyZS4KKwkgKi8KKworCWlmIChJU19HRU41KGRldikpIHsKKwkJcmV0ID0gUENIX0lC WDsKKwkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgSWJleCBQZWFrIFBDSFxuIik7CisJfSBlbHNl IGlmIChJU19HRU42KGRldikgfHwgSVNfSVZZQlJJREdFKGRldikpIHsKKwkJcmV0ID0gUENIX0NQ VDsKKwkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgQ291YXJQb2ludCBQQ0hcbiIpOworCX0gZWxz ZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKSB7CisJCXJldCA9IFBD SF9MUFQ7CisJCURSTV9ERUJVR19LTVMoIkFzc3VtaW5nIEx5bnhQb2ludCBQQ0hcbiIpOworCX0g ZWxzZSBpZiAoSVNfU0tZTEFLRShkZXYpIHx8IElTX0tBQllMQUtFKGRldikpIHsKKwkJcmV0ID0g UENIX1NQVDsKKwkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgU3VucmlzZVBvaW50IFBDSFxuIik7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZGV0ZWN0X3BjaChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBjaV9kZXYgKnBjaCA9IE5VTEw7CisK KwkvKiBJbiBhbGwgY3VycmVudCBjYXNlcywgbnVtX3BpcGVzIGlzIGVxdWl2YWxlbnQgdG8gdGhl IFBDSF9OT1Agc2V0dGluZworCSAqICh3aGljaCByZWFsbHkgYW1vdW50cyB0byBhIFBDSCBidXQg bm8gU291dGggRGlzcGxheSkuCisJICovCisJaWYgKElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVz ID09IDApIHsKKwkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX05PUDsKKwkJcmV0dXJuOworCX0K KworCS8qCisJICogVGhlIHJlYXNvbiB0byBwcm9iZSBJU0EgYnJpZGdlIGluc3RlYWQgb2YgRGV2 MzE6RnVuMCBpcyB0bworCSAqIG1ha2UgZ3JhcGhpY3MgZGV2aWNlIHBhc3N0aHJvdWdoIHdvcmsg ZWFzeSBmb3IgVk1NLCB0aGF0IG9ubHkKKwkgKiBuZWVkIHRvIGV4cG9zZSBJU0EgYnJpZGdlIHRv IGxldCBkcml2ZXIga25vdyB0aGUgcmVhbCBoYXJkd2FyZQorCSAqIHVuZGVybmVhdGguIFRoaXMg aXMgYSByZXF1aXJlbWVudCBmcm9tIHZpcnR1YWxpemF0aW9uIHRlYW0uCisJICoKKwkgKiBJbiBz b21lIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiBYRU4pLCB0aGVyZSBpcyBpcnJlbGV2 YW50CisJICogSVNBIGJyaWRnZSBpbiB0aGUgc3lzdGVtLiBUbyB3b3JrIHJlbGlhYmx5LCB3ZSBz aG91bGQgc2NhbiB0cmhvdWdoCisJICogYWxsIHRoZSBJU0EgYnJpZGdlIGRldmljZXMgYW5kIGNo ZWNrIGZvciB0aGUgZmlyc3QgbWF0Y2gsIGluc3RlYWQKKwkgKiBvZiBvbmx5IGNoZWNraW5nIHRo ZSBmaXJzdCBvbmUuCisJICovCisJd2hpbGUgKChwY2ggPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFT U19CUklER0VfSVNBIDw8IDgsIHBjaCkpKSB7CisJCWlmIChwY2gtPnZlbmRvciA9PSBQQ0lfVkVO RE9SX0lEX0lOVEVMKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBpZCA9IHBjaC0+ZGV2aWNlICYgSU5U RUxfUENIX0RFVklDRV9JRF9NQVNLOworCQkJZGV2X3ByaXYtPnBjaF9pZCA9IGlkOworCisJCQlp ZiAoaWQgPT0gSU5URUxfUENIX0lCWF9ERVZJQ0VfSURfVFlQRSkgeworCQkJCWRldl9wcml2LT5w Y2hfdHlwZSA9IFBDSF9JQlg7CisJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgSWJleCBQZWFrIFBD SFxuIik7CisJCQkJV0FSTl9PTighSVNfR0VONShkZXYpKTsKKwkJCX0gZWxzZSBpZiAoaWQgPT0g SU5URUxfUENIX0NQVF9ERVZJQ0VfSURfVFlQRSkgeworCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9 IFBDSF9DUFQ7CisJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgQ291Z2FyUG9pbnQgUENIXG4iKTsK KwkJCQlXQVJOX09OKCEoSVNfR0VONihkZXYpIHx8IElTX0lWWUJSSURHRShkZXYpKSk7CisJCQl9 IGVsc2UgaWYgKGlkID09IElOVEVMX1BDSF9QUFRfREVWSUNFX0lEX1RZUEUpIHsKKwkJCQkvKiBQ YW50aGVyUG9pbnQgaXMgQ1BUIGNvbXBhdGlibGUgKi8KKwkJCQlkZXZfcHJpdi0+cGNoX3R5cGUg PSBQQ0hfQ1BUOworCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIFBhbnRoZXJQb2ludCBQQ0hcbiIp OworCQkJCVdBUk5fT04oIShJU19HRU42KGRldikgfHwgSVNfSVZZQlJJREdFKGRldikpKTsKKwkJ CX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX0xQVF9ERVZJQ0VfSURfVFlQRSkgeworCQkJCWRl dl9wcml2LT5wY2hfdHlwZSA9IFBDSF9MUFQ7CisJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgTHlu eFBvaW50IFBDSFxuIik7CisJCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9B RFdFTEwoZGV2KSk7CisJCQkJV0FSTl9PTihJU19IU1dfVUxUKGRldikgfHwgSVNfQkRXX1VMVChk ZXYpKTsKKwkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX0xQVF9MUF9ERVZJQ0VfSURfVFlQ RSkgeworCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9MUFQ7CisJCQkJRFJNX0RFQlVHX0tN UygiRm91bmQgTHlueFBvaW50IExQIFBDSFxuIik7CisJCQkJV0FSTl9PTighSVNfSEFTV0VMTChk ZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7CisJCQkJV0FSTl9PTighSVNfSFNXX1VMVChkZXYp ICYmICFJU19CRFdfVUxUKGRldikpOworCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfU1BU X0RFVklDRV9JRF9UWVBFKSB7CisJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX1NQVDsKKwkJ CQlEUk1fREVCVUdfS01TKCJGb3VuZCBTdW5yaXNlUG9pbnQgUENIXG4iKTsKKwkJCQlXQVJOX09O KCFJU19TS1lMQUtFKGRldikgJiYKKwkJCQkJIUlTX0tBQllMQUtFKGRldikpOworCQkJfSBlbHNl IGlmIChpZCA9PSBJTlRFTF9QQ0hfU1BUX0xQX0RFVklDRV9JRF9UWVBFKSB7CisJCQkJZGV2X3By aXYtPnBjaF90eXBlID0gUENIX1NQVDsKKwkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBTdW5yaXNl UG9pbnQgTFAgUENIXG4iKTsKKwkJCQlXQVJOX09OKCFJU19TS1lMQUtFKGRldikgJiYKKwkJCQkJ IUlTX0tBQllMQUtFKGRldikpOworCQkJfSBlbHNlIGlmICgoaWQgPT0gSU5URUxfUENIX1AyWF9E RVZJQ0VfSURfVFlQRSkgfHwKKwkJCQkgICAoaWQgPT0gSU5URUxfUENIX1AzWF9ERVZJQ0VfSURf VFlQRSkgfHwKKwkJCQkgICAoKGlkID09IElOVEVMX1BDSF9RRU1VX0RFVklDRV9JRF9UWVBFKSAm JgorCQkJCSAgICBwY2gtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxYWY0ICYmCisJCQkJICAgIHBj aC0+c3Vic3lzdGVtX2RldmljZSA9PSAweDExMDApKSB7CisJCQkJZGV2X3ByaXYtPnBjaF90eXBl ID0gaW50ZWxfdmlydF9kZXRlY3RfcGNoKGRldik7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsK KworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFwY2gpCisJCURSTV9ERUJVR19LTVMoIk5vIFBD SCBmb3VuZC5cbiIpOworCisJcGNpX2Rldl9wdXQocGNoKTsKK30KKworYm9vbCBpOTE1X3NlbWFw aG9yZV9pc19lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDYpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpOTE1 LnNlbWFwaG9yZXMgPj0gMCkKKwkJcmV0dXJuIGk5MTUuc2VtYXBob3JlczsKKworCS8qIFRPRE86 IG1ha2Ugc2VtYXBob3JlcyBhbmQgRXhlY2xpc3RzIHBsYXkgbmljZWx5IHRvZ2V0aGVyICovCisJ aWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKKwkJcmV0dXJuIGZhbHNlOworCisjaWZkZWYgQ09O RklHX0lOVEVMX0lPTU1VCisJLyogRW5hYmxlIHNlbWFwaG9yZXMgb24gU05CIHdoZW4gSU8gcmVt YXBwaW5nIGlzIG9mZiAqLworCWlmIChJU19HRU42KGRldl9wcml2KSAmJiBpbnRlbF9pb21tdV9n ZnhfbWFwcGVkKQorCQlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgaW50IGk5MTVfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pOTE1X2dldHBh cmFtX3QgKnBhcmFtID0gZGF0YTsKKwlpbnQgdmFsdWU7CisKKwlzd2l0Y2ggKHBhcmFtLT5wYXJh bSkgeworCWNhc2UgSTkxNV9QQVJBTV9JUlFfQUNUSVZFOgorCWNhc2UgSTkxNV9QQVJBTV9BTExP V19CQVRDSEJVRkZFUjoKKwljYXNlIEk5MTVfUEFSQU1fTEFTVF9ESVNQQVRDSDoKKwkJLyogUmVq ZWN0IGFsbCBvbGQgdW1zL2RyaSBwYXJhbXMuICovCisJCXJldHVybiAtRU5PREVWOworCWNhc2Ug STkxNV9QQVJBTV9DSElQU0VUX0lEOgorCQl2YWx1ZSA9IGRldi0+cGRldi0+ZGV2aWNlOworCQli cmVhazsKKwljYXNlIEk5MTVfUEFSQU1fUkVWSVNJT046CisJCXZhbHVlID0gZGV2LT5wZGV2LT5y ZXZpc2lvbjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19HRU06CisJCXZhbHVlID0g MTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX05VTV9GRU5DRVNfQVZBSUw6CisJCXZhbHVl ID0gZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1f SEFTX09WRVJMQVk6CisJCXZhbHVlID0gZGV2X3ByaXYtPm92ZXJsYXkgPyAxIDogMDsKKwkJYnJl YWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19QQUdFRkxJUFBJTkc6CisJCXZhbHVlID0gMTsKKwkJ YnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19FWEVDQlVGMjoKKwkJLyogZGVwZW5kcyBvbiBH RU0gKi8KKwkJdmFsdWUgPSAxOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0JTRDoK KwkJdmFsdWUgPSBpbnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkNT XSk7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfQkxUOgorCQl2YWx1ZSA9IGludGVs X2VuZ2luZV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdKTsKKwkJYnJlYWs7CisJ Y2FzZSBJOTE1X1BBUkFNX0hBU19WRUJPWDoKKwkJdmFsdWUgPSBpbnRlbF9lbmdpbmVfaW5pdGlh bGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkVDU10pOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFS QU1fSEFTX0JTRDI6CisJCXZhbHVlID0gaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKCZkZXZfcHJp di0+ZW5naW5lW1ZDUzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19SRUxBWEVE X0ZFTkNJTkc6CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19D T0hFUkVOVF9SSU5HUzoKKwkJdmFsdWUgPSAxOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1f SEFTX0VYRUNfQ09OU1RBTlRTOgorCQl2YWx1ZSA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQ7 CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfUkVMQVhFRF9ERUxUQToKKwkJdmFsdWUg PSAxOworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0dFTjdfU09MX1JFU0VUOgorCQl2 YWx1ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfTExDOgorCQl2YWx1ZSA9 IEhBU19MTEMoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19XVDoKKwkJdmFs dWUgPSBIQVNfV1QoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19BTElBU0lO R19QUEdUVDoKKwkJdmFsdWUgPSBVU0VTX1BQR1RUKGRldik7CisJCWJyZWFrOworCWNhc2UgSTkx NV9QQVJBTV9IQVNfV0FJVF9USU1FT1VUOgorCQl2YWx1ZSA9IDE7CisJCWJyZWFrOworCWNhc2Ug STkxNV9QQVJBTV9IQVNfU0VNQVBIT1JFUzoKKwkJdmFsdWUgPSBpOTE1X3NlbWFwaG9yZV9pc19l bmFibGVkKGRldl9wcml2KTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19QUklNRV9W TUFQX0ZMVVNIOgorCQl2YWx1ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNf U0VDVVJFX0JBVENIRVM6CisJCXZhbHVlID0gY2FwYWJsZShDQVBfU1lTX0FETUlOKTsKKwkJYnJl YWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19QSU5ORURfQkFUQ0hFUzoKKwkJdmFsdWUgPSAxOwor CQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0VYRUNfTk9fUkVMT0M6CisJCXZhbHVlID0g MTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19FWEVDX0hBTkRMRV9MVVQ6CisJCXZh bHVlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0NNRF9QQVJTRVJfVkVSU0lPTjoK KwkJdmFsdWUgPSBpOTE1X2NtZF9wYXJzZXJfZ2V0X3ZlcnNpb24oZGV2X3ByaXYpOworCQlicmVh azsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX0NPSEVSRU5UX1BIWVNfR1RUOgorCQl2YWx1ZSA9IDE7 CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9NTUFQX1ZFUlNJT046CisJCXZhbHVlID0gMTsK KwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX1NVQlNMSUNFX1RPVEFMOgorCQl2YWx1ZSA9IElO VEVMX0lORk8oZGV2KS0+c3Vic2xpY2VfdG90YWw7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4g LUVOT0RFVjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0VVX1RPVEFMOgorCQl2YWx1ZSA9 IElOVEVMX0lORk8oZGV2KS0+ZXVfdG90YWw7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLUVO T0RFVjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19HUFVfUkVTRVQ6CisJCXZhbHVl ID0gaTkxNS5lbmFibGVfaGFuZ2NoZWNrICYmIGludGVsX2hhc19ncHVfcmVzZXQoZGV2X3ByaXYp OworCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fSEFTX1JFU09VUkNFX1NUUkVBTUVSOgorCQl2 YWx1ZSA9IEhBU19SRVNPVVJDRV9TVFJFQU1FUihkZXYpOworCQlicmVhazsKKwljYXNlIEk5MTVf UEFSQU1fSEFTX0VYRUNfU09GVFBJTjoKKwkJdmFsdWUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlEUk1fREVCVUcoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLCBwYXJhbS0+cGFyYW0pOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY29weV90b191c2VyKHBhcmFtLT52YWx1ZSwg JnZhbHVlLCBzaXplb2YoaW50KSkpIHsKKwkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXIgZmFpbGVk XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgaTkxNV9nZXRfYnJpZGdlX2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZf cHJpdi0+YnJpZGdlX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLCAw KSk7CisJaWYgKCFkZXZfcHJpdi0+YnJpZGdlX2RldikgeworCQlEUk1fRVJST1IoImJyaWRnZSBk ZXZpY2Ugbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwor LyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBNQ0ggcmVncyBpZiBuZWVkZWQsIHJldHVybiBub256 ZXJvIG9uIGVycm9yICovCitzdGF0aWMgaW50CitpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2Uo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZWcgPSBJTlRFTF9JTkZPKGRldiktPmdl biA+PSA0ID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKKwl1MzIgdGVtcF9sbywgdGVtcF9o aSA9IDA7CisJdTY0IG1jaGJhcl9hZGRyOworCWludCByZXQ7CisKKwlpZiAoSU5URUxfSU5GTyhk ZXYpLT5nZW4gPj0gNCkKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2Vf ZGV2LCByZWcgKyA0LCAmdGVtcF9oaSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2 LT5icmlkZ2VfZGV2LCByZWcsICZ0ZW1wX2xvKTsKKwltY2hiYXJfYWRkciA9ICgodTY0KXRlbXBf aGkgPDwgMzIpIHwgdGVtcF9sbzsKKworCS8qIElmIEFDUEkgZG9lc24ndCBoYXZlIGl0LCBhc3N1 bWUgd2UgbmVlZCB0byBhbGxvY2F0ZSBpdCBvdXJzZWx2ZXMgKi8KKyNpZmRlZiBDT05GSUdfUE5Q CisJaWYgKG1jaGJhcl9hZGRyICYmCisJICAgIHBucF9yYW5nZV9yZXNlcnZlZChtY2hiYXJfYWRk ciwgbWNoYmFyX2FkZHIgKyBNQ0hCQVJfU0laRSkpCisJCXJldHVybiAwOworI2VuZGlmCisKKwkv KiBHZXQgc29tZSBzcGFjZSBmb3IgaXQgKi8KKwlkZXZfcHJpdi0+bWNoX3Jlcy5uYW1lID0gImk5 MTUgTUNIQkFSIjsKKwlkZXZfcHJpdi0+bWNoX3Jlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwor CXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoZGV2X3ByaXYtPmJyaWRnZV9kZXYtPmJ1cywK KwkJCQkgICAgICZkZXZfcHJpdi0+bWNoX3JlcywKKwkJCQkgICAgIE1DSEJBUl9TSVpFLCBNQ0hC QVJfU0laRSwKKwkJCQkgICAgIFBDSUJJT1NfTUlOX01FTSwKKwkJCQkgICAgIDAsIHBjaWJpb3Nf YWxpZ25fcmVzb3VyY2UsCisJCQkJICAgICBkZXZfcHJpdi0+YnJpZGdlX2Rldik7CisJaWYgKHJl dCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgYnVzIGFsbG9jOiAlZFxuIiwgcmV0KTsK KwkJZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCWlm IChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRl dl9wcml2LT5icmlkZ2VfZGV2LCByZWcgKyA0LAorCQkJCSAgICAgICB1cHBlcl8zMl9iaXRzKGRl dl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9w cml2LT5icmlkZ2VfZGV2LCByZWcsCisJCQkgICAgICAgbG93ZXJfMzJfYml0cyhkZXZfcHJpdi0+ bWNoX3Jlcy5zdGFydCkpOworCXJldHVybiAwOworfQorCisvKiBTZXR1cCBNQ0hCQVIgaWYgcG9z c2libGUsIHJldHVybiB0cnVlIGlmIHdlIHNob3VsZCBkaXNhYmxlIGl0IGFnYWluICovCitzdGF0 aWMgdm9pZAoraW50ZWxfc2V0dXBfbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlp bnQgbWNoYmFyX3JlZyA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgPyBNQ0hCQVJfSTk2NSA6 IE1DSEJBUl9JOTE1OworCXUzMiB0ZW1wOworCWJvb2wgZW5hYmxlZDsKKworCWlmIChJU19WQUxM RVlWSUVXKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpKQorCQlyZXR1cm47CisKKwlkZXZfcHJp di0+bWNoYmFyX25lZWRfZGlzYWJsZSA9IGZhbHNlOworCisJaWYgKElTX0k5MTVHKGRldikgfHwg SVNfSTkxNUdNKGRldikpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCBERVZFTiwgJnRlbXApOworCQllbmFibGVkID0gISEodGVtcCAmIERFVkVOX01DSEJB Ul9FTik7CisJfSBlbHNlIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CisJCWVuYWJsZWQgPSB0ZW1wICYgMTsKKwl9CisK KwkvKiBJZiBpdCdzIGFscmVhZHkgZW5hYmxlZCwgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyAq LworCWlmIChlbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoaW50ZWxfYWxsb2NfbWNoYmFyX3Jl c291cmNlKGRldikpCisJCXJldHVybjsKKworCWRldl9wcml2LT5tY2hiYXJfbmVlZF9kaXNhYmxl ID0gdHJ1ZTsKKworCS8qIFNwYWNlIGlzIGFsbG9jYXRlZCBvciByZXNlcnZlZCwgc28gZW5hYmxl IGl0LiAqLworCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7CisJCXBjaV93 cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLAorCQkJCSAgICAg ICB0ZW1wIHwgREVWRU5fTUNIQkFSX0VOKTsKKwl9IGVsc2UgeworCQlwY2lfcmVhZF9jb25maWdf ZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJcGNpX3dy aXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCB8 IDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2ludGVsX3RlYXJkb3duX21jaGJhcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IG1jaGJhcl9yZWcgPSBJTlRFTF9JTkZPKGRldiktPmdl biA+PSA0ID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKKworCWlmIChkZXZfcHJpdi0+bWNo YmFyX25lZWRfZGlzYWJsZSkgeworCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2 KSkgeworCQkJdTMyIGRldmVuX3ZhbDsKKworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9w cml2LT5icmlkZ2VfZGV2LCBERVZFTiwKKwkJCQkJICAgICAgJmRldmVuX3ZhbCk7CisJCQlkZXZl bl92YWwgJj0gfkRFVkVOX01DSEJBUl9FTjsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2 X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLAorCQkJCQkgICAgICAgZGV2ZW5fdmFsKTsKKwkJfSBl bHNlIHsKKwkJCXUzMiBtY2hiYXJfdmFsOworCisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2 X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsCisJCQkJCSAgICAgICZtY2hiYXJfdmFsKTsK KwkJCW1jaGJhcl92YWwgJj0gfjE7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2 LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLAorCQkJCQkgICAgICAgbWNoYmFyX3ZhbCk7CisJCX0K Kwl9CisKKwlpZiAoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpCisJCXJlbGVhc2VfcmVzb3VyY2Uo JmRldl9wcml2LT5tY2hfcmVzKTsKK30KKworLyogdHJ1ZSA9IGVuYWJsZSBkZWNvZGUsIGZhbHNl ID0gZGlzYWJsZSBkZWNvZGVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfdmdhX3NldF9k ZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjb29raWU7CisKKwlpbnRlbF9tb2Rlc2V0X3ZnYV9zZXRfc3RhdGUoZGV2LCBzdGF0ZSk7 CisJaWYgKHN0YXRlKQorCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVH QUNZX01FTSB8CisJCSAgICAgICBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxf TUVNOworCWVsc2UKKwkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1B TF9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfc3dpdGNoZXJvb19zZXRfc3RhdGUoc3RydWN0 IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlwbV9tZXNzYWdl X3QgcG1tID0geyAuZXZlbnQgPSBQTV9FVkVOVF9TVVNQRU5EIH07CisKKwlpZiAoc3RhdGUgPT0g VkdBX1NXSVRDSEVST09fT04pIHsKKwkJcHJfaW5mbygic3dpdGNoZWQgb25cbiIpOworCQlkZXYt PnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfQ0hBTkdJTkc7CisJCS8qIGk5 MTUgcmVzdW1lIGhhbmRsZXIgZG9lc24ndCBzZXQgdG8gRDAgKi8KKwkJcGNpX3NldF9wb3dlcl9z dGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CisJCWk5MTVfcmVzdW1lX3N3aXRjaGVyb28oZGV2KTsK KwkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX09OOworCX0gZWxz ZSB7CisJCXByX2luZm8oInN3aXRjaGVkIG9mZlxuIik7CisJCWRldi0+c3dpdGNoX3Bvd2VyX3N0 YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9DSEFOR0lORzsKKwkJaTkxNV9zdXNwZW5kX3N3aXRjaGVy b28oZGV2LCBwbW0pOworCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9X RVJfT0ZGOworCX0KK30KKworc3RhdGljIGJvb2wgaTkxNV9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2go c3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9n ZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qCisJICogRklYTUU6IG9wZW5fY291bnQgaXMgcHJvdGVj dGVkIGJ5IGRybV9nbG9iYWxfbXV0ZXggYnV0IHRoYXQgd291bGQgbGVhZCB0bworCSAqIGxvY2tp bmcgaW52ZXJzaW9uIHdpdGggdGhlIGRyaXZlciBsb2FkIHBhdGguIEFuZCB0aGUgYWNjZXNzIGhl cmUgaXMKKwkgKiBjb21wbGV0ZWx5IHJhY3kgYW55d2F5LiBTbyBkb24ndCBib3RoZXIgd2l0aCBs b2NraW5nIGZvciBub3cuCisJICovCisJcmV0dXJuIGRldi0+b3Blbl9jb3VudCA9PSAwOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9vcHMgaTkxNV9zd2l0 Y2hlcm9vX29wcyA9IHsKKwkuc2V0X2dwdV9zdGF0ZSA9IGk5MTVfc3dpdGNoZXJvb19zZXRfc3Rh dGUsCisJLnJlcHJvYmUgPSBOVUxMLAorCS5jYW5fc3dpdGNoID0gaTkxNV9zd2l0Y2hlcm9vX2Nh bl9zd2l0Y2gsCit9OworCitzdGF0aWMgdm9pZCBpOTE1X2dlbV9maW5pKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkZXYpOworCisJLyoKKwkgKiBOZWl0aGVyIHRoZSBCSU9TLCBvdXJzZWx2ZXMgb3IgYW55IG90 aGVyIGtlcm5lbAorCSAqIGV4cGVjdHMgdGhlIHN5c3RlbSB0byBiZSBpbiBleGVjbGlzdHMgbW9k ZSBvbiBzdGFydHVwLAorCSAqIHNvIHdlIG5lZWQgdG8gcmVzZXQgdGhlIEdQVSBiYWNrIHRvIGxl Z2FjeSBtb2RlLiBBbmQgdGhlIG9ubHkKKwkgKiBrbm93biB3YXkgdG8gZGlzYWJsZSBsb2dpY2Fs IGNvbnRleHRzIGlzIHRocm91Z2ggYSBHUFUgcmVzZXQuCisJICoKKwkgKiBTbyBpbiBvcmRlciB0 byBsZWF2ZSB0aGUgc3lzdGVtIGluIGEga25vd24gZGVmYXVsdCBjb25maWd1cmF0aW9uLAorCSAq IGFsd2F5cyByZXNldCB0aGUgR1BVIHVwb24gdW5sb2FkLiBBZnRlcndhcmRzIHdlIHRoZW4gY2xl YW4gdXAgdGhlCisJICogR0VNIHN0YXRlIHRyYWNraW5nLCBmbHVzaGluZyBvZmYgdGhlIHJlcXVl c3RzIGFuZCBsZWF2aW5nIHRoZQorCSAqIHN5c3RlbSBpbiBhIGtub3duIGlkbGUgc3RhdGUuCisJ ICoKKwkgKiBOb3RlIHRoYXQgaXMgb2YgdGhlIHVwbW9zdCBpbXBvcnRhbmNlIHRoYXQgdGhlIEdQ VSBpcyBpZGxlIGFuZAorCSAqIGFsbCBzdHJheSB3cml0ZXMgYXJlIGZsdXNoZWQgKmJlZm9yZSog d2UgZGlzbWFudGxlIHRoZSBiYWNraW5nCisJICogc3RvcmFnZSBmb3IgdGhlIHBpbm5lZCBvYmpl Y3RzLgorCSAqCisJICogSG93ZXZlciwgc2luY2Ugd2UgYXJlIHVuY2VydGFpbiB0aGF0IHJlc2V0 aW5nIHRoZSBHUFUgb24gb2xkZXIKKwkgKiBtYWNoaW5lcyBpcyBhIGdvb2QgaWRlYSwgd2UgZG9u J3QgLSBqdXN0IGluIGNhc2UgaXQgbGVhdmVzIHRoZQorCSAqIG1hY2hpbmUgaW4gYW4gdW51c2Fi bGUgY29uZGl0aW9uLgorCSAqLworCWlmIChIQVNfSFdfQ09OVEVYVFMoZGV2KSkgeworCQlpbnQg cmVzZXQgPSBpbnRlbF9ncHVfcmVzZXQoZGV2X3ByaXYsIEFMTF9FTkdJTkVTKTsKKwkJV0FSTl9P TihyZXNldCAmJiByZXNldCAhPSAtRU5PREVWKTsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CisJaTkxNV9nZW1fcmVzZXQoZGV2KTsKKwlpOTE1X2dlbV9jbGVhbnVwX2Vu Z2luZXMoZGV2KTsKKwlpOTE1X2dlbV9jb250ZXh0X2ZpbmkoZGV2KTsKKwltdXRleF91bmxvY2so JmRldi0+c3RydWN0X211dGV4KTsKKworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnRvX2k5MTUoZGV2 KS0+Y29udGV4dF9saXN0KSk7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9sb2FkX21vZGVzZXRfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKworCWlmIChpOTE1X2luamVj dF9sb2FkX2ZhaWx1cmUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbnRlbF9iaW9z X2luaXQoZGV2X3ByaXYpOworCWlmIChyZXQpCisJCURSTV9JTkZPKCJmYWlsZWQgdG8gZmluZCBW QklPUyB0YWJsZXNcbiIpOworCisJLyogSWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIHdl IG5lZWQgdG8gYXJiaXRyYXRlIGFjY2VzcworCSAqIHRvIHRoZSBjb21tb24gVkdBIHJlc291cmNl cy4KKwkgKgorCSAqIElmIHdlIGFyZSBhIHNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgKCFQ Q0lfRElTUExBWV9DTEFTU19WR0EpLAorCSAqIHRoZW4gd2UgZG8gbm90IHRha2UgcGFydCBpbiBW R0EgYXJiaXRyYXRpb24gYW5kIHRoZQorCSAqIHZnYV9jbGllbnRfcmVnaXN0ZXIoKSBmYWlscyB3 aXRoIC1FTk9ERVYuCisJICovCisJcmV0ID0gdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYs IGRldiwgTlVMTCwgaTkxNV92Z2Ffc2V0X2RlY29kZSk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVO T0RFVikKKwkJZ290byBvdXQ7CisKKwlpbnRlbF9yZWdpc3Rlcl9kc21faGFuZGxlcigpOworCisJ cmV0ID0gdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldiwgJmk5MTVfc3dp dGNoZXJvb19vcHMsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXBfdmdhX2NsaWVu dDsKKworCS8qIG11c3QgaGFwcGVuIGJlZm9yZSBpbnRlbF9wb3dlcl9kb21haW5zX2luaXRfaHco KSBvbiBWTFYvQ0hWICovCisJaW50ZWxfdXBkYXRlX3Jhd2NsayhkZXZfcHJpdik7CisKKwlpbnRl bF9wb3dlcl9kb21haW5zX2luaXRfaHcoZGV2X3ByaXYsIGZhbHNlKTsKKworCWludGVsX2Nzcl91 Y29kZV9pbml0KGRldl9wcml2KTsKKworCXJldCA9IGludGVsX2lycV9pbnN0YWxsKGRldl9wcml2 KTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXBfY3NyOworCisJaW50ZWxfc2V0dXBfZ21idXMo ZGV2KTsKKworCS8qIEltcG9ydGFudDogVGhlIG91dHB1dCBzZXR1cCBmdW5jdGlvbnMgY2FsbGVk IGJ5IG1vZGVzZXRfaW5pdCBuZWVkCisJICogd29ya2luZyBpcnFzIGZvciBlLmcuIGdtYnVzIGFu ZCBkcCBhdXggdHJhbnNmZXJzLiAqLworCWludGVsX21vZGVzZXRfaW5pdChkZXYpOworCisJaW50 ZWxfZ3VjX2luaXQoZGV2KTsKKworCXJldCA9IGk5MTVfZ2VtX2luaXQoZGV2KTsKKwlpZiAocmV0 KQorCQlnb3RvIGNsZWFudXBfaXJxOworCisJaW50ZWxfbW9kZXNldF9nZW1faW5pdChkZXYpOwor CisJaWYgKElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVzID09IDApCisJCXJldHVybiAwOworCisJ cmV0ID0gaW50ZWxfZmJkZXZfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cF9n ZW07CisKKwkvKiBPbmx5IGVuYWJsZSBob3RwbHVnIGhhbmRsaW5nIG9uY2UgdGhlIGZiZGV2IGlz IGZ1bGx5IHNldCB1cC4gKi8KKwlpbnRlbF9ocGRfaW5pdChkZXZfcHJpdik7CisKKwlkcm1fa21z X2hlbHBlcl9wb2xsX2luaXQoZGV2KTsKKworCXJldHVybiAwOworCitjbGVhbnVwX2dlbToKKwlp OTE1X2dlbV9maW5pKGRldik7CitjbGVhbnVwX2lycToKKwlpbnRlbF9ndWNfZmluaShkZXYpOwor CWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJaW50ZWxfdGVhcmRvd25fZ21idXMoZGV2KTsKK2Ns ZWFudXBfY3NyOgorCWludGVsX2Nzcl91Y29kZV9maW5pKGRldl9wcml2KTsKKwlpbnRlbF9wb3dl cl9kb21haW5zX2ZpbmkoZGV2X3ByaXYpOworCXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xp ZW50KGRldi0+cGRldik7CitjbGVhbnVwX3ZnYV9jbGllbnQ6CisJdmdhX2NsaWVudF9yZWdpc3Rl cihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisK KyNpZiBJU19FTkFCTEVEKENPTkZJR19GQikKK3N0YXRpYyBpbnQgaTkxNV9raWNrX291dF9maXJt d2FyZV9mYihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGFw ZXJ0dXJlc19zdHJ1Y3QgKmFwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2X3ByaXYtPmRl di0+cGRldjsKKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0OworCWJv b2wgcHJpbWFyeTsKKwlpbnQgcmV0OworCisJYXAgPSBhbGxvY19hcGVydHVyZXMoMSk7CisJaWYg KCFhcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhcC0+cmFuZ2VzWzBdLmJhc2UgPSBnZ3R0LT5t YXBwYWJsZV9iYXNlOworCWFwLT5yYW5nZXNbMF0uc2l6ZSA9IGdndHQtPm1hcHBhYmxlX2VuZDsK KworCXByaW1hcnkgPQorCQlwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAm IElPUkVTT1VSQ0VfUk9NX1NIQURPVzsKKworCXJldCA9IHJlbW92ZV9jb25mbGljdGluZ19mcmFt ZWJ1ZmZlcnMoYXAsICJpbnRlbGRybWZiIiwgcHJpbWFyeSk7CisKKwlrZnJlZShhcCk7CisKKwly ZXR1cm4gcmV0OworfQorI2Vsc2UKK3N0YXRpYyBpbnQgaTkxNV9raWNrX291dF9maXJtd2FyZV9m YihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJcmV0dXJuIDA7Cit9Cisj ZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKK3N0YXRpYyBpbnQgaTkx NV9raWNrX291dF92Z2Fjb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorewor CXJldHVybiAwOworfQorI2VsaWYgIWRlZmluZWQoQ09ORklHX0RVTU1ZX0NPTlNPTEUpCitzdGF0 aWMgaW50IGk5MTVfa2lja19vdXRfdmdhY29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbHNlCitzdGF0aWMgaW50IGk5MTVfa2lj a19vdXRfdmdhY29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpbnQg cmV0ID0gMDsKKworCURSTV9JTkZPKCJSZXBsYWNpbmcgVkdBIGNvbnNvbGUgZHJpdmVyXG4iKTsK KworCWNvbnNvbGVfbG9jaygpOworCWlmIChjb25faXNfYm91bmQoJnZnYV9jb24pKQorCQlyZXQg PSBkb190YWtlX292ZXJfY29uc29sZSgmZHVtbXlfY29uLCAwLCBNQVhfTlJfQ09OU09MRVMgLSAx LCAxKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gZG9fdW5yZWdpc3Rlcl9jb25fZHJpdmVy KCZ2Z2FfY29uKTsKKworCQkvKiBJZ25vcmUgImFscmVhZHkgdW5yZWdpc3RlcmVkIi4gKi8KKwkJ aWYgKHJldCA9PSAtRU5PREVWKQorCQkJcmV0ID0gMDsKKwl9CisJY29uc29sZV91bmxvY2soKTsK KworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaTkxNV9kdW1wX2Rldmlj ZV9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm8gPSAmZGV2X3ByaXYtPmluZm87CisKKyNkZWZpbmUg UFJJTlRfUyhuYW1lKSAiJXMiCisjZGVmaW5lIFNFUF9FTVBUWQorI2RlZmluZSBQUklOVF9GTEFH KG5hbWUpIGluZm8tPm5hbWUgPyAjbmFtZSAiLCIgOiAiIgorI2RlZmluZSBTRVBfQ09NTUEgLAor CURSTV9ERUJVR19EUklWRVIoImk5MTUgZGV2aWNlIGluZm86IGdlbj0laSwgcGNpaWQ9MHglMDR4 IHJldj0weCUwMnggZmxhZ3M9IgorCQkJIERFVl9JTkZPX0ZPUl9FQUNIX0ZMQUcoUFJJTlRfUywg U0VQX0VNUFRZKSwKKwkJCSBpbmZvLT5nZW4sCisJCQkgZGV2X3ByaXYtPmRldi0+cGRldi0+ZGV2 aWNlLAorCQkJIGRldl9wcml2LT5kZXYtPnBkZXYtPnJldmlzaW9uLAorCQkJIERFVl9JTkZPX0ZP Ul9FQUNIX0ZMQUcoUFJJTlRfRkxBRywgU0VQX0NPTU1BKSk7CisjdW5kZWYgUFJJTlRfUworI3Vu ZGVmIFNFUF9FTVBUWQorI3VuZGVmIFBSSU5UX0ZMQUcKKyN1bmRlZiBTRVBfQ09NTUEKK30KKwor c3RhdGljIHZvaWQgY2hlcnJ5dmlld19zc2V1X2luZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvOworCXUzMiBmdXNlLCBldV9k aXM7CisKKwlpbmZvID0gKHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+aW5m bzsKKwlmdXNlID0gSTkxNV9SRUFEKENIVl9GVVNFX0dUKTsKKworCWluZm8tPnNsaWNlX3RvdGFs ID0gMTsKKworCWlmICghKGZ1c2UgJiBDSFZfRkdUX0RJU0FCTEVfU1MwKSkgeworCQlpbmZvLT5z dWJzbGljZV9wZXJfc2xpY2UrKzsKKwkJZXVfZGlzID0gZnVzZSAmIChDSFZfRkdUX0VVX0RJU19T UzBfUjBfTUFTSyB8CisJCQkJIENIVl9GR1RfRVVfRElTX1NTMF9SMV9NQVNLKTsKKwkJaW5mby0+ ZXVfdG90YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9kaXMpOworCX0KKworCWlmICghKGZ1c2UgJiBD SFZfRkdUX0RJU0FCTEVfU1MxKSkgeworCQlpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2UrKzsKKwkJ ZXVfZGlzID0gZnVzZSAmIChDSFZfRkdUX0VVX0RJU19TUzFfUjBfTUFTSyB8CisJCQkJIENIVl9G R1RfRVVfRElTX1NTMV9SMV9NQVNLKTsKKwkJaW5mby0+ZXVfdG90YWwgKz0gOCAtIGh3ZWlnaHQz MihldV9kaXMpOworCX0KKworCWluZm8tPnN1YnNsaWNlX3RvdGFsID0gaW5mby0+c3Vic2xpY2Vf cGVyX3NsaWNlOworCS8qCisJICogQ0hWIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9y bSBkaXN0cmlidXRpb24gb2YgRVUKKwkgKiBhY3Jvc3Mgc3Vic2xpY2VzLgorCSovCisJaW5mby0+ ZXVfcGVyX3N1YnNsaWNlID0gaW5mby0+c3Vic2xpY2VfdG90YWwgPworCQkJCWluZm8tPmV1X3Rv dGFsIC8gaW5mby0+c3Vic2xpY2VfdG90YWwgOgorCQkJCTA7CisJLyoKKwkgKiBDSFYgc3VwcG9y dHMgc3Vic2xpY2UgcG93ZXIgZ2F0aW5nIG9uIGRldmljZXMgd2l0aCBtb3JlIHRoYW4KKwkgKiBv bmUgc3Vic2xpY2UsIGFuZCBzdXBwb3J0cyBFVSBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3aXRo CisJICogbW9yZSB0aGFuIG9uZSBFVSBwYWlyIHBlciBzdWJzbGljZS4KKwkqLworCWluZm8tPmhh c19zbGljZV9wZyA9IDA7CisJaW5mby0+aGFzX3N1YnNsaWNlX3BnID0gKGluZm8tPnN1YnNsaWNl X3RvdGFsID4gMSk7CisJaW5mby0+aGFzX2V1X3BnID0gKGluZm8tPmV1X3Blcl9zdWJzbGljZSA+ IDIpOworfQorCitzdGF0aWMgdm9pZCBnZW45X3NzZXVfaW5mb19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm87CisJaW50IHNfbWF4 ID0gMywgc3NfbWF4ID0gNCwgZXVfbWF4ID0gODsKKwlpbnQgcywgc3M7CisJdTMyIGZ1c2UyLCBz X2VuYWJsZSwgc3NfZGlzYWJsZSwgZXVfZGlzYWJsZTsKKwl1OCBldV9tYXNrID0gMHhmZjsKKwor CWluZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9pbmZvICopJmRldl9wcml2LT5pbmZvOworCWZ1 c2UyID0gSTkxNV9SRUFEKEdFTjhfRlVTRTIpOworCXNfZW5hYmxlID0gKGZ1c2UyICYgR0VOOF9G Ml9TX0VOQV9NQVNLKSA+PgorCQkgICBHRU44X0YyX1NfRU5BX1NISUZUOworCXNzX2Rpc2FibGUg PSAoZnVzZTIgJiBHRU45X0YyX1NTX0RJU19NQVNLKSA+PgorCQkgICAgIEdFTjlfRjJfU1NfRElT X1NISUZUOworCisJaW5mby0+c2xpY2VfdG90YWwgPSBod2VpZ2h0MzIoc19lbmFibGUpOworCS8q CisJICogVGhlIHN1YnNsaWNlIGRpc2FibGUgZmllbGQgaXMgZ2xvYmFsLCBpLmUuIGl0IGFwcGxp ZXMKKwkgKiB0byBlYWNoIG9mIHRoZSBlbmFibGVkIHNsaWNlcy4KKwkqLworCWluZm8tPnN1YnNs aWNlX3Blcl9zbGljZSA9IHNzX21heCAtIGh3ZWlnaHQzMihzc19kaXNhYmxlKTsKKwlpbmZvLT5z dWJzbGljZV90b3RhbCA9IGluZm8tPnNsaWNlX3RvdGFsICoKKwkJCSAgICAgICBpbmZvLT5zdWJz bGljZV9wZXJfc2xpY2U7CisKKwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBlbmFibGVkIHNsaWNl cyBhbmQgc3Vic2xpY2VzIHRvCisJICogY291bnQgdGhlIHRvdGFsIGVuYWJsZWQgRVUuCisJKi8K Kwlmb3IgKHMgPSAwOyBzIDwgc19tYXg7IHMrKykgeworCQlpZiAoIShzX2VuYWJsZSAmICgweDEg PDwgcykpKQorCQkJLyogc2tpcCBkaXNhYmxlZCBzbGljZSAqLworCQkJY29udGludWU7CisKKwkJ ZXVfZGlzYWJsZSA9IEk5MTVfUkVBRChHRU45X0VVX0RJU0FCTEUocykpOworCQlmb3IgKHNzID0g MDsgc3MgPCBzc19tYXg7IHNzKyspIHsKKwkJCWludCBldV9wZXJfc3M7CisKKwkJCWlmIChzc19k aXNhYmxlICYgKDB4MSA8PCBzcykpCisJCQkJLyogc2tpcCBkaXNhYmxlZCBzdWJzbGljZSAqLwor CQkJCWNvbnRpbnVlOworCisJCQlldV9wZXJfc3MgPSBldV9tYXggLSBod2VpZ2h0OCgoZXVfZGlz YWJsZSA+PiAoc3MqOCkpICYKKwkJCQkJCSAgICAgIGV1X21hc2spOworCisJCQkvKgorCQkJICog UmVjb3JkIHdoaWNoIHN1YnNsaWNlKHMpIGhhcyhoYXZlKSA3IEVVcy4gd2UKKwkJCSAqIGNhbiB0 dW5lIHRoZSBoYXNoIHVzZWQgdG8gc3ByZWFkIHdvcmsgYW1vbmcKKwkJCSAqIHN1YnNsaWNlcyBp ZiB0aGV5IGFyZSB1bmJhbGFuY2VkLgorCQkJICovCisJCQlpZiAoZXVfcGVyX3NzID09IDcpCisJ CQkJaW5mby0+c3Vic2xpY2VfN2V1W3NdIHw9IDEgPDwgc3M7CisKKwkJCWluZm8tPmV1X3RvdGFs ICs9IGV1X3Blcl9zczsKKwkJfQorCX0KKworCS8qCisJICogU0tMIGlzIGV4cGVjdGVkIHRvIGFs d2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmlidXRpb24KKwkgKiBvZiBFVSBhY3Jvc3Mgc3Vic2xp Y2VzIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGFueSBvbmUKKwkgKiBFVSBpbiBhbnkgb25lIHN1 YnNsaWNlIG1heSBiZSBmdXNlZCBvZmYgZm9yIGRpZQorCSAqIHJlY292ZXJ5LiBCWFQgaXMgZXhw ZWN0ZWQgdG8gYmUgcGVyZmVjdGx5IHVuaWZvcm0gaW4gRVUKKwkgKiBkaXN0cmlidXRpb24uCisJ Ki8KKwlpbmZvLT5ldV9wZXJfc3Vic2xpY2UgPSBpbmZvLT5zdWJzbGljZV90b3RhbCA/CisJCQkJ RElWX1JPVU5EX1VQKGluZm8tPmV1X3RvdGFsLAorCQkJCQkgICAgIGluZm8tPnN1YnNsaWNlX3Rv dGFsKSA6IDA7CisJLyoKKwkgKiBTS0wgc3VwcG9ydHMgc2xpY2UgcG93ZXIgZ2F0aW5nIG9uIGRl dmljZXMgd2l0aCBtb3JlIHRoYW4KKwkgKiBvbmUgc2xpY2UsIGFuZCBzdXBwb3J0cyBFVSBwb3dl ciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoCisJICogbW9yZSB0aGFuIG9uZSBFVSBwYWlyIHBlciBz dWJzbGljZS4gQlhUIHN1cHBvcnRzIHN1YnNsaWNlCisJICogcG93ZXIgZ2F0aW5nIG9uIGRldmlj ZXMgd2l0aCBtb3JlIHRoYW4gb25lIHN1YnNsaWNlLCBhbmQKKwkgKiBzdXBwb3J0cyBFVSBwb3dl ciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiBvbmUgRVUKKwkgKiBwYWlyIHBlciBz dWJzbGljZS4KKwkqLworCWluZm8tPmhhc19zbGljZV9wZyA9ICgoSVNfU0tZTEFLRShkZXYpIHx8 IElTX0tBQllMQUtFKGRldikpICYmCisJCQkgICAgICAgKGluZm8tPnNsaWNlX3RvdGFsID4gMSkp OworCWluZm8tPmhhc19zdWJzbGljZV9wZyA9IChJU19CUk9YVE9OKGRldikgJiYgKGluZm8tPnN1 YnNsaWNlX3RvdGFsID4gMSkpOworCWluZm8tPmhhc19ldV9wZyA9IChpbmZvLT5ldV9wZXJfc3Vi c2xpY2UgPiAyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm87 CisJY29uc3QgaW50IHNfbWF4ID0gMywgc3NfbWF4ID0gMywgZXVfbWF4ID0gODsKKwlpbnQgcywg c3M7CisJdTMyIGZ1c2UyLCBldV9kaXNhYmxlW3NfbWF4XSwgc19lbmFibGUsIHNzX2Rpc2FibGU7 CisKKwlmdXNlMiA9IEk5MTVfUkVBRChHRU44X0ZVU0UyKTsKKwlzX2VuYWJsZSA9IChmdXNlMiAm IEdFTjhfRjJfU19FTkFfTUFTSykgPj4gR0VOOF9GMl9TX0VOQV9TSElGVDsKKwlzc19kaXNhYmxl ID0gKGZ1c2UyICYgR0VOOF9GMl9TU19ESVNfTUFTSykgPj4gR0VOOF9GMl9TU19ESVNfU0hJRlQ7 CisKKwlldV9kaXNhYmxlWzBdID0gSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTApICYgR0VOOF9F VV9ESVMwX1MwX01BU0s7CisJZXVfZGlzYWJsZVsxXSA9IChJOTE1X1JFQUQoR0VOOF9FVV9ESVNB QkxFMCkgPj4gR0VOOF9FVV9ESVMwX1MxX1NISUZUKSB8CisJCQkoKEk5MTVfUkVBRChHRU44X0VV X0RJU0FCTEUxKSAmIEdFTjhfRVVfRElTMV9TMV9NQVNLKSA8PAorCQkJICgzMiAtIEdFTjhfRVVf RElTMF9TMV9TSElGVCkpOworCWV1X2Rpc2FibGVbMl0gPSAoSTkxNV9SRUFEKEdFTjhfRVVfRElT QUJMRTEpID4+IEdFTjhfRVVfRElTMV9TMl9TSElGVCkgfAorCQkJKChJOTE1X1JFQUQoR0VOOF9F VV9ESVNBQkxFMikgJiBHRU44X0VVX0RJUzJfUzJfTUFTSykgPDwKKwkJCSAoMzIgLSBHRU44X0VV X0RJUzFfUzJfU0hJRlQpKTsKKworCisJaW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8g KikmZGV2X3ByaXYtPmluZm87CisJaW5mby0+c2xpY2VfdG90YWwgPSBod2VpZ2h0MzIoc19lbmFi bGUpOworCisJLyoKKwkgKiBUaGUgc3Vic2xpY2UgZGlzYWJsZSBmaWVsZCBpcyBnbG9iYWwsIGku ZS4gaXQgYXBwbGllcworCSAqIHRvIGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xpY2VzLgorCSAqLwor CWluZm8tPnN1YnNsaWNlX3Blcl9zbGljZSA9IHNzX21heCAtIGh3ZWlnaHQzMihzc19kaXNhYmxl KTsKKwlpbmZvLT5zdWJzbGljZV90b3RhbCA9IGluZm8tPnNsaWNlX3RvdGFsICogaW5mby0+c3Vi c2xpY2VfcGVyX3NsaWNlOworCisJLyoKKwkgKiBJdGVyYXRlIHRocm91Z2ggZW5hYmxlZCBzbGlj ZXMgYW5kIHN1YnNsaWNlcyB0bworCSAqIGNvdW50IHRoZSB0b3RhbCBlbmFibGVkIEVVLgorCSAq LworCWZvciAocyA9IDA7IHMgPCBzX21heDsgcysrKSB7CisJCWlmICghKHNfZW5hYmxlICYgKDB4 MSA8PCBzKSkpCisJCQkvKiBza2lwIGRpc2FibGVkIHNsaWNlICovCisJCQljb250aW51ZTsKKwor CQlmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKKwkJCXUzMiBuX2Rpc2FibGVkOwor CisJCQlpZiAoc3NfZGlzYWJsZSAmICgweDEgPDwgc3MpKQorCQkJCS8qIHNraXAgZGlzYWJsZWQg c3Vic2xpY2UgKi8KKwkJCQljb250aW51ZTsKKworCQkJbl9kaXNhYmxlZCA9IGh3ZWlnaHQ4KGV1 X2Rpc2FibGVbc10gPj4gKHNzICogZXVfbWF4KSk7CisKKwkJCS8qCisJCQkgKiBSZWNvcmQgd2hp Y2ggc3Vic2xpY2VzIGhhdmUgNyBFVXMuCisJCQkgKi8KKwkJCWlmIChldV9tYXggLSBuX2Rpc2Fi bGVkID09IDcpCisJCQkJaW5mby0+c3Vic2xpY2VfN2V1W3NdIHw9IDEgPDwgc3M7CisKKwkJCWlu Zm8tPmV1X3RvdGFsICs9IGV1X21heCAtIG5fZGlzYWJsZWQ7CisJCX0KKwl9CisKKwkvKgorCSAq IEJEVyBpcyBleHBlY3RlZCB0byBhbHdheXMgaGF2ZSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9m IEVVIGFjcm9zcworCSAqIHN1YnNsaWNlcyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgb25l IEVVIGluIGFueSBvbmUgc3Vic2xpY2UgbWF5CisJICogYmUgZnVzZWQgb2ZmIGZvciBkaWUgcmVj b3ZlcnkuCisJICovCisJaW5mby0+ZXVfcGVyX3N1YnNsaWNlID0gaW5mby0+c3Vic2xpY2VfdG90 YWwgPworCQlESVZfUk9VTkRfVVAoaW5mby0+ZXVfdG90YWwsIGluZm8tPnN1YnNsaWNlX3RvdGFs KSA6IDA7CisKKwkvKgorCSAqIEJEVyBzdXBwb3J0cyBzbGljZSBwb3dlciBnYXRpbmcgb24gZGV2 aWNlcyB3aXRoIG1vcmUgdGhhbgorCSAqIG9uZSBzbGljZS4KKwkgKi8KKwlpbmZvLT5oYXNfc2xp Y2VfcGcgPSAoaW5mby0+c2xpY2VfdG90YWwgPiAxKTsKKwlpbmZvLT5oYXNfc3Vic2xpY2VfcGcg PSAwOworCWluZm8tPmhhc19ldV9wZyA9IDA7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdmFyaW91 cyBpbnRlbF9kZXZpY2VfaW5mbyBmaWVsZHMgYXQgcnVudGltZS4KKyAqCisgKiBVc2UgaXQgd2hl biBlaXRoZXI6CisgKiAgIC0gaXQncyBqdWRnZWQgdG9vIGxhYm9yaW91cyB0byBmaWxsIG4gc3Rh dGljIHN0cnVjdHVyZXMgd2l0aCB0aGUgbGltaXQKKyAqICAgICB3aGVuIGEgc2ltcGxlIGlmIHN0 YXRlbWVudCBkb2VzIHRoZSBqb2IsCisgKiAgIC0gcnVuLXRpbWUgY2hlY2tzIChlZyByZWFkIGZ1 c2Uvc3RyYXAgcmVnaXN0ZXJzKSBhcmUgbmVlZGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbmVl ZHMgdG8gYmUgY2FsbGVkOgorICogICAtIGFmdGVyIHRoZSBNTUlPIGhhcyBiZWVuIHNldHVwIGFz IHdlIGFyZSByZWFkaW5nIHJlZ2lzdGVycywKKyAqICAgLSBhZnRlciB0aGUgUENIIGhhcyBiZWVu IGRldGVjdGVkLAorICogICAtIGJlZm9yZSB0aGUgZmlyc3QgdXNhZ2Ugb2YgdGhlIGZpZWxkcyBp dCBjYW4gdHdlYWsuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX2RldmljZV9pbmZvX3J1bnRpbWVf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2RldmljZV9pbmZv ICppbmZvOworCWVudW0gcGlwZSBwaXBlOworCisJaW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNl X2luZm8gKikmZGV2X3ByaXYtPmluZm87CisKKwkvKgorCSAqIFNreWxha2UgYW5kIEJyb3h0b24g Y3VycmVudGx5IGRvbid0IGV4cG9zZSB0aGUgdG9wbW9zdCBwbGFuZSBhcyBpdHMKKwkgKiB1c2Ug aXMgZXhjbHVzaXZlIHdpdGggdGhlIGxlZ2FjeSBjdXJzb3IgYW5kIHdlIG9ubHkgd2FudCB0byBl eHBvc2UKKwkgKiBvbmUgb2YgdGhvc2UsIG5vdCBib3RoLiBVbnRpbCB3ZSBjYW4gc2FmZWx5IGV4 cG9zZSB0aGUgdG9wbW9zdCBwbGFuZQorCSAqIGFzIGEgRFJNX1BMQU5FX1RZUEVfQ1VSU09SIHdp dGggYWxsIHRoZSBmZWF0dXJlcyBleHBvc2VkL3N1cHBvcnRlZCwKKwkgKiB3ZSBkb24ndCBleHBv c2UgdGhlIHRvcG1vc3QgcGxhbmUgYXQgYWxsIHRvIHByZXZlbnQgQUJJIGJyZWFrYWdlCisJICog ZG93biB0aGUgbGluZS4KKwkgKi8KKwlpZiAoSVNfQlJPWFRPTihkZXYpKSB7CisJCWluZm8tPm51 bV9zcHJpdGVzW1BJUEVfQV0gPSAyOworCQlpbmZvLT5udW1fc3ByaXRlc1tQSVBFX0JdID0gMjsK KwkJaW5mby0+bnVtX3Nwcml0ZXNbUElQRV9DXSA9IDE7CisJfSBlbHNlIGlmIChJU19WQUxMRVlW SUVXKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpKQorCQlmb3JfZWFjaF9waXBlKGRldl9wcml2 LCBwaXBlKQorCQkJaW5mby0+bnVtX3Nwcml0ZXNbcGlwZV0gPSAyOworCWVsc2UKKwkJZm9yX2Vh Y2hfcGlwZShkZXZfcHJpdiwgcGlwZSkKKwkJCWluZm8tPm51bV9zcHJpdGVzW3BpcGVdID0gMTsK KworCWlmIChpOTE1LmRpc2FibGVfZGlzcGxheSkgeworCQlEUk1fSU5GTygiRGlzcGxheSBkaXNh YmxlZCAobW9kdWxlIHBhcmFtZXRlcilcbiIpOworCQlpbmZvLT5udW1fcGlwZXMgPSAwOworCX0g ZWxzZSBpZiAoaW5mby0+bnVtX3BpcGVzID4gMCAmJgorCQkgICAoSVNfR0VONyhkZXZfcHJpdikg fHwgSVNfR0VOOChkZXZfcHJpdikpICYmCisJCSAgIEhBU19QQ0hfU1BMSVQoZGV2KSkgeworCQl1 MzIgZnVzZV9zdHJhcCA9IEk5MTVfUkVBRChGVVNFX1NUUkFQKTsKKwkJdTMyIHNmdXNlX3N0cmFw ID0gSTkxNV9SRUFEKFNGVVNFX1NUUkFQKTsKKworCQkvKgorCQkgKiBTRlVTRV9TVFJBUCBpcyBz dXBwb3NlZCB0byBoYXZlIGEgYml0IHNpZ25hbGxpbmcgdGhlIGRpc3BsYXkKKwkJICogaXMgZnVz ZWQgb2ZmLiBVbmZvcnR1bmF0ZWx5IGl0IHNlZW1zIHRoYXQsIGF0IGxlYXN0IGluCisJCSAqIGNl cnRhaW4gY2FzZXMsIGZ1c2VkIG9mZiBkaXNwbGF5IG1lYW5zIHRoYXQgUENIIGRpc3BsYXkKKwkJ ICogcmVhZHMgZG9uJ3QgbGFuZCBhbnl3aGVyZS4gSW4gdGhhdCBjYXNlLCB3ZSByZWFkIDBzLgor CQkgKgorCQkgKiBPbiBDUFQvUFBULCB3ZSBjYW4gZGV0ZWN0IHRoaXMgY2FzZSBhcyBTRlVTRV9T VFJBUF9GVVNFX0xPQ0sKKwkJICogc2hvdWxkIGJlIHNldCB3aGVuIHRha2luZyBvdmVyIGFmdGVy IHRoZSBmaXJtd2FyZS4KKwkJICovCisJCWlmIChmdXNlX3N0cmFwICYgSUxLX0lOVEVSTkFMX0RJ U1BMQVlfRElTQUJMRSB8fAorCQkgICAgc2Z1c2Vfc3RyYXAgJiBTRlVTRV9TVFJBUF9ESVNQTEFZ X0RJU0FCTEVEIHx8CisJCSAgICAoZGV2X3ByaXYtPnBjaF90eXBlID09IFBDSF9DUFQgJiYKKwkJ ICAgICAhKHNmdXNlX3N0cmFwICYgU0ZVU0VfU1RSQVBfRlVTRV9MT0NLKSkpIHsKKwkJCURSTV9J TkZPKCJEaXNwbGF5IGZ1c2VkIG9mZiwgZGlzYWJsaW5nXG4iKTsKKwkJCWluZm8tPm51bV9waXBl cyA9IDA7CisJCX0gZWxzZSBpZiAoZnVzZV9zdHJhcCAmIElWQl9QSVBFX0NfRElTQUJMRSkgewor CQkJRFJNX0lORk8oIlBpcGVDIGZ1c2VkIG9mZlxuIik7CisJCQlpbmZvLT5udW1fcGlwZXMgLT0g MTsKKwkJfQorCX0gZWxzZSBpZiAoaW5mby0+bnVtX3BpcGVzID4gMCAmJiBJU19HRU45KGRldl9w cml2KSkgeworCQl1MzIgZGZzbSA9IEk5MTVfUkVBRChTS0xfREZTTSk7CisJCXU4IGRpc2FibGVk X21hc2sgPSAwOworCQlib29sIGludmFsaWQ7CisJCWludCBudW1fYml0czsKKworCQlpZiAoZGZz bSAmIFNLTF9ERlNNX1BJUEVfQV9ESVNBQkxFKQorCQkJZGlzYWJsZWRfbWFzayB8PSBCSVQoUElQ RV9BKTsKKwkJaWYgKGRmc20gJiBTS0xfREZTTV9QSVBFX0JfRElTQUJMRSkKKwkJCWRpc2FibGVk X21hc2sgfD0gQklUKFBJUEVfQik7CisJCWlmIChkZnNtICYgU0tMX0RGU01fUElQRV9DX0RJU0FC TEUpCisJCQlkaXNhYmxlZF9tYXNrIHw9IEJJVChQSVBFX0MpOworCisJCW51bV9iaXRzID0gaHdl aWdodDgoZGlzYWJsZWRfbWFzayk7CisKKwkJc3dpdGNoIChkaXNhYmxlZF9tYXNrKSB7CisJCWNh c2UgQklUKFBJUEVfQSk6CisJCWNhc2UgQklUKFBJUEVfQik6CisJCWNhc2UgQklUKFBJUEVfQSkg fCBCSVQoUElQRV9CKToKKwkJY2FzZSBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0MpOgorCQkJaW52 YWxpZCA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWludmFsaWQgPSBmYWxzZTsK KwkJfQorCisJCWlmIChudW1fYml0cyA+IGluZm8tPm51bV9waXBlcyB8fCBpbnZhbGlkKQorCQkJ RFJNX0VSUk9SKCJpbnZhbGlkIHBpcGUgZnVzZSBjb25maWd1cmF0aW9uOiAweCV4XG4iLAorCQkJ CSAgZGlzYWJsZWRfbWFzayk7CisJCWVsc2UKKwkJCWluZm8tPm51bV9waXBlcyAtPSBudW1fYml0 czsKKwl9CisKKwkvKiBJbml0aWFsaXplIHNsaWNlL3N1YnNsaWNlL0VVIGluZm8gKi8KKwlpZiAo SVNfQ0hFUlJZVklFVyhkZXYpKQorCQljaGVycnl2aWV3X3NzZXVfaW5mb19pbml0KGRldik7CisJ ZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpCisJCWJyb2Fkd2VsbF9zc2V1X2luZm9faW5pdChk ZXYpOworCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpCisJCWdlbjlfc3NldV9p bmZvX2luaXQoZGV2KTsKKworCWluZm8tPmhhc19zbm9vcCA9ICFpbmZvLT5oYXNfbGxjOworCisJ LyogU25vb3BpbmcgaXMgYnJva2VuIG9uIEJYVCBBIHN0ZXBwaW5nLiAqLworCWlmIChJU19CWFRf UkVWSUQoZGV2LCAwLCBCWFRfUkVWSURfQTEpKQorCQlpbmZvLT5oYXNfc25vb3AgPSBmYWxzZTsK KworCURSTV9ERUJVR19EUklWRVIoInNsaWNlIHRvdGFsOiAldVxuIiwgaW5mby0+c2xpY2VfdG90 YWwpOworCURSTV9ERUJVR19EUklWRVIoInN1YnNsaWNlIHRvdGFsOiAldVxuIiwgaW5mby0+c3Vi c2xpY2VfdG90YWwpOworCURSTV9ERUJVR19EUklWRVIoInN1YnNsaWNlIHBlciBzbGljZTogJXVc biIsIGluZm8tPnN1YnNsaWNlX3Blcl9zbGljZSk7CisJRFJNX0RFQlVHX0RSSVZFUigiRVUgdG90 YWw6ICV1XG4iLCBpbmZvLT5ldV90b3RhbCk7CisJRFJNX0RFQlVHX0RSSVZFUigiRVUgcGVyIHN1 YnNsaWNlOiAldVxuIiwgaW5mby0+ZXVfcGVyX3N1YnNsaWNlKTsKKwlEUk1fREVCVUdfRFJJVkVS KCJoYXMgc2xpY2UgcG93ZXIgZ2F0aW5nOiAlc1xuIiwKKwkJCSBpbmZvLT5oYXNfc2xpY2VfcGcg PyAieSIgOiAibiIpOworCURSTV9ERUJVR19EUklWRVIoImhhcyBzdWJzbGljZSBwb3dlciBnYXRp bmc6ICVzXG4iLAorCQkJIGluZm8tPmhhc19zdWJzbGljZV9wZyA/ICJ5IiA6ICJuIik7CisJRFJN X0RFQlVHX0RSSVZFUigiaGFzIEVVIHBvd2VyIGdhdGluZzogJXNcbiIsCisJCQkgaW5mby0+aGFz X2V1X3BnID8gInkiIDogIm4iKTsKKworCWk5MTUuZW5hYmxlX2V4ZWNsaXN0cyA9CisJCWludGVs X3Nhbml0aXplX2VuYWJsZV9leGVjbGlzdHMoZGV2X3ByaXYsCisJCQkJCSAgICAgICAJaTkxNS5l bmFibGVfZXhlY2xpc3RzKTsKKworCS8qCisJICogaTkxNS5lbmFibGVfcHBndHQgaXMgcmVhZC1v bmx5LCBzbyBkbyBhbiBlYXJseSBwYXNzIHRvIHZhbGlkYXRlIHRoZQorCSAqIHVzZXIncyByZXF1 ZXN0ZWQgc3RhdGUgYWdhaW5zdCB0aGUgaGFyZHdhcmUvZHJpdmVyIGNhcGFiaWxpdGllcy4gIFdl CisJICogZG8gdGhpcyBub3cgc28gdGhhdCB3ZSBjYW4gcHJpbnQgb3V0IGFueSBsb2cgbWVzc2Fn ZXMgb25jZSByYXRoZXIKKwkgKiB0aGFuIGV2ZXJ5IHRpbWUgd2UgY2hlY2sgaW50ZWxfZW5hYmxl X3BwZ3R0KCkuCisJICovCisJaTkxNS5lbmFibGVfcHBndHQgPQorCQlpbnRlbF9zYW5pdGl6ZV9l bmFibGVfcHBndHQoZGV2X3ByaXYsIGk5MTUuZW5hYmxlX3BwZ3R0KTsKKwlEUk1fREVCVUdfRFJJ VkVSKCJwcGd0dCBtb2RlOiAlaVxuIiwgaTkxNS5lbmFibGVfcHBndHQpOworfQorCitzdGF0aWMg dm9pZCBpbnRlbF9pbml0X2RwaW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQor eworCS8qCisJICogSU9TRl9QT1JUX0RQSU8gaXMgdXNlZCBmb3IgVkxWIHgyIFBIWSAoRFAvSERN SSBCIGFuZCBDKSwKKwkgKiBDSFYgeDEgUEhZIChEUC9IRE1JIEQpCisJICogSU9TRl9QT1JUX0RQ SU9fMiBpcyB1c2VkIGZvciBDSFYgeDIgUEhZIChEUC9IRE1JIEIgYW5kIEMpCisJICovCisJaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCURQSU9fUEhZX0lPU0ZfUE9SVChEUElPX1BI WTApID0gSU9TRl9QT1JUX0RQSU9fMjsKKwkJRFBJT19QSFlfSU9TRl9QT1JUKERQSU9fUEhZMSkg PSBJT1NGX1BPUlRfRFBJTzsKKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7 CisJCURQSU9fUEhZX0lPU0ZfUE9SVChEUElPX1BIWTApID0gSU9TRl9QT1JUX0RQSU87CisJfQor fQorCitzdGF0aWMgaW50IGk5MTVfd29ya3F1ZXVlc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKK3sKKwkvKgorCSAqIFRoZSBpOTE1IHdvcmtxdWV1ZSBpcyBwcmltYXJp bHkgdXNlZCBmb3IgYmF0Y2hlZCByZXRpcmVtZW50IG9mCisJICogcmVxdWVzdHMgKGFuZCB0aHVz IG1hbmFnaW5nIGJvKSBvbmNlIHRoZSB0YXNrIGhhcyBiZWVuIGNvbXBsZXRlZAorCSAqIGJ5IHRo ZSBHUFUuIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cygpIGlzIGNhbGxlZCBkaXJlY3RseSB3aGVu IHdlCisJICogbmVlZCBoaWdoLXByaW9yaXR5IHJldGlyZW1lbnQsIHN1Y2ggYXMgd2FpdGluZyBm b3IgYW4gZXhwbGljaXQKKwkgKiBiby4KKwkgKgorCSAqIEl0IGlzIGFsc28gdXNlZCBmb3IgcGVy aW9kaWMgbG93LXByaW9yaXR5IGV2ZW50cywgc3VjaCBhcworCSAqIGlkbGUtdGltZXJzIGFuZCBy ZWNvcmRpbmcgZXJyb3Igc3RhdGUuCisJICoKKwkgKiBBbGwgdGFza3Mgb24gdGhlIHdvcmtxdWV1 ZSBhcmUgZXhwZWN0ZWQgdG8gYWNxdWlyZSB0aGUgZGV2IG11dGV4CisJICogc28gdGhlcmUgaXMg bm8gcG9pbnQgaW4gcnVubmluZyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIHRoZQorCSAqIHdv cmtxdWV1ZSBhdCBhbnkgdGltZS4gIFVzZSBhbiBvcmRlcmVkIG9uZS4KKwkgKi8KKwlkZXZfcHJp di0+d3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgiaTkxNSIsIDApOworCWlmIChkZXZfcHJp di0+d3EgPT0gTlVMTCkKKwkJZ290byBvdXRfZXJyOworCisJZGV2X3ByaXYtPmhvdHBsdWcuZHBf d3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgiaTkxNS1kcCIsIDApOworCWlmIChkZXZfcHJp di0+aG90cGx1Zy5kcF93cSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX3dxOworCisJZGV2X3By aXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd3EgPQorCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgi aTkxNS1oYW5nY2hlY2siLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tf d3EgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9kcF93cTsKKworCXJldHVybiAwOworCitvdXRf ZnJlZV9kcF93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+aG90cGx1Zy5kcF93cSk7 CitvdXRfZnJlZV93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOworb3V0X2Vy cjoKKwlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVzLlxuIik7CisKKwly ZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgaTkxNV93b3JrcXVldWVzX2NsZWFudXAo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWRlc3Ryb3lfd29ya3F1ZXVl KGRldl9wcml2LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShk ZXZfcHJpdi0+aG90cGx1Zy5kcF93cSk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYtPndx KTsKK30KKworLyoqCisgKiBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5IC0gc2V0dXAgc3RhdGUgbm90 IHJlcXVpcmluZyBkZXZpY2UgYWNjZXNzCisgKiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCisg KgorICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nIHRoYXQgaXMgYSAiU1ctb25seSIgc3RhdGUsIHRo YXQgaXMgc3RhdGUgbm90CisgKiByZXF1aXJpbmcgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugb3IgZXhw b3NpbmcgdGhlIGRyaXZlciB2aWEga2VybmVsIGludGVybmFsCisgKiBvciB1c2Vyc3BhY2UgaW50 ZXJmYWNlcy4gRXhhbXBsZSBzdGVwcyBiZWxvbmdpbmcgaGVyZTogbG9jayBpbml0aWFsaXphdGlv biwKKyAqIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiwgc2V0dGluZyB1cCBkZXZpY2Ugc3BlY2lm aWMgYXR0cmlidXRlcyBhbmQKKyAqIGZ1bmN0aW9uIGhvb2tzIG5vdCByZXF1aXJpbmcgYWNjZXNz aW5nIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9lYXJseShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNp X2RldmljZV9pZCAqZW50KQoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqbWF0 Y2hfaW5mbyA9CisJCShzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKillbnQtPmRyaXZlcl9kYXRh OworCXN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm87CisJaW50IHJldCA9IDA7 CisKKwlpZiAoaTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKCkpCisJCXJldHVybiAtRU5PREVWOwor CisJLyogU2V0dXAgdGhlIHdyaXRlLW9uY2UgImNvbnN0YW50IiBkZXZpY2UgaW5mbyAqLworCWRl dmljZV9pbmZvID0gKHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+aW5mbzsK KwltZW1jcHkoZGV2aWNlX2luZm8sIG1hdGNoX2luZm8sIHNpemVvZigqZGV2aWNlX2luZm8pKTsK KwlkZXZpY2VfaW5mby0+ZGV2aWNlX2lkID0gZGV2X3ByaXYtPmRybS5wZGV2LT5kZXZpY2U7CisK KwlCVUdfT04oZGV2aWNlX2luZm8tPmdlbiA+IHNpemVvZihkZXZpY2VfaW5mby0+Z2VuX21hc2sp ICogQklUU19QRVJfQllURSk7CisJZGV2aWNlX2luZm8tPmdlbl9tYXNrID0gQklUKGRldmljZV9p bmZvLT5nZW4gLSAxKTsKKworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aXJxX2xvY2spOwor CXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmxvY2spOworCW11dGV4X2luaXQo JmRldl9wcml2LT5iYWNrbGlnaHRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT51 bmNvcmUubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5tbS5vYmplY3Rfc3RhdF9s b2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPm1taW9fZmxpcF9sb2NrKTsKKwltdXRl eF9pbml0KCZkZXZfcHJpdi0+c2JfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPm1vZGVz ZXRfcmVzdG9yZV9sb2NrKTsKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+YXZfbXV0ZXgpOworCW11 dGV4X2luaXQoJmRldl9wcml2LT53bS53bV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYt PnBwc19tdXRleCk7CisKKwlyZXQgPSBpOTE1X3dvcmtxdWV1ZXNfaW5pdChkZXZfcHJpdik7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJl Zm9yZSBhbnkgY2FsbHMgdG8gSEFTX1BDSF8qICovCisJaW50ZWxfZGV0ZWN0X3BjaCgmZGV2X3By aXYtPmRybSk7CisKKwlpbnRlbF9wbV9zZXR1cCgmZGV2X3ByaXYtPmRybSk7CisJaW50ZWxfaW5p dF9kcGlvKGRldl9wcml2KTsKKwlpbnRlbF9wb3dlcl9kb21haW5zX2luaXQoZGV2X3ByaXYpOwor CWludGVsX2lycV9pbml0KGRldl9wcml2KTsKKwlpbnRlbF9pbml0X2Rpc3BsYXlfaG9va3MoZGV2 X3ByaXYpOworCWludGVsX2luaXRfY2xvY2tfZ2F0aW5nX2hvb2tzKGRldl9wcml2KTsKKwlpbnRl bF9pbml0X2F1ZGlvX2hvb2tzKGRldl9wcml2KTsKKwlpOTE1X2dlbV9sb2FkX2luaXQoJmRldl9w cml2LT5kcm0pOworCisJaW50ZWxfZGlzcGxheV9jcmNfaW5pdCgmZGV2X3ByaXYtPmRybSk7CisK KwlpOTE1X2R1bXBfZGV2aWNlX2luZm8oZGV2X3ByaXYpOworCisJLyogTm90IGFsbCBwcmUtcHJv ZHVjdGlvbiBtYWNoaW5lcyBmYWxsIGludG8gdGhpcyBjYXRlZ29yeSwgb25seSB0aGUKKwkgKiB2 ZXJ5IGZpcnN0IG9uZXMuIEFsbW9zdCBldmVyeXRoaW5nIHNob3VsZCB3b3JrLCBleGNlcHQgZm9y IG1heWJlCisJICogc3VzcGVuZC9yZXN1bWUuIEFuZCB3ZSBkb24ndCBpbXBsZW1lbnQgd29ya2Fy b3VuZHMgdGhhdCBhZmZlY3Qgb25seQorCSAqIHByZS1wcm9kdWN0aW9uIG1hY2hpbmVzLiAqLwor CWlmIChJU19IU1dfRUFSTFlfU0RWKGRldl9wcml2KSkKKwkJRFJNX0lORk8oIlRoaXMgaXMgYW4g ZWFybHkgcHJlLXByb2R1Y3Rpb24gSGFzd2VsbCBtYWNoaW5lLiAiCisJCQkgIkl0IG1heSBub3Qg YmUgZnVsbHkgZnVuY3Rpb25hbC5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaTkx NV9kcml2ZXJfY2xlYW51cF9lYXJseSAtIGNsZWFudXAgdGhlIHNldHVwIGRvbmUgaW4gaTkxNV9k cml2ZXJfaW5pdF9lYXJseSgpCisgKiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCisgKi8KK3N0 YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFudXBfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQoreworCWk5MTVfZ2VtX2xvYWRfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsK KwlpOTE1X3dvcmtxdWV1ZXNfY2xlYW51cChkZXZfcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgaTkx NV9tbWlvX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCWludCBtbWlvX2JhcjsKKwlpbnQg bW1pb19zaXplOworCisJbW1pb19iYXIgPSBJU19HRU4yKGRldikgPyAxIDogMDsKKwkvKgorCSAq IEJlZm9yZSBnZW40LCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgR1RUIGFyZSBiZWhpbmQgZGlmZmVy ZW50IEJBUnMuCisJICogSG93ZXZlciwgZnJvbSBnZW40IG9ud2FyZHMsIHRoZSByZWdpc3RlcnMg YW5kIHRoZSBHVFQgYXJlIHNoYXJlZAorCSAqIGluIHRoZSBzYW1lIEJBUiwgc28gd2Ugd2FudCB0 byByZXN0cmljdCB0aGlzIGlvcmVtYXAgZnJvbQorCSAqIGNsb2JiZXJpbmcgdGhlIEdUVCB3aGlj aCB3ZSB3YW50IGlvcmVtYXBfd2MgaW5zdGVhZC4gRm9ydHVuYXRlbHksCisJICogdGhlIHJlZ2lz dGVyIEJBUiByZW1haW5zIHRoZSBzYW1lIHNpemUgZm9yIGFsbCB0aGUgZWFybGllcgorCSAqIGdl bmVyYXRpb25zIHVwIHRvIElyb25sYWtlLgorCSAqLworCWlmIChJTlRFTF9JTkZPKGRldiktPmdl biA8IDUpCisJCW1taW9fc2l6ZSA9IDUxMiAqIDEwMjQ7CisJZWxzZQorCQltbWlvX3NpemUgPSAy ICogMTAyNCAqIDEwMjQ7CisJZGV2X3ByaXYtPnJlZ3MgPSBwY2lfaW9tYXAoZGV2LT5wZGV2LCBt bWlvX2JhciwgbW1pb19zaXplKTsKKwlpZiAoZGV2X3ByaXYtPnJlZ3MgPT0gTlVMTCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKworCQlyZXR1cm4gLUVJTzsK Kwl9CisKKwkvKiBUcnkgdG8gbWFrZSBzdXJlIE1DSEJBUiBpcyBlbmFibGVkIGJlZm9yZSBwb2tp bmcgYXQgaXQgKi8KKwlpbnRlbF9zZXR1cF9tY2hiYXIoZGV2KTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBpOTE1X21taW9fY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwor CWludGVsX3RlYXJkb3duX21jaGJhcihkZXYpOworCXBjaV9pb3VubWFwKGRldi0+cGRldiwgZGV2 X3ByaXYtPnJlZ3MpOworfQorCisvKioKKyAqIGk5MTVfZHJpdmVyX2luaXRfbW1pbyAtIHNldHVw IGRldmljZSBNTUlPCisgKiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCisgKgorICogU2V0dXAg bWluaW1hbCBkZXZpY2Ugc3RhdGUgbmVjZXNzYXJ5IGZvciBNTUlPIGFjY2Vzc2VzIGxhdGVyIGlu IHRoZQorICogaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZSBzZXR1cCBoZXJlIHNob3VsZCBh dm9pZCBhbnkgb3RoZXIgZGV2aWNlLXdpZGUKKyAqIHNpZGUgZWZmZWN0cyBvciBleHBvc2luZyB0 aGUgZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJuYWwgb3IgdXNlciBzcGFjZQorICogaW50ZXJmYWNl cy4KKyAqLworc3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X21taW8oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJp di0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoaTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKCkpCisJ CXJldHVybiAtRU5PREVWOworCisJaWYgKGk5MTVfZ2V0X2JyaWRnZV9kZXYoZGV2KSkKKwkJcmV0 dXJuIC1FSU87CisKKwlyZXQgPSBpOTE1X21taW9fc2V0dXAoZGV2KTsKKwlpZiAocmV0IDwgMCkK KwkJZ290byBwdXRfYnJpZGdlOworCisJaW50ZWxfdW5jb3JlX2luaXQoZGV2X3ByaXYpOworCisJ cmV0dXJuIDA7CisKK3B1dF9icmlkZ2U6CisJcGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9k ZXYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpOTE1X2RyaXZlcl9jbGVhbnVwX21t aW8gLSBjbGVhbnVwIHRoZSBzZXR1cCBkb25lIGluIGk5MTVfZHJpdmVyX2luaXRfbW1pbygpCisg KiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfZHJpdmVy X2NsZWFudXBfbW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisKKwlpbnRlbF91bmNvcmVfZmlu aShkZXZfcHJpdik7CisJaTkxNV9tbWlvX2NsZWFudXAoZGV2KTsKKwlwY2lfZGV2X3B1dChkZXZf cHJpdi0+YnJpZGdlX2Rldik7Cit9CisKKy8qKgorICogaTkxNV9kcml2ZXJfaW5pdF9odyAtIHNl dHVwIHN0YXRlIHJlcXVpcmluZyBkZXZpY2UgYWNjZXNzCisgKiBAZGV2X3ByaXY6IGRldmljZSBw cml2YXRlCisgKgorICogU2V0dXAgc3RhdGUgdGhhdCByZXF1aXJlcyBhY2Nlc3NpbmcgdGhlIGRl dmljZSwgYnV0IGRvZXNuJ3QgcmVxdWlyZQorICogZXhwb3NpbmcgdGhlIGRyaXZlciB2aWEga2Vy bmVsIGludGVybmFsIG9yIHVzZXJzcGFjZSBpbnRlcmZhY2VzLgorICovCitzdGF0aWMgaW50IGk5 MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorewor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBpOTE1X2dn dHQgKmdndHQgPSAmZGV2X3ByaXYtPmdndHQ7CisJdWludDMyX3QgYXBlcnR1cmVfc2l6ZTsKKwlp bnQgcmV0OworCisJaWYgKGk5MTVfaW5qZWN0X2xvYWRfZmFpbHVyZSgpKQorCQlyZXR1cm4gLUVO T0RFVjsKKworCWludGVsX2RldmljZV9pbmZvX3J1bnRpbWVfaW5pdChkZXYpOworCisJcmV0ID0g aTkxNV9nZ3R0X2luaXRfaHcoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gaTkxNV9nZ3R0X2VuYWJsZV9odyhkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gZW5hYmxlIEdHVFRcbiIpOworCQlnb3RvIG91dF9nZ3R0OworCX0KKworCS8qIFdB Uk5JTkc6IEFwcGFyZW50bHkgd2UgbXVzdCBraWNrIGZiZGV2IGRyaXZlcnMgYmVmb3JlIHZnYWNv biwKKwkgKiBvdGhlcndpc2UgdGhlIHZnYSBmYmRldiBkcml2ZXIgZmFsbHMgb3Zlci4gKi8KKwly ZXQgPSBpOTE1X2tpY2tfb3V0X2Zpcm13YXJlX2ZiKGRldl9wcml2KTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIHJlbW92ZSBjb25mbGljdGluZyBmcmFtZWJ1ZmZlciBkcml2 ZXJzXG4iKTsKKwkJZ290byBvdXRfZ2d0dDsKKwl9CisKKwlyZXQgPSBpOTE1X2tpY2tfb3V0X3Zn YWNvbihkZXZfcHJpdik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZW1v dmUgY29uZmxpY3RpbmcgVkdBIGNvbnNvbGVcbiIpOworCQlnb3RvIG91dF9nZ3R0OworCX0KKwor CXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7CisKKwkvKiBvdmVybGF5IG9uIGdlbjIgaXMgYnJv a2VuIGFuZCBjYW4ndCBhZGRyZXNzIGFib3ZlIDFHICovCisJaWYgKElTX0dFTjIoZGV2KSkgewor CQlyZXQgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soJmRldi0+cGRldi0+ZGV2LCBETUFfQklUX01B U0soMzApKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IERNQSBt YXNrXG4iKTsKKworCQkJZ290byBvdXRfZ2d0dDsKKwkJfQorCX0KKworCisJLyogOTY1R00gc29t ZXRpbWVzIGluY29ycmVjdGx5IHdyaXRlcyB0byBoYXJkd2FyZSBzdGF0dXMgcGFnZSAoSFdTKQor CSAqIHVzaW5nIDMyYml0IGFkZHJlc3NpbmcsIG92ZXJ3cml0aW5nIG1lbW9yeSBpZiBIV1MgaXMg bG9jYXRlZAorCSAqIGFib3ZlIDRHQi4KKwkgKgorCSAqIFRoZSBkb2N1bWVudGF0aW9uIGFsc28g bWVudGlvbnMgYW4gaXNzdWUgd2l0aCB1bmRlZmluZWQKKwkgKiBiZWhhdmlvdXIgaWYgYW55IGdl bmVyYWwgc3RhdGUgaXMgYWNjZXNzZWQgd2l0aGluIGEgcGFnZSBhYm92ZSA0R0IsCisJICogd2hp Y2ggYWxzbyBuZWVkcyB0byBiZSBoYW5kbGVkIGNhcmVmdWxseS4KKwkgKi8KKwlpZiAoSVNfQlJP QURXQVRFUihkZXYpIHx8IElTX0NSRVNUTElORShkZXYpKSB7CisJCXJldCA9IGRtYV9zZXRfY29o ZXJlbnRfbWFzaygmZGV2LT5wZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJCWlmIChy ZXQpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBETUEgbWFza1xuIik7CisKKwkJCWdv dG8gb3V0X2dndHQ7CisJCX0KKwl9CisKKwlhcGVydHVyZV9zaXplID0gZ2d0dC0+bWFwcGFibGVf ZW5kOworCisJZ2d0dC0+bWFwcGFibGUgPQorCQlpb19tYXBwaW5nX2NyZWF0ZV93YyhnZ3R0LT5t YXBwYWJsZV9iYXNlLAorCQkJCSAgICAgYXBlcnR1cmVfc2l6ZSk7CisJaWYgKCFnZ3R0LT5tYXBw YWJsZSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9nZ3R0OworCX0KKworCWdndHQtPm10 cnIgPSBhcmNoX3BoeXNfd2NfYWRkKGdndHQtPm1hcHBhYmxlX2Jhc2UsCisJCQkJCSAgICAgIGFw ZXJ0dXJlX3NpemUpOworCisJcG1fcW9zX2FkZF9yZXF1ZXN0KCZkZXZfcHJpdi0+cG1fcW9zLCBQ TV9RT1NfQ1BVX0RNQV9MQVRFTkNZLAorCQkJICAgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOworCisJ aW50ZWxfdW5jb3JlX3Nhbml0aXplKGRldl9wcml2KTsKKworCWludGVsX29wcmVnaW9uX3NldHVw KGRldl9wcml2KTsKKworCWk5MTVfZ2VtX2xvYWRfaW5pdF9mZW5jZXMoZGV2X3ByaXYpOworCisJ LyogT24gdGhlIDk0NUcvR00sIHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5 IG9uIHRoZQorCSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgZXZlbiB0aG91Z2ggdGhlIHN1cHBvcnQg aXNuJ3QgYWN0dWFsbHkgdGhlcmUKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIHB1Ymxpc2hlZCBzcGVj cy4gIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGZ1bmN0aW9uCisJICogY29ycmVjdGx5IGluIHRlc3Rp bmcgb24gOTQ1Ry4KKwkgKiBUaGlzIG1heSBiZSBhIHNpZGUgZWZmZWN0IG9mIE1TSSBoYXZpbmcg YmVlbiBtYWRlIGF2YWlsYWJsZSBmb3IgUEVHCisJICogYW5kIHRoZSByZWdpc3RlcnMgYmVpbmcg Y2xvc2VseSBhc3NvY2lhdGVkLgorCSAqCisJICogQWNjb3JkaW5nIHRvIGNoaXBzZXQgZXJyYXRh LCBvbiB0aGUgOTY1R00sIE1TSSBpbnRlcnJ1cHRzIG1heQorCSAqIGJlIGxvc3Qgb3IgZGVsYXll ZCwgYnV0IHdlIHVzZSB0aGVtIGFueXdheXMgdG8gYXZvaWQKKwkgKiBzdHVjayBpbnRlcnJ1cHRz IG9uIHNvbWUgbWFjaGluZXMuCisJICovCisJaWYgKCFJU19JOTQ1RyhkZXYpICYmICFJU19JOTQ1 R00oZGV2KSkgeworCQlpZiAocGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KSA8IDApCisJCQlEUk1f REVCVUdfRFJJVkVSKCJjYW4ndCBlbmFibGUgTVNJIik7CisJfQorCisJcmV0dXJuIDA7CisKK291 dF9nZ3R0OgorCWk5MTVfZ2d0dF9jbGVhbnVwX2h3KGRldik7CisKKwlyZXR1cm4gcmV0OworfQor CisvKioKKyAqIGk5MTVfZHJpdmVyX2NsZWFudXBfaHcgLSBjbGVhbnVwIHRoZSBzZXR1cCBkb25l IGluIGk5MTVfZHJpdmVyX2luaXRfaHcoKQorICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0ZQor ICovCitzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9jbGVhbnVwX2h3KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYt PmRldjsKKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0OworCisJaWYg KGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCXBjaV9kaXNhYmxlX21zaShkZXYtPnBkZXYpOwor CisJcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZkZXZfcHJpdi0+cG1fcW9zKTsKKwlhcmNoX3BoeXNf d2NfZGVsKGdndHQtPm10cnIpOworCWlvX21hcHBpbmdfZnJlZShnZ3R0LT5tYXBwYWJsZSk7CisJ aTkxNV9nZ3R0X2NsZWFudXBfaHcoZGV2KTsKK30KKworLyoqCisgKiBpOTE1X2RyaXZlcl9yZWdp c3RlciAtIHJlZ2lzdGVyIHRoZSBkcml2ZXIgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCisg KiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCisgKgorICogUGVyZm9ybSBhbnkgc3RlcHMgbmVj ZXNzYXJ5IHRvIG1ha2UgdGhlIGRyaXZlciBhdmFpbGFibGUgdmlhIGtlcm5lbAorICogaW50ZXJu YWwgb3IgdXNlcnNwYWNlIGludGVyZmFjZXMuCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfZHJpdmVy X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCWk5MTVfZ2VtX3Nocmlua2VyX2lu aXQoZGV2X3ByaXYpOworCisJLyoKKwkgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1v ZGVzZXR0aW5nLAorCSAqIHdoZW4gcnVubmluZyBpbnNpZGUgYSBWTS4KKwkgKi8KKwlpZiAoaW50 ZWxfdmdwdV9hY3RpdmUoZGV2X3ByaXYpKQorCQlJOTE1X1dSSVRFKHZndGlmX3JlZyhkaXNwbGF5 X3JlYWR5KSwgVkdUX0RSVl9ESVNQTEFZX1JFQURZKTsKKworCS8qIFJldmVhbCBvdXIgcHJlc2Vu Y2UgdG8gdXNlcnNwYWNlICovCisJaWYgKGRybV9kZXZfcmVnaXN0ZXIoZGV2LCAwKSA9PSAwKSB7 CisJCWk5MTVfZGVidWdmc19yZWdpc3RlcihkZXZfcHJpdik7CisJCWk5MTVfc2V0dXBfc3lzZnMo ZGV2KTsKKwkJaW50ZWxfbW9kZXNldF9yZWdpc3RlcihkZXZfcHJpdik7CisJfSBlbHNlCisJCURS TV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRyaXZlciBmb3IgdXNlcnNwYWNlIGFjY2VzcyFc biIpOworCisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMpIHsKKwkJLyogTXVz dCBiZSBkb25lIGFmdGVyIHByb2Jpbmcgb3V0cHV0cyAqLworCQlpbnRlbF9vcHJlZ2lvbl9yZWdp c3RlcihkZXZfcHJpdik7CisJCWFjcGlfdmlkZW9fcmVnaXN0ZXIoKTsKKwl9CisKKwlpZiAoSVNf R0VONShkZXZfcHJpdikpCisJCWludGVsX2dwdV9pcHNfaW5pdChkZXZfcHJpdik7CisKKwlpOTE1 X2F1ZGlvX2NvbXBvbmVudF9pbml0KGRldl9wcml2KTsKKworCS8qCisJICogU29tZSBwb3J0cyBy ZXF1aXJlIGNvcnJlY3RseSBzZXQtdXAgaHBkIHJlZ2lzdGVycyBmb3IgZGV0ZWN0aW9uIHRvCisJ ICogd29yayBwcm9wZXJseSAobGVhZGluZyB0byBnaG9zdCBjb25uZWN0ZWQgY29ubmVjdG9yIHN0 YXR1cyksIGUuZy4gVkdBCisJICogb24gZ200NS4gIEhlbmNlIHdlIGNhbiBvbmx5IHNldCB1cCB0 aGUgaW5pdGlhbCBmYmRldiBjb25maWcgYWZ0ZXIgaHBkCisJICogaXJxcyBhcmUgZnVsbHkgZW5h YmxlZC4gTm93IHdlIHNob3VsZCBzY2FuIGZvciB0aGUgaW5pdGlhbCBjb25maWcKKwkgKiBvbmx5 IG9uY2UgaG90cGx1ZyBoYW5kbGluZyBpcyBlbmFibGVkLCBidXQgZHVlIHRvIHNjcmV3ZWQtdXAg bG9ja2luZworCSAqIGFyb3VuZCBrbXMvZmJkZXYgaW5pdCB3ZSBjYW4ndCBwcm90ZWN0IHRoZSBm ZGJldiBpbml0aWFsIGNvbmZpZworCSAqIHNjYW5uaW5nIGFnYWluc3QgaG90cGx1ZyBldmVudHMu IEhlbmNlIGRvIHRoaXMgZmlyc3QgYW5kIGlnbm9yZSB0aGUKKwkgKiB0aW55IHdpbmRvdyB3aGVy ZSB3ZSB3aWxsIGxvb3NlIGhvdHBsdWcgbm90aWZhY3Rpb25zLgorCSAqLworCWludGVsX2ZiZGV2 X2luaXRpYWxfY29uZmlnX2FzeW5jKGRldik7Cit9CisKKy8qKgorICogaTkxNV9kcml2ZXJfdW5y ZWdpc3RlciAtIGNsZWFudXAgdGhlIHJlZ2lzdHJhdGlvbiBkb25lIGluIGk5MTVfZHJpdmVyX3Jl Z2lzZXIoKQorICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0ZQorICovCitzdGF0aWMgdm9pZCBp OTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK K3sKKwlpOTE1X2F1ZGlvX2NvbXBvbmVudF9jbGVhbnVwKGRldl9wcml2KTsKKworCWludGVsX2dw dV9pcHNfdGVhcmRvd24oKTsKKwlhY3BpX3ZpZGVvX3VucmVnaXN0ZXIoKTsKKwlpbnRlbF9vcHJl Z2lvbl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKworCWludGVsX21vZGVzZXRfdW5yZWdpc3Rlcihk ZXZfcHJpdik7CisJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdi0+ZGV2KTsKKwlpOTE1X2Rl YnVnZnNfdW5yZWdpc3RlcihkZXZfcHJpdik7CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRldl9wcml2 LT5kZXYpOworCisJaTkxNV9nZW1fc2hyaW5rZXJfY2xlYW51cChkZXZfcHJpdik7Cit9CisKKy8q KgorICogaTkxNV9kcml2ZXJfbG9hZCAtIHNldHVwIGNoaXAgYW5kIGNyZWF0ZSBhbiBpbml0aWFs IGNvbmZpZworICogQGRldjogRFJNIGRldmljZQorICogQGZsYWdzOiBzdGFydHVwIGZsYWdzCisg KgorICogVGhlIGRyaXZlciBsb2FkIHJvdXRpbmUgaGFzIHRvIGRvIHNldmVyYWwgdGhpbmdzOgor ICogICAtIGRyaXZlIG91dHB1dCBkaXNjb3ZlcnkgdmlhIGludGVsX21vZGVzZXRfaW5pdCgpCisg KiAgIC0gaW5pdGlhbGl6ZSB0aGUgbWVtb3J5IG1hbmFnZXIKKyAqICAgLSBhbGxvY2F0ZSBpbml0 aWFsIGNvbmZpZyBtZW1vcnkKKyAqICAgLSBzZXR1cCB0aGUgRFJNIGZyYW1lYnVmZmVyIHdpdGgg dGhlIGFsbG9jYXRlZCBtZW1vcnkKKyAqLworc3RhdGljIGludCBpOTE1X2RyaXZlcl9sb2FkKHN0 cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpl bnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OworCWludCByZXQ7CiAK LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9pbmZv ID0gewotCUJEV19GRUFUVVJFUywKLQkuaXNfc2t5bGFrZSA9IDEsCi0JLmdlbiA9IDksCi19Owor CWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYg KGRldl9wcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3NreWxha2VfZ3QzX2luZm8gPSB7Ci0JQkRXX0ZF QVRVUkVTLAotCS5pc19za3lsYWtlID0gMSwKLQkuZ2VuID0gOSwKLQkucmluZ19tYXNrID0gUkVO REVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywK LX07CisJcmV0ID0gZHJtX2Rldl9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmZHJpdmVyLCAmcGRldi0+ ZGV2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGRldl9wcml2KTsKKwkJZ290byBvdXQ7CisJfQog Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb3h0b25faW5m byA9IHsKLQkuaXNfcHJlbGltaW5hcnkgPSAxLAotCS5pc19icm94dG9uID0gMSwKLQkuZ2VuID0g OSwKLQkubmVlZF9nZnhfaHdzID0gMSwgLmhhc19ob3RwbHVnID0gMSwKLQkucmluZ19tYXNrID0g UkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORywKLQkubnVtX3Bp cGVzID0gMywKLQkuaGFzX2RkaSA9IDEsCi0JLmhhc19mcGdhX2RiZyA9IDEsCi0JLmhhc19mYmMg PSAxLAotCUdFTl9ERUZBVUxUX1BJUEVPRkZTRVRTLAotCUlWQl9DVVJTT1JfT0ZGU0VUUywKLQlC RFdfQ09MT1JTLAotfTsKKwkvKiBNdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyBfX2k5MTVfcHJp bnRrICovCisJZGV2X3ByaXYtPmRybS5wZGV2ID0gcGRldjsKKwlkZXZfcHJpdi0+ZHJtLmRldl9w cml2YXRlID0gZGV2X3ByaXY7CisJZGV2X3ByaXYtPmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCi1z dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2thYnlsYWtlX2luZm8g PSB7Ci0JQkRXX0ZFQVRVUkVTLAotCS5pc19rYWJ5bGFrZSA9IDEsCi0JLmdlbiA9IDksCi19Owor CXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Zy ZWVfcHJpdjsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9r YWJ5bGFrZV9ndDNfaW5mbyA9IHsKLQlCRFdfRkVBVFVSRVMsCi0JLmlzX2thYnlsYWtlID0gMSwK LQkuZ2VuID0gOSwKLQkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9S SU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywKLX07CisJcGNpX3NldF9kcnZkYXRhKHBkZXYs ICZkZXZfcHJpdi0+ZHJtKTsKIAotLyoKLSAqIE1ha2Ugc3VyZSBhbnkgZGV2aWNlIG1hdGNoZXMg aGVyZSBhcmUgZnJvbSBtb3N0IHNwZWNpZmljIHRvIG1vc3QKLSAqIGdlbmVyYWwuICBGb3IgZXhh bXBsZSwgc2luY2UgdGhlIFF1YW50YSBtYXRjaCBpcyBiYXNlZCBvbiB0aGUgc3Vic3lzdGVtCi0g KiBhbmQgc3VidmVuZG9yIElEcywgd2UgbmVlZCBpdCB0byBjb21lIGJlZm9yZSB0aGUgbW9yZSBn ZW5lcmFsIElWQgotICogUENJIElEIG1hdGNoZXMsIG90aGVyd2lzZSB3ZSdsbCB1c2UgdGhlIHdy b25nIGluZm8gc3RydWN0IGFib3ZlLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZp Y2VfaWQgcGNpaWRsaXN0W10gPSB7Ci0JSU5URUxfSTgzMF9JRFMoJmludGVsX2k4MzBfaW5mbyks Ci0JSU5URUxfSTg0NUdfSURTKCZpbnRlbF84NDVnX2luZm8pLAotCUlOVEVMX0k4NVhfSURTKCZp bnRlbF9pODV4X2luZm8pLAotCUlOVEVMX0k4NjVHX0lEUygmaW50ZWxfaTg2NWdfaW5mbyksCi0J SU5URUxfSTkxNUdfSURTKCZpbnRlbF9pOTE1Z19pbmZvKSwKLQlJTlRFTF9JOTE1R01fSURTKCZp bnRlbF9pOTE1Z21faW5mbyksCi0JSU5URUxfSTk0NUdfSURTKCZpbnRlbF9pOTQ1Z19pbmZvKSwK LQlJTlRFTF9JOTQ1R01fSURTKCZpbnRlbF9pOTQ1Z21faW5mbyksCi0JSU5URUxfSTk2NUdfSURT KCZpbnRlbF9pOTY1Z19pbmZvKSwKLQlJTlRFTF9HMzNfSURTKCZpbnRlbF9nMzNfaW5mbyksCi0J SU5URUxfSTk2NUdNX0lEUygmaW50ZWxfaTk2NWdtX2luZm8pLAotCUlOVEVMX0dNNDVfSURTKCZp bnRlbF9nbTQ1X2luZm8pLAotCUlOVEVMX0c0NV9JRFMoJmludGVsX2c0NV9pbmZvKSwKLQlJTlRF TF9QSU5FVklFV19JRFMoJmludGVsX3BpbmV2aWV3X2luZm8pLAotCUlOVEVMX0lST05MQUtFX0Rf SURTKCZpbnRlbF9pcm9ubGFrZV9kX2luZm8pLAotCUlOVEVMX0lST05MQUtFX01fSURTKCZpbnRl bF9pcm9ubGFrZV9tX2luZm8pLAotCUlOVEVMX1NOQl9EX0lEUygmaW50ZWxfc2FuZHlicmlkZ2Vf ZF9pbmZvKSwKLQlJTlRFTF9TTkJfTV9JRFMoJmludGVsX3NhbmR5YnJpZGdlX21faW5mbyksCi0J SU5URUxfSVZCX1FfSURTKCZpbnRlbF9pdnlicmlkZ2VfcV9pbmZvKSwgLyogbXVzdCBiZSBmaXJz dCBJVkIgKi8KLQlJTlRFTF9JVkJfTV9JRFMoJmludGVsX2l2eWJyaWRnZV9tX2luZm8pLAotCUlO VEVMX0lWQl9EX0lEUygmaW50ZWxfaXZ5YnJpZGdlX2RfaW5mbyksCi0JSU5URUxfSFNXX0RfSURT KCZpbnRlbF9oYXN3ZWxsX2RfaW5mbyksCi0JSU5URUxfSFNXX01fSURTKCZpbnRlbF9oYXN3ZWxs X21faW5mbyksCi0JSU5URUxfVkxWX01fSURTKCZpbnRlbF92YWxsZXl2aWV3X21faW5mbyksCi0J SU5URUxfVkxWX0RfSURTKCZpbnRlbF92YWxsZXl2aWV3X2RfaW5mbyksCi0JSU5URUxfQkRXX0dU MTJNX0lEUygmaW50ZWxfYnJvYWR3ZWxsX21faW5mbyksCi0JSU5URUxfQkRXX0dUMTJEX0lEUygm aW50ZWxfYnJvYWR3ZWxsX2RfaW5mbyksCi0JSU5URUxfQkRXX0dUM01fSURTKCZpbnRlbF9icm9h ZHdlbGxfZ3QzbV9pbmZvKSwKLQlJTlRFTF9CRFdfR1QzRF9JRFMoJmludGVsX2Jyb2Fkd2VsbF9n dDNkX2luZm8pLAotCUlOVEVMX0NIVl9JRFMoJmludGVsX2NoZXJyeXZpZXdfaW5mbyksCi0JSU5U RUxfU0tMX0dUMV9JRFMoJmludGVsX3NreWxha2VfaW5mbyksCi0JSU5URUxfU0tMX0dUMl9JRFMo JmludGVsX3NreWxha2VfaW5mbyksCi0JSU5URUxfU0tMX0dUM19JRFMoJmludGVsX3NreWxha2Vf Z3QzX2luZm8pLAotCUlOVEVMX1NLTF9HVDRfSURTKCZpbnRlbF9za3lsYWtlX2d0M19pbmZvKSwK LQlJTlRFTF9CWFRfSURTKCZpbnRlbF9icm94dG9uX2luZm8pLAotCUlOVEVMX0tCTF9HVDFfSURT KCZpbnRlbF9rYWJ5bGFrZV9pbmZvKSwKLQlJTlRFTF9LQkxfR1QyX0lEUygmaW50ZWxfa2FieWxh a2VfaW5mbyksCi0JSU5URUxfS0JMX0dUM19JRFMoJmludGVsX2thYnlsYWtlX2d0M19pbmZvKSwK LQlJTlRFTF9LQkxfR1Q0X0lEUygmaW50ZWxfa2FieWxha2VfZ3QzX2luZm8pLAotCXswLCAwLCAw fQotfTsKKwlyZXQgPSBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KGRldl9wcml2LCBlbnQpOworCWlm IChyZXQgPCAwKQorCQlnb3RvIG91dF9wY2lfZGlzYWJsZTsKIAotTU9EVUxFX0RFVklDRV9UQUJM RShwY2ksIHBjaWlkbGlzdCk7CisJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwogCi1z dGF0aWMgZW51bSBpbnRlbF9wY2ggaW50ZWxfdmlydF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCi17Ci0JZW51bSBpbnRlbF9wY2ggcmV0ID0gUENIX05PUDsKKwlyZXQgPSBpOTE1 X2RyaXZlcl9pbml0X21taW8oZGV2X3ByaXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9y dW50aW1lX3BtX3B1dDsKKworCXJldCA9IGk5MTVfZHJpdmVyX2luaXRfaHcoZGV2X3ByaXYpOwor CWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9jbGVhbnVwX21taW87CiAKIAkvKgotCSAqIEluIGEg dmlydHVhbGl6ZWQgcGFzc3Rocm91Z2ggZW52aXJvbm1lbnQgd2UgY2FuIGJlIGluIGEKLQkgKiBz ZXR1cCB3aGVyZSB0aGUgSVNBIGJyaWRnZSBpcyBub3QgYWJsZSB0byBiZSBwYXNzZWQgdGhyb3Vn aC4KLQkgKiBJbiB0aGlzIGNhc2UsIGEgc291dGggYnJpZGdlIGNhbiBiZSBlbXVsYXRlZCBhbmQg d2UgaGF2ZSB0bwotCSAqIG1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MgYXMgdG8gd2hpY2ggUENIIGlz IHJlYWxseSB0aGVyZS4KKwkgKiBUT0RPOiBtb3ZlIHRoZSB2YmxhbmsgaW5pdCBhbmQgcGFydHMg b2YgbW9kZXNldCBpbml0IHN0ZXBzIGludG8gb25lCisJICogb2YgdGhlIGk5MTVfZHJpdmVyX2lu aXRfL2k5MTVfZHJpdmVyX3JlZ2lzdGVyIGZ1bmN0aW9ucyBhY2NvcmRpbmcKKwkgKiB0byB0aGUg cm9sZS9lZmZlY3Qgb2YgdGhlIGdpdmVuIGluaXQgc3RlcC4KIAkgKi8KLQotCWlmIChJU19HRU41 KGRldikpIHsKLQkJcmV0ID0gUENIX0lCWDsKLQkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgSWJl eCBQZWFrIFBDSFxuIik7Ci0JfSBlbHNlIGlmIChJU19HRU42KGRldikgfHwgSVNfSVZZQlJJREdF KGRldikpIHsKLQkJcmV0ID0gUENIX0NQVDsKLQkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgQ291 YXJQb2ludCBQQ0hcbiIpOwotCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FE V0VMTChkZXYpKSB7Ci0JCXJldCA9IFBDSF9MUFQ7Ci0JCURSTV9ERUJVR19LTVMoIkFzc3VtaW5n IEx5bnhQb2ludCBQQ0hcbiIpOwotCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShkZXYpIHx8IElTX0tB QllMQUtFKGRldikpIHsKLQkJcmV0ID0gUENIX1NQVDsKLQkJRFJNX0RFQlVHX0tNUygiQXNzdW1p bmcgU3VucmlzZVBvaW50IFBDSFxuIik7CisJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1f cGlwZXMpIHsKKwkJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldl9wcml2LT5kZXYsCisJCQkJICAg ICAgSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9waXBlcyk7CisJCWlmIChyZXQpCisJCQlnb3Rv IG91dF9jbGVhbnVwX2h3OwogCX0KIAorCXJldCA9IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoZGV2 X3ByaXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2NsZWFudXBfdmJsYW5rOwor CisJaTkxNV9kcml2ZXJfcmVnaXN0ZXIoZGV2X3ByaXYpOworCisJaW50ZWxfcnVudGltZV9wbV9l bmFibGUoZGV2X3ByaXYpOworCisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCisJ cmV0dXJuIDA7CisKK291dF9jbGVhbnVwX3ZibGFuazoKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2 X3ByaXYtPmRldik7CitvdXRfY2xlYW51cF9odzoKKwlpOTE1X2RyaXZlcl9jbGVhbnVwX2h3KGRl dl9wcml2KTsKK291dF9jbGVhbnVwX21taW86CisJaTkxNV9kcml2ZXJfY2xlYW51cF9tbWlvKGRl dl9wcml2KTsKK291dF9ydW50aW1lX3BtX3B1dDoKKwlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZf cHJpdik7CisJaTkxNV9kcml2ZXJfY2xlYW51cF9lYXJseShkZXZfcHJpdik7CitvdXRfcGNpX2Rp c2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworb3V0X2ZyZWVfcHJpdjoKKwlkcm1f ZGV2X3VucmVmKCZkZXZfcHJpdi0+ZHJtKTsKK291dDoKKwlpOTE1X2xvYWRfZXJyb3IoZGV2X3By aXYsICJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcbiIsIHJldCk7CiAJcmV0dXJu IHJldDsKIH0KIAotdm9pZCBpbnRlbF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp CitzdGF0aWMgaW50IGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQog ewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaCA9IE5VTEw7CisJaW50IHJldDsKIAotCS8qIEluIGFsbCBj dXJyZW50IGNhc2VzLCBudW1fcGlwZXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUENIX05PUCBzZXR0 aW5nCi0JICogKHdoaWNoIHJlYWxseSBhbW91bnRzIHRvIGEgUENIIGJ1dCBubyBTb3V0aCBEaXNw bGF5KS4KLQkgKi8KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5udW1fcGlwZXMgPT0gMCkgewotCQlk ZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTk9QOwotCQlyZXR1cm47CisJaW50ZWxfZmJkZXZfZmlu aShkZXYpOworCisJcmV0ID0gaTkxNV9nZW1fc3VzcGVuZChkZXYpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gaWRsZSBoYXJkd2FyZTogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CiAJfQogCisJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIFBPV0VSX0RP TUFJTl9JTklUKTsKKworCWk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoZGV2X3ByaXYpOworCisJZHJt X3ZibGFua19jbGVhbnVwKGRldik7CisKKwlpbnRlbF9tb2Rlc2V0X2NsZWFudXAoZGV2KTsKKwog CS8qCi0JICogVGhlIHJlYXNvbiB0byBwcm9iZSBJU0EgYnJpZGdlIGluc3RlYWQgb2YgRGV2MzE6 RnVuMCBpcyB0bwotCSAqIG1ha2UgZ3JhcGhpY3MgZGV2aWNlIHBhc3N0aHJvdWdoIHdvcmsgZWFz eSBmb3IgVk1NLCB0aGF0IG9ubHkKLQkgKiBuZWVkIHRvIGV4cG9zZSBJU0EgYnJpZGdlIHRvIGxl dCBkcml2ZXIga25vdyB0aGUgcmVhbCBoYXJkd2FyZQotCSAqIHVuZGVybmVhdGguIFRoaXMgaXMg YSByZXF1aXJlbWVudCBmcm9tIHZpcnR1YWxpemF0aW9uIHRlYW0uCi0JICoKLQkgKiBJbiBzb21l IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiBYRU4pLCB0aGVyZSBpcyBpcnJlbGV2YW50 Ci0JICogSVNBIGJyaWRnZSBpbiB0aGUgc3lzdGVtLiBUbyB3b3JrIHJlbGlhYmx5LCB3ZSBzaG91 bGQgc2NhbiB0cmhvdWdoCi0JICogYWxsIHRoZSBJU0EgYnJpZGdlIGRldmljZXMgYW5kIGNoZWNr IGZvciB0aGUgZmlyc3QgbWF0Y2gsIGluc3RlYWQKLQkgKiBvZiBvbmx5IGNoZWNraW5nIHRoZSBm aXJzdCBvbmUuCisJICogZnJlZSB0aGUgbWVtb3J5IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIGNo aWxkIGRldmljZQorCSAqIGNvbmZpZyBwYXJzZWQgZnJvbSBWQlQKIAkgKi8KLQl3aGlsZSAoKHBj aCA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0JSSURHRV9JU0EgPDwgOCwgcGNoKSkpIHsKLQkJ aWYgKHBjaC0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpIHsKLQkJCXVuc2lnbmVkIHNo b3J0IGlkID0gcGNoLT5kZXZpY2UgJiBJTlRFTF9QQ0hfREVWSUNFX0lEX01BU0s7Ci0JCQlkZXZf cHJpdi0+cGNoX2lkID0gaWQ7CisJaWYgKGRldl9wcml2LT52YnQuY2hpbGRfZGV2ICYmIGRldl9w cml2LT52YnQuY2hpbGRfZGV2X251bSkgeworCQlrZnJlZShkZXZfcHJpdi0+dmJ0LmNoaWxkX2Rl dik7CisJCWRldl9wcml2LT52YnQuY2hpbGRfZGV2ID0gTlVMTDsKKwkJZGV2X3ByaXYtPnZidC5j aGlsZF9kZXZfbnVtID0gMDsKKwl9CisJa2ZyZWUoZGV2X3ByaXYtPnZidC5zZHZvX2x2ZHNfdmJ0 X21vZGUpOworCWRldl9wcml2LT52YnQuc2R2b19sdmRzX3ZidF9tb2RlID0gTlVMTDsKKwlrZnJl ZShkZXZfcHJpdi0+dmJ0LmxmcF9sdmRzX3ZidF9tb2RlKTsKKwlkZXZfcHJpdi0+dmJ0LmxmcF9s dmRzX3ZidF9tb2RlID0gTlVMTDsKIAotCQkJaWYgKGlkID09IElOVEVMX1BDSF9JQlhfREVWSUNF X0lEX1RZUEUpIHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfSUJYOwotCQkJCURSTV9E RUJVR19LTVMoIkZvdW5kIEliZXggUGVhayBQQ0hcbiIpOwotCQkJCVdBUk5fT04oIUlTX0dFTjUo ZGV2KSk7Ci0JCQl9IGVsc2UgaWYgKGlkID09IElOVEVMX1BDSF9DUFRfREVWSUNFX0lEX1RZUEUp IHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfQ1BUOwotCQkJCURSTV9ERUJVR19LTVMo IkZvdW5kIENvdWdhclBvaW50IFBDSFxuIik7Ci0JCQkJV0FSTl9PTighKElTX0dFTjYoZGV2KSB8 fCBJU19JVllCUklER0UoZGV2KSkpOwotCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfUFBU X0RFVklDRV9JRF9UWVBFKSB7Ci0JCQkJLyogUGFudGhlclBvaW50IGlzIENQVCBjb21wYXRpYmxl ICovCi0JCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0NQVDsKLQkJCQlEUk1fREVCVUdfS01T KCJGb3VuZCBQYW50aGVyUG9pbnQgUENIXG4iKTsKLQkJCQlXQVJOX09OKCEoSVNfR0VONihkZXYp IHx8IElTX0lWWUJSSURHRShkZXYpKSk7Ci0JCQl9IGVsc2UgaWYgKGlkID09IElOVEVMX1BDSF9M UFRfREVWSUNFX0lEX1RZUEUpIHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTFBUOwot CQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIEx5bnhQb2ludCBQQ0hcbiIpOwotCQkJCVdBUk5fT04o IUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJPQURXRUxMKGRldikpOwotCQkJCVdBUk5fT04oSVNf SFNXX1VMVChkZXYpIHx8IElTX0JEV19VTFQoZGV2KSk7Ci0JCQl9IGVsc2UgaWYgKGlkID09IElO VEVMX1BDSF9MUFRfTFBfREVWSUNFX0lEX1RZUEUpIHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUg PSBQQ0hfTFBUOwotCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIEx5bnhQb2ludCBMUCBQQ0hcbiIp OwotCQkJCVdBUk5fT04oIUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJPQURXRUxMKGRldikpOwot CQkJCVdBUk5fT04oIUlTX0hTV19VTFQoZGV2KSAmJiAhSVNfQkRXX1VMVChkZXYpKTsKLQkJCX0g ZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX1NQVF9ERVZJQ0VfSURfVFlQRSkgewotCQkJCWRldl9w cml2LT5wY2hfdHlwZSA9IFBDSF9TUFQ7Ci0JCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgU3Vucmlz ZVBvaW50IFBDSFxuIik7Ci0JCQkJV0FSTl9PTighSVNfU0tZTEFLRShkZXYpICYmCi0JCQkJCSFJ U19LQUJZTEFLRShkZXYpKTsKLQkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX1NQVF9MUF9E RVZJQ0VfSURfVFlQRSkgewotCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9TUFQ7Ci0JCQkJ RFJNX0RFQlVHX0tNUygiRm91bmQgU3VucmlzZVBvaW50IExQIFBDSFxuIik7Ci0JCQkJV0FSTl9P TighSVNfU0tZTEFLRShkZXYpICYmCi0JCQkJCSFJU19LQUJZTEFLRShkZXYpKTsKLQkJCX0gZWxz ZSBpZiAoKGlkID09IElOVEVMX1BDSF9QMlhfREVWSUNFX0lEX1RZUEUpIHx8Ci0JCQkJICAgKGlk ID09IElOVEVMX1BDSF9QM1hfREVWSUNFX0lEX1RZUEUpIHx8Ci0JCQkJICAgKChpZCA9PSBJTlRF TF9QQ0hfUUVNVV9ERVZJQ0VfSURfVFlQRSkgJiYKLQkJCQkgICAgcGNoLT5zdWJzeXN0ZW1fdmVu ZG9yID09IDB4MWFmNCAmJgotCQkJCSAgICBwY2gtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgxMTAw KSkgewotCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IGludGVsX3ZpcnRfZGV0ZWN0X3BjaChkZXYp OwotCQkJfSBlbHNlCi0JCQkJY29udGludWU7CisJdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9j bGllbnQoZGV2LT5wZGV2KTsKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwg TlVMTCwgTlVMTCk7CiAKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghcGNoKQotCQlEUk1fREVC VUdfS01TKCJObyBQQ0ggZm91bmQuXG4iKTsKKwlpbnRlbF9jc3JfdWNvZGVfZmluaShkZXZfcHJp dik7CiAKLQlwY2lfZGV2X3B1dChwY2gpOworCS8qIEZyZWUgZXJyb3Igc3RhdGUgYWZ0ZXIgaW50 ZXJydXB0cyBhcmUgZnVsbHkgZGlzYWJsZWQuICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5j KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmhhbmdjaGVja193b3JrKTsKKwlpOTE1X2Rlc3Ryb3lfZXJy b3Jfc3RhdGUoZGV2KTsKKworCS8qIEZsdXNoIGFueSBvdXRzdGFuZGluZyB1bnBpbl93b3JrLiAq LworCWZsdXNoX3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOworCisJaW50ZWxfZ3VjX2ZpbmkoZGV2 KTsKKwlpOTE1X2dlbV9maW5pKGRldik7CisJaW50ZWxfZmJjX2NsZWFudXBfY2ZiKGRldl9wcml2 KTsKKworCWludGVsX3Bvd2VyX2RvbWFpbnNfZmluaShkZXZfcHJpdik7CisKKwlpOTE1X2RyaXZl cl9jbGVhbnVwX2h3KGRldl9wcml2KTsKKwlpOTE1X2RyaXZlcl9jbGVhbnVwX21taW8oZGV2X3By aXYpOworCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9J TklUKTsKKworCWk5MTVfZHJpdmVyX2NsZWFudXBfZWFybHkoZGV2X3ByaXYpOworCisJcmV0dXJu IDA7CiB9CiAKLWJvb2wgaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMgaW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQogewotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgNikKLQkJcmV0dXJuIGZhbHNlOworCWludCByZXQ7CiAKLQlpZiAoaTkxNS5z ZW1hcGhvcmVzID49IDApCi0JCXJldHVybiBpOTE1LnNlbWFwaG9yZXM7CisJcmV0ID0gaTkxNV9n ZW1fb3BlbihkZXYsIGZpbGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkvKiBUT0RP OiBtYWtlIHNlbWFwaG9yZXMgYW5kIEV4ZWNsaXN0cyBwbGF5IG5pY2VseSB0b2dldGhlciAqLwot CWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCi0JCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gMDsK K30KIAotI2lmZGVmIENPTkZJR19JTlRFTF9JT01NVQotCS8qIEVuYWJsZSBzZW1hcGhvcmVzIG9u IFNOQiB3aGVuIElPIHJlbWFwcGluZyBpcyBvZmYgKi8KLQlpZiAoSVNfR0VONihkZXZfcHJpdikg JiYgaW50ZWxfaW9tbXVfZ2Z4X21hcHBlZCkKLQkJcmV0dXJuIGZhbHNlOwotI2VuZGlmCisvKioK KyAqIGk5MTVfZHJpdmVyX2xhc3RjbG9zZSAtIGNsZWFuIHVwIGFmdGVyIGFsbCBEUk0gY2xpZW50 cyBoYXZlIGV4aXRlZAorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIFRha2UgY2FyZSBvZiBj bGVhbmluZyB1cCBhZnRlciBhbGwgRFJNIGNsaWVudHMgaGF2ZSBleGl0ZWQuICBJbiB0aGUKKyAq IG1vZGUgc2V0dGluZyBjYXNlLCB3ZSB3YW50IHRvIHJlc3RvcmUgdGhlIGtlcm5lbCdzIGluaXRp YWwgbW9kZSAoanVzdAorICogaW4gY2FzZSB0aGUgbGFzdCBjbGllbnQgbGVmdCB1cyBpbiBhIGJh ZCBzdGF0ZSkuCisgKgorICogQWRkaXRpb25hbGx5LCBpbiB0aGUgbm9uLW1vZGUgc2V0dGluZyBj YXNlLCB3ZSdsbCB0ZWFyIGRvd24gdGhlIEdUVAorICogYW5kIERNQSBzdHJ1Y3R1cmVzLCBzaW5j ZSB0aGUga2VybmVsIHdvbid0IGJlIHVzaW5nIHRoZW0sIGFuZCBjbGVhCisgKiB1cCBhbnkgR0VN IHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlpbnRlbF9mYmRldl9yZXN0b3JlX21vZGUoZGV2KTsKKwl2Z2Ff c3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7Cit9CiAKLQlyZXR1cm4gdHJ1ZTsK K3N0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7CisJaTkxNV9nZW1fY29udGV4dF9jbG9zZShkZXYsIGZpbGUpOworCWk5MTVfZ2VtX3JlbGVh c2UoZGV2LCBmaWxlKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKwor c3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRl ICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKworCWtmcmVlKGZpbGVfcHJpdik7CiB9 CiAKIHN0YXRpYyB2b2lkIGludGVsX3N1c3BlbmRfZW5jb2RlcnMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQpAQCAtMTAzOSw3ICsyNjEzLDcgQEAgc3RhdGljIGludCBpOTE1X3Bj aV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQg KmVudCkKIAkgICAgIXZnYV9zd2l0Y2hlcm9vX2hhbmRsZXJfZmxhZ3MoKSkKIAkJcmV0dXJuIC1F UFJPQkVfREVGRVI7CiAKLQlyZXR1cm4gaTkxNV9kcml2ZXJfbG9hZChwZGV2LCBlbnQsICZkcml2 ZXIpOworCXJldHVybiBpOTE1X2RyaXZlcl9sb2FkKHBkZXYsIGVudCk7CiB9CiAKIHN0YXRpYyB2 b2lkCkBAIC0xNzQ3LDYgKzMzMjEsNjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgaTkxNV9kcml2ZXJfZm9wcyA9IHsKIAkubGxzZWVrID0gbm9vcF9sbHNlZWssCiB9Owog CitzdGF0aWMgaW50CitpOTE1X2dlbV9yZWplY3RfcGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlyZXR1 cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1 X2lvY3Rsc1tdID0geworCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfSU5JVCwgZHJtX25vb3AsIERS TV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9GTFVTSCwgZHJtX25vb3AsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0ZM SVAsIGRybV9ub29wLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9CQVRDSEJV RkZFUiwgZHJtX25vb3AsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0lSUV9F TUlULCBkcm1fbm9vcCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfSVJRX1dB SVQsIGRybV9ub29wLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRVRQQVJB TSwgaTkxNV9nZXRwYXJhbSwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9TRVRQQVJBTSwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJN X1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9BTExPQywgZHJtX25vb3AsIERS TV9BVVRIKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0ZSRUUsIGRybV9ub29wLCBEUk1fQVVU SCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9JTklUX0hFQVAsIGRybV9ub29wLCBEUk1fQVVU SHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfQ01E QlVGRkVSLCBkcm1fbm9vcCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfREVT VFJPWV9IRUFQLCAgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSks CisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9TRVRfVkJMQU5LX1BJUEUsICBkcm1fbm9vcCwgRFJN X0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1 X0dFVF9WQkxBTktfUElQRSwgIGRybV9ub29wLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9E UlYoSTkxNV9WQkxBTktfU1dBUCwgZHJtX25vb3AsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVG X0RSVihJOTE1X0hXU19BRERSLCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9P VF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9JTklULCBkcm1fbm9vcCwgRFJN X0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1 X0dFTV9FWEVDQlVGRkVSLCBpOTE1X2dlbV9leGVjYnVmZmVyLCBEUk1fQVVUSCksCisJRFJNX0lP Q1RMX0RFRl9EUlYoSTkxNV9HRU1fRVhFQ0JVRkZFUjIsIGk5MTVfZ2VtX2V4ZWNidWZmZXIyLCBE Uk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9Q SU4sIGk5MTVfZ2VtX3JlamVjdF9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAor CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VOUElOLCBpOTE1X2dlbV9yZWplY3RfcGluX2lv Y3RsLCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dF TV9CVVNZLCBpOTE1X2dlbV9idXN5X2lvY3RsLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwK KwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9TRVRfQ0FDSElORywgaTkxNV9nZW1fc2V0X2Nh Y2hpbmdfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVf R0VNX0dFVF9DQUNISU5HLCBpOTE1X2dlbV9nZXRfY2FjaGluZ19pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVEhST1RUTEUsIGk5MTVfZ2VtX3Ro cm90dGxlX2lvY3RsLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVG X0RSVihJOTE1X0dFTV9FTlRFUlZULCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1f Uk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9MRUFWRVZULCBkcm1fbm9v cCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGX0RS VihJOTE1X0dFTV9DUkVBVEUsIGk5MTVfZ2VtX2NyZWF0ZV9pb2N0bCwgRFJNX1JFTkRFUl9BTExP VyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lv Y3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9QV1JJ VEUsIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9HRU1fTU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fTU1BUF9HVFQsIGk5MTVfZ2VtX21t YXBfZ3R0X2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1 X0dFTV9TRVRfRE9NQUlOLCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsLCBEUk1fUkVOREVSX0FM TE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9TV19GSU5JU0gsIGk5MTVfZ2VtX3N3 X2ZpbmlzaF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9HRU1fU0VUX1RJTElORywgaTkxNV9nZW1fc2V0X3RpbGluZywgRFJNX1JFTkRFUl9BTExPVyks CisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fR0VUX1RJTElORywgaTkxNV9nZW1fZ2V0X3Rp bGluZywgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fR0VU X0FQRVJUVVJFLCBpOTE1X2dlbV9nZXRfYXBlcnR1cmVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cp LAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUX1BJUEVfRlJPTV9DUlRDX0lELCBpbnRlbF9n ZXRfcGlwZV9mcm9tX2NydGNfaWQsIDApLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX01B RFZJU0UsIGk5MTVfZ2VtX21hZHZpc2VfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9J T0NUTF9ERUZfRFJWKEk5MTVfT1ZFUkxBWV9QVVRfSU1BR0UsIGludGVsX292ZXJsYXlfcHV0X2lt YWdlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVG X0RSVihJOTE1X09WRVJMQVlfQVRUUlMsIGludGVsX292ZXJsYXlfYXR0cnNfaW9jdGwsIERSTV9N QVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfU0VUX1NQ UklURV9DT0xPUktFWSwgaW50ZWxfc3ByaXRlX3NldF9jb2xvcmtleSwgRFJNX01BU1RFUnxEUk1f Q09OVFJPTF9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRVRfU1BSSVRFX0NPTE9S S0VZLCBkcm1fbm9vcCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCisJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9HRU1fV0FJVCwgaTkxNV9nZW1fd2FpdF9pb2N0bCwgRFJNX0FVVEh8RFJN X1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVYVF9DUkVB VEUsIGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlE Uk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX0RFU1RST1ksIGk5MTVfZ2VtX2NvbnRl eHRfZGVzdHJveV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYo STkxNV9SRUdfUkVBRCwgaTkxNV9yZWdfcmVhZF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRVRfUkVTRVRfU1RBVFMsIGk5MTVfZ2VtX2NvbnRleHRf cmVzZXRfc3RhdHNfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJW KEk5MTVfR0VNX1VTRVJQVFIsIGk5MTVfZ2VtX3VzZXJwdHJfaW9jdGwsIERSTV9SRU5ERVJfQUxM T1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0sIGk5MTVf Z2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NU TF9ERUZfRFJWKEk5MTVfR0VNX0NPTlRFWFRfU0VUUEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfc2V0 cGFyYW1faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorfTsKKwogc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIGRyaXZlciA9IHsKIAkvKiBEb24ndCB1c2UgTVRSUnMgaGVyZTsgdGhlIFhzZXJ2ZXIg b3IgdXNlcnNwYWNlIGFwcCBzaG91bGQKIAkgKiBkZWFsIHdpdGggdGhlbSBmb3IgSW50ZWwgaGFy ZHdhcmUuCkBAIC0xNzcyLDYgKzM0MDgsNyBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJp dmVyID0gewogCS5kdW1iX21hcF9vZmZzZXQgPSBpOTE1X2dlbV9tbWFwX2d0dCwKIAkuZHVtYl9k ZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCiAJLmlvY3RscyA9IGk5MTVfaW9jdGxzLAor CS5udW1faW9jdGxzID0gQVJSQVlfU0laRShpOTE1X2lvY3RscyksCiAJLmZvcHMgPSAmaTkxNV9k cml2ZXJfZm9wcywKIAkubmFtZSA9IERSSVZFUl9OQU1FLAogCS5kZXNjID0gRFJJVkVSX0RFU0Ms CkBAIC0xNzkxLDggKzM0MjgsNiBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTkxNV9wY2lf ZHJpdmVyID0gewogCiBzdGF0aWMgaW50IF9faW5pdCBpOTE1X2luaXQodm9pZCkKIHsKLQlkcml2 ZXIubnVtX2lvY3RscyA9IGk5MTVfbWF4X2lvY3RsOwotCiAJLyoKIAkgKiBFbmFibGUgS01TIGJ5 IGRlZmF1bHQsIHVubGVzcyBleHBsaWNpdGx5IG92ZXJyaWRlbiBieQogCSAqIGVpdGhlciB0aGUg aTkxNS5tb2Rlc2V0IHByYXJhbWV0ZXIgb3IgYnkgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApp bmRleCBmZTEyMWE4YWYxNDYuLmY1NzViMzIyMmI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CkBAIC0yODU3LDE2ICsyODU3LDEzIEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgewogCiAj aW5jbHVkZSAiaTkxNV90cmFjZS5oIgogCi1leHRlcm4gY29uc3Qgc3RydWN0IGRybV9pb2N0bF9k ZXNjIGk5MTVfaW9jdGxzW107Ci1leHRlcm4gaW50IGk5MTVfbWF4X2lvY3RsOwotCiBleHRlcm4g aW50IGk5MTVfc3VzcGVuZF9zd2l0Y2hlcm9vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21l c3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IGk5MTVfcmVzdW1lX3N3aXRjaGVyb28oc3RydWN0 IGRybV9kZXZpY2UgKmRldik7CiAKIGludCBpbnRlbF9zYW5pdGl6ZV9lbmFibGVfcHBndHQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIAlpbnQgZW5hYmxlX3Bw Z3R0KTsKIAotLyogaTkxNV9kbWEuYyAqLworLyogaTkxNV9kcnYuYyAqLwogdm9pZCBfX3ByaW50 ZigzLCA0KQogX19pOTE1X3ByaW50ayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGNvbnN0IGNoYXIgKmxldmVsLAogCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKQEAgLTI4 NzQsMTYgKzI4NzEsNiBAQCBfX2k5MTVfcHJpbnRrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgY29uc3QgY2hhciAqbGV2ZWwsCiAjZGVmaW5lIGk5MTVfcmVwb3J0X2Vycm9yKGRl dl9wcml2LCBmbXQsIC4uLikJCQkJICAgXAogCV9faTkxNV9wcmludGsoZGV2X3ByaXYsIEtFUk5f RVJSLCBmbXQsICMjX19WQV9BUkdTX18pCiAKLWV4dGVybiBpbnQgaTkxNV9kcml2ZXJfbG9hZChz dHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAq ZW50LAotCQkJICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwotZXh0ZXJuIGludCBpOTE1 X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7Ci1leHRlcm4gaW50IGk5MTVfZHJp dmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKTsK LWV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRl dik7Ci1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAotCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwotZXh0ZXJuIHZvaWQgaTkxNV9kcml2 ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpOwogI2lmZGVmIENPTkZJR19DT01QQVQKIGV4dGVybiBsb25nIGk5MTVfY29tcGF0 X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICAgdW5z aWduZWQgbG9uZyBhcmcpOwpAQCAtMzY5MCw3ICszNjc3LDYgQEAgZXh0ZXJuIHZvaWQgaW50ZWxf aW5pdF9wY2hfcmVmY2xrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50 ZWxfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCk7CiBl eHRlcm4gdm9pZCBpbnRlbF9zZXRfbWVtb3J5X2N4c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCQkJCSAgYm9vbCBlbmFibGUpOwotZXh0ZXJuIHZvaWQgaW50ZWxfZGV0ZWN0 X3BjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIGJvb2wgaTkxNV9zZW1hcGhv cmVfaXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGk5 MTVfcmVnX3JlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLS0g CjIuOC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK