aboutsummaryrefslogtreecommitdiff
path: root/drivers/firmware
diff options
context:
space:
mode:
authorGravatar Jens Wiklander <jens.wiklander@linaro.org> 2024-04-11 13:57:32 +0100
committerGravatar Sudeep Holla <sudeep.holla@arm.com> 2024-04-15 16:55:54 +0100
commit2b9c66d1abacbef91bdadc47fa8b9a3bd3a8fe99 (patch)
treebf03659781da711c95a791da353a6b0d874eeabc /drivers/firmware
parentLinux 6.9-rc1 (diff)
downloadlinux-2b9c66d1abacbef91bdadc47fa8b9a3bd3a8fe99.tar.gz
linux-2b9c66d1abacbef91bdadc47fa8b9a3bd3a8fe99.tar.bz2
linux-2b9c66d1abacbef91bdadc47fa8b9a3bd3a8fe99.zip
firmware: arm_ffa: Skip creation of the notification bitmaps
When the FF-A driver is running inside a guest VM under an hypervisor, the driver/guest VM doesn't have the permission/capability to request the creation of notification bitmaps. For a VM, the hypervisor reserves memory for its VM and hypervisor framework notification bitmaps and the SPMC reserves memory for its SP and SPMC framework notification bitmaps before the hypervisor initializes it. The hypervisor does not initialize a VM if memory cannot be reserved for all its notification bitmaps. So the creation of all the necessary bitmaps are already done when the driver initialises and hence it can be skipped. We rely on FFA_FEATURES(FFA_NOTIFICATION_BITMAP_CREATE) to fail when running in the guest to handle this in the driver. Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Link: https://lore.kernel.org/r/20240411-ffa_npi_support-v2-1-927a670254e6@arm.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/arm_ffa/driver.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index f2556a8e9401..a2818b69c8aa 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -1442,17 +1442,15 @@ static void ffa_notifications_setup(void)
int ret, irq;
ret = ffa_features(FFA_NOTIFICATION_BITMAP_CREATE, 0, NULL, NULL);
- if (ret) {
- pr_info("Notifications not supported, continuing with it ..\n");
- return;
- }
+ if (!ret) {
+ ret = ffa_notification_bitmap_create();
+ if (ret) {
+ pr_err("Notification bitmap create error %d\n", ret);
+ return;
+ }
- ret = ffa_notification_bitmap_create();
- if (ret) {
- pr_info("Notification bitmap create error %d\n", ret);
- return;
+ drv_info->bitmap_created = true;
}
- drv_info->bitmap_created = true;
irq = ffa_sched_recv_irq_map();
if (irq <= 0) {