From patchwork Mon Apr 13 21:29:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11486355 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 E350A912 for ; Mon, 13 Apr 2020 21:30:04 +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 B4E77206DA for ; Mon, 13 Apr 2020 21:30:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SIKrzCrH"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="dU+D1zkh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B4E77206DA 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-arm-kernel-bounces+patchwork-linux-arm=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: 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=sEZZWktZXoADw6S5Cn4Qt29C1S9Lw1BZ02dV8+5lPp0=; b=SIKrzCrHMzQR7N SRWj49yJlx1BAkpPhBEw6Si98RdzVmDqd+BTFV53PBjcqTNKq6WA+JTyrmR5wGY3DJW9IyDHPDftw uiaIoZVs6ypaPGNv/lDarLXBo5fqwRRy6k9TmopwB2CSmtdBoSXV+bTUw1r+TJhbm1ONcfSVuWTKZ DH2lFWbHrlPxjNU8J9Q549efZQSm8BGrGTxRsBqqdVO/2AB5hcFVKGWZk1Syqt7dh1n44AT3Qvgzl WfAcaKMCawIKsu4yh8GrRUB8Uz2Z180uv6qkT8Zmr1aW8iUj3weigpuTOiBXWHSjDaPmc8RYYlADn yJ07IHN3XNWn0R1JQ39Q==; 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 1jO6eR-0000Op-Bx; Mon, 13 Apr 2020 21:29:55 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jO6eN-0000Mo-8E; Mon, 13 Apr 2020 21:29:52 +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=1586813392; x=1618349392; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pcOCtB5fv/YmPFx2fo9gEb+wBJbwEegEJHy3Q6vyD6w=; b=dU+D1zkhkb6oMSyTF5wm92/iUVR3uTc6S/yu+z2k+qYQPDoK8DPz0kzI OkXH1ZK+4IZ1+7FsEvPWaMnYA7/BOkYDx/YzayuWbYgkTtx6P7l8fzDIc JG2XOTHmfFtJx7RZI/WM9oJHCLJpBrakzGwm1YaMZ1h06gAA50NUmKyf2 o1JUFxRRrIE+PPE2+gfKLMOcDyd1hXDDdKlY4pZ3LUbfToH53KlIihFsp eQJW4F+SwQKQ/qJgrpPeY9lJ8G7rp41shvN26ZOiAlwij6l3SeZpCCtve dtkAUto7KtILZaRFpb4Rcw6gpGufl2fGYeVW16XDyg2ADehSZnTmQTBMq Q==; IronPort-SDR: VREDIvMN/39HlnnHATb58KfGbGqXWlztK6EPA1MPC/aggQH1bQ73mglzadOg2ZdUvnFLdNqlkZ tq62NziLEPtsqjAj0qvlKk99T80aFUVZHCgomxVAI2dyiGWKnrLTgHpFSdu1rRWfEDeFYNWnkN nO8+6PShu6k95dmaFQFHHejFMiVpfprxtctl0h44vQO1NczwUZGB1+vG/MfdYQ6nH8KCPhPsMZ Z/jSjtf6osPROJC5Zabunj8dsdeUzu5pvpIhoYBHYlH8uNwnA5Z0QzaRjLJkyvtzTqGg/k6Cov PrE= X-IronPort-AV: E=Sophos;i="5.72,380,1580745600"; d="scan'208";a="136683324" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Apr 2020 05:29:30 +0800 IronPort-SDR: N5e9e5Nmko9G7WXZtJdbBtjDJdD1WOVSb4bldFJ902BY9q9dGhc6F9KNcCW48WizN3RsNKwlUX tFTXUyaj/vaCcxur930Vx+0Kqa7GMaGgxQUPE6E9hh9J+0COziAcsmJinR6TUrJftQgaB7cdP3 SJErJw23r7IH9HPJOog6q47Q6ypKKK5Jy6OMpqQAjdK8pVxhJXX+D4JPV0p/001hkGB/TX+7vg gdScOqpcZKDoBZP10leUMqtFo7wa2kTgAKCajiFZqcNfjwGa0DbY+vhsma6pG27pcM3u6RP0sy 8VfGqCbDr8HGscnH5ZR2151H Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2020 14:20:01 -0700 IronPort-SDR: r8UFEQO5M4pHviXz4+biD+GAWKWN6A1nxhe91z8v+Dtoc6TV5nlLfDai33OTJWF23MoqCPRTqN sml7yCm+YbC3KL9qJGHkS1x+KSwJJF5yMPRYcohpOaWSHRn5Z1KJpnJ15b5OzXTmnxT2FmpCtz 2uTJ+WlEAzSE9eIF09bszfOxvtxA5GSDdNK8u/N4CAhG93tPMNGtjZpKJrGldf9s+QoloFc+lr 2Z2XZHYk6WI8XZJyxyw1VVC4Py/0ANJUKzL50KeslFIQHMiu/JC7cHE+x79o9iRDZ9KLhNXrse 0Oo= WDCIronportException: Internal Received: from 9dg4l72.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.26]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Apr 2020 14:29:30 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v2 PATCH 1/5] efi: Move arm-stub to a common file Date: Mon, 13 Apr 2020 14:29:03 -0700 Message-Id: <20200413212907.29244-2-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200413212907.29244-1-atish.patra@wdc.com> References: <20200413212907.29244-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-20200413_142951_343399_125F0B72 X-CRM114-Status: GOOD ( 14.13 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 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 [216.71.154.45 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_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Ard Biesheuvel , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=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 Reviewed-by: Palmer Dabbelt --- arch/arm/Kconfig | 2 +- arch/arm64/Kconfig | 2 +- drivers/firmware/efi/Kconfig | 4 ++-- drivers/firmware/efi/libstub/Makefile | 12 ++++++------ .../firmware/efi/libstub/{arm-stub.c => efi-stub.c} | 0 5 files changed, 10 insertions(+), 10 deletions(-) rename drivers/firmware/efi/libstub/{arm-stub.c => efi-stub.c} (100%) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 66a04f6f4775..165987aa5bcd 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1954,7 +1954,7 @@ config EFI select UCS2_STRING select EFI_PARAMS_FROM_FDT select EFI_STUB - select EFI_ARMSTUB + select EFI_GENERIC_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 40fb05d96c60..32d818c5ccda 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1785,7 +1785,7 @@ config EFI select EFI_PARAMS_FROM_FDT select EFI_RUNTIME_WRAPPERS select EFI_STUB - select EFI_ARMSTUB + select EFI_GENERIC_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 613828d3f106..2a2b2b96a1dc 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_STUB bool config EFI_ARMSTUB_DTB_LOADER bool "Enable the DTB loader" - depends on EFI_ARMSTUB + depends on EFI_GENERIC_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 094eabdecfe6..d590504541f6 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -23,7 +23,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_STUB) += -I$(srctree)/scripts/dtc/libfdt KBUILD_CFLAGS := $(cflags-y) -DDISABLE_BRANCH_PROFILING \ -include $(srctree)/drivers/firmware/efi/libstub/hidden.h \ @@ -45,13 +45,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_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 @@ -73,8 +73,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_STUB) := $(lib-y) +lib-$(CONFIG_EFI_GENERIC_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 100% rename from drivers/firmware/efi/libstub/arm-stub.c rename to drivers/firmware/efi/libstub/efi-stub.c From patchwork Mon Apr 13 21:29:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11486359 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 9DE4D912 for ; Mon, 13 Apr 2020 21:30:25 +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 79A1E206DA for ; Mon, 13 Apr 2020 21:30:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Et2cuBxO"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="gJO2e+DO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 79A1E206DA 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-arm-kernel-bounces+patchwork-linux-arm=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: 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=buI+HjaXTV6EhDZHzCcn5coFTUSDULfone8OIB+fh44=; b=Et2cuBxOy2mG8H 9e4OFgp8/+PMJBUJGN2GEaa5MvfnU+M1sYQkmtZH5wziEJ/nuiQbrZwhqjMC4Q4n6rQNLuU6jQ8Tx 0Ww3oaoqOYGNmXEbshrO7RX6y3WcIaEUAJWSL1ZxZ0itUQHtfkdfMLCrAEx1CuyjUxBO680ZSHSmj lLQVGR8Q/7bXC1M7ocfU0Hg6kVSsRXNhoFoC0ejTE7PlmTQYWOyl+1iFw66AvIFpTy/RaaByEBTg8 hJvhaXcl+pS9BBAbuIDp8dnJLmB2l5iL78Qp+IrZtE6KWhh6gItIXUyYxlgiTCGWEMPkCqR0xszsd P+5girV3oBFEVhe8aA+g==; 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 1jO6er-00036d-Hz; Mon, 13 Apr 2020 21:30:21 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jO6eP-0000Mo-1c; Mon, 13 Apr 2020 21:29:54 +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=1586813393; x=1618349393; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qT9c7eXt7ksLkS8LTzuMlCHOyGGyAUacpIVqI65fctQ=; b=gJO2e+DOYddsatohsRtltnPsAEwVr7Y8wufkkcqNYEz4Ylk4Q2FoP7Z7 AqB4ecWblap7uGovXP1mDiLL83ke1G/p3MlTqbjrypppJKtyJS+QhCHJ8 v8NdwiGwnCXFc/gHnceyk6J1SswQw662JuRcAH+ntzxn0LHR/XtcKn7nB ZLWgH8Zax1QfdfHeNYBBTwTpNSW/Pk/HaSnboZRXcpGLkBThxLubRpK0z 5bAQ8SG2N40D9OUCeCvZQlx+j4i9mSXRrxoX20OoPaBo+QEJMqdZ0DKus IayPeJzUVPArt1zenTrJDQFl4QTE0y3SrYqI2+3NHuxgkqUoLBzHAmFFy A==; IronPort-SDR: 1UJautKLb1k12Uzc+P5ZgHQECyKYy8Z5VdrZC5eMIPYIA1zSmRamgztJMpzyxDnEhhRLsx0iIh YjPYBHzDKf0FoU4rlPlYv50YiPtyN4LoU1ncznExvdktXIDZQ2ODho+Q1F6mDPeH5cKIzJfvlW nIzPCBQP27b2i8apxopCzz1jng1ULEeJ1TMqDg6bXSFu9soQXwy5Uzr13C6JT7tp4t2ykgXxgp 1P51sjZlxLPpoHJlbva2hQ+NcYSu2NTLuRshO0fqy36kxj9mw0ze1+5Y2/KTXqW5eyFRKhbbXE 0rw= X-IronPort-AV: E=Sophos;i="5.72,380,1580745600"; d="scan'208";a="136683326" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Apr 2020 05:29:31 +0800 IronPort-SDR: MYi5FKiSU7uanKvCK8Q6Bi5W9YMEw8xWpDCL/oOoQInptcGJQ+IL4epx3Yjjj/+I5SxvfDxgMC iK0ypsdFVKO5Qk4vWRAR16vXULQM/2rcEwJ5fnQigXfJgc2/P0O9iBA+Pu3tK4fpxXUoN2TcSU HhFlQVPCzln/+f0peJt7P4cDW7Ub8QuqXfcto4VnAQZx4V+zQMsWBvvdfBWDX6Ae12yzmRVLYs KJWrFhZRSd3AJnkN9Ud4SLqrmjSnRL8aCS/WhsXZAUVupUv72SCYO8IjYjl+8DRvtHJ3m+ElEj pQ2nkwjfqOUJov2FdrRWvoC7 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2020 14:20:02 -0700 IronPort-SDR: 9G9nj2p0GT4YHZw2NCS5Fuwgbl/gAoRjzgFyJNSm5Lcn1NpB/1a46z/Nv8AljWcfv1LEgthoiw HQ4OPpp3BFp/21DWwQGdRZ5V26kUUtMlkny8vEd+BlAHg/uN/7p6R+m3zx7loxswaqt/FnF/Oe P6ZRbX+r7QcCgxG0UovpYsZJW9k4AUDuSdvPxf4ta9+KGGxh/Zmy97/uxm4CYNjPYg6ZRc+BAr 4gFQSVSiWGzxgCQ9Lk6/bwB90WBZZvPSQ5Mrl+frU+xteloZJgUJ8ArkHvwex4rdexUtILiskv Xqs= WDCIronportException: Internal Received: from 9dg4l72.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.26]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Apr 2020 14:29:30 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v2 PATCH 2/5] include: pe.h: Add RISC-V related PE definition Date: Mon, 13 Apr 2020 14:29:04 -0700 Message-Id: <20200413212907.29244-3-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200413212907.29244-1-atish.patra@wdc.com> References: <20200413212907.29244-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-20200413_142953_139975_0EDEDE82 X-CRM114-Status: UNSURE ( 9.56 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 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 [216.71.154.45 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_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Ard Biesheuvel , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Define RISC-V related machine types. Signed-off-by: Atish Patra Reviewed-by: Ard Biesheuvel Reviewed-by: Palmer Dabbelt --- include/linux/pe.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/pe.h b/include/linux/pe.h index 8ad71d763a77..daf09ffffe38 100644 --- a/include/linux/pe.h +++ b/include/linux/pe.h @@ -55,6 +55,9 @@ #define IMAGE_FILE_MACHINE_POWERPC 0x01f0 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 #define IMAGE_FILE_MACHINE_R4000 0x0166 +#define IMAGE_FILE_MACHINE_RISCV32 0x5032 +#define IMAGE_FILE_MACHINE_RISCV64 0x5064 +#define IMAGE_FILE_MACHINE_RISCV128 0x5128 #define IMAGE_FILE_MACHINE_SH3 0x01a2 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 #define IMAGE_FILE_MACHINE_SH3E 0x01a4 From patchwork Mon Apr 13 21:29:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11486369 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 180C292C for ; Mon, 13 Apr 2020 21:31:03 +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 A0FFA20732 for ; Mon, 13 Apr 2020 21:31:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YFR11Y/B"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="jpbJvhFQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A0FFA20732 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-arm-kernel-bounces+patchwork-linux-arm=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: 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=miXatmVlE5vDzIQP0111O7xXZ56OIPuWxE7tBlMnzTs=; b=YFR11Y/BG3i6sN lKZ0oFpZNjY/4v8iy3g8TQnRQWgmD7/5SCRxTB7KZ+RU/r9o69jBeUM6mQf38yFS+UdNary0kmG/R +0MtoZP2rz+hNBPWc4CDIOKGA1yQwx2rYefuyyaAS2iFDXbhYVd8/aw0vHZ988HhKpP2GUMBKmZjm 0TF3EW4vJCfUfX44l5OcyW4c5D9BFwJNzuQuaqBvkSDck5e9f6YgnL3KTfx+6tPa+V+tmHYhDJ00K qk+bn5FYlDl21Sq8kcK7YBgdontMIEg/GKvZfWeXkEM/xAM94b7ay8xEP8CQT1eSwFuu6nhaQywoM uJ0AAfYTXxO4twbH/xwg==; 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 1jO6fS-0003mD-6T; Mon, 13 Apr 2020 21:30:58 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jO6eQ-0000Mo-Er; Mon, 13 Apr 2020 21:29:55 +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=1586813395; x=1618349395; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=I/GiEGyOV5rt1rc9GnsBz8XcyhOtNk7wcIG4+FIGGnk=; b=jpbJvhFQ+fvafcLylwFillSNZ5NNaCpXKXEA7xpjxkwzgNkNQxUpjlGJ QLbjYKAzgA0ok7RddA6x0vPgCLBm6jyJUA3DBqRms7S5LYVo30kOkoEDY Vh3uHfkSbg1nxP0wKFNKONKrbiJFwGujMMSrQ0YPhtxBXh4bhjoY1biLO XIM6BwvSBXnQC2qDxTUTRQtS+z7Lti70zku7yownkKpjq2/P8FIu7pyqw 3ObO0v4o7jHBKDtS9TENz+VJe0pQKR+CD23n+/ZS+lV68PvihEIoZOwg4 hPi4dE5HuvnfXUF4IK1NIVelAXqNyMdOXdE8mWhcZf99dqzcsMFMFSnhw g==; IronPort-SDR: S1iCwSe8/X09jFNxsNUPZLhyCYmp5YUr8iibGCUyhGbdWEb/UlqgKWGw8iJoTC2H6EdaBLe6FB uSEZSZzBnjPhbymp85PDdDCQdOmtkQhssLKjdwznXA3V4kK3H4Tg5g6cW0K6gLvpswhQJTeX56 FFhlG9lpSQ4fU1R2CIJjoYg1XxcF4VWuB5qqoIRO7xa0SQAX2eTcvZdGAbVe08UY+g18OWSUuf JKyYTy5tVbMUmM6BaaGA4KIOYygM3ysOQIGXb5YC3Btoz+t5/4BKt118/oJXMBkXRz+72vgDQn nC4= X-IronPort-AV: E=Sophos;i="5.72,380,1580745600"; d="scan'208";a="136683328" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Apr 2020 05:29:31 +0800 IronPort-SDR: 4q8ic4vz0+q+XNeLS/BpY+K06h8jcucBal6OD64PQ0uIvFFm6nNnLyC2pev7Eb3OjnofEzKQB8 PvCiDuf3Hj60hbhsrHyCGOLf2gNVHGsOwlEkDCDqr6qYvVWxjmZ+vQDsZcp6OHKlPpdw1tFOtQ ujSvYc1dtdhAbuDkTRYhCU/r6WCRmwRwf7wQHmk9h5rpGxY+ZylTIZwx1dyWWtLrskTUvQ3gM+ SRaPpp75d9gK1Gv+Ot9LorDb+nXbinwGcZX4DT0HbjBM9B192Zhvg4oMi+kVtl574d+TdzdP9J 2D26SyKPzHPD/UGen5RFuPCA Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2020 14:20:02 -0700 IronPort-SDR: BseMmEGbdr0tCYWbKQphuB1iCB2ANCvg+j86bIbB8nd/xBtv73df2iAf1kOIAk5mlOsLuUo43g SeaVOSRUDO6VTRZAjJ/kv7HT+qXUBbJAIkDUCSAEDyyGXFztvYsUvXRcA4n0vm2AJiwtpNVdEq +9reJHs+lT5r40PSoQustcMlul/5Wq9D+KyjZYOboxtWIaqc8NrJQFapg28YEtFYjCqlxTgeHS +zVA+KcUN0I+volZI6cqbVJfG+23HjpXQvxKOw57rKVH6lwAAKj8Oe/OXnFJYWc8vM8TXNYNCP zvA= WDCIronportException: Internal Received: from 9dg4l72.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.26]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Apr 2020 14:29:31 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v2 PATCH 3/5] RISC-V: Define fixmap bindings for generic early ioremap support Date: Mon, 13 Apr 2020 14:29:05 -0700 Message-Id: <20200413212907.29244-4-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200413212907.29244-1-atish.patra@wdc.com> References: <20200413212907.29244-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-20200413_142954_544155_C099E515 X-CRM114-Status: GOOD ( 13.03 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 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 [216.71.154.45 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_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Ard Biesheuvel , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=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 Reviewed-by: Palmer Dabbelt --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/riscv/include/asm/fixmap.h | 18 ++++++++++++++++++ arch/riscv/include/asm/io.h | 1 + 4 files changed, 21 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index a197258595ef..f39e326a7a42 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -68,6 +68,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 3d9410bb4de0..59dd7be55005 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 +generic-y += early_ioremap.h generic-y += extable.h generic-y += flat.h generic-y += kvm_para.h diff --git a/arch/riscv/include/asm/fixmap.h b/arch/riscv/include/asm/fixmap.h index 2368d49eb4ef..ba5096d65fb0 100644 --- a/arch/riscv/include/asm/fixmap.h +++ b/arch/riscv/include/asm/fixmap.h @@ -30,6 +30,24 @@ enum fixed_addresses { FIX_TEXT_POKE1, FIX_TEXT_POKE0, 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 Mon Apr 13 21:29:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11486375 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 7185292C for ; Mon, 13 Apr 2020 21:31:33 +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 3695620732 for ; Mon, 13 Apr 2020 21:31:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pbTxcFDJ"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="ks+D9K+e" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3695620732 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-arm-kernel-bounces+patchwork-linux-arm=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: 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=+QxmglEnsipMwYzLqccCXmFdjb5fQqSe5i3nYnUkSqY=; b=pbTxcFDJZsF+jf SVVITJdyKr4P3yZsrVuh/RR8Qfkqrdgo7B0ndbKBBlhUOlMWaoVVtLYHIbWfpL7Xsz6xe2lE/iCjX bSkTRkcyyCd2QUhFcNWwSXy4iK9ZxX0bptFmzkxT8BhaF112KmRtnMUpho8LyS6bWu3UeaGL8rPU8 5KAKx/sVmW8bmN5jPzjZ4FC9oLDsw5A3jF71ZXcQoCiC1c4fEo8fdEhNxFSEeL6TQIFdNV8++aj1F 9FtrFPniExNf2t3mb+9ARuv62qicOlZJX8Qe+p7l9Y1+wWXHaN3pfX5iQ+WjrBzaGqI0s20j18Kpe Q7FpwE4DVXnSDhWcAGtQ==; 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 1jO6fx-0004J0-0I; Mon, 13 Apr 2020 21:31:29 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jO6eR-0000NS-5W; Mon, 13 Apr 2020 21:29:57 +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=1586813395; x=1618349395; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=poJWPseiI5PuZPAU8mzHqhQXqaW8Ce6FHjvGSMZYHIo=; b=ks+D9K+egF7UJQMqcFKhst9FbO53IyBSmIBtZR5BEZVif7UWrqnVY6+M cmcEeB1f+CmurJC1U+hSNAxwaGcf4nxPib24lvKz9y72lV84dw1jLVv+e tihRz7SqM0sGhr/MQdsmeF2rxbSTee1NsZd+htvFnllYH/2sNrCj9mEfQ ho84Qmr56xsFa8IAq6w30PFcqqeqMk+0cJq2aYqjst8gPUVf6QhF0oJWy IiNeo+/7bxGhQaXic+HkcJ7HC6cD1W4U6IheBWxdhnQ3cldR1QGHem1hC 0pRveDHYFxrdzoJgFfjHEHdgdLxIiJJeN4skYU6S2TV0HQhrAxNMCYOB7 g==; IronPort-SDR: 7vNxrF8WlSpDH55tNuuc1sV5sFqW2rnvJuJJPYq9mfjlYgaeNfF8nXBm0brsHQofAdgLR/gfJD JG5+B0hK2V8RwK9WkOE/5wqK+TX5ccv4nRBhjDkuQmOUTEVKajczxYOiImiYDuVUxLzjJAZrYc e4fyM8ETLqe41VLXEropgFUFB9sHF2YPTfOSLO6v3+nUTTgOAAbm/XxMvLxrDPHy7qhSAhc7Sk AVpgzkzWz8uWvIuFlMPwf5daGGtI+mCzljmd3T4x9M7xyUdJTf2+vLliarKhrs3506WIhD68RA ZLU= X-IronPort-AV: E=Sophos;i="5.72,380,1580745600"; d="scan'208";a="136683330" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Apr 2020 05:29:32 +0800 IronPort-SDR: o80vmeFr5aICpUFzSCq91TWJxlXulqxiAIzRvbGUXPYLhgFQPPyhCrku1h5ziE8AFgBanfKSdy aV0hO/NJpwrSLFPmvkAP/ZD/A2PUTsk9s33W5sVj0tWEZowqzywe/d3u3xqNibA45l+SpEiFLJ wZ9wRPFy+FDgElKCpioRlVOWsD6/Hx7ePy2DnacdXDJyp76eaEVL2o1uzNKs2ntcXBUKyZIk/p /ZfbAhZ8IYd0y757FnA+RTLqfM77f6xfTW2V+Z6w+8G8GogZOHCS63UgR2vYLVmyHwUcXmam/F 3C7A0/mxiIaKXU6XNNC6ff9p Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2020 14:20:03 -0700 IronPort-SDR: qNyCYTu7yKaKTnQVbPi7VKGkshF8CZwm467V4RL83TLxStG8jpVTBQ1m60m4Ydlc21ws5x4KCC UpENc3uXl0X1W5S06e/shiuxvI2g+vRjT4JvlNUFvwyPcOdGpnpJOtmpOU1S0lF3KDO2tY/WzY wBiHzA4i9JKl8vtjSLj395XMEtWm3w7vZpUOJsC3zkqhSpX8uVAO/MC3PzkxsHdnsh1BmFjsVK UZLlNJ2bAcn9Uj6xQGo5n7lJT/RcEpAqmESo2KbFy88Qs58rzfU3p7LnICnY/J2hj1xlSh5j5d 4Fc= WDCIronportException: Internal Received: from 9dg4l72.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.26]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Apr 2020 14:29:32 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v2 PATCH 4/5] RISC-V: Add PE/COFF header for EFI stub Date: Mon, 13 Apr 2020 14:29:06 -0700 Message-Id: <20200413212907.29244-5-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200413212907.29244-1-atish.patra@wdc.com> References: <20200413212907.29244-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-20200413_142955_326536_5C7E2DF3 X-CRM114-Status: GOOD ( 22.47 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 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 [216.71.154.45 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_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Ard Biesheuvel , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=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/sections.h | 13 ++++ arch/riscv/kernel/Makefile | 4 ++ arch/riscv/kernel/efi-header.S | 99 +++++++++++++++++++++++++++++++ arch/riscv/kernel/head.S | 16 +++++ arch/riscv/kernel/image-vars.h | 53 +++++++++++++++++ arch/riscv/kernel/vmlinux.lds.S | 22 ++++++- 6 files changed, 205 insertions(+), 2 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/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 86c83081044f..86ca755f8a9f 100644 --- a/arch/riscv/kernel/Makefile +++ b/arch/riscv/kernel/Makefile @@ -32,6 +32,10 @@ obj-y += patch.o obj-$(CONFIG_MMU) += vdso.o vdso/ obj-$(CONFIG_RISCV_M_MODE) += clint.o traps_misaligned.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..69dde8268527 --- /dev/null +++ b/arch/riscv/kernel/efi-header.S @@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 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 LINUX_EFISTUB_MAJOR_VERSION // MajorImageVersion + .short LINUX_EFISTUB_MINOR_VERSION // 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_header_end: + .endm diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index 98a406474e7d..ddd613dac9d6 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,18 @@ 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 + j _start_kernel +#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 +52,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..bd8b764f0ad9 --- /dev/null +++ b/arch/riscv/kernel/image-vars.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + * 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 0339b6bbe11a..511e1807294c 100644 --- a/arch/riscv/kernel/vmlinux.lds.S +++ b/arch/riscv/kernel/vmlinux.lds.S @@ -10,6 +10,7 @@ #include #include #include +#include "image-vars.h" #include OUTPUT_ARCH(riscv) @@ -17,6 +18,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 */ @@ -39,6 +48,7 @@ SECTIONS { EXIT_TEXT } + .exit.data : { EXIT_DATA @@ -62,6 +72,8 @@ SECTIONS _etext = .; } + __text_end = .; + /* Start of data section */ _sdata = .; RO_DATA(SECTION_ALIGN) @@ -78,9 +90,13 @@ SECTIONS .sdata : { __global_pointer$ = . + 0x800; *(.sdata*) - /* End of data section */ - _edata = .; } + PECOFF_EDATA_PADDING + __data_raw_size = ABSOLUTE(. - __text_end); + + /* End of data section */ + _edata = .; + EXCEPTION_TABLE(0x10) BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) @@ -88,6 +104,8 @@ SECTIONS *(.rel.dyn*) } + __data_virt_size = ABSOLUTE(. - __text_end); + _end = .; STABS_DEBUG From patchwork Mon Apr 13 21:29:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11486363 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 7E7AA6CA for ; Mon, 13 Apr 2020 21:30:43 +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 13958206DA for ; Mon, 13 Apr 2020 21:30:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="CcIFD0J8"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="Bb9GmEBJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 13958206DA 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-arm-kernel-bounces+patchwork-linux-arm=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: 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=U26LYywIUpq5Cul37rFWWAbobhRIvqZH8bopBnk/OgE=; b=CcIFD0J8lGH3tF J3HphYoIItLkkQHHqh7dJdz4n57e0h4CjoR+5nBZcgWlu0NMOz8eVKYOfPE8Qi/NiBGhZZk9QiZnW j0g2aLQsOPeOHcmp+I/FJujM4kJhBa0ArCqocYbfF98UvnPExDiM4PoLmmCQ0wn6+Uf6932XevHlF GoGRYnmf1CkoQ1vgT9GJnLTzzGvh1ml13UKAVuBIiBc2yWQmRyJY6p7RWZ+sFhzt+hheSss6rBh3N EKkDgCdttwpoFPCqKQ5+rJaiqheH7Xb/YOxMeYr2Az9E143LtihWspscT48N/oLq8V2QOMXt0zIGw D1fip6BNIs1hxVh47PIw==; 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 1jO6f8-0003Qx-I6; Mon, 13 Apr 2020 21:30:38 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jO6eP-0000NS-7n; Mon, 13 Apr 2020 21:29:54 +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=1586813394; x=1618349394; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0f2ExrBOHSi6JWzrG2+CPU/JStpL/wqXhkbpv3XY90M=; b=Bb9GmEBJQOPBNCJtuVHxK3wZyG+k6zheDyLNd4C7umALPEDn9QGjz+7L VcNO1mkriE6q6uILZlZUOvrljqdCQYHN16zaF/2lHkjz7VE1f1DFDX3q2 vwhVtKzFE1thvrHvRP9C3qmkb2Pfq8DWvGU3LZ/vLJgs1O4YQp80pdQxA /F0YEg5DqeY/K9Mhpm7G77UebahJeoied27RM7ILfO1VaQggKS0jJuCim C6nUynOccHqG9GGYa4dCnkYnqVfItLNm2iTD+CxCarToWy+PLNsIPC9lt SqLI74P1Nmxd9XUdMG+fWrp9wdxE+iI307csXhklqbBhx+3/MF/fYTSby Q==; IronPort-SDR: jxkVbaGQgw+1NDEq8dd3o9AC42aR6aRwLmqSH+pISbjsYyoITpawvC2eMW+euxA7FTV/mD9qZA R9oDYlVzoVECw9WVz1NwuXWoWO1wDOLmP53TXBVUwLlR1uNtRsrxoO/eDw/mZYUTLdxHiIPSTi 31oQijWRoCwoVtxhIaJAP101FL9JUJTIUMXHEJa2dZZ+SHcWjCmQ8RNzRdRR3J/aJ6pEmABj0Y s6S+eFvKvVW73VuPiKEdKHsLTnDEkPODkVfiko7Zr4wVGvzdG6qyojR9T6oxZWaXu8sEYCy+8B gTY= X-IronPort-AV: E=Sophos;i="5.72,380,1580745600"; d="scan'208";a="136683332" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Apr 2020 05:29:32 +0800 IronPort-SDR: mPP8eogtU34Vk5BT6DJmnuBK67ZFk+oXgUxFpcJ+fM6sh7h/m+PDTNjg/wjCAlKV7XNR+8fZsu bJs/An/CQX/7THvcd+jO2fntl8qoN43qZCYKiRY1rtcn4upzCkGTqD6Cn9TXlzSr/Y+CA4QHUb 0vSJclEbvjcXUzazzByfoyOf+ksQqyKqh9ySlejSvZ6m/QKLjBMp6g6qT6TgW8Z8BeKDCLK/97 jWlwCry8fgdR6hL6n4wP/FkB16rR4yH4L4mq07EVKXOX8Y3zUA9QUD7H3/IV5oZpJFjF50kPDI zCSSU6EktnXunh2FPc4Qb216 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2020 14:20:03 -0700 IronPort-SDR: HUSqYi5vSgglAB48tTHXiwXFEgGzTWu3xQT+gNZyviZvsIWsIl1ManBsmjK4ODlmAAKSnUSQBX hPDdajhF35I1QInTkpa3Ac8Wq0rhLhW8seTLPNql7GQ146e8b2vx0z2Jui44bhns3BMTAuDjki Q/fp9GfGLieHsPCPGOTmdoTr3eVMtsrp3a8vYA2V9BPATnUKUKnn3r7/W6PjpzuSalyEopt+W4 0ofmyQIRC5f/xIiPTuAaa5zHT5qFtFbLNH7gppKhYlhweK9b7tSopYGN6YikYTiu0/eGi9xkGp Noo= WDCIronportException: Internal Received: from 9dg4l72.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.26]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Apr 2020 14:29:32 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v2 PATCH 5/5] RISC-V: Add EFI stub support. Date: Mon, 13 Apr 2020 14:29:07 -0700 Message-Id: <20200413212907.29244-6-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200413212907.29244-1-atish.patra@wdc.com> References: <20200413212907.29244-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-20200413_142953_327784_DF37C691 X-CRM114-Status: GOOD ( 27.01 ) X-Spam-Score: -2.5 (--) X-Spam-Report: SpamAssassin version 3.4.4 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 [216.71.154.45 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_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Ard Biesheuvel , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ingo Molnar , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=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 + arch/riscv/include/asm/efi.h | 45 ++++++++ drivers/firmware/efi/Kconfig | 2 +- drivers/firmware/efi/libstub/Makefile | 8 ++ drivers/firmware/efi/libstub/riscv-stub.c | 131 ++++++++++++++++++++++ 7 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 arch/riscv/include/asm/efi.h create mode 100644 drivers/firmware/efi/libstub/riscv-stub.c diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index f39e326a7a42..eb4f41c8f3ce 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -379,10 +379,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_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 fb6e37db836d..079435804d6d 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -80,6 +80,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 4da4886246a4..ae69e12d306a 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -129,3 +129,4 @@ CONFIG_DEBUG_BLOCK_EXT_DEVT=y # CONFIG_RUNTIME_TESTING_MENU is not set CONFIG_MEMTEST=y # CONFIG_SYSFS_SYSCALL is not set +CONFIG_EFI=y diff --git a/arch/riscv/include/asm/efi.h b/arch/riscv/include/asm/efi.h new file mode 100644 index 000000000000..ba0a6d35cc15 --- /dev/null +++ b/arch/riscv/include/asm/efi.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2020 Western Digital Corporation or its affiliates. + * Based on arch/arm64/include/asm/efi.h + */ +#ifndef _ASM_EFI_H +#define _ASM_EFI_H + +#include +#include +#include +#include + +#define VA_BITS_MIN 39 + +/* on RISC-V, the FDT may be located anywhere in system RAM */ +static inline unsigned long efi_get_max_fdt_addr(unsigned long dram_base) +{ + return ULONG_MAX; +} + +/* Load initrd at enough distance from DRAM start */ +static inline unsigned long efi_get_max_initrd_addr(unsigned long dram_base, + unsigned long image_addr) +{ + return dram_base + SZ_256M; +} + +#define efi_bs_call(func, ...) efi_system_table()->boottime->func(__VA_ARGS__) +#define efi_rt_call(func, ...) efi_system_table()->runtime->func(__VA_ARGS__) +#define efi_is_native() (true) + +#define efi_table_attr(inst, attr) (inst->attr) + +#define efi_call_proto(inst, func, ...) inst->func(inst, ##__VA_ARGS__) + +#define alloc_screen_info(x...) (&screen_info) +extern char stext_offset[]; + +static inline void free_screen_info(struct screen_info *si) +{ +} +#define EFI_ALLOC_ALIGN SZ_64K + +#endif /* _ASM_EFI_H */ diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig index 2a2b2b96a1dc..fcdc789d3f87 100644 --- a/drivers/firmware/efi/Kconfig +++ b/drivers/firmware/efi/Kconfig @@ -111,7 +111,7 @@ config EFI_GENERIC_STUB config EFI_ARMSTUB_DTB_LOADER bool "Enable the DTB loader" - depends on EFI_GENERIC_STUB + depends on EFI_GENERIC_STUB && !RISCV 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 d590504541f6..b1db3a793c43 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -22,6 +22,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_STUB) += -I$(srctree)/scripts/dtc/libfdt @@ -56,6 +58,7 @@ lib-$(CONFIG_EFI_GENERIC_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) @@ -80,6 +83,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..acb69eae187a --- /dev/null +++ b/drivers/firmware/efi/libstub/riscv-stub.c @@ -0,0 +1,131 @@ +// 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. + */ +#ifdef 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; +} + +static u32 get_boot_hartid_from_fdt(unsigned long fdt) +{ + int chosen_node, len; + const fdt32_t *prop; + + chosen_node = fdt_path_offset((void *)fdt, "/chosen"); + if (chosen_node < 0) + return U32_MAX; + prop = fdt_getprop((void *)fdt, chosen_node, "boot-hartid", &len); + if (!prop || len != sizeof(u32)) + return U32_MAX; + + return fdt32_to_cpu(*prop); +} + +/* + * 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 fdt_size) +{ + unsigned long kernel_entry = entrypoint + (unsigned long)stext_offset; + jump_kernel_func jump_kernel = (void (*)(unsigned int, unsigned long))kernel_entry; + u32 hartid = get_boot_hartid_from_fdt(fdt); + + if (hartid == U32_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. It will also + * ensure that, on platforms where the [dram_base, dram_base + TEXT_OFFSET) + * interval is partially occupied by the firmware we can still place + * the kernel at the address 'dram_base + TEXT_OFFSET'. If the straight + * allocation fails, efi_low_alloc tries allocate memory from the lowest + * available LOADER_DATA mapped memory as long as address and size meet + * the alignment constraints. + */ + 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) { + pr_efi("straight allocation failed do a low alloc\n"); + *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; +}