From patchwork Wed Feb 26 01:10:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11405069 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E954F92A for ; Wed, 26 Feb 2020 01:11:08 +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 BD47922464 for ; Wed, 26 Feb 2020 01:11:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UgQ+YJpc"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="QAq2RNJN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BD47922464 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NpdZVOtbcU+Cf9LPioVAjmkX3ANTVd6+AWy1oktColM=; b=UgQ+YJpcet7MQk oOQ29vW2mPT0HjqTA/GtI7nU5Jnh3fXtw+LLuwFlDZ5IoPfFcwlXfrIQLilkjsK0byykYoCRB9JfZ HN9eRP4gnXLYYDnoSBJuNaJTWF0tR0bfUxhL9Cf3wFlEDXDswjnG/KrgHw4eS8gbYdDEzcbnbhp6a bdM8kjkZP5b8sv57y42ioe0dpGnitgwaWX4iuAzST0//0+UTx3tNVAC1zgfXdOI+gTx//LtC8Aapu w+7qagqvIWebRQ174iJQAwW3yf//oH+AMXUKpaSjUfEA/WIi3moee9j72SgqlVtLBRq3Ipzmof5ae w71fb+cJt8uEkN1CidJg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE8-0006qz-Kk; Wed, 26 Feb 2020 01:11:04 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE3-0006kU-OC for linux-riscv@lists.infradead.org; Wed, 26 Feb 2020 01:11:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582679465; x=1614215465; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bpfOWeCDP3qbnbScpAF1BlT5s86+7Hl4XNmrh2YhN1Y=; b=QAq2RNJNU8yU9Z/1BNLNnRpNQucJsz/nFUGIvchdKfZIVPYg8pjH1Rvz SLp/wUEL+QrOuPSGbXgJOUh9Ry0wCPm/qlHUmXtTQK1ToIX1Hl7U7+1X0 WicYpuTkLF1rwHCMhDFzMCqmeGuH7T5eFA2rjrYlaUp0Ha3RBY8liclum +jGRPTMrpJt9NCuNEzFYhrG2LLYPDrFoJ3nMbnOuEfAKTHKPatjV0pVWd cKq1DdeJDamIlk5+dUr/rlALJkyyBi7xG0NbPlIlgJoWU81VeJCJlvGTA fqTJ3WInZRQVThazGBc0WS/s2EvUoAM06b7jqJUCIlhcfuU7Ha0KdTYhp A==; IronPort-SDR: 3izt+qoXnf0oh7s0vNT7szsoGllWiQ9EmX7ASkzO8NLulfTwdY1utI4LquHqGAUBRHrh1UvW2I Aj1YNqBF4U5IeygWpuuvOUlp56yND60YW8bqiV5tHiWQYIlP9ClSGVZz/E8bgsqYHkFZD/yS38 Clonm2XzIaETSipX8rjGB3bOBZUVdU5ZvZ/+2mH8UtBPHZCWZZwdlZLphoiHxJLeFDf6kbyk4D 6NEXp13YIXhSpKoT/Jlocr7Nd/BA07QtXLn5ar1YyybGzq3iqv192+qSoXy+SUrK53rBFP7hvS h30= X-IronPort-AV: E=Sophos;i="5.70,486,1574092800"; d="scan'208";a="232649051" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Feb 2020 09:10:49 +0800 IronPort-SDR: aemcxlbzTzsLxoT33v+EqpBRwhjavYnH8YyROE6yXH29huFENmNPE/W2pdrMAmPtKnFcYZTS5P NtXlE1v5X+XiQJ4ZJDOYZiAuv2wG5AdAhJQ+TOQzHmBUMFdnTIOJbyTGv3+oIR5Re9pXvdNDI6 yEZ71Jx2it2P98J4hjuZF60zi01UT1EgKx5bgyU1dhz8nf6DjtLG74Wlm8jxfT3c2NOLSfyFui r8XXDLN00VP0UenmpxhFdgiuQSPRJPOyZbsOJ62QPiYrvi7z+reAnvkxi7Otl2/AOjORT2jWPV QU+QzhuLG3ZHa1YopqDHkOEn Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 17:03:15 -0800 IronPort-SDR: S3s5fU4WRnyhz3CFMegfsbMTVbTiYo7e+DJDkRNBhGN+af39g/4653NJ55fbwl3ZwLTEzxeGQ6 0y7u6IZK+LHZkkSvPjJnRkL1yQqHW/4zI49n1HCZC7R4N3Fc/NayLWAwkerOQ42NACl7mypfNH ZOyi4Vbm8bSpydzxyBVBp5DQaeBB1MMoLtc1FZ0G1R5UeXfaxKMlmpFEXxw1C8kyajrZSPdg8C GkY1aoNnADAN4NWnsJcQ0zgtxF1aPzxDBs1DMosaiomiu4NU1qr3nOAsuYJlcVuxgw9vvf7gO3 OlM= WDCIronportException: Internal Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Feb 2020 17:10:47 -0800 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/5] efi: Move arm-stub to a common file Date: Tue, 25 Feb 2020 17:10:33 -0800 Message-Id: <20200226011037.7179-2-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200226011037.7179-1-atish.patra@wdc.com> References: <20200226011037.7179-1-atish.patra@wdc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200225_171059_827566_4904CB66 X-CRM114-Status: GOOD ( 16.32 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kate Stewart , linux-efi@vger.kernel.org, Ard Biesheuvel , Catalin Marinas , Linus Walleij , Russell King , Atish Patra , Mauro Carvalho Chehab , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , "Chang, Abner \(HPS SW/FW Technologist\)" , Michal Simek , Mike Rapoport , Greentime Hu , Borislav Petkov , Mao Han , daniel.schaefer@hpe.com, Albert Ou , Kees Cook , Arnd Bergmann , Alexios Zavras , Alexander Graf , Paul Walmsley , Thomas Gleixner , Allison Randal , "leif@nuviainc.com" , Greg Kroah-Hartman , Anup Patel , Palmer Dabbelt , Paolo Bonzini , Andrew Morton Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Most of the arm-stub code is written in an architecture independent manner. As a result, RISC-V can reuse most of the arm-stub code. Rename the arm-stub.c to efi-stub.c so that ARM, ARM64 and RISC-V can use it. This patch doesn't introduce any functional changes. Signed-off-by: Atish Patra --- arch/arm/Kconfig | 2 +- arch/arm64/Kconfig | 2 +- drivers/firmware/efi/Kconfig | 6 +++--- drivers/firmware/efi/libstub/Makefile | 12 ++++++------ .../firmware/efi/libstub/{arm-stub.c => efi-stub.c} | 7 ++++++- 5 files changed, 17 insertions(+), 12 deletions(-) rename drivers/firmware/efi/libstub/{arm-stub.c => efi-stub.c} (98%) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 97864aabc2a6..9931fea06076 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1955,7 +1955,7 @@ config EFI select UCS2_STRING select EFI_PARAMS_FROM_FDT select EFI_STUB - select EFI_ARMSTUB + select EFI_GENERIC_ARCH_STUB select EFI_RUNTIME_WRAPPERS ---help--- This option provides support for runtime services provided diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 0b30e884e088..ae776d8ef2f9 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1720,7 +1720,7 @@ config EFI select EFI_PARAMS_FROM_FDT select EFI_RUNTIME_WRAPPERS select EFI_STUB - select EFI_ARMSTUB + select EFI_GENERIC_ARCH_STUB default y help This option provides support for runtime services provided diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig index ecc83e2f032c..1bcedb7812da 100644 --- a/drivers/firmware/efi/Kconfig +++ b/drivers/firmware/efi/Kconfig @@ -106,12 +106,12 @@ config EFI_PARAMS_FROM_FDT config EFI_RUNTIME_WRAPPERS bool -config EFI_ARMSTUB +config EFI_GENERIC_ARCH_STUB bool -config EFI_ARMSTUB_DTB_LOADER +config EFI_STUB_DTB_LOADER bool "Enable the DTB loader" - depends on EFI_ARMSTUB + depends on EFI_GENERIC_ARCH_STUB default y help Select this config option to add support for the dtb= command diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile index 4d6246c6f651..2c5b76787126 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -22,7 +22,7 @@ cflags-$(CONFIG_ARM) := $(subst $(CC_FLAGS_FTRACE),,$(KBUILD_CFLAGS)) \ -fno-builtin -fpic \ $(call cc-option,-mno-single-pic-base) -cflags-$(CONFIG_EFI_ARMSTUB) += -I$(srctree)/scripts/dtc/libfdt +cflags-$(CONFIG_EFI_GENERIC_ARCH_STUB) += -I$(srctree)/scripts/dtc/libfdt KBUILD_CFLAGS := $(cflags-y) -DDISABLE_BRANCH_PROFILING \ -include $(srctree)/drivers/firmware/efi/libstub/hidden.h \ @@ -44,13 +44,13 @@ lib-y := efi-stub-helper.o gop.o secureboot.o tpm.o \ skip_spaces.o lib-cmdline.o lib-ctype.o # include the stub's generic dependencies from lib/ when building for ARM/arm64 -arm-deps-y := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c +efi-deps-y := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c $(obj)/lib-%.o: $(srctree)/lib/%.c FORCE $(call if_changed_rule,cc_o_c) -lib-$(CONFIG_EFI_ARMSTUB) += arm-stub.o fdt.o string.o \ - $(patsubst %.c,lib-%.o,$(arm-deps-y)) +lib-$(CONFIG_EFI_GENERIC_ARCH_STUB) += efi-stub.o fdt.o string.o \ + $(patsubst %.c,lib-%.o,$(efi-deps-y)) lib-$(CONFIG_ARM) += arm32-stub.o lib-$(CONFIG_ARM64) += arm64-stub.o @@ -72,8 +72,8 @@ CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) # a verification pass to see if any absolute relocations exist in any of the # object files. # -extra-$(CONFIG_EFI_ARMSTUB) := $(lib-y) -lib-$(CONFIG_EFI_ARMSTUB) := $(patsubst %.o,%.stub.o,$(lib-y)) +extra-$(CONFIG_EFI_GENERIC_ARCH_STUB) := $(lib-y) +lib-$(CONFIG_EFI_GENERIC_ARCH_STUB) := $(patsubst %.o,%.stub.o,$(lib-y)) STUBCOPY_FLAGS-$(CONFIG_ARM64) += --prefix-alloc-sections=.init \ --prefix-symbols=__efistub_ diff --git a/drivers/firmware/efi/libstub/arm-stub.c b/drivers/firmware/efi/libstub/efi-stub.c similarity index 98% rename from drivers/firmware/efi/libstub/arm-stub.c rename to drivers/firmware/efi/libstub/efi-stub.c index 13559c7e6643..b87c3f70430c 100644 --- a/drivers/firmware/efi/libstub/arm-stub.c +++ b/drivers/firmware/efi/libstub/efi-stub.c @@ -15,6 +15,7 @@ #include "efistub.h" +#if IS_ENABLED(CONFIG_ARM64) || IS_ENABLED(CONFIG_ARM) /* * This is the base address at which to start allocating virtual memory ranges * for UEFI Runtime Services. This is in the low TTBR0 range so that we can use @@ -27,6 +28,10 @@ * entire footprint of the UEFI runtime services memory regions) */ #define EFI_RT_VIRTUAL_BASE SZ_512M +#else +#define EFI_RT_VIRTUAL_BASE SZ_2G +#endif + #define EFI_RT_VIRTUAL_SIZE SZ_512M #ifdef CONFIG_ARM64 @@ -243,7 +248,7 @@ efi_status_t efi_entry(efi_handle_t handle, efi_system_table_t *sys_table_arg) * 'dtb=' unless UEFI Secure Boot is disabled. We assume that secure * boot is enabled if we can't determine its state. */ - if (!IS_ENABLED(CONFIG_EFI_ARMSTUB_DTB_LOADER) || + if (!IS_ENABLED(CONFIG_EFI_STUB_DTB_LOADER) || secure_boot != efi_secureboot_mode_disabled) { if (strstr(cmdline_ptr, "dtb=")) pr_efi("Ignoring DTB from command line.\n"); From patchwork Wed Feb 26 01:10:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11405071 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C8A8592A for ; Wed, 26 Feb 2020 01:11:10 +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 A62FA24656 for ; Wed, 26 Feb 2020 01:11:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="p3FfBU80"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="O8OZmC6H" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A62FA24656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=W9U1HH6G3PyPrHqVJL6vSnkRZZSSfeja2ShnF63TyPs=; b=p3FfBU80MgqCpv Rod2CfIY4rHPW+lVOhP7u3+SgFjCocDFvYeAHd/Gm1v003riDQZVhN6wbKapwGzXoRk647R8dJUWc gAe9aIboeytQYlKOtzrVJnDXpU79dWmfkc8mMpMtfLFpkjBq/EVW6G+gf84ehceNVXblURGHggOOa vcBoSEJCjTuhKtnNAr/nnszZoBQ1ctpd/fZFIweLSVBT6Fw4MRUInr2TIKdG78sjwCvc/eWLS1oDf t6ChHUcSk0DQPphzGTkgtGBBiMJNToVfl/0qVYkOWnGle4FR7j99ahp1vdR1xA8W5yP8nmCgD4HJq dNjI/QhvcYINMYhvbZ9g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE6-0006or-TE; Wed, 26 Feb 2020 01:11:02 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE3-0006mA-TA for linux-riscv@lists.infradead.org; Wed, 26 Feb 2020 01:11:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582679465; x=1614215465; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=km1VvmnuQj7lRiGCtgFsEfp9xWGhODjFHkqy+jn/5IE=; b=O8OZmC6Hd9aNo/3O3K6qpAYEF/k+6j+VSI59oFMPHfCN9+lVrU9n1250 iQWJzOLZJZTdjocvkm/lbm/CszSsBORKdy4E1m8avDXMnxSw+W0VdnxbG WrdRb+RXYosqfgJdGqhmClaKm8tfMzyyqOJrqfDf5H9zp0XU4uhAnCzdW ABMFho8VqmLBv5sZHUeVwazeaXO3w+FqTfXfQA8Dj59v2gZWpGB9XCWB9 MWh+Mi+djOjE1PomrFp5SxgfOAuPq+6cr+9H/thS2m1C2lSpLhz2O7QRo 5VCir9ZY74ftl4V2JEVvF8PDm6Q+ORiIt0evYqhMJp4jrmfjPlYIJQ5wh Q==; IronPort-SDR: Vem+4DJ8HcTHMNij1h4hOiFaQfz7hjKpPgnNXb+F/WYK5bvkyeFBsmqPVq10fJitqv9dlmN04p h8dk6uzA8tJ+KyNwMr5S4UJNMdmlhNRi/PhLNVYTDbYRezJqkcTEd6bs59J98PF1vcw8lqUh3S WvOPNGsAZMjtwoK19o/zpx+LKMm9CEcf7sbFMD/CTq0qHvHM0YYSmpOpdx5TKGJv7zEv+2xvmd rbjO9HbwlTB6eMP47vjei7rGi5Ay29qgxMLKahN1JLViSbKfK5NbJ/oi7czex+tKITYDKEPXYk cis= X-IronPort-AV: E=Sophos;i="5.70,486,1574092800"; d="scan'208";a="232649056" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Feb 2020 09:10:50 +0800 IronPort-SDR: o+xfKFTajIC3+1vG1oFUk/3MPmAF36IEFXE6flyItdUY/7lp4jef8+Sl0V1GIXYAIPGAAu1Es2 I3ocP1NSOWigDbSW/haWsuHBm/bfwgIaF042qJh4xHTNlYmVpvoM6CfWqsqXxd6g2ZRMGPvX+Q bIzTAspaRlOeg3tpf/W5NeZNtFsnBEo/g5cAi9ASaGhU5i8vUUffietWza17T/serBJWVPrFx1 viGXINh/zEJXmBOw2PuMtl0SMCPT77x0B27fOdTrHP4Dahg9vU+Nb0kLlZynHuwem+YE6W5KQb 72ngN4WB01VHFJRCmhjqwDFr Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 17:03:15 -0800 IronPort-SDR: DStrW9Vd4utZF1pF2XNWrYK8IPP2TZhl9+LTcQRkI2XPIDXj8PnxMlAk3Am8hTYroeihv50UhV 4SLEad5jCpjROgGHafrFxWdpgLOdKBO+quj7ooZixI2Qdq3/mXqT9OlNHOWnF4dX6CXw7lsvQv Ntinh3nPQdjW1gL0ZicBlLKgRTF/mxMBLmPGWLr5elcBq9iiOto1mc+/YRX/+KIqNK/8NSBVcS NufJjHjzNoep/YJ1ImXTyy1FTJPijSNLp0bA+Oaochg6T63sTKC+Rdn+phk0Uey0qqKExobdW9 XZA= WDCIronportException: Internal Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Feb 2020 17:10:48 -0800 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [RFC PATCH 2/5] include: pe.h: Add RISC-V related PE definition Date: Tue, 25 Feb 2020 17:10:34 -0800 Message-Id: <20200226011037.7179-3-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200226011037.7179-1-atish.patra@wdc.com> References: <20200226011037.7179-1-atish.patra@wdc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200225_171059_981097_8B2AB951 X-CRM114-Status: UNSURE ( 9.72 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kate Stewart , linux-efi@vger.kernel.org, Ard Biesheuvel , Catalin Marinas , Linus Walleij , Russell King , Atish Patra , Mauro Carvalho Chehab , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , "Chang, Abner \(HPS SW/FW Technologist\)" , Michal Simek , Mike Rapoport , Greentime Hu , Borislav Petkov , Mao Han , daniel.schaefer@hpe.com, Albert Ou , Kees Cook , Arnd Bergmann , Alexios Zavras , Alexander Graf , Paul Walmsley , Thomas Gleixner , Allison Randal , "leif@nuviainc.com" , Greg Kroah-Hartman , Anup Patel , Palmer Dabbelt , Paolo Bonzini , Andrew Morton Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Define RISC-V related machine types. Signed-off-by: Atish Patra Reviewed-by: Ard Biesheuvel --- include/linux/pe.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/pe.h b/include/linux/pe.h index 8ad71d763a77..6a7c497e4b1f 100644 --- a/include/linux/pe.h +++ b/include/linux/pe.h @@ -56,6 +56,9 @@ #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 #define IMAGE_FILE_MACHINE_R4000 0x0166 #define IMAGE_FILE_MACHINE_SH3 0x01a2 +#define IMAGE_FILE_MACHINE_RISCV32 0x5032 +#define IMAGE_FILE_MACHINE_RISCV64 0x5064 +#define IMAGE_FILE_MACHINE_RISCV128 0x5128 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 #define IMAGE_FILE_MACHINE_SH3E 0x01a4 #define IMAGE_FILE_MACHINE_SH4 0x01a6 From patchwork Wed Feb 26 01:10:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11405073 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3D89613A4 for ; Wed, 26 Feb 2020 01:11:13 +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 1B8C424656 for ; Wed, 26 Feb 2020 01:11:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qyMxG3Ow"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="VGd9eO+4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B8C424656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CREg0iZ420gF9e4l45nZua0LY1twAjDYLWDcK5ZW1zM=; b=qyMxG3Ow2yOXs5 qpX0tCysPms1IGzPpSBdsvnOaDS8NhKWbPe3JLZzg1XzmVqovnm/4acaH136uuDSLCiJqF5kGGncU +2+BwRnZRrXKMyGj9Yx2XXth8OHDMqOYQ9DVaEQsm3Q5c/7fpRKXPasCUrTdg6fLzuuLvdOFv6nAG b+75XWh0yJ8fl5VRDdooaSzdWmSF820SWbYYOeI1HpIfh4/Y/Jj8f4U0PWvwlhFjz1SCJTy69Bwc8 pvVKrPnhWou8YBBCoL7qV9DAeU4+1Tx3ox/Sg9WHrreRxVHSN6zIeJ1BF3/bzG6wItnIV1h2Xvsf7 2h0Ic2JcA4rSn/DKFQ1w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lEB-0006v0-Oo; Wed, 26 Feb 2020 01:11:07 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE5-0006mA-AO for linux-riscv@lists.infradead.org; Wed, 26 Feb 2020 01:11:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582679468; x=1614215468; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jG6X4JnNilU/eW30gWfXMqqgjMVBZILEbLLORFCd6Bs=; b=VGd9eO+4BPaITOI9iyG9+QXcoqYBJb4brtvpWtlhapIsL71hhAAUN3ez upjfuWR6liKrxt2nLFHOfU0aVSjZfyWtXGAZ73G0lJireiAxOODM+/afz gTVp5+M3j3ZQ6Tt3B1bDBejpl+2gySt4BzfE+aqZYyDt47AXnNS2jRjeX dWFWFoIda5h6UqWMJz1w9DsAgHgFYfqu4rleGOcSENij1jBovFoy6sEXV iIvXFhL0w2usohecx547X0KiV/ZSLH3SQrO1xDNTPuZnP/HyuqM97kZLk 9mZOAG+1v1itd7RtCC34BXJnhlnBxWyu4tvBcFjzehGNoz3caIhaQCawv w==; IronPort-SDR: jCb615dnWjCMX+QQ06nQ1k7iZyb3ng356F5SFLRHlG6Lbb1K5FINn0e/NCZGkfBvnxmVfXbeMo cz6iFRyOOcRy/q7ct+iMSIhTnpt94Pi7p9TXxHR4ldUjM0MebtGBz43rB10ollGdb3yupYflWU ooMD0bj4CyePPvBLN8wP6NyXBNLaOxHPSvHA4Lopyz/u6Z/V+/RvAIfaUIPprWlPASgkh2vnDN 0ZzdJFnyFjsYmhiMbT+iaGr4PsZNyPJsTSh/ePiAbd+Hw80ofCE5JuWxANJko81u4fELlH8khs 1Vo= X-IronPort-AV: E=Sophos;i="5.70,486,1574092800"; d="scan'208";a="232649064" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Feb 2020 09:10:51 +0800 IronPort-SDR: xq9sIXe1zMNShRABqZ5Bx9t8APeqxlorBUiTaR3yxVl/s13eWwdU7yGmx6pG3W+wqKZNU3DmOy GwEXFBxfnIQX/Cjj8NFCVJHOIOgfXyMtVgPXPUdCwgG+uDw8wmxDgrjVPVnJnc0KCUEH/km1Y1 6qG+B/YfEgr2Uq1PQNRurEr85IKpxGgA8ZOBoC1o1imlYGOfUaUIF9u1ETQ/vbXBMEl2Mba7iy w754l0caKQZfkFp75Wrmx3uiuvbi8hnZZ1fhtD2MUVGIqSr1cBJQvJmzQ/IWShLg0jD23dJatm vWn/KRGKgoK8R9a9kK4NTQiT Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 17:03:16 -0800 IronPort-SDR: uYo8/yrdVKwUzqReGdMdTrQ3dSJmyKvsNgCAiPHd8mBJG5pa8Xkamt42xv+OK0H1Ikp3xGDQsF ftEMYmliGZhro6eqMNQ0uZ1bBq+V5Q3ZnweFEcLHkJYZcjBTj0ZQVSQjLVwhjT/+Cwt7EUky2o SagAFlELftAlMUBYjHpNT5CLhV3eejODZHig/Qt7cIcL4hGTTxcbxzekGU22nJPWuWNIZgzKB2 qhpSaRB6WDIZmTAI0d1zashabLhrnFRJvbfJdAHIQPvWJHVSyPwsz+lpBxLknNeXurWJDtbWfF OZY= WDCIronportException: Internal Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Feb 2020 17:10:48 -0800 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [RFC PATCH 3/5] RISC-V: Define fixmap bindings for generic early ioremap support Date: Tue, 25 Feb 2020 17:10:35 -0800 Message-Id: <20200226011037.7179-4-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200226011037.7179-1-atish.patra@wdc.com> References: <20200226011037.7179-1-atish.patra@wdc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200225_171101_465478_3DE3F993 X-CRM114-Status: GOOD ( 14.39 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kate Stewart , linux-efi@vger.kernel.org, Ard Biesheuvel , Catalin Marinas , Linus Walleij , Russell King , Atish Patra , Mauro Carvalho Chehab , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , "Chang, Abner \(HPS SW/FW Technologist\)" , Michal Simek , Mike Rapoport , Greentime Hu , Borislav Petkov , Mao Han , daniel.schaefer@hpe.com, Albert Ou , Kees Cook , Arnd Bergmann , Alexios Zavras , Alexander Graf , Paul Walmsley , Thomas Gleixner , Allison Randal , "leif@nuviainc.com" , Greg Kroah-Hartman , Anup Patel , Palmer Dabbelt , Paolo Bonzini , Andrew Morton Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org UEFI uses early IO or memory mappings for runtime services before normal ioremap() is usable. This patch only adds minimum necessary fixmap bindings and headers for generic ioremap support to work. Signed-off-by: Atish Patra Acked-by: Ard Biesheuvel --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/riscv/include/asm/fixmap.h | 21 ++++++++++++++++++++- arch/riscv/include/asm/io.h | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 27bfc7947e44..42c122170cfd 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -65,6 +65,7 @@ config RISCV select ARCH_HAS_GCOV_PROFILE_ALL select HAVE_COPY_THREAD_TLS select HAVE_ARCH_KASAN if MMU && 64BIT + select GENERIC_EARLY_IOREMAP config ARCH_MMAP_RND_BITS_MIN default 18 if 64BIT diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index ec0ca8c6ab64..517394390106 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += checksum.h generic-y += compat.h generic-y += device.h generic-y += div64.h +generic-y += early_ioremap.h generic-y += extable.h generic-y += flat.h generic-y += dma.h diff --git a/arch/riscv/include/asm/fixmap.h b/arch/riscv/include/asm/fixmap.h index 42d2c42f3cc9..7a4beb7e29a3 100644 --- a/arch/riscv/include/asm/fixmap.h +++ b/arch/riscv/include/asm/fixmap.h @@ -25,9 +25,28 @@ enum fixed_addresses { #define FIX_FDT_SIZE SZ_1M FIX_FDT_END, FIX_FDT = FIX_FDT_END + FIX_FDT_SIZE / PAGE_SIZE - 1, + FIX_EARLYCON_MEM_BASE, + FIX_PTE, FIX_PMD, - FIX_EARLYCON_MEM_BASE, + /* + * Make sure that it is 2MB aligned. + */ +#define NR_FIX_SZ_2M (SZ_2M / PAGE_SIZE) + FIX_THOLE = NR_FIX_SZ_2M - FIX_PMD - 1, + + __end_of_permanent_fixed_addresses, + /* + * Temporary boot-time mappings, used by early_ioremap(), + * before ioremap() is functional. + */ +#define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE) +#define FIX_BTMAPS_SLOTS 7 +#define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS) + + FIX_BTMAP_END = __end_of_permanent_fixed_addresses, + FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1, + __end_of_fixed_addresses }; diff --git a/arch/riscv/include/asm/io.h b/arch/riscv/include/asm/io.h index 0f477206a4ed..047f414b6948 100644 --- a/arch/riscv/include/asm/io.h +++ b/arch/riscv/include/asm/io.h @@ -14,6 +14,7 @@ #include #include #include +#include /* * MMIO access functions are separated out to break dependency cycles From patchwork Wed Feb 26 01:10:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11405075 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A6B813A4 for ; Wed, 26 Feb 2020 01:11:14 +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 353FB24656 for ; Wed, 26 Feb 2020 01:11:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="GGs047uH"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="pg3J6Ve+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 353FB24656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5cqQX5S3OrJ6hZeNvpYpKN6qBFieh/g6VkybpdS3ETk=; b=GGs047uHApqfSq bwEttqBV/8HBmxOLW/FLhAfwwUNDg/UPZv6R4FNIkPccF+xmM+7lWZayM+Ng5pXtTNaWVVjoOxmoT Itmtu4oUi8gKK0DR4JI2ErR60gxUa8gZmSxwFfRr1EtWiCF4SzEPW7sdGDv45/7FqCJWg7yAJRXYI ywvFmXs/87yNCJvUNDjLC7PtFPbDK16aTuBDVduW9x1tbG4tct48HfUeq7G+GKH0blbxSRdY5CCCn BW7MmaHaeZhx6Jviz/eT1RLux7gwX4Z/7hkilAX99rYtYOyO6pS9QNqo2RkKBMF1meqbTqSk5iZ3X xSIZBD+3b5dbPzXvVRTQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lED-0006xx-Fz; Wed, 26 Feb 2020 01:11:09 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE5-0006kU-DE for linux-riscv@lists.infradead.org; Wed, 26 Feb 2020 01:11:03 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582679468; x=1614215468; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3yBGQvttdSEAFKGRSdgFuVU+yRuthKwHXID+s1ezdFQ=; b=pg3J6Ve+f41T2NxOEpn1loG+/kpJZUa75b2HryITPOBf/Ee982iPELHp rAEp2AVezOIGIvk348/3wAiObvKzBnMAhSCUjeKvxZX4494A2vhB21wLT p+cHOZsi67C/sPwputU5cbpIoI8vMWdl2hJStYUXPIk0VJKZhSLw9P4fu e8pjUGXq4Ehbhy3Y9ydwQ8G1hB3EKehuEDxFFqN4tQVoPJ0U3sLGsJXnC tZcTqGn2KcFDtkI9wB3b0CIJPeKBtduX/X/YBwTbFUQRpEHZRdaYTprM9 8NisZhdFYPRTUOBb5fevMjShMVt8zoEbMRpSkvFVMur3DMXaGt8JBU9b7 A==; IronPort-SDR: O9jTK4idtseY4JeWw8GXdXJA6VHlY+bxSx4oGk8UHn7lvVKcWt6U0E5S2uAHvFs8StXqm9GUIU jseHbHiZWzQHJoUCRqZts8wMnVd/Z/5A3NBU97GTg9zvvaGGFyquio4srRyinVKK13fQn+L72j 3lForAXXbOyWn7UvOATunVmDFcjKsgDYljjroGiQkpSFJWPnsKS3Op5aes6Y5AtgOlxpsayyjw p8+VOZ70BQK4sPJNS9wcj00r2zF5YOoQYlOU5QNP5BL9vIg2jkw3CSyAnKx25lwzdS8Ymq4yf+ xBs= X-IronPort-AV: E=Sophos;i="5.70,486,1574092800"; d="scan'208";a="232649071" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Feb 2020 09:10:52 +0800 IronPort-SDR: MrjmroW7G8NMLAKuHst7msac58rWLATiTv3Qrpoo9GsyDFOC5cu0pZwrN/+IsKSbpoB7p+v71S e76EpyhV6bDYzkOpC6e1P0P1qvFuZ/oeDWzEyMWVMWHaoe2N98rPwVi87ure//WY3kfbRrdhZ9 c2dUbEnQiL6kWbLODeMNMMWb4JjtqvVTGYv6Fpabd7aD3km2q+sJOzwcuV9DrFZXhCyAXzbKVg Jv40NPwoVB2YCN04z6Bw9nHCHTVFaJhKHO9I2dSC33hNgOzTXH2BYIFkyfVdUwE1ZtQTqfT1qR npDDj0ImmQG4JouretmroUG4 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 17:03:17 -0800 IronPort-SDR: og7j/OS81BFwUHnTHE1ytOuD7vKsDQ6dQbZdtqDkt8OGAhTEaFY3MZ2yuRis4PjdVmSwSlbGtG m24pUTAfdX+tM3DOy+9ABWRpCLoKzRW2cBDWiPRwEoESJiaEd9YpzdFF5kpG0a3ViwstkPBRHd rsO1qCZJr0D4w/bVquxARsw9vcUPuiG0FfB6Hg+HDe+97EqpXb5f4mMuzHvUSwl/Bhbc/Ya46A QBqDtUl0e0OhNZKeGGi+AeVWe9iNL/42V7qjUJfgYXs/40zm3O7X9qe6mUfVTx+mkq9s10017a 3QU= WDCIronportException: Internal Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Feb 2020 17:10:49 -0800 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [RFC PATCH 4/5] RISC-V: Add PE/COFF header for EFI stub Date: Tue, 25 Feb 2020 17:10:36 -0800 Message-Id: <20200226011037.7179-5-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200226011037.7179-1-atish.patra@wdc.com> References: <20200226011037.7179-1-atish.patra@wdc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200225_171101_557026_208DC86E X-CRM114-Status: GOOD ( 24.88 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kate Stewart , linux-efi@vger.kernel.org, Ard Biesheuvel , Catalin Marinas , Linus Walleij , Russell King , Atish Patra , Mauro Carvalho Chehab , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , "Chang, Abner \(HPS SW/FW Technologist\)" , Michal Simek , Mike Rapoport , Greentime Hu , Borislav Petkov , Mao Han , daniel.schaefer@hpe.com, Albert Ou , Kees Cook , Arnd Bergmann , Alexios Zavras , Alexander Graf , Paul Walmsley , Thomas Gleixner , Allison Randal , "leif@nuviainc.com" , Greg Kroah-Hartman , Anup Patel , Palmer Dabbelt , Paolo Bonzini , Andrew Morton Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Linux kernel Image can appear as an EFI application With appropriate PE/COFF header fields in the beginning of the Image header. An EFI application loader can directly load a Linux kernel Image and an EFI stub residing in kernel can boot Linux kernel directly. Add the necessary PE/COFF header. Signed-off-by: Atish Patra --- arch/riscv/include/asm/Kbuild | 1 - arch/riscv/include/asm/sections.h | 13 ++++ arch/riscv/kernel/Makefile | 4 ++ arch/riscv/kernel/efi-header.S | 107 ++++++++++++++++++++++++++++++ arch/riscv/kernel/head.S | 15 +++++ arch/riscv/kernel/image-vars.h | 52 +++++++++++++++ arch/riscv/kernel/vmlinux.lds.S | 27 ++++++-- 7 files changed, 212 insertions(+), 7 deletions(-) create mode 100644 arch/riscv/include/asm/sections.h create mode 100644 arch/riscv/kernel/efi-header.S create mode 100644 arch/riscv/kernel/image-vars.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index 517394390106..ef797fe44934 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -24,7 +24,6 @@ generic-y += local64.h generic-y += mm-arch-hooks.h generic-y += percpu.h generic-y += preempt.h -generic-y += sections.h generic-y += serial.h generic-y += shmparam.h generic-y += topology.h diff --git a/arch/riscv/include/asm/sections.h b/arch/riscv/include/asm/sections.h new file mode 100644 index 000000000000..3a9971b1210f --- /dev/null +++ b/arch/riscv/include/asm/sections.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + */ +#ifndef __ASM_SECTIONS_H +#define __ASM_SECTIONS_H + +#include + +extern char _start[]; +extern char _start_kernel[]; + +#endif /* __ASM_SECTIONS_H */ diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile index 9601ac907f70..471b1c73f77d 100644 --- a/arch/riscv/kernel/Makefile +++ b/arch/riscv/kernel/Makefile @@ -29,6 +29,10 @@ obj-y += cacheinfo.o obj-$(CONFIG_MMU) += vdso.o vdso/ obj-$(CONFIG_RISCV_M_MODE) += clint.o +OBJCOPYFLAGS := --prefix-symbols=__efistub_ +$(obj)/%.stub.o: $(obj)/%.o FORCE + $(call if_changed,objcopy) + obj-$(CONFIG_FPU) += fpu.o obj-$(CONFIG_SMP) += smpboot.o obj-$(CONFIG_SMP) += smp.o diff --git a/arch/riscv/kernel/efi-header.S b/arch/riscv/kernel/efi-header.S new file mode 100644 index 000000000000..af959e748d93 --- /dev/null +++ b/arch/riscv/kernel/efi-header.S @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2019 Western Digital Corporation or its affiliates. + * Adapted from arch/arm64/kernel/efi-header.S + */ + +#include +#include + + .macro __EFI_PE_HEADER + .long PE_MAGIC +coff_header: + .short IMAGE_FILE_MACHINE_RISCV64 // Machine + .short section_count // NumberOfSections + .long 0 // TimeDateStamp + .long 0 // PointerToSymbolTable + .long 0 // NumberOfSymbols + .short section_table - optional_header // SizeOfOptionalHeader + .short IMAGE_FILE_DEBUG_STRIPPED | \ + IMAGE_FILE_EXECUTABLE_IMAGE | \ + IMAGE_FILE_LINE_NUMS_STRIPPED // Characteristics + +optional_header: + .short PE_OPT_MAGIC_PE32PLUS // PE32+ format + .byte 0x02 // MajorLinkerVersion + .byte 0x14 // MinorLinkerVersion + .long __text_end - efi_header_end // SizeOfCode + .long _end - __text_end // SizeOfInitializedData + .long 0 // SizeOfUninitializedData + .long __efistub_efi_entry - _start // AddressOfEntryPoint + .long efi_header_end - _start // BaseOfCode + +extra_header_fields: + .quad 0 // ImageBase + .long SZ_4K // SectionAlignment + .long PECOFF_FILE_ALIGNMENT // FileAlignment + .short 0 // MajorOperatingSystemVersion + .short 0 // MinorOperatingSystemVersion + .short 0 // MajorImageVersion + .short 0 // MinorImageVersion + .short 0 // MajorSubsystemVersion + .short 0 // MinorSubsystemVersion + .long 0 // Win32VersionValue + + .long _end - _start // SizeOfImage + + // Everything before the kernel image is considered part of the header + .long efi_header_end - _start // SizeOfHeaders + .long 0 // CheckSum + .short IMAGE_SUBSYSTEM_EFI_APPLICATION // Subsystem + .short 0 // DllCharacteristics + .quad 0 // SizeOfStackReserve + .quad 0 // SizeOfStackCommit + .quad 0 // SizeOfHeapReserve + .quad 0 // SizeOfHeapCommit + .long 0 // LoaderFlags + .long (section_table - .) / 8 // NumberOfRvaAndSizes + + .quad 0 // ExportTable + .quad 0 // ImportTable + .quad 0 // ResourceTable + .quad 0 // ExceptionTable + .quad 0 // CertificationTable + .quad 0 // BaseRelocationTable + + // Section table +section_table: + .ascii ".text\0\0\0" + .long __text_end - efi_header_end // VirtualSize + .long efi_header_end - _start // VirtualAddress + .long __text_end - efi_header_end // SizeOfRawData + .long efi_header_end - _start // PointerToRawData + + .long 0 // PointerToRelocations + .long 0 // PointerToLineNumbers + .short 0 // NumberOfRelocations + .short 0 // NumberOfLineNumbers + .long IMAGE_SCN_CNT_CODE | \ + IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_MEM_EXECUTE // Characteristics + + .ascii ".data\0\0\0" + .long __data_virt_size // VirtualSize + .long __text_end - _start // VirtualAddress + .long __data_raw_size // SizeOfRawData + .long __text_end - _start // PointerToRawData + + .long 0 // PointerToRelocations + .long 0 // PointerToLineNumbers + .short 0 // NumberOfRelocations + .short 0 // NumberOfLineNumbers + .long IMAGE_SCN_CNT_INITIALIZED_DATA | \ + IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_MEM_WRITE // Characteristics + + .set section_count, (. - section_table) / 40 + + /* + * EFI will load .text onwards at the 4k section alignment + * described in the PE/COFF header. To ensure that instruction + * sequences using an adrp and a :lo12: immediate will function + * correctly at this alignment, we must ensure that .text is + * placed at a 4k boundary in the Image to begin with. + */ + .align 12 +efi_header_end: + .endm diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index ac5b0e0a02f6..835dc76de285 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -13,6 +13,7 @@ #include #include #include +#include "efi-header.S" __HEAD ENTRY(_start) @@ -22,10 +23,17 @@ ENTRY(_start) * Do not modify it without modifying the structure and all bootloaders * that expects this header format!! */ +#ifdef CONFIG_EFI + /* + * This instruction decodes to "MZ" ASCII required by UEFI. + */ + li s4,-13 +#else /* jump to start kernel */ j _start_kernel /* reserved */ .word 0 +#endif .balign 8 #if __riscv_xlen == 64 /* Image load offset(2MB) from start of RAM */ @@ -43,7 +51,14 @@ ENTRY(_start) .ascii RISCV_IMAGE_MAGIC .balign 4 .ascii RISCV_IMAGE_MAGIC2 +#ifdef CONFIG_EFI + .word pe_head_start - _start +pe_head_start: + + __EFI_PE_HEADER +#else .word 0 +#endif .align 2 #ifdef CONFIG_MMU diff --git a/arch/riscv/kernel/image-vars.h b/arch/riscv/kernel/image-vars.h new file mode 100644 index 000000000000..57abb85065e9 --- /dev/null +++ b/arch/riscv/kernel/image-vars.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Linker script variables to be set after section resolution, as + * ld.lld does not like variables assigned before SECTIONS is processed. + * Based on arch/arm64/kerne/image-vars.h + */ +#ifndef __RISCV_KERNEL_IMAGE_VARS_H +#define __RISCV_KERNEL_IMAGE_VARS_H + +#ifndef LINKER_SCRIPT +#error This file should only be included in vmlinux.lds.S +#endif + +#ifdef CONFIG_EFI + +__efistub_stext_offset = _start_kernel - _start; + +/* + * The EFI stub has its own symbol namespace prefixed by __efistub_, to + * isolate it from the kernel proper. The following symbols are legally + * accessed by the stub, so provide some aliases to make them accessible. + * Only include data symbols here, or text symbols of functions that are + * guaranteed to be safe when executed at another offset than they were + * linked at. The routines below are all implemented in assembler in a + * position independent manner + */ +__efistub_memcmp = memcmp; +__efistub_memchr = memchr; +__efistub_memcpy = memcpy; +__efistub_memmove = memmove; +__efistub_memset = memset; +__efistub_strlen = strlen; +__efistub_strnlen = strnlen; +__efistub_strcmp = strcmp; +__efistub_strncmp = strncmp; +__efistub_strrchr = strrchr; + +#ifdef CONFIG_KASAN +__efistub___memcpy = memcpy; +__efistub___memmove = memmove; +__efistub___memset = memset; +#endif + +__efistub__start = _start; +__efistub__start_kernel = _start_kernel; +__efistub__end = _end; +__efistub__edata = _edata; +__efistub_screen_info = screen_info; + +#endif + +#endif /* __RISCV_KERNEL_IMAGE_VARS_H */ diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S index b32640300d07..933b9e9a4b39 100644 --- a/arch/riscv/kernel/vmlinux.lds.S +++ b/arch/riscv/kernel/vmlinux.lds.S @@ -9,6 +9,7 @@ #include #include #include +#include "image-vars.h" #include OUTPUT_ARCH(riscv) @@ -16,6 +17,14 @@ ENTRY(_start) jiffies = jiffies_64; +PECOFF_FILE_ALIGNMENT = 0x200; +#ifdef CONFIG_EFI +#define PECOFF_EDATA_PADDING \ + .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); } +#else +#define PECOFF_EDATA_PADDING +#endif + SECTIONS { /* Beginning of code and text segment */ @@ -26,12 +35,15 @@ SECTIONS __init_begin = .; INIT_TEXT_SECTION(PAGE_SIZE) + + /* Start of data section */ INIT_DATA_SECTION(16) /* we have to discard exit text and such at runtime, not link time */ .exit.text : { EXIT_TEXT } + .exit.data : { EXIT_DATA @@ -54,7 +66,8 @@ SECTIONS _etext = .; } - /* Start of data section */ + __text_end = .; + _sdata = .; RO_DATA(L1_CACHE_BYTES) .srodata : { @@ -65,19 +78,21 @@ SECTIONS .sdata : { __global_pointer$ = . + 0x800; *(.sdata*) - /* End of data section */ - _edata = .; *(.sbss*) } - - BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) - + PECOFF_EDATA_PADDING + __data_raw_size = ABSOLUTE(. - __text_end); + /* End of data section */ + _edata = .; EXCEPTION_TABLE(0x10) .rel.dyn : { *(.rel.dyn*) } + BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) + __data_virt_size = ABSOLUTE(. - __text_end); + _end = .; STABS_DEBUG From patchwork Wed Feb 26 01:10:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11405077 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D8ECB92A for ; Wed, 26 Feb 2020 01:11:16 +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 B44762465D for ; Wed, 26 Feb 2020 01:11:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="QRKiFxZR"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="mxYpELtG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B44762465D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+patchwork-linux-riscv=patchwork.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:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=e8ExK6GCglfxeJV8BimnRbC9hIQlH6G2wpsdPngvKtU=; b=QRKiFxZRtPRKQh xeG5Tefx6xXogfA4JnPVzpujr3KZG6mtFPbbSkHz5arJHP1HT8ZdoaBynFFLP7/m+KgOJKhj01ivh 9X2xXC8WUrWPQAvRWUFHkdhTKPkqiK1cwNJLQKWzQEP1SIMIhOwDsiw4Pbm7lxXgy0BStexf674iX 3BE0snJeFtvU1kJZsyCIrOogOH6l1uQ7OK6YHGZ/HvXe6FjHjWKYm1k84FjK+4TCZeoEV9jurk0Lk KlkoDKRY2AkBiwL96z2jiTm0hjaES1sI3ZsVS9ta6c6yMrW1ZKeudbIdBD0uRw/r6xq7Zy+lwfdvg kSsJcfoaFIWl7JMCZtMw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lEG-00072N-Ic; Wed, 26 Feb 2020 01:11:12 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j6lE5-0006nA-Fo for linux-riscv@lists.infradead.org; Wed, 26 Feb 2020 01:11:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1582679468; x=1614215468; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yvp7JbTAQq6IiOaxcY3rqmzJZBWNbV6pzkO60Mdeefs=; b=mxYpELtGjOwTfTWMsIWTSzqLNbkTAHs7QpUH/zEk4UjBCK858kSSY0T+ FtWvCj5y+IzS9gSUc9f3IX1Vnqm2H0yFf+h2xqg3JXLF/G7FLYjxOD+ON 2QPSuqHTd3EtR3n7qwUFLLYO/cVBAKWB2xSWBuU6wl5fWDMsj+OPlyolj /PGUZ8wJzwv4JO57gl+Xi8u/dT7Qw3TK72ou8TjS7RbsZ6swywRiDVsfs kjjk2Kde2XQrTqahrqGGSwr/2PxhTW+EJob7vpWG6a7JXd+Ln4HbFs4R2 rKdDVoJJtxDHREvMDqZ0iKNthLxjQaChzOe4/xTr3ELTy+lL141Dt77rG A==; IronPort-SDR: nE+6WxYDZ+EtI++NeLnxFIwiK8CdT/M3HL2a31Hnm4ehcf8NIVDyixtk05i4dFb/M7t79glPWm VMVvKwvIIXNsZR3umbGBFvTedYFWLwSzIwwRGUBAMKA40YlOnpp9dlCaHK1k/yRzBK4g9YgMBX t11fwV0WTpI9669DefBkHoSJ9UtGCn0e/gIaBMlpBdSFBZmomsiaHmHuRg2LmgOHW3GNQZPSiL G3Yb9i2ffgC2W0EgINU5Q2rK5PbSj3pOxaamuR0QJP0gikA+KuqEd5qnxewWvXLLNKAc1lxyNw IwI= X-IronPort-AV: E=Sophos;i="5.70,486,1574092800"; d="scan'208";a="232649074" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 26 Feb 2020 09:10:54 +0800 IronPort-SDR: F/fgDU+1wryvn7VhhzZZMTUV0eZ/tVfAM9SY0HfE6qhDIRqoD3pzAZm9jqQRlMmXE2XnohnidQ 71VLhhfo5pdYHtf9cUYxfvK/yiMuWXOas8THAJb4DcgJYwxJq69VanhFMxYbxmpJ3M8zlIBioD oB6UZ3ApGMU5uuBV8HXVDnAzXt+UCoiHTJzA6+JnxJO+aX9fvcGlyjrTtrHPpN5bL6JBIv5D1r FwC/X5CKhdlzL/vmsalrIk7AtlxoAUeyKa95ylbiG89SOS2rgojQMfNq+1laFdveTq4qTiJPsH 9v0j8/pgRAhZ4DTnzOIg0JsW Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2020 17:03:17 -0800 IronPort-SDR: 6xEEAyVqD6GSFudyXzng+Zf+ndXD+T7l8RciiDcoUJMqvWvlRqgluYEAv4otTjcr1qy33VNQg4 2/xvRlHOKLZfaF5mczO5FrL0jq8kF+g5yyZoxKk6sPnRSOB10TgBpcSrHXWJ4nzG3fqMJBIghW gSRYXYFZKZLu2marYcNBeEN1isvMmDwhsM8tK+DJos7wi8Q6D0MAzTYxXmrNOaKc52LOrZgVYZ cmtUg+YjRK0B1uC76pdz/MVWDVf7S7a2Qk5uPFy6/+ZiKM7PUaU0Ln3J3ID96JpkWZUIWazctK vs0= WDCIronportException: Internal Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 25 Feb 2020 17:10:50 -0800 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [RFC PATCH 5/5] RISC-V: Add EFI stub support. Date: Tue, 25 Feb 2020 17:10:37 -0800 Message-Id: <20200226011037.7179-6-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200226011037.7179-1-atish.patra@wdc.com> References: <20200226011037.7179-1-atish.patra@wdc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200225_171101_615962_E0AA39B3 X-CRM114-Status: GOOD ( 24.64 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-2.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.143.124 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kate Stewart , linux-efi@vger.kernel.org, Ard Biesheuvel , Catalin Marinas , Linus Walleij , Russell King , Atish Patra , Mauro Carvalho Chehab , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , "Chang, Abner \(HPS SW/FW Technologist\)" , Michal Simek , Mike Rapoport , Greentime Hu , Borislav Petkov , Mao Han , daniel.schaefer@hpe.com, Albert Ou , Kees Cook , Arnd Bergmann , Alexios Zavras , Alexander Graf , Paul Walmsley , Thomas Gleixner , Allison Randal , "leif@nuviainc.com" , Greg Kroah-Hartman , Anup Patel , Palmer Dabbelt , Paolo Bonzini , Andrew Morton Sender: "linux-riscv" Errors-To: linux-riscv-bounces+patchwork-linux-riscv=patchwork.kernel.org@lists.infradead.org Add a RISC-V architecture specific stub code that actually copies the actual kernel image to a valid address and jump to it after boot services are terminated. Enable UEFI related kernel configs as well for RISC-V. Signed-off-by: Atish Patra --- arch/riscv/Kconfig | 20 ++++ arch/riscv/Makefile | 1 + arch/riscv/configs/defconfig | 1 + drivers/firmware/efi/libstub/Makefile | 8 ++ drivers/firmware/efi/libstub/riscv-stub.c | 135 ++++++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 drivers/firmware/efi/libstub/riscv-stub.c diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 42c122170cfd..68b1d565e51d 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -372,10 +372,30 @@ config CMDLINE_FORCE endchoice +config EFI_STUB + bool + +config EFI + bool "UEFI runtime support" + depends on OF + select LIBFDT + select UCS2_STRING + select EFI_PARAMS_FROM_FDT + select EFI_STUB + select EFI_GENERIC_ARCH_STUB + default y + help + This option provides support for runtime services provided + by UEFI firmware (such as non-volatile variables, realtime + clock, and platform reset). A UEFI stub is also provided to + allow the kernel to be booted as an EFI application. This + is only useful on systems that have UEFI firmware. + endmenu menu "Power management options" source "kernel/power/Kconfig" +source "drivers/firmware/Kconfig" endmenu diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index b9009a2fbaf5..0afaa89ba9ad 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -78,6 +78,7 @@ head-y := arch/riscv/kernel/head.o core-y += arch/riscv/ libs-y += arch/riscv/lib/ +core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a PHONY += vdso_install vdso_install: diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index e2ff95cb3390..0a5d3578f51e 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -125,3 +125,4 @@ CONFIG_DEBUG_BLOCK_EXT_DEVT=y # CONFIG_FTRACE is not set # CONFIG_RUNTIME_TESTING_MENU is not set CONFIG_MEMTEST=y +CONFIG_EFI=y diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile index 2c5b76787126..38facb61745b 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -21,6 +21,8 @@ cflags-$(CONFIG_ARM64) := $(subst $(CC_FLAGS_FTRACE),,$(KBUILD_CFLAGS)) \ cflags-$(CONFIG_ARM) := $(subst $(CC_FLAGS_FTRACE),,$(KBUILD_CFLAGS)) \ -fno-builtin -fpic \ $(call cc-option,-mno-single-pic-base) +cflags-$(CONFIG_RISCV) := $(subst $(CC_FLAGS_FTRACE),,$(KBUILD_CFLAGS)) \ + -fpic cflags-$(CONFIG_EFI_GENERIC_ARCH_STUB) += -I$(srctree)/scripts/dtc/libfdt @@ -55,6 +57,7 @@ lib-$(CONFIG_EFI_GENERIC_ARCH_STUB) += efi-stub.o fdt.o string.o \ lib-$(CONFIG_ARM) += arm32-stub.o lib-$(CONFIG_ARM64) += arm64-stub.o lib-$(CONFIG_X86) += x86-stub.o +lib-$(CONFIG_RISCV) += riscv-stub.o CFLAGS_arm32-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) @@ -79,6 +82,11 @@ STUBCOPY_FLAGS-$(CONFIG_ARM64) += --prefix-alloc-sections=.init \ --prefix-symbols=__efistub_ STUBCOPY_RELOC-$(CONFIG_ARM64) := R_AARCH64_ABS +STUBCOPY_FLAGS-$(CONFIG_RISCV) += --prefix-alloc-sections=.init \ + --prefix-symbols=__efistub_ +STUBCOPY_RELOC-$(CONFIG_RISCV) := R_RISCV_HI20 + + $(obj)/%.stub.o: $(obj)/%.o FORCE $(call if_changed,stubcopy) diff --git a/drivers/firmware/efi/libstub/riscv-stub.c b/drivers/firmware/efi/libstub/riscv-stub.c new file mode 100644 index 000000000000..3935b29ea93a --- /dev/null +++ b/drivers/firmware/efi/libstub/riscv-stub.c @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2013, 2014 Linaro Ltd; + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + * + * This file implements the EFI boot stub for the RISC-V kernel. + * Adapted from ARM64 version at drivers/firmware/efi/libstub/arm64-stub.c. + */ + +#include +#include +#include +#include +#include + +#include "efistub.h" +/* + * RISCV requires the kernel image to placed TEXT_OFFSET bytes beyond a 2 MB + * aligned base for 64 bit and 4MB for 32 bit. + */ +#if IS_ENABLED(CONFIG_64BIT) +#define MIN_KIMG_ALIGN SZ_2M +#else +#define MIN_KIMG_ALIGN SZ_4M +#endif +/* + * TEXT_OFFSET ensures that we don't overwrite the firmware that probably sits + * at the beginning of the DRAM. + */ +#define TEXT_OFFSET MIN_KIMG_ALIGN + +typedef __attribute__((noreturn)) void (*jump_kernel_func)(unsigned int, + unsigned long); + +efi_status_t check_platform_features(void) +{ + return EFI_SUCCESS; +} + +u64 get_boot_hartid_from_fdt(unsigned long fdt) +{ + int chosen_node, len; + const fdt64_t *prop; + uint64_t hartid = U64_MAX; + + chosen_node = fdt_path_offset((void *)fdt, "/chosen"); + if (chosen_node < 0) + return hartid; + prop = fdt_getprop((void *)fdt, chosen_node, "efi-boot-hartid", &len); + if (!prop || len != sizeof(u64)) + return hartid; + + hartid = fdt64_to_cpu(*prop); + + return hartid; +} + +/* + * Jump to real kernel here with following constraints. + * 1. MMU should be disabled. + * 2. a0 should contain hartid + * 3. a1 should DT address + */ +void __noreturn efi_enter_kernel(unsigned long entrypoint, unsigned long fdt) +{ + unsigned long kernel_entry = entrypoint + _start_kernel - _start; + jump_kernel_func jump_kernel = (void (*)(unsigned int, unsigned long))kernel_entry; + u64 hartid = get_boot_hartid_from_fdt(fdt); + + if (hartid == U64_MAX) + /* We can not use panic or BUG at this point */ + __asm__ __volatile__ ("ebreak"); + /* Disable MMU */ + csr_write(CSR_SATP, 0); + jump_kernel(hartid, fdt); +} + +efi_status_t handle_kernel_image(unsigned long *image_addr, + unsigned long *image_size, + unsigned long *reserve_addr, + unsigned long *reserve_size, + unsigned long dram_base, + efi_loaded_image_t *image) +{ + efi_status_t status; + unsigned long kernel_size, kernel_memsize = 0; + unsigned long preferred_offset; + + /* + * The preferred offset of the kernel Image is TEXT_OFFSET bytes beyond + * a KIMG_ALIGN aligned base. + */ + preferred_offset = round_up(dram_base, MIN_KIMG_ALIGN) + TEXT_OFFSET; + + kernel_size = _edata - _start; + kernel_memsize = kernel_size + (_end - _edata); + + /* + * Try a straight allocation at the preferred offset. + * This will work around the issue where, if dram_base == 0x0, + * efi_low_alloc() refuses to allocate at 0x0 (to prevent the + * address of the allocation to be mistaken for a FAIL return + * value or a NULL pointer). It will also ensure that, on + * platforms where the [dram_base, dram_base + TEXT_OFFSET) + * interval is partially occupied by the firmware (like on APM + * Mustang), we can still place the kernel at the address + * 'dram_base + TEXT_OFFSET'. + */ + if (*image_addr == preferred_offset) + return EFI_SUCCESS; + + *image_addr = *reserve_addr = preferred_offset; + *reserve_size = round_up(kernel_memsize, EFI_ALLOC_ALIGN); + + status = efi_bs_call(allocate_pages, EFI_ALLOCATE_ADDRESS, + EFI_LOADER_DATA, + *reserve_size / EFI_PAGE_SIZE, + (efi_physical_addr_t *)reserve_addr); + + if (status != EFI_SUCCESS) { + *reserve_size = kernel_memsize + TEXT_OFFSET; + status = efi_low_alloc(*reserve_size, MIN_KIMG_ALIGN, + reserve_addr); + + if (status != EFI_SUCCESS) { + pr_efi_err("Failed to relocate kernel\n"); + *reserve_size = 0; + return status; + } + *image_addr = *reserve_addr + TEXT_OFFSET; + } + memcpy((void *)*image_addr, image->image_base, kernel_size); + + return EFI_SUCCESS; +}