From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH] drm/i915: Add link training test Date: Mon, 14 Sep 2015 14:51:51 +0300 Message-ID: <1442231511-24258-1-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1441980706-9241-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id BC55A6E855 for ; Mon, 14 Sep 2015 04:52:17 -0700 (PDT) In-Reply-To: <1441980706-9241-1-git-send-email-ander.conselvan.de.oliveira@intel.com> 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: Ander Conselvan de Oliveira , thomas.wood@intel.com List-Id: intel-gfx@lists.freedesktop.org LS0tCgpPbiBGcmksIDIwMTUtMDktMTEgYXQgMTc6MTEgKzAzMDAsIEFuZGVyIENvbnNlbHZhbiBk ZSBPbGl2ZWlyYSB3cm90ZToKPiBPbiBXZWQsIDIwMTUtMDktMDkgYXQgMTE6MzMgKzAxMDAsIFRo b21hcyBXb29kIHdyb3RlOgo+ID4gT24gOCBTZXB0ZW1iZXIgMjAxNSBhdCAxMzoyOCwgQW5kZXIg Q29uc2VsdmFuIGRlIE9saXZlaXJhCj4gPiA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZlaXJhQGlu dGVsLmNvbT4gd3JvdGU6Cj4gPiA+IAo+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvbGluay10cmFpbmlu Zy10ZXN0L01ha2VmaWxlIGIvbGluay10cmFpbmluZy10ZXN0L01ha2VmaWxlCj4gPiAKPiA+IElm IHRoaXMgaXMgbWVhbnQgdG8gYmUgcGFydCBvZiB0aGUgdGVzdCBzdWl0ZSwgdGhlbiBpdCBuZWVk cyB0byBiZSBpbgo+ID4gdGhlIHRlc3RzIGRpcmVjdG9yeSBhbmQgdXNlIHRoZSBpZ3QgdGVzdCBp bmZyYXN0cnVjdHVyZS4gT3RoZXJ3aXNlIGl0Cj4gPiBzaG91bGQgYmUgcGxhY2VkIGluIHRvb2xz IG9yIHRvb2xzL2xpbmstdHJhaW5pbmctdGVzdC4KPiAKPiBJIG1hZGUgdGhlIHRlc3QgdXNlIHRo ZSBpZ3QgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcwo+IGEgZ29v ZCBmaXQgZm9yIGl0LiBUaGUgZGVwZW5kZW5jeSBvbiB0aGUga2VybmVsIGlzIG9uIGJ1aWxkIHRp bWUsIGJ1dAo+IG9uY2UgY29tcGlsZWQgdGhpcyBjYW4gYmUgcnVuIG9uIGFueSBtYWNoaW5lLiBU aGlzIGNhbiBhbHNvIGludHJvZHVjZQo+IGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSB0ZXN0IGlzIG5v dCBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZHJpdmVyIHNvdXJjZS4KPiBJZGVhbGx5IHRoYXQgYSBm YWlsdXJlIHRvIGJ1aWxkIHRoaXMgd291bGQgYmUgcmVwb3J0ZWQgYXMgdGhlIHRlc3QKPiBmYWls aW5nLCBidXQgSSBoYXZlIG5vIGlkZWEgb2YgaG93IHRvIGFjaGlldmUgdGhhdC4KCkFsdGVybmF0 aXZlbHksIHRoaXMgY291bGQgYmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBkaXJlY3RseS4g VGhpcwpwYXRjaCBhZGRzIGEgdGVzdCBzdWJkaXIgdG8gdGhlIGk5MTUgc291cmNlIGRpciwgY29u dGFpbmluZyB0aGUgbGluawp0cmFpbmluZyB0ZXN0LiBUaGUgdGVzdCBpcyBjb21waWxlZCBhcyBw YXJ0IG9mIHRoZSBub3JtYWwgYnVpbGQgdXNpbmcKdGhlIGV4dHJhLXkgdmFyaWFibGUgc28gdGhh dCBpdCBkb2Vzbid0IGdldCBsaW5rZWQgdG8gdGhlIGZpbmFsIGtlcm5lbC4KCldoZW4gbWFrZSBp cyBydW4gZnJvbSB0aGUgdGVzdHMgZGlyZWN0b3J5LCBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhl CnRlc3RzIGlzIGJ1aWx0IGFuZCBsaW5rZWQgdG8gdGhlIG9iamVjdCBmaWxlIGNvbXBpbGVkIGFz IHBhcnQgb2YgdGhlCmtlcm5lbCBidWlsZC4gUnVubmluZyBtYWtlIHJ1bl90ZXN0cyBmcm9tIHRo ZSB0ZXN0IGRpciBydW5zIHRoZSB0ZXN0CmFuZCByZXBvcnRzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4K CkFueSB0aG91Z2h0cz8KCkFuZGVyCgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3Rz L01ha2VmaWxlICAgICAgICAgICAgICAgIHwgIDM5ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS90 ZXN0cy9lbXB0eS5jICAgICAgICAgICAgICAgICB8ICAgMAogZHJpdmVycy9ncHUvZHJtL2k5MTUv dGVzdHMvbG9hZGVyLmMgICAgICAgICAgICAgICAgfCAxMDggKysrKysKIC4uLi9kcm0vaTkxNS90 ZXN0cy90ZXN0X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYyAgIHwgNDY0ICsrKysrKysrKysrKysr KysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2MTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvZW1wdHkuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2xvYWRlci5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvdGVzdF9pbnRlbF9kcF9saW5rX3RyYWluaW5n LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDA4NTFkZTA3Li43Mjk4Y2U1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQpAQCAtOTcsNiArOTcsOCBAQCBpOTE1LXkgKz0gaTkxNV92Z3B1Lm8KICMgbGVn YWN5IGhvcnJvcnMKIGk5MTUteSArPSBpOTE1X2RtYS5vCiAKK29iai15ICs9IHRlc3RzLworCiBv YmotJChDT05GSUdfRFJNX0k5MTUpICArPSBpOTE1Lm8KIAogQ0ZMQUdTX2k5MTVfdHJhY2VfcG9p bnRzLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3Rz L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2Mjc0MQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMgUGxl YXNlIGtidWlsZAorIyBUT0RPOiBjaGVjayBmb3IgYSBiZXR0ZXIgd2F5IHRvIGluY2x1ZGUgdGhp cyBkaXJlY3RvcnkgaW4gdGhlIGJ1aWxkCisjIHdpdGhvdXQgZm9yY2luZyB0aGUgbmVlZCBmb3Ig dGhpcyBlbXB0eSBmaWxlCitvYmoteSArPSBlbXB0eS5vCisKKworIyBGSVhNRTogVGhlIHN0YWNr IHByb3RlY3RvciBjb2RlIGNhdXNlcyB0ZXN0cyB0byBjcmFzaCBkdWUgdG8gYW4gaW1wcm9wZXJs eQorIyBpbml0aWFsaXplZCAlZ3MsIHNvIGtlZXAgaXQgZGlzYWJsZWQgZm9yIG5vdy4KK2NjZmxh Z3MteSA6PSAtZnN0YWNrLXByb3RlY3Rvci1leHBsaWNpdAorCitleHRyYS15ICs9IHRlc3RfaW50 ZWxfZHBfbGlua190cmFpbmluZy5vCisKKyMgSWYgbWFrZSBpcyBydW4gZnJvbSB0aGlzIGRpcmVj dG9yeQoraWZlcSAoMCwgJChNQUtFTEVWRUwpKQorCisjIEZvciBzdHJsY3B5CitMREZMQUdTID0g LWxic2QKKworVEVTVF9QUk9HUyA9IFwKKwl0ZXN0X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcKKwor YWxsOiB0ZXN0cworCit0ZXN0czogJChURVNUX1BST0dTKQorCitydW5fdGVzdHM6IHRlc3RzCisJ QGZvciBURVNUIGluICQoVEVTVF9QUk9HUyk7IGRvIFwKKwkJKC4vJCRURVNUICYmIGVjaG8gIiQk VEVTVCBbUEFTU10iKSB8fCBlY2hvICIkJFRFU1QgW0ZBSUxdIjsgXAorCWRvbmUKKwordGVzdF8l Lm86IHRlc3RfJS5jIC4uLyUuYworCW1ha2UgLUMgLi4vLi4vLi4vLi4vLi4vIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L3Rlc3RzLyRACisKK2xvYWRlci5vOiBsb2FkZXIuYworCSQoQ0MpICQoQ0ZMQUdT KSAtYyAtbyAkQCAkPAorCislOiAlLm8gbG9hZGVyLm8KKwkkKENDKSAtbyAkQCAkXiAkKExERkxB R1MpCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvZW1wdHku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvdGVzdHMvbG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9sb2FkZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTM4ODE2Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvbG9hZGVyLmMKQEAgLTAsMCArMSwxMDgg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICog ICAgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUub2xpdmVp cmFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUg PHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8c3RkYXJnLmg+CisKK3ZvaWQgcnVuX3Rlc3Qodm9pZCk7CisKK3ZvaWQgYXNzZXJ0KGJv b2wgY29uZGl0aW9uKQoreworCWlmICghY29uZGl0aW9uKSB7CisJCXByaW50ZigiQXNzZXJ0IGZh aWxlZFxuIik7CisJCWFib3J0KCk7CisJfQorfQorCitzdHJ1Y3QgeworCXVpbnQ4X3QgcGFkZGlu Z1szMl07Cit9IHBhcmFtX29wc19pbnQ7CisKK3Vuc2lnbmVkIGludCBkcm1fZGVidWcgPSAwOwkv KiAxIHRvIGVuYWJsZSBkZWJ1ZyBvdXRwdXQgKi8KKwordm9pZCBkcm1fZXJyKGNvbnN0IGNoYXIg KmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZvcm1h dCk7CisJdnByaW50Zihmb3JtYXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworfQorCit2b2lk IGRybV91dF9kZWJ1Z19wcmludGsoY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwgY29uc3QgY2hh ciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm9y bWF0KTsKKwlwcmludGYoIlslc10gIiwgZnVuY3Rpb25fbmFtZSk7CisJdnByaW50Zihmb3JtYXQs IGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKwordm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25l ZCBsb25nIHhsb29wcykKK3sKK30KKworc3RydWN0IG11dGV4Owordm9pZCBtdXRleF9sb2NrX25l c3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3sKK30KKwor dm9pZCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKQoreworfQorCitzdHJ1Y3QgbG9j a19jbGFzc19rZXk7Cit2b2lkCitfX211dGV4X2luaXQoc3RydWN0IG11dGV4ICpsb2NrLCBjb25z dCBjaGFyICpuYW1lLCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKK3sKK30KKwordm9pZCB1 c2xlZXBfcmFuZ2UodW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKK3sKK30KKwor c3RydWN0IGkyY19hZGFwdGVyOworaW50IGkyY19hZGRfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0 ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTJjX2RlbF9hZGFwdGVyKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcGF0ZXIpCit7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQoreworCXJ1bl90ZXN0KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy90ZXN0X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL3Rlc3RfaW50ZWxfZHBfbGlua190cmFpbmlu Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODY4ZjgKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy90ZXN0X2ludGVsX2RwX2xpbmtf dHJhaW5pbmcuYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE1IElu dGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEg PGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNs dWRlICIuLi9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMiCisKKyNkZWZpbmUgZHJtX2RwX2RwY2Rf d3JpdGUJcmVhbF9kcm1fZHBfZHBjZF93cml0ZQorI2luY2x1ZGUgIi4uLy4uL2RybV9kcF9oZWxw ZXIuYyIKKyN1bmRlZiBkcm1fZHBfZHBjZF93cml0ZQorCit2b2lkIGFzc2VydChib29sIGNvbmRp dGlvbik7CisKKworc3RydWN0IHNpbmtfZGV2aWNlIHsKKwlzc2l6ZV90ICgqZHBjZF93cml0ZSko c3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgICAg dm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisJYm9vbCAoKmdldF9saW5rX3N0YXR1cykoc3Ry dWN0IHNpbmtfZGV2aWNlICpzaW5rLAorCQkJCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV0pOworCisJc3RydWN0IHsKKwkJYm9vbCBsYW5lX2NvdW50X2FuZF9id19zZXQ7 CisJCWJvb2wgdHJhaW5pbmdfcGF0dGVybl8xX3NldDsKKwkJYm9vbCBzdGFydGVkX3dpdGhfbm9u X3plcm9fbGV2ZWxzOworCQlib29sIGNyX2RvbmU7CisJCWJvb2wgY2hhbm5lbF9lcV9kb25lOwor CisJCXVpbnQ4X3QgZHBjZFsweDMwMDBdOworCX0gZGF0YTsKK307CisKKy8qIEZha2Ugc2luayBk ZXZpY2UgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHVpbnQ4X3QKK3NpbmtfZGV2aWNlX2xh bmVfY291bnQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQoreworCXJldHVybiBzaW5rLT5kYXRh LmRwY2RbRFBfTEFORV9DT1VOVF9TRVRdOworfQorCitzdGF0aWMgdWludDhfdAorc2lua19kZXZp Y2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQoreworCXJl dHVybiBzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRdICYgRFBfVFJBSU5J TkdfUEFUVEVSTl9NQVNLOworfQorCitzdGF0aWMgdWludDhfdAorc2lua19kZXZpY2VfZ2V0X3Zv bHRhZ2Vfc3dpbmcoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKK3sKKwlyZXR1 cm4gc2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGxhbmVdICYKKwkJRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLOworfQorCitzdGF0aWMgdWludDhfdAorc2lua19kZXZp Y2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBs YW5lKQoreworCXJldHVybiAoc2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUwX1NFVCAr IGxhbmVdICYKKwkJIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSA+PiBEUF9UUkFJTl9QUkVf RU1QSEFTSVNfU0hJRlQ7Cit9CisKK3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9jaGVja19sYW5l X2NvdW50X2FuZF9idyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCit7CisJaWYgKHNpbmstPmRh dGEubGFuZV9jb3VudF9hbmRfYndfc2V0KQorCQlyZXR1cm47CisKKwlhc3NlcnQoc2luay0+ZGF0 YS5kcGNkW0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUXSA9PSAwKTsKKworCWlmIChzaW5rLT5kYXRh LmRwY2RbRFBfTElOS19CV19TRVRdICE9IDAgJiYKKwkgICAgc2luay0+ZGF0YS5kcGNkW0RQX0xB TkVfQ09VTlRfU0VUXSAhPSAwKQorCQlzaW5rLT5kYXRhLmxhbmVfY291bnRfYW5kX2J3X3NldCA9 IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9jaGVja19wYXR0ZXJuXzFfc2V0 KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlpbnQgbGFuZTsKKworCWlmICghc2luay0+ ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQgfHwKKwkgICAgc2luay0+ZGF0YS50cmFpbmluZ19w YXR0ZXJuXzFfc2V0KQorCQlyZXR1cm47CisKKwlhc3NlcnQoc2lua19kZXZpY2VfZ2V0X3RyYWlu aW5nX3BhdHRlcm4oc2luaykgPD0gRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKKworCWlmIChzaW5r X2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSAhPSBEUF9UUkFJTklOR19QQVRURVJO XzEpCisJCXJldHVybjsKKworCWFzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBfTElOS19CV19TRVRd ID09IERQX0xJTktfQldfMV82MiB8fAorCSAgICAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTElOS19C V19TRVRdID09IERQX0xJTktfQldfMl83KTsKKworCWFzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBf TEFORV9DT1VOVF9TRVRdID09IDEgfHwKKwkJICAgc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQ09V TlRfU0VUXSA9PSAyIHx8CisJCSAgIHNpbmstPmRhdGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0g PT0gNCk7CisKKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChz aW5rKTsgbGFuZSsrKSB7CisJCWlmIChzaW5rX2RldmljZV9nZXRfdm9sdGFnZV9zd2luZyhzaW5r LCBsYW5lKSAhPSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfHwKKwkJICAgIHNpbmtf ZGV2aWNlX2dldF9wcmVfZW1waGFzaXNfbGV2ZWwoc2luaywgbGFuZSkgIT0gRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMCkKKwkJCXNpbmstPmRhdGEuc3RhcnRlZF93aXRoX25vbl96ZXJvX2xldmVs cyA9IHRydWU7CisJfQorCisJc2luay0+ZGF0YS50cmFpbmluZ19wYXR0ZXJuXzFfc2V0ID0gdHJ1 ZTsKK30KKworc3RhdGljIHZvaWQKK3NpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMl9zZXQoc3Ry dWN0IHNpbmtfZGV2aWNlICpzaW5rKQoreworCWlmICghc2luay0+ZGF0YS5jcl9kb25lKQorCQly ZXR1cm47CisKKwlhc3NlcnQoc2lua19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykg PT0gRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsKK30KKworc3RhdGljIHZvaWQKK3NpbmtfZGV2aWNl X2NoZWNrX3BhdHRlcm5fZGlzYWJsZShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCit7CisJaWYg KCFzaW5rLT5kYXRhLmNyX2RvbmUgfHwgISBzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSkKKwkJ cmV0dXJuOworCisJYXNzZXJ0KHNpbmtfZGV2aWNlX2dldF90cmFpbmluZ19wYXR0ZXJuKHNpbmsp ID09IERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90Citz aW5rX2RldmljZV9kcGNkX3dyaXRlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgdW5zaWduZWQg aW50IG9mZnNldCwKKwkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJbWVt Y3B5KHNpbmstPmRhdGEuZHBjZCArIG9mZnNldCwgYnVmZmVyLCBzaXplKTsKKworCXNpbmtfZGV2 aWNlX2NoZWNrX2xhbmVfY291bnRfYW5kX2J3KHNpbmspOworCisJaWYgKCFzaW5rLT5kYXRhLmNy X2RvbmUpCisJCXNpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMV9zZXQoc2luayk7CisJZWxzZSBp ZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKQorCQlzaW5rX2RldmljZV9jaGVja19wYXR0 ZXJuXzJfc2V0KHNpbmspOworCWVsc2UKKwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl9kaXNh YmxlKHNpbmspOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2Rldmlj ZV9tYXhfdm9sdGFnZV9yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxhbmUp Cit7CisJcmV0dXJuIChzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgbGFu ZV0gJiBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRCkgPT0KKwkJRFBfVFJBSU5fTUFYX1NXSU5H X1JFQUNIRUQ7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9tYXhfcHJlX2VtcGhhc2lz X3JlYWNoZWQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKK3sKKwlyZXR1cm4g KHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmIERQX1RSQUlO X01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRCkgPT0KKwkJRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJ U19SRUFDSEVEOworfQorCitzdGF0aWMgdm9pZAorc2lua19kZXZpY2Vfc2V0X2FkanVzdF92b2x0 YWdlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywKKwkJCSAgICAgICBpbnQgbGFuZSwgdWludDhf dCBsZXZlbCkKK3sKKwlpbnQgc2hpZnQgPSBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMV9T SElGVCAqIChsYW5lICYgMSk7CisKKwlzaW5rLT5kYXRhLmRwY2RbRFBfQURKVVNUX1JFUVVFU1Rf TEFORTBfMSArIChsYW5lID4+IDEpXSAmPQorCQl+KERQX0FESlVTVF9WT0xUQUdFX1NXSU5HX0xB TkUwX01BU0sgPDwgc2hpZnQpOworCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9M QU5FMF8xICsgKGxhbmUgPj4gMSldIHw9CisJCWxldmVsIDw8IHNoaWZ0OworfQorCitzdGF0aWMg dm9pZAorc2lua19kZXZpY2Vfc2V0X2FkanVzdF9wcmVfZW1waGFzaXMoc3RydWN0IHNpbmtfZGV2 aWNlICpzaW5rLAorCQkJCSAgICBpbnQgbGFuZSwgdWludDhfdCBsZXZlbCkKK3sKKwlpbnQgc2hp ZnQgPSBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMV9TSElGVCAqIChsYW5lICYgMSk7CisK KwlzaW5rLT5kYXRhLmRwY2RbRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChsYW5lID4+IDEp XSAmPQorCQl+KERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTBfTUFTSyA8PCBzaGlmdCk7CisJ c2luay0+ZGF0YS5kcGNkW0RQX0FESlVTVF9SRVFVRVNUX0xBTkUwXzEgKyAobGFuZSA+PiAxKV0g fD0KKwkJbGV2ZWwgPDwgKERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTBfU0hJRlQgKyBzaGlm dCk7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl92b2x0YWdl X3N3aW5nKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlib29sIG1heF9yZWFjaGVkID0g ZmFsc2U7CisJaW50IGxhbmU7CisKKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2Vf bGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7CisJCWlmIChzaW5rX2RldmljZV9tYXhfdm9sdGFn ZV9yZWFjaGVkKHNpbmssIGxhbmUpKSB7CisJCQltYXhfcmVhY2hlZCA9IHRydWU7CisJCQlicmVh azsKKwkJfQorCX0KKworCWlmIChtYXhfcmVhY2hlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9y IChsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykg eworCQl1aW50OF90IG5ld192b2x0YWdlID0KKwkJCXNpbmtfZGV2aWNlX2dldF92b2x0YWdlX3N3 aW5nKHNpbmssIGxhbmUpICsgMTsKKworCQlzaW5rX2RldmljZV9zZXRfYWRqdXN0X3ZvbHRhZ2Uo c2luaywgbGFuZSwgbmV3X3ZvbHRhZ2UpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbAorc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfcHJlX2VtcGhhc2lzKHN0cnVjdCBz aW5rX2RldmljZSAqc2luaykKK3sKKwlib29sIG1heF9yZWFjaGVkID0gZmFsc2U7CisJaW50IGxh bmU7CisKKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5r KTsgbGFuZSsrKSB7CisJCWlmIChzaW5rX2RldmljZV9tYXhfcHJlX2VtcGhhc2lzX3JlYWNoZWQo c2luaywgbGFuZSkpIHsKKwkJCW1heF9yZWFjaGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJ fQorCisJaWYgKG1heF9yZWFjaGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGxhbmUgPSAw OyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7CisJCXVpbnQ4 X3QgbmV3X3ByZV9lbXBoYXNpcyA9CisJCQlzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xl dmVsKHNpbmssIGxhbmUpICsgMTsKKworCQlzaW5rX2RldmljZV9zZXRfYWRqdXN0X3ByZV9lbXBo YXNpcyhzaW5rLCBsYW5lLCBuZXdfcHJlX2VtcGhhc2lzKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIHZvaWQKK3NpbmtfZGV2aWNlX21hcmtfY3JfZG9uZShzdHJ1Y3Qgc2lua19k ZXZpY2UgKnNpbmspCit7CisJaW50IGxhbmU7CisKKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgc2lu a19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKQorCQlzaW5rLT5kYXRhLmRwY2RbRFBf TEFORTBfMV9TVEFUVVMgKyAobGFuZSA+PiAxKV0gfD0KKwkJCURQX0xBTkVfQ1JfRE9ORSA8PCAo NCAqIChsYW5lICYgMSkpOworCisJc2luay0+ZGF0YS5jcl9kb25lID0gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQKK3NpbmtfZGV2aWNlX21hcmtfY2hhbm5lbF9lcV9kb25lKHN0cnVjdCBzaW5rX2Rl dmljZSAqc2luaykKK3sKKwlpbnQgbGFuZTsKKworCWZvciAobGFuZSA9IDA7IGxhbmUgPCBzaW5r X2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKKwkJdWludDhfdCBtYXNrID0gKERQ X0xBTkVfQ0hBTk5FTF9FUV9ET05FIHwgRFBfTEFORV9TWU1CT0xfTE9DS0VEKTsKKwkJc2luay0+ ZGF0YS5kcGNkW0RQX0xBTkUwXzFfU1RBVFVTICsgKGxhbmUgPj4gMSldIHw9CisJCQltYXNrIDw8 ICg0ICogKGxhbmUgJiAxKSk7CisJfQorCisJc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQUxJR05f U1RBVFVTX1VQREFURURdIHw9IERQX0lOVEVSTEFORV9BTElHTl9ET05FOworCisJc2luay0+ZGF0 YS5jaGFubmVsX2VxX2RvbmUgPSB0cnVlOworfQorCitzdGF0aWMgYm9vbAorc2lua19kZXZpY2Vf Z2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywKKwkJCSAgICB1aW50OF90 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQoreworCWlmICghc2luay0+ZGF0YS5j cl9kb25lKSB7CisJCWlmICghc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfdm9sdGFnZV9zd2lu ZyhzaW5rKSkKKwkJCXNpbmtfZGV2aWNlX21hcmtfY3JfZG9uZShzaW5rKTsKKwl9IGVsc2UgaWYg KCFzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSkgeworCQlpZiAoIXNpbmtfZGV2aWNlX3JlcXVl c3RfaGlnaGVyX3ByZV9lbXBoYXNpcyhzaW5rKSkKKwkJCXNpbmtfZGV2aWNlX21hcmtfY2hhbm5l bF9lcV9kb25lKHNpbmspOworCX0KKworCW1lbWNweShsaW5rX3N0YXR1cywgc2luay0+ZGF0YS5k cGNkICsgRFBfTEFORTBfMV9TVEFUVVMsCisJICAgICAgIERQX0xJTktfU1RBVFVTX1NJWkUpOwor CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9yZXNldChzdHJ1 Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lcywgdWludDhfdCBsaW5rX2J3KQoreworCW1l bXNldCgmc2luay0+ZGF0YSwgMCwgc2l6ZW9mIHNpbmstPmRhdGEpOworCXNpbmstPmRhdGEuZHBj ZFtEUF9NQVhfTElOS19SQVRFXSA9IGxpbmtfYnc7CisJc2luay0+ZGF0YS5kcGNkW0RQX01BWF9M QU5FX0NPVU5UXSA9IGxhbmVzOworfQorCitzdGF0aWMgc3RydWN0IHNpbmtfZGV2aWNlIHNpbXBs ZV9zaW5rID0geworCS5nZXRfbGlua19zdGF0dXMgPSBzaW5rX2RldmljZV9nZXRfbGlua19zdGF0 dXMsCisJLmRwY2Rfd3JpdGUgPSBzaW5rX2RldmljZV9kcGNkX3dyaXRlLAorfTsKKworLyogR2x1 ZSBjb2RlICovCisKK3N0cnVjdCB0ZXN0X2ludGVsX2RwIHsKKwlzdHJ1Y3QgaW50ZWxfZHAgZHA7 CisJc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rOworCXVpbnQ4X3QgbGlua19idzsKKworCXVpbnQ4 X3QgbWF4X3ZvbHRhZ2U7CisJdWludDhfdCBtYXhfcHJlX2VtcGhhc2lzOworfTsKKworc3RhdGlj IHN0cnVjdCB0ZXN0X2ludGVsX2RwICoKK3RvX3Rlc3RfaW50ZWxfZHAoc3RydWN0IGludGVsX2Rw ICpkcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRwLCBzdHJ1Y3QgdGVzdF9pbnRlbF9kcCwg ZHApOworfQorCit2b2lkIGludGVsX2RwX3NldF9pZGxlX2xpbmtfdHJhaW4oc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKK3sKK30KKworYm9vbCBpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJy MihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXJldHVybiBmYWxzZTsKK30KKworYm9v bAoraW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVp bnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0pCit7CisJc3RydWN0IHNpbmtf ZGV2aWNlICpzaW5rID0gdG9fdGVzdF9pbnRlbF9kcChpbnRlbF9kcCktPnNpbms7CisJcmV0dXJu IHNpbmstPmdldF9saW5rX3N0YXR1cyhzaW5rLCBsaW5rX3N0YXR1cyk7Cit9CisKK3ZvaWQKK2lu dGVsX2RwX3VwZGF0ZV9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7 Cit9CisKK3ZvaWQgaW50ZWxfZHBfY29tcHV0ZV9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsIGludCBwb3J0X2Nsb2NrLAorCQkJICAgdWludDhfdCAqbGlua19idywgdWludDhfdCAqcmF0 ZV9zZWxlY3QpCit7CisJKmxpbmtfYncgPSB0b190ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+bGlu a19idzsKKwkqcmF0ZV9zZWxlY3QgPSAwOworfQorCit2b2lkCitpbnRlbF9kcF9wcm9ncmFtX2xp bmtfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJCSAgICAg ICB1aW50OF90IGRwX3RyYWluX3BhdCkKK3sKK30KKwordWludDhfdAoraW50ZWxfZHBfdm9sdGFn ZV9tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlyZXR1cm4gdG9fdGVzdF9pbnRl bF9kcChpbnRlbF9kcCktPm1heF92b2x0YWdlIDw8CisJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7Cit9CisKK3VpbnQ4X3QKK2ludGVsX2RwX3ByZV9lbXBoYXNpc19tYXgoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwgdWludDhfdCB2b2x0YWdlX3N3aW5nKQoreworCXJldHVybiB0b190 ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+bWF4X3ByZV9lbXBoYXNpcyA8PAorCQlEUF9UUkFJTl9Q UkVfRU1QSEFTSVNfU0hJRlQ7Cit9CisKK3NzaXplX3QgZHJtX2RwX2RwY2Rfd3JpdGUoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgdm9pZCAqYnVmZmVy LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0KKwkJY29udGFp bmVyX29mKGF1eCwgc3RydWN0IGludGVsX2RwLCBhdXgpOworCXN0cnVjdCBzaW5rX2RldmljZSAq c2luayA9IHRvX3Rlc3RfaW50ZWxfZHAoaW50ZWxfZHApLT5zaW5rOworCisJcmV0dXJuIHNpbmst PmRwY2Rfd3JpdGUoc2luaywgb2Zmc2V0LCBidWZmZXIsIHNpemUpOworfQorCisvKiAtLS0gKi8K Kworc3RhdGljIHN0cnVjdCB0ZXN0X2ludGVsX2RwIHRlc3RfZHA7CisKK3N0YXRpYyB2b2lkCitk b190ZXN0KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxhbmVzLCB1aW50OF90IGxpbmtf YncsCisJICAgICB1aW50OF90IG1heF92b2x0YWdlLCB1aW50OF90IG1heF9wcmVfZW1waGFzaXMp Cit7CisJaW50IGxhbmU7CisKKwltZW1zZXQoJnRlc3RfZHAsIDAsIHNpemVvZiB0ZXN0X2RwKTsK Kwl0ZXN0X2RwLmRwLmxhbmVfY291bnQgPSBsYW5lczsKKwl0ZXN0X2RwLmxpbmtfYncgPSBsaW5r X2J3OworCXRlc3RfZHAuc2luayA9IHNpbms7CisJdGVzdF9kcC5tYXhfdm9sdGFnZSA9CisJCW1h eF92b2x0YWdlID4+IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7CisJdGVzdF9kcC5tYXhf cHJlX2VtcGhhc2lzID0KKwkJbWF4X3ByZV9lbXBoYXNpcyA+PiBEUF9UUkFJTl9QUkVfRU1QSEFT SVNfU0hJRlQ7CisKKwlzaW5rX2RldmljZV9yZXNldChzaW5rLCBsYW5lcywgbGlua19idyk7CisK KwlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKCZ0ZXN0X2RwLmRwKTsKKwlpbnRlbF9kcF9zdG9w X2xpbmtfdHJhaW4oJnRlc3RfZHAuZHApOworCisJYXNzZXJ0KHNpbmstPmRhdGEuY3JfZG9uZSk7 CisJYXNzZXJ0KHNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKTsKKworCWZvciAobGFuZSA9IDA7 IGxhbmUgPCB0ZXN0X2RwLmRwLmxhbmVfY291bnQ7IGxhbmUrKykgeworCQl1aW50OF90IGN1cl92 ID0gc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dpbmcoc2luaywgbGFuZSk7CisJCXVpbnQ4X3Qg Y3VyX3AgPSBzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNpbmssIGxhbmUpOwor CisJCWFzc2VydChjdXJfdiA9PSB0ZXN0X2RwLm1heF92b2x0YWdlKTsKKwkJYXNzZXJ0KGN1cl9w ID09IHRlc3RfZHAubWF4X3ByZV9lbXBoYXNpcyk7CisJfQorfQorCitpbnQgdGVzdF9sYW5lc1td ID0geworCTEsIDIsIDQsCit9OworCit1aW50OF90IHRlc3RfYndbXSA9IHsKKwlEUF9MSU5LX0JX XzFfNjIsCisJRFBfTElOS19CV18yXzcsCit9OworCit1aW50OF90IHRlc3RfbWF4X3ZvbHRhZ2Vb XSA9IHsKKwlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAsCisJRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8xLAorCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiwKKwlEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzMsCit9OworCit1aW50OF90IHRlc3RfbWF4X3ByZV9l bXBoYXNpc1tdID0geworCURQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAsCisJRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMSwKKwlEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yLAorCURQX1RSQUlOX1BS RV9FTVBIX0xFVkVMXzMsCit9OworCit2b2lkCitydW5fdGVzdCh2b2lkKQoreworCWludCBsYW5l LCBidywgdm9sdGFnZSwgZW1waDsKKworCWZvciAobGFuZSA9IDA7IGxhbmUgPCBBUlJBWV9TSVpF KHRlc3RfbGFuZXMpOyBsYW5lKyspCisJZm9yIChidyA9IDA7IGJ3IDwgQVJSQVlfU0laRSh0ZXN0 X2J3KTsgYncrKykKKwlmb3IgKHZvbHRhZ2UgPSAwOyB2b2x0YWdlIDwgQVJSQVlfU0laRSh0ZXN0 X21heF92b2x0YWdlKTsgdm9sdGFnZSsrKQorCWZvciAoZW1waCA9IDA7IGVtcGggPCBBUlJBWV9T SVpFKHRlc3RfbWF4X3ByZV9lbXBoYXNpcyk7IGVtcGgrKykgeworCQlEUk1fREVCVUdfS01TKCJs JWQtYnclZC12JWQtcGUlZCIsCisJCQkgICAgICB0ZXN0X2xhbmVzW2xhbmVdLAorCQkJICAgICAg dGVzdF9id1tid10sCisJCQkgICAgICB0ZXN0X21heF92b2x0YWdlW3ZvbHRhZ2VdLAorCQkJICAg ICAgdGVzdF9tYXhfcHJlX2VtcGhhc2lzW2VtcGhdKTsKKwkJZG9fdGVzdCgmc2ltcGxlX3Npbmss CisJCQl0ZXN0X2xhbmVzW2xhbmVdLAorCQkJdGVzdF9id1tid10sCisJCQl0ZXN0X21heF92b2x0 YWdlW3ZvbHRhZ2VdLAorCQkJdGVzdF9tYXhfcHJlX2VtcGhhc2lzW2VtcGhdKTsKKwl9Cit9Ci0t IAoyLjQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK