Commit 3c258bf6 authored by Sudeep Holla's avatar Sudeep Holla

firmware: arm_ffa: Stash the partition properties for query purposes

The properies obtained from the partition information descriptor as
part of initial partitions discovery is useful as it contain info
if the partition
- Runs in AArch64 or AArch32 execution state
- Can send and/or receive direct requests
- Can send and receive indirect message
- Does support receipt of notifications.

These can be used for querying before attempting to do any of the
above operations.

Link: https://lore.kernel.org/r/20240417090921.2866447-1-sudeep.holla@arm.comSigned-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 0370fb12
...@@ -1228,6 +1228,8 @@ static int ffa_setup_partitions(void) ...@@ -1228,6 +1228,8 @@ static int ffa_setup_partitions(void)
continue; continue;
} }
ffa_dev->properties = tpbuf->properties;
if (drv_info->version > FFA_VERSION_1_0 && if (drv_info->version > FFA_VERSION_1_0 &&
!(tpbuf->properties & FFA_PARTITION_AARCH64_EXEC)) !(tpbuf->properties & FFA_PARTITION_AARCH64_EXEC))
ffa_mode_32bit_set(ffa_dev); ffa_mode_32bit_set(ffa_dev);
......
...@@ -126,6 +126,7 @@ ...@@ -126,6 +126,7 @@
/* FFA Bus/Device/Driver related */ /* FFA Bus/Device/Driver related */
struct ffa_device { struct ffa_device {
u32 id; u32 id;
u32 properties;
int vm_id; int vm_id;
bool mode_32bit; bool mode_32bit;
uuid_t uuid; uuid_t uuid;
...@@ -221,12 +222,29 @@ struct ffa_partition_info { ...@@ -221,12 +222,29 @@ 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 can receive notifications */
#define FFA_PARTITION_NOTIFICATION_RECV BIT(3)
/* partition runs in the AArch64 execution state. */ /* partition runs in the AArch64 execution state. */
#define FFA_PARTITION_AARCH64_EXEC BIT(8) #define FFA_PARTITION_AARCH64_EXEC BIT(8)
u32 properties; u32 properties;
u32 uuid[4]; u32 uuid[4];
}; };
static inline
bool ffa_partition_check_property(struct ffa_device *dev, u32 property)
{
return dev->properties & property;
}
#define ffa_partition_supports_notify_recv(dev) \
ffa_partition_check_property(dev, FFA_PARTITION_NOTIFICATION_RECV)
#define ffa_partition_supports_indirect_msg(dev) \
ffa_partition_check_property(dev, FFA_PARTITION_INDIRECT_MSG)
#define ffa_partition_supports_direct_recv(dev) \
ffa_partition_check_property(dev, FFA_PARTITION_DIRECT_RECV)
/* For use with FFA_MSG_SEND_DIRECT_{REQ,RESP} which pass data via registers */ /* For use with FFA_MSG_SEND_DIRECT_{REQ,RESP} which pass data via registers */
struct ffa_send_direct_data { struct ffa_send_direct_data {
unsigned long data0; /* w3/x3 */ unsigned long data0; /* w3/x3 */
......
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