|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 2/4] xen/arm: scmi-smc: update to be used under sci subsystem
On 29/08/2025 17:42, Oleksandr Tyshchenko wrote:
>
>
> On 28.08.25 19:40, Oleksii Moisieiev wrote:
>
>
> Hello Oleksii
>
> the patch lgtm, just some comments
>
>> From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
>>
>> The introduced SCI (System Control Interface) subsystem provides unified
>> interface to integrate in Xen SCI drivers which adds support for ARM
>> firmware (EL3, SCP) based software interfaces (like SCMI) that are
>> used in
>> system management. The SCI subsystem allows to add drivers for
>> different FW
>> interfaces or have different drivers for the same FW interface (for
>> example,
>> SCMI with different transports).
>>
>> This patch updates SCMI over SMC calls handling layer, introduced by
>> commit 3e322bef8bc0 ("xen/arm: firmware: Add SCMI over SMC calls
>> handling
>> layer"), to be SCI driver:
>> - convert to DT device;
>> - convert to SCI Xen interface.
>>
>> There are no functional changes in general, the driver is just adopted
>> to the SCI interface.
>>
>> Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
>> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
>> ---
>>
>> Changes in v6:
>> - add R-b tag
>>
>> xen/arch/arm/firmware/Kconfig | 13 ++-
>> xen/arch/arm/firmware/scmi-smc.c | 93 +++++++++++---------
>> xen/arch/arm/include/asm/firmware/scmi-smc.h | 41 ---------
>> xen/arch/arm/vsmc.c | 5 +-
>> xen/include/public/arch-arm.h | 1 +
>> 5 files changed, 64 insertions(+), 89 deletions(-)
>> delete mode 100644 xen/arch/arm/include/asm/firmware/scmi-smc.h
>>
>> diff --git a/xen/arch/arm/firmware/Kconfig
>> b/xen/arch/arm/firmware/Kconfig
>> index fc7918c7fc..bbf88fbb9a 100644
>> --- a/xen/arch/arm/firmware/Kconfig
>> +++ b/xen/arch/arm/firmware/Kconfig
>> @@ -8,9 +8,18 @@ config ARM_SCI
>> menu "Firmware Drivers"
>> +choice
>> + prompt "ARM SCI driver type"
>> + default SCMI_SMC
>> + help
>> + Choose which ARM SCI driver to enable.
>> +
>> +config ARM_SCI_NONE
>> + bool "none"
>> +
>> config SCMI_SMC
>> bool "Forward SCMI over SMC calls from hwdom to EL3 firmware"
>> - default y
>> + select ARM_SCI
>> help
>> This option enables basic awareness for SCMI calls using SMC as
>> doorbell mechanism and Shared Memory for transport
>> ("arm,scmi-smc"
>> @@ -18,4 +27,6 @@ config SCMI_SMC
>> firmware node is used to trap and forward corresponding SCMI
>> SMCs
>> to firmware running at EL3, for calls coming from the
>> hardware domain.
>> +endchoice
>> +
>> endmenu
>> diff --git a/xen/arch/arm/firmware/scmi-smc.c
>> b/xen/arch/arm/firmware/scmi-smc.c
>> index 33473c04b1..13d1137592 100644
>> --- a/xen/arch/arm/firmware/scmi-smc.c
>> +++ b/xen/arch/arm/firmware/scmi-smc.c
>> @@ -9,6 +9,7 @@
>> * Copyright 2024 NXP
>> */
>> +#include <asm/device.h>
[snip]
>> +
>> /* Initialize the SCMI layer based on SMCs and Device-tree */
>> -static int __init scmi_init(void)
>> +static int __init scmi_dom0_init(struct dt_device_node *dev, const
>> void *data)
>> {
>> int ret;
>> @@ -134,22 +127,36 @@ static int __init scmi_init(void)
>> if ( ret )
>> return ret;
>> - ret = scmi_dt_init_smccc();
>> - if ( ret == -EOPNOTSUPP )
>> - return ret;
>> + ret = dt_property_read_u32(dev, SCMI_SMC_ID_PROP, &scmi_smc_id);
>> + if ( !ret )
>> + {
>> + printk(XENLOG_ERR "SCMI: No valid \"%s\" property in \"%s\"
>> DT node\n",
>> + SCMI_SMC_ID_PROP, dt_node_full_name(dev));
>> + return -ENOENT;
>> + }
>
> I know that you are just moving the code, but I wonder whether it
> makes sense to validate that retrieved value at least corresponds to
> SiP Service Calls (for the future hardening)?
>
>
I don't see any reason for that. I couldn't find any requirement about
SiP call in [1]
Also, according to DEN0028D [0] 0x05000000 mask can be used as long as
0x02000000
[0] DEN0028D
https://documentation-service.arm.com/static/6013e5faeee5236980d08619?token=
[1] DEN0056 https://developer.arm.com/documentation/den0056/latest/
>> +
>> + ret = sci_register(&scmi_smc_ops);
>> if ( ret )
>> - goto err;
>> + {
>> + printk(XENLOG_ERR "SCMI: mediator already registered (ret =
>> %d)\n",
>> + ret);
>> + return ret;
>> + }
>> printk(XENLOG_INFO "Using SCMI with SMC ID: 0x%x\n",
>> scmi_smc_id);
>> return 0;
>> -
>> - err:
>> - printk(XENLOG_ERR "SCMI: Initialization failed (ret = %d)\n", ret);
>> - return ret;
>> }
>> -__initcall(scmi_init);
>> +static const struct dt_device_match scmi_smc_match[] __initconst = {
>> + DT_MATCH_COMPATIBLE("arm,scmi-smc"),
>> + { /* sentinel */ },
>> +};
>> +
>> +DT_DEVICE_START(scmi_smc, "SCMI SMC DOM0", DEVICE_FIRMWARE)
>> + .dt_match = scmi_smc_match,
>> + .init = scmi_dom0_init,
>> +DT_DEVICE_END
>> /*
>> * Local variables:
>> diff --git a/xen/arch/arm/include/asm/firmware/scmi-smc.h
>> b/xen/arch/arm/include/asm/firmware/scmi-smc.h
>> deleted file mode 100644
>> index 6b1a164a40..0000000000
>> --- a/xen/arch/arm/include/asm/firmware/scmi-smc.h
>> +++ /dev/null
>> @@ -1,41 +0,0 @@
>> -/* SPDX-License-Identifier: GPL-2.0-only */
>> -/*
>> - * xen/arch/arm/include/asm/firmware/scmi-smc.h
>> - *
>> - * ARM System Control and Management Interface (SCMI) over SMC
>> - * Generic handling layer
>> - *
>> - * Andrei Cherechesu <andrei.cherechesu@xxxxxxx>
>> - * Copyright 2024 NXP
>> - */
>> -
>> -#ifndef __ASM_SCMI_SMC_H__
>> -#define __ASM_SCMI_SMC_H__
>> -
>> -#include <xen/types.h>
>> -
>> -struct cpu_user_regs;
>> -
>> -#ifdef CONFIG_SCMI_SMC
>> -
>> -bool scmi_handle_smc(struct cpu_user_regs *regs);
>> -
>> -#else
>> -
>> -static inline bool scmi_handle_smc(struct cpu_user_regs *regs)
>> -{
>> - return false;
>> -}
>> -
>> -#endif /* CONFIG_SCMI_SMC */
>> -
>> -#endif /* __ASM_SCMI_H__ */
>> -
>> -/*
>> - * Local variables:
>> - * mode: C
>> - * c-file-style: "BSD"
>> - * c-basic-offset: 4
>> - * indent-tabs-mode: nil
>> - * End:
>> - */
>> diff --git a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c
>> index 2469738fcc..78d5bdf56f 100644
>> --- a/xen/arch/arm/vsmc.c
>> +++ b/xen/arch/arm/vsmc.c
>> @@ -21,7 +21,6 @@
>> #include <asm/traps.h>
>> #include <asm/vpsci.h>
>> #include <asm/platform.h>
>> -#include <asm/firmware/scmi-smc.h>
>> /* Number of functions currently supported by Hypervisor Service. */
>> #define XEN_SMCCC_FUNCTION_COUNT 3
>> @@ -233,7 +232,7 @@ static bool handle_sip(struct cpu_user_regs *regs)
>> if ( platform_smc(regs) )
>> return true;
>> - return scmi_handle_smc(regs);
>> + return sci_handle_call(regs);
>> }
>> /*
>> @@ -301,8 +300,6 @@ static bool vsmccc_handle_call(struct
>> cpu_user_regs *regs)
>> break;
>> case ARM_SMCCC_OWNER_SIP:
>> handled = handle_sip(regs);
>> - if ( !handled )
>> - handled = sci_handle_call(regs);
>
> These two lines where added by [PATCH v6 1/4] xen/arm: add generic SCI
> subsystem, but here they are removed. This is not a request for an
> extra work right now, but ideally the series should be splitted
> without an extra temporarily changes.
>
>> break;
>> case ARM_SMCCC_OWNER_TRUSTED_APP ...
>> ARM_SMCCC_OWNER_TRUSTED_APP_END:
>> case ARM_SMCCC_OWNER_TRUSTED_OS ...
>> ARM_SMCCC_OWNER_TRUSTED_OS_END:
>> diff --git a/xen/include/public/arch-arm.h
>> b/xen/include/public/arch-arm.h
>> index 55eed9992c..095b1a23e3 100644
>> --- a/xen/include/public/arch-arm.h
>> +++ b/xen/include/public/arch-arm.h
>> @@ -328,6 +328,7 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
>> #define XEN_DOMCTL_CONFIG_TEE_FFA 2
>> #define XEN_DOMCTL_CONFIG_ARM_SCI_NONE 0
>> +#define XEN_DOMCTL_CONFIG_ARM_SCI_SCMI_SMC 1
>> struct xen_arch_domainconfig {
>> /* IN/OUT */
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |