From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v7 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Tue, 30 Dec 2014 11:34:06 +0800 Message-ID: <1419910451-15268-17-git-send-email-Ying.Liu@freescale.com> References: <1419910451-15268-1-git-send-email-Ying.Liu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1419910451-15268-1-git-send-email-Ying.Liu@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, a.hajda@samsung.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEhpbWF4IEhYODM2OUEgTUlQSSBEU0kgcGFuZWwu CgpSZXZpZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KU2lnbmVk LW9mZi1ieTogTGl1IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2Ni0+djc6CiAq IEFkZHJlc3MgQW5kcnplaiBIYWpkYSdzIGZvbGxvd2luZyBjb21tZW50cy4KICogU2ltcGxpZnkg dGhlIHJldHVybiBsb2dpYyBpbiBoeDgzNjlhX2Rjc193cml0ZSgpLgogKiBSZXBsYWNlIHRoZSBt YWNybyBoeDgzNjlhX2RzaV9pbml0X2hlbHBlcigpIHdpdGggYSBmdW5jdGlvbiBhcnJheSB0byBp bXByb3ZlCiAgIHRoZSBjb2RlIHF1YWxpdHkuCiAqIEhhbmRsZSBlcnJvciBjYXNlcyBkdXJpbmcg Z2V0dGluZyBncGlvcyBpbiBwcm9iZSgpLgogKiBBZGQgJ1Jldmlld2VkLWJ5OiBBbmRyemVqIEhh amRhIDxhLmhhamRhQHNhbXN1bmcuY29tPicuCgp2NS0+djY6CiAqIE1ha2UgdGhlIGNoZWNrcGF0 Y2gucGwgc2NyaXB0IGJlIGhhcHBpZXIuCiAqIERvIG5vdCBzZXQgdGhlIGRzaSBjaGFubmVsIG51 bWJlciB0byBiZSB6ZXJvIGluIHByb2JlKCksIGJlY2F1c2UgdGhlIE1JUEkgRFNJCiAgIGJ1cyBk cml2ZXIgd291bGQgc2V0IGl0LgoKdjQtPnY1OgogKiBBZGRyZXNzIEFuZHJ6ZWogSGFqZGEncyBj b21tZW50cy4KICogR2V0IHRoZSBicy1ncGlvcyBwcm9wZXJ0eSBpbnN0ZWFkIG9mIHRoZSBic1sz OjBdLWdwaW9zIHByb3BlcnRpZXMuCiAqIEltcGxlbWVudCBlcnJvciBwcm9wYWdhdGlvbiBmb3Ig cGFuZWwgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMuCiAqIE90aGVyIG1pbm9yIGNoYW5nZXMgdG8g aW1wcm92ZSB0aGUgY29kZSBxdWFsaXR5LgoKdjMtPnY0OgogKiBNb3ZlIHRoZSByZWxldmFudCBk dC1iaW5kaW5ncyB0byBhIHNlcGFyYXRlIHBhdGNoIHRvIGFkZHJlc3MgU3RlZmFuCiAgIFdhaHJl bidzIGNvbW1lbnQuCgp2Mi0+djM6CiAqIFNvcnQgdGhlIGluY2x1ZGVkIGhlYWRlciBmaWxlcyBh bHBoYWJldGljYWxseS4KCnYxLT52MjoKICogQWRkcmVzcyBhbG1vc3QgYWxsIGNvbW1lbnRzIGZy b20gVGhpZXJyeSBSZWRpbmcuCiAqIFJlbW92ZSBzZXZlcmFsIERUIHByb3BlcnRpZXMgYXMgdGhl eSBjYW4gYmUgaW1wbGllZCBieSB0aGUgY29tcGF0aWJsZSBzdHJpbmcuCiAqIEFkZCB0aGUgSElN QVgvaGltYXggcHJlZml4ZXMgdG8gdGhlIGRyaXZlcidzIEtjb25maWcgbmFtZSBhbmQgZHJpdmVy IG5hbWUuCiAqIE1vdmUgdGhlIGRyaXZlcidzIE1ha2VmaWxlIGVudHJ5IHBsYWNlIHRvIHNvcnQg dGhlIGVudHJpZXMgYWxwaGFiZXRpY2FsbHkuCiAqIFJldXNlIHNldmVyYWwgc3RhbmRhcmQgRENT IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGludmVudGluZyB3aGVlbHMuCiAqIE1vdmUgdGhlIHBhbmVs IHJlc2V0dGluZyBhbmQgcG93ZXIgbG9naWNzIHRvIHRoZSBkcml2ZXIgcHJvYmUvcmVtb3ZlIHN0 YWdlcy4KICAgVGhpcyBtYXkgc2ltcGxpZnkgcGFuZWwgcHJlcGFyZS91bnByZXBhcmUgaG9va3Mu IFRoZSBwb3dlciBjb25zdW1wdGlvbiBzaG91bGQKICAgbm90IGNoYW5nZSBhIGxvdCBhdCBEUE1T IHNpbmNlIHRoZSBwYW5lbCBlbnRlcnMgc2xlZXAgbW9kZSBhdCB0aGF0IHRpbWUuCiAqIEFkZCB0 aGUgbW9kdWxlIGF1dGhvci4KICogT3RoZXIgbWlub3IgY2hhbmdlcywgc3VjaCBhcyBjb2Rpbmcg c3R5bGUgaXNzdWVzLgoKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAg ICAgfCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICB8 ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5YS5jIHwgNjE0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjIwIGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt aGltYXgtaHg4MzY5YS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRleCAwMjRlOThlLi44MWIwYmYw IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtMTYsNiArMTYsMTEgQEAgY29uZmlnIERSTV9QQU5F TF9TSU1QTEUKIAkgIHRoYXQgaXQgY2FuIGJlIGF1dG9tYXRpY2FsbHkgdHVybmVkIG9mZiB3aGVu IHRoZSBwYW5lbCBnb2VzIGludG8gYQogCSAgbG93IHBvd2VyIHN0YXRlLgogCitjb25maWcgRFJN X1BBTkVMX0hJTUFYX0hYODM2OUEKKwl0cmlzdGF0ZSAiSGltYXggSFg4MzY5QSBwYW5lbCIKKwlk ZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9NSVBJX0RTSQorCiBjb25maWcgRFJNX1BBTkVMX0xE OTA0MAogCXRyaXN0YXRlICJMRDkwNDAgUkdCL1NQSSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GICYm IFNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCmluZGV4IDRiMmEwNDMuLmQ1ZGJlMDYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJ TVBMRSkgKz0gcGFuZWwtc2ltcGxlLm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfSElNQVhfSFg4 MzY5QSkgKz0gcGFuZWwtaGltYXgtaHg4MzY5YS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX0xE OTA0MCkgKz0gcGFuZWwtbGQ5MDQwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfUzZFOEFBMCkg Kz0gcGFuZWwtczZlOGFhMC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFT WDAxKSArPSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5YS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L3BhbmVsLWhpbWF4LWh4ODM2OWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5kZDNiNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LWhpbWF4LWh4ODM2OWEuYwpAQCAtMCwwICsxLDYxNCBAQAorLyoKKyAqIEhpbWF4IEhYODM2OUEg cGFuZWwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGRy aXZlciBpcyBiYXNlZCBvbiBTYW1zdW5nIHM2ZThhYTAgcGFuZWwgZHJpdmVyLgorICovCisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3BhbmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9y L2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKyNpbmNsdWRl IDx2aWRlby9vZl92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKwor I2RlZmluZSBXUkRJU0JWCQkweDUxCisjZGVmaW5lIFdSQ1RSTEQJCTB4NTMKKyNkZWZpbmUgV1JD QUJDCQkweDU1CisjZGVmaW5lIFNFVFBPV0VSCTB4YjEKKyNkZWZpbmUgU0VURElTUAkJMHhiMgor I2RlZmluZSBTRVRDWUMJCTB4YjQKKyNkZWZpbmUgU0VUVkNPTQkJMHhiNgorI2RlZmluZSBTRVRF WFRDCQkweGI5CisjZGVmaW5lIFNFVE1JUEkJCTB4YmEKKyNkZWZpbmUgU0VUUEFORUwJMHhjYwor I2RlZmluZSBTRVRHSVAJCTB4ZDUKKyNkZWZpbmUgU0VUR0FNTUEJMHhlMAorCisjZGVmaW5lIEhY ODM2OUFfTUlOX0JSSUdIVE5FU1MJMHgwMAorI2RlZmluZSBIWDgzNjlBX01BWF9CUklHSFRORVNT CTB4ZmYKKworZW51bSBoeDgzNjlhX21wdV9pbnRlcmZhY2UgeworCUhYODM2OUFfREJJX1RZUEVf QV84QklULAorCUhYODM2OUFfREJJX1RZUEVfQV85QklULAorCUhYODM2OUFfREJJX1RZUEVfQV8x NkJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0FfMThCSVQsCisJSFg4MzY5QV9EQklfVFlQRV9CXzhC SVQsCisJSFg4MzY5QV9EQklfVFlQRV9CXzlCSVQsCisJSFg4MzY5QV9EQklfVFlQRV9CXzE2QklU LAorCUhYODM2OUFfREJJX1RZUEVfQl8xOEJJVCwKKwlIWDgzNjlBX0RTSV9DTURfTU9ERSwKKwlI WDgzNjlBX0RCSV9UWVBFX0JfMjRCSVQsCisJSFg4MzY5QV9EU0lfVklERU9fTU9ERSwKKwlIWDgz NjlBX01EREksCisJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQxLAorCUhYODM2OUFfRFBJX0RC SV9UWVBFX0NfT1BUMiwKKwlIWDgzNjlBX0RQSV9EQklfVFlQRV9DX09QVDMKK307CisKK2VudW0g aHg4MzY5YV9yZXNvbHV0aW9uIHsKKwlIWDgzNjlBX1JFU180ODBfODY0LAorCUhYODM2OUFfUkVT XzQ4MF84NTQsCisJSFg4MzY5QV9SRVNfNDgwXzgwMCwKKwlIWDgzNjlBX1JFU180ODBfNjQwLAor CUhYODM2OUFfUkVTXzM2MF82NDAsCisJSFg4MzY5QV9SRVNfNDgwXzcyMCwKK307CisKK3N0cnVj dCBoeDgzNjlhX3BhbmVsX2Rlc2MgeworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlOworCisJLyogbXMgKi8KKwl1bnNpZ25lZCBpbnQgcG93ZXJfb25fZGVsYXk7CisJdW5zaWdu ZWQgaW50IHJlc2V0X2RlbGF5OworCisJdW5zaWduZWQgaW50IGRzaV9sYW5lczsKK307CisKK3N0 cnVjdCBoeDgzNjlhIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9wYW5lbCBw YW5lbDsKKworCWNvbnN0IHN0cnVjdCBoeDgzNjlhX3BhbmVsX2Rlc2MgKnBkOworCisJc3RydWN0 IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbNV07CisJc3RydWN0IGdwaW9fZGVzYyAqcmVz ZXRfZ3BpbzsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpic19ncGlvWzRdOworCXU4IHJlc19zZWw7Cit9 OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoeDgzNjlhICpwYW5lbF90b19oeDgzNjlhKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVj dCBoeDgzNjlhLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kY3Nfd3JpdGUoc3Ry dWN0IGh4ODM2OWEgKmN0eCwgY29uc3QgY2hhciAqZnVuYywKKwkJCSAgICAgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19t aXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gbWlwaV9k c2lfZGNzX3dyaXRlX2J1ZmZlcihkc2ksIGRhdGEsIGxlbik7CisJaWYgKHJldCA8IDApCisJCWRl dl9lcnIoY3R4LT5kZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBmdW5jLCByZXQpOworCXJldHVybiBy ZXQ7Cit9CisKKyNkZWZpbmUgaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgc2VxLi4uKSBcCiso eyBcCisJY29uc3QgdTggZFtdID0geyBzZXEgfTsgXAorCUJVSUxEX0JVR19PTl9NU0coQVJSQVlf U0laRShkKSA+IDY0LCBcCisJCQkgIkRDUyBzZXF1ZW5jZSB0b28gYmlnIGZvciBzdGFjayIpOyBc CisJaHg4MzY5YV9kY3Nfd3JpdGUoY3R4LCBfX2Z1bmNfXywgZCwgQVJSQVlfU0laRShkKSk7IFwK K30pCisKKyNkZWZpbmUgaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIHNlcS4uLikg XAorKHsgXAorCXN0YXRpYyBjb25zdCB1OCBkW10gPSB7IHNlcSB9OyBcCisJaHg4MzY5YV9kY3Nf d3JpdGUoY3R4LCBfX2Z1bmNfXywgZCwgQVJSQVlfU0laRShkKSk7IFwKK30pCisKK3N0YXRpYyBp bnQgaHg4MzY5YV9kc2lfc2V0X2Rpc3BsYXlfcmVsYXRlZF9yZWdpc3RlcihzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQoreworCXU4IHNlY19wID0gKGN0eC0+cmVzX3NlbCA8PCA0KSB8IDB4MDM7CisKKwly ZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgU0VURElTUCwgMHgwMCwgc2VjX3AsIDB4 MDMsCisJCQkgICAweDAzLCAweDcwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLAorCQkJ ICAgMHgwMCwgMHgwMywgMHgwMywgMHgwMCwgMHgwMSk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5 YV9kc2lfc2V0X2Rpc3BsYXlfd2F2ZWZvcm1fY3ljbGUoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sK KwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVENZQywgMHgwMCwg MHgxZCwKKwkJCQkJMHg1ZiwgMHgwZSwgMHgwNik7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9k c2lfc2V0X2dpcChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXJldHVybiBoeDgzNjlhX2Rjc193 cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUR0lQLCAweDAwLCAweDA0LAorCQkJCSAweDAzLCAweDAw LCAweDAxLCAweDA1LCAweDFjLCAweDcwLAorCQkJCSAweDAxLCAweDAzLCAweDAwLCAweDAwLCAw eDQwLCAweDA2LAorCQkJCSAweDUxLCAweDA3LCAweDAwLCAweDAwLCAweDQxLCAweDA2LAorCQkJ CSAweDUwLCAweDA3LCAweDA3LCAweDBmLCAweDA0KTsKK30KKworc3RhdGljIGludCBoeDgzNjlh X2RzaV9zZXRfcG93ZXIoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4gaHg4MzY5YV9k Y3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVFBPV0VSLCAweDAxLCAweDAwLAorCQkJCSAgIDB4 MzQsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MmEsCisJCQkJICAgMHgzMiwgMHgzZiwgMHgz ZiwgMHgwNywgMHgzYSwgMHgwMSwKKwkJCQkgICAweGU2LCAweGU2LCAweGU2LCAweGU2LCAweGU2 KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfdmNvbV92b2x0YWdlKHN0cnVjdCBo eDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4 LCBTRVRWQ09NLCAweDU2LCAweDU2KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRf cGFuZWwoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVf c2VxX3N0YXRpYyhjdHgsIFNFVFBBTkVMLCAweDAyKTsKK30KKworc3RhdGljIGludCBoeDgzNjlh X2RzaV9zZXRfZ2FtbWFfY3VydmUoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4gaHg4 MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVEdBTU1BLCAweDAwLCAweDFkLAorCQkJ CSAgIDB4MjIsIDB4MzgsIDB4M2QsIDB4M2YsIDB4MmUsIDB4NGEsCisJCQkJICAgMHgwNiwgMHgw ZCwgMHgwZiwgMHgxMywgMHgxNSwgMHgxMywKKwkJCQkgICAweDE2LCAweDEwLCAweDE5LCAweDAw LCAweDFkLCAweDIyLAorCQkJCSAgIDB4MzgsIDB4M2QsIDB4M2YsIDB4MmUsIDB4NGEsIDB4MDYs CisJCQkJICAgMHgwZCwgMHgwZiwgMHgxMywgMHgxNSwgMHgxMywgMHgxNiwKKwkJCQkgICAweDEw LCAweDE5KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfbWlwaShzdHJ1Y3QgaHg4 MzY5YSAqY3R4KQoreworCXU4IGVsZXZlbnRoX3AgPSBjdHgtPnBkLT5kc2lfbGFuZXMgPT0gMiA/ IDB4MTEgOiAweDEwOworCisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcShjdHgsIFNFVE1J UEksIDB4MDAsIDB4YTAsIDB4YzYsCisJCQkJIDB4MDAsIDB4MGEsIDB4MDAsIDB4MTAsIDB4MzAs IDB4NmYsCisJCQkJIDB4MDIsIGVsZXZlbnRoX3AsIDB4MTgsIDB4NDApOworfQorCitzdGF0aWMg aW50IGh4ODM2OWFfZHNpX3NldF9pbnRlcmZhY2VfcGl4ZWxfZm9tYXQoc3RydWN0IGh4ODM2OWEg KmN0eCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZp Y2UoY3R4LT5kZXYpOworCXU4IGZvcm1hdDsKKwlpbnQgcmV0OworCisJc3dpdGNoIChkc2ktPmZv cm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwljYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjY6CisJCWZvcm1hdCA9IDB4Nzc7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjU2NToKKwkJZm9ybWF0ID0gMHg1NTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC NjY2X1BBQ0tFRDoKKwkJZm9ybWF0ID0gMHg2NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2 X2VycihjdHgtPmRldiwgInVuc3VwcG9ydGVkIERTSSBwaXhlbCBmb3JtYXRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVsX2Zvcm1hdChk c2ksIGZvcm1hdCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoY3R4LT5kZXYsICIlcyBmYWls ZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3NldF9jb2x1bW5fYWRkcmVzcyhzdHJ1Y3QgaHg4MzY5YSAqY3R4KQorewor CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRl dik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBjdHgtPnBkLT5tb2Rl OworCWludCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2NvbHVtbl9hZGRyZXNzKGRz aSwgMCwgbW9kZS0+aGRpc3BsYXkgLSAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgt PmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQoreworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rl dmljZShjdHgtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBj dHgtPnBkLT5tb2RlOworCWludCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3BhZ2Vf YWRkcmVzcyhkc2ksIDAsIG1vZGUtPnZkaXNwbGF5IC0gMSk7CisJaWYgKHJldCA8IDApCisJCWRl dl9lcnIoY3R4LT5kZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3dyaXRlX2Rpc3BsYXlfYnJpZ2h0 bmVzcyhzdHJ1Y3QgaHg4MzY5YSAqY3R4LAorCQkJCQkJdTggYnJpZ2h0bmVzcykKK3sKKwlyZXR1 cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgV1JESVNCViwgYnJpZ2h0bmVzcyk7Cit9CisK K3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfd3JpdGVfY2FiYyhzdHJ1Y3QgaHg4MzY5YSAqY3R4KQor eworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgV1JDQUJDLCAweDAx KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV93cml0ZV9jb250cm9sX2Rpc3BsYXkoc3Ry dWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRp YyhjdHgsIFdSQ1RSTEQsIDB4MjQpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3BhbmVs X2luaXQoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlpbnQgKCpmdW5jc1tdKShzdHJ1Y3QgaHg4 MzY5YSAqY3R4KSA9IHsKKwkJaHg4MzY5YV9kc2lfc2V0X2Rpc3BsYXlfcmVsYXRlZF9yZWdpc3Rl ciwKKwkJaHg4MzY5YV9kc2lfc2V0X2Rpc3BsYXlfd2F2ZWZvcm1fY3ljbGUsCisJCWh4ODM2OWFf ZHNpX3NldF9naXAsCisJCWh4ODM2OWFfZHNpX3NldF9wb3dlciwKKwkJaHg4MzY5YV9kc2lfc2V0 X3Zjb21fdm9sdGFnZSwKKwkJaHg4MzY5YV9kc2lfc2V0X3BhbmVsLAorCQloeDgzNjlhX2RzaV9z ZXRfZ2FtbWFfY3VydmUsCisJCWh4ODM2OWFfZHNpX3NldF9taXBpLAorCQloeDgzNjlhX2RzaV9z ZXRfaW50ZXJmYWNlX3BpeGVsX2ZvbWF0LAorCQloeDgzNjlhX2RzaV9zZXRfY29sdW1uX2FkZHJl c3MsCisJCWh4ODM2OWFfZHNpX3NldF9wYWdlX2FkZHJlc3MsCisJCWh4ODM2OWFfZHNpX3dyaXRl X2NhYmMsCisJCWh4ODM2OWFfZHNpX3dyaXRlX2NvbnRyb2xfZGlzcGxheSwKKwl9OworCWludCBy ZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jcyk7IGkrKykgeworCQly ZXQgPSBmdW5jc1tpXShjdHgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X2V4dGVuc2lvbl9jb21tYW5k KHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9z dGF0aWMoY3R4LCBTRVRFWFRDLCAweGZmLCAweDgzLCAweDY5KTsKK30KKworc3RhdGljIGludCBo eDgzNjlhX2RzaV9zZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3NpemUoc3RydWN0IGh4ODM2OWEg KmN0eCwKKwkJCQkJCSAgICAgIHUxNiBzaXplKQoreworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50IHJldDsKKworCXJldCA9 IG1pcGlfZHNpX3NldF9tYXhpbXVtX3JldHVybl9wYWNrZXRfc2l6ZShkc2ksIHNpemUpOworCWlm IChyZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LAorCQkJImVycm9yICVkIHNldHRpbmcgbWF4 aW11bSByZXR1cm4gcGFja2V0IHNpemUgdG8gJWRcbiIsCisJCQlyZXQsIHNpemUpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X3NlcXVlbmNlKHN0cnVjdCBo eDgzNjlhICpjdHgpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9k c2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaHg4MzY5YV9kc2lfc2V0 X2V4dGVuc2lvbl9jb21tYW5kKGN0eCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJ cmV0ID0gaHg4MzY5YV9kc2lfc2V0X21heGltdW1fcmV0dXJuX3BhY2tldF9zaXplKGN0eCwgNCk7 CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gaHg4MzY5YV9kc2lfcGFuZWxf aW5pdChjdHgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1pcGlfZHNp X2Rjc19leGl0X3NsZWVwX21vZGUoZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGN0 eC0+ZGV2LCAiZmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9kZTogJWRcbiIsIHJldCk7CisJCWdvdG8g b3V0OworCX0KKworCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vbihkc2kpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gc2V0IGRpc3BsYXkg b246ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEl0J3MgbmVjZXNz YXJ5IHRvIHdhaXQgMTIwbXNlYyBhZnRlciBzZW5kaW5nIHRoZSBTbGVlcCBPdXQKKwkgKiBjb21t YW5kIGJlZm9yZSBTbGVlcCBJbiBjb21tYW5kIGNhbiBiZSBzZW50LCBhY2NvcmRpbmcgdG8KKwkg KiB0aGUgSFg4MzY5QSBkYXRhIHNoZWV0LgorCSAqLworCW1zbGVlcCgxMjApOworb3V0OgorCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5 YShwYW5lbCk7CisKKwlyZXR1cm4gaHg4MzY5YV9kc2lfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNz KGN0eCwKKwkJCQkJCUhYODM2OUFfTUlOX0JSSUdIVE5FU1MpOworfQorCitzdGF0aWMgaW50IGh4 ODM2OWFfZHNpX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qg aHg4MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5YShwYW5lbCk7CisJc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwlpbnQgcmV0Owor CisJcmV0ID0gbWlwaV9kc2lfZGNzX2VudGVyX3NsZWVwX21vZGUoZHNpKTsKKwlpZiAocmV0IDwg MCkgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGVudGVyIHNsZWVwIG1vZGU6ICVk XG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rp c3BsYXlfb2ZmKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImZh aWxlZCB0byBzZXQgZGlzcGxheSBvZmY6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisK KwkvKgorCSAqIFRoaXMgaXMgdG8gYWxsb3cgdGltZSBmb3IgdGhlIHN1cHBseSB2b2x0YWdlcyBh bmQgY2xvY2sKKwkgKiBjaXJjdWl0cyB0byBzdGFibGl6ZSwgYWNjb3JkaW5nIHRvIHRoZSBIWDgz NjlBIGRhdGEgc2hlZXQuCisJICovCisJbXNsZWVwKDUpOworb3V0OgorCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCkKK3sKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5YShwYW5lbCk7CisK KwlyZXR1cm4gaHg4MzY5YV9kc2lfc2V0X3NlcXVlbmNlKGN0eCk7Cit9CisKK3N0YXRpYyBpbnQg aHg4MzY5YV9kc2lfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBo eDgzNjlhICpjdHggPSBwYW5lbF90b19oeDgzNjlhKHBhbmVsKTsKKworCXJldHVybiBoeDgzNjlh X2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MoY3R4LAorCQkJCQkJSFg4MzY5QV9NQVhfQlJJ R0hUTkVTUyk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9nZXRfbW9kZXMoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVs LT5jb25uZWN0b3I7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHBhbmVsLT5kcm07CisJc3Ry dWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOworCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlOworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0g Y3R4LT5wZC0+bW9kZTsKKworCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZHJtLCBtKTsKKwlp ZiAoIW1vZGUpIHsKKwkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBhZGQgbW9kZSAldXgl dUAldVxuIiwKKwkJCW0tPmhkaXNwbGF5LCBtLT52ZGlzcGxheSwgbS0+dnJlZnJlc2gpOworCQly ZXR1cm4gMDsKKwl9CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKwltb2RlLT50eXBlID0g RFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKworCWNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA9IDg7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lk dGhfbW0gPSBtb2RlLT53aWR0aF9tbTsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRf bW0gPSBtb2RlLT5oZWlnaHRfbW07CisKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3Rvciwg bW9kZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxf ZnVuY3MgaHg4MzY5YV9kc2lfZHJtX2Z1bmNzID0geworCS5kaXNhYmxlID0gaHg4MzY5YV9kc2lf ZGlzYWJsZSwKKwkudW5wcmVwYXJlID0gaHg4MzY5YV9kc2lfdW5wcmVwYXJlLAorCS5wcmVwYXJl ID0gaHg4MzY5YV9kc2lfcHJlcGFyZSwKKwkuZW5hYmxlID0gaHg4MzY5YV9kc2lfZW5hYmxlLAor CS5nZXRfbW9kZXMgPSBoeDgzNjlhX2dldF9tb2RlcywKK307CisKK3N0YXRpYyBpbnQgaHg4MzY5 YV9wb3dlcl9vbihzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCWludCByZXQ7CisKKwlyZXQgPSBy ZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBw bGllcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltc2xlZXAoY3R4LT5wZC0+ cG93ZXJfb25fZGVsYXkpOworCisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7 CisJdXNsZWVwX3JhbmdlKDUwLCA2MCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3Bp bywgMCk7CisKKwltc2xlZXAoY3R4LT5wZC0+cmVzZXRfZGVsYXkpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9wb3dlcl9vZmYoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sK KwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp LCBjdHgtPnN1cHBsaWVzKTsKK30KKworc3RhdGljIHZvaWQgaHg4MzY5YV92bV90b19yZXNfc2Vs KHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPSBjdHgtPnBkLT5tb2RlOworCisJc3dpdGNoIChtb2RlLT5oZGlzcGxheSkgeworCWNh c2UgNDgwOgorCQlzd2l0Y2ggKG1vZGUtPnZkaXNwbGF5KSB7CisJCWNhc2UgODY0OgorCQkJY3R4 LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzg2NDsKKwkJCWJyZWFrOworCQljYXNlIDg1NDoK KwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF84NTQ7CisJCQlicmVhazsKKwkJY2Fz ZSA4MDA6CisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfODAwOworCQkJYnJlYWs7 CisJCWNhc2UgNjQwOgorCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzY0MDsKKwkJ CWJyZWFrOworCQljYXNlIDcyMDoKKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF83 MjA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNh c2UgMzYwOgorCQlpZiAobW9kZS0+dmRpc3BsYXkgPT0gNjQwKQorCQkJY3R4LT5yZXNfc2VsID0g SFg4MzY5QV9SRVNfMzYwXzY0MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdHJ1bHlfdGZ0NDgwODAw XzE2X2VfbW9kZSA9IHsKKwkuY2xvY2sgPSAyNjQwMCwKKwkuaGRpc3BsYXkgPSA0ODAsCisJLmhz eW5jX3N0YXJ0ID0gNDgwICsgOCwKKwkuaHN5bmNfZW5kID0gNDgwICsgOCArIDgsCisJLmh0b3Rh bCA9IDQ4MCArIDggKyA4ICsgOCwKKwkudmRpc3BsYXkgPSA4MDAsCisJLnZzeW5jX3N0YXJ0ID0g ODAwICsgNiwKKwkudnN5bmNfZW5kID0gODAwICsgNiArIDYsCisJLnZ0b3RhbCA9IDgwMCArIDYg KyA2ICsgNiwKKwkudnJlZnJlc2ggPSA2MCwKKwkud2lkdGhfbW0gPSA0NSwKKwkuaGVpZ2h0X21t ID0gNzYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh4ODM2OWFfcGFuZWxfZGVzYyB0cnVs eV90ZnQ0ODA4MDBfMTZfZV9kc2kgPSB7CisJLm1vZGUgPSAmdHJ1bHlfdGZ0NDgwODAwXzE2X2Vf bW9kZSwKKwkucG93ZXJfb25fZGVsYXkgPSAxMCwKKwkucmVzZXRfZGVsYXkgPSAxMCwKKwkuZHNp X2xhbmVzID0gMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGh4ODM2 OWFfZHNpX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJ0cnVseSx0ZnQ0ODA4 MDAtMTYtZS1kc2kiLAorCQkuZGF0YSA9ICZ0cnVseV90ZnQ0ODA4MDBfMTZfZV9kc2ksCisJfSwg eworCQkvKiBzZW50aW5lbCAqLworCX0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaHg4 MzY5YV9kc2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3Byb2JlKHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5k ZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQorCQkJb2ZfbWF0Y2hfZGV2 aWNlKGh4ODM2OWFfZHNpX29mX21hdGNoLCBkZXYpOworCXN0cnVjdCBoeDgzNjlhICpjdHg7CisJ aW50IHJldCwgaTsKKworCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5kZXYgPSBk ZXY7CisKKwlpZiAob2ZfaWQpIHsKKwkJY3R4LT5wZCA9IG9mX2lkLT5kYXRhOworCX0gZWxzZSB7 CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgY29tcGF0aWJsZSBkZXZpY2VcbiIpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisKKwloeDgzNjlhX3ZtX3RvX3Jlc19zZWwoY3R4KTsKKworCWN0 eC0+c3VwcGxpZXNbMF0uc3VwcGx5ID0gInZkZDEiOworCWN0eC0+c3VwcGxpZXNbMV0uc3VwcGx5 ID0gInZkZDIiOworCWN0eC0+c3VwcGxpZXNbMl0uc3VwcGx5ID0gInZkZDMiOworCWN0eC0+c3Vw cGxpZXNbM10uc3VwcGx5ID0gImRzaS12Y2MiOworCWN0eC0+c3VwcGxpZXNbNF0uc3VwcGx5ID0g InZwcCI7CisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0 eC0+c3VwcGxpZXMpLAorCQkJCSAgICAgIGN0eC0+c3VwcGxpZXMpOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yczogJWRcbiIsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXQo ZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3Bp bykpIHsKKwkJZGV2X2luZm8oZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlvcyAlbGRcbiIsCisJ CQkgUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNl dF9ncGlvKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWN0eC0+YnNfZ3Bp b1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKGRldiwgImJzIiwgaSwKKwkJCQkJ CQkJR1BJT0RfT1VUX0hJR0gpOworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eC0+YnNfZ3Bpb1tp XSkpIHsKKwkJCWRldl9kYmcoZGV2LCAiYnMlZC1ncGlvIGlzIGNvbmZpZ3VyZWRcbiIsIGkpOwor CQl9IGVsc2UgaWYgKElTX0VSUihjdHgtPmJzX2dwaW9baV0pKSB7CisJCQlkZXZfaW5mbyhkZXYs ICJmYWlsZWQgdG8gZ2V0IGJzJWQtZ3Bpb1xuIiwgaSk7CisJCQlyZXR1cm4gUFRSX0VSUihjdHgt PmJzX2dwaW9baV0pOworCQl9CisJfQorCisJcmV0ID0gaHg4MzY5YV9wb3dlcl9vbihjdHgpOwor CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHBvd2VyIG9uXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlkcm1fcGFuZWxfaW5pdCgmY3R4LT5wYW5lbCk7CisJY3R4LT5w YW5lbC5kZXYgPSBkZXY7CisJY3R4LT5wYW5lbC5mdW5jcyA9ICZoeDgzNjlhX2RzaV9kcm1fZnVu Y3M7CisKKwlyZXQgPSBkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKwlpZiAocmV0IDwgMCkK KwkJcmV0dXJuIHJldDsKKworCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsKKworCWRz aS0+bGFuZXMgPSBjdHgtPnBkLT5kc2lfbGFuZXM7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9G TVRfUkdCODg4OworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfAorCQkJ ICBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUIHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9WSURFT19T WU5DX1BVTFNFOworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQgPCAwKQor CQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaHg4MzY5YV9kc2lfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkK K3sKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKwor CW1pcGlfZHNpX2RldGFjaChkc2kpOworCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwor CXJldHVybiBoeDgzNjlhX3Bvd2VyX29mZihjdHgpOworfQorCitzdGF0aWMgc3RydWN0IG1pcGlf ZHNpX2RyaXZlciBoeDgzNjlhX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlID0gaHg4MzY5YV9kc2lf cHJvYmUsCisJLnJlbW92ZSA9IGh4ODM2OWFfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJwYW5lbC1oeDgzNjlhLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGh4ODM2OWFf ZHNpX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcihoeDgzNjlhX2Rz aV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkhpbWF4IEhYODM2OUEgcGFuZWwgZHJp dmVyIik7CitNT0RVTEVfQVVUSE9SKCJMaXUgWWluZyA8WWluZy5MaXVAZnJlZXNjYWxlLmNvbT4i KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuMS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=