From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from 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 smtp.lore.kernel.org (Postfix) with ESMTPS id E5D42ECAAD2 for ; Thu, 1 Sep 2022 22:35:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nAzuB0eKNYWe/jRqVKAN5yLKEY694c4dhawXuV0FoFA=; b=Z9yi8JBc4EVDE+ lAta4sKLj6xA2WZGehtg0u3am19FcPRiObfcUvM8ExTULFXo757gLrHdWtbgNu6eSO0BfFoxWN6EO Tpw6Jm4Ah03x+13cTdwruwPBnJxH9c4sYTK/CIhYo7wPPsCdkDF3ih7ckMikR/SFF08+aCSq7VKtq dfhoQEi0PsoPnSC+ulVTh4KqvI+MyaOqPupWF1pdXp6VPCVNAuvgzp7qn3G1vFnOK61rNbgU1xcQE 6a92bBBNNNiyrkBLwbtCaNo8F+DLFdyWpF2asXP37I29CuTGf7VWR4QUZJ5bCemtBDh5Di0UYnBAz 4WAeANmvIVDsPWw1Wplw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTslK-00FObO-Um; Thu, 01 Sep 2022 22:34:15 +0000 Received: from 0001.3ffe.de ([2a01:4f8:c0c:9d57::1] helo=mail.3ffe.de) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oTsWz-00FEj7-40; Thu, 01 Sep 2022 22:19:29 +0000 Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.3ffe.de (Postfix) with ESMTPSA id 52DD6221D; Fri, 2 Sep 2022 00:19:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2022082101; t=1662070755; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dvogu54sPs6QPCKANcY0mgosO6bEnmTG0povuOwZvVw=; b=I6/BcILOAarYS2kGM/wJ7ZDi8f7Rn1Btp5BDUeLxXUpAUN/upY4Eg38eMTk8vaPOugfJ8Y 9TAahXx2ZLuTm1GS+FrRhAcGQA3gYwbdh9mm/a3qZazWx+W9UY0O1WTr1RC6EnR0VM87Zh 4PjtEEISElCEsAXSAcFY+aVK8CPXRUPGjBB0OqDiYHlOTS/EMKnVJ2pU4HGJ28ldmgAjB3 eC0JfaRqnfCe8nACErXZSI22rSVlrVlK98FOecFEF9GNO2s2v9PAkUFtJ9GJpz5p0Axo3a Biay/26ysGzE/38Gbq4+QqtNWH9jyAvYWQeShZTgWrxp27B/SGqVeWDQsT7/UQ== From: Michael Walle To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski , Srinivas Kandagatla , Shawn Guo , Li Yang , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , Frank Rowand Cc: linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ahmad Fatoum , Philipp Zabel , Michael Walle Subject: [RFC PATCH v2 19/20] nvmem: layouts: rewrite the u-boot-env driver as a NVMEM layout Date: Fri, 2 Sep 2022 00:18:56 +0200 Message-Id: <20220901221857.2600340-20-michael@walle.cc> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220901221857.2600340-1-michael@walle.cc> References: <20220901221857.2600340-1-michael@walle.cc> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220901_151925_554434_51ABD613 X-CRM114-Status: GOOD ( 29.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZSB1bmRlcmx5aW5nIGFjY2VzcyBtZXRob2QgbXRkX3Jl YWQoKSBhbmQKZHVwbGljYXRpbmcgYWxsIHRoZSBlcnJvciBoYW5kbGluZywgcmV3cml0ZSB0aGUg ZHJpdmVyIGFzIGEgbnZtZW0KbGF5b3V0IHdoaWNoIGp1c3QgdXNlcyBudm1lbV9kZXZpY2VfcmVh ZCgpIGFuZCB0aHVzIHdvcmtzIHdpdGggYW55Ck5WTUVNIGRldmljZS4KCkJ1dCBiZWNhdXNlIHRo aXMgaXMgbm93IG5vdCBhIGRldmljZSBhbnltb3JlLCB0aGUgY29tcGF0aWJsZSBzdHJpbmcKd2ls bCBoYXZlIHRvIGJlIGNoYW5nZWQgc28gdGhlIGRldmljZSB3aWxsIHN0aWxsIGJlIHByb2JlZDoK ICBjb21wYXRpYmxlID0gInUtYm9vdCxlbnYiOwp0bwogIGNvbXBhdGlibGUgPSAidS1ib290LGVu diIsICJudm1lbS1jZWxscyI7CgoibnZtZW0tY2VsbHMiIHdpbGwgdGVsbCB0aGUgbXRkIGxheWVy IHRvIHJlZ2lzdGVyIGEgbnZtZW1fZGV2aWNlKCkuCiJ1LWJvb3QsZW52IiB3aWxsIHRlbGwgdGhl IE5WTUVNIHRoYXQgaXQgc2hvdWxkIGFwcGx5IHRoZSB1LWJvb3QKZW52aXJvbm1lbnQgbGF5b3V0 IHRvIHRoZSBOVk1FTSBkZXZpY2UuCgpTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIFdhbGxlIDxtaWNo YWVsQHdhbGxlLmNjPgotLS0KY2hhbmdlcyBzaW5jZSB2MToKIC0gbm9uZQoKIGRyaXZlcnMvbnZt ZW0vbGF5b3V0cy9LY29uZmlnICAgICAgfCAgIDggKysKIGRyaXZlcnMvbnZtZW0vbGF5b3V0cy9N YWtlZmlsZSAgICAgfCAgIDEgKwogZHJpdmVycy9udm1lbS9sYXlvdXRzL3UtYm9vdC1lbnYuYyB8 IDE0NCArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL252bWVtL3UtYm9vdC1lbnYuYyAgICAg ICAgIHwgMjE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQs IDE1MyBpbnNlcnRpb25zKCspLCAyMTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9udm1lbS9sYXlvdXRzL3UtYm9vdC1lbnYuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbnZtZW0vdS1ib290LWVudi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lbS9sYXlv dXRzL0tjb25maWcgYi9kcml2ZXJzL252bWVtL2xheW91dHMvS2NvbmZpZwppbmRleCA3NTA4MmY2 YjQ3MWQuLjNkYjBjMTM5YThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lbS9sYXlvdXRzL0tj b25maWcKKysrIGIvZHJpdmVycy9udm1lbS9sYXlvdXRzL0tjb25maWcKQEAgLTExLDQgKzExLDEy IEBAIGNvbmZpZyBOVk1FTV9MQVlPVVRfU0wyOF9WUEQKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4K IAorY29uZmlnIE5WTUVNX0xBWU9VVF9VX0JPT1RfRU5WCisJYm9vbCAiVS1Cb290IGVudmlyb25t ZW50IHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ug d2FudCB0byBzdXBwb3J0IHUtYm9vdCdzIGVudmlyb25tZW50LgorCisJICBJZiB1bnN1cmUsIHNh eSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL2xheW91dHMvTWFrZWZp bGUgYi9kcml2ZXJzL252bWVtL2xheW91dHMvTWFrZWZpbGUKaW5kZXggZmM2MTdiOWU4N2QwLi5k YWU5M2ZmZjJiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZW0vbGF5b3V0cy9NYWtlZmlsZQor KysgYi9kcml2ZXJzL252bWVtL2xheW91dHMvTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiAjCiAK IG9iai0kKENPTkZJR19OVk1FTV9MQVlPVVRfU0wyOF9WUEQpICs9IHNsMjh2cGQubworb2JqLSQo Q09ORklHX05WTUVNX0xBWU9VVF9VX0JPT1RfRU5WKSArPSB1LWJvb3QtZW52Lm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbnZtZW0vbGF5b3V0cy91LWJvb3QtZW52LmMgYi9kcml2ZXJzL252bWVtL2xh eW91dHMvdS1ib290LWVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZjE4NGQxNDI0YjFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9udm1lbS9sYXlvdXRz L3UtYm9vdC1lbnYuYwpAQCAtMCwwICsxLDE0NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBSYWZhxYIgTWnFgmVj a2kgPHJhZmFsQG1pbGVja2kucGw+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Cisj aW5jbHVkZSA8bGludXgvZGV2X3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L252bWVtLWNvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvbnZtZW0t cHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK2VudW0gdV9ib290X2Vudl9m b3JtYXQgeworCVVfQk9PVF9GT1JNQVRfU0lOR0xFLAorCVVfQk9PVF9GT1JNQVRfUkVEVU5EQU5U LAorfTsKKworc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2Vfc2luZ2xlIHsKKwlfX2xlMzIgY3JjMzI7 CisJdTggZGF0YVtdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVk dW5kYW50IHsKKwlfX2xlMzIgY3JjMzI7CisJdTggbWFyazsKKwl1OCBkYXRhW107Cit9IF9fcGFj a2VkOworCitzdGF0aWMgaW50IHVfYm9vdF9lbnZfYWRkX2NlbGxzKHN0cnVjdCBkZXZpY2UgKmRl diwKKwkJCQlzdHJ1Y3QgbnZtZW1fZGV2aWNlICpudm1lbSwgdWludDhfdCAqYnVmLAorCQkJCXNp emVfdCBkYXRhX29mZnNldCwgc2l6ZV90IGRhdGFfbGVuKQoreworCXN0cnVjdCBudm1lbV9jZWxs X2luZm8gaW5mbyA9IHswfTsKKwljaGFyICpkYXRhID0gYnVmICsgZGF0YV9vZmZzZXQ7CisJY2hh ciAqdmFyLCAqdmFsdWUsICplcTsKKwlpbnQgZXJyOworCisJZm9yICh2YXIgPSBkYXRhOworCSAg ICAgdmFyIDwgZGF0YSArIGRhdGFfbGVuICYmICp2YXI7CisJICAgICB2YXIgPSB2YWx1ZSArIHN0 cmxlbih2YWx1ZSkgKyAxKSB7CisJCWVxID0gc3RyY2hyKHZhciwgJz0nKTsKKwkJaWYgKCFlcSkK KwkJCWJyZWFrOworCQkqZXEgPSAnXDAnOworCQl2YWx1ZSA9IGVxICsgMTsKKworCQlpbmZvLm5h bWUgPSB2YXI7CisJCWluZm8ub2Zmc2V0ID0gZGF0YV9vZmZzZXQgKyB2YWx1ZSAtIGRhdGE7CisJ CWluZm8uYnl0ZXMgPSBzdHJsZW4odmFsdWUpOworCisJCWVyciA9IG52bWVtX2FkZF9vbmVfY2Vs bChudm1lbSwgJmluZm8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB1X2Jvb3RfYWRkX2NlbGxzKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IG52bWVtX2RldmljZSAqbnZtZW0sCisJCQkgICAgc3RydWN0IG52bWVtX2xheW91 dCAqbGF5b3V0KQoreworCXNpemVfdCBzaXplID0gbnZtZW1fZGV2aWNlX3NpemUobnZtZW0pOwor CWVudW0gdV9ib290X2Vudl9mb3JtYXQgZm9ybWF0OworCXNpemVfdCBjcmMzMl9kYXRhX29mZnNl dDsKKwlzaXplX3QgY3JjMzJfZGF0YV9sZW47CisJc2l6ZV90IGNyYzMyX29mZnNldDsKKwlzaXpl X3QgZGF0YV9vZmZzZXQ7CisJc2l6ZV90IGRhdGFfbGVuOworCXUzMiBjcmMzMjsKKwl1MzIgY2Fs YzsKKwl1OCAqYnVmOworCWludCBlcnI7CisKKwlmb3JtYXQgPSAodWludHB0cl90KW52bWVtX2xh eW91dF9nZXRfbWF0Y2hfZGF0YShudm1lbSwgbGF5b3V0KTsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6 ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBl cnJfb3V0OworCX0KKworCWVyciA9IG52bWVtX2RldmljZV9yZWFkKG52bWVtLCAwLCBzaXplLCBi dWYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgZnJv bSBudm1lbSBkZXZpY2UgKCVwZSlcbiIsCisJCQlFUlJfUFRSKGVycikpOworCQlnb3RvIGVycl9r ZnJlZTsKKwl9IGVsc2UgaWYgKGVyciAhPSBzaXplKSB7CisJCWRldl9lcnIoZGV2LCAiU2hvcnQg cmVhZCBmcm9tIG52bWVtIGRldmljZS5cbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9r ZnJlZTsKKwl9CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgVV9CT09UX0ZPUk1BVF9TSU5H TEU6CisJCWNyYzMyX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3Np bmdsZSwgY3JjMzIpOworCQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jv b3RfZW52X2ltYWdlX3NpbmdsZSwgZGF0YSk7CisJCWRhdGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3Ry dWN0IHVfYm9vdF9lbnZfaW1hZ2Vfc2luZ2xlLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBVX0JP T1RfRk9STUFUX1JFRFVOREFOVDoKKwkJY3JjMzJfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVf Ym9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBjcmMzMik7CisJCWNyYzMyX2RhdGFfb2Zmc2V0ID0g b2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBtYXJrKTsKKwkJZGF0 YV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9yZWR1bmRhbnQsIGRh dGEpOworCQlicmVhazsKKwl9CisJY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHUzMiAqKShidWYgKyBj cmMzMl9vZmZzZXQpKTsKKwljcmMzMl9kYXRhX2xlbiA9IHNpemUgLSBjcmMzMl9kYXRhX29mZnNl dDsKKwlkYXRhX2xlbiA9IHNpemUgLSBkYXRhX29mZnNldDsKKworCWNhbGMgPSBjcmMzMih+MCwg YnVmICsgY3JjMzJfZGF0YV9vZmZzZXQsIGNyYzMyX2RhdGFfbGVuKSBeIH4wTDsKKwlpZiAoY2Fs YyAhPSBjcmMzMikgeworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgY2FsY3VsYXRlZCBDUkMzMjog MHglMDh4IChleHBlY3RlZDogMHglMDh4KVxuIiwgY2FsYywgY3JjMzIpOworCQllcnIgPSAtRUlO VkFMOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlidWZbc2l6ZSAtIDFdID0gJ1wwJzsKKwll cnIgPSB1X2Jvb3RfZW52X2FkZF9jZWxscyhkZXYsIG52bWVtLCBidWYsIGRhdGFfb2Zmc2V0LCBk YXRhX2xlbik7CisJaWYgKGVycikKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNlbGxz OiAlZFxuIiwgZXJyKTsKKworZXJyX2tmcmVlOgorCWtmcmVlKGJ1Zik7CitlcnJfb3V0OgorCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHVfYm9vdF9l bnZfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInUtYm9vdCxlbnYiLCAu ZGF0YSA9ICh2b2lkICopVV9CT09UX0ZPUk1BVF9TSU5HTEUsIH0sCisJeyAuY29tcGF0aWJsZSA9 ICJ1LWJvb3QsZW52LXJlZHVuZGFudC1ib29sIiwgLmRhdGEgPSAodm9pZCAqKVVfQk9PVF9GT1JN QVRfUkVEVU5EQU5ULCB9LAorCXsgLmNvbXBhdGlibGUgPSAidS1ib290LGVudi1yZWR1bmRhbnQt Y291bnQiLCAuZGF0YSA9ICh2b2lkICopVV9CT09UX0ZPUk1BVF9SRURVTkRBTlQsIH0sCisJe30s Cit9OworCitzdGF0aWMgc3RydWN0IG52bWVtX2xheW91dCB1X2Jvb3RfZW52X2xheW91dCA9IHsK KwkubmFtZSA9ICJ1X2Jvb3RfZW52IiwKKwkub2ZfbWF0Y2hfdGFibGUgPSB1X2Jvb3RfZW52X29m X21hdGNoX3RhYmxlLAorCS5hZGRfY2VsbHMgPSB1X2Jvb3RfYWRkX2NlbGxzLAorfTsKKworc3Rh dGljIGludCBfX2luaXQgdV9ib290X2Vudl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG52bWVtX2xh eW91dF9yZWdpc3RlcigmdV9ib290X2Vudl9sYXlvdXQpOworfQorc3Vic3lzX2luaXRjYWxsKHVf Ym9vdF9lbnZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL3UtYm9vdC1lbnYuYyBi L2RyaXZlcnMvbnZtZW0vdS1ib290LWVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA5YjlhYmZiOGYxODcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL252bWVtL3UtYm9vdC1l bnYuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDIyIFJhZmHFgiBN acWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY3JjMzIu aD4KLSNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KLSNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbnZt ZW0tY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9udm1lbS1wcm92aWRlci5oPgotI2luY2x1 ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o PgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotZW51bSB1X2Jvb3RfZW52X2Zvcm1hdCB7Ci0J VV9CT09UX0ZPUk1BVF9TSU5HTEUsCi0JVV9CT09UX0ZPUk1BVF9SRURVTkRBTlQsCi19OwotCi1z dHJ1Y3QgdV9ib290X2VudiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWVudW0gdV9ib290X2Vu dl9mb3JtYXQgZm9ybWF0OwotCi0Jc3RydWN0IG10ZF9pbmZvICptdGQ7Ci0KLQkvKiBDZWxscyAq LwotCXN0cnVjdCBudm1lbV9jZWxsX2luZm8gKmNlbGxzOwotCWludCBuY2VsbHM7Ci19OwotCi1z dHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9zaW5nbGUgewotCV9fbGUzMiBjcmMzMjsKLQl1aW50OF90 IGRhdGFbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3JlZHVuZGFu dCB7Ci0JX19sZTMyIGNyYzMyOwotCXU4IG1hcms7Ci0JdWludDhfdCBkYXRhW107Ci19IF9fcGFj a2VkOwotCi1zdGF0aWMgaW50IHVfYm9vdF9lbnZfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25l ZCBpbnQgb2Zmc2V0LCB2b2lkICp2YWwsCi0JCQkgICBzaXplX3QgYnl0ZXMpCi17Ci0Jc3RydWN0 IHVfYm9vdF9lbnYgKnByaXYgPSBjb250ZXh0OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYt PmRldjsKLQlzaXplX3QgYnl0ZXNfcmVhZDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbXRkX3JlYWQo cHJpdi0+bXRkLCBvZmZzZXQsIGJ5dGVzLCAmYnl0ZXNfcmVhZCwgdmFsKTsKLQlpZiAoZXJyICYm ICFtdGRfaXNfYml0ZmxpcChlcnIpKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQg ZnJvbSBtdGQ6ICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChieXRlc19y ZWFkICE9IGJ5dGVzKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgJXp1IGJ5dGVz XG4iLCBieXRlcyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHVfYm9vdF9lbnZfYWRkX2NlbGxzKHN0cnVjdCB1X2Jvb3RfZW52ICpwcml2LCB1aW50 OF90ICpidWYsCi0JCQkJc2l6ZV90IGRhdGFfb2Zmc2V0LCBzaXplX3QgZGF0YV9sZW4pCi17Ci0J c3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwotCWNoYXIgKmRhdGEgPSBidWYgKyBkYXRh X29mZnNldDsKLQljaGFyICp2YXIsICp2YWx1ZSwgKmVxOwotCWludCBpZHg7Ci0KLQlwcml2LT5u Y2VsbHMgPSAwOwotCWZvciAodmFyID0gZGF0YTsgdmFyIDwgZGF0YSArIGRhdGFfbGVuICYmICp2 YXI7IHZhciArPSBzdHJsZW4odmFyKSArIDEpCi0JCXByaXYtPm5jZWxscysrOwotCi0JcHJpdi0+ Y2VsbHMgPSBkZXZtX2tjYWxsb2MoZGV2LCBwcml2LT5uY2VsbHMsIHNpemVvZigqcHJpdi0+Y2Vs bHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmNlbGxzKQotCQlyZXR1cm4gLUVOT01FTTsK LQotCWZvciAodmFyID0gZGF0YSwgaWR4ID0gMDsKLQkgICAgIHZhciA8IGRhdGEgKyBkYXRhX2xl biAmJiAqdmFyOwotCSAgICAgdmFyID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpICsgMSwgaWR4Kysp IHsKLQkJZXEgPSBzdHJjaHIodmFyLCAnPScpOwotCQlpZiAoIWVxKQotCQkJYnJlYWs7Ci0JCSpl cSA9ICdcMCc7Ci0JCXZhbHVlID0gZXEgKyAxOwotCi0JCXByaXYtPmNlbGxzW2lkeF0ubmFtZSA9 IGRldm1fa3N0cmR1cChkZXYsIHZhciwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHJpdi0+Y2VsbHNb aWR4XS5uYW1lKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXByaXYtPmNlbGxzW2lkeF0ub2Zmc2V0 ID0gZGF0YV9vZmZzZXQgKyB2YWx1ZSAtIGRhdGE7Ci0JCXByaXYtPmNlbGxzW2lkeF0uYnl0ZXMg PSBzdHJsZW4odmFsdWUpOwotCX0KLQotCWlmIChXQVJOX09OKGlkeCAhPSBwcml2LT5uY2VsbHMp KQotCQlwcml2LT5uY2VsbHMgPSBpZHg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB1 X2Jvb3RfZW52X3BhcnNlKHN0cnVjdCB1X2Jvb3RfZW52ICpwcml2KQotewotCXN0cnVjdCBkZXZp Y2UgKmRldiA9IHByaXYtPmRldjsKLQlzaXplX3QgY3JjMzJfZGF0YV9vZmZzZXQ7Ci0Jc2l6ZV90 IGNyYzMyX2RhdGFfbGVuOwotCXNpemVfdCBjcmMzMl9vZmZzZXQ7Ci0Jc2l6ZV90IGRhdGFfb2Zm c2V0OwotCXNpemVfdCBkYXRhX2xlbjsKLQl1aW50MzJfdCBjcmMzMjsKLQl1aW50MzJfdCBjYWxj OwotCXNpemVfdCBieXRlczsKLQl1aW50OF90ICpidWY7Ci0JaW50IGVycjsKLQotCWJ1ZiA9IGtj YWxsb2MoMSwgcHJpdi0+bXRkLT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQll cnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0JZXJyID0gbXRkX3JlYWQocHJp di0+bXRkLCAwLCBwcml2LT5tdGQtPnNpemUsICZieXRlcywgYnVmKTsKLQlpZiAoKGVyciAmJiAh bXRkX2lzX2JpdGZsaXAoZXJyKSkgfHwgYnl0ZXMgIT0gcHJpdi0+bXRkLT5zaXplKSB7Ci0JCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBtdGQ6ICVkXG4iLCBlcnIpOwotCQlnb3Rv IGVycl9rZnJlZTsKLQl9Ci0KLQlzd2l0Y2ggKHByaXYtPmZvcm1hdCkgewotCWNhc2UgVV9CT09U X0ZPUk1BVF9TSU5HTEU6Ci0JCWNyYzMyX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3Rf ZW52X2ltYWdlX3NpbmdsZSwgY3JjMzIpOwotCQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9m KHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSwgZGF0YSk7Ci0JCWRhdGFfb2Zmc2V0ID0g b2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2Vfc2luZ2xlLCBkYXRhKTsKLQkJYnJlYWs7 Ci0JY2FzZSBVX0JPT1RfRk9STUFUX1JFRFVOREFOVDoKLQkJY3JjMzJfb2Zmc2V0ID0gb2Zmc2V0 b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBjcmMzMik7Ci0JCWNyYzMyX2Rh dGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBt YXJrKTsKLQkJZGF0YV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9y ZWR1bmRhbnQsIGRhdGEpOwotCQlicmVhazsKLQl9Ci0JY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHVp bnQzMl90ICopKGJ1ZiArIGNyYzMyX29mZnNldCkpOwotCWNyYzMyX2RhdGFfbGVuID0gcHJpdi0+ bXRkLT5zaXplIC0gY3JjMzJfZGF0YV9vZmZzZXQ7Ci0JZGF0YV9sZW4gPSBwcml2LT5tdGQtPnNp emUgLSBkYXRhX29mZnNldDsKLQotCWNhbGMgPSBjcmMzMih+MCwgYnVmICsgY3JjMzJfZGF0YV9v ZmZzZXQsIGNyYzMyX2RhdGFfbGVuKSBeIH4wTDsKLQlpZiAoY2FsYyAhPSBjcmMzMikgewotCQlk ZXZfZXJyKGRldiwgIkludmFsaWQgY2FsY3VsYXRlZCBDUkMzMjogMHglMDh4IChleHBlY3RlZDog MHglMDh4KVxuIiwgY2FsYywgY3JjMzIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9r ZnJlZTsKLQl9Ci0KLQlidWZbcHJpdi0+bXRkLT5zaXplIC0gMV0gPSAnXDAnOwotCWVyciA9IHVf Ym9vdF9lbnZfYWRkX2NlbGxzKHByaXYsIGJ1ZiwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuKTsKLQlp ZiAoZXJyKQotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY2VsbHM6ICVkXG4iLCBlcnIp OwotCi1lcnJfa2ZyZWU6Ci0Ja2ZyZWUoYnVmKTsKLWVycl9vdXQ6Ci0JcmV0dXJuIGVycjsKLX0K LQotc3RhdGljIGludCB1X2Jvb3RfZW52X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCi17Ci0Jc3RydWN0IG52bWVtX2NvbmZpZyBjb25maWcgPSB7Ci0JCS5uYW1lID0gInUtYm9v dC1lbnYiLAotCQkucmVnX3JlYWQgPSB1X2Jvb3RfZW52X3JlYWQsCi0JfTsKLQlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9m X25vZGU7Ci0Jc3RydWN0IHVfYm9vdF9lbnYgKnByaXY7Ci0JaW50IGVycjsKLQotCXByaXYgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYp Ci0JCXJldHVybiAtRU5PTUVNOwotCXByaXYtPmRldiA9IGRldjsKLQotCXByaXYtPmZvcm1hdCA9 ICh1aW50cHRyX3Qpb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Ci0KLQlwcml2LT5tdGQg PSBvZl9nZXRfbXRkX2RldmljZV9ieV9ub2RlKG5wKTsKLQlpZiAoSVNfRVJSKHByaXYtPm10ZCkp IHsKLQkJZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0+bXRkKSwgIkZhaWxlZCB0byBn ZXQgJXBPRiBNVERcbiIsIG5wKTsKLQkJcmV0dXJuIFBUUl9FUlIocHJpdi0+bXRkKTsKLQl9Ci0K LQllcnIgPSB1X2Jvb3RfZW52X3BhcnNlKHByaXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7 Ci0KLQljb25maWcuZGV2ID0gZGV2OwotCWNvbmZpZy5jZWxscyA9IHByaXYtPmNlbGxzOwotCWNv bmZpZy5uY2VsbHMgPSBwcml2LT5uY2VsbHM7Ci0JY29uZmlnLnByaXYgPSBwcml2OwotCWNvbmZp Zy5zaXplID0gcHJpdi0+bXRkLT5zaXplOwotCi0JcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZt X252bWVtX3JlZ2lzdGVyKGRldiwgJmNvbmZpZykpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCB1X2Jvb3RfZW52X29mX21hdGNoX3RhYmxlW10gPSB7Ci0JeyAuY29tcGF0 aWJsZSA9ICJ1LWJvb3QsZW52IiwgLmRhdGEgPSAodm9pZCAqKVVfQk9PVF9GT1JNQVRfU0lOR0xF LCB9LAotCXsgLmNvbXBhdGlibGUgPSAidS1ib290LGVudi1yZWR1bmRhbnQtYm9vbCIsIC5kYXRh ID0gKHZvaWQgKilVX0JPT1RfRk9STUFUX1JFRFVOREFOVCwgfSwKLQl7IC5jb21wYXRpYmxlID0g InUtYm9vdCxlbnYtcmVkdW5kYW50LWNvdW50IiwgLmRhdGEgPSAodm9pZCAqKVVfQk9PVF9GT1JN QVRfUkVEVU5EQU5ULCB9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgdV9ib290X2Vudl9kcml2ZXIgPSB7Ci0JLnByb2JlID0gdV9ib290X2Vudl9wcm9iZSwKLQku ZHJpdmVyID0gewotCQkubmFtZSA9ICJ1X2Jvb3RfZW52IiwKLQkJLm9mX21hdGNoX3RhYmxlID0g dV9ib290X2Vudl9vZl9tYXRjaF90YWJsZSwKLQl9LAotfTsKLW1vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIodV9ib290X2Vudl9kcml2ZXIpOwotCi1NT0RVTEVfQVVUSE9SKCJSYWZhxYIgTWnFgmVja2ki KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHVfYm9v dF9lbnZfb2ZfbWF0Y2hfdGFibGUpOwotLSAKMi4zMC4yCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=