From patchwork Wed Mar 11 16:00:20 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 45688 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f198.google.com (mail-wi0-f198.google.com [209.85.212.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id F2128214BF for ; Wed, 11 Mar 2015 16:00:58 +0000 (UTC) Received: by wivz2 with SMTP id z2sf8011402wiv.1 for ; Wed, 11 Mar 2015 09:00:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=JyXtB3P3K2qZuFjgjqf7eV1CwupLO7RlXArdKdT4jRM=; b=JX7orpdMO5ToYKMXXZSUjy+P/eMERPBx4fmbbLPn22c5oB81nvrDvUdEk/UjLLci5R /Vci5ctZ+4uOUp6FqiEku3eKu73lbSc3JP1bB30wf9tnDdZBmdrzkLPjgip3Kamd/mlZ 3c2E3xwi+yavjJBGH5roVJqctAyJEVgL9X1IaPPFCOBDKO4b9RatybsSin6l6VTEI9R/ a7u2a4MFGPlwzV+ZWAWKs4qv3UL/8ClaXQf3JYtYz1LKBK1kA9ybdkeVgWDo0RNB0xmR hibD4aeAC2g5TEaxyKxOkZlApa+iRp6KSS8sDDv7lxtqK5FUja+8NOwSIEEFruKVsUzI dY8A== X-Gm-Message-State: ALoCoQk7DYcGGCK6s2M7HA4DJ+qrasuX8Mzocc1eDyJx26NOK1eBG7fMxPGbzWKKp5y45+mTw15b X-Received: by 10.112.13.228 with SMTP id k4mr5505323lbc.8.1426089658175; Wed, 11 Mar 2015 09:00:58 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.21.33 with SMTP id s1ls207807lae.40.gmail; Wed, 11 Mar 2015 09:00:58 -0700 (PDT) X-Received: by 10.112.98.201 with SMTP id ek9mr35436662lbb.68.1426089658005; Wed, 11 Mar 2015 09:00:58 -0700 (PDT) Received: from mail-lb0-f172.google.com (mail-lb0-f172.google.com. [209.85.217.172]) by mx.google.com with ESMTPS id eq5si2621531lac.66.2015.03.11.09.00.57 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Mar 2015 09:00:57 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.172 as permitted sender) client-ip=209.85.217.172; Received: by lbiz11 with SMTP id z11so9934679lbi.3 for ; Wed, 11 Mar 2015 09:00:57 -0700 (PDT) X-Received: by 10.112.130.100 with SMTP id od4mr12536949lbb.86.1426089657890; Wed, 11 Mar 2015 09:00:57 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.35.133 with SMTP id h5csp2869441lbj; Wed, 11 Mar 2015 09:00:56 -0700 (PDT) X-Received: by 10.70.98.197 with SMTP id ek5mr80286514pdb.104.1426089644770; Wed, 11 Mar 2015 09:00:44 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id cm5si6042889pdb.228.2015.03.11.09.00.43; Wed, 11 Mar 2015 09:00:44 -0700 (PDT) Received-SPF: none (google.com: devicetree-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751239AbbCKQAn (ORCPT + 5 others); Wed, 11 Mar 2015 12:00:43 -0400 Received: from mail-wi0-f175.google.com ([209.85.212.175]:46296 "EHLO mail-wi0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751423AbbCKQAm (ORCPT ); Wed, 11 Mar 2015 12:00:42 -0400 Received: by wiwh11 with SMTP id h11so12960413wiw.5 for ; Wed, 11 Mar 2015 09:00:41 -0700 (PDT) X-Received: by 10.180.80.9 with SMTP id n9mr80007834wix.34.1426089641543; Wed, 11 Mar 2015 09:00:41 -0700 (PDT) Received: from ards-macbook-pro.local ([213.143.60.209]) by mx.google.com with ESMTPSA id l6sm5990041wjx.33.2015.03.11.09.00.38 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 11 Mar 2015 09:00:40 -0700 (PDT) From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org, robh@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, linux@arm.linux.org.uk, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org Cc: Ard Biesheuvel Subject: [PATCH v2 5/5] arm64/efi: adapt to relaxed FDT placement requirements Date: Wed, 11 Mar 2015 17:00:20 +0100 Message-Id: <1426089620-9459-6-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1426089620-9459-1-git-send-email-ard.biesheuvel@linaro.org> References: <1426089620-9459-1-git-send-email-ard.biesheuvel@linaro.org> Sender: devicetree-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: devicetree@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: ard.biesheuvel@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.172 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , With the relaxed FDT placement requirements in place, we can change the allocation strategy used by the stub to put the FDT image higher up in memory. At the same time, reduce the minimal alignment to a power of 2 upper bound of the size: this way, we are still guaranteed not to cross a 2 MB boundary, but will potentially waste less memory. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/efi.h | 8 +++----- drivers/firmware/efi/libstub/arm-stub.c | 5 ++--- drivers/firmware/efi/libstub/efistub.h | 1 - drivers/firmware/efi/libstub/fdt.c | 10 +++------- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h index ef572206f1c3..6f526fcc6b70 100644 --- a/arch/arm64/include/asm/efi.h +++ b/arch/arm64/include/asm/efi.h @@ -39,12 +39,10 @@ extern void efi_init(void); /* arch specific definitions used by the stub code */ /* - * AArch64 requires the DTB to be 8-byte aligned in the first 512MiB from - * start of kernel and may not cross a 2MiB boundary. We set alignment to - * 2MiB so we know it won't cross a 2MiB boundary. + * AArch64 requires the DTB to be 8-byte aligned and not cross a 2MiB boundary. + * So align to a power of 2 upper bound of the FDT size. */ -#define EFI_FDT_ALIGN SZ_2M /* used by allocate_new_fdt_and_exit_boot() */ -#define MAX_FDT_OFFSET SZ_512M +#define EFI_FDT_ALIGN(x) roundup_pow_of_two(x) #define efi_call_early(f, ...) sys_table_arg->boottime->f(__VA_ARGS__) diff --git a/drivers/firmware/efi/libstub/arm-stub.c b/drivers/firmware/efi/libstub/arm-stub.c index dcae482a9a17..f54c76a4fd32 100644 --- a/drivers/firmware/efi/libstub/arm-stub.c +++ b/drivers/firmware/efi/libstub/arm-stub.c @@ -269,9 +269,8 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table, new_fdt_addr = fdt_addr; status = allocate_new_fdt_and_exit_boot(sys_table, handle, - &new_fdt_addr, dram_base + MAX_FDT_OFFSET, - initrd_addr, initrd_size, cmdline_ptr, - fdt_addr, fdt_size); + &new_fdt_addr, initrd_addr, initrd_size, + cmdline_ptr, fdt_addr, fdt_size); /* * If all went well, we need to return the FDT address to the diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h index 47437b16b186..c8e096094ea9 100644 --- a/drivers/firmware/efi/libstub/efistub.h +++ b/drivers/firmware/efi/libstub/efistub.h @@ -35,7 +35,6 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt, efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table, void *handle, unsigned long *new_fdt_addr, - unsigned long max_addr, u64 initrd_addr, u64 initrd_size, char *cmdline_ptr, unsigned long fdt_addr, diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c index 91da56c4fd54..48218e91cce1 100644 --- a/drivers/firmware/efi/libstub/fdt.c +++ b/drivers/firmware/efi/libstub/fdt.c @@ -165,10 +165,6 @@ fdt_set_fail: return EFI_LOAD_ERROR; } -#ifndef EFI_FDT_ALIGN -#define EFI_FDT_ALIGN EFI_PAGE_SIZE -#endif - /* * Allocate memory for a new FDT, then add EFI, commandline, and * initrd related fields to the FDT. This routine increases the @@ -186,7 +182,6 @@ fdt_set_fail: efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table, void *handle, unsigned long *new_fdt_addr, - unsigned long max_addr, u64 initrd_addr, u64 initrd_size, char *cmdline_ptr, unsigned long fdt_addr, @@ -223,8 +218,9 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table, */ new_fdt_size = fdt_size + EFI_PAGE_SIZE; while (1) { - status = efi_high_alloc(sys_table, new_fdt_size, EFI_FDT_ALIGN, - new_fdt_addr, max_addr); + status = efi_high_alloc(sys_table, new_fdt_size, + EFI_FDT_ALIGN(new_fdt_size), + new_fdt_addr, ULONG_MAX); if (status != EFI_SUCCESS) { pr_efi_err(sys_table, "Unable to allocate memory for new device tree.\n"); goto fail;