From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail03.groups.io (mail03.groups.io [45.79.227.220]) by spool.mail.gandi.net (Postfix) with ESMTPS id BF588D811A4 for ; Fri, 12 Apr 2024 14:33:53 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=JSzaF45mhzFCWK0M7E4zA4NO9YuAMdMlXzzH0di3O7M=; c=relaxed/simple; d=groups.io; h=Received-SPF:Received-SPF:From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:NoDisclaimer:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20240206; t=1712932432; v=1; b=mrhtE2RUQ7NZBGKoW94el2DAdYrBxg94lKi4O6fwyDEtn3dZjVkArcdX9u2mxaVue/2OnYox yjoP//JbROsVBQ0ULmZUJPitZTbYdnokjv9MTbHDlqEUZo1UA4cnNbQWDNxzlACe6GEa9mWoCdP HwnlxIudYK1Bkymr7NLrGwXjmXzC6NB9SiNk9Y+1tiy/Ow5hvZb5SgGrrhxYxzyE/taqHOpZiD9 oe4XMsoP4tc/edSWRStIjaF+7oATKiBJpVyfigWtcxomUHFEneyB/P+8M5CI2KA3GVLxztMDXuH s/S2ws15FIdfBAO12RcLttiphWkgdVPkvfjohlb1nnHoQ== X-Received: by 127.0.0.2 with SMTP id JDwhYY7687511xdxHqhKMoqw; Fri, 12 Apr 2024 07:33:52 -0700 X-Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.70]) by mx.groups.io with SMTP id smtpd.web11.47954.1712932428352739864 for ; Fri, 12 Apr 2024 07:33:48 -0700 X-Received: from DUZP191CA0051.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4fa::28) by GVXPR08MB10667.eurprd08.prod.outlook.com (2603:10a6:150:15a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Fri, 12 Apr 2024 14:33:38 +0000 X-Received: from DU2PEPF0001E9BF.eurprd03.prod.outlook.com (2603:10a6:10:4fa:cafe::8e) by DUZP191CA0051.outlook.office365.com (2603:10a6:10:4fa::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.26 via Frontend Transport; Fri, 12 Apr 2024 14:33:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C X-Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DU2PEPF0001E9BF.mail.protection.outlook.com (10.167.8.68) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 14:33:37 +0000 X-Received: ("Tessian outbound 88c46f8f09a7:v313"); Fri, 12 Apr 2024 14:33:37 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: b2667266473bb839 X-CR-MTA-TID: 64aa7808 X-Received: from 80903dc54e5f.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 72091BB9-054D-410F-8BB7-EB55EE414671.1; Fri, 12 Apr 2024 14:33:31 +0000 X-Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 80903dc54e5f.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 12 Apr 2024 14:33:31 +0000 X-Received: from DB6PR0301CA0077.eurprd03.prod.outlook.com (2603:10a6:6:30::24) by AS2PR08MB10228.eurprd08.prod.outlook.com (2603:10a6:20b:648::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Fri, 12 Apr 2024 14:33:28 +0000 X-Received: from DU2PEPF00028CFF.eurprd03.prod.outlook.com (2603:10a6:6:30:cafe::d2) by DB6PR0301CA0077.outlook.office365.com (2603:10a6:6:30::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.26 via Frontend Transport; Fri, 12 Apr 2024 14:33:27 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C X-Received: from nebula.arm.com (40.67.248.234) by DU2PEPF00028CFF.mail.protection.outlook.com (10.167.242.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 14:33:27 +0000 X-Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Apr 2024 14:33:25 +0000 X-Received: from E114225.Arm.com (10.1.196.56) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Fri, 12 Apr 2024 14:33:25 +0000 From: "Sami Mujawar" To: CC: Sami Mujawar , , , , , , Subject: [edk2-devel] [PATCH v2 03/45] ArmPkg: Extend number of parameter registers in SMC call Date: Fri, 12 Apr 2024 15:32:40 +0100 Message-ID: <20240412143322.5244-4-sami.mujawar@arm.com> In-Reply-To: <20240412143322.5244-1-sami.mujawar@arm.com> References: <20240412143322.5244-1-sami.mujawar@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DU2PEPF00028CFF:EE_|AS2PR08MB10228:EE_|DU2PEPF0001E9BF:EE_|GVXPR08MB10667:EE_ X-MS-Office365-Filtering-Correlation-Id: a75bca41-4bcf-4cd2-3a36-08dc5afd8aa2 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Apvu0sEGA5j3bnNydZ/c+HO5iu4YVRSkG2xvKYZwUMI6ABOCFzAPUUU1k58FjEE8yKaamEWusReGnw6LwhqQ9RQawJnWYBwq0QhjQ9y3jVh8EGAi+PBdB8oWEpsIOgmp3EtZ+ASr7eif/BkmER0KSWPAO1aCUoSp/fj9+ByXBYrz0ju8HDp9Bg5fO2VHAN6XZR79kvKq2hzUHXAyUxn7JlGbrj0DLYL6NiGu7V8DvcJiX+uiXbDdrpvfeEgemuEetlHNXGDdnmucS0lG9G9J23vkzvMn7BIGZ82bKRi1KjiSHU1/+hgdA8MQLmLD8efjNFg8O1ocDjRxdE1xDlYKpBanpruT2rNPWNvbMzbKmdCykBdIfgtAPccykX6876QbfFEraeOCuyw8SU7B9iX6LisR6kvb6T7VxaorqziHUyhkbx5QQEwsF2mikd5ESu/GVx4SJ72xGtpdZeQTS+r0ApMVlUAHhWWJ6L2EspDGC0RJZjv4QRPP5lTxgPjl2o/oEElQu5iUA0ViJbj5vDWFoILh4N+1r1YYawzKy/RILoiusrDEimy1ZOdpQxXkDQNNZOhnfENC1wkHX7fAVDGPTFdVPC0K9pKsx1sxJZuN8ZrCscASlIG3SHEa37Gw9YopT1OxSbEr5xk4SxshHSDRj08rofjhyYqA64KbNt65tFQ2vVplI111gY+omZFqJgZmKDrQBLwK5ehvgwEKOVQJmHMuNSIaw+qssJ+h96nKQ648PpoWio0EO1I7sHTH954R X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(36860700004)(1800799015)(82310400014)(376005);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10228 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF0001E9BF.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 76292a44-32bb-4a61-ed59-08dc5afd84ad X-Microsoft-Antispam-Message-Info: HUdpy6F1jePn5Aw5ZUbWMQ3vHiXB5U8mdGcNhFzu7/efFa9HYL453TmaND2syK5+5HWxH4md7eDsKHn5rWj1mhIud/zdUva1elPLDWHuV7Wl6d0pW0aSOezQeX9/UNVfXC7eJ3stiFEnU4k1Z+akfQ2WBig9h1ZZ3hBIjYhWqIwIbYPsL4JyRF2krur/XNoHyhZ0LD7ysfZQXsrgtaYE7GtBnyVWk6urWbM++Zj+oKvONm/jyYG6s2TiJpKwAXn1zu3hNRs7WmdyKml9FoKHFy1YUNp3NSTId3/T6h74rmxdkFu/uDH/6FSnlkjkrA/nvy/P5EaxV8IKvIcQ9p6GMi7SIX4hh1TQhNKc3fYzA+R7spXxcUiBX89r63SdsCbYBO+s4tGIJg459NUu2+vfRCWCjTYBWvUGFg/1ZI37ouJjvsOvxI5Ver4FQKPXohNS8UQDKNWzCEsz80A/orn675BcjPrj+XyeCDCPmLdVf6IaV1wQX3E50+UhLTedXCRaomq7o0RkUE9L5+r1FD7KLZ3MiazvUlByR477obfhN4vqQLSAnCOkg6SW3ObglyuyFzd6nNgZ1XwterX0lnRraMh0xHfQZ+b7wFKXOkzmjJcoHD4G3F/1t9DwgYHFblmcQRXbrXueDOzhyIkIekLPQKeGW9TujM37lNLd4zi55cld6NowS4kIPY5u4DpI3vV93B27zaH/SZP6OmDKEcKvJDEqvBaW3nB3cH8G144+EErSCrBAvyVMCGAW5M0cih6j X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2024 14:33:37.8724 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a75bca41-4bcf-4cd2-3a36-08dc5afd8aa2 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF0001E9BF.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR08MB10667 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Fri, 12 Apr 2024 07:33:48 -0700 Resent-From: sami.mujawar@arm.com Reply-To: devel@edk2.groups.io,sami.mujawar@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: vtMpa8p4ifPeaAOCU9pFHhlXx7686176AA= Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=mrhtE2RU; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.227.220 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none) The Realm Service Interface (RSI) commands use registers between X1-X10 as parameters and between X0-X8 as return values for SMC calls. According to the SMCCC Section 2.6 SMC32/HVC32 argument passing When an SMC32/HVC32 call is made from AArch32: - Arguments are passed in registers R1-R7. - Results are returned in R0-R7. When an SMC32/HVC32 call is made from AArch64: - Arguments are passed in registers W1-W7. - Results are returned in W0-W7. According to SMCCC Section 2.7 SMC64/HVC64 argument passing When an SMC64/HVC64 call is made from AArch64: - Arguments are passed in registers X1-X17. - Results are returned in X0-X17. This means SMC calls can take up to 7/17 arguments and return up to 7/17 return values. However, for the current use-case(s): - SMC32/HVC32 calls made from AArch32/AArch64 require up to 7 arguments and 4 return values. - SMC64/HVC64 calls made from AArch64 require up to 10 arguments and 9 return values. Therefore, for SMC32/HVC32 calls made from AArch32/AArch64 there is no update required. However, for AMC64/HVC64 calls made from AArch64, extend the ArmCallSmc () to use registers X1-X11 as parameters and return values for SMC call. Cc: Ard Biesheuvel Cc: Leif Lindholm Signed-off-by: Sami Mujawar --- ArmPkg/Include/Library/ArmSmcLib.h | 50 ++++++++++++++++++-- ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S | 22 ++++++--- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/ArmPkg/Include/Library/ArmSmcLib.h b/ArmPkg/Include/Library/ArmSmcLib.h index beef0175c35ce86aac9e465f9062bf8052b08dfb..e80b74671a6424723323bab95917fb3909771759 100644 --- a/ArmPkg/Include/Library/ArmSmcLib.h +++ b/ArmPkg/Include/Library/ArmSmcLib.h @@ -1,10 +1,13 @@ /** @file * * Copyright (c) 2021, NUVIA Inc. All rights reserved.
-* Copyright (c) 2012-2014, ARM Limited. All rights reserved. +* Copyright (c) 2012-2023, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * +* @par Reference(s): +* - SMC Calling Convention (SMCCC), ARM DEN 0028E, EAC0, 1.4 +* (https://developer.arm.com/documentation/den0028/e/) **/ #ifndef ARM_SMC_LIB_H_ @@ -13,6 +16,18 @@ /** * The size of the SMC arguments are different between AArch64 and AArch32. * The native size is used for the arguments. + * According to the SMCCC Section 2.6 SMC32/HVC32 argument passing + * When an SMC32/HVC32 call is made from AArch32: + * - Arguments are passed in registers R1-R7. + * - Results are returned in R0-R7. + * When an SMC32/HVC32 call is made from AArch64: + * - Arguments are passed in registers W1-W7. + * - Results are returned in W0-W7. + * + * According to SMCCC Section 2.7 SMC64/HVC64 argument passing + * When an SMC64/HVC64 call is made from AArch64: + * - Arguments are passed in registers X1-X17. + * - Results are returned in X0-X17. */ typedef struct { UINTN Arg0; @@ -23,13 +38,42 @@ typedef struct { UINTN Arg5; UINTN Arg6; UINTN Arg7; + #ifdef MDE_CPU_AARCH64 + UINTN Arg8; + UINTN Arg9; + UINTN Arg10; + UINTN Arg11; + #endif } ARM_SMC_ARGS; /** Trigger an SMC call - SMC calls can take up to 7 arguments and return up to 4 return values. - Therefore, the 4 first fields in the ARM_SMC_ARGS structure are used + According to the SMCCC Section 2.6 SMC32/HVC32 argument passing + When an SMC32/HVC32 call is made from AArch32: + - Arguments are passed in registers R1-R7. + - Results are returned in R0-R7. + When an SMC32/HVC32 call is made from AArch64: + - Arguments are passed in registers W1-W7. + - Results are returned in W0-W7. + + According to SMCCC Section 2.7 SMC64/HVC64 argument passing + When an SMC64/HVC64 call is made from AArch64: + - Arguments are passed in registers X1-X17. + - Results are returned in X0-X17. + + This means SMC calls can take up to 7/17 arguments and return up + to 7/17 return values. + + However, the current use-case: + - For SMC32/HVC32 calls made from AArch32/AArch64 up to 7 arguments + and 4 return values are required. Therefore, limit the maximum + arguments to 7 and return values to 4. + - For AMC64/HVC64 calls made from AArch64 up to 11 arguments and + return values are required. Therefore, limit the maximum arguments + and return values to 11. + + The fields in the ARM_SMC_ARGS structure are used for both input and output values. **/ diff --git a/ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S b/ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S index 4a8c2a8f59eab3e5b66dda2515d5bbced131af13..299d612dc5e1ebfeaf69a356b400c511905d72fe 100644 --- a/ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S +++ b/ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S @@ -1,8 +1,11 @@ // -// Copyright (c) 2012-2014, ARM Limited. All rights reserved. +// Copyright (c) 2012-2023, Arm Limited. All rights reserved. // // SPDX-License-Identifier: BSD-2-Clause-Patent // +// @par Reference(s): +// - SMC Calling Convention (SMCCC), ARM DEN 0028E, EAC0, 1.4 +// (https://developer.arm.com/documentation/den0028/e/) // #include @@ -12,6 +15,8 @@ ASM_FUNC(ArmCallSmc) str x0, [sp, #-16]! // Load the SMC arguments values into the appropriate registers + ldp x10, x11, [x0, #80] + ldp x8, x9, [x0, #64] ldp x6, x7, [x0, #48] ldp x4, x5, [x0, #32] ldp x2, x3, [x0, #16] @@ -19,14 +24,17 @@ ASM_FUNC(ArmCallSmc) smc #0 - // Pop the ARM_SMC_ARGS structure address from the stack into x9 - ldr x9, [sp], #16 + // Pop the ARM_SMC_ARGS structure address from the stack into x13 + ldr x13, [sp], #16 // Store the SMC returned values into the ARM_SMC_ARGS structure. - // A SMC call can return up to 4 values - we do not need to store back x4-x7. - stp x2, x3, [x9, #16] - stp x0, x1, [x9, #0] + stp x10, x11, [x13, #80] + stp x8, x9, [x13, #64] + stp x6, x7, [x13, #48] + stp x4, x5, [x13, #32] + stp x2, x3, [x13, #16] + stp x0, x1, [x13, #0] - mov x0, x9 + mov x0, x13 ret -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#117674): https://edk2.groups.io/g/devel/message/117674 Mute This Topic: https://groups.io/mt/105483412/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-