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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 93832C433E9 for ; Fri, 15 Jan 2021 15:40:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6CCA223884 for ; Fri, 15 Jan 2021 15:40:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733213AbhAOPkJ (ORCPT ); Fri, 15 Jan 2021 10:40:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733185AbhAOPkH (ORCPT ); Fri, 15 Jan 2021 10:40:07 -0500 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38763C061795; Fri, 15 Jan 2021 07:39:26 -0800 (PST) Received: by mail-lf1-x135.google.com with SMTP id o19so13760688lfo.1; Fri, 15 Jan 2021 07:39:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lmKofo5XL6pcYRLvYw3BVNxNonI1i89zwQf4fYPG/TE=; b=KWm++DFKRV44YTJ9Y1Uy3zEf6NCQrSnrlbcSe6DJgOdiEj0uwtbwOKOzpJ1XedPkPc TIktwXbYZYUz57IyoUXCByNKUQziVWr8Yn/VMaPyCTu3jAczUuGeTPx71LTVhfflUiya PMPU+uB5t4kpOwucMByfakRwfmOf3Gdov4CHvpTiiGBAG1F99P5M8DX8oEDqNtkcSIkb nwbvz9aLfgBDQa7yWlAC2aBDrmpRWeZJET4JcTzZKnGFMpWDebJ9V6xeXbDHAY+g+BPC 1hgerIIVbdhBm3ApQDDNfwmw9TrnLmDRIhPC3KzzbQt6TSvigHCqfi78LHN8GQshvwQi BZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lmKofo5XL6pcYRLvYw3BVNxNonI1i89zwQf4fYPG/TE=; b=Ujxri1gv/NyFawV6WcqKbSYIPH09vE0uqLPBBnx/GgsoX2a/ismQDAMLNnb0B9lOnv fIY/1nBNGW6f93YUQGxAo4UwRz6oEKCAZfyiUrJilt5hw07j2vtnogzj3/P3ZH3QunQM RK9ZRTR1+mS6utFIA/DRm8ijvdO/V9adTfJJboBjG+ybfjnzT8hIgCjtJx7cPv5cZNdn DAOuSXQz9mWSzpJjiFDEJ2mWaEFnho0DWumuXa7szR88hb7g69cPsW6SPZSETCAUHRRA ZPivXaNrEnxhxKNJixIyiXQQqOAL7/K6Q4/jRRiriI9/Mb143e9He/Otc7AfQ1JEE6D9 DVZw== X-Gm-Message-State: AOAM533gOVHFmxOXr23BoSM2H4O5cutgwyddQPPUsoOT8HfQ7SMtU87F qv+fucz1idzIHmKuL90+UCceA2XnxB87Zw== X-Google-Smtp-Source: ABdhPJxiWY5O8tu0C42AedBrV5j5v4srilwuB6eUvl5BAcKz5/2Z1bbXjqYuwPHfqRXxGTUyHp7bcA== X-Received: by 2002:ac2:483b:: with SMTP id 27mr5823959lft.429.1610725164762; Fri, 15 Jan 2021 07:39:24 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id j2sm931567lfe.134.2021.01.15.07.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Jan 2021 07:39:24 -0800 (PST) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring Cc: Boris Brezillon , linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Date: Fri, 15 Jan 2021 16:39:01 +0100 Message-Id: <20210115153901.31052-3-zajec5@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210115153901.31052-1-zajec5@gmail.com> References: <20210115153901.31052-1-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafał Miłecki BCM4908 partitioning is based on fixed layout but allows specifying multiple firmware partitions. It requires detecting which firmware partition was used for booting current kernel. To support such cases without duplicating a lot of code (without copying most of the ofpart.c code) support for post-parsing callback was added. BCM4908 callback simply reads offset of currently used firmware partition from the DT. Bootloader specifies it using the "brcm_blparms" property. Signed-off-by: Rafał Miłecki --- drivers/mtd/parsers/Makefile | 1 + drivers/mtd/parsers/bcm4908-partitions.c | 62 ++++++++++++++++++++++++ drivers/mtd/parsers/bcm4908-partitions.h | 7 +++ drivers/mtd/parsers/ofpart.c | 28 ++++++++++- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 drivers/mtd/parsers/bcm4908-partitions.c create mode 100644 drivers/mtd/parsers/bcm4908-partitions.h diff --git a/drivers/mtd/parsers/Makefile b/drivers/mtd/parsers/Makefile index b0c5f62f9e85..3e26001f743c 100644 --- a/drivers/mtd/parsers/Makefile +++ b/drivers/mtd/parsers/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_MTD_BCM47XX_PARTS) += bcm47xxpart.o obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63xxpart.o obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o obj-$(CONFIG_MTD_OF_PARTS) += ofpart.o +obj-$(CONFIG_MTD_OF_PARTS) += bcm4908-partitions.o obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o obj-$(CONFIG_MTD_AFS_PARTS) += afs.o obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o diff --git a/drivers/mtd/parsers/bcm4908-partitions.c b/drivers/mtd/parsers/bcm4908-partitions.c new file mode 100644 index 000000000000..032a4b1b8a5f --- /dev/null +++ b/drivers/mtd/parsers/bcm4908-partitions.c @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2021 Rafał Miłecki + */ + +#include +#include +#include +#include +#include +#include + +#define BLPARAMS_FW_OFFSET "NAND_RFS_OFS" + +static long long bcm4908_partitions_fw_offset(void) +{ + struct device_node *root; + struct property *prop; + const char *s; + + root = of_find_node_by_path("/"); + if (!root) + return -ENOENT; + + of_property_for_each_string(root, "brcm_blparms", prop, s) { + size_t len = strlen(BLPARAMS_FW_OFFSET); + unsigned long offset; + int err; + + if (strncmp(s, BLPARAMS_FW_OFFSET, len) || s[len] != '=') + continue; + + err = kstrtoul(s + len + 1, 0, &offset); + if (err) { + pr_err("failed to parse %s\n", s + len + 1); + return err; + } + + return offset << 10; + } + + return -ENOENT; +} + +int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) +{ + long long fw_offset; + int i; + + fw_offset = bcm4908_partitions_fw_offset(); + + for (i = 0; i < nr_parts; i++) { + if (of_device_is_compatible(parts[i].of_node, "brcm,bcm4908-firmware")) { + if (fw_offset < 0 || parts[i].offset == fw_offset) + parts[i].name = "firmware"; + else + parts[i].name = "backup"; + } + } + + return 0; +} diff --git a/drivers/mtd/parsers/bcm4908-partitions.h b/drivers/mtd/parsers/bcm4908-partitions.h new file mode 100644 index 000000000000..df25f0487d0a --- /dev/null +++ b/drivers/mtd/parsers/bcm4908-partitions.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __BCM4908_PARTITIONS_H +#define __BCM4908_PARTITIONS_H + +int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts); + +#endif diff --git a/drivers/mtd/parsers/ofpart.c b/drivers/mtd/parsers/ofpart.c index daf507c123e6..6b221df8401c 100644 --- a/drivers/mtd/parsers/ofpart.c +++ b/drivers/mtd/parsers/ofpart.c @@ -16,6 +16,18 @@ #include #include +#include "bcm4908-partitions.h" + +struct fixed_partitions_quirks { + int (*post_parse)(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts); +}; + +struct fixed_partitions_quirks bcm4908_partitions_quirks = { + .post_parse = bcm4908_partitions_post_parse, +}; + +static const struct of_device_id parse_ofpart_match_table[]; + static bool node_has_compatible(struct device_node *pp) { return of_get_property(pp, "compatible", NULL); @@ -25,6 +37,8 @@ static int parse_fixed_partitions(struct mtd_info *master, const struct mtd_partition **pparts, struct mtd_part_parser_data *data) { + const struct fixed_partitions_quirks *quirks; + const struct of_device_id *of_id; struct mtd_partition *parts; struct device_node *mtd_node; struct device_node *ofpart_node; @@ -33,7 +47,6 @@ static int parse_fixed_partitions(struct mtd_info *master, int nr_parts, i, ret = 0; bool dedicated = true; - /* Pull of_node from the master device node */ mtd_node = mtd_get_of_node(master); if (!mtd_node) @@ -50,11 +63,16 @@ static int parse_fixed_partitions(struct mtd_info *master, master->name, mtd_node); ofpart_node = mtd_node; dedicated = false; - } else if (!of_device_is_compatible(ofpart_node, "fixed-partitions")) { + } + + of_id = of_match_node(parse_ofpart_match_table, ofpart_node); + if (dedicated && !of_id) { /* The 'partitions' subnode might be used by another parser */ return 0; } + quirks = of_id ? of_id->data : NULL; + /* First count the subnodes */ nr_parts = 0; for_each_child_of_node(ofpart_node, pp) { @@ -126,6 +144,9 @@ static int parse_fixed_partitions(struct mtd_info *master, if (!nr_parts) goto ofpart_none; + if (quirks && quirks->post_parse) + quirks->post_parse(master, parts, nr_parts); + *pparts = parts; return nr_parts; @@ -140,7 +161,10 @@ static int parse_fixed_partitions(struct mtd_info *master, } static const struct of_device_id parse_ofpart_match_table[] = { + /* Generic */ { .compatible = "fixed-partitions" }, + /* Customized */ + { .compatible = "brcm,bcm4908-partitions", .data = &bcm4908_partitions_quirks, }, {}, }; MODULE_DEVICE_TABLE(of, parse_ofpart_match_table); -- 2.26.2 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=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE243C433E0 for ; Fri, 15 Jan 2021 15:40:08 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 AAF2D2339D for ; Fri, 15 Jan 2021 15:40:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AAF2D2339D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.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=BUfNLkduSXsqyhK5ug5DSiiE4UOrsJP71YPbpuZGcn0=; b=aj7+4qidOG89r/k3f3lNIYd/1 gIO/N2qXw9EW/Jb18qNBqDnbAjd6g1+ldORUtduc3QusD4m5j15CHU8dyQLmuU+atcQ79lc3ZShl2 d0tzqZ7HEeHeSgalj2yq+7l+hSTaPHhLmszyhjC+QAY2NiUDi38FoJUXhq2+lrDup9k1swPo8TmcF BoUD9cv0obFbKyhLUAPo74j8hmGVHbybHg0iG1EtgSqAtiTIcKnyrAgdmpraB57kIKnOo01IUG3CR T69mwjJMaxQLzJ7PaFHohYQXvNmjMndZOOE8KbETRPNeb7lKrp2bn3IEJ8wz10bYkHXWJflIiJMRv zY65cOLHw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0RCE-0005Y6-Ch; Fri, 15 Jan 2021 15:39:30 +0000 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0RCA-0005WH-F3 for linux-mtd@lists.infradead.org; Fri, 15 Jan 2021 15:39:27 +0000 Received: by mail-lf1-x130.google.com with SMTP id o10so13696705lfl.13 for ; Fri, 15 Jan 2021 07:39:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lmKofo5XL6pcYRLvYw3BVNxNonI1i89zwQf4fYPG/TE=; b=KWm++DFKRV44YTJ9Y1Uy3zEf6NCQrSnrlbcSe6DJgOdiEj0uwtbwOKOzpJ1XedPkPc TIktwXbYZYUz57IyoUXCByNKUQziVWr8Yn/VMaPyCTu3jAczUuGeTPx71LTVhfflUiya PMPU+uB5t4kpOwucMByfakRwfmOf3Gdov4CHvpTiiGBAG1F99P5M8DX8oEDqNtkcSIkb nwbvz9aLfgBDQa7yWlAC2aBDrmpRWeZJET4JcTzZKnGFMpWDebJ9V6xeXbDHAY+g+BPC 1hgerIIVbdhBm3ApQDDNfwmw9TrnLmDRIhPC3KzzbQt6TSvigHCqfi78LHN8GQshvwQi BZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lmKofo5XL6pcYRLvYw3BVNxNonI1i89zwQf4fYPG/TE=; b=A9AdAo24Bqjig14gT0ALki6QZJDWeA3ruR0S0enzOne0sUyYdoza55ZpbzN3/9dOBK Eus+ASHskySm42Q1KV30BIXrmJzNQaoQp0DG6bxgbNtkmk68DEboc2XqkFcIekE+xfyA uSsOafKV2ja4Snz1UvUZjxZWmR4RsZ6yI7QBokPeotsKFO7QfOGAlTyM1hDffLCe25FZ 8TZfvnmSEph5qnSjFUNeIncwgwItAOcaplDdPWBWIaHc74xrJcRaoevn7x1Cb7srQNUD kvN+CX6LuYDqxVN9SLG03Vh1Xg0eQjInpF4mI4+5/QxA8aqXLbK/pQY28ZmNY8kch1t1 8bXg== X-Gm-Message-State: AOAM532xrwCMxVZS82MnZwSwQBuu+8+HxHuqy10ih9AvLWJ2t3wi0Aqk FzTVZH+U/aHL/idIkQW4jnU= X-Google-Smtp-Source: ABdhPJxiWY5O8tu0C42AedBrV5j5v4srilwuB6eUvl5BAcKz5/2Z1bbXjqYuwPHfqRXxGTUyHp7bcA== X-Received: by 2002:ac2:483b:: with SMTP id 27mr5823959lft.429.1610725164762; Fri, 15 Jan 2021 07:39:24 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id j2sm931567lfe.134.2021.01.15.07.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Jan 2021 07:39:24 -0800 (PST) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring Subject: [PATCH 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Date: Fri, 15 Jan 2021 16:39:01 +0100 Message-Id: <20210115153901.31052-3-zajec5@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210115153901.31052-1-zajec5@gmail.com> References: <20210115153901.31052-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210115_103926_548487_5A6F7A2C X-CRM114-Status: GOOD ( 28.47 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , devicetree@vger.kernel.org, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Boris Brezillon Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKQkNNNDkwOCBwYXJ0aXRp b25pbmcgaXMgYmFzZWQgb24gZml4ZWQgbGF5b3V0IGJ1dCBhbGxvd3Mgc3BlY2lmeWluZwptdWx0 aXBsZSBmaXJtd2FyZSBwYXJ0aXRpb25zLiBJdCByZXF1aXJlcyBkZXRlY3Rpbmcgd2hpY2ggZmly bXdhcmUKcGFydGl0aW9uIHdhcyB1c2VkIGZvciBib290aW5nIGN1cnJlbnQga2VybmVsLgoKVG8g c3VwcG9ydCBzdWNoIGNhc2VzIHdpdGhvdXQgZHVwbGljYXRpbmcgYSBsb3Qgb2YgY29kZSAod2l0 aG91dCBjb3B5aW5nCm1vc3Qgb2YgdGhlIG9mcGFydC5jIGNvZGUpIHN1cHBvcnQgZm9yIHBvc3Qt cGFyc2luZyBjYWxsYmFjayB3YXMgYWRkZWQuCgpCQ000OTA4IGNhbGxiYWNrIHNpbXBseSByZWFk cyBvZmZzZXQgb2YgY3VycmVudGx5IHVzZWQgZmlybXdhcmUKcGFydGl0aW9uIGZyb20gdGhlIERU LiBCb290bG9hZGVyIHNwZWNpZmllcyBpdCB1c2luZyB0aGUgImJyY21fYmxwYXJtcyIKcHJvcGVy dHkuCgpTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+Ci0t LQogZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAxICsKIGRyaXZl cnMvbXRkL3BhcnNlcnMvYmNtNDkwOC1wYXJ0aXRpb25zLmMgfCA2MiArKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvbXRkL3BhcnNlcnMvYmNtNDkwOC1wYXJ0aXRpb25zLmggfCAgNyAr KysKIGRyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0LmMgICAgICAgICAgICAgfCAyOCArKysrKysr KysrLQogNCBmaWxlcyBjaGFuZ2VkLCA5NiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL3BhcnNlcnMvYmNtNDkwOC1wYXJ0aXRpb25z LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9wYXJzZXJzL2JjbTQ5MDgtcGFydGl0 aW9ucy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZSBiL2RyaXZl cnMvbXRkL3BhcnNlcnMvTWFrZWZpbGUKaW5kZXggYjBjNWY2MmY5ZTg1Li4zZTI2MDAxZjc0M2Mg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9t dGQvcGFyc2Vycy9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAgb2JqLSQoQ09ORklHX01URF9CQ000 N1hYX1BBUlRTKQkJKz0gYmNtNDd4eHBhcnQubwogb2JqLSQoQ09ORklHX01URF9CQ002M1hYX1BB UlRTKQkJKz0gYmNtNjN4eHBhcnQubwogb2JqLSQoQ09ORklHX01URF9DTURMSU5FX1BBUlRTKQkJ Kz0gY21kbGluZXBhcnQubwogb2JqLSQoQ09ORklHX01URF9PRl9QQVJUUykJCSs9IG9mcGFydC5v CitvYmotJChDT05GSUdfTVREX09GX1BBUlRTKQkJKz0gYmNtNDkwOC1wYXJ0aXRpb25zLm8KIG9i ai0kKENPTkZJR19NVERfUEFSU0VSX0lNQUdFVEFHKQkrPSBwYXJzZXJfaW1hZ2V0YWcubwogb2Jq LSQoQ09ORklHX01URF9BRlNfUEFSVFMpCQkrPSBhZnMubwogb2JqLSQoQ09ORklHX01URF9QQVJT RVJfVFJYKQkJKz0gcGFyc2VyX3RyeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9wYXJzZXJz L2JjbTQ5MDgtcGFydGl0aW9ucy5jIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9iY200OTA4LXBhcnRp dGlvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAzMmE0YjFi OGE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvYmNtNDkwOC1wYXJ0 aXRpb25zLmMKQEAgLTAsMCArMSw2MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBt aWxlY2tpLnBsPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQv bXRkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0 aXRpb25zLmg+CisKKyNkZWZpbmUgQkxQQVJBTVNfRldfT0ZGU0VUCQkiTkFORF9SRlNfT0ZTIgor CitzdGF0aWMgbG9uZyBsb25nIGJjbTQ5MDhfcGFydGl0aW9uc19md19vZmZzZXQodm9pZCkKK3sK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCWNv bnN0IGNoYXIgKnM7CisKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAo IXJvb3QpCisJCXJldHVybiAtRU5PRU5UOworCisJb2ZfcHJvcGVydHlfZm9yX2VhY2hfc3RyaW5n KHJvb3QsICJicmNtX2JscGFybXMiLCBwcm9wLCBzKSB7CisJCXNpemVfdCBsZW4gPSBzdHJsZW4o QkxQQVJBTVNfRldfT0ZGU0VUKTsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJCWludCBlcnI7 CisKKwkJaWYgKHN0cm5jbXAocywgQkxQQVJBTVNfRldfT0ZGU0VULCBsZW4pIHx8IHNbbGVuXSAh PSAnPScpCisJCQljb250aW51ZTsKKworCQllcnIgPSBrc3RydG91bChzICsgbGVuICsgMSwgMCwg Jm9mZnNldCk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlICVzXG4i LCBzICsgbGVuICsgMSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJcmV0dXJuIG9mZnNldCA8 PCAxMDsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworaW50IGJjbTQ5MDhfcGFydGl0aW9u c19wb3N0X3BhcnNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAq cGFydHMsIGludCBucl9wYXJ0cykKK3sKKwlsb25nIGxvbmcgZndfb2Zmc2V0OworCWludCBpOwor CisJZndfb2Zmc2V0ID0gYmNtNDkwOF9wYXJ0aXRpb25zX2Z3X29mZnNldCgpOworCisJZm9yIChp ID0gMDsgaSA8IG5yX3BhcnRzOyBpKyspIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxl KHBhcnRzW2ldLm9mX25vZGUsICJicmNtLGJjbTQ5MDgtZmlybXdhcmUiKSkgeworCQkJaWYgKGZ3 X29mZnNldCA8IDAgfHwgcGFydHNbaV0ub2Zmc2V0ID09IGZ3X29mZnNldCkKKwkJCQlwYXJ0c1tp XS5uYW1lID0gImZpcm13YXJlIjsKKwkJCWVsc2UKKwkJCQlwYXJ0c1tpXS5uYW1lID0gImJhY2t1 cCI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Bh cnNlcnMvYmNtNDkwOC1wYXJ0aXRpb25zLmggYi9kcml2ZXJzL210ZC9wYXJzZXJzL2JjbTQ5MDgt cGFydGl0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGYy NWYwNDg3ZDBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9iY200OTA4 LXBhcnRpdGlvbnMuaApAQCAtMCwwICsxLDcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovCisjaWZuZGVmIF9fQkNNNDkwOF9QQVJUSVRJT05TX0gKKyNkZWZpbmUgX19C Q000OTA4X1BBUlRJVElPTlNfSAorCitpbnQgYmNtNDkwOF9wYXJ0aXRpb25zX3Bvc3RfcGFyc2Uo c3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG5y X3BhcnRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFy dC5jIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnQuYwppbmRleCBkYWY1MDdjMTIzZTYuLjZi MjIxZGY4NDAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnQuYworKysg Yi9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydC5jCkBAIC0xNiw2ICsxNiwxOCBAQAogI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCisj aW5jbHVkZSAiYmNtNDkwOC1wYXJ0aXRpb25zLmgiCisKK3N0cnVjdCBmaXhlZF9wYXJ0aXRpb25z X3F1aXJrcyB7CisJaW50ICgqcG9zdF9wYXJzZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVj dCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG5yX3BhcnRzKTsKK307CisKK3N0cnVjdCBmaXhl ZF9wYXJ0aXRpb25zX3F1aXJrcyBiY200OTA4X3BhcnRpdGlvbnNfcXVpcmtzID0geworCS5wb3N0 X3BhcnNlID0gYmNtNDkwOF9wYXJ0aXRpb25zX3Bvc3RfcGFyc2UsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBwYXJzZV9vZnBhcnRfbWF0Y2hfdGFibGVbXTsKKwogc3Rh dGljIGJvb2wgbm9kZV9oYXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBwKQogewog CXJldHVybiBvZl9nZXRfcHJvcGVydHkocHAsICJjb21wYXRpYmxlIiwgTlVMTCk7CkBAIC0yNSw2 ICszNyw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfZml4ZWRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2lu Zm8gKm1hc3RlciwKIAkJCQkgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAog CQkJCSAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQogeworCWNvbnN0IHN0cnVj dCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyAqcXVpcmtzOworCWNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgKm9mX2lkOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKIAlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm10ZF9ub2RlOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZwYXJ0X25vZGU7CkBA IC0zMyw3ICs0Nyw2IEBAIHN0YXRpYyBpbnQgcGFyc2VfZml4ZWRfcGFydGl0aW9ucyhzdHJ1Y3Qg bXRkX2luZm8gKm1hc3RlciwKIAlpbnQgbnJfcGFydHMsIGksIHJldCA9IDA7CiAJYm9vbCBkZWRp Y2F0ZWQgPSB0cnVlOwogCi0KIAkvKiBQdWxsIG9mX25vZGUgZnJvbSB0aGUgbWFzdGVyIGRldmlj ZSBub2RlICovCiAJbXRkX25vZGUgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKIAlpZiAoIW10 ZF9ub2RlKQpAQCAtNTAsMTEgKzYzLDE2IEBAIHN0YXRpYyBpbnQgcGFyc2VfZml4ZWRfcGFydGl0 aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKIAkJCSBtYXN0ZXItPm5hbWUsIG10ZF9ub2Rl KTsKIAkJb2ZwYXJ0X25vZGUgPSBtdGRfbm9kZTsKIAkJZGVkaWNhdGVkID0gZmFsc2U7Ci0JfSBl bHNlIGlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUob2ZwYXJ0X25vZGUsICJmaXhlZC1wYXJ0 aXRpb25zIikpIHsKKwl9CisKKwlvZl9pZCA9IG9mX21hdGNoX25vZGUocGFyc2Vfb2ZwYXJ0X21h dGNoX3RhYmxlLCBvZnBhcnRfbm9kZSk7CisJaWYgKGRlZGljYXRlZCAmJiAhb2ZfaWQpIHsKIAkJ LyogVGhlICdwYXJ0aXRpb25zJyBzdWJub2RlIG1pZ2h0IGJlIHVzZWQgYnkgYW5vdGhlciBwYXJz ZXIgKi8KIAkJcmV0dXJuIDA7CiAJfQogCisJcXVpcmtzID0gb2ZfaWQgPyBvZl9pZC0+ZGF0YSA6 IE5VTEw7CisKIAkvKiBGaXJzdCBjb3VudCB0aGUgc3Vibm9kZXMgKi8KIAlucl9wYXJ0cyA9IDA7 CiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvZnBhcnRfbm9kZSwgIHBwKSB7CkBAIC0xMjYsNiAr MTQ0LDkgQEAgc3RhdGljIGludCBwYXJzZV9maXhlZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5m byAqbWFzdGVyLAogCWlmICghbnJfcGFydHMpCiAJCWdvdG8gb2ZwYXJ0X25vbmU7CiAKKwlpZiAo cXVpcmtzICYmIHF1aXJrcy0+cG9zdF9wYXJzZSkKKwkJcXVpcmtzLT5wb3N0X3BhcnNlKG1hc3Rl ciwgcGFydHMsIG5yX3BhcnRzKTsKKwogCSpwcGFydHMgPSBwYXJ0czsKIAlyZXR1cm4gbnJfcGFy dHM7CiAKQEAgLTE0MCw3ICsxNjEsMTAgQEAgc3RhdGljIGludCBwYXJzZV9maXhlZF9wYXJ0aXRp b25zKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBwYXJzZV9vZnBhcnRfbWF0Y2hfdGFibGVbXSA9IHsKKwkvKiBHZW5lcmljICov CiAJeyAuY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIiB9LAorCS8qIEN1c3RvbWl6ZWQg Ki8KKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNDkwOC1wYXJ0aXRpb25zIiwgLmRhdGEgPSAm YmNtNDkwOF9wYXJ0aXRpb25zX3F1aXJrcywgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBwYXJzZV9vZnBhcnRfbWF0Y2hfdGFibGUpOwotLSAKMi4yNi4yCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBk aXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LW10ZC8K