Skip to content
/ linux Public

Commit 3983811

Browse files
LeviYeoReumgregkh
authored andcommitted
firmware: arm_ffa: Remove vm_id argument in ffa_rxtx_unmap()
[ Upstream commit a4e8473 ] According to the FF-A specification (DEN0077, v1.1, §13.7), when FFA_RXTX_UNMAP is invoked from any instance other than non-secure physical, the w1 register must be zero (MBZ). If a non-zero value is supplied in this context, the SPMC must return FFA_INVALID_PARAMETER. The Arm FF-A driver operates exclusively as a guest or non-secure physical instance where the partition ID is always zero and is not invoked from a hypervisor context where w1 carries a VM ID. In this execution model, the partition ID observed by the driver is always zero, and passing a VM ID is unnecessary and potentially invalid. Remove the vm_id parameter from ffa_rxtx_unmap() and ensure that the SMC call is issued with w1 implicitly zeroed, as required by the specification. This prevents invalid parameter errors and aligns the implementation with the defined FF-A ABI behavior. Fixes: 3bbfe98 ("firmware: arm_ffa: Add initial Arm FFA driver support") Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> Message-Id: <20260304120953.847671-1-yeoreum.yun@arm.com> Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent ad01256 commit 3983811

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/firmware/arm_ffa/driver.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,12 @@ static int ffa_rxtx_map(phys_addr_t tx_buf, phys_addr_t rx_buf, u32 pg_cnt)
205205
return 0;
206206
}
207207

208-
static int ffa_rxtx_unmap(u16 vm_id)
208+
static int ffa_rxtx_unmap(void)
209209
{
210210
ffa_value_t ret;
211211

212212
invoke_ffa_fn((ffa_value_t){
213-
.a0 = FFA_RXTX_UNMAP, .a1 = PACK_TARGET_INFO(vm_id, 0),
213+
.a0 = FFA_RXTX_UNMAP,
214214
}, &ret);
215215

216216
if (ret.a0 == FFA_ERROR)
@@ -2093,7 +2093,7 @@ static int __init ffa_init(void)
20932093

20942094
pr_err("failed to setup partitions\n");
20952095
ffa_notifications_cleanup();
2096-
ffa_rxtx_unmap(drv_info->vm_id);
2096+
ffa_rxtx_unmap();
20972097
free_pages:
20982098
if (drv_info->tx_buffer)
20992099
free_pages_exact(drv_info->tx_buffer, rxtx_bufsz);
@@ -2108,7 +2108,7 @@ static void __exit ffa_exit(void)
21082108
{
21092109
ffa_notifications_cleanup();
21102110
ffa_partitions_cleanup();
2111-
ffa_rxtx_unmap(drv_info->vm_id);
2111+
ffa_rxtx_unmap();
21122112
free_pages_exact(drv_info->tx_buffer, drv_info->rxtx_bufsz);
21132113
free_pages_exact(drv_info->rx_buffer, drv_info->rxtx_bufsz);
21142114
kfree(drv_info);

0 commit comments

Comments
 (0)