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.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
This commit is contained in:
parent
bb1be74985
commit
106b11b1cc
|
@ -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)
|
||||||
__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 {
|
||||||
#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];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue