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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 23077F327B2 for ; Tue, 21 Apr 2026 07:10:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 51EB510EB71; Tue, 21 Apr 2026 07:09:50 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=lontium.com header.i=@lontium.com header.b="iXEj3hOy"; dkim-atps=neutral Received: from out28-147.mail.aliyun.com (out28-147.mail.aliyun.com [115.124.28.147]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9FD4810E10C for ; Mon, 20 Apr 2026 02:39:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lontium.com; s=default; t=1776652749; h=From:To:Subject:Date:Message-Id:MIME-Version:Content-Type; bh=Ir0KxAAn4FerualjHK4s3pLwwnuJV0oEPtqxTbJrSq0=; b=iXEj3hOyU2zf+2E1nK6+K71i0EazzY49iNqUicILBMK4SKbW4umlBEDuHrqBEI0ljo5V5+nIzGA3JutOEdxvMnynhAiMN7U8MxBypjfUAS1yTACaW7KAiM1G1P8IyH4F41Loj9rZ46qKsnyBE2jtB9VfdOjwHZkVVJ0LYZyEniKGrs5jNu8b9lDnOYR7HUXidmZBtzVZlGBQxoqGl5J/k8aY1in2EuF1kKIaNoWBEBIfO3PZUAttYwjQL2vFfSYdRj/3/5SVxH4dqxoqA+btl6sd2PpOqp/7tVnAeGk3EMqO1VaM9lw46CcDm4M4aDI4EMTrvr3FXuWoJgpKM/wAYw== X-Alimail-AntiSpam: AC=CONTINUE; BC=0.07436259|-1; CH=green; DM=|CONTINUE|false|; DS=CONTINUE|ham_system_inform|0.00847375-0.000234493-0.991292; FP=13482438463041654523|0|0|0|0|-1|-1|-1; HT=maildocker-contentspam033032062159; MF=syyang@lontium.com; NM=1; PH=DS; RN=19; RT=19; SR=0; TI=SMTPD_---.hFmvE5U_1776652444; Received: from DESKTOP-V2MKAT2.localdomain(mailfrom:syyang@lontium.com fp:SMTPD_---.hFmvE5U_1776652444 cluster:ay29) by smtp.aliyun-inc.com; Mon, 20 Apr 2026 10:34:05 +0800 From: syyang@lontium.com To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, andrzej.hajda@intel.com, neil.armstrong@linaro.org, dmitry.baryshkov@oss.qualcomm.com, maarten.lankhorst@linux.intel.com, rfoss@kernel.org, mripard@kernel.org Cc: Laurent.pinchart@ideasonboard.com, tzimmermann@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, yangsunyun1993@gmail.com, xmzhu@lontium.corp-partner.google.com, Sunyun Yang Subject: [PATCH 2/2] drm/bridge: Add LT7911EXC edp to mipi bridge driver Date: Mon, 20 Apr 2026 10:33:54 +0800 Message-Id: <20260420023354.1192642-3-syyang@lontium.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260420023354.1192642-1-syyang@lontium.com> References: <20260420023354.1192642-1-syyang@lontium.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Mailman-Approved-At: Tue, 21 Apr 2026 07:09:47 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogU3VueXVuIFlhbmcgPHN5eWFuZ0Bsb250aXVtLmNvbT4KCkxUNzkxMUVYQyBpcyBhIGhp Z2ggcGVyZm9ybWFuY2UgIGVEUDEuNCB0byBNSVBJIGNoaXAgZm9yIApWUi9EaXNwbGF5IGFwcGxp Y2F0aW9uLgoKLWVEUDEuNFJlY2VpdmVyIAogMS5TdXBwb3J0IFNTQwogMi5TdXBwb3J0IDEvMi80 IGxhbmVzCiAzLlN1cHBvcnQgdXAgdG8gNEtANjBIelJHQi9ZQ2JDcjQ6NDo0OGJwYwogNC5TdXBw b3J0IGxhbmUgc3dhcCBhbmQgUE4gc3dhcAoKLU1JUEkgVHJhbnNtaXR0ZXIKIDEuQ29tcGxpYW50 d2l0aEQtUEhZMS4yJkRTSTEuMSZDU0ktMjIuMO+8mzEgY2xvY2sgbGFuZSwKICAgYW5kMS8yLzMv NCBjb25maWd1cmFibGUgZGF0YSBsYW5lczoyLjVHYnBzcGVyZGF0YWxhbmUKIDIuQ29tcGxpYW50 d2l0aEMtUEhZMS4wJkRTSS0yMS4wJkNTSS0yMi4wOwogICAxLzIvMyBjb25maWd1cmFibGUgZGF0 YSB0cmlv77ybMi41R3NwcyBwZXJkYXRhdHJpbwogMy5TdXBwb3J0MS8yY29uZmlndXJhYmxlIHBv cnRzCiA0LkRTSVN1cHBvcnQxNi8yMC8yNC1iaXQgWUNiQ3I0OjI6MiwxNi8xOC8yNC8zMC1iaXQg UkdCCgpTaWduZWQtb2ZmLWJ5OiBTdW55dW4gWWFuZyA8c3l5YW5nQGxvbnRpdW0uY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgICAgICB8ICAxOCArCiBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9sb250aXVtLWx0NzkxMWV4Yy5jIHwgNTcxICsrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1OTAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDc5MTFleGMuYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZwppbmRleCBjMzIwOWIwZjQ2NzguLmJhZThjZGFlYTY2NiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZwpAQCAtMjAyLDYgKzIwMiwyNCBAQCBjb25maWcgRFJNX0xPTlRJVU1fTFQ4NzEz U1gKIAkgIHRvIDMgY29uZmlndXJhYmxlIFR5cGUtQy9EUDEuNC9IRE1JMi4wIG91dHB1dHMKIAkg IFBsZWFzZSBzYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGhhcmR3YXJlLgogCitjb25maWcgRFJNX0xP TlRJVU1fTFQ5NjExQworCXRyaXN0YXRlICJMb250aXVtIExUOTYxMUMgRFNJL0hETUkgYnJpZGdl IgorCXNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMgaWYgU05EX1NPQworCWRlcGVuZHMgb24gT0YK KwlzZWxlY3QgQ1JDOAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgRFJNX1BBTkVMX0JSSURH RQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3Qg RFJNX0RJU1BMQVlfSEVMUEVSCisJc2VsZWN0IERSTV9ESVNQTEFZX0hETUlfU1RBVEVfSEVMUEVS CisJc2VsZWN0IFJFR01BUF9JMkMKKwloZWxwCisJICBEcml2ZXIgZm9yIExvbnRpdW0gRFNJIHRv IEhETUkgYnJpZGdlCisJICBjaGlwIGRyaXZlciB0aGF0IGNvbnZlcnRzIGR1YWwgRFNJIGFuZCBJ MlMgdG8KKwkgIEhETUkgc2lnbmFscworCSAgUGxlYXNlIHNheSBZIGlmIHlvdSBoYXZlIHN1Y2gg aGFyZHdhcmUuCisKIGNvbmZpZyBEUk1fSVRFX0lUNjYxMjEKIAl0cmlzdGF0ZSAiSVRFIElUNjYx MjEgSERNSSBicmlkZ2UiCiAJZGVwZW5kcyBvbiBPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKaW5k ZXggYmVhYjViNjk1YTZlLi41NGIyOTNkMTY2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpA QCAtMTgsNiArMTgsNyBAQCBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ5MjExKSArPSBsb250 aXVtLWx0OTIxMS5vCiBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExKSArPSBsb250aXVt LWx0OTYxMS5vCiBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExVVhDKSArPSBsb250aXVt LWx0OTYxMXV4Yy5vCiBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ4NzEzU1gpICs9IGxvbnRp dW0tbHQ4NzEzc3gubworb2JqLSQoQ09ORklHX0RSTV9MT05USVVNX0xUNzkxMUVYQykgKz0gbG9u dGl1bS1sdDc5MTFleGMubwogb2JqLSQoQ09ORklHX0RSTV9MVkRTX0NPREVDKSArPSBsdmRzLWNv ZGVjLm8KIG9iai0kKENPTkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykg Kz0gbWVnYWNoaXBzLXN0ZHB4eHh4LWdlLWI4NTB2My1mdy5vCiBvYmotJChDT05GSUdfRFJNX01J Q1JPQ0hJUF9MVkRTX1NFUklBTElaRVIpICs9IG1pY3JvY2hpcC1sdmRzLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDc5MTFleGMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbG9udGl1bS1sdDc5MTFleGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmQxYzFkOWUwNzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDc5MTFleGMuYwpAQCAtMCwwICsxLDU3MSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MjYgTG9udGl1bSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Ny YzMyLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlv L2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorCisjZGVmaW5lIEZXX1NJWkUgKDY0ICog MTAyNCkKKyNkZWZpbmUgTFRfUEFHRV9TSVpFIDMyCisjZGVmaW5lIEZXX0ZJTEUgICJMVDc5MTFF WEMuYmluIgorI2RlZmluZSBMVDc5MTFFWENfUEFHRV9DT05UUk9MIDB4ZmYKKworc3RydWN0IGx0 NzkxMWV4YyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQ7CisJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOworCXN0cnVjdCBkcm1fYnJpZGdlICpwYW5l bF9icmlkZ2U7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCS8qIFByb3RlY3RzIGFsbCBhY2Nl c3NlcyB0byByZWdpc3RlcnMgYnkgc3RvcHBpbmcgdGhlIG9uLWNoaXAgTUNVICovCisJc3RydWN0 IG11dGV4IG9jbV9sb2NrOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzWzJd OworCisJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKKwljb25zdCBzdHJ1Y3QgZmlybXdh cmUgKmZ3OworCWludCBmd192ZXJzaW9uOworCXUzMiBmd19jcmM7CisKKwlib29sIGVuYWJsZWQ7 Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgbHQ3OTExZXhjX3Jh bmdlc1tdID0geworCXsKKwkJLm5hbWUgPSAicmVnaXN0ZXJfcmFuZ2UiLAorCQkucmFuZ2VfbWlu ID0gIDAsCisJCS5yYW5nZV9tYXggPSAweGZmZmYsCisJCS5zZWxlY3Rvcl9yZWcgPSBMVDc5MTFF WENfUEFHRV9DT05UUk9MLAorCQkuc2VsZWN0b3JfbWFzayA9IDB4ZmYsCisJCS5zZWxlY3Rvcl9z aGlmdCA9IDAsCisJCS53aW5kb3dfc3RhcnQgPSAwLAorCQkud2luZG93X2xlbiA9IDB4MTAwLAor CX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbHQ3OTExZXhjX3Jl Z21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSA4LAorCS5tYXhf cmVnaXN0ZXIgPSAweGZmZmYsCisJLnJhbmdlcyA9IGx0NzkxMWV4Y19yYW5nZXMsCisJLm51bV9y YW5nZXMgPSBBUlJBWV9TSVpFKGx0NzkxMWV4Y19yYW5nZXMpLAorfTsKKworc3RhdGljIHUzMiBj YWxfY3JjMzJfY3VzdG9tKGNvbnN0IHU4ICpkYXRhLCB1NjQgbGVuZ3RoKQoreworCXUzMiBjcmMg PSAweGZmZmZmZmZmOworCXU4IGJ1Zls0XTsKKwl1NjQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBs ZW5ndGg7IGkgKz0gNCkgeworCQlidWZbMF0gPSBkYXRhW2kgKyAzXTsKKwkJYnVmWzFdID0gZGF0 YVtpICsgMl07CisJCWJ1ZlsyXSA9IGRhdGFbaSArIDFdOworCQlidWZbM10gPSBkYXRhW2kgKyAw XTsKKwkJY3JjID0gY3JjMzJfYmUoY3JjLCBidWYsIDQpOworCQl9CisKKwlyZXR1cm4gY3JjOwor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsdDc5MTFleGMgKgorCQlicmlkZ2VfdG9fbHQ3OTEx ZXhjKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihi cmlkZ2UsIHN0cnVjdCBsdDc5MTFleGMsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgbHQ3OTEx ZXhjX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IGx0NzkxMWV4YyAqbHQ3OTExZXhjKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGx0NzkxMWV4Yy0+c3VwcGxpZXNbMF0u Y29uc3VtZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdXNsZWVwX3Jhbmdl KDUwMDAsIDEwMDAwKTsKKworCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUobHQ3OTExZXhjLT5zdXBw bGllc1sxXS5jb25zdW1lcik7CisJaWYgKHJldCA8IDApIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUo bHQ3OTExZXhjLT5zdXBwbGllc1swXS5jb25zdW1lcik7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHQ3OTExZXhjX3JlZ3VsYXRvcl9kaXNhYmxlKHN0 cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVndWxh dG9yX2Rpc2FibGUobHQ3OTExZXhjLT5zdXBwbGllc1sxXS5jb25zdW1lcik7CisJaWYgKHJldCA8 IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShsdDc5MTFleGMt PnN1cHBsaWVzWzBdLmNvbnN1bWVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsdDc5MTFleGNfcmVzZXQoc3RydWN0IGx0Nzkx MWV4YyAqbHQ3OTExZXhjKQoreworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChsdDc5MTFleGMt PnJlc2V0X2dwaW8sIDEpOworCW1zbGVlcCgyMCk7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAobHQ3OTExZXhjLT5yZXNldF9ncGlvLCAwKTsKKwltc2xlZXAoMjApOworCisJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKGx0NzkxMWV4Yy0+cmVzZXRfZ3BpbywgMSk7CisJbXNsZWVwKDQwMCk7 CisKKwlkZXZfZGJnKGx0NzkxMWV4Yy0+ZGV2LCAibHQ3OTExZXhjIHJlc2V0Iik7Cit9CisKK3N0 YXRpYyBpbnQgbHQ3OTExZXhjX3BhcnNlX2R0KHN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YykK K3sKKwlpbnQgcmV0OworCisJbHQ3OTExZXhjLT5zdXBwbGllc1swXS5zdXBwbHkgPSAidmNjIjsK KwlsdDc5MTFleGMtPnN1cHBsaWVzWzFdLnN1cHBseSA9ICJ2ZGQiOworCisJcmV0ID0gZGV2bV9y ZWd1bGF0b3JfYnVsa19nZXQobHQ3OTExZXhjLT5kZXYsIDIsIGx0NzkxMWV4Yy0+c3VwcGxpZXMp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihsdDc5MTFleGMtPmRldiwgImZhaWxlZCBnZXQgcmVn dWxhdG9yXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlsdDc5MTFleGMtPnJlc2V0X2dwaW8g PSBkZXZtX2dwaW9kX2dldChsdDc5MTFleGMtPmRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7 CisJaWYgKElTX0VSUihsdDc5MTFleGMtPnJlc2V0X2dwaW8pKSB7CisJCWRldl9lcnIobHQ3OTEx ZXhjLT5kZXYsICJmYWlsZWQgdG8gYWNxdWlyZSByZXNldCBncGlvXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIobHQ3OTExZXhjLT5yZXNldF9ncGlvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBsdDc5MTFleGNfcmVhZF92ZXJzaW9uKHN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4 YykKK3sKKwl1OCBidWZbMl07CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9idWxrX3JlYWQo bHQ3OTExZXhjLT5yZWdtYXAsIDB4ZTA4MSwgYnVmLCAzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0dXJuIChidWZbMF0gPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlsyXTsK K30KKworc3RhdGljIHZvaWQgbHQ3OTExZXhjX2xvY2soc3RydWN0IGx0NzkxMWV4YyAqbHQ3OTEx ZXhjKQoreworCW11dGV4X2xvY2soJmx0NzkxMWV4Yy0+b2NtX2xvY2spOworCXJlZ21hcF93cml0 ZShsdDc5MTFleGMtPnJlZ21hcCwgMHhlMGVlLCAweDAxKTsKK30KKworc3RhdGljIHZvaWQgbHQ3 OTExZXhjX3VubG9jayhzdHJ1Y3QgbHQ3OTExZXhjICpsdDc5MTFleGMpCit7CisJcmVnbWFwX3dy aXRlKGx0NzkxMWV4Yy0+cmVnbWFwLCAweGUwZWUsIDB4MDApOworCW11dGV4X3VubG9jaygmbHQ3 OTExZXhjLT5vY21fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbHQ3OTExZXhjX3ByZXBhcmVfZmly bXdhcmVfZGF0YShzdHJ1Y3QgbHQ3OTExZXhjICpsdDc5MTFleGMpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gbHQ3OTExZXhjLT5kZXY7CisJaW50IHJldDsKKwl1OCAqYnVmZmVyOworCXNpemVf dCB0b3RhbF9zaXplID0gRldfU0laRSAtIDQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZs dDc5MTFleGMtPmZ3LCBGV19GSUxFLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgbG9hZCBmaWxlICclcycsIGVycm9yIHR5cGUgJWRcbiIsIEZXX0ZJTEUsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGx0NzkxMWV4Yy0+ZnctPnNpemUgPiB0b3RhbF9z aXplKSB7CisJCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgdG9vIGxhcmdlICglenUgPiAlenUpXG4i LCBsdDc5MTFleGMtPmZ3LT5zaXplLCB0b3RhbF9zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShs dDc5MTFleGMtPmZ3KTsKKwkJbHQ3OTExZXhjLT5mdyA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWRldl9kYmcoZGV2LCAiZmlybXdhcmUgc2l6ZTogJXp1IGJ5dGVzXG4iLCBsdDc5 MTFleGMtPmZ3LT5zaXplKTsKKworCWJ1ZmZlciA9IGt6YWxsb2ModG90YWxfc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJcmVsZWFzZV9maXJtd2FyZShsdDc5MTFleGMtPmZ3 KTsKKwkJbHQ3OTExZXhjLT5mdyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1l bXNldChidWZmZXIsIDB4ZmYsIHRvdGFsX3NpemUpOworCW1lbWNweShidWZmZXIsIGx0NzkxMWV4 Yy0+ZnctPmRhdGEsIGx0NzkxMWV4Yy0+ZnctPnNpemUpOworCisJbHQ3OTExZXhjLT5md19jcmMg PSBjYWxfY3JjMzJfY3VzdG9tKGJ1ZmZlciwgdG90YWxfc2l6ZSk7CisJZGV2X2RiZyhkZXYsICJm aXJtd2FyZSBjcmM6IDB4JTA4eFxuIiwgbHQ3OTExZXhjLT5md19jcmMpOworCisJa2ZyZWUoYnVm ZmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbHQ3OTExZXhjX2Jsb2NrX2VyYXNl KHN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBs dDc5MTFleGMtPmRldjsKKwljb25zdCB1MzIgYWRkciA9IDB4MDA7CisKKwljb25zdCBzdHJ1Y3Qg cmVnX3NlcXVlbmNlIHNlcV93cml0ZVtdID0geworCQlSRUdfU0VRMCgweGUwZWUsIDB4MDEpLAor CQlSRUdfU0VRMCgweGUwNTQsIDB4MDEpLAorCQlSRUdfU0VRMCgweGUwNTUsIDB4MDYpLAorCQlS RUdfU0VRMCgweGUwNTEsIDB4MDEpLAorCQlSRUdfU0VRMCgweGUwNTEsIDB4MDApLAorCQlSRUdf U0VRMCgweGUwNTQsIDB4MDUpLAorCQlSRUdfU0VRMCgweGUwNTUsIDB4ZDgpLAorCQlSRUdfU0VR MCgweGUwNWEsIChhZGRyID4+IDE2KSAmIDB4ZmYpLAorCQlSRUdfU0VRMCgweGUwNWIsIChhZGRy ID4+IDgpICYgMHhmZiksCisJCVJFR19TRVEwKDB4ZTA1YywgYWRkciAmIDB4ZmYpLAorCQlSRUdf U0VRMCgweGUwNTEsIDB4MDEpLAorCQlSRUdfU0VRMCgweGUwNTAsIDB4MDApLAorCX07CisKKwly ZWdtYXBfbXVsdGlfcmVnX3dyaXRlKGx0NzkxMWV4Yy0+cmVnbWFwLCBzZXFfd3JpdGUsIEFSUkFZ X1NJWkUoc2VxX3dyaXRlKSk7CisKKwltc2xlZXAoMjAwKTsKKwlkZXZfZGJnKGRldiwgImVyYXNl IGZsYXNoIGRvbmUuXG4iKTsKK30KKworc3RhdGljIHZvaWQgbHQ3OTExZXhjX3Byb2dfaW5pdChz dHJ1Y3QgbHQ3OTExZXhjICpsdDc5MTFleGMsIHU2NCBhZGRyKQoreworCWNvbnN0IHN0cnVjdCBy ZWdfc2VxdWVuY2Ugc2VxX3dyaXRlW10gPSB7CisJCVJFR19TRVEwKDB4ZTBlZSwgMHgwMSksCisJ CVJFR19TRVEwKDB4ZTA1ZiwgMHgwMSksCisJCVJFR19TRVEwKDB4ZTA1YSwgKGFkZHIgPj4gMTYp ICYgMHhmZiksCisJCVJFR19TRVEwKDB4ZTA1YiwgKGFkZHIgPj4gOCkgJiAweGZmKSwKKwkJUkVH X1NFUTAoMHhlMDVjLCBhZGRyICYgMHhmZiksCisJfTsKKworCXJlZ21hcF9tdWx0aV9yZWdfd3Jp dGUobHQ3OTExZXhjLT5yZWdtYXAsIHNlcV93cml0ZSwgQVJSQVlfU0laRShzZXFfd3JpdGUpKTsK K30KKworc3RhdGljIGludCBsdDc5MTFleGNfd3JpdGVfZGF0YShzdHJ1Y3QgbHQ3OTExZXhjICps dDc5MTFleGMsIHU2NCBhZGRyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGx0NzkxMWV4Yy0+ ZGV2OworCWludCByZXQ7CisJaW50IHBhZ2UgPSAwLCBudW0gPSAwLCBwYWdlX2xlbiA9IDA7CisJ dTY0IHNpemUsIG9mZnNldDsKKwljb25zdCB1OCAqZGF0YTsKKworCWRhdGEgPSBsdDc5MTFleGMt PmZ3LT5kYXRhOworCXNpemUgPSBsdDc5MTFleGMtPmZ3LT5zaXplOworCXBhZ2UgPSAoc2l6ZSAr IExUX1BBR0VfU0laRSAtIDEpIC8gTFRfUEFHRV9TSVpFOworCWlmIChwYWdlICogTFRfUEFHRV9T SVpFID4gRldfU0laRSkgeworCQlkZXZfZXJyKGRldiwgImZpcm13YXJlIHNpemUgb3V0IG9mIHJh bmdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkZXYsICIldSBwYWdl cywgdG90YWwgc2l6ZSAlbGx1IGJ5dGVcbiIsIHBhZ2UsIHNpemUpOworCisJZm9yIChudW0gPSAw OyBudW0gPCBwYWdlOyBudW0rKykgeworCQlvZmZzZXQgPSBudW0gKiBMVF9QQUdFX1NJWkU7CisJ CXBhZ2VfbGVuID0gKG9mZnNldCArIExUX1BBR0VfU0laRSA8PSBzaXplKSA/IExUX1BBR0VfU0la RSA6IChzaXplIC0gb2Zmc2V0KTsKKwkJbHQ3OTExZXhjX3Byb2dfaW5pdChsdDc5MTFleGMsIGFk ZHIpOworCisJCXJldCA9IHJlZ21hcF9yYXdfd3JpdGUobHQ3OTExZXhjLT5yZWdtYXAsIDB4ZTA1 ZCwgJmRhdGFbb2Zmc2V0XSwgcGFnZV9sZW4pOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRl diwgIndyaXRlIGVycm9yIGF0IHBhZ2UgJWRcbiIsIG51bSk7CisJCQlyZXR1cm4gcmV0OworCQl9 CisKKwkJaWYgKHBhZ2VfbGVuIDwgTFRfUEFHRV9TSVpFKSB7CisJCQlyZWdtYXBfd3JpdGUobHQ3 OTExZXhjLT5yZWdtYXAsIDB4ZTA1ZiwgMHgwNSk7CisJCQlyZWdtYXBfd3JpdGUobHQ3OTExZXhj LT5yZWdtYXAsIDB4ZTA1ZiwgMHgwMSk7CisJCQkvL2hhcmR3YXJlIHJlcXVpcmVzIGRlbGF5CisJ CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJCX0KKworCQlyZWdtYXBfd3JpdGUobHQ3OTEx ZXhjLT5yZWdtYXAsIDB4ZTA1ZiwgMHgwMCk7CisJCWFkZHIgKz0gTFRfUEFHRV9TSVpFOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0NzkxMWV4Y193cml0ZV9jcmMoc3RydWN0 IGx0NzkxMWV4YyAqbHQ3OTExZXhjLCB1NjQgYWRkcikKK3sKKwl1OCBjcmNbNF07CisJaW50IHJl dDsKKworCWNyY1swXSA9IGx0NzkxMWV4Yy0+ZndfY3JjICYgMHhmZjsKKwljcmNbMV0gPSAobHQ3 OTExZXhjLT5md19jcmMgPj4gOCkgJiAweGZmOworCWNyY1syXSA9IChsdDc5MTFleGMtPmZ3X2Ny YyA+PiAxNikgJiAweGZmOworCWNyY1szXSA9IChsdDc5MTFleGMtPmZ3X2NyYyA+PiAyNCkgJiAw eGZmOworCisJcmVnbWFwX3dyaXRlKGx0NzkxMWV4Yy0+cmVnbWFwLCAweGUwNWYsIDB4MDEpOwor CXJlZ21hcF93cml0ZShsdDc5MTFleGMtPnJlZ21hcCwgMHhlMDVhLCAoYWRkciA+PiAxNikgJiAw eGZmKTsKKwlyZWdtYXBfd3JpdGUobHQ3OTExZXhjLT5yZWdtYXAsIDB4ZTA1YiwgKGFkZHIgPj4g OCkgJiAweGZmKTsKKwlyZWdtYXBfd3JpdGUobHQ3OTExZXhjLT5yZWdtYXAsIDB4ZTA1YywgYWRk ciAmIDB4ZmYpOworCisJcmV0ID0gcmVnbWFwX3Jhd193cml0ZShsdDc5MTFleGMtPnJlZ21hcCwg MHhlMDVkLCBjcmMsIDQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmVnbWFwX3dyaXRl KGx0NzkxMWV4Yy0+cmVnbWFwLCAweGUwNWYsIDB4MDUpOworCXJlZ21hcF93cml0ZShsdDc5MTFl eGMtPnJlZ21hcCwgMHhlMDVmLCAweDAxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJ cmVnbWFwX3dyaXRlKGx0NzkxMWV4Yy0+cmVnbWFwLCAweGUwNWYsIDB4MDApOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbHQ3OTExZXhjX2Zpcm13YXJlX3VwZ3JhZGUoc3RydWN0IGx0 NzkxMWV4YyAqbHQ3OTExZXhjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGx0NzkxMWV4Yy0+ ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBsdDc5MTFleGNfcHJlcGFyZV9maXJtd2FyZV9kYXRh KGx0NzkxMWV4Yyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZGJnKGRl diwgInN0YXJ0aW5nIGZpcm13YXJlIHVwZ3JhZGUsIHNpemU6ICV6dSBieXRlc1xuIiwgbHQ3OTEx ZXhjLT5mdy0+c2l6ZSk7CisKKwlsdDc5MTFleGNfYmxvY2tfZXJhc2UobHQ3OTExZXhjKTsKKwor CXJldCA9IGx0NzkxMWV4Y193cml0ZV9kYXRhKGx0NzkxMWV4YywgMCk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gd3JpdGUgZmlybXdhcmUgZGF0YVxuIik7CisJ CXJldHVybiByZXQ7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShsdDc5MTFleGMtPmZ3KTsKKwls dDc5MTFleGMtPmZ3ID0gTlVMTDsKKworCXJldCA9IGx0NzkxMWV4Y193cml0ZV9jcmMobHQ3OTEx ZXhjLCBGV19TSVpFIC0gNCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gd3JpdGUgZmlybXdhcmUgY3JjXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBsdDc5MTFleGNfdXBncmFkZV9yZXN1bHQoc3RydWN0IGx0 NzkxMWV4YyAqbHQ3OTExZXhjKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGx0NzkxMWV4Yy0+ ZGV2OworCXUzMiByZWFkX2h3X2NyYyA9IDA7CisJdTggY3JjX3RtcFs0XTsKKwlpbnQgcmV0Owor CisJcmVnbWFwX3dyaXRlKGx0NzkxMWV4Yy0+cmVnbWFwLCAweGUwZWUsIDB4MDEpOworCXJlZ21h cF93cml0ZShsdDc5MTFleGMtPnJlZ21hcCwgMHhlMDdiLCAweDYwKTsKKwlyZWdtYXBfd3JpdGUo bHQ3OTExZXhjLT5yZWdtYXAsIDB4ZTA3YiwgMHg0MCk7CisJbXNsZWVwKDE1MCk7CisJcmV0ID0g cmVnbWFwX2J1bGtfcmVhZChsdDc5MTFleGMtPnJlZ21hcCwgMHgyMiwgY3JjX3RtcCwgNCk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGx0NzkxMWV4Yy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQ1JD OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWFkX2h3X2NyYyA9IGNyY190 bXBbMF0gPDwgMjQgfCBjcmNfdG1wWzFdIDw8IDE2IHwKKwkJCQljcmNfdG1wWzJdIDw8IDggfCBj cmNfdG1wWzNdOworCisJaWYgKHJlYWRfaHdfY3JjICE9IGx0NzkxMWV4Yy0+ZndfY3JjKSB7CisJ CWRldl9lcnIoZGV2LCAibHQ3OTExZXhjIGZpcm13YXJlIHVwZ3JhZGUgZmFpbGVkLCBleHBlY3Rl ZCBDUkM9MHglMDh4LCByZWFkIENSQz0weCUwOHhcbiIsCisJCQlsdDc5MTFleGMtPmZ3X2NyYywg cmVhZF9od19jcmMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfZGJnKGRldiwgImx0Nzkx MWV4YyBmaXJtd2FyZSB1cGdyYWRlIHN1Y2Nlc3MsIENSQz0weCUwOHhcbiIsIHJlYWRfaHdfY3Jj KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbHQ3OTExZXhjX3ByZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbHQ3OTExZXhjICpsdDc5MTFleGMg PSBicmlkZ2VfdG9fbHQ3OTExZXhjKGJyaWRnZSk7CisJaW50IHJldDsKKworCWlmIChsdDc5MTFl eGMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCXJldCA9IGx0NzkxMWV4Y19yZWd1bGF0b3JfZW5h YmxlKGx0NzkxMWV4Yyk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJbHQ3OTExZXhjX3Jlc2V0 KGx0NzkxMWV4Yyk7CisKKwlsdDc5MTFleGMtPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMg dm9pZCBsdDc5MTFleGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCS8q IERlbGF5IGFmdGVyIHBhbmVsIGlzIGRpc2FibGVkICovCisJbXNsZWVwKDIwKTsKK30KKworc3Rh dGljIHZvaWQgbHQ3OTExZXhjX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQoreworCXN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YyA9IGJyaWRnZV90b19sdDc5MTFleGMo YnJpZGdlKTsKKwlpbnQgcmV0OworCisJaWYgKCFsdDc5MTFleGMtPmVuYWJsZWQpCisJCXJldHVy bjsKKworCWx0NzkxMWV4Yy0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0ID0gbHQ3OTExZXhjX3Jl Z3VsYXRvcl9kaXNhYmxlKGx0NzkxMWV4Yyk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJZ3Bp b2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGx0NzkxMWV4Yy0+cmVzZXRfZ3BpbywgMCk7Cit9CisKK3N0 YXRpYyBpbnQgbHQ3OTExZXhjX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJ ICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICBlbnVtIGRybV9icmlkZ2Vf YXR0YWNoX2ZsYWdzIGZsYWdzKQoreworCXN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YyA9IGJy aWRnZV90b19sdDc5MTFleGMoYnJpZGdlKTsKKworCXJldHVybiBkcm1fYnJpZGdlX2F0dGFjaChs dDc5MTFleGMtPmJyaWRnZS5lbmNvZGVyLCBsdDc5MTFleGMtPnBhbmVsX2JyaWRnZSwKKwkJCQkg Jmx0NzkxMWV4Yy0+YnJpZGdlLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2JyaWRnZV9mdW5jcyBsdDc5MTFleGNfYnJpZGdlX2Z1bmNzID0geworCS5wcmVfZW5hYmxlID0g bHQ3OTExZXhjX3ByZV9lbmFibGUsCisJLmRpc2FibGUgPSBsdDc5MTFleGNfZGlzYWJsZSwKKwku cG9zdF9kaXNhYmxlID0gbHQ3OTExZXhjX3Bvc3RfZGlzYWJsZSwKKwkuYXR0YWNoID0gbHQ3OTEx ZXhjX2F0dGFjaCwKK307CisKK3N0YXRpYyBpbnQgbHQ3OTExZXhjX3Byb2JlKHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Owor CXN0cnVjdCBsdDc5MTFleGMgKmx0NzkxMWV4YzsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxf YnJpZGdlOworCWJvb2wgZndfdXBkYXRlZCA9IGZhbHNlOworCWludCByZXQ7CisKKwlpZiAoIWky Y19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewor CQlkZXZfZXJyKGRldiwgImRldmljZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJbHQ3OTExZXhjID0gZGV2bV9kcm1fYnJpZGdlX2FsbG9jKGRldiwg c3RydWN0IGx0NzkxMWV4YywgYnJpZGdlLAorCQkJCQkgICZsdDc5MTFleGNfYnJpZGdlX2Z1bmNz KTsKKwlpZiAoSVNfRVJSKGx0NzkxMWV4YykpCisJCXJldHVybiBQVFJfRVJSKGx0NzkxMWV4Yyk7 CisKKwlwYW5lbF9icmlkZ2UgPSBkZXZtX2RybV9vZl9nZXRfYnJpZGdlKGRldiwgZGV2LT5vZl9u b2RlLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHBhbmVsX2JyaWRnZSkpCisJCXJldHVybiBQVFJfRVJS KHBhbmVsX2JyaWRnZSk7CisKKwlsdDc5MTFleGMtPnBhbmVsX2JyaWRnZSA9IHBhbmVsX2JyaWRn ZTsKKwlsdDc5MTFleGMtPmNsaWVudCA9IGNsaWVudDsKKwlsdDc5MTFleGMtPmRldiA9IGRldjsK KwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBsdDc5MTFleGMpOworCW11dGV4X2luaXQoJmx0 NzkxMWV4Yy0+b2NtX2xvY2spOworCisJbHQ3OTExZXhjLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9p bml0X2kyYyhjbGllbnQsICZsdDc5MTFleGNfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihs dDc5MTFleGMtPnJlZ21hcCkpIHsKKwkJZGV2X2VycihkZXYsICJyZWdtYXAgaTJjIGluaXQgZmFp bGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobHQ3OTExZXhjLT5yZWdtYXApOworCX0KKworCXJl dCA9IGx0NzkxMWV4Y19wYXJzZV9kdChsdDc5MTFleGMpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSBsdDc5MTFleGNfcmVndWxhdG9yX2VuYWJsZShsdDc5MTFleGMpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlsdDc5MTFleGNfcmVzZXQobHQ3OTExZXhjKTsKKwls dDc5MTFleGMtPmVuYWJsZWQgPSB0cnVlOworCWx0NzkxMWV4Y19sb2NrKGx0NzkxMWV4Yyk7CisK K3JldHJ5OgorCWx0NzkxMWV4Yy0+ZndfdmVyc2lvbiA9IGx0NzkxMWV4Y19yZWFkX3ZlcnNpb24o bHQ3OTExZXhjKTsKKwlpZiAobHQ3OTExZXhjLT5md192ZXJzaW9uIDwgMCkgeworCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byByZWFkIEZXIHZlcnNpb25cbiIpOworCQlsdDc5MTFleGNfdW5sb2Nr KGx0NzkxMWV4Yyk7CisJCWdvdG8gZXJyX2Rpc2FibGVfcmVndWxhdG9yczsKKworCX0gZWxzZSBp ZiAobHQ3OTExZXhjLT5md192ZXJzaW9uID09IDApIHsKKwkJaWYgKCFmd191cGRhdGVkKSB7CisJ CQlmd191cGRhdGVkID0gdHJ1ZTsKKwkJCXJldCA9IGx0NzkxMWV4Y19maXJtd2FyZV91cGdyYWRl KGx0NzkxMWV4Yyk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWx0NzkxMWV4Y191bmxvY2sobHQ3 OTExZXhjKTsKKwkJCQlnb3RvIGVycl9kaXNhYmxlX3JlZ3VsYXRvcnM7CisJCQl9CisKKwkJCWx0 NzkxMWV4Y19yZXNldChsdDc5MTFleGMpOworCisJCQlyZXQgPSBsdDc5MTFleGNfdXBncmFkZV9y ZXN1bHQobHQ3OTExZXhjKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbHQ3OTExZXhjX3VubG9j ayhsdDc5MTFleGMpOworCQkJCWdvdG8gZXJyX2Rpc2FibGVfcmVndWxhdG9yczsKKwkJCX0KKwor CQkJZ290byByZXRyeTsKKworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJmdyB2ZXJzaW9u IDB4JTA0eCwgdXBkYXRlIGZhaWxlZFxuIiwgbHQ3OTExZXhjLT5md192ZXJzaW9uKTsKKwkJCXJl dCA9IC1FT1BOT1RTVVBQOworCQkJbHQ3OTExZXhjX3VubG9jayhsdDc5MTFleGMpOworCQkJZ290 byBlcnJfZGlzYWJsZV9yZWd1bGF0b3JzOworCQl9CisJfQorCisJbHQ3OTExZXhjX3VubG9jayhs dDc5MTFleGMpOworCisJbHQ3OTExZXhjLT5icmlkZ2UudHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RP Ul9EU0k7CisJbHQ3OTExZXhjLT5icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlkcm1f YnJpZGdlX2FkZCgmbHQ3OTExZXhjLT5icmlkZ2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNh YmxlX3JlZ3VsYXRvcnM6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGx0Nzkx MWV4Yy0+c3VwcGxpZXMpLCBsdDc5MTFleGMtPnN1cHBsaWVzKTsKKwlpZiAobHQ3OTExZXhjLT5m dykgeworCQlyZWxlYXNlX2Zpcm13YXJlKGx0NzkxMWV4Yy0+ZncpOworCQlsdDc5MTFleGMtPmZ3 ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBsdDc5MTFleGNf cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGx0NzkxMWV4YyAq bHQ3OTExZXhjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkcm1fYnJpZGdlX3Jl bW92ZSgmbHQ3OTExZXhjLT5icmlkZ2UpOworCW11dGV4X2Rlc3Ryb3koJmx0NzkxMWV4Yy0+b2Nt X2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHQ3OTExZXhj X2kyY190YWJsZVtdID0geworCXsibG9udGl1bSwgbHQ3OTExZXhjIiwgMH0sCisJeyAvKiBzZW50 aW5lbCAqLyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHQ3OTExZXhjX2kyY190 YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0NzkxMWV4Y19kZXZp Y2VzW10gPSB7CisJey5jb21wYXRpYmxlID0gImxvbnRpdW0sbHQ3OTExZXhjIix9LAorCXt9Cit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbHQ3OTExZXhjX2RldmljZXMpOworCitzdGF0aWMg c3RydWN0IGkyY19kcml2ZXIgbHQ3OTExZXhjX2RyaXZlciA9IHsKKwkuaWRfdGFibGUJPSBsdDc5 MTFleGNfaTJjX3RhYmxlLAorCS5wcm9iZQkJPSBsdDc5MTFleGNfcHJvYmUsCisJLnJlbW92ZQkJ PSBsdDc5MTFleGNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJsdDc5MTFleGMi LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBsdDc5MTFleGNfZGV2aWNlcywKKwl9LAorfTsKK21vZHVs ZV9pMmNfZHJpdmVyKGx0NzkxMWV4Y19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJTdW5ZdW4g WWFuZyA8c3l5YW5nQGxvbnRpdW0uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb250aXVt IGx0NzkxMWV4YyBlZHAgdG8gbWlwaSBkc2kgYnJpZGdlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwotLSAKMi4zNC4xCgo=