From nobody Thu May 2 08:59:12 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1505936910861761.4376649701486; Wed, 20 Sep 2017 12:48:30 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id CF73521D046D7; Wed, 20 Sep 2017 12:45:23 -0700 (PDT) Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by ml01.01.org (Postfix) with ESMTP id D295821D046C1 for ; Wed, 20 Sep 2017 12:45:22 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EF11B80D; Wed, 20 Sep 2017 12:48:28 -0700 (PDT) Received: from u201365.usa.Arm.com (bc-c3-3-14.eu.iaas.arm.com [10.6.43.238]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B85583F483; Wed, 20 Sep 2017 12:48:27 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org From: Supreeth Venkatesh To: edk2-devel@lists.01.org Date: Wed, 20 Sep 2017 20:48:11 +0100 Message-Id: <20170920194813.43665-2-supreeth.venkatesh@arm.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170920194813.43665-1-supreeth.venkatesh@arm.com> References: <20170920194813.43665-1-supreeth.venkatesh@arm.com> Subject: [edk2] [Patch v2 1/3] ArmPkg/ArmSvcLib: Add ArmSvcLib implementation. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch adds a library that enables invocation of SVCs from Exception Level EL0. It will be used by the Standalone MM environment to request services from a software running in a privileged EL e.g. ARM Trusted Firmware. The library is derived directly from Arm SMC Library. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Achin Gupta Signed-off-by: Supreeth Venkatesh --- ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S | 43 +++++++++++++++++++++++++++= ++++ ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S | 41 +++++++++++++++++++++++++++= ++ ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm | 39 ++++++++++++++++++++++++++++ ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf | 31 ++++++++++++++++++++++ 4 files changed, 154 insertions(+) create mode 100644 ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S create mode 100644 ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S create mode 100644 ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm create mode 100644 ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf diff --git a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S b/ArmPkg/Library/Arm= SvcLib/AArch64/ArmSvc.S new file mode 100644 index 0000000000..ffe005c07c --- /dev/null +++ b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S @@ -0,0 +1,43 @@ +// +// Copyright (c) 2012 - 2017, ARM Limited. All rights reserved. +// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the = BSD License +// which accompanies this distribution. The full text of the license may= be found at +// http://opensource.org/licenses/bsd-license.php +// +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR I= MPLIED. +// +// + +.text +.align 3 + +GCC_ASM_EXPORT(ArmCallSvc) + +ASM_PFX(ArmCallSvc): + // Push x0 on the stack - The stack must always be quad-word aligned + str x0, [sp, #-16]! + // Push frame pointer and return address on the stack + stp x29, x30, [sp, #-16]! + + // Load the SVC arguments values into the appropriate registers + ldp x6, x7, [x0, #48] + ldp x4, x5, [x0, #32] + ldp x2, x3, [x0, #16] + ldp x0, x1, [x0, #0] + + svc #0 + + // Pop the ARM_SVC_ARGS structure address from the stack into x9 + ldr x9, [sp], #32 + + // Store the SVC returned values into the ARM_SVC_ARGS structure. + // A SVC call can return up to 4 values - we do not need to store back x= 4-x7. + stp x0, x1,[x9, #0] + stp x2, x3,[x9, #16] + + mov x0, x9 + + ret diff --git a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S b/ArmPkg/Library/ArmSvcL= ib/Arm/ArmSvc.S new file mode 100644 index 0000000000..6072d86d6f --- /dev/null +++ b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S @@ -0,0 +1,41 @@ +// +// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved. +// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the = BSD License +// which accompanies this distribution. The full text of the license may= be found at +// http://opensource.org/licenses/bsd-license.php +// +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR I= MPLIED. +// +// + +.text +.align 3 +.arch_extension sec + +GCC_ASM_EXPORT(ArmCallSvc) + +ASM_PFX(ArmCallSvc): + // r0 will be popped just after the SVC call + push {r0, r4-r8} + + // Load the SVC arguments values into the appropriate registers + ldm r0,{r0-r7} + + svc #0 + + // Pop the ARM_SVC_ARGS structure address from the stack into r8 + pop {r8} + + // Load the SVC returned values into the appropriate registers + // A SVC call can return up to 4 values - we do not need to store back= r4-r7. + stm r8,{r0-r3} + + mov r0, r8 + + // Restore the registers r4-r8 + pop {r4-r8} + + bx lr diff --git a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm b/ArmPkg/Library/ArmSv= cLib/Arm/ArmSvc.asm new file mode 100644 index 0000000000..fd3e77c3b6 --- /dev/null +++ b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm @@ -0,0 +1,39 @@ +// +// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved. +// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the = BSD License +// which accompanies this distribution. The full text of the license may= be found at +// http://opensource.org/licenses/bsd-license.php +// +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR I= MPLIED. +// +// + + + INCLUDE AsmMacroExport.inc + + RVCT_ASM_EXPORT ArmCallSvc + // r0 will be popped just after the SVC call + push {r0, r4-r8} + + // Load the SVC arguments values into the appropriate registers + ldm r0,{r0-r7} + svc #0 + + // Pop the ARM_SVC_ARGS structure address from the stack into r8 + pop {r8} + + // Load the SVC returned values into the appropriate registers + // A SVC call can return up to 4 values - we do not need to store back= r4-r7. + stm r8,{r0-r3} + + mov r0, r8 + + // Restore the registers r4-r8 + pop {r4-r8} + + bx lr + + END diff --git a/ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf b/ArmPkg/Library/ArmSvc= Lib/ArmSvcLib.inf new file mode 100644 index 0000000000..12658c7c41 --- /dev/null +++ b/ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf @@ -0,0 +1,31 @@ +#/** @file +# +# Copyright (c) 2016 - 2017, ARM Ltd. All rights reserved.
+# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the B= SD License +# which accompanies this distribution. The full text of the license may = be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +# +#**/ + +[Defines] + INF_VERSION =3D 0x0001001A + BASE_NAME =3D ArmSvcLib + FILE_GUID =3D 8e3618d7-f01d-4d65-b32b-4c70aacc8e49 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D ArmSvcLib + +[Sources.ARM] + Arm/ArmSvc.asm | RVCT + Arm/ArmSvc.S | GCC + +[Sources.AARCH64] + AArch64/ArmSvc.S + +[Packages] + ArmPkg/ArmPkg.dec + MdePkg/MdePkg.dec --=20 2.14.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Thu May 2 08:59:12 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1505936915018607.8955846250824; Wed, 20 Sep 2017 12:48:35 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 179CF21D046DC; Wed, 20 Sep 2017 12:45:28 -0700 (PDT) Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by ml01.01.org (Postfix) with ESMTP id 4DF6F21D046CB for ; Wed, 20 Sep 2017 12:45:27 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6AC0080D; Wed, 20 Sep 2017 12:48:33 -0700 (PDT) Received: from u201365.usa.Arm.com (bc-c3-3-14.eu.iaas.arm.com [10.6.43.238]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 58A763F483; Wed, 20 Sep 2017 12:48:32 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org From: Supreeth Venkatesh To: edk2-devel@lists.01.org Date: Wed, 20 Sep 2017 20:48:12 +0100 Message-Id: <20170920194813.43665-3-supreeth.venkatesh@arm.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170920194813.43665-1-supreeth.venkatesh@arm.com> References: <20170920194813.43665-1-supreeth.venkatesh@arm.com> Subject: [edk2] [Patch v2 2/3] ArmPkg: Modify description file to build ArmSvcLib. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Add ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf to [Components.common] section of ArmPkg.dsc file to build it as part of Arm package. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Achin Gupta Signed-off-by: Supreeth Venkatesh --- ArmPkg/ArmPkg.dsc | 1 + 1 file changed, 1 insertion(+) diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc index fc24a788df..cf9a5c1210 100644 --- a/ArmPkg/ArmPkg.dsc +++ b/ArmPkg/ArmPkg.dsc @@ -133,6 +133,7 @@ ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf + ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf =20 ArmPkg/Filesystem/SemihostFs/SemihostFs.inf =20 --=20 2.14.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Thu May 2 08:59:12 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1505936918455621.8389465229759; Wed, 20 Sep 2017 12:48:38 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 4FFAB21D046D6; Wed, 20 Sep 2017 12:45:31 -0700 (PDT) Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by ml01.01.org (Postfix) with ESMTP id 422A021ECCB23 for ; Wed, 20 Sep 2017 12:45:30 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5EC5E80D; Wed, 20 Sep 2017 12:48:36 -0700 (PDT) Received: from u201365.usa.Arm.com (bc-c3-3-14.eu.iaas.arm.com [10.6.43.238]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4AE773F483; Wed, 20 Sep 2017 12:48:35 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org From: Supreeth Venkatesh To: edk2-devel@lists.01.org Date: Wed, 20 Sep 2017 20:48:13 +0100 Message-Id: <20170920194813.43665-4-supreeth.venkatesh@arm.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170920194813.43665-1-supreeth.venkatesh@arm.com> References: <20170920194813.43665-1-supreeth.venkatesh@arm.com> Subject: [edk2] [Patch v2 3/3] ArmPkg/Include: Add ArmSvcLib header file. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" ArmSvcLib header file to specify the SVC arguments structure and function prototype to trigger an SVC call. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Achin Gupta Signed-off-by: Supreeth Venkatesh --- ArmPkg/Include/Library/ArmSvcLib.h | 46 ++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 46 insertions(+) create mode 100644 ArmPkg/Include/Library/ArmSvcLib.h diff --git a/ArmPkg/Include/Library/ArmSvcLib.h b/ArmPkg/Include/Library/Ar= mSvcLib.h new file mode 100644 index 0000000000..77a60b3679 --- /dev/null +++ b/ArmPkg/Include/Library/ArmSvcLib.h @@ -0,0 +1,46 @@ +/** @file +* +* Copyright (c) 2016 - 2017, ARM Limited. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the B= SD License +* which accompanies this distribution. The full text of the license may = be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +* +**/ + +#ifndef __ARM_SVC_LIB__ +#define __ARM_SVC_LIB__ + +/** + * The size of the SVC arguments are different between AArch64 and AArch32. + * The native size is used for the arguments. + */ +typedef struct { + UINTN Arg0; + UINTN Arg1; + UINTN Arg2; + UINTN Arg3; + UINTN Arg4; + UINTN Arg5; + UINTN Arg6; + UINTN Arg7; +} ARM_SVC_ARGS; + +/** + Trigger an SVC call + + SVC calls can take up to 7 arguments and return up to 4 return values. + Therefore, the 4 first fields in the ARM_SVC_ARGS structure are used + for both input and output values. + +**/ +VOID +ArmCallSvc ( + IN OUT ARM_SVC_ARGS *Args + ); + +#endif --=20 2.14.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel