Commit 459fc4e7 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

KVM: arm64: Allow RES1 bits to be inferred from configuration



So far, when a bit field is tied to an unsupported feature, we set
it as RES0. This is almost correct, but there are a few exceptions
where the bits become RES1.

Add a AS_RES1 qualifier that instruct the RESx computing code to
simply do that.

Reviewed-by: default avatarJoey Gouly <joey.gouly@arm.com>
Reviewed-by: default avatarFuad Tabba <tabba@google.com>
Tested-by: default avatarFuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20260202184329.2724080-8-maz@kernel.org


Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent bbea2763
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ struct reg_bits_to_feat_map {
#define	CALL_FUNC	BIT(1)	/* Needs to evaluate tons of crap */
#define	FIXED_VALUE	BIT(2)	/* RAZ/WI or RAO/WI in KVM */
#define	MASKS_POINTER	BIT(3)	/* Pointer to fgt_masks struct instead of bits */
#define	AS_RES1		BIT(4)	/* RES1 when not supported */

	unsigned long	flags;

@@ -1315,9 +1316,13 @@ static struct resx __compute_fixed_bits(struct kvm *kvm,
		else
			match = idreg_feat_match(kvm, &map[i]);

		if (!match || (map[i].flags & FIXED_VALUE))
		if (!match || (map[i].flags & FIXED_VALUE)) {
			if (map[i].flags & AS_RES1)
				resx.res1 |= reg_feat_map_bits(&map[i]);
			else
				resx.res0 |= reg_feat_map_bits(&map[i]);
		}
	}

	return resx;
}