From patchwork Wed Mar 2 22:55:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Daney X-Patchwork-Id: 63428 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp2636389lbc; Wed, 2 Mar 2016 14:57:50 -0800 (PST) X-Received: by 10.66.152.231 with SMTP id vb7mr42389590pab.132.1456959469087; Wed, 02 Mar 2016 14:57:49 -0800 (PST) Return-Path: Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id a8si15586936pas.149.2016.03.02.14.57.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Mar 2016 14:57:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) client-ip=2001:1868:205::9; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org designates 2001:1868:205::9 as permitted sender) smtp.mailfrom=linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org; dkim=neutral (body hash did not verify) header.i=@gmail.com; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1abFhM-0002LG-RT; Wed, 02 Mar 2016 22:56:52 +0000 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1abFh8-00028X-EX for linux-arm-kernel@lists.infradead.org; Wed, 02 Mar 2016 22:56:39 +0000 Received: by mail-pf0-x242.google.com with SMTP id 63so221487pfe.0 for ; Wed, 02 Mar 2016 14:56:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=husB/HVGYq9ik5VlkC2lV3VuM7MHla4rthNU01rXM5Q=; b=tIMNf12X66IeEk85nDQqC9uDzB5WmCi19xbc6LNY8drfYpPyHPYg0ZFP65aZIAt2q0 JI/y5ZDLd0sBqgKlRWk+BhEiOTdNcGo+5nGoVTXoPxqMD/bV2461eehLXMJSg0grGpz4 joO1tN4rAELDh7goBJ9B4K8LZTK335TDMnPWTaHCqrvphAe9sjGM4NfuwMk0ZXvJP4k5 vqnvzZe0PrbdNV1ttew7CasJbiW0/D8TZUfGOT+vCY3MtY83xf/SclVLvhw4OZmYAu4O Lc3gANqQXIJ7AH4lWhtj4AufqtcUYoYDJnRVDWt61aPJFE6TXqXY0HgyqIZ+hKBu+X4C sVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=husB/HVGYq9ik5VlkC2lV3VuM7MHla4rthNU01rXM5Q=; b=Sh5oApEAGoDEmebHKY2ZMTP/bYQl/DNnzhsiK62Gq4+AIKylp5FPpeYysY9msWdle0 7GzQP2Jf4M+Vo2fMh2jjd/wuCzFQAgq8QToJhgRO37hQ9+FUH8H0OqXx1bco7CLSUIWt Q0mxDcOz4KD6e6SOmjxdzIM3lKWIwGkywUX+JMllSJwzse1cMQRJ9d7chfSSlE4xDRsT LtWmaQ1hv8N8CaAPSN4Drteei/xraRyuLe44Kq7hXPeNa4DexiRagJwab1242qGG2PWf qtEpLUjF+W1+55zqwZUzopf+8z2/EKYPAGgrttHfYDh5SE9wZ93x77cigiK3yDp71Yi5 jBJQ== X-Gm-Message-State: AD7BkJKKZvS8o7S/M/DhVRRFkCzN8BwrsbmHqKjj2ne/0Pjj2dLjfDCl1/jRLTj9N3FppA== X-Received: by 10.98.80.10 with SMTP id e10mr42292650pfb.141.1456959377652; Wed, 02 Mar 2016 14:56:17 -0800 (PST) Received: from dl.caveonetworks.com ([64.2.3.194]) by smtp.gmail.com with ESMTPSA id x1sm55369289pfi.42.2016.03.02.14.56.13 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 02 Mar 2016 14:56:13 -0800 (PST) Received: from dl.caveonetworks.com (localhost.localdomain [127.0.0.1]) by dl.caveonetworks.com (8.14.5/8.14.5) with ESMTP id u22MuCjW002079; Wed, 2 Mar 2016 14:56:12 -0800 Received: (from ddaney@localhost) by dl.caveonetworks.com (8.14.5/8.14.5/Submit) id u22MuC3J002078; Wed, 2 Mar 2016 14:56:12 -0800 From: David Daney To: Will Deacon , linux-arm-kernel@lists.infradead.org, Rob Herring , Frank Rowand , Grant Likely , Pawel Moll , Ian Campbell , Kumar Gala , Ganapatrao Kulkarni , Robert Richter , Ard Biesheuvel , Matt Fleming , Mark Rutland , Catalin Marinas Subject: [PATCH v13 1/6] efi: ARM/arm64: ignore DT memory nodes instead of removing them Date: Wed, 2 Mar 2016 14:55:57 -0800 Message-Id: <1456959362-2036-2-git-send-email-ddaney.cavm@gmail.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1456959362-2036-1-git-send-email-ddaney.cavm@gmail.com> References: <1456959362-2036-1-git-send-email-ddaney.cavm@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160302_145638_634430_EECBCEC1 X-CRM114-Status: GOOD ( 16.32 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2607:f8b0:400e:c00:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (ddaney.cavm[at]gmail.com) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, David Daney MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org From: Ard Biesheuvel There are two problems with the UEFI stub DT memory node removal routine: - it deletes nodes as it traverses the tree, which happens to work but is not supported, as deletion invalidates the node iterator; - deleting memory nodes entirely may discard annotations in the form of additional properties on the nodes. Since the discovery of DT memory nodes occurs strictly before the UEFI init sequence, we can simply clear the memblock memory table before parsing the UEFI memory map. This way, it is no longer necessary to remove the nodes, so we can remove that logic from the stub as well. Signed-off-by: Ard Biesheuvel Signed-off-by: David Daney --- drivers/firmware/efi/arm-init.c | 8 ++++++++ drivers/firmware/efi/libstub/fdt.c | 24 +----------------------- 2 files changed, 9 insertions(+), 23 deletions(-) -- 1.8.3.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c index 9e15d57..40c9d85 100644 --- a/drivers/firmware/efi/arm-init.c +++ b/drivers/firmware/efi/arm-init.c @@ -143,6 +143,14 @@ static __init void reserve_regions(void) if (efi_enabled(EFI_DBG)) pr_info("Processing EFI memory map:\n"); + /* + * Discard memblocks discovered so far: if there are any at this + * point, they originate from memory nodes in the DT, and UEFI + * uses its own memory map instead. + */ + memblock_dump_all(); + memblock_remove(0, ULLONG_MAX); + for_each_efi_memory_desc(&memmap, md) { paddr = md->phys_addr; npages = md->num_pages; diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c index cf7b7d4..9df1560 100644 --- a/drivers/firmware/efi/libstub/fdt.c +++ b/drivers/firmware/efi/libstub/fdt.c @@ -24,7 +24,7 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt, unsigned long map_size, unsigned long desc_size, u32 desc_ver) { - int node, prev, num_rsv; + int node, num_rsv; int status; u32 fdt_val32; u64 fdt_val64; @@ -54,28 +54,6 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt, goto fdt_set_fail; /* - * Delete any memory nodes present. We must delete nodes which - * early_init_dt_scan_memory may try to use. - */ - prev = 0; - for (;;) { - const char *type; - int len; - - node = fdt_next_node(fdt, prev, NULL); - if (node < 0) - break; - - type = fdt_getprop(fdt, node, "device_type", &len); - if (type && strncmp(type, "memory", len) == 0) { - fdt_del_node(fdt, node); - continue; - } - - prev = node; - } - - /* * Delete all memory reserve map entries. When booting via UEFI, * kernel will use the UEFI memory map to find reserved regions. */