From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4DD0ECAAD5 for ; Tue, 6 Sep 2022 12:00:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232208AbiIFMAW (ORCPT ); Tue, 6 Sep 2022 08:00:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234087AbiIFMAP (ORCPT ); Tue, 6 Sep 2022 08:00:15 -0400 Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 61BD572851 for ; Tue, 6 Sep 2022 05:00:11 -0700 (PDT) Received: from lichenyang$loongson.cn ( [10.20.42.75] ) by ajax-webmail-localhost.localdomain (Coremail) ; Tue, 6 Sep 2022 19:59:54 +0800 (GMT+08:00) X-Originating-IP: [10.20.42.75] Date: Tue, 6 Sep 2022 19:59:54 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5p2O5pmo6Ziz?= To: "Maxime Ripard" , "Maarten Lankhorst" , "Thomas Zimmermann" , "Dan Carpenter" , "David Airlie" , "Daniel Vetter" , dri-devel@lists.freedesktop.org, devel@linuxdriverproject.org Cc: "Sam Ravnborg" , linux-kernel@vger.kernel.org Subject: [PATCH v7 1/4] drm/loongson: Add DRM Driver for Loongson 7A1000 bridge chip X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20220411(feba7c69) Copyright (c) 2002-2022 www.mailtech.cn .loongson.cn Content-Transfer-Encoding: base64 X-CM-CTRLDATA: rv5uImZvb3Rlcl90eHQ9MzAyNjc6NjEy Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Message-ID: <72bd8113.6326.18312abd2bc.Coremail.lichenyang@loongson.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAf8BxP+A6NhdjNbcSAA--.4069W X-CM-SenderInfo: xolfxvxq1d0wo6or00hjvr0hdfq/1tbiAQABA2MV5tsWagAAs0 X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIGFuIGluaXRpYWwgRFJNIGRyaXZlciBmb3IgdGhlIExvb25nc29uIExT N0ExMDAwCmJyaWRnZSBjaGlwKExTN0EpLiBUaGUgTG9vbmdzb24gN0ExMDAwIGJyaWRnZSBjaGlw IGlzIExvb25nc29u4oCZcwpmaXJzdCBkZWRpY2F0ZWQgY2hpcHNldCBwcm9kdWN0LCBwcm92aWRp bmcgbm9ydGgtc291dGggYnJpZGdlIGZ1bmN0aW9uYWxpdHkKZm9yIExvb25nc29uIHByb2Nlc3Nv cnMuIFRoZSBicmlkZ2UgY2hpcCBpcyBjb25uZWN0ZWQgdG8gdGhlIExvb25nc29uClNlcmllcyAz IHByb2Nlc3NvciB2aWEgdGhlIEhUIGhpZ2gtc3BlZWQgYnVzIGludGVyZmFjZSBhbmQgaGFzIGFu CmludGVncmF0ZWQgRGlzcGxheUNvbnRyb2xsZXIsIEREUjMgU0RSQU0gbWVtb3J5IGNvbnRyb2xs ZXIsCmFuZCBQQ0lFLCBTQVRBLCBVU0IsIEdNQUMsIEkyQywgVUFSVCwgR1BJTywgYW5kIG90aGVy IGludGVyZmFjZXMuClRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgc3VwcG9ydHMgZHVhbCBEVk8gc2ln bmFsIG91dHB1dCxkdWFsIHJvdXRhYmlsaXR5CmZyYW1lIGJ1ZmZlci4gRWFjaCBkaXNwbGF5IHN1 cHBvcnRzIHVwIHRvIDE5MjB4MTA4MEA2MEh6LCBSR0I4ODggYW5kClJHQjU2NSBjb2xvciBkZXB0 aHMuIEFuZCBzdXBwb3J0cyBoYXJkd2FyZSBjdXJzb3IsIGdhbW1hIGNvcnJlY3Rpb24sCmludGVy cnVwdCwgc29mdCByZXNldCwgZXRjLiBUaGUgdmlkZW8gbWVtb3J5IGludGVyZmFjZSB1c2VzIDE2 LWJpdCBERFIzClNEUkFNIGludGVyZmFjZSB3aXRoIGEgbWF4aW11bSBkYXRhIHJhdGUgb2YgMTMz MyBNYnBzLgpBdCBwcmVzZW50LCBEQyBkZXZpY2UgZGV0ZWN0aW9uIGFuZCBEUk0gZHJpdmVyIHJl Z2lzdHJhdGlvbiBhcmUKY29tcGxldGVkLCB0aGUgY3J0Yy9wbGFuZS9lbmNvZGVyL2Nvbm5lY3Rv ciBvYmplY3RzIGhhcyBiZWVuCmltcGxlbWVudGVkLgpPbiBMb29uZ3NvbiAzQTQwMDAgQ1BVIGFu ZCA3QTEwMDAgc3lzdGVtLCB3ZSBoYXZlIGFjaGlldmVkIHRoZSB1c2UKb2YgZHVhbCBzY3JlZW4s IGFuZCBzdXBwb3J0IGR1YWwgc2NyZWVuIGNsb25lIG1vZGUgYW5kIGV4cGFuc2lvbgptb2RlLgpM aW5rOiBodHRwczovL2xvb25nc29uLmdpdGh1Yi5pby9Mb29uZ0FyY2gtRG9jdW1lbnRhdGlvbi9M b29uZ3Nvbi03QTEwMDAtdXNlcm1hbnVhbC1FTi5odG1sI2Rpc3BsYXktY29udHJvbGxlcgoKdjEy OgotIFVzZSBkcm1fYnJpZGdlX2Nvbm5lY3RvciBpbiBkcml2ZXIuCgp2MTE6Ci0gUmVtb3ZlIGEg bG90IG9mIHVzZWxlc3MgY29kZS4KLSBBZGQgaGVscCBpbmZvcm1hdGlvbi4KLSBEZWxldGUgdW5u ZWNlc3NhcnkgaGVhZGVyIGZpbGVzLgoKdjEwOgotIFJlcGxhY2UgdGhlIGRybW1fIHZlcnNpb24g ZnVuY3Rpb25zLgotIFJlcGxhY2UgdGhlIHNpbXBsZV9lbmNvZGVyIHZlcnNpb24gZnVuY3Rpb24u Ci0gQWxwaGFiZXRpemUgZmlsZSBuYW1lcy4KCnY5OgotIE9wdGltaXplIHRoZSBlcnJvciBoYW5k bGluZyBwcm9jZXNzLgotIFJlbW92ZSB0aGUgdXNlbGVzcyBmbGFncyBwYXJhbWV0ZXIuCi0gRml4 IHNvbWUgaW5jb3JyZWN0IHVzZSBvZiB2YXJpYWJsZXMgYW5kIGNvbnN0cnVjdHMuCgp2ODoKLSBV cGRhdGUgdGhlIGF0b21pY191cGRhdGUgZnVuY3Rpb24gaW50ZXJmYWNlLgoKdjc6Ci0gVGhlIHBp eGVsIGNsb2NrIGlzIGxpbWl0ZWQgdG8gbGVzcyB0aGFuIDE3MzAwMC4KCnY2OgotIFJlbW92ZSBz cGluX2xvY2sgaW4gbW1pbyByZWcgcmVhZCBhbmQgd3JpdGUuCi0gVE9fVU5DQUMgaXMgcmVwbGFj IHdpdGggaW9yZW1hcC4KLSBGaXggZXJyb3IgYXJndW1lbnRzIGluIGNydGNfYXRvbWljX2VuYWJs ZS9kaXNhYmxlL21vZGVfdmFsaWQuCgp2NToKLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGNoaXAg dG8gTFM3QS4KLSBDaGFuZ2UgbWFnaWMgdmFsdWUgaW4gY3J0YyB0byBtYWNyb3MuCi0gQ29ycmVj dCBtaXN0YWtlcyB3b3Jkcy4KLSBDaGFuZ2UgdGhlIHJlZ2lzdGVyIG9wZXJhdGlvbiBmdW5jdGlv biBwcmVmaXggdG8gbHM3YS4KCnY0OgotIE1vdmUgdGhlIG1vZGVfdmFsaWQgZnVuY3Rpb24gdG8g dGhlIGNydGMuCgp2MzoKLSBNb3ZlIHRoZSBtb2RlX3ZhbGlkIGZ1bmN0aW9uIHRvIHRoZSBjb25u ZWN0b3IgYW5kIG9wdGltaXplIGl0LgotIEZpeCBudW1fY3J0YyBjYWxjdWxhdGlvbiBtZXRob2Qu Cgp2MjoKLSBDb21wbGV0ZSB0aGUgY2FzZSBvZiAzMi1iaXQgY29sb3IgaW4gQ1JUQy4KClNpZ25l ZC1vZmYtYnk6IFlpIExpIDxsaXlpQGxvb25nc29uLmNuPgpTaWduZWQtb2ZmLWJ5OiBDaGVueWFu ZyBMaSA8bGljaGVueWFuZ0Bsb29uZ3Nvbi5jbj4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9L Y29uZmlnICAgICAgICAgICAgICB8ICAxMyArCiBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vTWFr ZWZpbGUgICAgICAgICAgICAgfCAgMTMgKwogZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25n c29uX2Nvbm5lY3Rvci5jIHwgIDI1ICsrCiBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdz b25fY3J0Yy5jICAgICAgfCAyNDQgKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xv b25nc29uL2xvb25nc29uX2RldmljZS5jICAgIHwgIDM4ICsrKwogZHJpdmVycy9ncHUvZHJtL2xv b25nc29uL2xvb25nc29uX2Rydi5jICAgICAgIHwgMjc1ICsrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2Rydi5oICAgICAgIHwgMTMyICsrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2VuY29kZXIuYyAgIHwgIDU5ICsr KysKIGRyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9wbGFuZS5jICAgICB8ICA5NyAr KysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDg5OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fY29ubmVjdG9yLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fY3J0Yy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2RldmljZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2Rydi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2Ry di5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29u X2VuY29kZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9s b29uZ3Nvbl9wbGFuZS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBmMTQyMmJlZTNkY2MuLmQ1NTQ3ZTQ5MmEzZiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKQEAgLTM5Miw2ICszOTIsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92Ym94 dmlkZW8vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbGltYS9LY29uZmlnIgog Citzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9LY29uZmlnIgorCiBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9hc3BlZWQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBjMmVmNWY5ZmNlNTQuLjE3M2I5NjdlMjg4 NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMTI1LDYgKzEyNSw3IEBAIG9iai0kKENPTkZJR19EUk1fVFZFMjAw KSArPSB0dmUyMDAvCiBvYmotJChDT05GSUdfRFJNX1hFTikgKz0geGVuLwogb2JqLSQoQ09ORklH X0RSTV9WQk9YVklERU8pICs9IHZib3h2aWRlby8KIG9iai0kKENPTkZJR19EUk1fTElNQSkgICs9 IGxpbWEvCitvYmotJChDT05GSUdfRFJNX0xPT05HU09OKSArPSBsb29uZ3Nvbi8KIG9iai0kKENP TkZJR19EUk1fUEFORlJPU1QpICs9IHBhbmZyb3N0Lwogb2JqLSQoQ09ORklHX0RSTV9BU1BFRURf R0ZYKSArPSBhc3BlZWQvCiBvYmotJChDT05GSUdfRFJNX01DREUpICs9IG1jZGUvCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9s b29uZ3Nvbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MjQ4NDgyNGZiNTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xvb25nc29u L0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5CisKK2NvbmZpZyBEUk1fTE9PTkdTT04KKwl0cmlzdGF0ZSAiRFJNIHN1cHBvcnQg Zm9yIExTN0EgYnJpZGdlIGNoaXBzZXQiCisJZGVwZW5kcyBvbiBEUk0gJiYgUENJCisJZGVwZW5k cyBvbiBDUFVfTE9PTkdTT042NCB8fCBDT01QSUxFX1RFU1QKKwlzZWxlY3QgRFJNX0tNU19IRUxQ RVIKKwlzZWxlY3QgRFJNX1ZSQU1fSEVMUEVSCisJaGVscAorCSAgVGhlIGxvb25nc29uIDdBIGJy aWRnZSBjaGlwIChMUzdBKSBpcyBhIHNwZWNpYWwgY2hpcHNldCBmb3IKKwkgIGxvb25nc29uIENQ VS4gTFM3QSBpbnRlcm5hbCBpbnRlZ3JhdGVkIGRpc3BsYXkgY29udHJvbGxlcnMsCisJICBzdXBw b3J0IHR3byBkaXNwbGF5IGNoYW5uZWxzLgorCSAgSWYgY29tcGlsZWQgYXMgYSBtb2R1bGUgaXQg d2lsbCBiZSBjYWxsZWQgbG9vbmdzb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbG9v bmdzb24vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MzRhNjQwNDdmYjYKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vTWFrZWZpbGUKQEAgLTAsMCArMSwx MyBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisjCisjIE1ha2Vm aWxlIGZvciBsb29uZ3NvbiBkcm0gZHJpdmVycy4KKyMgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3Vw cG9ydCBmb3IgdGhlCisjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkKKwor bG9vbmdzb24teSA6PSBsb29uZ3Nvbl9jb25uZWN0b3IubyBcCisJbG9vbmdzb25fY3J0Yy5vIFwK Kwlsb29uZ3Nvbl9kZXZpY2UubyBcCisJbG9vbmdzb25fZHJ2Lm8gXAorCWxvb25nc29uX2VuY29k ZXIubyBcCisJbG9vbmdzb25fcGxhbmUubworb2JqLSQoQ09ORklHX0RSTV9MT09OR1NPTikgKz0g bG9vbmdzb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29u X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2Nvbm5lY3Rv ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjJmZDJhZjhiM2U2 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2Nv bm5lY3Rvci5jCkBAIC0wLDAgKzEsMjUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgTG9vbmdzb24g VGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1f cHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+CisK KyNpbmNsdWRlICJsb29uZ3Nvbl9kcnYuaCIKKworaW50IGxvb25nc29uX2JyaWRnZV9jb25uZWN0 b3JfaW5pdChzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2LCBpbnQgaW5kZXgpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9ICZsZGV2LT5kZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmbGRldi0+bW9kZV9p bmZvW2luZGV4XS5lbmNvZGVyLT5iYXNlOworCisJY29ubmVjdG9yID0gZHJtX2JyaWRnZV9jb25u ZWN0b3JfaW5pdChkZXYsIGVuY29kZXIpOworCWlmIChJU19FUlIoY29ubmVjdG9yKSkgeworCQlk ZXZfZXJyKGRldi0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBicmlkZ2UgY29ubmVjdG9yXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIoY29ubmVjdG9yKTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hf ZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL2xvb25nc29uL2xvb25nc29uX2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjYxMTM3OGNlZjhlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9jcnRjLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IChD KSAyMDIwLTIwMjIgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkCisgKi8K KworI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisKKyNpbmNsdWRlICJsb29uZ3Nvbl9kcnYu aCIKKworc3RhdGljIHZvaWQgdHJ5X2VhY2hfbG9vcGModTMyIGNsaywgdTMyIHBzdGRpdiwgdTMy IGZyZWZjLAorCQkJICAgc3RydWN0IHBpeF9wbGwgKnBsbF9jb25maWcpCit7CisJdTMyIGxvb3Bj OworCXUzMiBjbGtfb3V0OworCXUzMiBwcmVjaXNpb247CisJdTMyIG1pbiA9IDEwMDA7CisJdTMy IGJhc2VfY2xrID0gMTAwMDAwTDsKKworCWZvciAobG9vcGMgPSBMT09QQ19NSU47IGxvb3BjIDwg TE9PUENfTUFYOyBsb29wYysrKSB7CisJCWlmICgobG9vcGMgPCBGUkVfUkVGX01JTiAqIGZyZWZj KSB8fAorCQkgICAgKGxvb3BjID4gRlJFX1JFRl9NQVggKiBmcmVmYykpCisJCQljb250aW51ZTsK KworCQljbGtfb3V0ID0gYmFzZV9jbGsgKiBsb29wYyAvIGZyZWZjOworCQlwcmVjaXNpb24gPSAo Y2xrID4gY2xrX291dCkgPyAoY2xrIC0gY2xrX291dCkgOiAoY2xrX291dCAtIGNsayk7CisJCWlm IChwcmVjaXNpb24gPCBtaW4pIHsKKwkJCXBsbF9jb25maWctPmwyX2RpdiA9IHBzdGRpdjsKKwkJ CXBsbF9jb25maWctPmwxX2xvb3BjID0gbG9vcGM7CisJCQlwbGxfY29uZmlnLT5sMV9mcmVmYyA9 IGZyZWZjOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjYWxfZnJlcSh1MzIgcGl4Y2xvY2ss IHN0cnVjdCBwaXhfcGxsICpwbGxfY29uZmlnKQoreworCXUzMiBwc3RkaXY7CisJdTMyIGZyZWZj OworCXUzMiBjbGs7CisKKwlmb3IgKHBzdGRpdiA9IDE7IHBzdGRpdiA8IFBTVF9ESVZfTUFYOyBw c3RkaXYrKykgeworCQljbGsgPSBwaXhjbG9jayAqIHBzdGRpdjsKKwkJZm9yIChmcmVmYyA9IERJ Vl9SRUZfTUlOOyBmcmVmYyA8PSBESVZfUkVGX01BWDsgZnJlZmMrKykKKwkJCXRyeV9lYWNoX2xv b3BjKGNsaywgcHN0ZGl2LCBmcmVmYywgcGxsX2NvbmZpZyk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBjb25maWdfcGxsKHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxkZXYsIHVuc2lnbmVkIGxvbmcg cGxsX2Jhc2UsCisJCSAgICAgICBzdHJ1Y3QgcGl4X3BsbCAqcGxsX2NmZykKK3sKKwl1MzIgdmFs OworCXUzMiBjb3VudCA9IDA7CisKKwkvKiBjbGVhciBzZWxfcGxsX291dDAgKi8KKwl2YWwgPSBs czdhX2lvX3JyZWcobGRldiwgcGxsX2Jhc2UgKyAweDQpOworCXZhbCAmPSB+KDFVTCA8PCA4KTsK KwlsczdhX2lvX3dyZWcobGRldiwgcGxsX2Jhc2UgKyAweDQsIHZhbCk7CisKKwkvKiBzZXQgcGxs X3BkICovCisJdmFsID0gbHM3YV9pb19ycmVnKGxkZXYsIHBsbF9iYXNlICsgMHg0KTsKKwl2YWwg fD0gKDFVTCA8PCAxMyk7CisJbHM3YV9pb193cmVnKGxkZXYsIHBsbF9iYXNlICsgMHg0LCB2YWwp OworCisJLyogY2xlYXIgc2V0X3BsbF9wYXJhbSAqLworCXZhbCA9IGxzN2FfaW9fcnJlZyhsZGV2 LCBwbGxfYmFzZSArIDB4NCk7CisJdmFsICY9IH4oMVVMIDw8IDExKTsKKwlsczdhX2lvX3dyZWco bGRldiwgcGxsX2Jhc2UgKyAweDQsIHZhbCk7CisKKwkvKiBjbGVhciBvbGQgdmFsdWUgJiBjb25m aWcgbmV3IHZhbHVlICovCisJdmFsID0gbHM3YV9pb19ycmVnKGxkZXYsIHBsbF9iYXNlICsgMHg0 KTsKKwl2YWwgJj0gfigweDdmVUwgPDwgMCk7CisJdmFsIHw9IChwbGxfY2ZnLT5sMV9mcmVmYyA8 PCAwKTsgLyogcmVmYyAqLworCWxzN2FfaW9fd3JlZyhsZGV2LCBwbGxfYmFzZSArIDB4NCwgdmFs KTsKKwl2YWwgPSBsczdhX2lvX3JyZWcobGRldiwgcGxsX2Jhc2UgKyAweDApOworCXZhbCAmPSB+ KDB4N2ZVTCA8PCAwKTsKKwl2YWwgfD0gKHBsbF9jZmctPmwyX2RpdiA8PCAwKTsgLyogZGl2ICov CisJdmFsICY9IH4oMHgxZmZVTCA8PCAyMSk7CisJdmFsIHw9IChwbGxfY2ZnLT5sMV9sb29wYyA8 PCAyMSk7IC8qIGxvb3BjICovCisJbHM3YV9pb193cmVnKGxkZXYsIHBsbF9iYXNlICsgMHgwLCB2 YWwpOworCisJLyogc2V0IHNldF9wbGxfcGFyYW0gKi8KKwl2YWwgPSBsczdhX2lvX3JyZWcobGRl diwgcGxsX2Jhc2UgKyAweDQpOworCXZhbCB8PSAoMVVMIDw8IDExKTsKKwlsczdhX2lvX3dyZWco bGRldiwgcGxsX2Jhc2UgKyAweDQsIHZhbCk7CisJLyogY2xlYXIgcGxsX3BkICovCisJdmFsID0g bHM3YV9pb19ycmVnKGxkZXYsIHBsbF9iYXNlICsgMHg0KTsKKwl2YWwgJj0gfigxVUwgPDwgMTMp OworCWxzN2FfaW9fd3JlZyhsZGV2LCBwbGxfYmFzZSArIDB4NCwgdmFsKTsKKworCXdoaWxlICgh KGxzN2FfaW9fcnJlZyhsZGV2LCBwbGxfYmFzZSArIDB4NCkgJiAweDgwKSkgeworCQljcHVfcmVs YXgoKTsKKwkJY291bnQrKzsKKwkJaWYgKGNvdW50ID49IDEwMDApIHsKKwkJCWRybV9lcnIoJmxk ZXYtPmRldiwgImxvb25nc29uLTdBIFBMTCBsb2NrIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJ fQorCX0KKworCXZhbCA9IGxzN2FfaW9fcnJlZyhsZGV2LCBwbGxfYmFzZSArIDB4NCk7CisJdmFs IHw9ICgxVUwgPDwgOCk7CisJbHM3YV9pb193cmVnKGxkZXYsIHBsbF9iYXNlICsgMHg0LCB2YWwp OworfQorCitzdGF0aWMgdm9pZCBsb29uZ3Nvbl9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJ c3RydWN0IGxvb25nc29uX2RldmljZSAqbGRldiA9IHRvX2xvb25nc29uX2RldmljZShkZXYpOwor CXN0cnVjdCBsb29uZ3Nvbl9jcnRjICpsY3J0YyA9IHRvX2xvb25nc29uX2NydGMoY3J0Yyk7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGU7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0OworCXN0cnVjdCBwaXhf cGxsIHBsbF9jZmc7CisJdTMyIGhyLCBoc3MsIGhzZSwgaGZsOworCXUzMiB2ciwgdnNzLCB2c2Us IHZmbDsKKwl1MzIgcGl4X2ZyZXE7CisJdTMyIHJlZ19vZmZzZXQ7CisKKwlociA9IG1vZGUtPmhk aXNwbGF5OworCWhzcyA9IG1vZGUtPmhzeW5jX3N0YXJ0OworCWhzZSA9IG1vZGUtPmhzeW5jX2Vu ZDsKKwloZmwgPSBtb2RlLT5odG90YWw7CisKKwl2ciA9IG1vZGUtPnZkaXNwbGF5OworCXZzcyA9 IG1vZGUtPnZzeW5jX3N0YXJ0OworCXZzZSA9IG1vZGUtPnZzeW5jX2VuZDsKKwl2ZmwgPSBtb2Rl LT52dG90YWw7CisKKwlwaXhfZnJlcSA9IG1vZGUtPmNsb2NrOworCXJlZ19vZmZzZXQgPSBsY3J0 Yy0+cmVnX29mZnNldDsKKwlmb3JtYXQgPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmItPmZvcm1h dDsKKworCWxzN2FfbW1fd3JlZyhsZGV2LCBGQl9ESVRDRkdfUkVHICsgcmVnX29mZnNldCwgMCk7 CisJbHM3YV9tbV93cmVnKGxkZXYsIEZCX0RJVFRBQl9MT19SRUcgKyByZWdfb2Zmc2V0LCAwKTsK KwlsczdhX21tX3dyZWcobGRldiwgRkJfRElUVEFCX0hJX1JFRyArIHJlZ19vZmZzZXQsIDApOwor CWxzN2FfbW1fd3JlZyhsZGV2LCBGQl9QQU5DRkdfUkVHICsgcmVnX29mZnNldCwgRkJfUEFOQ0ZH X0RFRik7CisJbHM3YV9tbV93cmVnKGxkZXYsIEZCX1BBTlRJTV9SRUcgKyByZWdfb2Zmc2V0LCAw KTsKKworCWxzN2FfbW1fd3JlZyhsZGV2LCBGQl9IRElTUExBWV9SRUcgKyByZWdfb2Zmc2V0LCAo aGZsIDw8IDE2KSB8IGhyKTsKKwlsczdhX21tX3dyZWcobGRldiwgRkJfSFNZTkNfUkVHICsgcmVn X29mZnNldCwKKwkJICAgICBGQl9IU1lOQ19QVUxTRSB8IChoc2UgPDwgMTYpIHwgaHNzKTsKKwor CWxzN2FfbW1fd3JlZyhsZGV2LCBGQl9WRElTUExBWV9SRUcgKyByZWdfb2Zmc2V0LCAodmZsIDw8 IDE2KSB8IHZyKTsKKwlsczdhX21tX3dyZWcobGRldiwgRkJfVlNZTkNfUkVHICsgcmVnX29mZnNl dCwKKwkJICAgICBGQl9WU1lOQ19QVUxTRSB8ICh2c2UgPDwgMTYpIHwgdnNzKTsKKworCXN3aXRj aCAoZm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlsY3J0Yy0+ Y2ZnX3JlZyB8PSAweDM7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJY2Fz ZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwlkZWZh dWx0OgorCQlsY3J0Yy0+Y2ZnX3JlZyB8PSAweDQ7CisJCWJyZWFrOworCX0KKworCWxzN2FfbW1f d3JlZyhsZGV2LCBGQl9DRkdfUkVHICsgcmVnX29mZnNldCwgbGNydGMtPmNmZ19yZWcpOworCisJ Y2FsX2ZyZXEocGl4X2ZyZXEsICZwbGxfY2ZnKTsKKwljb25maWdfcGxsKGxkZXYsIExTN0FfUElY X1BMTCArIHJlZ19vZmZzZXQsICZwbGxfY2ZnKTsKK30KKworc3RhdGljIHZvaWQgbG9vbmdzb25f Y3J0Y19hdG9taWNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2OworCXN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxkZXYgPSB0b19sb29uZ3Nvbl9k ZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbG9vbmdzb25fY3J0YyAqbGNydGMgPSB0b19sb29uZ3Nvbl9j cnRjKGNydGMpOworCXUzMiByZWdfb2Zmc2V0ID0gbGNydGMtPnJlZ19vZmZzZXQ7CisKKwlsY3J0 Yy0+Y2ZnX3JlZyB8PSBDRkdfRU5BQkxFOworCWxzN2FfbW1fd3JlZyhsZGV2LCBGQl9DRkdfUkVH ICsgcmVnX29mZnNldCwgbGNydGMtPmNmZ19yZWcpOworfQorCitzdGF0aWMgdm9pZCBsb29uZ3Nv bl9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkJIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2ID0gdG9fbG9vbmdz b25fZGV2aWNlKGRldik7CisJc3RydWN0IGxvb25nc29uX2NydGMgKmxjcnRjID0gdG9fbG9vbmdz b25fY3J0YyhjcnRjKTsKKwl1MzIgcmVnX29mZnNldCA9IGxjcnRjLT5yZWdfb2Zmc2V0OworCisJ bGNydGMtPmNmZ19yZWcgJj0gfkNGR19FTkFCTEU7CisJbHM3YV9tbV93cmVnKGxkZXYsIEZCX0NG R19SRUcgKyByZWdfb2Zmc2V0LCBsY3J0Yy0+Y2ZnX3JlZyk7Cit9CisKK3N0YXRpYyBlbnVtIGRy bV9tb2RlX3N0YXR1cyBsb29uZ3Nvbl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWlmIChtb2Rl LT5oZGlzcGxheSA+IDE5MjApCisJCXJldHVybiBNT0RFX0JBRDsKKwlpZiAobW9kZS0+dmRpc3Bs YXkgPiAxMDgwKQorCQlyZXR1cm4gTU9ERV9CQUQ7CisJaWYgKG1vZGUtPmhkaXNwbGF5ICUgNjQp CisJCXJldHVybiBNT0RFX0JBRDsKKwlpZiAobW9kZS0+Y2xvY2sgPj0gMTczMDAwKQorCQlyZXR1 cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGxvb25nc29uX2NydGNfaGVscGVyX2Z1bmNz ID0geworCS5tb2RlX3ZhbGlkID0gbG9vbmdzb25fbW9kZV92YWxpZCwKKwkuYXRvbWljX2VuYWJs ZSA9IGxvb25nc29uX2NydGNfYXRvbWljX2VuYWJsZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBsb29u Z3Nvbl9jcnRjX2F0b21pY19kaXNhYmxlLAorCS5tb2RlX3NldF9ub2ZiID0gbG9vbmdzb25fY3J0 Y19tb2RlX3NldF9ub2ZiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5j cyBsb29uZ3Nvbl9jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxw ZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlw LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3Rh dGUsCit9OworCitpbnQgbG9vbmdzb25fY3J0Y19pbml0KHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2Ug KmxkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmxkZXYtPmRl djsKKwlzdHJ1Y3QgbG9vbmdzb25fcGxhbmUgKnBsYW5lOworCXN0cnVjdCBsb29uZ3Nvbl9jcnRj ICpsY3J0YzsKKworCXBsYW5lID0gbG9vbmdzb25fcGxhbmVfaW5pdChkZXYsIGluZGV4KTsKKwlp ZiAoSVNfRVJSKHBsYW5lKSkKKwkJcmV0dXJuIFBUUl9FUlIocGxhbmUpOworCisJbGNydGMgPSBk cm1tX2NydGNfYWxsb2Nfd2l0aF9wbGFuZXMoZGV2LCBzdHJ1Y3QgbG9vbmdzb25fY3J0YywgYmFz ZSwKKwkJCQkJICAgICZwbGFuZS0+YmFzZSwgTlVMTCwKKwkJCQkJICAgICZsb29uZ3Nvbl9jcnRj X2Z1bmNzLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGxjcnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIobGNy dGMpOworCisJbGNydGMtPmxkZXYgPSBsZGV2OworCWxjcnRjLT5yZWdfb2Zmc2V0ID0gaW5kZXgg KiBSRUdfT0ZGU0VUOworCWxjcnRjLT5jZmdfcmVnID0gQ0ZHX1JFU0VUOworCWxjcnRjLT5jcnRj X2lkID0gaW5kZXg7CisJbGNydGMtPnBsYW5lID0gcGxhbmU7CisKKwlkcm1fY3J0Y19oZWxwZXJf YWRkKCZsY3J0Yy0+YmFzZSwgJmxvb25nc29uX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCWxkZXYt Pm1vZGVfaW5mb1tpbmRleF0uY3J0YyA9IGxjcnRjOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kZXZpY2UuYyBiL2RyaXZl cnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjc0MDg5ZDY0Zjk4OQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kZXZpY2UuYwpAQCAtMCwwICsxLDM4IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyoKKyAqIENv cHlyaWdodCAoQykgMjAyMC0yMDIyIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGlt aXRlZAorICovCisKKyNpbmNsdWRlICJsb29uZ3Nvbl9kcnYuaCIKKwordTMyIGxvb25nc29uX2dw dV9vZmZzZXQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCQlzdHJ1Y3QgbG9vbmdz b25fZGV2aWNlICpsZGV2KQoreworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm87CisJ dTMyIGdwdV9hZGRyOworCisJZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShzdGF0ZS0+ZmItPm9i alswXSk7CisJZ3B1X2FkZHIgPSBsZGV2LT52cmFtX3N0YXJ0ICsgZHJtX2dlbV92cmFtX29mZnNl dChnYm8pOworCisJcmV0dXJuIGdwdV9hZGRyOworfQorCit1MzIgbHM3YV9pb19ycmVnKHN0cnVj dCBsb29uZ3Nvbl9kZXZpY2UgKmxkZXYsIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKGxk ZXYtPmlvICsgb2Zmc2V0KTsKK30KKwordm9pZCBsczdhX2lvX3dyZWcoc3RydWN0IGxvb25nc29u X2RldmljZSAqbGRldiwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBsZGV2 LT5pbyArIG9mZnNldCk7Cit9CisKK3UzMiBsczdhX21tX3JyZWcoc3RydWN0IGxvb25nc29uX2Rl dmljZSAqbGRldiwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwobGRldi0+bW1pbyArIG9m ZnNldCk7Cit9CisKK3ZvaWQgbHM3YV9tbV93cmVnKHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxk ZXYsIHUzMiBvZmZzZXQsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgbGRldi0+bW1pbyArIG9m ZnNldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25f ZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fZHJ2LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40OTkzYjhkOWU4Y2EKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fZHJ2LmMKQEAgLTAsMCAr MSwyNzUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisv KgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3Jh dGlvbiBMaW1pdGVkCisgKi8KKy8qCisgKiBMb29uZ3NvbiBMUzdBMTAwMCBicmlkZ2UgY2hpcHNl dCBkcm0gZHJpdmVyCisgKiBBdXRob3I6IFlpIExpLCBsaXlpQGxvb25nc29uLmNuCisgKiAgICAg ICAgIENoZW55YW5nIExpLCBsaWNoZW55YW5nQGxvb25nc29uLmNuCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGRybS9k cm1fZHJ2Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hl bHBlci5oPgorCisjaW5jbHVkZSAibG9vbmdzb25fZHJ2LmgiCisKKy8qIEludGVyZmFjZSBoaXN0 b3J5OgorICogMC4xIC0gb3JpZ2luYWwuCisgKi8KKyNkZWZpbmUgRFJJVkVSX01BSk9SIDAKKyNk ZWZpbmUgRFJJVkVSX01JTk9SIDEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25m aWdfZnVuY3MgbG9vbmdzb25fbW9kZV9mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gZHJtX2dlbV9m Yl9jcmVhdGUsCisJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5h dG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAorCS5vdXRwdXRfcG9sbF9j aGFuZ2VkID0gZHJtX2ZiX2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFuZ2VkLAorCS5tb2RlX3ZhbGlk ID0gZHJtX3ZyYW1faGVscGVyX21vZGVfdmFsaWQKK307CisKK3N0YXRpYyBpbnQgbG9vbmdzb25f ZGV2aWNlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG9vbmdzb25f ZGV2aWNlICpsZGV2ID0gdG9fbG9vbmdzb25fZGV2aWNlKGRldik7CisJc3RydWN0IHBjaV9kZXYg KnBkZXYgPSB0b19wY2lfZGV2KGRldi0+ZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZ3B1X3BkZXY7 CisJcmVzb3VyY2Vfc2l6ZV90IGFwZXJfYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgYXBlcl9zaXpl OworCXJlc291cmNlX3NpemVfdCBtbWlvX2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IG1taW9fc2l6 ZTsKKwlpbnQgcmV0OworCisJLyogR1BVIE1FTSAqLworCS8qIFdlIG5lZWQgZ2V0IDdBLWdwdSBw Y2kgZGV2aWNlIGluZm9ybWF0aW9uIGZvciBsZGV2LT5ncHVfcGRldiAqLworCS8qIGRldi0+cGRl diBzYXZlIDdBLWRjIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gKi8KKwlncHVfcGRldiA9IHBjaV9n ZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfTE9PTkdTT04sCisJCQkJICBQQ0lfREVWSUNFX0lEX0xP T05HU09OX0dQVSwgTlVMTCk7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZ3B1X3BkZXYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3NldF9kcnZkYXRhKGdwdV9wZGV2LCBkZXYp OworCisJYXBlcl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGdwdV9wZGV2LCAyKTsKKwlhcGVy X3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGdwdV9wZGV2LCAyKTsKKwlsZGV2LT52cmFtX3N0YXJ0 ID0gYXBlcl9iYXNlOworCWxkZXYtPnZyYW1fc2l6ZSA9IGFwZXJfc2l6ZTsKKworCWlmICghZGV2 bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5kZXYsIGxkZXYtPnZyYW1fc3RhcnQsCisJCQkJICAg ICBsZGV2LT52cmFtX3NpemUsICJsb29uZ3Nvbl92cmFtIikpIHsKKwkJZHJtX2VycihkZXYsICJD YW4ndCByZXNlcnZlIFZSQU1cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIERDIE1F TSAqLworCW1taW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwltbWlvX3Np emUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWxkZXYtPm1taW8gPSBkZXZtX2lvcmVt YXAoZGV2LT5kZXYsIG1taW9fYmFzZSwgbW1pb19zaXplKTsKKwlpZiAoIWxkZXYtPm1taW8pIHsK KwkJZHJtX2VycihkZXYsICJDYW5ub3QgbWFwIG1taW8gcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPmRldiwgbW1p b19iYXNlLAorCQkJCSAgICAgbW1pb19zaXplLCAibG9vbmdzb25fbW1pbyIpKSB7CisJCWRybV9l cnIoZGV2LCAiQ2FuJ3QgcmVzZXJ2ZSBtbWlvIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCS8qIERDIElPICovCisJbGRldi0+aW8gPSBkZXZtX2lvcmVtYXAoZGV2LT5k ZXYsIExTN0FfQ0hJUENGR19SRUdfQkFTRSwgMHhmKTsKKwlpZiAoIWxkZXYtPmlvKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWxkZXYtPm51bV9jcnRjID0gMjsKKworCWRybV9pbmZvKGRldiwgIkRD IG1taW8gYmFzZSAweCVsbHggc2l6ZSAweCVsbHggaW8gMHglbGx4XG4iLAorCQkgbW1pb19iYXNl LCBtbWlvX3NpemUsICoodTY0ICopbGRldi0+aW8pOworCWRybV9pbmZvKGRldiwgIkdQVSB2cmFt IHN0YXJ0ID0gMHgleCBzaXplID0gMHgleFxuIiwKKwkJIGxkZXYtPnZyYW1fc3RhcnQsIGxkZXYt PnZyYW1fc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGxvb25nc29uX21vZGVzZXRfaW5p dChzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2KQoreworCWludCBpOworCWludCByZXQ7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbGRldi0+bnVtX2NydGM7IGkrKykgeworCQlyZXQgPSBsb29uZ3Nv bl9jcnRjX2luaXQobGRldiwgaSk7CisJCWlmIChyZXQpIHsKKwkJCWRybV93YXJuKCZsZGV2LT5k ZXYsICJsb29uZ3NvbiBjcnRjJWQgaW5pdCBmYWlsXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJcmV0ID0gbG9vbmdzb25fZW5jb2Rlcl9pbml0KGxkZXYsIGkpOworCQlpZiAocmV0KSB7 CisJCQlkcm1fZXJyKCZsZGV2LT5kZXYsICJsb29uZ3Nvbl9lbmNvZGVyX2luaXQgZmFpbGVkXG4i KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBsb29uZ3Nvbl9icmlkZ2VfY29ubmVj dG9yX2luaXQobGRldiwgaSk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9lcnIoJmxkZXYtPmRldiwg Imxvb25nc29uX2Nvbm5lY3Rvcl9pbml0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9vbmdzb25fZHJpdmVyX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2 ID0gdG9fbG9vbmdzb25fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCXJldCA9IGxvb25nc29u X2RldmljZV9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBkcm1t X3ZyYW1faGVscGVyX2luaXQoZGV2LCBsZGV2LT52cmFtX3N0YXJ0LCBsZGV2LT52cmFtX3NpemUp OworCWlmIChyZXQpIHsKKwkJZHJtX2VycihkZXYsICJFcnJvciBpbml0aWFsaXppbmcgdnJhbSAl ZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gZHJtbV9tb2RlX2NvbmZpZ19p bml0KGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRldi0+bW9kZV9jb25maWcu bWluX3dpZHRoID0gMTsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAxOworCWRldi0+ bW9kZV9jb25maWcubWF4X3dpZHRoID0gNDA5NjsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWln aHQgPSA0MDk2OworCWRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMzI7CisJZGV2 LT5tb2RlX2NvbmZpZy5wcmVmZXJfc2hhZG93ID0gMTsKKwlkZXYtPm1vZGVfY29uZmlnLmZiX2Jh c2UgPSBsZGV2LT52cmFtX3N0YXJ0OworCWRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAodm9pZCAq KSZsb29uZ3Nvbl9tb2RlX2Z1bmNzOworCisJcmV0ID0gbG9vbmdzb25fbW9kZXNldF9pbml0KGxk ZXYpOworCWlmIChyZXQpIHsKKwkJZHJtX2VycihkZXYsICJGYXRhbCBlcnJvciBkdXJpbmcgbW9k ZXNldCBpbml0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZHJtX2ttc19oZWxw ZXJfcG9sbF9pbml0KGRldik7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CisKKwlyZXR1 cm4gMDsKKworZXJyOgorCWRybV9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGRy aXZlcjogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbG9vbmdz b25fZHJpdmVyX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmRldl9wcml2 YXRlID0gTlVMTDsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LT5kZXYsIE5VTEwpOworfQorCitERUZJ TkVfRFJNX0dFTV9GT1BTKGZvcHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbG9vbmdz b25fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZF Ul9HRU0gfCBEUklWRVJfQVRPTUlDLAorCS5mb3BzID0gJmZvcHMsCisJRFJNX0dFTV9WUkFNX0RS SVZFUiwKKworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwku ZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBE UklWRVJfTUlOT1IsCit9OworCitzdGF0aWMgaW50IGxvb25nc29uX3BjaV9wcm9iZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQp Cit7CisJc3RydWN0IGxvb25nc29uX2RldmljZSAqbGRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2OworCWludCByZXQ7CisKKwlEUk1fSU5GTygiU3RhcnQgbG9vbmdzb24gZHJtIHByb2JlLlxu Iik7CisJbGRldiA9IGRldm1fZHJtX2Rldl9hbGxvYygmcGRldi0+ZGV2LCAmbG9vbmdzb25fZHJp dmVyLAorCQkJCSAgc3RydWN0IGxvb25nc29uX2RldmljZSwgZGV2KTsKKwlpZiAoSVNfRVJSKGxk ZXYpKQorCQlyZXR1cm4gUFRSX0VSUihsZGV2KTsKKwlkZXYgPSAmbGRldi0+ZGV2OworCisJcGNp X3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlyZXQgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRl dik7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgcGNpIGRl dmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gbG9vbmdz b25fZHJpdmVyX2luaXQoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoZGV2LCAiZmFpbGVk IHRvIGxvYWQgbG9vbmdzb246ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wZGV2OworCX0KKwor CXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGV2LCAwKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIo ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGRydiBmb3IgdXNlcnNwYWNlIGFjY2VzczogJWRcbiIs CisJCQlyZXQpOworCQlnb3RvIGRyaXZlcl9maW5pOworCX0KKworCWRybV9mYmRldl9nZW5lcmlj X3NldHVwKGRldiwgZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGgpOworCURSTV9JTkZP KCJsb29uZ3NvbiBmYmRldiBlbmFibGVkLlxuIik7CisKKwlyZXR1cm4gMDsKKworZHJpdmVyX2Zp bmk6CisJbG9vbmdzb25fZHJpdmVyX2ZpbmkoZGV2KTsKK2Vycl9wZGV2OgorCXBjaV9kaXNhYmxl X2RldmljZShwZGV2KTsKK2Vycl9mcmVlOgorCWRybV9kZXZfcHV0KGRldik7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgbG9vbmdzb25fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAq cGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYp OworCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRldik7CisJbG9vbmdzb25fZHJpdmVyX2ZpbmkoZGV2 KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGxvb25nc29uX3BjaV9kZXZpY2Vz W10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTE9PTkdTT04sIFBDSV9ERVZJQ0Vf SURfTE9PTkdTT05fREMpIH0sCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVy IGxvb25nc29uX2RybV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlk X3RhYmxlID0gbG9vbmdzb25fcGNpX2RldmljZXMsCisJLnByb2JlID0gbG9vbmdzb25fcGNpX3By b2JlLAorCS5yZW1vdmUgPSBsb29uZ3Nvbl9wY2lfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBf X2luaXQgbG9vbmdzb25fZHJtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2Ry aXZlcigmbG9vbmdzb25fZHJtX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQg bG9vbmdzb25fZHJtX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmxvb25n c29uX2RybV9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobG9vbmdzb25fZHJtX2luaXQp OworbW9kdWxlX2V4aXQobG9vbmdzb25fZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZF Ul9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29u Z3Nvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kcnYuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU5ZTk3ZGIwMDExMAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kcnYuaApAQCAt MCwwICsxLDEzMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAq LworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIExvb25nc29uIFRlY2hub2xvZ3kgQ29y cG9yYXRpb24gTGltaXRlZAorICovCisKKyNpZm5kZWYgX19MT09OR1NPTl9EUlZfSF9fCisjZGVm aW5lIF9fTE9PTkdTT05fRFJWX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2JyaWRnZS5oPgorCisvKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246CisgKi8KKyNkZWZpbmUg RFJJVkVSX0FVVEhPUiAiTG9vbmdzb24gZ3JhcGhpY3MgZHJpdmVyIHRlYW0iCisjZGVmaW5lIERS SVZFUl9OQU1FICJsb29uZ3Nvbi1kcm0iCisjZGVmaW5lIERSSVZFUl9ERVNDICJMb29uZ3NvbiBM UzdBIERSTSBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9EQVRFICIyMDIwMDkxNSIKKworI2RlZmlu ZSB0b19sb29uZ3Nvbl9jcnRjKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbG9vbmdzb25fY3J0 YywgYmFzZSkKKyNkZWZpbmUgdG9fbG9vbmdzb25fZW5jb2Rlcih4KSBjb250YWluZXJfb2YoeCwg c3RydWN0IGxvb25nc29uX2VuY29kZXIsIGJhc2UpCisKKyNkZWZpbmUgTFM3QV9DSElQQ0ZHX1JF R19CQVNFICgweDEwMDEwMDAwKQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xPT05HU09OX0RDIDB4 N2EwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xPT05HU09OX0dQVSAweDdhMTUKKyNkZWZpbmUg TFM3QV9QSVhfUExMICgweDA0YjApCisjZGVmaW5lIFJFR19PRkZTRVQgKDB4MTApCisjZGVmaW5l IEZCX0NGR19SRUcgKDB4MTI0MCkKKyNkZWZpbmUgRkJfQUREUjBfUkVHICgweDEyNjApCisjZGVm aW5lIEZCX0FERFIxX1JFRyAoMHgxNTgwKQorI2RlZmluZSBGQl9TVFJJX1JFRyAoMHgxMjgwKQor I2RlZmluZSBGQl9ESVRDRkdfUkVHICgweDEzNjApCisjZGVmaW5lIEZCX0RJVFRBQl9MT19SRUcg KDB4MTM4MCkKKyNkZWZpbmUgRkJfRElUVEFCX0hJX1JFRyAoMHgxM2EwKQorI2RlZmluZSBGQl9Q QU5DRkdfUkVHICgweDEzYzApCisjZGVmaW5lIEZCX1BBTlRJTV9SRUcgKDB4MTNlMCkKKyNkZWZp bmUgRkJfSERJU1BMQVlfUkVHICgweDE0MDApCisjZGVmaW5lIEZCX0hTWU5DX1JFRyAoMHgxNDIw KQorI2RlZmluZSBGQl9WRElTUExBWV9SRUcgKDB4MTQ4MCkKKyNkZWZpbmUgRkJfVlNZTkNfUkVH ICgweDE0YTApCisKKyNkZWZpbmUgQ0ZHX0ZNVCBHRU5NQVNLKDIsIDApCisjZGVmaW5lIENGR19G QlNXSVRDSCBCSVQoNykKKyNkZWZpbmUgQ0ZHX0VOQUJMRSBCSVQoOCkKKyNkZWZpbmUgQ0ZHX0ZC TlVNIEJJVCgxMSkKKyNkZWZpbmUgQ0ZHX0dBTU1BUiBCSVQoMTIpCisjZGVmaW5lIENGR19SRVNF VCBCSVQoMjApCisKKyNkZWZpbmUgRkJfUEFOQ0ZHX0RFRiAweDgwMDAxMzExCisjZGVmaW5lIEZC X0hTWU5DX1BVTFNFICgxIDw8IDMwKQorI2RlZmluZSBGQl9WU1lOQ19QVUxTRSAoMSA8PCAzMCkK KworLyogUElYIFBMTCAqLworI2RlZmluZSBMT09QQ19NSU4gMjQKKyNkZWZpbmUgTE9PUENfTUFY IDE2MQorI2RlZmluZSBGUkVfUkVGX01JTiAxMgorI2RlZmluZSBGUkVfUkVGX01BWCAzMgorI2Rl ZmluZSBESVZfUkVGX01JTiAzCisjZGVmaW5lIERJVl9SRUZfTUFYIDUKKyNkZWZpbmUgUFNUX0RJ Vl9NQVggNjQKKworc3RydWN0IHBpeF9wbGwgeworCXUzMiBsMl9kaXY7CisJdTMyIGwxX2xvb3Bj OworCXUzMiBsMV9mcmVmYzsKK307CisKK3N0cnVjdCBsb29uZ3Nvbl9jcnRjIHsKKwlzdHJ1Y3Qg ZHJtX2NydGMgYmFzZTsKKwlzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2OworCXUzMiBjcnRj X2lkOworCXUzMiByZWdfb2Zmc2V0OworCXUzMiBjZmdfcmVnOworCXN0cnVjdCBsb29uZ3Nvbl9w bGFuZSAqcGxhbmU7Cit9OworCitzdHJ1Y3QgbG9vbmdzb25fcGxhbmUgeworCXN0cnVjdCBkcm1f cGxhbmUgYmFzZTsKK307CisKK3N0cnVjdCBsb29uZ3Nvbl9lbmNvZGVyIHsKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgYmFzZTsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IGxvb25n c29uX2RldmljZSAqbGRldjsKKwlzdHJ1Y3QgbG9vbmdzb25fY3J0YyAqbGNydGM7Cit9OworCitz dHJ1Y3QgbG9vbmdzb25fbW9kZV9pbmZvIHsKKwlzdHJ1Y3QgbG9vbmdzb25fY3J0YyAqY3J0YzsK KwlzdHJ1Y3QgbG9vbmdzb25fZW5jb2RlciAqZW5jb2RlcjsKK307CisKK3N0cnVjdCBsb29uZ3Nv bl9kZXZpY2UgeworCXN0cnVjdCBkcm1fZGV2aWNlIGRldjsKKwlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGU7CisKKwl2b2lkIF9faW9tZW0gKm1taW87CisJdm9pZCBfX2lvbWVtICppbzsK Kwl1MzIgdnJhbV9zdGFydDsKKwl1MzIgdnJhbV9zaXplOworCisJdTMyIG51bV9jcnRjOworCXN0 cnVjdCBsb29uZ3Nvbl9tb2RlX2luZm8gbW9kZV9pbmZvWzJdOworCXN0cnVjdCBwY2lfZGV2ICpn cHVfcGRldjsgLyogTFM3QSBncHUgZGV2aWNlIGluZm8gKi8KK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGxvb25nc29uX2RldmljZSAqdG9fbG9vbmdzb25fZGV2aWNlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBsb29uZ3Nvbl9k ZXZpY2UsIGRldik7Cit9CisKKy8qIGNydGMgKi8KK2ludCBsb29uZ3Nvbl9jcnRjX2luaXQoc3Ry dWN0IGxvb25nc29uX2RldmljZSAqbGRldiwgaW50IGluZGV4KTsKKworLyogY29ubmVjdG9yICov CitpbnQgbG9vbmdzb25fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBsb29uZ3Nvbl9kZXZp Y2UgKmxkZXYsIGludCBpbmRleCk7CisKKy8qIGVuY29kZXIgKi8KK2ludCBsb29uZ3Nvbl9lbmNv ZGVyX2luaXQoc3RydWN0IGxvb25nc29uX2RldmljZSAqbGRldiwgaW50IGluZGV4KTsKKworLyog cGxhbmUgKi8KK3N0cnVjdCBsb29uZ3Nvbl9wbGFuZSAqbG9vbmdzb25fcGxhbmVfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaW5kZXgpOworCisvKiBkZXZpY2UgKi8KK3UzMiBsb29u Z3Nvbl9ncHVfb2Zmc2V0KHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0 IGxvb25nc29uX2RldmljZSAqZGV2KTsKK3UzMiBsczdhX21tX3JyZWcoc3RydWN0IGxvb25nc29u X2RldmljZSAqbGRldiwgdTMyIG9mZnNldCk7Cit2b2lkIGxzN2FfbW1fd3JlZyhzdHJ1Y3QgbG9v bmdzb25fZGV2aWNlICpsZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFsKTsKK3UzMiBsczdhX2lvX3Jy ZWcoc3RydWN0IGxvb25nc29uX2RldmljZSAqbGRldiwgdTMyIG9mZnNldCk7Cit2b2lkIGxzN2Ff aW9fd3JlZyhzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFs KTsKKworI2VuZGlmIC8qIF9fTE9PTkdTT05fRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9s b29uZ3Nvbi9sb29uZ3Nvbl9lbmNvZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi41Yjk0ZjcwN2YxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbG9vbmdzb24vbG9vbmdzb25fZW5jb2Rlci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IChD KSAyMDIwLTIwMjIgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkCisgKi8K KworI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKworI2luY2x1ZGUgImxv b25nc29uX2Rydi5oIgorCitzdGF0aWMgaW50IGxvb25nc29uX2JyaWRnZV9nZXRfbW9kZXMoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJaW50IGNvdW50OworCisJY291bnQgPSBkcm1fYWRkX21vZGVzX25vZWRp ZChjb25uZWN0b3IsIDE5MjAsIDEwODApOworCWRybV9zZXRfcHJlZmVycmVkX21vZGUoY29ubmVj dG9yLCAxMDI0LCA3NjgpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9icmlkZ2VfZnVuY3MgbG9vbmdzb25fZW5jb2Rlcl9icmlkZ2VfZnVuY3MgPSB7CisJ LmdldF9tb2RlcyA9IGxvb25nc29uX2JyaWRnZV9nZXRfbW9kZXMsCisJLmF0b21pY19kdXBsaWNh dGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9icmlkZ2VfZHVwbGljYXRlX3N0YXRlLAorCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9kZXN0cm95X3N0 YXRlLAorCS5hdG9taWNfcmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9icmlkZ2VfcmVzZXQsCit9 OworCitpbnQgbG9vbmdzb25fZW5jb2Rlcl9pbml0KHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxk ZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmxkZXYtPmRldjsK KwlzdHJ1Y3QgbG9vbmdzb25fZW5jb2RlciAqbGVuY29kZXI7CisJaW50IHJldDsKKworCWxlbmNv ZGVyID0gZHJtbV9zaW1wbGVfZW5jb2Rlcl9hbGxvYyhkZXYsIHN0cnVjdCBsb29uZ3Nvbl9lbmNv ZGVyLAorCQkJCQkgICAgIGJhc2UsIERSTV9NT0RFX0VOQ09ERVJfREFDKTsKKwlpZiAoSVNfRVJS KGxlbmNvZGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIobGVuY29kZXIpOworCisJbGVuY29kZXItPmJh c2UucG9zc2libGVfY3J0Y3MgPSAxIDw8IGluZGV4OworCWxkZXYtPm1vZGVfaW5mb1tpbmRleF0u ZW5jb2RlciA9IGxlbmNvZGVyOworCisJbGVuY29kZXItPmJyaWRnZS5mdW5jcyA9ICZsb29uZ3Nv bl9lbmNvZGVyX2JyaWRnZV9mdW5jczsKKwlsZW5jb2Rlci0+YnJpZGdlLm9wcyA9IERSTV9CUklE R0VfT1BfTU9ERVM7CisJaWYgKGluZGV4ID09IDApCisJCWxlbmNvZGVyLT5icmlkZ2UudHlwZSA9 IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7CisJZWxzZSBpZiAoaW5kZXggPT0gMSkKKwkJbGVuY29k ZXItPmJyaWRnZS50eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUE7CisKKwlkcm1fYnJpZGdl X2FkZCgmbGVuY29kZXItPmJyaWRnZSk7CisKKwlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaCgmbGVu Y29kZXItPmJhc2UsICZsZW5jb2Rlci0+YnJpZGdlLCBOVUxMLAorCQkJCURSTV9CUklER0VfQVRU QUNIX05PX0NPTk5FQ1RPUik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFp bGVkIHRvIGF0dGFjaCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25n c29uX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fcGxhbmUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA0ZDUwYmY3MjJmMQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9wbGFuZS5j CkBAIC0wLDAgKzEsOTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9y LWxhdGVyCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgTG9vbmdzb24gVGVjaG5vbG9n eSBDb3Jwb3JhdGlvbiBMaW1pdGVkCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+ CisKKyNpbmNsdWRlICJsb29uZ3Nvbl9kcnYuaCIKKworc3RhdGljIHZvaWQgbG9vbmdzb25fcGxh bmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJIHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbG9vbmdzb25fY3J0YyAqbGNydGM7 CisJc3RydWN0IGxvb25nc29uX2RldmljZSAqbGRldjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpsc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJdTMyIGdwdV9hZGRyID0gMDsKKwl1MzIgZmJfYWRk ciA9IDA7CisJdTMyIHJlZ192YWwgPSAwOworCXUzMiByZWdfb2Zmc2V0OworCXUzMiBwaXRjaDsK Kwl1OCBkZXB0aDsKKwl1MzIgeCwgeTsKKworCWlmICghbHN0YXRlLT5jcnRjIHx8ICFsc3RhdGUt PmZiKQorCQlyZXR1cm47CisKKwlwaXRjaCA9IGxzdGF0ZS0+ZmItPnBpdGNoZXNbMF07CisJbGNy dGMgPSB0b19sb29uZ3Nvbl9jcnRjKGxzdGF0ZS0+Y3J0Yyk7CisJbGRldiA9IGxjcnRjLT5sZGV2 OworCXJlZ19vZmZzZXQgPSBsY3J0Yy0+cmVnX29mZnNldDsKKwl4ID0gbHN0YXRlLT5jcnRjLT54 OworCXkgPSBsc3RhdGUtPmNydGMtPnk7CisJZGVwdGggPSBsc3RhdGUtPmZiLT5mb3JtYXQtPmNw cFswXSA8PCAzOworCisJZ3B1X2FkZHIgPSBsb29uZ3Nvbl9ncHVfb2Zmc2V0KGxzdGF0ZSwgbGRl dik7CisJcmVnX3ZhbCA9IChwaXRjaCArIDI1NSkgJiB+MjU1OworCWxzN2FfbW1fd3JlZyhsZGV2 LCBGQl9TVFJJX1JFRyArIHJlZ19vZmZzZXQsIHJlZ192YWwpOworCisJc3dpdGNoIChkZXB0aCkg eworCWNhc2UgMTIgLi4uIDE2OgorCQlmYl9hZGRyID0gZ3B1X2FkZHIgKyB5ICogcGl0Y2ggKyBB TElHTih4LCA2NCkgKiAyOworCQlicmVhazsKKwljYXNlIDI0IC4uLiAzMjoKKwlkZWZhdWx0Ogor CQlmYl9hZGRyID0gZ3B1X2FkZHIgKyB5ICogcGl0Y2ggKyBBTElHTih4LCA2NCkgKiA0OworCQli cmVhazsKKwl9CisKKwlsczdhX21tX3dyZWcobGRldiwgRkJfQUREUjBfUkVHICsgcmVnX29mZnNl dCwgZmJfYWRkcik7CisJbHM3YV9tbV93cmVnKGxkZXYsIEZCX0FERFIxX1JFRyArIHJlZ19vZmZz ZXQsIGZiX2FkZHIpOworCXJlZ192YWwgPSBsY3J0Yy0+Y2ZnX3JlZyB8IENGR19FTkFCTEU7CisJ bHM3YV9tbV93cmVnKGxkZXYsIEZCX0NGR19SRUcgKyByZWdfb2Zmc2V0LCByZWdfdmFsKTsKK30K Kworc3RhdGljIGNvbnN0IHVpbnQzMl90IGxvb25nc29uX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9S TUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1JHQjg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAor CURSTV9GT1JNQVRfQVJHQjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdWludDY0X3QgbG9vbmdz b25fZm9ybWF0X21vZGlmaWVyc1tdID0geyBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJCQkJCQkg ICAgICBEUk1fRk9STUFUX01PRF9JTlZBTElEIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2Z1bmNzIGxvb25nc29uX3BsYW5lX2Z1bmNzID0geworCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUs CisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5y ZXNldCA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS51cGRhdGVfcGxhbmUgPSBk cm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbG9vbmdzb25fcGxhbmVfaGVscGVyX2Z1bmNzID0gewor CS5wcmVwYXJlX2ZiCT0gZHJtX2dlbV92cmFtX3BsYW5lX2hlbHBlcl9wcmVwYXJlX2ZiLAorCS5j bGVhbnVwX2ZiCT0gZHJtX2dlbV92cmFtX3BsYW5lX2hlbHBlcl9jbGVhbnVwX2ZiLAorCS5hdG9t aWNfdXBkYXRlID0gbG9vbmdzb25fcGxhbmVfYXRvbWljX3VwZGF0ZSwKK307CisKK3N0cnVjdCBs b29uZ3Nvbl9wbGFuZSAqbG9vbmdzb25fcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGxvb25nc29uX3BsYW5lICpwbGFuZTsKKworCXBsYW5l ID0gZHJtbV91bml2ZXJzYWxfcGxhbmVfYWxsb2MoZGV2LCBzdHJ1Y3QgbG9vbmdzb25fcGxhbmUs IGJhc2UsCisJCQkJCSAgIEJJVChpbmRleCksICZsb29uZ3Nvbl9wbGFuZV9mdW5jcywKKwkJCQkJ ICAgbG9vbmdzb25fZm9ybWF0cywKKwkJCQkJICAgQVJSQVlfU0laRShsb29uZ3Nvbl9mb3JtYXRz KSwKKwkJCQkJICAgbG9vbmdzb25fZm9ybWF0X21vZGlmaWVycywKKwkJCQkJICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwgTlVMTCk7CisJaWYgKElTX0VSUihwbGFuZSkpIHsKKwkJZHJtX2Vycihk ZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGxhbmVcbiIpOworCQlyZXR1 cm4gcGxhbmU7CisJfQorCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmbG9v bmdzb25fcGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBwbGFuZTsKK30KLS0gCjIuMjUu MQoNCg0K5pys6YKu5Lu25Y+K5YW26ZmE5Lu25ZCr5pyJ6b6Z6Iqv5Lit56eR55qE5ZWG5Lia56eY 5a+G5L+h5oGv77yM5LuF6ZmQ5LqO5Y+R6YCB57uZ5LiK6Z2i5Zyw5Z2A5Lit5YiX5Ye655qE5Liq 5Lq65oiW576k57uE44CC56aB5q2i5Lu75L2V5YW25LuW5Lq65Lul5Lu75L2V5b2i5byP5L2/55So 77yI5YyF5ous5L2G5LiN6ZmQ5LqO5YWo6YOo5oiW6YOo5YiG5Zyw5rOE6Zyy44CB5aSN5Yi25oiW 5pWj5Y+R77yJ5pys6YKu5Lu25Y+K5YW26ZmE5Lu25Lit55qE5L+h5oGv44CC5aaC5p6c5oKo6ZSZ 5pS25pys6YKu5Lu277yM6K+35oKo56uL5Y2z55S16K+d5oiW6YKu5Lu26YCa55+l5Y+R5Lu25Lq6 5bm25Yig6Zmk5pys6YKu5Lu244CCIA0KVGhpcyBlbWFpbCBhbmQgaXRzIGF0dGFjaG1lbnRzIGNv bnRhaW4gY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIGZyb20gTG9vbmdzb24gVGVjaG5vbG9neSAs IHdoaWNoIGlzIGludGVuZGVkIG9ubHkgZm9yIHRoZSBwZXJzb24gb3IgZW50aXR5IHdob3NlIGFk ZHJlc3MgaXMgbGlzdGVkIGFib3ZlLiBBbnkgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBjb250YWlu ZWQgaGVyZWluIGluIGFueSB3YXkgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0b3Rh bCBvciBwYXJ0aWFsIGRpc2Nsb3N1cmUsIHJlcHJvZHVjdGlvbiBvciBkaXNzZW1pbmF0aW9uKSBi eSBwZXJzb25zIG90aGVyIHRoYW4gdGhlIGludGVuZGVkIHJlY2lwaWVudChzKSBpcyBwcm9oaWJp dGVkLiBJZiB5b3UgcmVjZWl2ZSB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRo ZSBzZW5kZXIgYnkgcGhvbmUgb3IgZW1haWwgaW1tZWRpYXRlbHkgYW5kIGRlbGV0ZSBpdC4g