From: Sudeep Holla <sudeep.holla@arm.com>
To: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Sudeep Holla <sudeep.holla@arm.com>,
Viresh Kumar <viresh.kumar@linaro.org>
Subject: [PATCH v3 17/19] firmware: arm_ffa: Add support for handling framework notifications
Date: Mon, 17 Feb 2025 15:38:58 +0000 [thread overview]
Message-ID: <20250217-ffa_updates-v3-17-bd1d9de615e7@arm.com> (raw)
In-Reply-To: <20250217-ffa_updates-v3-0-bd1d9de615e7@arm.com>
Currently FF-A specification defines only one framework notification:
RX buffer full notification. This notification is signaled by the
partition manager during transmission of a partition message through
indirect messaging to,
1. Notify an endpoint that it has a pending message in its Rx buffer.
2. Inform the message receiver’s scheduler via the schedule receiver
interrupt that the receiver must be run.
In response to an FFA_MSG_SEND2 invocation by a sender endpoint, the
framework performs the following actions after the message is copied
from the Tx buffer of the sender to the Rx buffer of the receiver:
1. The notification is pended in the framework notification bitmap of
the receiver.
2. The partition manager of the endpoint that contains receiver’s
scheduler pends the schedule receiver interrupt for this endpoint.
The receiver receives the notification and copies out the message from
its Rx buffer.
Tested-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
drivers/firmware/arm_ffa/driver.c | 50 +++++++++++++++++++++++++++++++++------
1 file changed, 43 insertions(+), 7 deletions(-)
diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index a889ad6d94ac499cff869a138970c9dc7ae0a1f9..5441c4d8878023ad9107b185b711fd7b04224bb4 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -848,6 +848,7 @@ enum notify_type {
#define SPM_FRAMEWORK_BITMAP(x) NOTIFICATION_BITMAP_LOW(x)
#define NS_HYP_FRAMEWORK_BITMAP(x) NOTIFICATION_BITMAP_HIGH(x)
+#define FRAMEWORK_NOTIFY_RX_BUFFER_FULL BIT(0)
static int ffa_notification_bind_common(u16 dst_id, u64 bitmap,
u32 flags, bool is_bind)
@@ -1373,9 +1374,6 @@ static void handle_notif_callbacks(u64 bitmap, enum notify_type type)
int notify_id;
struct notifier_cb_info *cb_info = NULL;
- if (type == SPM_FRAMEWORK || type == NS_HYP_FRAMEWORK)
- return;
-
for (notify_id = 0; notify_id <= FFA_MAX_NOTIFICATIONS && bitmap;
notify_id++, bitmap >>= 1) {
if (!(bitmap & 1))
@@ -1390,6 +1388,46 @@ static void handle_notif_callbacks(u64 bitmap, enum notify_type type)
}
}
+static void handle_fwk_notif_callbacks(u32 bitmap)
+{
+ void *buf;
+ uuid_t uuid;
+ int notify_id = 0, target;
+ struct ffa_indirect_msg_hdr *msg;
+ struct notifier_cb_info *cb_info = NULL;
+
+ /* Only one framework notification defined and supported for now */
+ if (!(bitmap & FRAMEWORK_NOTIFY_RX_BUFFER_FULL))
+ return;
+
+ mutex_lock(&drv_info->rx_lock);
+
+ msg = drv_info->rx_buffer;
+ buf = kmemdup((void *)msg + msg->offset, msg->size, GFP_KERNEL);
+ if (!buf) {
+ mutex_unlock(&drv_info->rx_lock);
+ return;
+ }
+
+ target = SENDER_ID(msg->send_recv_id);
+ if (msg->offset >= sizeof(*msg))
+ uuid_copy(&uuid, &msg->uuid);
+ else
+ uuid_copy(&uuid, &uuid_null);
+
+ mutex_unlock(&drv_info->rx_lock);
+
+ ffa_rx_release();
+
+ mutex_lock(&drv_info->notify_lock);
+ cb_info = notifier_hnode_get_by_vmid_uuid(notify_id, target, &uuid);
+ mutex_unlock(&drv_info->notify_lock);
+
+ if (cb_info && cb_info->fwk_cb)
+ cb_info->fwk_cb(notify_id, cb_info->cb_data, buf);
+ kfree(buf);
+}
+
static void notif_get_and_handle(void *unused)
{
int rc;
@@ -1401,10 +1439,8 @@ static void notif_get_and_handle(void *unused)
return;
}
- handle_notif_callbacks(SPM_FRAMEWORK_BITMAP(bitmaps.arch_map),
- SPM_FRAMEWORK);
- handle_notif_callbacks(NS_HYP_FRAMEWORK_BITMAP(bitmaps.arch_map),
- NS_HYP_FRAMEWORK);
+ handle_fwk_notif_callbacks(SPM_FRAMEWORK_BITMAP(bitmaps.arch_map));
+ handle_fwk_notif_callbacks(NS_HYP_FRAMEWORK_BITMAP(bitmaps.arch_map));
handle_notif_callbacks(bitmaps.vm_map, NON_SECURE_VM);
handle_notif_callbacks(bitmaps.sp_map, SECURE_PARTITION);
}
--
2.34.1
next prev parent reply other threads:[~2025-02-17 15:39 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-17 15:38 [PATCH v3 00/19] firmware: arm_ffa: Framework notification support + other updates and fixes Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 01/19] firmware: arm_ffa: Replace SCMI by FF-A in the macro Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 02/19] firmware: arm_ffa: Replace UUID buffer to standard UUID format Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 03/19] firmware: arm_ffa: Align sync_send_receive{,2} function prototypes Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 04/19] firmware: arm_ffa: Fix big-endian support in __ffa_partition_info_get() Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 05/19] firmware: arm_ffa: Fix big-endian support in __ffa_partition_info_regs_get() Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 06/19] firmware: arm_ffa: Refactor addition of partition information into XArray Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 07/19] firmware: arm_ffa: Handle the presence of host partition in the partition info Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 08/19] firmware: arm_ffa: Unregister the FF-A devices when cleaning up the partitions Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 09/19] firmware: arm_ffa: Helper to check if a partition can receive REQUEST2 messages Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 10/19] firmware: arm_ffa: Add support for passing UUID in FFA_MSG_SEND2 Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 11/19] firmware: arm_ffa: Upgrade FF-A version to v1.2 in the driver Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 12/19] firmware: arm_ffa: Reject higher major version as incompatible Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 13/19] firmware: arm_ffa: Remove unnecessary declaration of ffa_partitions_cleanup() Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 14/19] firmware: arm_ffa: Refactoring to prepare for framework notification support Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 15/19] firmware: arm_ffa: Stash ffa_device instead of notify_type in notifier_cb_info Sudeep Holla
2025-02-17 15:38 ` [PATCH v3 16/19] firmware: arm_ffa: Add support for {un,}registration of framework notifications Sudeep Holla
2025-02-17 15:38 ` Sudeep Holla [this message]
2025-02-17 15:38 ` [PATCH v3 18/19] firmware: arm_ffa: Allow multiple UUIDs per partition to register SRI callback Sudeep Holla
2025-02-17 15:39 ` [PATCH v3 19/19] firmware: arm_ffa: Handle ffa_notification_get correctly at virtual FF-A instance Sudeep Holla
2025-02-21 11:41 ` [PATCH v3 00/19] firmware: arm_ffa: Framework notification support + other updates and fixes Sudeep Holla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250217-ffa_updates-v3-17-bd1d9de615e7@arm.com \
--to=sudeep.holla@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox