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 58839C0650F for ; Tue, 30 Jul 2019 09:38:23 +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 2640620665 for ; Tue, 30 Jul 2019 09:38:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JyFX8jwP"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="UBg7Ye/h" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2640620665 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=RjHqaxoy0FF6xPpNkjNZ+/yykif6JlvHSOAbmeF0lQw=; b=JyFX8jwP0ggCyJ GYqoT9mrn6JX1NQHeM9VooJGpoVdshFLq9HqaXALFv/3LC+AuC5VPZEP2IDBV98jiMvv9lrKozoI4 cNEljqbEZoHXDtX0IJqnoQZAPPyq9chQwB1cW5Q5uyVjsNM9yGKVLp1yALDFeepHxi6rrFFaQh0F1 I/8kB89ngz0QIZ9aqxr9nIlQZAZi7/2CRcsLPQPQRhOwLVMulq4ci6xvoSEgmVIBRmFHmxzOEZsMA Iq+huuwgzlx0C3yRPiLWDSzJ/+dwLimqQ2McLQONvpFfSGlvfrKgvl0tQ8aW25PIMwLuRIiqIZik2 6A2QXEOdxUJi3pZ6NsLg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hsOaM-0000cr-Jg; Tue, 30 Jul 2019 09:38:22 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsOXw-0007By-Bh for linux-arm-kernel@lists.infradead.org; Tue, 30 Jul 2019 09:35:54 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id x6U9Zm2O046600; Tue, 30 Jul 2019 04:35:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1564479348; bh=t3xBZ0OvQooh/mVWhn/j2JGH8MwULKCnkcnNoMcdikw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=UBg7Ye/h0CAcDRRP/L0HIZLLjpTT4n3tTPhavS4F4CGFyqpBeKMk//w+k2B62m6sy orsFYDh6jaNL2qK2cbe9c6cN/qR32pS2TQ81YcFeP+oMQFwEStjEpMI3JZqKzvz8If npk/71p3EUHNH4h5WMmRiwylUQnwppRBYsrHMJf0= Received: from DFLE105.ent.ti.com (dfle105.ent.ti.com [10.64.6.26]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x6U9Zm2d059734 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jul 2019 04:35:48 -0500 Received: from DFLE113.ent.ti.com (10.64.6.34) by DFLE105.ent.ti.com (10.64.6.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 30 Jul 2019 04:35:48 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DFLE113.ent.ti.com (10.64.6.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, 30 Jul 2019 04:35:48 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x6U9YkU6027547; Tue, 30 Jul 2019 04:35:44 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v2 09/14] dmaengine: ti: New driver for K3 UDMA - split#2: probe/remove, xlate and filter_fn Date: Tue, 30 Jul 2019 12:34:45 +0300 Message-ID: <20190730093450.12664-10-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190730093450.12664-1-peter.ujfalusi@ti.com> References: <20190730093450.12664-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-20190730_023552_559833_5FABEC12 X-CRM114-Status: GOOD ( 17.48 ) 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 dGVyLnVqZmFsdXNpQHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCA2MDUg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg NjA1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMKaW5kZXggZTZkMmM0YjE3MmU1Li41MmNjYzZkNDZk ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYworKysgYi9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmMKQEAgLTEwMzgsMyArMTAzOCw2MDggQEAgc3RhdGljIGlycXJldHVybl90 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 aGNvbmZfbm9kZSwgInBkbWEsc3RhdGljdHItdHlwZSIsICZ2YWwpKQorCQl1Yy0+c3RhdGljX3Ry X3R5cGUgPSB2YWw7CisKKwlpZiAodWMtPnN0YXRpY190cl90eXBlID09IFBTSUxfU1RBVElDX1RS X1hZKSB7CisJCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEgPSB1ZC0+ bWF0Y2hfZGF0YTsKKworCQlpZiAobWF0Y2hfZGF0YS0+aGF2ZV9hY2MzMikKKwkJCXVjLT5lbmFi bGVfYWNjMzIgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hjb25mX25vZGUsCisJCQkJCQkJInBk bWEsZW5hYmxlLWFjYzMyIik7CisJCWlmIChtYXRjaF9kYXRhLT5oYXZlX2J1cnN0KQorCQkJdWMt PmVuYWJsZV9idXJzdCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjaGNvbmZfbm9kZSwKKwkJCQkJ CQkicGRtYSxlbmFibGUtYnVyc3QiKTsKKwl9CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMy KGNoY29uZl9ub2RlLCAidGksY2hhbm5lbC10cGwiLCAmdmFsKSkKKwkJdWMtPmNoYW5uZWxfdHBs ID0gdmFsOworCisJdWMtPm5lZWRzX2VwaWIgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hjb25m X25vZGUsICJ0aSxuZWVkcy1lcGliIik7CisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGNv bmZfbm9kZSwgInRpLHBzZC1zaXplIiwgJnZhbCkpCisJCXVjLT5wc2Rfc2l6ZSA9IHZhbDsKKwl1 Yy0+bWV0YWRhdGFfc2l6ZSA9ICh1Yy0+bmVlZHNfZXBpYiA/IENQUEk1X0lORk8wX0hERVNDX0VQ SUJfU0laRSA6IDApICsKKwkJCSAgICB1Yy0+cHNkX3NpemU7CisKKwlpZiAodWMtPnBrdF9tb2Rl KQorCQl1Yy0+aGRlc2Nfc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgY3BwaTVfaG9zdF9kZXNj X3QpICsKKwkJCQkgdWMtPm1ldGFkYXRhX3NpemUsIHVkLT5kZXNjX2FsaWduKTsKKworCW9mX25v ZGVfcHV0KGNoY29uZl9ub2RlKTsKKworCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDogUmVtb3Rl IHRocmVhZDogMHglMDR4ICglcylcbiIsIHVjLT5pZCwKKwkJdWMtPnJlbW90ZV90aHJlYWRfaWQs IHVkbWFfZ2V0X2Rpcl90ZXh0KHVjLT5kaXIpKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgc3RydWN0IGRtYV9jaGFuICp1ZG1hX29mX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mg KmRtYV9zcGVjLAorCQkJCSAgICAgIHN0cnVjdCBvZl9kbWEgKm9mZG1hKQoreworCXN0cnVjdCB1 ZG1hX2RldiAqdWQgPSBvZmRtYS0+b2ZfZG1hX2RhdGE7CisJZG1hX2NhcF9tYXNrX3QgbWFzayA9 IHVkLT5kZGV2LmNhcF9tYXNrOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKworCWlmIChkbWFf c3BlYy0+YXJnc19jb3VudCAhPSAzKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4gPSBfX2RtYV9y ZXF1ZXN0X2NoYW5uZWwoJm1hc2ssIHVkbWFfZG1hX2ZpbHRlcl9mbiwKKwkJCQkgICAgICZkbWFf c3BlYy0+YXJnc1swXSwgb2ZkbWEtPm9mX25vZGUpOworCWlmICghY2hhbikgeworCQlkZXZfZXJy KHVkLT5kZXYsICJnZXQgY2hhbm5lbCBmYWlsIGluICVzLlxuIiwgX19mdW5jX18pOworCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gY2hhbjsKK30KKworc3RhdGljIHN0 cnVjdCB1ZG1hX3RyX3RocmVhZF9yYW5nZXMgYW02NTRfdHJfdGhyZWFkc1tdID0geworCXsKKwkJ LyogUERNQTAgLSBNY0FTUHMgKi8KKwkJLnN0YXJ0ID0gMHg0NDAwLAorCQkuY291bnQgPSAzLAor CX0sCisJeworCQkvKiBNQ1VfUERNQTAgLSBBRENzICovCisJCS5zdGFydCA9IDB4NzEwMCwKKwkJ LmNvdW50ID0gNCwKKwl9LAorCXsgLyogU2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgdWRtYV90cl90aHJlYWRfcmFuZ2VzIGo3MjFlX3RyX3RocmVhZHNbXSA9IHsKKwl7CisJCS8q IFBETUFfTUNBU1BfRzAgLSBNY0FTUHMgKi8KKwkJLnN0YXJ0ID0gMHg0NDAwLAorCQkuY291bnQg PSAzLAorCX0sCisJeworCQkvKiBQRE1BX01DQVNQX0cxIC0gTWNBU1BzICovCisJCS5zdGFydCA9 IDB4NDUwMCwKKwkJLmNvdW50ID0gOSwKKwl9LAorCXsKKwkJLyogTUNVX1BETUFfQURDIC0gQURD cyAqLworCQkuc3RhcnQgPSAweDc0MDAsCisJCS5jb3VudCA9IDQsCisJfSwKKwl7IC8qIFNlbnRp bmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBhbTY1NF9tYWlu X2RhdGEgPSB7CisJLmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IHRydWUsCisJLmhhdmVfYWNjMzIg PSBmYWxzZSwKKwkuaGF2ZV9idXJzdCA9IGZhbHNlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5N QVNLKDExLCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4MjAwMCwKKwkudHJfdGhyZWFkcyA9 IGFtNjU0X3RyX3RocmVhZHMsCisJLnRwbF9sZXZlbHMgPSAyLAorCS5sZXZlbF9zdGFydF9pZHgg PSB7CisJCVswXSA9IDgsIC8qIE5vcm1hbCBjaGFubmVscyAqLworCQlbMV0gPSAwLCAvKiBIaWdo IFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB1ZG1hX21h dGNoX2RhdGEgYW02NTRfbWN1X2RhdGEgPSB7CisJLmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IGZh bHNlLCAvKiBNRU1fVE9fTUVNIGlzIHNsb3cgdmlhIE1DVSBVRE1BICovCisJLmhhdmVfYWNjMzIg PSBmYWxzZSwKKwkuaGF2ZV9idXJzdCA9IGZhbHNlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5N QVNLKDExLCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4MjAwMCwKKwkudHJfdGhyZWFkcyA9 IGFtNjU0X3RyX3RocmVhZHMsCisJLnRwbF9sZXZlbHMgPSAyLAorCS5sZXZlbF9zdGFydF9pZHgg PSB7CisJCVswXSA9IDIsIC8qIE5vcm1hbCBjaGFubmVscyAqLworCQlbMV0gPSAwLCAvKiBIaWdo IFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB1ZG1hX21h dGNoX2RhdGEgajcyMWVfbWFpbl9kYXRhID0geworCS5lbmFibGVfbWVtY3B5X3N1cHBvcnQgPSB0 cnVlLAorCS5oYXZlX2FjYzMyID0gdHJ1ZSwKKwkuaGF2ZV9idXJzdCA9IHRydWUsCisJLnN0YXRp Y3RyX3pfbWFzayA9IEdFTk1BU0soMjMsIDApLAorCS5yY2hhbl9vZXNfb2Zmc2V0ID0gMHg0MDAs CisJLnRyX3RocmVhZHMgPSBqNzIxZV90cl90aHJlYWRzLAorCS50cGxfbGV2ZWxzID0gMywKKwku bGV2ZWxfc3RhcnRfaWR4ID0geworCQlbMF0gPSAxNiwgLyogTm9ybWFsIGNoYW5uZWxzICovCisJ CVsxXSA9IDQsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCQlbMl0gPSAwLCAvKiBV bHRyYSBIaWdoIFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVj dCB1ZG1hX21hdGNoX2RhdGEgajcyMWVfbWN1X2RhdGEgPSB7CisJLmVuYWJsZV9tZW1jcHlfc3Vw cG9ydCA9IGZhbHNlLCAvKiBNRU1fVE9fTUVNIGlzIHNsb3cgdmlhIE1DVSBVRE1BICovCisJLmhh dmVfYWNjMzIgPSB0cnVlLAorCS5oYXZlX2J1cnN0ID0gdHJ1ZSwKKwkuc3RhdGljdHJfel9tYXNr ID0gR0VOTUFTSygyMywgMCksCisJLnJjaGFuX29lc19vZmZzZXQgPSAweDQwMCwKKwkudHJfdGhy ZWFkcyA9IGo3MjFlX3RyX3RocmVhZHMsCisJLnRwbF9sZXZlbHMgPSAyLAorCS5sZXZlbF9zdGFy dF9pZHggPSB7CisJCVswXSA9IDIsIC8qIE5vcm1hbCBjaGFubmVscyAqLworCQlbMV0gPSAwLCAv KiBIaWdoIFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgdWRtYV9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUg PSAidGksYW02NTQtbmF2c3MtbWFpbi11ZG1hcCIsCisJCS5kYXRhID0gJmFtNjU0X21haW5fZGF0 YSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3MtbWN1LXVkbWFwIiwK KwkJLmRhdGEgPSAmYW02NTRfbWN1X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJ0aSxq NzIxZS1uYXZzcy1tYWluLXVkbWFwIiwKKwkJLmRhdGEgPSAmajcyMWVfbWFpbl9kYXRhLAorCX0s IHsKKwkJLmNvbXBhdGlibGUgPSAidGksajcyMWUtbmF2c3MtbWN1LXVkbWFwIiwKKwkJLmRhdGEg PSAmajcyMWVfbWN1X2RhdGEsCisJfSwKKwl7IC8qIFNlbnRpbmVsICovIH0sCit9OworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgdWRtYV9vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgdWRtYV9nZXRf bW1ycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgdWRtYV9kZXYgKnVkKQor eworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1N Ul9MQVNUOyBpKyspIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2 LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJCSAgIG1tcl9uYW1lc1tpXSk7CisJCXVkLT5tbXJzW2ld ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJCWlmIChJU19FUlIo dWQtPm1tcnNbaV0pKQorCQkJcmV0dXJuIFBUUl9FUlIodWQtPm1tcnNbaV0pOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHVkbWFfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCB1ZG1h X2RldiAqdWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdWQtPmRldjsKKwlpbnQgY2hfY291 bnQsIHJldCwgaSwgajsKKwl1MzIgY2FwMiwgY2FwMzsKKwlzdHJ1Y3QgdGlfc2NpX3Jlc291cmNl X2Rlc2MgKnJtX2Rlc2M7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZSAqcm1fcmVzLCBpcnFfcmVz OworCXN0cnVjdCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisJc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCByYW5nZV9uYW1lc1tdID0geyAidGksc2NpLXJtLXJhbmdl LXRjaGFuIiwKKwkJCQkJCSAgICAidGksc2NpLXJtLXJhbmdlLXJjaGFuIiwKKwkJCQkJCSAgICAi dGksc2NpLXJtLXJhbmdlLXJmbG93IiB9OworCisJY2FwMiA9IHVkbWFfcmVhZCh1ZC0+bW1yc1tN TVJfR0NGR10sIDB4MjgpOworCWNhcDMgPSB1ZG1hX3JlYWQodWQtPm1tcnNbTU1SX0dDRkddLCAw eDJjKTsKKworCXVkLT5yZmxvd19jbnQgPSBjYXAzICYgMHgzZmZmOworCXVkLT50Y2hhbl9jbnQg PSBjYXAyICYgMHgxZmY7CisJdWQtPmVjaGFuX2NudCA9IChjYXAyID4+IDkpICYgMHgxZmY7CisJ dWQtPnJjaGFuX2NudCA9IChjYXAyID4+IDE4KSAmIDB4MWZmOworCWNoX2NvdW50ICA9IHVkLT50 Y2hhbl9jbnQgKyB1ZC0+cmNoYW5fY250OworCisJdWQtPnRjaGFuX21hcCA9IGRldm1fa21hbGxv Y19hcnJheShkZXYsIEJJVFNfVE9fTE9OR1ModWQtPnRjaGFuX2NudCksCisJCQkJCSAgIHNpemVv Zih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisJdWQtPnRjaGFucyA9IGRldm1fa2NhbGxv YyhkZXYsIHVkLT50Y2hhbl9jbnQsIHNpemVvZigqdWQtPnRjaGFucyksCisJCQkJICBHRlBfS0VS TkVMKTsKKwl1ZC0+cmNoYW5fbWFwID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgQklUU19UT19M T05HUyh1ZC0+cmNoYW5fY250KSwKKwkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBf S0VSTkVMKTsKKwl1ZC0+cmNoYW5zID0gZGV2bV9rY2FsbG9jKGRldiwgdWQtPnJjaGFuX2NudCwg c2l6ZW9mKCp1ZC0+cmNoYW5zKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCXVkLT5yZmxvd19tYXAg PSBkZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yZmxvd19jbnQpLAor CQkJCQkgICBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCXVkLT5yZmxvd19t YXBfcmVzZXJ2ZWQgPSBkZXZtX2tjYWxsb2MoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT5yZmxvd19j bnQpLAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICAgIEdGUF9L RVJORUwpOworCXVkLT5yZmxvd3MgPSBkZXZtX2tjYWxsb2MoZGV2LCB1ZC0+cmZsb3dfY250LCBz aXplb2YoKnVkLT5yZmxvd3MpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXVkLT50Y2hh bl9tYXAgfHwgIXVkLT5yY2hhbl9tYXAgfHwgIXVkLT5yZmxvd19tYXAgfHwKKwkgICAgIXVkLT5y Zmxvd19tYXBfcmVzZXJ2ZWQgfHwgIXVkLT50Y2hhbnMgfHwgIXVkLT5yY2hhbnMgfHwKKwkgICAg IXVkLT5yZmxvd3MpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBSWCBmbG93cyB3aXRo IHRoZSBzYW1lIElkcyBhcyBSWCBjaGFubmVscyBhcmUgcmVzZXJ2ZWQgdG8gYmUgdXNlZAorCSAq IGFzIGRlZmF1bHQgZmxvd3MgaWYgcmVtb3RlIEhXIGNhbid0IGdlbmVyYXRlIGZsb3dfaWRzLiBU aG9zZQorCSAqIFJYIGZsb3dzIGNhbiBiZSByZXF1ZXN0ZWQgb25seSBleHBsaWNpdGx5IGJ5IGlk LgorCSAqLworCWJpdG1hcF9zZXQodWQtPnJmbG93X21hcF9yZXNlcnZlZCwgMCwgdWQtPnJjaGFu X2NudCk7CisKKwkvKiBHZXQgcmVzb3VyY2UgcmFuZ2VzIGZyb20gdGlzY2kgKi8KKwlmb3IgKGkg PSAwOyBpIDwgUk1fUkFOR0VfTEFTVDsgaSsrKQorCQl0aXNjaV9ybS0+cm1fcmFuZ2VzW2ldID0K KwkJCWRldm1fdGlfc2NpX2dldF9vZl9yZXNvdXJjZSh0aXNjaV9ybS0+dGlzY2ksIGRldiwKKwkJ CQkJCSAgICB0aXNjaV9ybS0+dGlzY2lfZGV2X2lkLAorCQkJCQkJICAgIChjaGFyICopcmFuZ2Vf bmFtZXNbaV0pOworCisJLyogdGNoYW4gcmFuZ2VzICovCisJcm1fcmVzID0gdGlzY2lfcm0tPnJt X3Jhbmdlc1tSTV9SQU5HRV9UQ0hBTl07CisJaWYgKElTX0VSUihybV9yZXMpKSB7CisJCWJpdG1h cF96ZXJvKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCX0gZWxzZSB7CisJCWJpdG1h cF9maWxsKHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCQlmb3IgKGkgPSAwOyBpIDwg cm1fcmVzLT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJ Yml0bWFwX2NsZWFyKHVkLT50Y2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1f ZGVzYy0+bnVtKTsKKwkJfQorCX0KKwlpcnFfcmVzLnNldHMgPSBybV9yZXMtPnNldHM7CisKKwkv KiByY2hhbiBhbmQgbWF0Y2hpbmcgZGVmYXVsdCBmbG93IHJhbmdlcyAqLworCXJtX3JlcyA9IHRp c2NpX3JtLT5ybV9yYW5nZXNbUk1fUkFOR0VfUkNIQU5dOworCWlmIChJU19FUlIocm1fcmVzKSkg eworCQliaXRtYXBfemVybyh1ZC0+cmNoYW5fbWFwLCB1ZC0+cmNoYW5fY250KTsKKwkJYml0bWFw X3plcm8odWQtPnJmbG93X21hcCwgdWQtPnJjaGFuX2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFw X2ZpbGwodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFuX2NudCk7CisJCWJpdG1hcF9maWxsKHVkLT5y Zmxvd19tYXAsIHVkLT5yY2hhbl9jbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRz OyBpKyspIHsKKwkJCXJtX2Rlc2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0bWFwX2NsZWFy KHVkLT5yY2hhbl9tYXAsIHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVzYy0+bnVtKTsK KwkJCWJpdG1hcF9jbGVhcih1ZC0+cmZsb3dfbWFwLCBybV9kZXNjLT5zdGFydCwKKwkJCQkgICAg IHJtX2Rlc2MtPm51bSk7CisJCX0KKwl9CisKKwlpcnFfcmVzLnNldHMgKz0gcm1fcmVzLT5zZXRz OworCWlycV9yZXMuZGVzYyA9IGtjYWxsb2MoaXJxX3Jlcy5zZXRzLCBzaXplb2YoKmlycV9yZXMu ZGVzYyksIEdGUF9LRVJORUwpOworCXJtX3JlcyA9IHRpc2NpX3JtLT5ybV9yYW5nZXNbUk1fUkFO R0VfVENIQU5dOworCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQlpcnFf cmVzLmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2NbaV0uc3RhcnQ7CisJCWlycV9yZXMuZGVz Y1tpXS5udW0gPSBybV9yZXMtPmRlc2NbaV0ubnVtOworCX0KKwlybV9yZXMgPSB0aXNjaV9ybS0+ cm1fcmFuZ2VzW1JNX1JBTkdFX1JDSEFOXTsKKwlmb3IgKGogPSAwOyBqIDwgcm1fcmVzLT5zZXRz OyBqKyssIGkrKykgeworCQlpcnFfcmVzLmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2Nbal0u c3RhcnQgKyAweDIwMDA7CisJCWlycV9yZXMuZGVzY1tpXS5udW0gPSBybV9yZXMtPmRlc2Nbal0u bnVtOworCX0KKwlyZXQgPSB0aV9zY2lfaW50YV9tc2lfZG9tYWluX2FsbG9jX2lycXModWQtPmRl diwgJmlycV9yZXMpOworCWtmcmVlKGlycV9yZXMuZGVzYyk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKHVkLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQly ZXR1cm4gcmV0OworCX0KKworCS8qIEdQIHJmbG93IHJhbmdlcyAqLworCXJtX3JlcyA9IHRpc2Np X3JtLT5ybV9yYW5nZXNbUk1fUkFOR0VfUkZMT1ddOworCWlmIChJU19FUlIocm1fcmVzKSkgewor CQliaXRtYXBfY2xlYXIodWQtPnJmbG93X21hcCwgdWQtPnJjaGFuX2NudCwKKwkJCSAgICAgdWQt PnJmbG93X2NudCAtIHVkLT5yY2hhbl9jbnQpOworCX0gZWxzZSB7CisJCWJpdG1hcF9zZXQodWQt PnJmbG93X21hcCwgdWQtPnJjaGFuX2NudCwKKwkJCSAgIHVkLT5yZmxvd19jbnQgLSB1ZC0+cmNo YW5fY250KTsKKwkJZm9yIChpID0gMDsgaSA8IHJtX3Jlcy0+c2V0czsgaSsrKSB7CisJCQlybV9k ZXNjID0gJnJtX3Jlcy0+ZGVzY1tpXTsKKwkJCWJpdG1hcF9jbGVhcih1ZC0+cmZsb3dfbWFwLCBy bV9kZXNjLT5zdGFydCwKKwkJCQkgICAgIHJtX2Rlc2MtPm51bSk7CisJCX0KKwl9CisKKwljaF9j b3VudCAtPSBiaXRtYXBfd2VpZ2h0KHVkLT50Y2hhbl9tYXAsIHVkLT50Y2hhbl9jbnQpOworCWNo X2NvdW50IC09IGJpdG1hcF93ZWlnaHQodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFuX2NudCk7CisJ aWYgKCFjaF9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZC0+Y2hhbm5lbHMgPSBkZXZt X2tjYWxsb2MoZGV2LCBjaF9jb3VudCwgc2l6ZW9mKCp1ZC0+Y2hhbm5lbHMpLAorCQkJCSAgICBH RlBfS0VSTkVMKTsKKwlpZiAoIXVkLT5jaGFubmVscykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlk ZXZfaW5mbyhkZXYsICJDaGFubmVsczogJWQgKHRjaGFuOiAldSwgcmNoYW46ICV1LCByZmxvdzog JXUpXG4iLAorCQkgY2hfY291bnQsCisJCSB1ZC0+dGNoYW5fY250IC0gYml0bWFwX3dlaWdodCh1 ZC0+dGNoYW5fbWFwLCB1ZC0+dGNoYW5fY250KSwKKwkJIHVkLT5yY2hhbl9jbnQgLSBiaXRtYXBf d2VpZ2h0KHVkLT5yY2hhbl9tYXAsIHVkLT5yY2hhbl9jbnQpLAorCQkgdWQtPnJmbG93X2NudCAt IGJpdG1hcF93ZWlnaHQodWQtPnJmbG93X21hcCwgdWQtPnJmbG93X2NudCkpOworCisJcmV0dXJu IGNoX2NvdW50OworfQorCisjZGVmaW5lIFRJX1VETUFDX0JVU1dJRFRIUwkoQklUKERNQV9TTEFW RV9CVVNXSURUSF8xX0JZVEUpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllU RVMpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzNfQllURVMpIHwgXAorCQkJCSBC SVQoRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JV U1dJRFRIXzhfQllURVMpKQorCitzdGF0aWMgaW50IHVkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5hdnNzX25vZGUgPSBwZGV2 LT5kZXYucGFyZW50LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7 CisJc3RydWN0IHVkbWFfZGV2ICp1ZDsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRj aDsKKwlpbnQgaSwgcmV0OworCWludCBjaF9jb3VudDsKKworCXJldCA9IGRtYV9jb2VyY2VfbWFz a19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNDgpKTsKKwlpZiAocmV0KQorCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBzZXQgZG1hIG1hc2sgc3R1ZmZcbiIpOworCisJdWQgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1ZG1hX2dldF9tbXJzKHBkZXYsIHVkKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJdWQtPnRpc2NpX3JtLnRpc2NpID0gdGlfc2NpX2dldF9ieV9w aGFuZGxlKGRldi0+b2Zfbm9kZSwgInRpLHNjaSIpOworCWlmIChJU19FUlIodWQtPnRpc2NpX3Jt LnRpc2NpKSkKKwkJcmV0dXJuIFBUUl9FUlIodWQtPnRpc2NpX3JtLnRpc2NpKTsKKworCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJ CSAgICZ1ZC0+dGlzY2lfcm0udGlzY2lfZGV2X2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZGV2LCAidGksc2NpLWRldi1pZCByZWFkIGZhaWx1cmUgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCXBkZXYtPmlkID0gdWQtPnRpc2NpX3JtLnRpc2NpX2Rldl9pZDsKKworCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5hdnNzX25vZGUsICJ0aSxzY2ktZGV2LWlkIiwKKwkJCQkg ICAmdWQtPnRpc2NpX3JtLnRpc2NpX25hdnNzX2Rldl9pZCk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgIk5BVlNTIHRpLHNjaS1kZXYtaWQgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXVkLT50aXNjaV9ybS50aXNjaV91ZG1hcF9vcHMgPSAmdWQt PnRpc2NpX3JtLnRpc2NpLT5vcHMucm1fdWRtYXBfb3BzOworCXVkLT50aXNjaV9ybS50aXNjaV9w c2lsX29wcyA9ICZ1ZC0+dGlzY2lfcm0udGlzY2ktPm9wcy5ybV9wc2lsX29wczsKKworCXVkLT5y aW5nYWNjID0gb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsICJ0aSxy aW5nYWNjIik7CisJaWYgKElTX0VSUih1ZC0+cmluZ2FjYykpCisJCXJldHVybiBQVFJfRVJSKHVk LT5yaW5nYWNjKTsKKworCWRldi0+bXNpX2RvbWFpbiA9IG9mX21zaV9nZXRfZG9tYWluKGRldiwg ZGV2LT5vZl9ub2RlLAorCQkJCQkgICAgRE9NQUlOX0JVU19USV9TQ0lfSU5UQV9NU0kpOworCWlm ICghZGV2LT5tc2lfZG9tYWluKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBNU0kg ZG9tYWluXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJbWF0Y2ggPSBvZl9t YXRjaF9ub2RlKHVkbWFfb2ZfbWF0Y2gsIGRldi0+b2Zfbm9kZSk7CisJaWYgKCFtYXRjaCkgewor CQlkZXZfZXJyKGRldiwgIk5vIGNvbXBhdGlibGUgbWF0Y2ggZm91bmRcbiIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisJdWQtPm1hdGNoX2RhdGEgPSBtYXRjaC0+ZGF0YTsKKworCWRtYV9jYXBf c2V0KERNQV9TTEFWRSwgdWQtPmRkZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9DWUNM SUMsIHVkLT5kZGV2LmNhcF9tYXNrKTsKKworCXVkLT5kZGV2LmRldmljZV9hbGxvY19jaGFuX3Jl c291cmNlcyA9IHVkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJdWQtPmRkZXYuZGV2aWNlX2Nv bmZpZyA9IHVkbWFfc2xhdmVfY29uZmlnOworCXVkLT5kZGV2LmRldmljZV9wcmVwX3NsYXZlX3Nn ID0gdWRtYV9wcmVwX3NsYXZlX3NnOworCXVkLT5kZGV2LmRldmljZV9wcmVwX2RtYV9jeWNsaWMg PSB1ZG1hX3ByZXBfZG1hX2N5Y2xpYzsKKwl1ZC0+ZGRldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9 IHVkbWFfaXNzdWVfcGVuZGluZzsKKwl1ZC0+ZGRldi5kZXZpY2VfdHhfc3RhdHVzID0gdWRtYV90 eF9zdGF0dXM7CisJdWQtPmRkZXYuZGV2aWNlX3BhdXNlID0gdWRtYV9wYXVzZTsKKwl1ZC0+ZGRl di5kZXZpY2VfcmVzdW1lID0gdWRtYV9yZXN1bWU7CisJdWQtPmRkZXYuZGV2aWNlX3Rlcm1pbmF0 ZV9hbGwgPSB1ZG1hX3Rlcm1pbmF0ZV9hbGw7CisJdWQtPmRkZXYuZGV2aWNlX3N5bmNocm9uaXpl ID0gdWRtYV9zeW5jaHJvbml6ZTsKKworCXVkLT5kZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3Vy Y2VzID0gdWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCXVkLT5kZGV2LnNyY19hZGRyX3dpZHRo cyA9IFRJX1VETUFDX0JVU1dJRFRIUzsKKwl1ZC0+ZGRldi5kc3RfYWRkcl93aWR0aHMgPSBUSV9V RE1BQ19CVVNXSURUSFM7CisJdWQtPmRkZXYuZGlyZWN0aW9ucyA9IEJJVChETUFfREVWX1RPX01F TSkgfCBCSVQoRE1BX01FTV9UT19ERVYpOworCXVkLT5kZGV2LnJlc2lkdWVfZ3JhbnVsYXJpdHkg PSBETUFfUkVTSURVRV9HUkFOVUxBUklUWV9CVVJTVDsKKwl1ZC0+ZGRldi5jb3B5X2FsaWduID0g RE1BRU5HSU5FX0FMSUdOXzhfQllURVM7CisJdWQtPmRkZXYuZGVzY19tZXRhZGF0YV9tb2RlcyA9 IERFU0NfTUVUQURBVEFfQ0xJRU5UIHwKKwkJCQkgICAgICAgREVTQ19NRVRBREFUQV9FTkdJTkU7 CisJaWYgKHVkLT5tYXRjaF9kYXRhLT5lbmFibGVfbWVtY3B5X3N1cHBvcnQpIHsKKwkJZG1hX2Nh cF9zZXQoRE1BX01FTUNQWSwgdWQtPmRkZXYuY2FwX21hc2spOworCQl1ZC0+ZGRldi5kZXZpY2Vf cHJlcF9kbWFfbWVtY3B5ID0gdWRtYV9wcmVwX2RtYV9tZW1jcHk7CisJCXVkLT5kZGV2LmRpcmVj dGlvbnMgfD0gQklUKERNQV9NRU1fVE9fTUVNKTsKKwl9CisKKwl1ZC0+ZGRldi5kZXYgPSBkZXY7 CisJdWQtPmRldiA9IGRldjsKKworCUlOSVRfTElTVF9IRUFEKCZ1ZC0+ZGRldi5jaGFubmVscyk7 CisJSU5JVF9MSVNUX0hFQUQoJnVkLT5kZXNjX3RvX3B1cmdlKTsKKworCXJldCA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInRpLHBzaWwtYmFzZSIsCisJCQkJICAgJnVkLT5w c2lsX2Jhc2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2luZm8oZGV2LCAiTWlzc2luZyB0aSxwc2ls LWJhc2UgcHJvcGVydHksIHVzaW5nICVkLlxuIiwKKwkJCSByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWNoX2NvdW50ID0gdWRtYV9zZXR1cF9yZXNvdXJjZXModWQpOworCWlmIChjaF9jb3Vu dCA8PSAwKQorCQlyZXR1cm4gY2hfY291bnQ7CisKKwlzcGluX2xvY2tfaW5pdCgmdWQtPmxvY2sp OworCUlOSVRfV09SSygmdWQtPnB1cmdlX3dvcmssIHVkbWFfcHVyZ2VfZGVzY193b3JrKTsKKwor CXVkLT5kZXNjX2FsaWduID0gNjQ7CisJaWYgKHVkLT5kZXNjX2FsaWduIDwgZG1hX2dldF9jYWNo ZV9hbGlnbm1lbnQoKSkKKwkJdWQtPmRlc2NfYWxpZ24gPSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVu dCgpOworCisJZm9yIChpID0gMDsgaSA8IHVkLT50Y2hhbl9jbnQ7IGkrKykgeworCQlzdHJ1Y3Qg dWRtYV90Y2hhbiAqdGNoYW4gPSAmdWQtPnRjaGFuc1tpXTsKKworCQl0Y2hhbi0+aWQgPSBpOwor CQl0Y2hhbi0+cmVnX3J0ID0gdWQtPm1tcnNbTU1SX1RDSEFOUlRdICsgaSAqIDB4MTAwMDsKKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgdWQtPnJjaGFuX2NudDsgaSsrKSB7CisJCXN0cnVjdCB1ZG1h X3JjaGFuICpyY2hhbiA9ICZ1ZC0+cmNoYW5zW2ldOworCisJCXJjaGFuLT5pZCA9IGk7CisJCXJj aGFuLT5yZWdfcnQgPSB1ZC0+bW1yc1tNTVJfUkNIQU5SVF0gKyBpICogMHgxMDAwOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCB1ZC0+cmZsb3dfY250OyBpKyspIHsKKwkJc3RydWN0IHVkbWFfcmZs b3cgKnJmbG93ID0gJnVkLT5yZmxvd3NbaV07CisKKwkJcmZsb3ctPmlkID0gaTsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgY2hfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9 ICZ1ZC0+Y2hhbm5lbHNbaV07CisKKwkJdWMtPnVkID0gdWQ7CisJCXVjLT52Yy5kZXNjX2ZyZWUg PSB1ZG1hX2Rlc2NfZnJlZTsKKwkJdWMtPmlkID0gaTsKKwkJdWMtPnJlbW90ZV90aHJlYWRfaWQg PSAtMTsKKwkJdWMtPnRjaGFuID0gTlVMTDsKKwkJdWMtPnJjaGFuID0gTlVMTDsKKwkJdWMtPmRp ciA9IERNQV9NRU1fVE9fTUVNOworCQl1Yy0+bmFtZSA9IGRldm1fa2FzcHJpbnRmKGRldiwgR0ZQ X0tFUk5FTCwgIiVzIGNoYW4lZCIsCisJCQkJCSAgZGV2X25hbWUoZGV2KSwgaSk7CisKKwkJdmNo YW5faW5pdCgmdWMtPnZjLCAmdWQtPmRkZXYpOworCQkvKiBVc2UgY3VzdG9tIHZjaGFuIGNvbXBs ZXRpb24gaGFuZGxpbmcgKi8KKwkJdGFza2xldF9pbml0KCZ1Yy0+dmMudGFzaywgdWRtYV92Y2hh bl9jb21wbGV0ZSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJnVjLT52Yyk7CisJCWluaXRfY29t cGxldGlvbigmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisJfQorCisJcmV0ID0gZG1hX2FzeW5j X2RldmljZV9yZWdpc3RlcigmdWQtPmRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gcmVnaXN0ZXIgc2xhdmUgRE1BIGVuZ2luZTogJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdWQpOworCisJcmV0 ID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LT5vZl9ub2RlLCB1ZG1hX29mX3hsYXRl LCB1ZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBv Zl9kbWEgY29udHJvbGxlclxuIik7CisJCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmdWQt PmRkZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlvZl9kbWFfY29udHJvbGxlcl9mcmVlKHBk ZXYtPmRldi5vZl9ub2RlKTsKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnVkLT5kZGV2 KTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGRpZCBwcm9wZXIgY2xlYW51cCAqLworCWNhbmNl bF93b3JrX3N5bmMoJnVkLT5wdXJnZV93b3JrKTsKKwl1ZG1hX3B1cmdlX2Rlc2Nfd29yaygmdWQt PnB1cmdlX3dvcmspOworCisJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKKwlwbV9y dW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRtYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5h bWUJPSAidGktdWRtYSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHVkbWFfb2ZfbWF0Y2gsCisJfSwK KwkucHJvYmUJCT0gdWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IHVkbWFfcmVtb3ZlLAorfTsKKwor bW9kdWxlX3BsYXRmb3JtX2RyaXZlcih1ZG1hX2RyaXZlcik7CisKK01PRFVMRV9BTElBUygicGxh dGZvcm06dGktdWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBLMyBETUEgZHJpdmVyIGZv ciBDUFBJIDUuMCBjb21wbGlhbnQgZGV2aWNlcyIpOworTU9EVUxFX0FVVEhPUigiUGV0ZXIgVWpm YWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1 IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290 aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==