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=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 CEC04C17441 for ; Mon, 11 Nov 2019 13:56:42 +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 98B8E206A3 for ; Mon, 11 Nov 2019 13:56:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="p+7j0v5z"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="VyUppG36" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 98B8E206A3 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=qkhYMZavF9EZH9HpyyPjoAl+SbBl4Fz1WaBdRReJM+w=; b=p+7j0v5z0HiJ96 DkVluaRpPd6RvtGFrztvBF97ICeQvbFdxf8cWFFbWhC52VefpO7JLrbenJoCnlCqv46pWJjAqQIC3 IGZIGXxtVJanXZQnn9BRB8ze3ZUko+//r8N10xoRlS8zxYjHj3teIF7Z5crSgvAamroPW9slI9fA3 13s2YXgIy8KNl56miDZAVtnp0hcy8fQoUPvUnri1wehg1VGBFHlz5FI57GhOd+Azkya7nqb8X+IIc acogg47zGvWDGBTeuR8k5+SPEvWmQgEMBUNcgnRn5NLuSN/lNbzI/UaOaTyDN5urgPFfp675JgJX8 w98yLAZmM/NLmhik9tfw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUABN-0005Uu-Bc; Mon, 11 Nov 2019 13:56:41 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUA7u-0000xs-RQ for linux-arm-kernel@lists.infradead.org; Mon, 11 Nov 2019 13:53:13 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id xABDqw6e010566; Mon, 11 Nov 2019 07:52:58 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1573480378; bh=d/HZvp/PgemyWy2dxDs643T+Bfu6cEYUw76A7bRo+Pk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=VyUppG36v8fAcZ1BCOxwoH5ltf3rBZ7omoy+qfNc3+0ekqtG03uKxgqo1BHL97M+9 qnR5Kd/w/svGwb7dEar+HCYhPdqjMo8w90SjP0C8dGS+3K8lSDvu7q7xAGhREXUkvf /1lC+MlGILZfbqZtBazytXcetJAB8YFdNVnn2H1c= Received: from DLEE107.ent.ti.com (dlee107.ent.ti.com [157.170.170.37]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xABDqwF6111729 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 11 Nov 2019 07:52:58 -0600 Received: from DLEE112.ent.ti.com (157.170.170.23) by DLEE107.ent.ti.com (157.170.170.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 11 Nov 2019 07:52:38 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 11 Nov 2019 07:52:55 -0600 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 xABDqE8v097668; Mon, 11 Nov 2019 07:52:52 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v5 10/15] dmaengine: ti: New driver for K3 UDMA - split#2: probe/remove, xlate and filter_fn Date: Mon, 11 Nov 2019 15:53:25 +0200 Message-ID: <20191111135330.8235-11-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111135330.8235-1-peter.ujfalusi@ti.com> References: <20191111135330.8235-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-20191111_055307_009929_DA64D60F X-CRM114-Status: GOOD ( 17.24 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 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, j-keerthy@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 dGVyLnVqZmFsdXNpQHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCA1Mjcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg NTI3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMKaW5kZXggYzZmOTRkNzkzODhjLi40NGYxZDhmNTM3 NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYworKysgYi9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmMKQEAgLTEwNDUsMyArMTA0NSw1MzAgQEAgc3RhdGljIGlycXJldHVybl90 IHVkbWFfdWRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCiAJcmV0dXJuIElS UV9IQU5ETEVEOwogfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZG1hX2RyaXZl cjsKKworc3RhdGljIGJvb2wgdWRtYV9kbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hh biwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHBzaWxfZW5kcG9pbnRfY29uZmlnICplcF9jb25m aWc7CisJc3RydWN0IHVkbWFfY2hhbiAqdWM7CisJc3RydWN0IHVkbWFfZGV2ICp1ZDsKKwl1MzIg KmFyZ3M7CisKKwlpZiAoY2hhbi0+ZGV2aWNlLT5kZXYtPmRyaXZlciAhPSAmdWRtYV9kcml2ZXIu ZHJpdmVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwl1YyA9IHRvX3VkbWFfY2hhbihjaGFuKTsKKwl1 ZCA9IHVjLT51ZDsKKwlhcmdzID0gcGFyYW07CisJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSBhcmdz WzBdOworCisJaWYgKHVjLT5yZW1vdGVfdGhyZWFkX2lkICYgSzNfUFNJTF9EU1RfVEhSRUFEX0lE X09GRlNFVCkKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fREVWOworCWVsc2UKKwkJdWMtPmRpciA9 IERNQV9ERVZfVE9fTUVNOworCisJZXBfY29uZmlnID0gcHNpbF9nZXRfZXBfY29uZmlnKHVjLT5y ZW1vdGVfdGhyZWFkX2lkKTsKKwlpZiAoSVNfRVJSKGVwX2NvbmZpZykpIHsKKwkJZGV2X2Vycih1 ZC0+ZGV2LCAiTm8gY29uZmlndXJhdGlvbiBmb3IgcHNpLWwgdGhyZWFkIDB4JTA0eFxuIiwKKwkJ CXVjLT5yZW1vdGVfdGhyZWFkX2lkKTsKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCQl1 Yy0+cmVtb3RlX3RocmVhZF9pZCA9IC0xOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdWMtPnBr dF9tb2RlID0gZXBfY29uZmlnLT5wa3RfbW9kZTsKKwl1Yy0+Y2hhbm5lbF90cGwgPSBlcF9jb25m aWctPmNoYW5uZWxfdHBsOworCXVjLT5ub3RkcGt0ID0gZXBfY29uZmlnLT5ub3RkcGt0OworCXVj LT5lcF90eXBlID0gZXBfY29uZmlnLT5lcF90eXBlOworCisJaWYgKHVjLT5lcF90eXBlICE9IFBT SUxfRVBfTkFUSVZFKSB7CisJCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2Rh dGEgPSB1ZC0+bWF0Y2hfZGF0YTsKKworCQlpZiAobWF0Y2hfZGF0YS0+aGF2ZV9hY2MzMikKKwkJ CXVjLT5lbmFibGVfYWNjMzIgPSBlcF9jb25maWctPnBkbWFfYWNjMzI7CisJCWlmIChtYXRjaF9k YXRhLT5oYXZlX2J1cnN0KQorCQkJdWMtPmVuYWJsZV9idXJzdCA9IGVwX2NvbmZpZy0+cGRtYV9i dXJzdDsKKwl9CisKKwl1Yy0+bmVlZHNfZXBpYiA9IGVwX2NvbmZpZy0+bmVlZHNfZXBpYjsKKwl1 Yy0+cHNkX3NpemUgPSBlcF9jb25maWctPnBzZF9zaXplOworCXVjLT5tZXRhZGF0YV9zaXplID0g KHVjLT5uZWVkc19lcGliID8gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFIDogMCkgKworCQkJ ICAgIHVjLT5wc2Rfc2l6ZTsKKworCWlmICh1Yy0+cGt0X21vZGUpCisJCXVjLT5oZGVzY19zaXpl ID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCkgKworCQkJCSB1Yy0+bWV0 YWRhdGFfc2l6ZSwgdWQtPmRlc2NfYWxpZ24pOworCisJZGV2X2RiZyh1ZC0+ZGV2LCAiY2hhbiVk OiBSZW1vdGUgdGhyZWFkOiAweCUwNHggKCVzKVxuIiwgdWMtPmlkLAorCQl1Yy0+cmVtb3RlX3Ro cmVhZF9pZCwgdWRtYV9nZXRfZGlyX3RleHQodWMtPmRpcikpOworCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKnVkbWFfb2ZfeGxhdGUoc3RydWN0IG9mX3BoYW5k bGVfYXJncyAqZG1hX3NwZWMsCisJCQkJICAgICAgc3RydWN0IG9mX2RtYSAqb2ZkbWEpCit7CisJ c3RydWN0IHVkbWFfZGV2ICp1ZCA9IG9mZG1hLT5vZl9kbWFfZGF0YTsKKwlkbWFfY2FwX21hc2tf dCBtYXNrID0gdWQtPmRkZXYuY2FwX21hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCisJ aWYgKGRtYV9zcGVjLT5hcmdzX2NvdW50ICE9IDEpCisJCXJldHVybiBOVUxMOworCisJY2hhbiA9 IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgmbWFzaywgdWRtYV9kbWFfZmlsdGVyX2ZuLAorCQkJCSAg ICAgJmRtYV9zcGVjLT5hcmdzWzBdLCBvZmRtYS0+b2Zfbm9kZSk7CisJaWYgKCFjaGFuKSB7CisJ CWRldl9lcnIodWQtPmRldiwgImdldCBjaGFubmVsIGZhaWwgaW4gJXMuXG4iLCBfX2Z1bmNfXyk7 CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBjaGFuOworfQorCitz dGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBhbTY1NF9tYWluX2RhdGEgPSB7CisJLnBzaWxf YmFzZSA9IDB4MTAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaGF2ZV9h Y2MzMiA9IGZhbHNlLAorCS5oYXZlX2J1cnN0ID0gZmFsc2UsCisJLnN0YXRpY3RyX3pfbWFzayA9 IEdFTk1BU0soMTEsIDApLAorCS5yY2hhbl9vZXNfb2Zmc2V0ID0gMHgyMDAwLAorCS50cGxfbGV2 ZWxzID0gMiwKKwkubGV2ZWxfc3RhcnRfaWR4ID0geworCQlbMF0gPSA4LCAvKiBOb3JtYWwgY2hh bm5lbHMgKi8KKwkJWzFdID0gMCwgLyogSGlnaCBUaHJvdWdocHV0IGNoYW5uZWxzICovCisJfSwK K307CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhIGFtNjU0X21jdV9kYXRhID0gewor CS5wc2lsX2Jhc2UgPSAweDYwMDAsCisJLmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IGZhbHNlLCAv KiBNRU1fVE9fTUVNIGlzIHNsb3cgdmlhIE1DVSBVRE1BICovCisJLmhhdmVfYWNjMzIgPSBmYWxz ZSwKKwkuaGF2ZV9idXJzdCA9IGZhbHNlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5NQVNLKDEx LCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4MjAwMCwKKwkudHBsX2xldmVscyA9IDIsCisJ LmxldmVsX3N0YXJ0X2lkeCA9IHsKKwkJWzBdID0gMiwgLyogTm9ybWFsIGNoYW5uZWxzICovCisJ CVsxXSA9IDAsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0sCit9OworCitzdGF0 aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBqNzIxZV9tYWluX2RhdGEgPSB7CisJLnBzaWxfYmFz ZSA9IDB4MTAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaGF2ZV9hY2Mz MiA9IHRydWUsCisJLmhhdmVfYnVyc3QgPSB0cnVlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5N QVNLKDIzLCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4NDAwLAorCS50cGxfbGV2ZWxzID0g MywKKwkubGV2ZWxfc3RhcnRfaWR4ID0geworCQlbMF0gPSAxNiwgLyogTm9ybWFsIGNoYW5uZWxz ICovCisJCVsxXSA9IDQsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCQlbMl0gPSAw LCAvKiBVbHRyYSBIaWdoIFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGlj IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgajcyMWVfbWN1X2RhdGEgPSB7CisJLnBzaWxfYmFzZSA9 IDB4NjAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gZmFsc2UsIC8qIE1FTV9UT19NRU0g aXMgc2xvdyB2aWEgTUNVIFVETUEgKi8KKwkuaGF2ZV9hY2MzMiA9IHRydWUsCisJLmhhdmVfYnVy c3QgPSB0cnVlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5NQVNLKDIzLCAwKSwKKwkucmNoYW5f b2VzX29mZnNldCA9IDB4NDAwLAorCS50cGxfbGV2ZWxzID0gMiwKKwkubGV2ZWxfc3RhcnRfaWR4 ID0geworCQlbMF0gPSAyLCAvKiBOb3JtYWwgY2hhbm5lbHMgKi8KKwkJWzFdID0gMCwgLyogSGln aCBUaHJvdWdocHV0IGNoYW5uZWxzICovCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHVkbWFfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInRp LGFtNjU0LW5hdnNzLW1haW4tdWRtYXAiLAorCQkuZGF0YSA9ICZhbTY1NF9tYWluX2RhdGEsCisJ fSwKKwl7CisJCS5jb21wYXRpYmxlID0gInRpLGFtNjU0LW5hdnNzLW1jdS11ZG1hcCIsCisJCS5k YXRhID0gJmFtNjU0X21jdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAidGksajcyMWUt bmF2c3MtbWFpbi11ZG1hcCIsCisJCS5kYXRhID0gJmo3MjFlX21haW5fZGF0YSwKKwl9LCB7CisJ CS5jb21wYXRpYmxlID0gInRpLGo3MjFlLW5hdnNzLW1jdS11ZG1hcCIsCisJCS5kYXRhID0gJmo3 MjFlX21jdV9kYXRhLAorCX0sCisJeyAvKiBTZW50aW5lbCAqLyB9LAorfTsKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHVkbWFfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHVkbWFfZ2V0X21tcnMo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IHVkbWFfZGV2ICp1ZCkKK3sKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNTVJfTEFT VDsgaSsrKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9S RVNPVVJDRV9NRU0sCisJCQkJCQkgICBtbXJfbmFtZXNbaV0pOworCQl1ZC0+bW1yc1tpXSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCQlpZiAoSVNfRVJSKHVkLT5t bXJzW2ldKSkKKwkJCXJldHVybiBQVFJfRVJSKHVkLT5tbXJzW2ldKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB1ZG1hX3NldHVwX3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9kZXYg KnVkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVkLT5kZXY7CisJaW50IGNoX2NvdW50LCBy ZXQsIGksIGo7CisJdTMyIGNhcDIsIGNhcDM7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNj ICpybV9kZXNjOworCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX3JlcywgaXJxX3JlczsKKwlz dHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCXN0YXRpYyBj b25zdCBjaGFyICogY29uc3QgcmFuZ2VfbmFtZXNbXSA9IHsgInRpLHNjaS1ybS1yYW5nZS10Y2hh biIsCisJCQkJCQkgICAgInRpLHNjaS1ybS1yYW5nZS1yY2hhbiIsCisJCQkJCQkgICAgInRpLHNj aS1ybS1yYW5nZS1yZmxvdyIgfTsKKworCWNhcDIgPSB1ZG1hX3JlYWQodWQtPm1tcnNbTU1SX0dD RkddLCAweDI4KTsKKwljYXAzID0gdWRtYV9yZWFkKHVkLT5tbXJzW01NUl9HQ0ZHXSwgMHgyYyk7 CisKKwl1ZC0+cmZsb3dfY250ID0gY2FwMyAmIDB4M2ZmZjsKKwl1ZC0+dGNoYW5fY250ID0gY2Fw MiAmIDB4MWZmOworCXVkLT5lY2hhbl9jbnQgPSAoY2FwMiA+PiA5KSAmIDB4MWZmOworCXVkLT5y Y2hhbl9jbnQgPSAoY2FwMiA+PiAxOCkgJiAweDFmZjsKKwljaF9jb3VudCAgPSB1ZC0+dGNoYW5f Y250ICsgdWQtPnJjaGFuX2NudDsKKworCXVkLT50Y2hhbl9tYXAgPSBkZXZtX2ttYWxsb2NfYXJy YXkoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT50Y2hhbl9jbnQpLAorCQkJCQkgICBzaXplb2YodW5z aWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCXVkLT50Y2hhbnMgPSBkZXZtX2tjYWxsb2MoZGV2 LCB1ZC0+dGNoYW5fY250LCBzaXplb2YoKnVkLT50Y2hhbnMpLAorCQkJCSAgR0ZQX0tFUk5FTCk7 CisJdWQtPnJjaGFuX21hcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIEJJVFNfVE9fTE9OR1Mo dWQtPnJjaGFuX2NudCksCisJCQkJCSAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5F TCk7CisJdWQtPnJjaGFucyA9IGRldm1fa2NhbGxvYyhkZXYsIHVkLT5yY2hhbl9jbnQsIHNpemVv ZigqdWQtPnJjaGFucyksCisJCQkJICBHRlBfS0VSTkVMKTsKKwl1ZC0+cmZsb3dfZ3BfbWFwID0g ZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgQklUU19UT19MT05HUyh1ZC0+cmZsb3dfY250KSwKKwkJ CQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsK Kwl1ZC0+cmZsb3dfZ3BfbWFwX2FsbG9jYXRlZCA9IGRldm1fa2NhbGxvYyhkZXYsCisJCQkJCQkg IEJJVFNfVE9fTE9OR1ModWQtPnJmbG93X2NudCksCisJCQkJCQkgIHNpemVvZih1bnNpZ25lZCBs b25nKSwKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJdWQtPnJmbG93X2luX3VzZSA9IGRldm1fa2Nh bGxvYyhkZXYsIEJJVFNfVE9fTE9OR1ModWQtPnJmbG93X2NudCksCisJCQkJCXNpemVvZih1bnNp Z25lZCBsb25nKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJdWQtPnJmbG93cyA9IGRldm1fa2NhbGxv YyhkZXYsIHVkLT5yZmxvd19jbnQsIHNpemVvZigqdWQtPnJmbG93cyksCisJCQkJICBHRlBfS0VS TkVMKTsKKworCWlmICghdWQtPnRjaGFuX21hcCB8fCAhdWQtPnJjaGFuX21hcCB8fCAhdWQtPnJm bG93X2dwX21hcCB8fAorCSAgICAhdWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQgfHwgIXVkLT50 Y2hhbnMgfHwgIXVkLT5yY2hhbnMgfHwKKwkgICAgIXVkLT5yZmxvd3MgfHwgIXVkLT5yZmxvd19p bl91c2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBSWCBmbG93cyB3aXRoIHRoZSBz YW1lIElkcyBhcyBSWCBjaGFubmVscyBhcmUgcmVzZXJ2ZWQgdG8gYmUgdXNlZAorCSAqIGFzIGRl ZmF1bHQgZmxvd3MgaWYgcmVtb3RlIEhXIGNhbid0IGdlbmVyYXRlIGZsb3dfaWRzLiBUaG9zZQor CSAqIFJYIGZsb3dzIGNhbiBiZSByZXF1ZXN0ZWQgb25seSBleHBsaWNpdGx5IGJ5IGlkLgorCSAq LworCWJpdG1hcF9zZXQodWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQsIDAsIHVkLT5yY2hhbl9j bnQpOworCisJLyogYnkgZGVmYXVsdCBubyBHUCByZmxvd3MgYXJlIGFzc2lnbmVkIHRvIExpbnV4 ICovCisJYml0bWFwX3NldCh1ZC0+cmZsb3dfZ3BfbWFwLCAwLCB1ZC0+cmZsb3dfY250KTsKKwor CS8qIEdldCByZXNvdXJjZSByYW5nZXMgZnJvbSB0aXNjaSAqLworCWZvciAoaSA9IDA7IGkgPCBS TV9SQU5HRV9MQVNUOyBpKyspCisJCXRpc2NpX3JtLT5ybV9yYW5nZXNbaV0gPQorCQkJZGV2bV90 aV9zY2lfZ2V0X29mX3Jlc291cmNlKHRpc2NpX3JtLT50aXNjaSwgZGV2LAorCQkJCQkJICAgIHRp c2NpX3JtLT50aXNjaV9kZXZfaWQsCisJCQkJCQkgICAgKGNoYXIgKilyYW5nZV9uYW1lc1tpXSk7 CisKKwkvKiB0Y2hhbiByYW5nZXMgKi8KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2VzW1JN X1JBTkdFX1RDSEFOXTsKKwlpZiAoSVNfRVJSKHJtX3JlcykpIHsKKwkJYml0bWFwX3plcm8odWQt PnRjaGFuX21hcCwgdWQtPnRjaGFuX2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFwX2ZpbGwodWQt PnRjaGFuX21hcCwgdWQtPnRjaGFuX2NudCk7CisJCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNl dHM7IGkrKykgeworCQkJcm1fZGVzYyA9ICZybV9yZXMtPmRlc2NbaV07CisJCQliaXRtYXBfY2xl YXIodWQtPnRjaGFuX21hcCwgcm1fZGVzYy0+c3RhcnQsCisJCQkJICAgICBybV9kZXNjLT5udW0p OworCQkJZGV2X2RiZyhkZXYsICJ0aS1zY2ktcmVzOiB0Y2hhbjogJWQ6JWRcbiIsCisJCQkJcm1f ZGVzYy0+c3RhcnQsIHJtX2Rlc2MtPm51bSk7CisJCX0KKwl9CisJaXJxX3Jlcy5zZXRzID0gcm1f cmVzLT5zZXRzOworCisJLyogcmNoYW4gYW5kIG1hdGNoaW5nIGRlZmF1bHQgZmxvdyByYW5nZXMg Ki8KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2VzW1JNX1JBTkdFX1JDSEFOXTsKKwlpZiAo SVNfRVJSKHJtX3JlcykpIHsKKwkJYml0bWFwX3plcm8odWQtPnJjaGFuX21hcCwgdWQtPnJjaGFu X2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFwX2ZpbGwodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFu X2NudCk7CisJCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQkJcm1fZGVz YyA9ICZybV9yZXMtPmRlc2NbaV07CisJCQliaXRtYXBfY2xlYXIodWQtPnJjaGFuX21hcCwgcm1f ZGVzYy0+c3RhcnQsCisJCQkJICAgICBybV9kZXNjLT5udW0pOworCQkJZGV2X2RiZyhkZXYsICJ0 aS1zY2ktcmVzOiByY2hhbjogJWQ6JWRcbiIsCisJCQkJcm1fZGVzYy0+c3RhcnQsIHJtX2Rlc2Mt Pm51bSk7CisJCX0KKwl9CisKKwlpcnFfcmVzLnNldHMgKz0gcm1fcmVzLT5zZXRzOworCWlycV9y ZXMuZGVzYyA9IGtjYWxsb2MoaXJxX3Jlcy5zZXRzLCBzaXplb2YoKmlycV9yZXMuZGVzYyksIEdG UF9LRVJORUwpOworCXJtX3JlcyA9IHRpc2NpX3JtLT5ybV9yYW5nZXNbUk1fUkFOR0VfVENIQU5d OworCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQlpcnFfcmVzLmRlc2Nb aV0uc3RhcnQgPSBybV9yZXMtPmRlc2NbaV0uc3RhcnQ7CisJCWlycV9yZXMuZGVzY1tpXS5udW0g PSBybV9yZXMtPmRlc2NbaV0ubnVtOworCX0KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2Vz W1JNX1JBTkdFX1JDSEFOXTsKKwlmb3IgKGogPSAwOyBqIDwgcm1fcmVzLT5zZXRzOyBqKyssIGkr KykgeworCQlpcnFfcmVzLmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2Nbal0uc3RhcnQgKwor CQkJCQl1ZC0+bWF0Y2hfZGF0YS0+cmNoYW5fb2VzX29mZnNldDsKKwkJaXJxX3Jlcy5kZXNjW2ld Lm51bSA9IHJtX3Jlcy0+ZGVzY1tqXS5udW07CisJfQorCXJldCA9IHRpX3NjaV9pbnRhX21zaV9k b21haW5fYWxsb2NfaXJxcyh1ZC0+ZGV2LCAmaXJxX3Jlcyk7CisJa2ZyZWUoaXJxX3Jlcy5kZXNj KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWQtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBN U0kgaW50ZXJydXB0c1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogR1AgcmZsb3cgcmFu Z2VzICovCisJcm1fcmVzID0gdGlzY2lfcm0tPnJtX3Jhbmdlc1tSTV9SQU5HRV9SRkxPV107CisJ aWYgKElTX0VSUihybV9yZXMpKSB7CisJCS8qIGFsbCBncCBmbG93cyBhcmUgYXNzaWduZWQgZXhj bHVzaXZlbHkgdG8gTGludXggKi8KKwkJYml0bWFwX2NsZWFyKHVkLT5yZmxvd19ncF9tYXAsIHVk LT5yY2hhbl9jbnQsCisJCQkgICAgIHVkLT5yZmxvd19jbnQgLSB1ZC0+cmNoYW5fY250KTsKKwl9 IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rl c2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0bWFwX2NsZWFyKHVkLT5yZmxvd19ncF9tYXAs IHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVzYy0+bnVtKTsKKwkJCWRldl9kYmcoZGV2 LCAidGktc2NpLXJlczogcmZsb3c6ICVkOiVkXG4iLAorCQkJCXJtX2Rlc2MtPnN0YXJ0LCBybV9k ZXNjLT5udW0pOworCQl9CisJfQorCisJY2hfY291bnQgLT0gYml0bWFwX3dlaWdodCh1ZC0+dGNo YW5fbWFwLCB1ZC0+dGNoYW5fY250KTsKKwljaF9jb3VudCAtPSBiaXRtYXBfd2VpZ2h0KHVkLT5y Y2hhbl9tYXAsIHVkLT5yY2hhbl9jbnQpOworCWlmICghY2hfY291bnQpCisJCXJldHVybiAtRU5P REVWOworCisJdWQtPmNoYW5uZWxzID0gZGV2bV9rY2FsbG9jKGRldiwgY2hfY291bnQsIHNpemVv ZigqdWQtPmNoYW5uZWxzKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZC0+Y2hhbm5l bHMpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2luZm8oZGV2LCAiQ2hhbm5lbHM6ICVkICh0 Y2hhbjogJXUsIHJjaGFuOiAldSwgZ3AtcmZsb3c6ICV1KVxuIiwKKwkJIGNoX2NvdW50LAorCQkg dWQtPnRjaGFuX2NudCAtIGJpdG1hcF93ZWlnaHQodWQtPnRjaGFuX21hcCwgdWQtPnRjaGFuX2Nu dCksCisJCSB1ZC0+cmNoYW5fY250IC0gYml0bWFwX3dlaWdodCh1ZC0+cmNoYW5fbWFwLCB1ZC0+ cmNoYW5fY250KSwKKwkJIHVkLT5yZmxvd19jbnQgLSBiaXRtYXBfd2VpZ2h0KHVkLT5yZmxvd19n cF9tYXAsCisJCQkJCSAgICAgICB1ZC0+cmZsb3dfY250KSk7CisKKwlyZXR1cm4gY2hfY291bnQ7 Cit9CisKKyNkZWZpbmUgVElfVURNQUNfQlVTV0lEVEhTCShCSVQoRE1BX1NMQVZFX0JVU1dJRFRI XzFfQllURSkgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBcCisJ CQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfM19CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xB VkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfOF9C WVRFUykpCisKK3N0YXRpYyBpbnQgdWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmF2c3Nfbm9kZSA9IHBkZXYtPmRldi5wYXJl bnQtPm9mX25vZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qg dWRtYV9kZXYgKnVkOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCWludCBp LCByZXQ7CisJaW50IGNoX2NvdW50OworCisJcmV0ID0gZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hl cmVudChkZXYsIERNQV9CSVRfTUFTSyg0OCkpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHNldCBkbWEgbWFzayBzdHVmZlxuIik7CisKKwl1ZCA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqdWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVkKQorCQlyZXR1cm4gLUVOT01F TTsKKworCXJldCA9IHVkbWFfZ2V0X21tcnMocGRldiwgdWQpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwl1ZC0+dGlzY2lfcm0udGlzY2kgPSB0aV9zY2lfZ2V0X2J5X3BoYW5kbGUoZGV2 LT5vZl9ub2RlLCAidGksc2NpIik7CisJaWYgKElTX0VSUih1ZC0+dGlzY2lfcm0udGlzY2kpKQor CQlyZXR1cm4gUFRSX0VSUih1ZC0+dGlzY2lfcm0udGlzY2kpOworCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAidGksc2NpLWRldi1pZCIsCisJCQkJICAgJnVkLT50 aXNjaV9ybS50aXNjaV9kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxz Y2ktZGV2LWlkIHJlYWQgZmFpbHVyZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJ cGRldi0+aWQgPSB1ZC0+dGlzY2lfcm0udGlzY2lfZGV2X2lkOworCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobmF2c3Nfbm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZ1ZC0+dGlz Y2lfcm0udGlzY2lfbmF2c3NfZGV2X2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAi TkFWU1MgdGksc2NpLWRldi1pZCByZWFkIGZhaWx1cmUgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJdWQtPnRpc2NpX3JtLnRpc2NpX3VkbWFwX29wcyA9ICZ1ZC0+dGlzY2lfcm0u dGlzY2ktPm9wcy5ybV91ZG1hcF9vcHM7CisJdWQtPnRpc2NpX3JtLnRpc2NpX3BzaWxfb3BzID0g JnVkLT50aXNjaV9ybS50aXNjaS0+b3BzLnJtX3BzaWxfb3BzOworCisJdWQtPnJpbmdhY2MgPSBv Zl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgInRpLHJpbmdhY2MiKTsK KwlpZiAoSVNfRVJSKHVkLT5yaW5nYWNjKSkKKwkJcmV0dXJuIFBUUl9FUlIodWQtPnJpbmdhY2Mp OworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dldF9kb21haW4oZGV2LCBkZXYtPm9mX25v ZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9JTlRBX01TSSk7CisJaWYgKCFkZXYtPm1z aV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1TSSBkb21haW5cbiIp OworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUo dWRtYV9vZl9tYXRjaCwgZGV2LT5vZl9ub2RlKTsKKwlpZiAoIW1hdGNoKSB7CisJCWRldl9lcnIo ZGV2LCAiTm8gY29tcGF0aWJsZSBtYXRjaCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOwor CX0KKwl1ZC0+bWF0Y2hfZGF0YSA9IG1hdGNoLT5kYXRhOworCisJZG1hX2NhcF9zZXQoRE1BX1NM QVZFLCB1ZC0+ZGRldi5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgdWQtPmRk ZXYuY2FwX21hc2spOworCisJdWQtPmRkZXYuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0g dWRtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKKwl1ZC0+ZGRldi5kZXZpY2VfY29uZmlnID0gdWRt YV9zbGF2ZV9jb25maWc7CisJdWQtPmRkZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSB1ZG1hX3By ZXBfc2xhdmVfc2c7CisJdWQtPmRkZXYuZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9IHVkbWFfcHJl cF9kbWFfY3ljbGljOworCXVkLT5kZGV2LmRldmljZV9pc3N1ZV9wZW5kaW5nID0gdWRtYV9pc3N1 ZV9wZW5kaW5nOworCXVkLT5kZGV2LmRldmljZV90eF9zdGF0dXMgPSB1ZG1hX3R4X3N0YXR1czsK Kwl1ZC0+ZGRldi5kZXZpY2VfcGF1c2UgPSB1ZG1hX3BhdXNlOworCXVkLT5kZGV2LmRldmljZV9y ZXN1bWUgPSB1ZG1hX3Jlc3VtZTsKKwl1ZC0+ZGRldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9IHVk bWFfdGVybWluYXRlX2FsbDsKKwl1ZC0+ZGRldi5kZXZpY2Vfc3luY2hyb25pemUgPSB1ZG1hX3N5 bmNocm9uaXplOworCisJdWQtPmRkZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSB1ZG1h X2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJdWQtPmRkZXYuc3JjX2FkZHJfd2lkdGhzID0gVElfVURN QUNfQlVTV0lEVEhTOworCXVkLT5kZGV2LmRzdF9hZGRyX3dpZHRocyA9IFRJX1VETUFDX0JVU1dJ RFRIUzsKKwl1ZC0+ZGRldi5kaXJlY3Rpb25zID0gQklUKERNQV9ERVZfVE9fTUVNKSB8IEJJVChE TUFfTUVNX1RPX0RFVik7CisJdWQtPmRkZXYucmVzaWR1ZV9ncmFudWxhcml0eSA9IERNQV9SRVNJ RFVFX0dSQU5VTEFSSVRZX0JVUlNUOworCXVkLT5kZGV2LmNvcHlfYWxpZ24gPSBETUFFTkdJTkVf QUxJR05fOF9CWVRFUzsKKwl1ZC0+ZGRldi5kZXNjX21ldGFkYXRhX21vZGVzID0gREVTQ19NRVRB REFUQV9DTElFTlQgfAorCQkJCSAgICAgICBERVNDX01FVEFEQVRBX0VOR0lORTsKKwlpZiAodWQt Pm1hdGNoX2RhdGEtPmVuYWJsZV9tZW1jcHlfc3VwcG9ydCkgeworCQlkbWFfY2FwX3NldChETUFf TUVNQ1BZLCB1ZC0+ZGRldi5jYXBfbWFzayk7CisJCXVkLT5kZGV2LmRldmljZV9wcmVwX2RtYV9t ZW1jcHkgPSB1ZG1hX3ByZXBfZG1hX21lbWNweTsKKwkJdWQtPmRkZXYuZGlyZWN0aW9ucyB8PSBC SVQoRE1BX01FTV9UT19NRU0pOworCX0KKworCXVkLT5kZGV2LmRldiA9IGRldjsKKwl1ZC0+ZGV2 ID0gZGV2OworCXVkLT5wc2lsX2Jhc2UgPSB1ZC0+bWF0Y2hfZGF0YS0+cHNpbF9iYXNlOworCisJ SU5JVF9MSVNUX0hFQUQoJnVkLT5kZGV2LmNoYW5uZWxzKTsKKwlJTklUX0xJU1RfSEVBRCgmdWQt PmRlc2NfdG9fcHVyZ2UpOworCisJY2hfY291bnQgPSB1ZG1hX3NldHVwX3Jlc291cmNlcyh1ZCk7 CisJaWYgKGNoX2NvdW50IDw9IDApCisJCXJldHVybiBjaF9jb3VudDsKKworCXNwaW5fbG9ja19p bml0KCZ1ZC0+bG9jayk7CisJSU5JVF9XT1JLKCZ1ZC0+cHVyZ2Vfd29yaywgdWRtYV9wdXJnZV9k ZXNjX3dvcmspOworCisJdWQtPmRlc2NfYWxpZ24gPSA2NDsKKwlpZiAodWQtPmRlc2NfYWxpZ24g PCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpKQorCQl1ZC0+ZGVzY19hbGlnbiA9IGRtYV9nZXRf Y2FjaGVfYWxpZ25tZW50KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWQtPnRjaGFuX2NudDsgaSsr KSB7CisJCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbiA9ICZ1ZC0+dGNoYW5zW2ldOworCisJCXRj aGFuLT5pZCA9IGk7CisJCXRjaGFuLT5yZWdfcnQgPSB1ZC0+bW1yc1tNTVJfVENIQU5SVF0gKyBp ICogMHgxMDAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1ZC0+cmNoYW5fY250OyBpKyspIHsK KwkJc3RydWN0IHVkbWFfcmNoYW4gKnJjaGFuID0gJnVkLT5yY2hhbnNbaV07CisKKwkJcmNoYW4t PmlkID0gaTsKKwkJcmNoYW4tPnJlZ19ydCA9IHVkLT5tbXJzW01NUl9SQ0hBTlJUXSArIGkgKiAw eDEwMDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVkLT5yZmxvd19jbnQ7IGkrKykgeworCQlz dHJ1Y3QgdWRtYV9yZmxvdyAqcmZsb3cgPSAmdWQtPnJmbG93c1tpXTsKKworCQlyZmxvdy0+aWQg PSBpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjaF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB1 ZG1hX2NoYW4gKnVjID0gJnVkLT5jaGFubmVsc1tpXTsKKworCQl1Yy0+dWQgPSB1ZDsKKwkJdWMt PnZjLmRlc2NfZnJlZSA9IHVkbWFfZGVzY19mcmVlOworCQl1Yy0+aWQgPSBpOworCQl1Yy0+cmVt b3RlX3RocmVhZF9pZCA9IC0xOworCQl1Yy0+dGNoYW4gPSBOVUxMOworCQl1Yy0+cmNoYW4gPSBO VUxMOworCQl1Yy0+ZGlyID0gRE1BX01FTV9UT19NRU07CisJCXVjLT5uYW1lID0gZGV2bV9rYXNw cmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMgY2hhbiVkIiwKKwkJCQkJICBkZXZfbmFtZShkZXYp LCBpKTsKKworCQl2Y2hhbl9pbml0KCZ1Yy0+dmMsICZ1ZC0+ZGRldik7CisJCS8qIFVzZSBjdXN0 b20gdmNoYW4gY29tcGxldGlvbiBoYW5kbGluZyAqLworCQl0YXNrbGV0X2luaXQoJnVjLT52Yy50 YXNrLCB1ZG1hX3ZjaGFuX2NvbXBsZXRlLAorCQkJICAgICAodW5zaWduZWQgbG9uZykmdWMtPnZj KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwl9CisKKwly ZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZ1ZC0+ZGRldik7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBzbGF2ZSBETUEgZW5naW5lOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCB1ZCk7CisKKwlyZXQgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3RlcihkZXYtPm9mX25vZGUs IHVkbWFfb2ZfeGxhdGUsIHVkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIG9mX2RtYSBjb250cm9sbGVyXG4iKTsKKwkJZG1hX2FzeW5jX2RldmljZV91 bnJlZ2lzdGVyKCZ1ZC0+ZGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCB1ZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1 ZG1hX2RldiAqdWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdWRtYV9j aGFuICp1YzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodWMsICZ1ZC0+ZGRldi5jaGFubmVscywg dmMuY2hhbi5kZXZpY2Vfbm9kZSkKKwkJdGFza2xldF9raWxsKCZ1Yy0+dmMudGFzayk7CisKKwlv Zl9kbWFfY29udHJvbGxlcl9mcmVlKHBkZXYtPmRldi5vZl9ub2RlKTsKKwlkbWFfYXN5bmNfZGV2 aWNlX3VucmVnaXN0ZXIoJnVkLT5kZGV2KTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGRpZCBw cm9wZXIgY2xlYW51cCAqLworCWNhbmNlbF93b3JrX3N5bmMoJnVkLT5wdXJnZV93b3JrKTsKKwl1 ZG1hX3B1cmdlX2Rlc2Nfd29yaygmdWQtPnB1cmdlX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkbWFfZHJpdmVyID0geworCS5kcml2ZXIg PSB7CisJCS5uYW1lCT0gInRpLXVkbWEiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB1ZG1hX29mX21h dGNoLAorCX0sCisJLnByb2JlCQk9IHVkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSB1ZG1hX3JlbW92 ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodWRtYV9kcml2ZXIpOworCitNT0RVTEVf QUxJQVMoInBsYXRmb3JtOnRpLXVkbWEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgSzMgRE1B IGRyaXZlciBmb3IgQ1BQSSA1LjAgY29tcGxpYW50IGRldmljZXMiKTsKK01PRFVMRV9BVVRIT1Io IlBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Iik7CitNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Ci0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9y a2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1 NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=