Commit 6f47023f authored by Sudeep Holla's avatar Sudeep Holla

firmware: arm_ffa: Setup the partitions after the notification initialisation

Currently the notifications are setup of the partitions are probed and
FF-A devices are added on the FF-A bus. The FF-A driver probe can be
called even before the FF-A notification setup happens which is wrong
and may result in failure or misbehaviour in the FF-A partition device
probe.

In order to ensure the FF-A notifications are setup before the FF-A
devices are probed, let us move the FF-A partition setup after the
completion of FF-A notification setup.

Link: https://lore.kernel.org/r/20231024-ffa-notification-fixes-v1-2-d552c0ec260d@arm.comTested-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 95520fc0
...@@ -1422,11 +1422,7 @@ static void ffa_notifications_setup(void) ...@@ -1422,11 +1422,7 @@ static void ffa_notifications_setup(void)
hash_init(drv_info->notifier_hash); hash_init(drv_info->notifier_hash);
mutex_init(&drv_info->notify_lock); mutex_init(&drv_info->notify_lock);
/* Register internal scheduling callback */ return;
ret = ffa_sched_recv_cb_update(drv_info->vm_id, ffa_self_notif_handle,
drv_info, true);
if (!ret)
return;
cleanup: cleanup:
pr_info("Notification setup failed %d, not enabled\n", ret); pr_info("Notification setup failed %d, not enabled\n", ret);
ffa_notifications_cleanup(); ffa_notifications_cleanup();
...@@ -1483,12 +1479,17 @@ static int __init ffa_init(void) ...@@ -1483,12 +1479,17 @@ static int __init ffa_init(void)
mutex_init(&drv_info->rx_lock); mutex_init(&drv_info->rx_lock);
mutex_init(&drv_info->tx_lock); mutex_init(&drv_info->tx_lock);
ffa_setup_partitions();
ffa_set_up_mem_ops_native_flag(); ffa_set_up_mem_ops_native_flag();
ffa_notifications_setup(); ffa_notifications_setup();
ffa_setup_partitions();
ret = ffa_sched_recv_cb_update(drv_info->vm_id, ffa_self_notif_handle,
drv_info, true);
if (ret)
pr_info("Failed to register driver sched callback %d\n", ret);
return 0; return 0;
free_pages: free_pages:
if (drv_info->tx_buffer) if (drv_info->tx_buffer)
......
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