From patchwork Wed Apr 15 19:54:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11491847 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 F1BE3174A for ; Wed, 15 Apr 2020 19:54:52 +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 C4C7220768 for ; Wed, 15 Apr 2020 19:54:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="KbWqPvUM"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="BzmRUYqE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C4C7220768 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=T2uGqdcx6YILRVSAwfgDsYPFRNtG8sQ3iocQr323HHY=; b=KbWqPvUM5hAWUv TYodDj42FBYE6g+guGqpmb8FwV0joleGIu2fwn3MaapKNVuYnwfymLYhDxFzPHdjuM26bjiJ6INvZ WwjCiDNqbEaEUfxY7q5AV48fbuW9SdyiPj1l5NnyI29/mVUi14p2EkFOUZwF0qcYEUplC5BLytnUk JPGTjiXGZKwndW1lkIsyThdtXtcFeyMrH7qL0PT/6xFoMQyZALMQKjzYiaaDPdC6pVD1cbyl6Oh0b CnROxu5FW0r/ZLyfFmkjj05dXd3K1dIPAXwTzlq4VwNK0/X40e9GqATC3A5bcI1YXMrjMfhbEbOwQ VQttsdoSzgq9yfL5h8EQ==; 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 1jOo7S-0007Xg-WA; Wed, 15 Apr 2020 19:54:47 +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 1jOo7Q-0007WM-MX; Wed, 15 Apr 2020 19:54:46 +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=1586980484; x=1618516484; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Djqlg8Cv1gfYTZdwhPlUmPWsMdIBfQD89t54SYqYujA=; b=BzmRUYqEYLf0iiCWLIJfg7euvXJPMPVC4QVXxp6Ry/IvFAiG2kn5cyAv 9FBBpb3udxWNVxyBdbNq+UZqkV5dg10Q1wqPKIzxnDVEExojZSeqJr7hD ojx1XA0MOK9vC/L4KPgfBweFUbknEX1ZyO7oMoAp7f956MeNuZHjrmdi9 EXuPPy3JHZ6j5zTij9/ll92b1LJ+uZ5hm3sffFuU9pF2+4i9H1zdXjstQ 3LWzStAGnuVyWo7hnC/DsVfPirqnUpvsVJzMfXoo3JkTre7ucx1B91Yqr 7nmaV+b6DhckjSzM/YseNkMKuiYKDTVHszUG5+82P6BGcjMF56HerGX2S A==; IronPort-SDR: 3dC3dQPENfpaw4wsp9D8yKNGNeLflUUS2jIBOFBvapdTPI9EFN1VJ97RgZV+fXC0F88X2HGtZY J5foz9GTI4uOM+qq1G21SOerZDYjTOqIbiUeGSNEOEO/WJeVyeESvPXGFaBU4dc+OLfPOv67qd YAyqXLob6umsZ8yvPf15bz5OvTAWkeEiCG96APYmguEK1/laoiq5MNq7pGiuRWVBMZvpJEknfP jpTxHL7L9ksQc78liR/+X85cSmUWknXceea44I0M5EYDxuwjoGQ80Z497pLRgioX1t5Iueqvxb KJ8= X-IronPort-AV: E=Sophos;i="5.72,388,1580745600"; d="scan'208";a="136848622" 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; 16 Apr 2020 03:54:40 +0800 IronPort-SDR: oAWTmSe3ER941Q3FBhJeUx7fdXXskrbOgaEBxFKA5XSB4H2TqzVGKj5WbOOqW/5f5f0DQ7xH2m lD/SUXu5X0+Pv6V6nHhnzwl/MYTNT70ih0SYWSSdwC0/rveCIROe2uYhb2TBdv7enbFgzZn5Ck 6oOrg2lu75tcpGc91lDlmjcoMzXftexoJJzLrA7ADH5fyACpVlwWAwUdsmFX6IV7X6QylM5j2h yqgxBHhxQfBcccErOC5gkMwnEtfdZ8N2fcXudAyG2JLFLoWHcOK25UWNwwV3W9wZQ5O5bphf7t fKqYMJn0lgvXPHXTT0H2sVR4 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2020 12:45:08 -0700 IronPort-SDR: nSxPAvAlQJjzhHxPbWNQxGt8iiqTRn/CFCJkP1IW2hN5kyO5x8A0nRolmARO8ejzgeKfne+XP+ YhJ4lrEiUZ37oaoV0GyXFhQYDJ03SuhpCh0NrV2VvwhAhUgoNRfuHaBpEE/l/USJX50yxiOqJy YTTxdcr6U/EaTqWNrfb+QPwLTSOhaX7knnoFdhHsKeiBV4tKN+5T0zEH4dBF0qLaMALMgKuIbZ 7HNCWtfgqizgzP0T4PThCN2aQ7PrhPH4yMg4hhf5fq9zYKTHHBylCByOHlSkTlfb6aJV+U9QcM MVE= WDCIronportException: Internal Received: from 6hj08h2.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.244]) by uls-op-cesaip02.wdc.com with ESMTP; 15 Apr 2020 12:54:40 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v3 PATCH 1/5] efi: Move arm-stub to a common file Date: Wed, 15 Apr 2020 12:54:18 -0700 Message-Id: <20200415195422.19866-2-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200415195422.19866-1-atish.patra@wdc.com> References: <20200415195422.19866-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-20200415_125444_834208_CF08146C X-CRM114-Status: GOOD ( 13.74 ) 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_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org 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 | 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 2dbe4394f818..2b4e09bf987c 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 \ @@ -46,13 +46,13 @@ lib-y := efi-stub-helper.o gop.o secureboot.o tpm.o \ alignedmem.o relocate.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 @@ -74,8 +74,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 Wed Apr 15 19:54:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11491855 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 9B02C13B2 for ; Wed, 15 Apr 2020 19:55:32 +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 722A220768 for ; Wed, 15 Apr 2020 19:55:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="eKJz9O7I"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="SKJk+u5O" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 722A220768 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=goyVmJe+J57iQdmkUJbsbckf52hUGMFdwPN6KGpPCvA=; b=eKJz9O7Ik/0rkz wUVCPwKgQo/QdG5VwRvah+trZhWurIzjopYuInYjUvnwDsjge12xONi8uWdbin4WOZ0mhc44MESCt bYcq2KOMnzN894S6S4VBVxzXFCaeVtCj6oXy1l7+lQ6MiG5el14nGvCarrU33uqyBb3/gGiB8VSFo 5xnXHY9hEemw12Oey7siAMAHv7iwEgcO6v1Vx2l4bICd38aDuTSMv6xUS4IKtye3Egx93Tv93Ccrj nAesIGf6F2tTZXulSHxIfEwW0UtZESRD1WqvjhcbXiWWxGq9wWxaGXp5qz1Y5iySfP/p0TgjPJ4hq gvajIOsmDY/FHuyqoPMA==; 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 1jOo88-00028B-F4; Wed, 15 Apr 2020 19:55:28 +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 1jOo7S-0007WM-HN; Wed, 15 Apr 2020 19:54:47 +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=1586980486; x=1618516486; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qT9c7eXt7ksLkS8LTzuMlCHOyGGyAUacpIVqI65fctQ=; b=SKJk+u5OwhWxxCvwwISVxkXMiaNQ6beU7M2vsvT6FVgWFqa6HH5aHgyE 9DYDgGnvNzSHID7WEkUuaPQjpnWyP/lQ5MFN6P3HFYsI1GvHcv6xWnl8n no9ERQL51Em7aHxI/dtWaHUkAHBpEfBPHciaVRny0XO4bBCF8GVpXp0OY L2/U0amNhtHa/y6CmeL2UI3fhYFGvEFANcTkeSUMhzr/fVbTYkZ1DlYIn YyuuquW+yZYQynKtWjk1sTTDey/EmtIOEPls2NP1rdKpZMKFu+6VaVQiv Hb0/zXAJCeKioWZCmDPCWTq9POvV//BuGTtpNuZLjo/9pKYTUcT5G3tjc Q==; IronPort-SDR: 9wVKyrLUShmzEjfkxIlXfnOBLZJHEFy1zTQdFHpk9wxhMv7drlPSA4BRFLNEQUERhhd3mXwQ70 vv7b1AyE9isHKpNYHjlfFTBq9XcqICYItOVfcwUo0VsZg+wvQMiar1jTt69iJyU+YWjMZhgefy CAU93LFQdPpneIPTeT0NB/R2hBtLb6rgik3RhJd1+zrsX7yvbixANp1Tfvdx8uuDhuGw9LA130 KanGJ6YxV/5MTjTqZwdIKkPHEa2cy/YpY5S+pdFx6PWiJKRp7Y5AhayNAJ9N6E6Cy5mk3UZYjs 25Q= X-IronPort-AV: E=Sophos;i="5.72,388,1580745600"; d="scan'208";a="136848623" 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; 16 Apr 2020 03:54:41 +0800 IronPort-SDR: xqHQ9saiQSRdtdSVSrd33cvHxJtOuGRzv7RcooHw6fN8Dp/xMCclaWNgSG+NEG8W0ufJbmoQHy N++VfpdlZktkOwAcH/40ef4plk89cg95J9culC05PEMb3abE93vbySOju9riXZzX1aogUNqfmx 1J48Wj+jld7N7n1sMYUZz6Lc4YL3oocnHVZ+C+3O7g2MpnOfbbOTwdDmBbn//vHGDeEjjiLN+j PwR37VsaAtGEFA6WkpL4vrFWu4w9M/gD/EKKnycJaZOgFtXPYTg4wm9K5R54PrQ781SDB6Gd2p /2w/Y1cjr7uNNAVBWwevTb5u Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2020 12:45:09 -0700 IronPort-SDR: knJxDpysSdXz1GAUcRumT6u3DQfuJKc6iXGu46uVx6L6yak8+KA0bLmLArXQGY0922X1ngMzDf vQnhFvlOMK4Bvry2PcsKAh2GOXYccYAGxa2yalQ+SUmw8/tqPAan7ZDULyBafUl6HbGby4Cwnb tiolgXLVo+J7AD1a2FBjHkCWFs81lfxedUY5YC+Wjl6qq52YwIvKJVv2/Xu+UR57l/VjRwSBMb rowNC+ZGuUjXkUKTuXO2prpj+3tXkmss1t6HXEnniWbkBOd9jx5mXLEWgLaJqN3QXAem8bXeTX 53w= WDCIronportException: Internal Received: from 6hj08h2.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.244]) by uls-op-cesaip02.wdc.com with ESMTP; 15 Apr 2020 12:54:41 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v3 PATCH 2/5] include: pe.h: Add RISC-V related PE definition Date: Wed, 15 Apr 2020 12:54:19 -0700 Message-Id: <20200415195422.19866-3-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200415195422.19866-1-atish.patra@wdc.com> References: <20200415195422.19866-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-20200415_125446_661488_CB67A2C2 X-CRM114-Status: UNSURE ( 9.36 ) 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_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org 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..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 Wed Apr 15 19:54:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11491857 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 EDBBF13B2 for ; Wed, 15 Apr 2020 19:55:34 +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 CB5EC20768 for ; Wed, 15 Apr 2020 19:55:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ijXP6/3M"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="cfONAH7C" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB5EC20768 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=tttd728ZR7pfChiGqdkLPg42rQ3qB92mFJUxcj2QtZ0=; b=ijXP6/3Mj/i3M2 KVRCpBCCghq1ljZzlTvwDR968hrtyyEB0IZCczlR/Oxx+2vyDJ8FoCJd7EDhzVm+TzQB3REb582Se 1GddE3YCq2HLiouLO9dsZD0J7xXdYnUX3Q/PYBvCzmNIIFSvXGqVN3O39kUGZttMCU6kI3X5a7hnC oPjMsEH9IloCE1QwTri+oXnqvNGY7PAFNpECbRH8UQn79yn6fl3XP1IsS9gIk3xirFPnb3h7r2O2z YwlGJF0PblDdGPJt3MYwQ39SXKD/yPOh+hSaEZa71CLeux/Uq6bPQhMS55KR+NvwQsavBeDOXJgjS zdBU2RtIRhe7cOpuFpaQ==; 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 1jOo8B-0002CF-A2; Wed, 15 Apr 2020 19:55:31 +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 1jOo7S-0007Vq-JR; Wed, 15 Apr 2020 19:54:48 +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=1586980486; x=1618516486; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=I/GiEGyOV5rt1rc9GnsBz8XcyhOtNk7wcIG4+FIGGnk=; b=cfONAH7CU6fKKy2vzkDlvKD7e+d9Ozj015vY2V5hd8ZCjgEzhUY6OSDH GXugRA9oQkixMSbBZpNG8FO9jHvxn4uQAYbOup202kjMmHRiqjP02WiNm lTnReX61bLq9dlYs3cUNgy9AWv1dl1YIgf+YgPPjBkywlRb1vEvPsEbuN laHLc3uyFYcyN8Q1BomqJAaTtPcYOd37tIhLHd5+Um1uGd+eYvJYPvvGM ASxGdtOVm9VCZIeUTf8eteN73GMT5bFvAbucGPawIzzXHSP3aSYYUJlKK 5bUr8IvAvbupaA9HdHMZ3LV64b8D1/UUVlT464bYOcj6Xm4XVZrMznxCg Q==; IronPort-SDR: z0DYq5ss1bcgeMmyB8K+HK0kMJ5V0hrMcqZ1R7Mh9L9CUM8CG6EZCLQbZ+dPB6vtYCTTm5Ubdj lUUrzX+homqeO2oF/zbxs3OZ/MZk6tAVKSNkPPCpgA/9TJq6cmdCyUURu+OZrJwWerKd2hbiTx Z7AFM8qUNlJJKhnxq2JDswRAk5O/oVFutTPoBMn3JJ6IPKhx827u5iTdku5j7xPh51tyUNKjH4 CK9eeRfinYlmvWOewD9xcdVpM2eldn1YiCLjMsq4bRuoTcMiTzmOQtKMS/sLYsLvbFaOWdVMf0 J4M= X-IronPort-AV: E=Sophos;i="5.72,388,1580745600"; d="scan'208";a="136848625" 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; 16 Apr 2020 03:54:42 +0800 IronPort-SDR: aVO2z6mwW73PklLAtARbzlwgaF1nQtRFJAQKJN7Bt+745Gnd1WzegweV4ETbJD9Awq/TW8mkKc 2jqeBhUQEAcwqFwu12qoKII52awI24IA8md23PGCOl8Ix3Xs/SV83RhUigDOk3Unhx09AyEf0q H34HPwmWEMGFoLYcn0OQGoHWOwJhJJfMARQ0RLOxvfOhuhOxL9SMNBUvVSuOmxjyBfW0BmaJ5L fgf7acWtRohEYcdDP0xeXDnEPdEYwCEgMis3VmsM0I1qlywdEJJ9RaSleQg9q9QKqSMCBlVwj9 McaxOAw9cXec6BvBBK4ucnBi Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2020 12:45:10 -0700 IronPort-SDR: Pjy567yOzeM1bdT0GQqoGVowVxs6q7IBZl9SQHXkO3QkXpd+chuWhK+yjTisbi+VNX91SjvBnV GxEwlGV52czlYA1QiMCes6giLsRZptIWqNwQLGaUVCzbNyJ5USgkfDMSo0A+CPiD8/839jEeC8 rq12xRqTN3Mqu23X8EQ2bUPV5lpeA7+X4zFGWV3eU7jKjr1zayWZf5qVNdguKVu94FgPKEHTvD hdndP2UkRg/AN/9Hol45h4K3BSkE3BArGEmTR+MtRy637lcQqgIwxWzbT5MJsz0GuUvuaC0fbt VQk= WDCIronportException: Internal Received: from 6hj08h2.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.244]) by uls-op-cesaip02.wdc.com with ESMTP; 15 Apr 2020 12:54:41 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v3 PATCH 3/5] RISC-V: Define fixmap bindings for generic early ioremap support Date: Wed, 15 Apr 2020 12:54:20 -0700 Message-Id: <20200415195422.19866-4-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200415195422.19866-1-atish.patra@wdc.com> References: <20200415195422.19866-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-20200415_125446_775479_D4CA7D87 X-CRM114-Status: GOOD ( 12.96 ) 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_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org 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 | 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 Wed Apr 15 19:54:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11491863 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 2E4B3174A for ; Wed, 15 Apr 2020 19:56:07 +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 D553720768 for ; Wed, 15 Apr 2020 19:56:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="PIifp2h6"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="KC4UPfJY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D553720768 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=AI9hutKNRpZ4azAaCRZDWG6swKV8E3gwHdse3jF8EBs=; b=PIifp2h6SqspCs /p9RasHEDZw87ep4r2/Z4tFk6uyclkAw+/HT5I/dcWFjrJ1gp3p1ebOrXo/xtUhmkC+z9/p9qEQgq NodOTQi6j3u+tm3v+EnGdVulXZUuvIwVggssx7P74gVcJpk8JJcYlPBr3jOAVBARf1Nxh2Zqt+s6E obo7b0N6Zc9D1N/jILd5FuAhl8rR2YfK0XCP6AsTadYgnw+SaE5PeBJgOmbGucKglZw45OE5dPuaO 7ITipNliuBlibJ2VlzUI/TPm5QqZHIuctSrMj9dJIe5QQ72pjLTiUEv5wLhB8C1cgF0mqOEaRnrOt vs75lW+dLYQGFqxzdMCw==; 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 1jOo8f-0002hU-Bh; Wed, 15 Apr 2020 19:56:01 +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 1jOo7S-0007Ws-LT; Wed, 15 Apr 2020 19:54:50 +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=1586980486; x=1618516486; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wVyhR7syP9pKuHeJG9LcudHYbM7Xp5qDBIUqIxd3Oss=; b=KC4UPfJYYHhqYjjfPSLWp6N2+DohQLblqmSt0EPnzxtKhrajMTI/IaFt k/WpDh3y2oiE7WdbPPV3CaMZwsRrzcUfp7NAdYhpl6s8WDvB6AfRb2564 Cqvvbw8UERDqFlXlx23CVMM8dq2tTcMfClfrp5MHo2MatbjRymlh28rFG jNzvpSYwU2ejcDhLyjM6eZKkchL8oscMmZ0zLHh4YOrwzFcot7a2NXDqP qy/0l8m9t8jrKCnsAbiLHyejPGuAYrAmXyst4ENsKt/npLdZW2Zrvpzi/ 51JTgaxeJE9woNMgO4rnK+FiocGK6CQsyfRUgCPDn1Uw94T9DU4XaBVtS Q==; IronPort-SDR: CaPDMBscMAsDYmbGxewmGIAJwMKr/bcrC8Wq/tuK2i0krcDd8e4s8GazHjWdCDT3L5u/bJQfqz fxWNopY4lbxQXHQEpde3rzR5iehHQORB1KUVnnHStCNg0MLZ95fEviY89ZIvYLYo6+s25vtz6T of9SvlOZdotccQf/yomTHHGwH87s5JSZE4OashQP9D2c3EbQri74wFv7znY+KZIpVp5B/1o3nj R51BPoXifU1Hb85MeF7P2NZA36VH2cpjYvHrc7jcYxSnu6Q2a94f0mRsaL2F2mew285Wbmrth6 UZQ= X-IronPort-AV: E=Sophos;i="5.72,388,1580745600"; d="scan'208";a="136848626" 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; 16 Apr 2020 03:54:42 +0800 IronPort-SDR: XI6e7eiCroXMwgEu5kQn8d8yli2a09o0fb/Twk/xPz963SeNKVnOY+FACo3jGqjqCS4T2WyBxT TpzWlccpI/Ex9sRnUVA92j6cL/X5xBP1IBC6qh3e9cshExZvMYTRSNrsrLBE0nNBDmFVm9yxCd f0tFR9xgbARpyUL3XkwMQm5cVkkBMuX4y9lmNAD918mOc4O2Cr7P/BQhoVahpwEJQLVfR9QA03 r6ljkqPdlHqw/5XGjIwTG0dTrXu0cuhEy+1m+a2A6fUfCBnKbq4cs/S6rNg+LLo6hI8x6AgLVA REZ8dFAWjS6ekP5c8IyRF92M Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2020 12:45:10 -0700 IronPort-SDR: SDyDwrC51OvIefM2MQOQp6ksfqyqJEWG34nfeaNqad0QUd2Ug8bTh9sj/65xKfGdlurbwP9BA1 3jw0csLJb1jO+3gXRuGOHMVej5jDZWm1r+XIKCGiUsFW5nsfm17HnpvEUo1IFzs6x1pdwEfwHV EWy77GMCSJEGGqtFa2aF94+b8pITuAYUskApmw2j+hhEmaXlVoR1GhcnvVGLxknvZLhTBAaE9P KHqi5lkvd8AU7FRCCFJU1/lffY++z9R/E01qBjtLDRvwVXTsdE2o6Mj6437r9AumtZQ0XQ8i8A xXc= WDCIronportException: Internal Received: from 6hj08h2.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.244]) by uls-op-cesaip02.wdc.com with ESMTP; 15 Apr 2020 12:54:42 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v3 PATCH 4/5] RISC-V: Add PE/COFF header for EFI stub Date: Wed, 15 Apr 2020 12:54:21 -0700 Message-Id: <20200415195422.19866-5-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200415195422.19866-1-atish.patra@wdc.com> References: <20200415195422.19866-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-20200415_125446_778299_7B66F5BC X-CRM114-Status: GOOD ( 22.25 ) 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_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org 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/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 | 20 ++++++- 6 files changed, 203 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..20ebf7e8c215 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 */ @@ -62,6 +71,8 @@ SECTIONS _etext = .; } + __text_end = .; + /* Start of data section */ _sdata = .; RO_DATA(SECTION_ALIGN) @@ -78,9 +89,12 @@ 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 = .; BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) @@ -88,6 +102,8 @@ SECTIONS *(.rel.dyn*) } + __data_virt_size = ABSOLUTE(. - __text_end); + _end = .; STABS_DEBUG From patchwork Wed Apr 15 19:54:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 11491865 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 1DEC813B2 for ; Wed, 15 Apr 2020 19:56: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 DF2D320768 for ; Wed, 15 Apr 2020 19:56:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="k7f17AUe"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="fceqXl8x" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DF2D320768 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=Mo5tWRgGRWz2g1SWY0D7krdq6jzPlZV2w+YfEsY3dS8=; b=k7f17AUewAy75E tgapE6TOC8RFIz3hRImCCFLr0a8PHhuRNmyvovbR/QW9XqX6qrB9uGH4DZOxMGY0nBFHm+uWG1rOA r8Hup5KBorM6lp6dW0hNiRD82C1vFCIbJgQ1cH8YTxQhDIHHexvJawt/4qyy+qaWmbOYEcluQvmGK l8eush17GZhiUnq/RbVGbuNviEhvnXBoTqd9Igw9wnwHYNxFwpTBULi+TJ9zC52+aPGfSEZKd7dbq MJtM4oLo2c9IZomtsOChfSWaSWe+ZwYu3m87QJOOfd5H97s8cghWRSBqBE4aelTZNQa7J87s26FFj 7sa83KHuB+2Pr2jrCuow==; 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 1jOo8l-0002nF-MK; Wed, 15 Apr 2020 19:56:07 +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 1jOo7U-0007WM-3P; Wed, 15 Apr 2020 19:54:50 +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=1586980488; x=1618516488; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=SOCnYBY/9HSTeWUNVwqlwlhuVh3CJ/HjX1lHLXJYkYI=; b=fceqXl8xpaMSv7bCPbourJhvKcmBYEI+kR2VNAN3lvXhe8xvkHXR3Rs2 eIihGZDveU3Mu1AFPl2n4JXa4L6qax0Jxczg/66/rvlKM/X/ayKJ1LpBS oCGqoNmcXfx4bFY4/74e4sro4I4e8hsH+19EYR4dw0KUuG1ot1S9ViJjl ARVmKFk92bcRLmnJG6o59gJpMxi47yJQT0spZIVWyXMZv041s/82Otwwe y8uxYPyM9SjVpO/zfm28l5xjarwwbx8Aiu72WTpb6W9d3QtCHwoCafbSU AEgiRt5uZ4Z6LinIu5zFrwl0RzZRzDPIVmuueTbE/69cBQnJM4x3/C+BY w==; IronPort-SDR: L/OsjmxwDXN0fr8owREn4HyBkWxgSFgNalptJKZTSH8TOKurQIU+BjdT0x+l81iaPu9CS5zRdT ciucnnYWRLB+fOgkAPmKIuwdIVL1cZnlg5lH1ovWOsvZzeZrBXxHNwvY+Jk3HrU2kwhoRYZUlH 3jTLsRcDOcUloMXox2GcNmZAVfLuXCTunKKaZTzZfidULnj25YVpGW62GA6+L0uK5Pmfy2qN7d ttlWnIWWtJPHtjgdSGmcaZSQouuJp2nI7ysc+eHBBzrCfzZ7tFVQO8ROg4NwO7KBNtif376UNj 2nA= X-IronPort-AV: E=Sophos;i="5.72,388,1580745600"; d="scan'208";a="136848628" 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; 16 Apr 2020 03:54:43 +0800 IronPort-SDR: Jn+R8cL/YRxcR068pTzvhSf5io+yeoP2ovYnE7u7HlGaDwGEp9Q+9jN0rEBmc3kTYyvFwInnAY MI3lIqpxQA+UoKjtD/T8MEcYfrSqvLTqn85bDNJLqHLodt8wtdF/WEljMbwHw9i5SF0xjvOK19 qhJ5wFKq+nWIdJlwbs+UCh56PqhlZSL/RsUOFZne6/JQMvN/YyPpir64h2t97rIkJ9+XSRn4IV xOpbA+7cwDcrjjZgsV3V+nyRdAHa/J/I5SlghqxsGoIGdZ5VRDpyJOjfG+dsvvguHPTeSEyRkI vw6ZjWztfiE7D64eYl9FtCM/ Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2020 12:45:11 -0700 IronPort-SDR: GnsyEEFsF8qR+3PYUZ/ev/E06sAvgn4ueIzil2Jd9m+iN/H0TtKsZ2yjkIIPiym4Hy/6DnZVnb vOuKBAcAapA7RvpLJGBbPK0/I7wtC7+enFYw5yEMWamsZARe6qhpnqID96H4CNncVzqn93RyJ0 CaUHIHh8qaaQykvIm+WL9KgMEnAxtVrBUkljlfiyscLDCbIqRVkvrSR8y79iD4IrX235KdxRFW hg3Ol85hSYDAI/CPV10ONPMuHHxTT4Xo+aNI8rbbtGdvxcXdjzr9yxTiFqPUVrH24ZADt9ADF+ mug= WDCIronportException: Internal Received: from 6hj08h2.ad.shared (HELO jedi-01.hgst.com) ([10.86.55.244]) by uls-op-cesaip02.wdc.com with ESMTP; 15 Apr 2020 12:54:43 -0700 From: Atish Patra To: linux-kernel@vger.kernel.org Subject: [v3 PATCH 5/5] RISC-V: Add EFI stub support. Date: Wed, 15 Apr 2020 12:54:22 -0700 Message-Id: <20200415195422.19866-6-atish.patra@wdc.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20200415195422.19866-1-atish.patra@wdc.com> References: <20200415195422.19866-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-20200415_125448_247003_C195CCE9 X-CRM114-Status: GOOD ( 24.20 ) 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_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: linux-efi@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Masahiro Yamada , Russell King , Atish Patra , Palmer Dabbelt , Catalin Marinas , linux-riscv@lists.infradead.org, Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org 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 Reported-by: kbuild test robot --- arch/riscv/Kconfig | 20 ++++ arch/riscv/Makefile | 1 + arch/riscv/configs/defconfig | 1 + arch/riscv/include/asm/efi.h | 44 +++++++++ drivers/firmware/efi/Kconfig | 2 +- drivers/firmware/efi/libstub/Makefile | 7 ++ drivers/firmware/efi/libstub/riscv-stub.c | 111 ++++++++++++++++++++++ 7 files changed, 185 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..62d7d5eafed8 --- /dev/null +++ b/arch/riscv/include/asm/efi.h @@ -0,0 +1,44 @@ +/* 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) +{ +} + +#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 2b4e09bf987c..7d46b70b51f2 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 @@ -57,6 +59,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) @@ -81,6 +84,10 @@ 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..69d13e0ebaea --- /dev/null +++ b/drivers/firmware/efi/libstub/riscv-stub.c @@ -0,0 +1,111 @@ +// 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 + +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 = (jump_kernel_func) 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 max_alloc_address; + + if (image->image_base != _start) + pr_efi_err("FIRMWARE BUG: efi_loaded_image_t::image_base has bogus value\n"); + + kernel_size = _edata - _start; + kernel_memsize = kernel_size + (_end - _edata); + max_alloc_address = round_up(dram_base, MIN_KIMG_ALIGN) + + kernel_memsize; + + if (IS_ALIGNED((u64)_start, MIN_KIMG_ALIGN)) { + /* + * Just execute from wherever we were loaded by the + * UEFI PE/COFF loader if the alignment is suitable. + */ + *image_addr = (u64)_start; + *reserve_size = 0; + return EFI_SUCCESS; + } + status = efi_allocate_pages_aligned(*reserve_size, reserve_addr, + max_alloc_address, MIN_KIMG_ALIGN); + + if (status != EFI_SUCCESS) { + pr_efi_err("Failed to relocate kernel\n"); + *reserve_size = 0; + return status; + } + *image_addr = *reserve_addr; + + memcpy((void *)*image_addr, _start, kernel_size); + + return EFI_SUCCESS; +}