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 44190ECDFB6 for ; Tue, 1 Oct 2019 06:20:32 +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 09F2C21783 for ; Tue, 1 Oct 2019 06:20:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="OEHigh//"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="QdlvXvte" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09F2C21783 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=+fSAxwwGhqsJCjRQO2/VeQvu33lBs8DaxIdeHU1asbM=; b=OEHigh//8hklSx qIiWMYyXhKvlCz8Rqk1igNtS4Jzk1gNqgAuChV6q/80lKDV/ldVoVZ82U6d2VwwqDLSK4RrUa8oFv oL59UtTIQB6kKzwNxbN67+U77VYfhnvua2eZNQ49eaWIHxPSPoeVCLgDxMhOa20sr9mUSW42ixIY5 vMkzUvlCwePiyeaFeUcN5LVEcTl6tmP1iPwKoEitVL1uFkeNkFLNaNV5HS3tM6LIGl1mdB2+JVEli loVMyGRJ3SBKRyyKxaig2Ahpx8R37MqpdDFR++C1Ao/bwb1KzwsDLTctC0CfjYWJ3exptnhYRtJ8F S0d71PKjx5qktKmbIEvA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBWR-0004qk-C9; Tue, 01 Oct 2019 06:20:31 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBT2-0000eJ-PH for linux-arm-kernel@lists.infradead.org; Tue, 01 Oct 2019 06:17:04 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x916GrlX128253; Tue, 1 Oct 2019 01:16:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1569910613; bh=jPyEuztzeF7nKaAtRKd50WhprpFL8OpKGuGJdDqVPzE=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=QdlvXvtevNo/aH8uwE86nXQYqxwztlreY2f6CmU+5jeDQRPev3KS8Kux5iOszChr7 i0szp7effFp6YEZYRCeDZO5zmOOby0w4P8DazJloQy4tpgleLLIO9UYL+6ba0eaCOM W9gPcbFI9/uLArcly1JSsGSyEXoPxycmyvx8GJo8= Received: from DLEE106.ent.ti.com (dlee106.ent.ti.com [157.170.170.36]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x916GrlD034273 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 1 Oct 2019 01:16:53 -0500 Received: from DLEE104.ent.ti.com (157.170.170.34) by DLEE106.ent.ti.com (157.170.170.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 1 Oct 2019 01:16:52 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DLEE104.ent.ti.com (157.170.170.34) 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; Tue, 1 Oct 2019 01:16:42 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x916GGXE090310; Tue, 1 Oct 2019 01:16:49 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v3 09/14] dmaengine: ti: New driver for K3 UDMA - split#2: probe/remove, xlate and filter_fn Date: Tue, 1 Oct 2019 09:16:59 +0300 Message-ID: <20191001061704.2399-10-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191001061704.2399-1-peter.ujfalusi@ti.com> References: <20191001061704.2399-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-20190930_231700_930658_00E8A808 X-CRM114-Status: GOOD ( 17.59 ) 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 dGVyLnVqZmFsdXNpQHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCA2MTcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg NjE3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMKaW5kZXggNjI4MTIwZmZmYTJmLi5kNDBmZDI2OGI0 NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYworKysgYi9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmMKQEAgLTEwNTcsMyArMTA1Nyw2MjAgQEAgc3RhdGljIGlycXJldHVybl90 IHVkbWFfdWRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCiAJcmV0dXJuIElS UV9IQU5ETEVEOwogfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZG1hX2RyaXZl cjsKKworc3RhdGljIGJvb2wgdWRtYV9zbGF2ZV90aHJlYWRfaXNfcGFja2V0X21vZGUoc3RydWN0 IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKwljb25z dCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9kYXRhID0gdWQtPm1hdGNoX2RhdGE7CisJ c3RydWN0IHVkbWFfdHJfdGhyZWFkX3JhbmdlcyAqdHJfdGhyZWFkcyA9IG1hdGNoX2RhdGEtPnRy X3RocmVhZHM7CisJaW50IGk7CisKKwlpZiAoIXRyX3RocmVhZHMpCisJCXJldHVybiB0cnVlOwor CisJZm9yIChpID0gMDsgdHJfdGhyZWFkc1tpXS5jb3VudDsgaSsrKSB7CisJCWludCBzdGFydCA9 IHRyX3RocmVhZHNbaV0uc3RhcnQ7CisJCWludCBjb3VudCA9IHRyX3RocmVhZHNbaV0uY291bnQ7 CisKKwkJaWYgKHVjLT5yZW1vdGVfdGhyZWFkX2lkID49IHN0YXJ0ICYmCisJCSAgICB1Yy0+cmVt b3RlX3RocmVhZF9pZCA8IChzdGFydCArIGNvdW50KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHVkbWFfZG1hX2ZpbHRlcl9mbihzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKQoreworCXUzMiAqYXJnczsKKwlzdHJ1Y3QgdWRt YV9jaGFuICp1YzsKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq Y2hjb25mX25vZGUsICpzbGF2ZV9ub2RlOworCWNoYXIgcHJvcFs1MF07CisJdTMyIHZhbDsKKwor CWlmIChjaGFuLT5kZXZpY2UtPmRldi0+ZHJpdmVyICE9ICZ1ZG1hX2RyaXZlci5kcml2ZXIpCisJ CXJldHVybiBmYWxzZTsKKworCXVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOworCXVkID0gdWMtPnVk OworCWFyZ3MgPSBwYXJhbTsKKworCWlmIChhcmdzWzJdID09IFVETUFfRElSX1RYKSB7CisJCXVj LT5kaXIgPSBETUFfTUVNX1RPX0RFVjsKKwl9IGVsc2UgaWYgKGFyZ3NbMl0gPT0gVURNQV9ESVJf UlgpIHsKKwkJdWMtPmRpciA9IERNQV9ERVZfVE9fTUVNOworCX0gZWxzZSB7CisJCWRldl9lcnIo dWQtPmRldiwgIkludmFsaWQgZGlyZWN0aW9uICgldSlcbiIsIGFyZ3NbMl0pOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJc2xhdmVfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKGFyZ3Nb MF0pOworCWlmICghc2xhdmVfbm9kZSkgeworCQlkZXZfZXJyKHVkLT5kZXYsICJTbGF2ZSBub2Rl IGlzIG1pc3NpbmdcbiIpOworCQl1Yy0+ZGlyID0gRE1BX01FTV9UT19NRU07CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoc2xhdmVfbm9kZSwgInRpLHBz aWwtYmFzZSIsICZ2YWwpKSB7CisJCWRldl9lcnIodWQtPmRldiwgInRpLHBzaWwtYmFzZSBpcyBt aXNzaW5nXG4iKTsKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSB2YWwgKyBhcmdzWzFdOworCisJc25wcmlu dGYocHJvcCwgc2l6ZW9mKHByb3ApLCAicHNpbC1jb25maWcldSIsIGFyZ3NbMV0pOworCS8qIERv ZXMgb2Zfbm9kZV9wdXQgb24gc2xhdmVfbm9kZSAqLworCWNoY29uZl9ub2RlID0gb2ZfZmluZF9u b2RlX2J5X25hbWUoc2xhdmVfbm9kZSwgcHJvcCk7CisJaWYgKCFjaGNvbmZfbm9kZSkgeworCQlk ZXZfZXJyKHVkLT5kZXYsICJDaGFubmVsIGNvbmZpZ3VyYXRpb24gbm9kZSBpcyBtaXNzaW5nXG4i KTsKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCQl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9 IC0xOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdWMtPnBrdF9tb2RlID0gdWRtYV9zbGF2ZV90 aHJlYWRfaXNfcGFja2V0X21vZGUodWMpOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihj aGNvbmZfbm9kZSwgInRpLHBkbWEtc3RhdGljdHItdHlwZSIsICZ2YWwpKQorCQl1Yy0+c3RhdGlj X3RyX3R5cGUgPSB2YWw7CisKKwlpZiAodWMtPnN0YXRpY190cl90eXBlID09IFBETUFfU1RBVElD X1RSX1hZKSB7CisJCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEgPSB1 ZC0+bWF0Y2hfZGF0YTsKKworCQlpZiAobWF0Y2hfZGF0YS0+aGF2ZV9hY2MzMikKKwkJCXVjLT5l bmFibGVfYWNjMzIgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hjb25mX25vZGUsCisJCQkJCQkJ InRpLHBkbWEtZW5hYmxlLWFjYzMyIik7CisJCWlmIChtYXRjaF9kYXRhLT5oYXZlX2J1cnN0KQor CQkJdWMtPmVuYWJsZV9idXJzdCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjaGNvbmZfbm9kZSwK KwkJCQkJCQkidGkscGRtYS1lbmFibGUtYnVyc3QiKTsKKwl9CisKKwlpZiAoIW9mX3Byb3BlcnR5 X3JlYWRfdTMyKGNoY29uZl9ub2RlLCAidGksY2hhbm5lbC10cGwiLCAmdmFsKSkKKwkJdWMtPmNo YW5uZWxfdHBsID0gdmFsOworCisJdWMtPm5vdGRwa3QgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wo Y2hjb25mX25vZGUsICJ0aSxub3RkcGt0Iik7CisKKwl1Yy0+bmVlZHNfZXBpYiA9IG9mX3Byb3Bl cnR5X3JlYWRfYm9vbChjaGNvbmZfbm9kZSwgInRpLG5lZWRzLWVwaWIiKTsKKwlpZiAoIW9mX3By b3BlcnR5X3JlYWRfdTMyKGNoY29uZl9ub2RlLCAidGkscHNkLXNpemUiLCAmdmFsKSkKKwkJdWMt PnBzZF9zaXplID0gdmFsOworCXVjLT5tZXRhZGF0YV9zaXplID0gKHVjLT5uZWVkc19lcGliID8g Q1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFIDogMCkgKworCQkJICAgIHVjLT5wc2Rfc2l6ZTsK KworCWlmICh1Yy0+cGt0X21vZGUpCisJCXVjLT5oZGVzY19zaXplID0gQUxJR04oc2l6ZW9mKHN0 cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCkgKworCQkJCSB1Yy0+bWV0YWRhdGFfc2l6ZSwgdWQtPmRl c2NfYWxpZ24pOworCisJb2Zfbm9kZV9wdXQoY2hjb25mX25vZGUpOworCisJZGV2X2RiZyh1ZC0+ ZGV2LCAiY2hhbiVkOiBSZW1vdGUgdGhyZWFkOiAweCUwNHggKCVzKVxuIiwgdWMtPmlkLAorCQl1 Yy0+cmVtb3RlX3RocmVhZF9pZCwgdWRtYV9nZXRfZGlyX3RleHQodWMtPmRpcikpOworCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKnVkbWFfb2ZfeGxhdGUoc3Ry dWN0IG9mX3BoYW5kbGVfYXJncyAqZG1hX3NwZWMsCisJCQkJICAgICAgc3RydWN0IG9mX2RtYSAq b2ZkbWEpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IG9mZG1hLT5vZl9kbWFfZGF0YTsKKwlk bWFfY2FwX21hc2tfdCBtYXNrID0gdWQtPmRkZXYuY2FwX21hc2s7CisJc3RydWN0IGRtYV9jaGFu ICpjaGFuOworCisJaWYgKGRtYV9zcGVjLT5hcmdzX2NvdW50ICE9IDMpCisJCXJldHVybiBOVUxM OworCisJY2hhbiA9IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgmbWFzaywgdWRtYV9kbWFfZmlsdGVy X2ZuLAorCQkJCSAgICAgJmRtYV9zcGVjLT5hcmdzWzBdLCBvZmRtYS0+b2Zfbm9kZSk7CisJaWYg KCFjaGFuKSB7CisJCWRldl9lcnIodWQtPmRldiwgImdldCBjaGFubmVsIGZhaWwgaW4gJXMuXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBj aGFuOworfQorCitzdGF0aWMgc3RydWN0IHVkbWFfdHJfdGhyZWFkX3JhbmdlcyBhbTY1NF90cl90 aHJlYWRzW10gPSB7CisJeworCQkvKiBQRE1BMCAtIE1jQVNQcyAqLworCQkuc3RhcnQgPSAweDQ0 MDAsCisJCS5jb3VudCA9IDMsCisJfSwKKwl7CisJCS8qIE1DVV9QRE1BMCAtIEFEQ3MgKi8KKwkJ LnN0YXJ0ID0gMHg3MTAwLAorCQkuY291bnQgPSA0LAorCX0sCisJeyAvKiBTZW50aW5lbCAqLyB9 LAorfTsKKworc3RhdGljIHN0cnVjdCB1ZG1hX3RyX3RocmVhZF9yYW5nZXMgajcyMWVfdHJfdGhy ZWFkc1tdID0geworCXsKKwkJLyogUERNQV9NQ0FTUF9HMCAtIE1jQVNQcyAqLworCQkuc3RhcnQg PSAweDQ0MDAsCisJCS5jb3VudCA9IDMsCisJfSwKKwl7CisJCS8qIFBETUFfTUNBU1BfRzEgLSBN Y0FTUHMgKi8KKwkJLnN0YXJ0ID0gMHg0NTAwLAorCQkuY291bnQgPSA5LAorCX0sCisJeworCQkv KiBNQ1VfUERNQV9BREMgLSBBRENzICovCisJCS5zdGFydCA9IDB4NzQwMCwKKwkJLmNvdW50ID0g NCwKKwl9LAorCXsgLyogU2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9t YXRjaF9kYXRhIGFtNjU0X21haW5fZGF0YSA9IHsKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0g dHJ1ZSwKKwkuaGF2ZV9hY2MzMiA9IGZhbHNlLAorCS5oYXZlX2J1cnN0ID0gZmFsc2UsCisJLnN0 YXRpY3RyX3pfbWFzayA9IEdFTk1BU0soMTEsIDApLAorCS5yY2hhbl9vZXNfb2Zmc2V0ID0gMHgy MDAwLAorCS50cl90aHJlYWRzID0gYW02NTRfdHJfdGhyZWFkcywKKwkudHBsX2xldmVscyA9IDIs CisJLmxldmVsX3N0YXJ0X2lkeCA9IHsKKwkJWzBdID0gOCwgLyogTm9ybWFsIGNoYW5uZWxzICov CisJCVsxXSA9IDAsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0sCit9OworCitz dGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBhbTY1NF9tY3VfZGF0YSA9IHsKKwkuZW5hYmxl X21lbWNweV9zdXBwb3J0ID0gZmFsc2UsIC8qIE1FTV9UT19NRU0gaXMgc2xvdyB2aWEgTUNVIFVE TUEgKi8KKwkuaGF2ZV9hY2MzMiA9IGZhbHNlLAorCS5oYXZlX2J1cnN0ID0gZmFsc2UsCisJLnN0 YXRpY3RyX3pfbWFzayA9IEdFTk1BU0soMTEsIDApLAorCS5yY2hhbl9vZXNfb2Zmc2V0ID0gMHgy MDAwLAorCS50cl90aHJlYWRzID0gYW02NTRfdHJfdGhyZWFkcywKKwkudHBsX2xldmVscyA9IDIs CisJLmxldmVsX3N0YXJ0X2lkeCA9IHsKKwkJWzBdID0gMiwgLyogTm9ybWFsIGNoYW5uZWxzICov CisJCVsxXSA9IDAsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0sCit9OworCitz dGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBqNzIxZV9tYWluX2RhdGEgPSB7CisJLmVuYWJs ZV9tZW1jcHlfc3VwcG9ydCA9IHRydWUsCisJLmhhdmVfYWNjMzIgPSB0cnVlLAorCS5oYXZlX2J1 cnN0ID0gdHJ1ZSwKKwkuc3RhdGljdHJfel9tYXNrID0gR0VOTUFTSygyMywgMCksCisJLnJjaGFu X29lc19vZmZzZXQgPSAweDQwMCwKKwkudHJfdGhyZWFkcyA9IGo3MjFlX3RyX3RocmVhZHMsCisJ LnRwbF9sZXZlbHMgPSAzLAorCS5sZXZlbF9zdGFydF9pZHggPSB7CisJCVswXSA9IDE2LCAvKiBO b3JtYWwgY2hhbm5lbHMgKi8KKwkJWzFdID0gNCwgLyogSGlnaCBUaHJvdWdocHV0IGNoYW5uZWxz ICovCisJCVsyXSA9IDAsIC8qIFVsdHJhIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0s Cit9OworCitzdGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBqNzIxZV9tY3VfZGF0YSA9IHsK KwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gZmFsc2UsIC8qIE1FTV9UT19NRU0gaXMgc2xvdyB2 aWEgTUNVIFVETUEgKi8KKwkuaGF2ZV9hY2MzMiA9IHRydWUsCisJLmhhdmVfYnVyc3QgPSB0cnVl LAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5NQVNLKDIzLCAwKSwKKwkucmNoYW5fb2VzX29mZnNl dCA9IDB4NDAwLAorCS50cl90aHJlYWRzID0gajcyMWVfdHJfdGhyZWFkcywKKwkudHBsX2xldmVs cyA9IDIsCisJLmxldmVsX3N0YXJ0X2lkeCA9IHsKKwkJWzBdID0gMiwgLyogTm9ybWFsIGNoYW5u ZWxzICovCisJCVsxXSA9IDAsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0sCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1ZG1hX29mX21hdGNoW10gPSB7 CisJeworCQkuY29tcGF0aWJsZSA9ICJ0aSxhbTY1NC1uYXZzcy1tYWluLXVkbWFwIiwKKwkJLmRh dGEgPSAmYW02NTRfbWFpbl9kYXRhLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJ0aSxhbTY1 NC1uYXZzcy1tY3UtdWRtYXAiLAorCQkuZGF0YSA9ICZhbTY1NF9tY3VfZGF0YSwKKwl9LCB7CisJ CS5jb21wYXRpYmxlID0gInRpLGo3MjFlLW5hdnNzLW1haW4tdWRtYXAiLAorCQkuZGF0YSA9ICZq NzIxZV9tYWluX2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJ0aSxqNzIxZS1uYXZzcy1t Y3UtdWRtYXAiLAorCQkuZGF0YSA9ICZqNzIxZV9tY3VfZGF0YSwKKwl9LAorCXsgLyogU2VudGlu ZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1ZG1hX29mX21hdGNoKTsKKwor c3RhdGljIGludCB1ZG1hX2dldF9tbXJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0 cnVjdCB1ZG1hX2RldiAqdWQpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTU1SX0xBU1Q7IGkrKykgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkJICAgbW1yX25hbWVz W2ldKTsKKwkJdWQtPm1tcnNbaV0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKKwkJaWYgKElTX0VSUih1ZC0+bW1yc1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUih1ZC0+ bW1yc1tpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9zZXR1cF9y ZXNvdXJjZXMoc3RydWN0IHVkbWFfZGV2ICp1ZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1 ZC0+ZGV2OworCWludCBjaF9jb3VudCwgcmV0LCBpLCBqOworCXUzMiBjYXAyLCBjYXAzOworCXN0 cnVjdCB0aV9zY2lfcmVzb3VyY2VfZGVzYyAqcm1fZGVzYzsKKwlzdHJ1Y3QgdGlfc2NpX3Jlc291 cmNlICpybV9yZXMsIGlycV9yZXM7CisJc3RydWN0IHVkbWFfdGlzY2lfcm0gKnRpc2NpX3JtID0g JnVkLT50aXNjaV9ybTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJhbmdlX25hbWVzW10g PSB7ICJ0aSxzY2ktcm0tcmFuZ2UtdGNoYW4iLAorCQkJCQkJICAgICJ0aSxzY2ktcm0tcmFuZ2Ut cmNoYW4iLAorCQkJCQkJICAgICJ0aSxzY2ktcm0tcmFuZ2UtcmZsb3ciIH07CisKKwljYXAyID0g dWRtYV9yZWFkKHVkLT5tbXJzW01NUl9HQ0ZHXSwgMHgyOCk7CisJY2FwMyA9IHVkbWFfcmVhZCh1 ZC0+bW1yc1tNTVJfR0NGR10sIDB4MmMpOworCisJdWQtPnJmbG93X2NudCA9IGNhcDMgJiAweDNm ZmY7CisJdWQtPnRjaGFuX2NudCA9IGNhcDIgJiAweDFmZjsKKwl1ZC0+ZWNoYW5fY250ID0gKGNh cDIgPj4gOSkgJiAweDFmZjsKKwl1ZC0+cmNoYW5fY250ID0gKGNhcDIgPj4gMTgpICYgMHgxZmY7 CisJY2hfY291bnQgID0gdWQtPnRjaGFuX2NudCArIHVkLT5yY2hhbl9jbnQ7CisKKwl1ZC0+dGNo YW5fbWFwID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgQklUU19UT19MT05HUyh1ZC0+dGNoYW5f Y250KSwKKwkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwl1ZC0+ dGNoYW5zID0gZGV2bV9rY2FsbG9jKGRldiwgdWQtPnRjaGFuX2NudCwgc2l6ZW9mKCp1ZC0+dGNo YW5zKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCXVkLT5yY2hhbl9tYXAgPSBkZXZtX2ttYWxsb2Nf YXJyYXkoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yY2hhbl9jbnQpLAorCQkJCQkgICBzaXplb2Yo dW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCXVkLT5yY2hhbnMgPSBkZXZtX2tjYWxsb2Mo ZGV2LCB1ZC0+cmNoYW5fY250LCBzaXplb2YoKnVkLT5yY2hhbnMpLAorCQkJCSAgR0ZQX0tFUk5F TCk7CisJdWQtPnJmbG93X2dwX21hcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIEJJVFNfVE9f TE9OR1ModWQtPnJmbG93X2NudCksCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwK KwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJdWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQgPSBk ZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkJICBCSVRTX1RPX0xPTkdTKHVkLT5yZmxvd19jbnQpLAor CQkJCQkJICBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCQkgIEdGUF9LRVJORUwpOworCXVk LT5yZmxvd19pbl91c2UgPSBkZXZtX2tjYWxsb2MoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yZmxv d19jbnQpLAorCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCUdGUF9LRVJORUwpOwor CXVkLT5yZmxvd3MgPSBkZXZtX2tjYWxsb2MoZGV2LCB1ZC0+cmZsb3dfY250LCBzaXplb2YoKnVk LT5yZmxvd3MpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXVkLT50Y2hhbl9tYXAgfHwg IXVkLT5yY2hhbl9tYXAgfHwgIXVkLT5yZmxvd19ncF9tYXAgfHwKKwkgICAgIXVkLT5yZmxvd19n cF9tYXBfYWxsb2NhdGVkIHx8ICF1ZC0+dGNoYW5zIHx8ICF1ZC0+cmNoYW5zIHx8CisJICAgICF1 ZC0+cmZsb3dzIHx8ICF1ZC0+cmZsb3dfaW5fdXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8q CisJICogUlggZmxvd3Mgd2l0aCB0aGUgc2FtZSBJZHMgYXMgUlggY2hhbm5lbHMgYXJlIHJlc2Vy dmVkIHRvIGJlIHVzZWQKKwkgKiBhcyBkZWZhdWx0IGZsb3dzIGlmIHJlbW90ZSBIVyBjYW4ndCBn ZW5lcmF0ZSBmbG93X2lkcy4gVGhvc2UKKwkgKiBSWCBmbG93cyBjYW4gYmUgcmVxdWVzdGVkIG9u bHkgZXhwbGljaXRseSBieSBpZC4KKwkgKi8KKwliaXRtYXBfc2V0KHVkLT5yZmxvd19ncF9tYXBf YWxsb2NhdGVkLCAwLCB1ZC0+cmNoYW5fY250KTsKKworCS8qIGJ5IGRlZmF1bHQgbm8gR1AgcmZs b3dzIGFyZSBhc3NpZ25lZCB0byBMaW51eCAqLworCWJpdG1hcF9zZXQodWQtPnJmbG93X2dwX21h cCwgMCwgdWQtPnJmbG93X2NudCk7CisKKwkvKiBHZXQgcmVzb3VyY2UgcmFuZ2VzIGZyb20gdGlz Y2kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUk1fUkFOR0VfTEFTVDsgaSsrKQorCQl0aXNjaV9ybS0+ cm1fcmFuZ2VzW2ldID0KKwkJCWRldm1fdGlfc2NpX2dldF9vZl9yZXNvdXJjZSh0aXNjaV9ybS0+ dGlzY2ksIGRldiwKKwkJCQkJCSAgICB0aXNjaV9ybS0+dGlzY2lfZGV2X2lkLAorCQkJCQkJICAg IChjaGFyICopcmFuZ2VfbmFtZXNbaV0pOworCisJLyogdGNoYW4gcmFuZ2VzICovCisJcm1fcmVz ID0gdGlzY2lfcm0tPnJtX3Jhbmdlc1tSTV9SQU5HRV9UQ0hBTl07CisJaWYgKElTX0VSUihybV9y ZXMpKSB7CisJCWJpdG1hcF96ZXJvKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCX0g ZWxzZSB7CisJCWJpdG1hcF9maWxsKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCQlm b3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVz LT5kZXNjW2ldOworCQkJYml0bWFwX2NsZWFyKHVkLT50Y2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0 LAorCQkJCSAgICAgcm1fZGVzYy0+bnVtKTsKKwkJCWRldl9kYmcoZGV2LCAidGktc2NpLXJlczog dGNoYW46ICVkOiVkXG4iLAorCQkJCXJtX2Rlc2MtPnN0YXJ0LCBybV9kZXNjLT5udW0pOworCQl9 CisJfQorCWlycV9yZXMuc2V0cyA9IHJtX3Jlcy0+c2V0czsKKworCS8qIHJjaGFuIGFuZCBtYXRj aGluZyBkZWZhdWx0IGZsb3cgcmFuZ2VzICovCisJcm1fcmVzID0gdGlzY2lfcm0tPnJtX3Jhbmdl c1tSTV9SQU5HRV9SQ0hBTl07CisJaWYgKElTX0VSUihybV9yZXMpKSB7CisJCWJpdG1hcF96ZXJv KHVkLT5yY2hhbl9tYXAsIHVkLT5yY2hhbl9jbnQpOworCX0gZWxzZSB7CisJCWJpdG1hcF9maWxs KHVkLT5yY2hhbl9tYXAsIHVkLT5yY2hhbl9jbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgcm1fcmVz LT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0bWFw X2NsZWFyKHVkLT5yY2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVzYy0+ bnVtKTsKKwkJCWRldl9kYmcoZGV2LCAidGktc2NpLXJlczogcmNoYW46ICVkOiVkXG4iLAorCQkJ CXJtX2Rlc2MtPnN0YXJ0LCBybV9kZXNjLT5udW0pOworCQl9CisJfQorCisJaXJxX3Jlcy5zZXRz ICs9IHJtX3Jlcy0+c2V0czsKKwlpcnFfcmVzLmRlc2MgPSBrY2FsbG9jKGlycV9yZXMuc2V0cywg c2l6ZW9mKCppcnFfcmVzLmRlc2MpLCBHRlBfS0VSTkVMKTsKKwlybV9yZXMgPSB0aXNjaV9ybS0+ cm1fcmFuZ2VzW1JNX1JBTkdFX1RDSEFOXTsKKwlmb3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRz OyBpKyspIHsKKwkJaXJxX3Jlcy5kZXNjW2ldLnN0YXJ0ID0gcm1fcmVzLT5kZXNjW2ldLnN0YXJ0 OworCQlpcnFfcmVzLmRlc2NbaV0ubnVtID0gcm1fcmVzLT5kZXNjW2ldLm51bTsKKwl9CisJcm1f cmVzID0gdGlzY2lfcm0tPnJtX3Jhbmdlc1tSTV9SQU5HRV9SQ0hBTl07CisJZm9yIChqID0gMDsg aiA8IHJtX3Jlcy0+c2V0czsgaisrLCBpKyspIHsKKwkJaXJxX3Jlcy5kZXNjW2ldLnN0YXJ0ID0g cm1fcmVzLT5kZXNjW2pdLnN0YXJ0ICsgMHgyMDAwOworCQlpcnFfcmVzLmRlc2NbaV0ubnVtID0g cm1fcmVzLT5kZXNjW2pdLm51bTsKKwl9CisJcmV0ID0gdGlfc2NpX2ludGFfbXNpX2RvbWFpbl9h bGxvY19pcnFzKHVkLT5kZXYsICZpcnFfcmVzKTsKKwlrZnJlZShpcnFfcmVzLmRlc2MpOworCWlm IChyZXQpIHsKKwkJZGV2X2Vycih1ZC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1TSSBpbnRl cnJ1cHRzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBHUCByZmxvdyByYW5nZXMgKi8K KwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2VzW1JNX1JBTkdFX1JGTE9XXTsKKwlpZiAoSVNf RVJSKHJtX3JlcykpIHsKKwkJLyogYWxsIGdwIGZsb3dzIGFyZSBhc3NpZ25lZCBleGNsdXNpdmVs eSB0byBMaW51eCAqLworCQliaXRtYXBfY2xlYXIodWQtPnJmbG93X2dwX21hcCwgdWQtPnJjaGFu X2NudCwKKwkJCSAgICAgdWQtPnJmbG93X2NudCAtIHVkLT5yY2hhbl9jbnQpOworCX0gZWxzZSB7 CisJCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQkJcm1fZGVzYyA9ICZy bV9yZXMtPmRlc2NbaV07CisJCQliaXRtYXBfY2xlYXIodWQtPnJmbG93X2dwX21hcCwgcm1fZGVz Yy0+c3RhcnQsCisJCQkJICAgICBybV9kZXNjLT5udW0pOworCQkJZGV2X2RiZyhkZXYsICJ0aS1z Y2ktcmVzOiByZmxvdzogJWQ6JWRcbiIsCisJCQkJcm1fZGVzYy0+c3RhcnQsIHJtX2Rlc2MtPm51 bSk7CisJCX0KKwl9CisKKwljaF9jb3VudCAtPSBiaXRtYXBfd2VpZ2h0KHVkLT50Y2hhbl9tYXAs IHVkLT50Y2hhbl9jbnQpOworCWNoX2NvdW50IC09IGJpdG1hcF93ZWlnaHQodWQtPnJjaGFuX21h cCwgdWQtPnJjaGFuX2NudCk7CisJaWYgKCFjaF9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisK Kwl1ZC0+Y2hhbm5lbHMgPSBkZXZtX2tjYWxsb2MoZGV2LCBjaF9jb3VudCwgc2l6ZW9mKCp1ZC0+ Y2hhbm5lbHMpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXVkLT5jaGFubmVscykKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlkZXZfaW5mbyhkZXYsICJDaGFubmVsczogJWQgKHRjaGFuOiAl dSwgcmNoYW46ICV1LCBncC1yZmxvdzogJXUpXG4iLAorCQkgY2hfY291bnQsCisJCSB1ZC0+dGNo YW5fY250IC0gYml0bWFwX3dlaWdodCh1ZC0+dGNoYW5fbWFwLCB1ZC0+dGNoYW5fY250KSwKKwkJ IHVkLT5yY2hhbl9jbnQgLSBiaXRtYXBfd2VpZ2h0KHVkLT5yY2hhbl9tYXAsIHVkLT5yY2hhbl9j bnQpLAorCQkgdWQtPnJmbG93X2NudCAtIGJpdG1hcF93ZWlnaHQodWQtPnJmbG93X2dwX21hcCwK KwkJCQkJICAgICAgIHVkLT5yZmxvd19jbnQpKTsKKworCXJldHVybiBjaF9jb3VudDsKK30KKwor I2RlZmluZSBUSV9VRE1BQ19CVVNXSURUSFMJKEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRF KSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTKSB8IFwKKwkJCQkgQklU KERNQV9TTEFWRV9CVVNXSURUSF8zX0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNX SURUSF80X0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKSkK Kworc3RhdGljIGludCB1ZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IGRldmljZV9ub2RlICpuYXZzc19ub2RlID0gcGRldi0+ZGV2LnBhcmVudC0+b2Zf bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB1ZG1hX2Rl diAqdWQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJaW50IGksIHJldDsK KwlpbnQgY2hfY291bnQ7CisKKwlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGRl diwgRE1BX0JJVF9NQVNLKDQ4KSk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gc2V0IGRtYSBtYXNrIHN0dWZmXG4iKTsKKworCXVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCp1ZCksIEdGUF9LRVJORUwpOworCWlmICghdWQpCisJCXJldHVybiAtRU5PTUVNOworCisJ cmV0ID0gdWRtYV9nZXRfbW1ycyhwZGV2LCB1ZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXVkLT50aXNjaV9ybS50aXNjaSA9IHRpX3NjaV9nZXRfYnlfcGhhbmRsZShkZXYtPm9mX25v ZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHVkLT50aXNjaV9ybS50aXNjaSkpCisJCXJldHVy biBQVFJfRVJSKHVkLT50aXNjaV9ybS50aXNjaSk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihkZXYtPm9mX25vZGUsICJ0aSxzY2ktZGV2LWlkIiwKKwkJCQkgICAmdWQtPnRpc2NpX3Jt LnRpc2NpX2Rldl9pZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInRpLHNjaS1kZXYt aWQgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwZGV2LT5p ZCA9IHVkLT50aXNjaV9ybS50aXNjaV9kZXZfaWQ7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihuYXZzc19ub2RlLCAidGksc2NpLWRldi1pZCIsCisJCQkJICAgJnVkLT50aXNjaV9ybS50 aXNjaV9uYXZzc19kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJOQVZTUyB0 aSxzY2ktZGV2LWlkIHJlYWQgZmFpbHVyZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwl1ZC0+dGlzY2lfcm0udGlzY2lfdWRtYXBfb3BzID0gJnVkLT50aXNjaV9ybS50aXNjaS0+ b3BzLnJtX3VkbWFwX29wczsKKwl1ZC0+dGlzY2lfcm0udGlzY2lfcHNpbF9vcHMgPSAmdWQtPnRp c2NpX3JtLnRpc2NpLT5vcHMucm1fcHNpbF9vcHM7CisKKwl1ZC0+cmluZ2FjYyA9IG9mX2szX3Jp bmdhY2NfZ2V0X2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAidGkscmluZ2FjYyIpOworCWlmIChJ U19FUlIodWQtPnJpbmdhY2MpKQorCQlyZXR1cm4gUFRSX0VSUih1ZC0+cmluZ2FjYyk7CisKKwlk ZXYtPm1zaV9kb21haW4gPSBvZl9tc2lfZ2V0X2RvbWFpbihkZXYsIGRldi0+b2Zfbm9kZSwKKwkJ CQkJICAgIERPTUFJTl9CVVNfVElfU0NJX0lOVEFfTVNJKTsKKwlpZiAoIWRldi0+bXNpX2RvbWFp bikgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTVNJIGRvbWFpblxuIik7CisJCXJl dHVybiAtRVBST0JFX0RFRkVSOworCX0KKworCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZSh1ZG1hX29m X21hdGNoLCBkZXYtPm9mX25vZGUpOworCWlmICghbWF0Y2gpIHsKKwkJZGV2X2VycihkZXYsICJO byBjb21wYXRpYmxlIG1hdGNoIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXVk LT5tYXRjaF9kYXRhID0gbWF0Y2gtPmRhdGE7CisKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIHVk LT5kZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCB1ZC0+ZGRldi5jYXBf bWFzayk7CisKKwl1ZC0+ZGRldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPSB1ZG1hX2Fs bG9jX2NoYW5fcmVzb3VyY2VzOworCXVkLT5kZGV2LmRldmljZV9jb25maWcgPSB1ZG1hX3NsYXZl X2NvbmZpZzsKKwl1ZC0+ZGRldi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHVkbWFfcHJlcF9zbGF2 ZV9zZzsKKwl1ZC0+ZGRldi5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gdWRtYV9wcmVwX2RtYV9j eWNsaWM7CisJdWQtPmRkZXYuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSB1ZG1hX2lzc3VlX3BlbmRp bmc7CisJdWQtPmRkZXYuZGV2aWNlX3R4X3N0YXR1cyA9IHVkbWFfdHhfc3RhdHVzOworCXVkLT5k ZGV2LmRldmljZV9wYXVzZSA9IHVkbWFfcGF1c2U7CisJdWQtPmRkZXYuZGV2aWNlX3Jlc3VtZSA9 IHVkbWFfcmVzdW1lOworCXVkLT5kZGV2LmRldmljZV90ZXJtaW5hdGVfYWxsID0gdWRtYV90ZXJt aW5hdGVfYWxsOworCXVkLT5kZGV2LmRldmljZV9zeW5jaHJvbml6ZSA9IHVkbWFfc3luY2hyb25p emU7CisKKwl1ZC0+ZGRldi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IHVkbWFfZnJlZV9j aGFuX3Jlc291cmNlczsKKwl1ZC0+ZGRldi5zcmNfYWRkcl93aWR0aHMgPSBUSV9VRE1BQ19CVVNX SURUSFM7CisJdWQtPmRkZXYuZHN0X2FkZHJfd2lkdGhzID0gVElfVURNQUNfQlVTV0lEVEhTOwor CXVkLT5kZGV2LmRpcmVjdGlvbnMgPSBCSVQoRE1BX0RFVl9UT19NRU0pIHwgQklUKERNQV9NRU1f VE9fREVWKTsKKwl1ZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JB TlVMQVJJVFlfQlVSU1Q7CisJdWQtPmRkZXYuY29weV9hbGlnbiA9IERNQUVOR0lORV9BTElHTl84 X0JZVEVTOworCXVkLT5kZGV2LmRlc2NfbWV0YWRhdGFfbW9kZXMgPSBERVNDX01FVEFEQVRBX0NM SUVOVCB8CisJCQkJICAgICAgIERFU0NfTUVUQURBVEFfRU5HSU5FOworCWlmICh1ZC0+bWF0Y2hf ZGF0YS0+ZW5hYmxlX21lbWNweV9zdXBwb3J0KSB7CisJCWRtYV9jYXBfc2V0KERNQV9NRU1DUFks IHVkLT5kZGV2LmNhcF9tYXNrKTsKKwkJdWQtPmRkZXYuZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9 IHVkbWFfcHJlcF9kbWFfbWVtY3B5OworCQl1ZC0+ZGRldi5kaXJlY3Rpb25zIHw9IEJJVChETUFf TUVNX1RPX01FTSk7CisJfQorCisJdWQtPmRkZXYuZGV2ID0gZGV2OworCXVkLT5kZXYgPSBkZXY7 CisKKwlJTklUX0xJU1RfSEVBRCgmdWQtPmRkZXYuY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFE KCZ1ZC0+ZGVzY190b19wdXJnZSk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYt Pm9mX25vZGUsICJ0aSxwc2lsLWJhc2UiLAorCQkJCSAgICZ1ZC0+cHNpbF9iYXNlKTsKKwlpZiAo cmV0KSB7CisJCWRldl9pbmZvKGRldiwgIk1pc3NpbmcgdGkscHNpbC1iYXNlIHByb3BlcnR5LCB1 c2luZyAlZC5cbiIsCisJCQkgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljaF9jb3VudCA9 IHVkbWFfc2V0dXBfcmVzb3VyY2VzKHVkKTsKKwlpZiAoY2hfY291bnQgPD0gMCkKKwkJcmV0dXJu IGNoX2NvdW50OworCisJc3Bpbl9sb2NrX2luaXQoJnVkLT5sb2NrKTsKKwlJTklUX1dPUksoJnVk LT5wdXJnZV93b3JrLCB1ZG1hX3B1cmdlX2Rlc2Nfd29yayk7CisKKwl1ZC0+ZGVzY19hbGlnbiA9 IDY0OworCWlmICh1ZC0+ZGVzY19hbGlnbiA8IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpCisJ CXVkLT5kZXNjX2FsaWduID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKTsKKworCWZvciAoaSA9 IDA7IGkgPCB1ZC0+dGNoYW5fY250OyBpKyspIHsKKwkJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFu ID0gJnVkLT50Y2hhbnNbaV07CisKKwkJdGNoYW4tPmlkID0gaTsKKwkJdGNoYW4tPnJlZ19ydCA9 IHVkLT5tbXJzW01NUl9UQ0hBTlJUXSArIGkgKiAweDEwMDA7CisJfQorCisJZm9yIChpID0gMDsg aSA8IHVkLT5yY2hhbl9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW4gPSAm dWQtPnJjaGFuc1tpXTsKKworCQlyY2hhbi0+aWQgPSBpOworCQlyY2hhbi0+cmVnX3J0ID0gdWQt Pm1tcnNbTU1SX1JDSEFOUlRdICsgaSAqIDB4MTAwMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg dWQtPnJmbG93X2NudDsgaSsrKSB7CisJCXN0cnVjdCB1ZG1hX3JmbG93ICpyZmxvdyA9ICZ1ZC0+ cmZsb3dzW2ldOworCisJCXJmbG93LT5pZCA9IGk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNo X2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSAmdWQtPmNoYW5uZWxzW2ld OworCisJCXVjLT51ZCA9IHVkOworCQl1Yy0+dmMuZGVzY19mcmVlID0gdWRtYV9kZXNjX2ZyZWU7 CisJCXVjLT5pZCA9IGk7CisJCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJCXVjLT50Y2hh biA9IE5VTEw7CisJCXVjLT5yY2hhbiA9IE5VTEw7CisJCXVjLT5kaXIgPSBETUFfTUVNX1RPX01F TTsKKwkJdWMtPm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsICIlcyBjaGFu JWQiLAorCQkJCQkgIGRldl9uYW1lKGRldiksIGkpOworCisJCXZjaGFuX2luaXQoJnVjLT52Yywg JnVkLT5kZGV2KTsKKwkJLyogVXNlIGN1c3RvbSB2Y2hhbiBjb21wbGV0aW9uIGhhbmRsaW5nICov CisJCXRhc2tsZXRfaW5pdCgmdWMtPnZjLnRhc2ssIHVkbWFfdmNoYW5fY29tcGxldGUsCisJCQkg ICAgICh1bnNpZ25lZCBsb25nKSZ1Yy0+dmMpOworCQlpbml0X2NvbXBsZXRpb24oJnVjLT50ZWFy ZG93bl9jb21wbGV0ZWQpOworCX0KKworCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIo JnVkLT5kZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lz dGVyIHNsYXZlIERNQSBlbmdpbmU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVkKTsKKworCXJldCA9IG9mX2RtYV9jb250cm9s bGVyX3JlZ2lzdGVyKGRldi0+b2Zfbm9kZSwgdWRtYV9vZl94bGF0ZSwgdWQpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgb2ZfZG1hIGNvbnRyb2xsZXJc biIpOworCQlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnVkLT5kZGV2KTsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOworCisJb2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7 CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZ1ZC0+ZGRldik7CisKKwkvKiBNYWtlIHN1 cmUgdGhhdCB3ZSBkaWQgcHJvcGVyIGNsZWFudXAgKi8KKwljYW5jZWxfd29ya19zeW5jKCZ1ZC0+ cHVyZ2Vfd29yayk7CisJdWRtYV9wdXJnZV9kZXNjX3dvcmsoJnVkLT5wdXJnZV93b3JrKTsKKwor CXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZw ZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIHVkbWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInRpLXVkbWEiLAor CQkub2ZfbWF0Y2hfdGFibGUgPSB1ZG1hX29mX21hdGNoLAorCX0sCisJLnByb2JlCQk9IHVkbWFf cHJvYmUsCisJLnJlbW92ZQkJPSB1ZG1hX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9k cml2ZXIodWRtYV9kcml2ZXIpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRpLXVkbWEiKTsK K01PRFVMRV9ERVNDUklQVElPTigiVEkgSzMgRE1BIGRyaXZlciBmb3IgQ1BQSSA1LjAgY29tcGxp YW50IGRldmljZXMiKTsKK01PRFVMRV9BVVRIT1IoIlBldGVyIFVqZmFsdXNpIDxwZXRlci51amZh bHVzaUB0aS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApQZXRlcgoKVGV4 YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lu a2kuClktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6 IEhlbHNpbmtpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=