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 X-Spam-Level: X-Spam-Status: No, score=-8.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49609C04A6B for ; Mon, 6 May 2019 12:37:25 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1B76F20830 for ; Mon, 6 May 2019 12:37:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IWrX62YR"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Nc2zNEw+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B76F20830 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=PWH5Dk1Bk0uUU+EBEn0g1A+zexZm1Whmwvn/s1q4Zec=; b=IWrX62YRAXFyAB M0MB2CAASfZIqIBdOJnIRra2qsUyhKIyTRGksy9Dt1/h9gxirCcs6wPE6S47LQloLfxHG3Vp/Ifso hSAF8065RCP+KEQ3bggetrB16NJRTcCrRvkfZ9FVei7qDJz6z7zXBUjG0ORw2gkAviWkrbx4oJ0aG GPwVrKdDXwNFWH7rR2Pl+6zt/Cy2cj1OzCn7Y2g37m/Fis+1F0ertkFBaa9JTyLL7qmO1cZKr40tx A/iR72HD+PemDYJXumby+yN/x0JNYI0gVFBXK77v6+zI7qGyYxr7ktQ98IP9JjDGnD8wWAMiRjr6D A8BNljsm7BF093sukwzQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcrv-0001Mn-3h; Mon, 06 May 2019 12:37:19 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcqC-0007hw-SD for linux-arm-kernel@lists.infradead.org; Mon, 06 May 2019 12:36:09 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x46CZTLE110983; Mon, 6 May 2019 07:35:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1557146129; bh=LQGk6bzP2U3fyMzIxnX21CxpUwANj3mNi/depjbzqBQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Nc2zNEw+6wQY/M30HLsN/85LHnjPA72j98uLeCZ2oaot1ZBRlJOBPi2zHfXK0fOjg 2AJ7BajZzhhetXHMQHoMbcb4o4NJ2Vu/6lfXSbVW32qe/vaLS3KUXUSUj/i9Ng3Lps T1xaZex+utj1+zUjSKoIIztpXckLnqdXqOtgs82U= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x46CZTQY024363 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 May 2019 07:35:29 -0500 Received: from DFLE103.ent.ti.com (10.64.6.24) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 6 May 2019 07:35:28 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Mon, 6 May 2019 07:35:28 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id x46CYpUH110286; Mon, 6 May 2019 07:35:25 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH 11/16] dmaengine: ti: New driver for K3 UDMA - split#2: probe/remove, xlate and filter_fn Date: Mon, 6 May 2019 15:34:51 +0300 Message-ID: <20190506123456.6777-12-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190506123456.6777-1-peter.ujfalusi@ti.com> References: <20190506123456.6777-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190506_053533_415074_EFB3A9E1 X-CRM114-Status: GOOD ( 16.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOiBtb2R1bGUgcHJvYmUvcmVtb3ZlIGZ1 bmN0aW9ucywgb2ZfeGxhdGUKYW5kIGZpbHRlcl9mbiBmb3Igc2xhdmUgY2hhbm5lbCByZXF1ZXN0 cy4KCkRNQSBkcml2ZXIgZm9yClRleGFzIEluc3RydW1lbnRzIEszIE5BVlNTIFVuaWZpZWQgRE1B IOKAkyBQZXJpcGhlcmFsIFJvb3QgQ29tcGxleCAoVURNQS1QKQoKVGhlIFVETUEtUCBpcyBpbnRl bmRlZCB0byBwZXJmb3JtIHNpbWlsYXIgKGJ1dCBzaWduaWZpY2FudGx5IHVwZ3JhZGVkKSBmdW5j dGlvbnMKYXMgdGhlIHBhY2tldC1vcmllbnRlZCBETUEgdXNlZCBvbiBwcmV2aW91cyBTb0MgZGV2 aWNlcy4gVGhlIFVETUEtUCBtb2R1bGUKc3VwcG9ydHMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgcmVj ZXB0aW9uIG9mIHZhcmlvdXMgcGFja2V0IHR5cGVzLiBUaGUgVURNQS1QIGlzCmFyY2hpdGVjdGVk IHRvIGZhY2lsaXRhdGUgdGhlIHNlZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvZiBTb0MgRE1B IGRhdGEKc3RydWN0dXJlIGNvbXBsaWFudCBwYWNrZXRzIHRvL2Zyb20gc21hbGxlciBkYXRhIGJs b2NrcyB0aGF0IGFyZSBuYXRpdmVseQpjb21wYXRpYmxlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVp cmVtZW50cyBvZiBlYWNoIGNvbm5lY3RlZCBwZXJpcGhlcmFsLiBNdWx0aXBsZQpUeCBhbmQgUngg Y2hhbm5lbHMgYXJlIHByb3ZpZGVkIHdpdGhpbiB0aGUgRE1BIHdoaWNoIGFsbG93IG11bHRpcGxl IHNlZ21lbnRhdGlvbgpvciByZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgb25nb2luZy4gVGhl IERNQSBjb250cm9sbGVyIG1haW50YWlucyBzdGF0ZQppbmZvcm1hdGlvbiBmb3IgZWFjaCBvZiB0 aGUgY2hhbm5lbHMgd2hpY2ggYWxsb3dzIHBhY2tldCBzZWdtZW50YXRpb24gYW5kCnJlYXNzZW1i bHkgb3BlcmF0aW9ucyB0byBiZSB0aW1lIGRpdmlzaW9uIG11bHRpcGxleGVkIGJldHdlZW4gY2hh bm5lbHMgaW4gb3JkZXIKdG8gc2hhcmUgdGhlIHVuZGVybHlpbmcgRE1BIGhhcmR3YXJlLiBBbiBl eHRlcm5hbCBETUEgc2NoZWR1bGVyIGlzIHVzZWQgdG8KY29udHJvbCB0aGUgb3JkZXJpbmcgYW5k IHJhdGUgYXQgd2hpY2ggdGhpcyBtdWx0aXBsZXhpbmcgb2NjdXJzIGZvciBUcmFuc21pdApvcGVy YXRpb25zLiBUaGUgb3JkZXJpbmcgYW5kIHJhdGUgb2YgUmVjZWl2ZSBvcGVyYXRpb25zIGlzIGlu ZGlyZWN0bHkgY29udHJvbGxlZApieSB0aGUgb3JkZXIgaW4gd2hpY2ggYmxvY2tzIGFyZSBwdXNo ZWQgaW50byB0aGUgRE1BIG9uIHRoZSBSeCBQU0ktTCBpbnRlcmZhY2UuCgpUaGUgVURNQS1QIGFs c28gc3VwcG9ydHMgYWN0aW5nIGFzIGJvdGggYSBVVEMgYW5kIFVETUEtQyBmb3IgaXRzIGludGVy bmFsCmNoYW5uZWxzLiBDaGFubmVscyBpbiB0aGUgVURNQS1QIGNhbiBiZSBjb25maWd1cmVkIHRv IGJlIGVpdGhlciBQYWNrZXQtQmFzZWQgb3IKVGhpcmQtUGFydHkgY2hhbm5lbHMgb24gYSBjaGFu bmVsIGJ5IGNoYW5uZWwgYmFzaXMuCgpUaGUgaW5pdGlhbCBkcml2ZXIgc3VwcG9ydHM6Ci0gTUVN X1RPX01FTSAoVFIgbW9kZSkKLSBERVZfVE9fTUVNIChQYWNrZXQgLyBUUiBtb2RlKQotIE1FTV9U T19ERVYgKFBhY2tldCAvIFRSIG1vZGUpCi0gQ3ljbGljIChQYWNrZXQgLyBUUiBtb2RlKQotIE1l dGFkYXRhIGZvciBkZXNjcmlwdG9ycwoKU2lnbmVkLW9mZi1ieTogUGV0ZXIgVWpmYWx1c2kgPHBl dGVyLnVqZmFsdXNpQHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCA0OTUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg NDk1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMKaW5kZXggODFiYzUyZjU5MDQ0Li5iOWRiNzNmZWUx YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYworKysgYi9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmMKQEAgLTEwMDYsMyArMTAwNiw0OTggQEAgc3RhdGljIGlycXJldHVybl90 IHVkbWFfdWRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCiAJcmV0dXJuIElS UV9IQU5ETEVEOwogfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZG1hX2RyaXZl cjsKKworc3RhdGljIGJvb2wgdWRtYV9kbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hh biwgdm9pZCAqcGFyYW0pCit7CisJdTMyICphcmdzOworCXN0cnVjdCB1ZG1hX2NoYW4gKnVjOwor CXN0cnVjdCB1ZG1hX2RldiAqdWQ7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGNvbmZfbm9kZSwg KnNsYXZlX25vZGU7CisJY2hhciBwcm9wWzUwXTsKKwl1MzIgdmFsOworCisJaWYgKGNoYW4tPmRl dmljZS0+ZGV2LT5kcml2ZXIgIT0gJnVkbWFfZHJpdmVyLmRyaXZlcikKKwkJcmV0dXJuIGZhbHNl OworCisJdWMgPSB0b191ZG1hX2NoYW4oY2hhbik7CisJdWQgPSB1Yy0+dWQ7CisJYXJncyA9IHBh cmFtOworCisJaWYgKGFyZ3NbMl0gPT0gVURNQV9ESVJfVFgpIHsKKwkJdWMtPmRpciA9IERNQV9N RU1fVE9fREVWOworCX0gZWxzZSBpZiAoYXJnc1syXSA9PSBVRE1BX0RJUl9SWCkgeworCQl1Yy0+ ZGlyID0gRE1BX0RFVl9UT19NRU07CisJfSBlbHNlIHsKKwkJZGV2X2Vycih1ZC0+ZGV2LCAiSW52 YWxpZCBkaXJlY3Rpb24gKCV1KVxuIiwgYXJnc1syXSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlzbGF2ZV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoYXJnc1swXSk7CisJaWYgKCFz bGF2ZV9ub2RlKSB7CisJCWRldl9lcnIodWQtPmRldiwgIlNsYXZlIG5vZGUgaXMgbWlzc2luZ1xu Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzbnByaW50Zihwcm9wLCBzaXplb2YocHJvcCks ICJ0aSxwc2lsLWNvbmZpZyV1IiwgYXJnc1sxXSk7CisJY2hjb25mX25vZGUgPSBvZl9maW5kX25v ZGVfYnlfbmFtZShzbGF2ZV9ub2RlLCBwcm9wKTsKKwlpZiAoIWNoY29uZl9ub2RlKSB7CisJCWRl dl9lcnIodWQtPmRldiwgIkNoYW5uZWwgY29uZmlndXJhdGlvbiBub2RlIGlzIG1pc3NpbmdcbiIp OworCQlvZl9ub2RlX3B1dChzbGF2ZV9ub2RlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlm ICghb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hjb25mX25vZGUsICJsaW51eCx1ZG1hLW1vZGUiLCAm dmFsKSkgeworCQlpZiAodmFsID09IFVETUFfUEtUX01PREUpCisJCQl1Yy0+cGt0X21vZGUgPSB0 cnVlOworCX0KKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hjb25mX25vZGUsICJzdGF0 aWN0ci10eXBlIiwgJnZhbCkpCisJCXVjLT5zdGF0aWNfdHJfdHlwZSA9IHZhbDsKKworCWlmICgh b2ZfcHJvcGVydHlfcmVhZF91MzIoY2hjb25mX25vZGUsICJ0aSxjaGFubmVsLXRwbCIsICZ2YWwp KQorCQl1Yy0+Y2hhbm5lbF90cGwgPSB2YWw7CisKKwl1Yy0+bmVlZHNfZXBpYiA9IG9mX3Byb3Bl cnR5X3JlYWRfYm9vbChjaGNvbmZfbm9kZSwgInRpLG5lZWRzLWVwaWIiKTsKKwlpZiAoIW9mX3By b3BlcnR5X3JlYWRfdTMyKGNoY29uZl9ub2RlLCAidGkscHNkLXNpemUiLCAmdmFsKSkKKwkJdWMt PnBzZF9zaXplID0gdmFsOworCXVjLT5tZXRhZGF0YV9zaXplID0gKHVjLT5uZWVkc19lcGliID8g Q1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFIDogMCkgKworCQkJICAgIHVjLT5wc2Rfc2l6ZTsK KworCWlmICh1Yy0+cGt0X21vZGUpCisJCXVjLT5oZGVzY19zaXplID0gQUxJR04oc2l6ZW9mKHN0 cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCkgKworCQkJCSB1Yy0+bWV0YWRhdGFfc2l6ZSwgdWQtPmRl c2NfYWxpZ24pOworCisJb2Zfbm9kZV9wdXQoY2hjb25mX25vZGUpOworCisJaWYgKG9mX3Byb3Bl cnR5X3JlYWRfdTMyKHNsYXZlX25vZGUsICJ0aSxwc2lsLWJhc2UiLCAmdmFsKSkgeworCQlkZXZf ZXJyKHVkLT5kZXYsICJ0aSxwc2lsLWJhc2UgaXMgbWlzc2luZ1xuIik7CisJCW9mX25vZGVfcHV0 KHNsYXZlX25vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdWMtPnJlbW90ZV90aHJlYWRf aWQgPSB2YWwgKyBhcmdzWzFdOworCisJb2Zfbm9kZV9wdXQoc2xhdmVfbm9kZSk7CisKKwlkZXZf ZGJnKHVkLT5kZXYsICJjaGFuJWQ6IFJlbW90ZSB0aHJlYWQ6IDB4JTA0eCAoJXMpXG4iLCB1Yy0+ aWQsCisJCXVjLT5yZW1vdGVfdGhyZWFkX2lkLCB1ZG1hX2dldF9kaXJfdGV4dCh1Yy0+ZGlyKSk7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqdWRtYV9vZl94 bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywKKwkJCQkgICAgICBzdHJ1Y3Qg b2ZfZG1hICpvZmRtYSkKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gb2ZkbWEtPm9mX2RtYV9k YXRhOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKworCWlmIChkbWFfc3BlYy0+YXJnc19jb3Vu dCAhPSAzKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4gPSBkbWFkZXZfZ2V0X3NsYXZlX2NoYW5u ZWwoJnVkLT5kZGV2LCB1ZG1hX2RtYV9maWx0ZXJfZm4sCisJCQkJCSZkbWFfc3BlYy0+YXJnc1sw XSk7CisJaWYgKCFjaGFuKSB7CisJCWRldl9lcnIodWQtPmRldiwgImdldCBjaGFubmVsIGZhaWwg aW4gJXMuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwor CXJldHVybiBjaGFuOworfQorCitzdGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBhbTY1NF9t YWluX2RhdGEgPSB7CisJLmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IHRydWUsCisJLnRwbF9sZXZl bHMgPSAyLAorCS5sZXZlbF9zdGFydF9pZHggPSB7CisJCVswXSA9IDgsIC8qIE5vcm1hbCBjaGFu bmVscyAqLworCQlbMV0gPSAwLCAvKiBIaWdoIFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAor fTsKKworc3RhdGljIHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgYW02NTRfbWN1X2RhdGEgPSB7CisJ LmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IGZhbHNlLCAvKiBNRU1fVE9fTUVNIGlzIHNsb3cgdmlh IE1DVSBVRE1BICovCisJLnRwbF9sZXZlbHMgPSAyLAorCS5sZXZlbF9zdGFydF9pZHggPSB7CisJ CVswXSA9IDIsIC8qIE5vcm1hbCBjaGFubmVscyAqLworCQlbMV0gPSAwLCAvKiBIaWdoIFRocm91 Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgdWRtYV9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAidGksYW02NTQt bmF2c3MtbWFpbi11ZG1hcCIsCisJCS5kYXRhID0gJmFtNjU0X21haW5fZGF0YSwKKwl9LAorCXsK KwkJLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3MtbWN1LXVkbWFwIiwKKwkJLmRhdGEgPSAm YW02NTRfbWN1X2RhdGEsCisJfSwKKwl7IC8qIFNlbnRpbmVsICovIH0sCit9OworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgdWRtYV9vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgdWRtYV9nZXRfbW1y cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgdWRtYV9kZXYgKnVkKQorewor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1NUl9M QVNUOyBpKyspIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJ T1JFU09VUkNFX01FTSwKKwkJCQkJCSAgIG1tcl9uYW1lc1tpXSk7CisJCXVkLT5tbXJzW2ldID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJCWlmIChJU19FUlIodWQt Pm1tcnNbaV0pKQorCQkJcmV0dXJuIFBUUl9FUlIodWQtPm1tcnNbaV0pOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHVkbWFfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCB1ZG1hX2Rl diAqdWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdWQtPmRldjsKKwlpbnQgY2hfY291bnQs IHJldCwgaSwgajsKKwl1MzIgY2FwMiwgY2FwMzsKKwlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNlX2Rl c2MgKnJtX2Rlc2M7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZSAqcm1fcmVzLCBpcnFfcmVzOwor CXN0cnVjdCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisJc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCByYW5nZV9uYW1lc1tdID0geyAidGksc2NpLXJtLXJhbmdlLXRj aGFuIiwKKwkJCQkJCSAgICAidGksc2NpLXJtLXJhbmdlLXJjaGFuIiwKKwkJCQkJCSAgICAidGks c2NpLXJtLXJhbmdlLXJmbG93IiB9OworCisJY2FwMiA9IHVkbWFfcmVhZCh1ZC0+bW1yc1tNTVJf R0NGR10sIDB4MjgpOworCWNhcDMgPSB1ZG1hX3JlYWQodWQtPm1tcnNbTU1SX0dDRkddLCAweDJj KTsKKworCXVkLT5yZmxvd19jbnQgPSBjYXAzICYgMHgzZmZmOworCXVkLT50Y2hhbl9jbnQgPSBj YXAyICYgMHgxZmY7CisJdWQtPmVjaGFuX2NudCA9IChjYXAyID4+IDkpICYgMHgxZmY7CisJdWQt PnJjaGFuX2NudCA9IChjYXAyID4+IDE4KSAmIDB4MWZmOworCWNoX2NvdW50ICA9IHVkLT50Y2hh bl9jbnQgKyB1ZC0+cmNoYW5fY250OworCisJdWQtPnRjaGFuX21hcCA9IGRldm1fa21hbGxvY19h cnJheShkZXYsIEJJVFNfVE9fTE9OR1ModWQtPnRjaGFuX2NudCksCisJCQkJCSAgIHNpemVvZih1 bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisJdWQtPnRjaGFucyA9IGRldm1fa2NhbGxvYyhk ZXYsIHVkLT50Y2hhbl9jbnQsIHNpemVvZigqdWQtPnRjaGFucyksCisJCQkJICBHRlBfS0VSTkVM KTsKKwl1ZC0+cmNoYW5fbWFwID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgQklUU19UT19MT05H Uyh1ZC0+cmNoYW5fY250KSwKKwkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VS TkVMKTsKKwl1ZC0+cmNoYW5zID0gZGV2bV9rY2FsbG9jKGRldiwgdWQtPnJjaGFuX2NudCwgc2l6 ZW9mKCp1ZC0+cmNoYW5zKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCXVkLT5yZmxvd19tYXAgPSBk ZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yZmxvd19jbnQpLAorCQkJ CQkgICBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCXVkLT5yZmxvd19tYXBf cmVzZXJ2ZWQgPSBkZXZtX2tjYWxsb2MoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yZmxvd19jbnQp LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICAgIEdGUF9LRVJO RUwpOworCXVkLT5yZmxvd3MgPSBkZXZtX2tjYWxsb2MoZGV2LCB1ZC0+cmZsb3dfY250LCBzaXpl b2YoKnVkLT5yZmxvd3MpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXVkLT50Y2hhbl9t YXAgfHwgIXVkLT5yY2hhbl9tYXAgfHwgIXVkLT5yZmxvd19tYXAgfHwKKwkgICAgIXVkLT5yZmxv d19tYXBfcmVzZXJ2ZWQgfHwgIXVkLT50Y2hhbnMgfHwgIXVkLT5yY2hhbnMgfHwKKwkgICAgIXVk LT5yZmxvd3MpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBSWCBmbG93cyB3aXRoIHRo ZSBzYW1lIElkcyBhcyBSWCBjaGFubmVscyBhcmUgcmVzZXJ2ZWQgdG8gYmUgdXNlZAorCSAqIGFz IGRlZmF1bHQgZmxvd3MgaWYgcmVtb3RlIEhXIGNhbid0IGdlbmVyYXRlIGZsb3dfaWRzLiBUaG9z ZQorCSAqIFJYIGZsb3dzIGNhbiBiZSByZXF1ZXN0ZWQgb25seSBleHBsaWNpdGx5IGJ5IGlkLgor CSAqLworCWJpdG1hcF9zZXQodWQtPnJmbG93X21hcF9yZXNlcnZlZCwgMCwgdWQtPnJjaGFuX2Nu dCk7CisKKwkvKiBHZXQgcmVzb3VyY2UgcmFuZ2VzIGZyb20gdGlzY2kgKi8KKwlmb3IgKGkgPSAw OyBpIDwgUk1fUkFOR0VfTEFTVDsgaSsrKQorCQl0aXNjaV9ybS0+cm1fcmFuZ2VzW2ldID0KKwkJ CWRldm1fdGlfc2NpX2dldF9vZl9yZXNvdXJjZSh0aXNjaV9ybS0+dGlzY2ksIGRldiwKKwkJCQkJ CSAgICB0aXNjaV9ybS0+dGlzY2lfZGV2X2lkLAorCQkJCQkJICAgIChjaGFyICopcmFuZ2VfbmFt ZXNbaV0pOworCisJLyogdGNoYW4gcmFuZ2VzICovCisJcm1fcmVzID0gdGlzY2lfcm0tPnJtX3Jh bmdlc1tSTV9SQU5HRV9UQ0hBTl07CisJaWYgKElTX0VSUihybV9yZXMpKSB7CisJCWJpdG1hcF96 ZXJvKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCX0gZWxzZSB7CisJCWJpdG1hcF9m aWxsKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgcm1f cmVzLT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0 bWFwX2NsZWFyKHVkLT50Y2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVz Yy0+bnVtKTsKKwkJfQorCX0KKwlpcnFfcmVzLnNldHMgPSBybV9yZXMtPnNldHM7CisKKwkvKiBy Y2hhbiBhbmQgbWF0Y2hpbmcgZGVmYXVsdCBmbG93IHJhbmdlcyAqLworCXJtX3JlcyA9IHRpc2Np X3JtLT5ybV9yYW5nZXNbUk1fUkFOR0VfUkNIQU5dOworCWlmIChJU19FUlIocm1fcmVzKSkgewor CQliaXRtYXBfemVybyh1ZC0+cmNoYW5fbWFwLCB1ZC0+cmNoYW5fY250KTsKKwkJYml0bWFwX3pl cm8odWQtPnJmbG93X21hcCwgdWQtPnJjaGFuX2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFwX2Zp bGwodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFuX2NudCk7CisJCWJpdG1hcF9maWxsKHVkLT5yZmxv d19tYXAsIHVkLT5yY2hhbl9jbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRzOyBp KyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0bWFwX2NsZWFyKHVk LT5yY2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVzYy0+bnVtKTsKKwkJ CWJpdG1hcF9jbGVhcih1ZC0+cmZsb3dfbWFwLCBybV9kZXNjLT5zdGFydCwKKwkJCQkgICAgIHJt X2Rlc2MtPm51bSk7CisJCX0KKwl9CisKKwlpcnFfcmVzLnNldHMgKz0gcm1fcmVzLT5zZXRzOwor CWlycV9yZXMuZGVzYyA9IGtjYWxsb2MoaXJxX3Jlcy5zZXRzLCBzaXplb2YoKmlycV9yZXMuZGVz YyksIEdGUF9LRVJORUwpOworCXJtX3JlcyA9IHRpc2NpX3JtLT5ybV9yYW5nZXNbUk1fUkFOR0Vf VENIQU5dOworCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQlpcnFfcmVz LmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2NbaV0uc3RhcnQ7CisJCWlycV9yZXMuZGVzY1tp XS5udW0gPSBybV9yZXMtPmRlc2NbaV0ubnVtOworCX0KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1f cmFuZ2VzW1JNX1JBTkdFX1JDSEFOXTsKKwlmb3IgKGogPSAwOyBqIDwgcm1fcmVzLT5zZXRzOyBq KyssIGkrKykgeworCQlpcnFfcmVzLmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2Nbal0uc3Rh cnQgKyAweDIwMDA7CisJCWlycV9yZXMuZGVzY1tpXS5udW0gPSBybV9yZXMtPmRlc2Nbal0ubnVt OworCX0KKwlyZXQgPSB0aV9zY2lfaW50YV9tc2lfZG9tYWluX2FsbG9jX2lycXModWQtPmRldiwg JmlycV9yZXMpOworCWtmcmVlKGlycV9yZXMuZGVzYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KHVkLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCS8qIEdQIHJmbG93IHJhbmdlcyAqLworCXJtX3JlcyA9IHRpc2NpX3Jt LT5ybV9yYW5nZXNbUk1fUkFOR0VfUkZMT1ddOworCWlmIChJU19FUlIocm1fcmVzKSkgeworCQli aXRtYXBfY2xlYXIodWQtPnJmbG93X21hcCwgdWQtPnJjaGFuX2NudCwKKwkJCSAgICAgdWQtPnJm bG93X2NudCAtIHVkLT5yY2hhbl9jbnQpOworCX0gZWxzZSB7CisJCWJpdG1hcF9zZXQodWQtPnJm bG93X21hcCwgdWQtPnJjaGFuX2NudCwKKwkJCSAgIHVkLT5yZmxvd19jbnQgLSB1ZC0+cmNoYW5f Y250KTsKKwkJZm9yIChpID0gMDsgaSA8IHJtX3Jlcy0+c2V0czsgaSsrKSB7CisJCQlybV9kZXNj ID0gJnJtX3Jlcy0+ZGVzY1tpXTsKKwkJCWJpdG1hcF9jbGVhcih1ZC0+cmZsb3dfbWFwLCBybV9k ZXNjLT5zdGFydCwKKwkJCQkgICAgIHJtX2Rlc2MtPm51bSk7CisJCX0KKwl9CisKKwljaF9jb3Vu dCAtPSBiaXRtYXBfd2VpZ2h0KHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCWNoX2Nv dW50IC09IGJpdG1hcF93ZWlnaHQodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFuX2NudCk7CisJaWYg KCFjaF9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZC0+Y2hhbm5lbHMgPSBkZXZtX2tj YWxsb2MoZGV2LCBjaF9jb3VudCwgc2l6ZW9mKCp1ZC0+Y2hhbm5lbHMpLAorCQkJCSAgICBHRlBf S0VSTkVMKTsKKwlpZiAoIXVkLT5jaGFubmVscykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZf aW5mbyhkZXYsCisJCSAiQ2hhbm5lbHM6ICVkICh0Y2hhbjogJXUsIGVjaGFuOiAldSwgcmNoYW46 ICV1LCByZmxvdzogJXUpXG4iLAorCQkgY2hfY291bnQsIHVkLT50Y2hhbl9jbnQsIHVkLT5lY2hh bl9jbnQsIHVkLT5yY2hhbl9jbnQsCisJCSB1ZC0+cmZsb3dfY250KTsKKworCXJldHVybiBjaF9j b3VudDsKK30KKworI2RlZmluZSBUSV9VRE1BQ19CVVNXSURUSFMJKEJJVChETUFfU0xBVkVfQlVT V0lEVEhfMV9CWVRFKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTKSB8 IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF8zX0JZVEVTKSB8IFwKKwkJCQkgQklUKERN QV9TTEFWRV9CVVNXSURUSF80X0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURU SF84X0JZVEVTKSkKKworc3RhdGljIGludCB1ZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpuYXZzc19ub2RlID0gcGRldi0+ZGV2 LnBhcmVudC0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0 cnVjdCB1ZG1hX2RldiAqdWQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJ aW50IGksIHJldDsKKwlpbnQgY2hfY291bnQ7CisKKwlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5k X2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDQ4KSk7CisJaWYgKHJldCkKKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gc2V0IGRtYSBtYXNrIHN0dWZmXG4iKTsKKworCXVkID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCp1ZCksIEdGUF9LRVJORUwpOworCWlmICghdWQpCisJCXJldHVybiAt RU5PTUVNOworCisJcmV0ID0gdWRtYV9nZXRfbW1ycyhwZGV2LCB1ZCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXVkLT50aXNjaV9ybS50aXNjaSA9IHRpX3NjaV9nZXRfYnlfcGhhbmRs ZShkZXYtPm9mX25vZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHVkLT50aXNjaV9ybS50aXNj aSkpCisJCXJldHVybiBQVFJfRVJSKHVkLT50aXNjaV9ybS50aXNjaSk7CisKKwlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJ0aSxzY2ktZGV2LWlkIiwKKwkJCQkgICAm dWQtPnRpc2NpX3JtLnRpc2NpX2Rldl9pZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwg InRpLHNjaS1kZXYtaWQgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKwlwZGV2LT5pZCA9IHVkLT50aXNjaV9ybS50aXNjaV9kZXZfaWQ7CisKKwlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihuYXZzc19ub2RlLCAidGksc2NpLWRldi1pZCIsCisJCQkJICAgJnVk LT50aXNjaV9ybS50aXNjaV9uYXZzc19kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk ZXYsICJOQVZTUyB0aSxzY2ktZGV2LWlkIHJlYWQgZmFpbHVyZSAlZFxuIiwgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwl1ZC0+dGlzY2lfcm0udGlzY2lfdWRtYXBfb3BzID0gJnVkLT50aXNj aV9ybS50aXNjaS0+b3BzLnJtX3VkbWFwX29wczsKKwl1ZC0+dGlzY2lfcm0udGlzY2lfcHNpbF9v cHMgPSAmdWQtPnRpc2NpX3JtLnRpc2NpLT5vcHMucm1fcHNpbF9vcHM7CisKKwl1ZC0+cmluZ2Fj YyA9IG9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAidGkscmluZ2Fj YyIpOworCWlmIChJU19FUlIodWQtPnJpbmdhY2MpKQorCQlyZXR1cm4gUFRSX0VSUih1ZC0+cmlu Z2FjYyk7CisKKwlkZXYtPm1zaV9kb21haW4gPSBvZl9tc2lfZ2V0X2RvbWFpbihkZXYsIGRldi0+ b2Zfbm9kZSwKKwkJCQkJICAgIERPTUFJTl9CVVNfVElfU0NJX0lOVEFfTVNJKTsKKwlpZiAoIWRl di0+bXNpX2RvbWFpbikgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTVNJIGRvbWFp blxuIik7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKworCW1hdGNoID0gb2ZfbWF0Y2hf bm9kZSh1ZG1hX29mX21hdGNoLCBkZXYtPm9mX25vZGUpOworCWlmICghbWF0Y2gpIHsKKwkJZGV2 X2VycihkZXYsICJObyBjb21wYXRpYmxlIG1hdGNoIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9E RVY7CisJfQorCXVkLT5tYXRjaF9kYXRhID0gbWF0Y2gtPmRhdGE7CisKKwlkbWFfY2FwX3NldChE TUFfU0xBVkUsIHVkLT5kZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCB1 ZC0+ZGRldi5jYXBfbWFzayk7CisKKwl1ZC0+ZGRldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJj ZXMgPSB1ZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCXVkLT5kZGV2LmRldmljZV9jb25maWcg PSB1ZG1hX3NsYXZlX2NvbmZpZzsKKwl1ZC0+ZGRldi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHVk bWFfcHJlcF9zbGF2ZV9zZzsKKwl1ZC0+ZGRldi5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gdWRt YV9wcmVwX2RtYV9jeWNsaWM7CisJdWQtPmRkZXYuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSB1ZG1h X2lzc3VlX3BlbmRpbmc7CisJdWQtPmRkZXYuZGV2aWNlX3R4X3N0YXR1cyA9IHVkbWFfdHhfc3Rh dHVzOworCXVkLT5kZGV2LmRldmljZV9wYXVzZSA9IHVkbWFfcGF1c2U7CisJdWQtPmRkZXYuZGV2 aWNlX3Jlc3VtZSA9IHVkbWFfcmVzdW1lOworCXVkLT5kZGV2LmRldmljZV90ZXJtaW5hdGVfYWxs ID0gdWRtYV90ZXJtaW5hdGVfYWxsOworCXVkLT5kZGV2LmRldmljZV9zeW5jaHJvbml6ZSA9IHVk bWFfc3luY2hyb25pemU7CisKKwl1ZC0+ZGRldi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9 IHVkbWFfZnJlZV9jaGFuX3Jlc291cmNlczsKKwl1ZC0+ZGRldi5zcmNfYWRkcl93aWR0aHMgPSBU SV9VRE1BQ19CVVNXSURUSFM7CisJdWQtPmRkZXYuZHN0X2FkZHJfd2lkdGhzID0gVElfVURNQUNf QlVTV0lEVEhTOworCXVkLT5kZGV2LmRpcmVjdGlvbnMgPSBCSVQoRE1BX0RFVl9UT19NRU0pIHwg QklUKERNQV9NRU1fVE9fREVWKTsKKwl1ZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1B X1JFU0lEVUVfR1JBTlVMQVJJVFlfQlVSU1Q7CisJdWQtPmRkZXYuY29weV9hbGlnbiA9IERNQUVO R0lORV9BTElHTl84X0JZVEVTOworCXVkLT5kZGV2LmRlc2NfbWV0YWRhdGFfbW9kZXMgPSBERVND X01FVEFEQVRBX0NMSUVOVCB8CisJCQkJICAgICAgIERFU0NfTUVUQURBVEFfRU5HSU5FOworCWlm ICh1ZC0+bWF0Y2hfZGF0YS0+ZW5hYmxlX21lbWNweV9zdXBwb3J0KSB7CisJCWRtYV9jYXBfc2V0 KERNQV9NRU1DUFksIHVkLT5kZGV2LmNhcF9tYXNrKTsKKwkJdWQtPmRkZXYuZGV2aWNlX3ByZXBf ZG1hX21lbWNweSA9IHVkbWFfcHJlcF9kbWFfbWVtY3B5OworCQl1ZC0+ZGRldi5kaXJlY3Rpb25z IHw9IEJJVChETUFfTUVNX1RPX01FTSk7CisJfQorCisJdWQtPmRkZXYuZGV2ID0gZGV2OworCXVk LT5kZXYgPSBkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmdWQtPmRkZXYuY2hhbm5lbHMpOworCUlO SVRfTElTVF9IRUFEKCZ1ZC0+ZGVzY190b19wdXJnZSk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihkZXYtPm9mX25vZGUsICJ0aSxwc2lsLWJhc2UiLAorCQkJCSAgICZ1ZC0+cHNpbF9i YXNlKTsKKwlpZiAocmV0KSB7CisJCWRldl9pbmZvKGRldiwgIk1pc3NpbmcgdGkscHNpbC1iYXNl IHByb3BlcnR5LCB1c2luZyAlZC5cbiIsCisJCQkgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwljaF9jb3VudCA9IHVkbWFfc2V0dXBfcmVzb3VyY2VzKHVkKTsKKwlpZiAoY2hfY291bnQgPD0g MCkKKwkJcmV0dXJuIGNoX2NvdW50OworCisJc3Bpbl9sb2NrX2luaXQoJnVkLT5sb2NrKTsKKwlJ TklUX1dPUksoJnVkLT5wdXJnZV93b3JrLCB1ZG1hX3B1cmdlX2Rlc2Nfd29yayk7CisKKwl1ZC0+ ZGVzY19hbGlnbiA9IDY0OworCWlmICh1ZC0+ZGVzY19hbGlnbiA8IGRtYV9nZXRfY2FjaGVfYWxp Z25tZW50KCkpCisJCXVkLT5kZXNjX2FsaWduID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKTsK KworCWZvciAoaSA9IDA7IGkgPCB1ZC0+dGNoYW5fY250OyBpKyspIHsKKwkJc3RydWN0IHVkbWFf dGNoYW4gKnRjaGFuID0gJnVkLT50Y2hhbnNbaV07CisKKwkJdGNoYW4tPmlkID0gaTsKKwkJdGNo YW4tPnJlZ19ydCA9IHVkLT5tbXJzW01NUl9UQ0hBTlJUXSArIGkgKiAweDEwMDA7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IHVkLT5yY2hhbl9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdWRtYV9yY2hh biAqcmNoYW4gPSAmdWQtPnJjaGFuc1tpXTsKKworCQlyY2hhbi0+aWQgPSBpOworCQlyY2hhbi0+ cmVnX3J0ID0gdWQtPm1tcnNbTU1SX1JDSEFOUlRdICsgaSAqIDB4MTAwMDsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgdWQtPnJmbG93X2NudDsgaSsrKSB7CisJCXN0cnVjdCB1ZG1hX3JmbG93ICpy ZmxvdyA9ICZ1ZC0+cmZsb3dzW2ldOworCisJCXJmbG93LT5pZCA9IGk7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IGNoX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSAmdWQt PmNoYW5uZWxzW2ldOworCisJCXVjLT51ZCA9IHVkOworCQl1Yy0+dmMuZGVzY19mcmVlID0gdWRt YV9kZXNjX2ZyZWU7CisJCXVjLT5pZCA9IGk7CisJCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7 CisJCXVjLT50Y2hhbiA9IE5VTEw7CisJCXVjLT5yY2hhbiA9IE5VTEw7CisJCXVjLT5kaXIgPSBE TUFfTUVNX1RPX01FTTsKKwkJdWMtPm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJO RUwsICIlcyBjaGFuJWQiLAorCQkJCQkgIGRldl9uYW1lKGRldiksIGkpOworCisJCXZjaGFuX2lu aXQoJnVjLT52YywgJnVkLT5kZGV2KTsKKwkJLyogVXNlIGN1c3RvbSB2Y2hhbiBjb21wbGV0aW9u IGhhbmRsaW5nICovCisJCXRhc2tsZXRfaW5pdCgmdWMtPnZjLnRhc2ssIHVkbWFfdmNoYW5fY29t cGxldGUsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSZ1Yy0+dmMpOworCQlpbml0X2NvbXBsZXRp b24oJnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCX0KKworCXJldCA9IGRtYV9hc3luY19kZXZp Y2VfcmVnaXN0ZXIoJnVkLT5kZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHJlZ2lzdGVyIHNsYXZlIERNQSBlbmdpbmU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVkKTsKKworCXJldCA9IG9m X2RtYV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldi0+b2Zfbm9kZSwgdWRtYV9vZl94bGF0ZSwgdWQp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgb2ZfZG1h IGNvbnRyb2xsZXJcbiIpOworCQlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnVkLT5kZGV2 KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShwZGV2LT5k ZXYub2Zfbm9kZSk7CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZ1ZC0+ZGRldik7CisK KwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBkaWQgcHJvcGVyIGNsZWFudXAgKi8KKwljYW5jZWxfd29y a19zeW5jKCZ1ZC0+cHVyZ2Vfd29yayk7CisJdWRtYV9wdXJnZV9kZXNjX3dvcmsoJnVkLT5wdXJn ZV93b3JrKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGlt ZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHVkbWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0g InRpLXVkbWEiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB1ZG1hX29mX21hdGNoLAorCX0sCisJLnBy b2JlCQk9IHVkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSB1ZG1hX3JlbW92ZSwKK307CisKK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIodWRtYV9kcml2ZXIpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3Jt OnRpLXVkbWEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgSzMgRE1BIGRyaXZlciBmb3IgQ1BQ SSA1LjAgY29tcGxpYW50IGRldmljZXMiKTsKK01PRFVMRV9BVVRIT1IoIlBldGVyIFVqZmFsdXNp IDxwZXRlci51amZhbHVzaUB0aS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0t IApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwg MDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlr a2EvRG9taWNpbGU6IEhlbHNpbmtpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=