]> git.itanic.dy.fi Git - linux-stable/commitdiff
firmware: arm_ffa: Allow the FF-A drivers to use 32bit mode of messaging
authorSudeep Holla <sudeep.holla@arm.com>
Thu, 5 Oct 2023 14:28:23 +0000 (15:28 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Fri, 6 Oct 2023 14:32:41 +0000 (15:32 +0100)
An FF-A ABI could support both the SMC32 and SMC64 conventions.
A callee that runs in the AArch64 execution state and implements such
an ABI must implement both SMC32 and SMC64 conventions of the ABI.

So the FF-A drivers will need the option to choose the mode irrespective
of FF-A version and the partition execution mode flag in the partition
information.

Let us remove the check on the FF-A version for allowing the selection
of 32bit mode of messaging. The driver will continue to set the 32-bit
mode if the partition execution mode flag specified that the partition
supports only 32-bit execution.

Fixes: 106b11b1ccd5 ("firmware: arm_ffa: Set up 32bit execution mode flag using partiion property")
Link: https://lore.kernel.org/r/20231005142823.278121-1-sudeep.holla@arm.com
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_ffa/driver.c

index 121f4fc903cd57b17e2dd6835a31570f4edf3774..7cd6b1564e8018d29c4393cc28fbce3be70d7937 100644 (file)
@@ -587,17 +587,9 @@ static int ffa_partition_info_get(const char *uuid_str,
        return 0;
 }
 
-static void _ffa_mode_32bit_set(struct ffa_device *dev)
-{
-       dev->mode_32bit = true;
-}
-
 static void ffa_mode_32bit_set(struct ffa_device *dev)
 {
-       if (drv_info->version > FFA_VERSION_1_0)
-               return;
-
-       _ffa_mode_32bit_set(dev);
+       dev->mode_32bit = true;
 }
 
 static int ffa_sync_send_receive(struct ffa_device *dev,
@@ -706,7 +698,7 @@ static void ffa_setup_partitions(void)
 
                if (drv_info->version > FFA_VERSION_1_0 &&
                    !(tpbuf->properties & FFA_PARTITION_AARCH64_EXEC))
-                       _ffa_mode_32bit_set(ffa_dev);
+                       ffa_mode_32bit_set(ffa_dev);
        }
        kfree(pbuf);
 }