Commit 106b11b1 authored by Sudeep Holla's avatar Sudeep Holla

firmware: arm_ffa: Set up 32bit execution mode flag using partiion property

FF-A v1.1 adds a flag in the partition properties to indicate if the
partition runs in the AArch32 or AArch64 execution state. Use the same
to set-up the 32-bit execution flag mode in the ffa_dev automatically
if the detected firmware version is above v1.0 and ignore any requests
to do the same from the ffa_driver.

Link: https://lore.kernel.org/r/20220907145240.1683088-10-sudeep.holla@arm.comSigned-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent bb1be749
...@@ -648,11 +648,19 @@ static int ffa_partition_info_get(const char *uuid_str, ...@@ -648,11 +648,19 @@ static int ffa_partition_info_get(const char *uuid_str,
return 0; return 0;
} }
static void ffa_mode_32bit_set(struct ffa_device *dev) static void _ffa_mode_32bit_set(struct ffa_device *dev)
{ {
dev->mode_32bit = true; 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);
}
static int ffa_sync_send_receive(struct ffa_device *dev, static int ffa_sync_send_receive(struct ffa_device *dev,
struct ffa_send_direct_data *data) struct ffa_send_direct_data *data)
{ {
...@@ -744,6 +752,10 @@ static void ffa_setup_partitions(void) ...@@ -744,6 +752,10 @@ static void ffa_setup_partitions(void)
__func__, tpbuf->id); __func__, tpbuf->id);
continue; continue;
} }
if (drv_info->version > FFA_VERSION_1_0 &&
!(tpbuf->properties & FFA_PARTITION_AARCH64_EXEC))
_ffa_mode_32bit_set(ffa_dev);
} }
kfree(pbuf); kfree(pbuf);
} }
......
...@@ -106,6 +106,8 @@ struct ffa_partition_info { ...@@ -106,6 +106,8 @@ struct ffa_partition_info {
#define FFA_PARTITION_DIRECT_SEND BIT(1) #define FFA_PARTITION_DIRECT_SEND BIT(1)
/* partition can send and receive indirect messages. */ /* partition can send and receive indirect messages. */
#define FFA_PARTITION_INDIRECT_MSG BIT(2) #define FFA_PARTITION_INDIRECT_MSG BIT(2)
/* partition runs in the AArch64 execution state. */
#define FFA_PARTITION_AARCH64_EXEC BIT(8)
u32 properties; u32 properties;
u32 uuid[4]; u32 uuid[4];
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment