[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v8 12/13] xen/arm: Implement PSCI SYSTEM_SUSPEND call (host interface)
- To: Mykola Kvach <xakep.amatop@xxxxxxxxx>
- From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
- Date: Mon, 27 Apr 2026 16:21:52 +0000
- Accept-language: en-GB, en-US
- Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=gmail.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
- Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=a6gIRLO1eJ9UZpSI0qnIDNhpPqQWrIfJvf2DHz3O8ik=; b=KlqMPBjmp8UnjtoTVRUeQfk7O2phZT9fG+qPpEnZibM3Wow9RUkPhsN91KCIFsTIrAdZaFj2i+GEIk+AIhkWM+COfOca8ghyX9EZtgY/uWjAUGGQrfvcdy60ys13nBr84I7+Ngqb9t2KJDw6RGWdCOXMvbDQY7p3RIE4hYYUy2i5TL/y1e1Bm9Znj9HQDJEtwemWGFdQNDCuZY5ANdk0aUyp0q0yitYWboPZFWuheReW9rn+9jgo4zd/ZZ1d8bQPki8edWBl0Oyy3YahL9S3CVFhW7jlBOvQlSVFOn9Lra6G+r0+lWhpEV9eGiVxh1alIvADP/r8G6tsmqMMfCVsuw==
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=a6gIRLO1eJ9UZpSI0qnIDNhpPqQWrIfJvf2DHz3O8ik=; b=hplENScueZqeNthdSQ2QnGqKHoY9io1Se04Hj/AvQ55cM7cQ1TN7xhPR8QQ06xHpz7BSD+1SKHMQCW5L5JQ3cIT2lxQzNJvYa0DIwNbuDT6fnxe75U5xHzx/LVYtoi9bzLl0HZh4JLt6ANmrp/rfgzw6g2bZPVtToV6TBPmykg4L+xBrpvNrI+HC67D0Yhu0z8BzcmPZ7EBWcSUswPpeSNUcJy5bRENojRb130OJxTUsyXRP85EUdYLZhZ3ZrdYEXrkrZDVnhddiu565Alj2TuxlPo1FYbzMFhtQGi9wlXRSo7XxKClIl+8xCCOSJFRnwwRgG+FdBLlnpdvNkJfrag==
- Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=Q3Z4jdj2Ep7i8JFoONpMhF7/kmZvI7151xIY8AcnPGq7ADaUQxVdCVyg4O2xwW289Y0IOYhFX5q0RRfaQU90Ywyd/CTUz+Yfc395w26rLgfB2qCHlVSUURGhppAo1qSVRZZrdVgTVTxnCPXTimj3991TF+jhl5XPcEMTWuet393aajpbCRIX5RsWu0P9AO7t+O9iQ8L+zKeWphquakvtBdJDA/FnKQ/ZrXMhfKoSv2tCNXlbMlvbPYX8c0P9dA2daPRIozbxvBC1ZGu33FKd0OpMmKQtoa8QAyEfXUpULjyc93g6H3HtNJbkFMGWY+k5gWydagMP0R4keabdtZ7YZQ==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bnitQg57B6xQj3kLNthMMH6u63rnCm6bfC0bl6I5lYLXDYNYo6P8kPv8yMxdWLmBcn2XmIJWPG7pTL4Slj18WUVvFTskXK8F4O2E/vZK7OcR4FoEvVvoLKxTctMehrhVyC7Bs5SKnq1P7pXZgsbLJDW3Zr8SeS0F/ar8nOwrGO3bal6Af5jHT5pnRi1AcKhybOb0oA+JvZBM8r2yUU5vs+cK59Ihl97ovrVkMG04hV/EFRplii4QCDyMBQxXJPESry2kF02RapvdNfz5yz1kl5MEoLj+LxmtXvG13IE/q4PWdfMKxvj0HhjgLR14v5f/P3ts4UWpTYqiHs5/GE+wxA==
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
- Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
- Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Mykola Kvach <mykola_kvach@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
- Delivery-date: Mon, 27 Apr 2026 16:23:09 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Nodisclaimer: true
- Thread-index: AQHc1mH01Xi7Oshm5kSQrRtdQMIF/g==
- Thread-topic: [PATCH v8 12/13] xen/arm: Implement PSCI SYSTEM_SUSPEND call (host interface)
Hi Mykola,
> On 2 Apr 2026, at 11:45, Mykola Kvach <xakep.amatop@xxxxxxxxx> wrote:
>
> From: Mirela Simonovic <mirela.simonovic@xxxxxxxxxx>
>
> Invoke PSCI SYSTEM_SUSPEND to finalize Xen's suspend sequence on ARM64
> platforms.
> Pass the resume entry point (hyp_resume) as the first argument to EL3. The
> resume
> handler is currently a stub and will be implemented later in assembly. Ignore
> the
> context ID argument, as is done in Linux.
>
> Only enable this path when CONFIG_SYSTEM_SUSPEND is set and
> PSCI version is >= 1.0.
>
> Signed-off-by: Mirela Simonovic <mirela.simonovic@xxxxxxxxxx>
> Signed-off-by: Saeed Nowshadi <saeed.nowshadi@xxxxxxxxxx>
> Signed-off-by: Mykyta Poturai <mykyta_poturai@xxxxxxxx>
> Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
> ---
> Changes in v7:
> - no changes
> ---
> xen/arch/arm/include/asm/psci.h | 1 +
> xen/arch/arm/psci.c | 23 ++++++++++++++++++++++-
> 2 files changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/xen/arch/arm/include/asm/psci.h b/xen/arch/arm/include/asm/psci.h
> index 48a93e6b79..bb3c73496e 100644
> --- a/xen/arch/arm/include/asm/psci.h
> +++ b/xen/arch/arm/include/asm/psci.h
> @@ -23,6 +23,7 @@ int call_psci_cpu_on(int cpu);
> void call_psci_cpu_off(void);
> void call_psci_system_off(void);
> void call_psci_system_reset(void);
> +int call_psci_system_suspend(void);
>
> /* Range of allocated PSCI function numbers */
> #define PSCI_FNUM_MIN_VALUE _AC(0,U)
> diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c
> index b6860a7760..c9d126b195 100644
> --- a/xen/arch/arm/psci.c
> +++ b/xen/arch/arm/psci.c
> @@ -17,17 +17,20 @@
> #include <asm/cpufeature.h>
> #include <asm/psci.h>
> #include <asm/acpi.h>
> +#include <asm/suspend.h>
>
> /*
> * While a 64-bit OS can make calls with SMC32 calling conventions, for
> * some calls it is necessary to use SMC64 to pass or return 64-bit values.
> - * For such calls PSCI_0_2_FN_NATIVE(x) will choose the appropriate
> + * For such calls PSCI_*_FN_NATIVE(x) will choose the appropriate
> * (native-width) function ID.
> */
> #ifdef CONFIG_ARM_64
> #define PSCI_0_2_FN_NATIVE(name) PSCI_0_2_FN64_##name
> +#define PSCI_1_0_FN_NATIVE(name) PSCI_1_0_FN64_##name
> #else
> #define PSCI_0_2_FN_NATIVE(name) PSCI_0_2_FN32_##name
> +#define PSCI_1_0_FN_NATIVE(name) PSCI_1_0_FN32_##name
> #endif
>
> uint32_t psci_ver;
> @@ -60,6 +63,24 @@ void call_psci_cpu_off(void)
> }
> }
>
> +int call_psci_system_suspend(void)
> +{
> +#ifdef CONFIG_SYSTEM_SUSPEND
> + struct arm_smccc_res res;
> +
> + if ( psci_ver < PSCI_VERSION(1, 0) )
> + return PSCI_NOT_SUPPORTED;
> +
> + /* 2nd argument (context ID) is not used */
> + arm_smccc_smc(PSCI_1_0_FN_NATIVE(SYSTEM_SUSPEND), __pa(hyp_resume),
> &res);
I think Linux is passing 0 as context ID, probably to mark that it’s not used,
I think we should do the
same
> + return PSCI_RET(res);
> +#else
> + dprintk(XENLOG_WARNING,
> + "SYSTEM_SUSPEND not supported (CONFIG_SYSTEM_SUSPEND
> disabled)\n");
> + return PSCI_NOT_SUPPORTED;
> +#endif
> +}
> +
> void call_psci_system_off(void)
> {
> if ( psci_ver > PSCI_VERSION(0, 1) )
>
Cheers,
Luca
|