* [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
@ 2023-07-18 18:45 Oliver Upton
2023-07-19 9:57 ` Marc Zyngier
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Oliver Upton @ 2023-07-18 18:45 UTC (permalink / raw)
To: kvmarm
Cc: Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu,
Will Deacon, Sebastian Ene, Oliver Upton
pKVM initialization fails on systems with v1.1+ FF-A implementations, as
the hyp does a strict match on the returned version from FFA_VERSION.
This is a stronger assertion than required by the specification, which
requires minor revisions be backwards compatible with earlier revisions
of the same major version.
Relax the check in hyp_ffa_init() to only test the returned major
version. Even though v1.1 broke ABI, the expectation is that firmware
incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
version.
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
---
arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
index 58dcd92bf346..ab4f5d160c58 100644
--- a/arch/arm64/kvm/hyp/nvhe/ffa.c
+++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
@@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
if (res.a0 == FFA_RET_NOT_SUPPORTED)
return 0;
- if (res.a0 != FFA_VERSION_1_0)
+ /*
+ * Firmware returns the maximum supported version of the FF-A
+ * implementation. Check that the returned version is
+ * backwards-compatible with the hyp according to the rules in DEN0077A
+ * v1.1 REL0 13.2.1.
+ *
+ * Of course, things are never simple when dealing with firmware. v1.1
+ * broke ABI with v1.0 on several structures, which is itself
+ * incompatible with the aforementioned versioning scheme. The
+ * expectation is that v1.x implementations that do not support the v1.0
+ * ABI return NOT_SUPPORTED rather than a version number, according to
+ * DEN0077A v1.1 REL0 18.6.4.
+ */
+ if (FFA_MAJOR_VERSION(res.a0) != 1)
return -EOPNOTSUPP;
arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);
base-commit: 9d2a55b403eea26cab7c831d8e1c00ef1e6a6850
--
2.41.0.255.g8b1d071c50-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
@ 2023-07-19 9:57 ` Marc Zyngier
2023-07-19 11:17 ` Will Deacon
2023-07-19 16:59 ` Oliver Upton
2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2023-07-19 9:57 UTC (permalink / raw)
To: Oliver Upton
Cc: kvmarm, James Morse, Suzuki K Poulose, Zenghui Yu, Will Deacon,
Sebastian Ene
On Tue, 18 Jul 2023 19:45:37 +0100,
Oliver Upton <oliver.upton@linux.dev> wrote:
>
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
>
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
>
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
> arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
> index 58dcd92bf346..ab4f5d160c58 100644
> --- a/arch/arm64/kvm/hyp/nvhe/ffa.c
> +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
> @@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
> if (res.a0 == FFA_RET_NOT_SUPPORTED)
> return 0;
>
> - if (res.a0 != FFA_VERSION_1_0)
> + /*
> + * Firmware returns the maximum supported version of the FF-A
> + * implementation. Check that the returned version is
> + * backwards-compatible with the hyp according to the rules in DEN0077A
> + * v1.1 REL0 13.2.1.
> + *
> + * Of course, things are never simple when dealing with firmware. v1.1
> + * broke ABI with v1.0 on several structures, which is itself
> + * incompatible with the aforementioned versioning scheme. The
> + * expectation is that v1.x implementations that do not support the v1.0
> + * ABI return NOT_SUPPORTED rather than a version number, according to
> + * DEN0077A v1.1 REL0 18.6.4.
To quote someone: "What a great!"
> + */
> + if (FFA_MAJOR_VERSION(res.a0) != 1)
> return -EOPNOTSUPP;
>
> arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);
>
> base-commit: 9d2a55b403eea26cab7c831d8e1c00ef1e6a6850
Acked-by: Marc Zyngier <maz@kernel.org>
M.
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
2023-07-19 9:57 ` Marc Zyngier
@ 2023-07-19 11:17 ` Will Deacon
2023-07-19 16:59 ` Oliver Upton
2 siblings, 0 replies; 4+ messages in thread
From: Will Deacon @ 2023-07-19 11:17 UTC (permalink / raw)
To: Oliver Upton
Cc: kvmarm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu,
Sebastian Ene
On Tue, Jul 18, 2023 at 06:45:37PM +0000, Oliver Upton wrote:
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
>
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
>
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
> arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
> index 58dcd92bf346..ab4f5d160c58 100644
> --- a/arch/arm64/kvm/hyp/nvhe/ffa.c
> +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
> @@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
> if (res.a0 == FFA_RET_NOT_SUPPORTED)
> return 0;
>
> - if (res.a0 != FFA_VERSION_1_0)
> + /*
> + * Firmware returns the maximum supported version of the FF-A
> + * implementation. Check that the returned version is
> + * backwards-compatible with the hyp according to the rules in DEN0077A
> + * v1.1 REL0 13.2.1.
> + *
> + * Of course, things are never simple when dealing with firmware. v1.1
> + * broke ABI with v1.0 on several structures, which is itself
> + * incompatible with the aforementioned versioning scheme. The
> + * expectation is that v1.x implementations that do not support the v1.0
> + * ABI return NOT_SUPPORTED rather than a version number, according to
> + * DEN0077A v1.1 REL0 18.6.4.
> + */
> + if (FFA_MAJOR_VERSION(res.a0) != 1)
> return -EOPNOTSUPP;
>
> arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);
Hopefully firmware gets this right!
Acked-by: Will Deacon <will@kernel.org>
Will
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
2023-07-19 9:57 ` Marc Zyngier
2023-07-19 11:17 ` Will Deacon
@ 2023-07-19 16:59 ` Oliver Upton
2 siblings, 0 replies; 4+ messages in thread
From: Oliver Upton @ 2023-07-19 16:59 UTC (permalink / raw)
To: Oliver Upton, kvmarm
Cc: Will Deacon, Sebastian Ene, Marc Zyngier, James Morse, Zenghui Yu,
Suzuki K Poulose
On Tue, 18 Jul 2023 18:45:37 +0000, Oliver Upton wrote:
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
>
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
>
> [...]
Applied to kvmarm/fixes, thanks!
[1/1] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
https://git.kernel.org/kvmarm/kvmarm/c/84f686790321
--
Best,
Oliver
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-07-19 17:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
2023-07-19 9:57 ` Marc Zyngier
2023-07-19 11:17 ` Will Deacon
2023-07-19 16:59 ` Oliver Upton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.