]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: arm_ffa: Defer probe until pKVM is initialized
authorSudeep Holla <sudeep.holla@kernel.org>
Fri, 8 May 2026 17:54:18 +0000 (18:54 +0100)
committerSudeep Holla <sudeep.holla@kernel.org>
Sun, 17 May 2026 11:42:37 +0000 (12:42 +0100)
When protected KVM is enabled, the kernel includes a pKVM FF-A proxy
that sits in front of the normal FF-A driver. The proxy has to perform
its own FF-A version negotiation and setup first, so that it can mediate
subsequent FF-A traffic correctly.

Defer FF-A core probing until pKVM has completed initialization. This
keeps the normal driver from negotiating the FF-A version or performing
other transport setup before the pKVM proxy is ready, and lets the
driver model retry probing once the protected KVM state required by the
FF-A transport is available.

Suggested-by: Yeoreum Yun <yeoreum.yun@arm.com>
Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
Link: https://patch.msgid.link/20260508-b4-ffa_plat_dev-v1-4-c5a30f8cf7b8@kernel.org
Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org>
drivers/firmware/arm_ffa/driver.c

index 4bb6b138497830ca69da66d1e92f7fada40eb917..fb97b01c282aae6072fbca3963733f36781f1ac7 100644 (file)
@@ -43,6 +43,8 @@
 #include <linux/uuid.h>
 #include <linux/xarray.h>
 
+#include <asm/virt.h>
+
 #include "common.h"
 
 #define FFA_DRIVER_VERSION     FFA_VERSION_1_2
@@ -2096,6 +2098,10 @@ static int ffa_probe(struct platform_device *pdev)
        u32 buf_sz;
        size_t rxtx_bufsz = SZ_4K;
 
+       if (IS_BUILTIN(CONFIG_ARM_FFA_TRANSPORT) &&
+           is_protected_kvm_enabled() && !is_pkvm_initialized())
+               return -EPROBE_DEFER;
+
        ret = ffa_transport_init(&invoke_ffa_fn);
        if (ret)
                return ret;