Unverified Commit a9c5e94c authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!4567 Support feature TWED

Merge Pull Request from: @ci-robot 
 
PR sync from: lishusen <lishusen2@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/76KPBPK2WOJ245IKGKUAEVJYBPCUOCYS/ 
Configure hcr_el2 with parameter twedel when TWED is enabled

Jingyi Wang (1):
  KVM: arm64: Make use of TWED feature

Zengruan Ye (1):
  arm64: cpufeature: TWED support detection


-- 
2.33.0
 
https://gitee.com/openeuler/kernel/issues/I8WMG6 
 
Link:https://gitee.com/openeuler/kernel/pulls/4567

 

Reviewed-by: default avatarZhang Jianhua <chris.zjh@huawei.com>
Reviewed-by: default avatarZenghui Yu <yuzenghui@huawei.com>
Reviewed-by: default avatarLiu Chao <liuchao173@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parents 0fb7f4fc 75807528
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2183,6 +2183,16 @@ config ARM64_MTE

endmenu # "ARMv8.5 architectural features"

menu "ARMv8.6 architectural features"

config ARM64_TWED
	bool "Enable support for delayed trapping of WFE"
	default y
	help
	  Delayed Trapping of WFE (part of the ARMv8.6 Extensions)

endmenu

menu "ARMv8.7 architectural features"

config ARM64_EPAN
+6 −0
Original line number Diff line number Diff line
@@ -533,6 +533,12 @@ CONFIG_ARM64_AS_HAS_MTE=y
# CONFIG_ARM64_MTE is not set
# end of ARMv8.5 architectural features

#
# ARMv8.6 architectural features
#
CONFIG_ARM64_TWED=y
# end of ARMv8.6 architectural features

#
# ARMv8.7 architectural features
#
+7 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@

/* Hyp Configuration Register (HCR) bits */

#define HCR_TWEDEN	(UL(1) << 59)
#define HCR_TID5	(UL(1) << 58)
#define HCR_DCT		(UL(1) << 57)
#define HCR_ATA_SHIFT	56
@@ -74,6 +75,12 @@
#define HCR_VM		(UL(1) << 0)
#define HCR_RES0	((UL(1) << 48) | (UL(1) << 39))

#ifdef CONFIG_ARM64_TWED
#define HCR_TWEDEL_SHIFT	60
#define HCR_TWEDEL_MAX		(UL(0xf))
#define HCR_TWEDEL_MASK		(HCR_TWEDEL_MAX << HCR_TWEDEL_SHIFT)
#endif

/*
 * The bits we set in HCR:
 * TLOR:	Trap LORegion register accesses
+21 −0
Original line number Diff line number Diff line
@@ -124,6 +124,27 @@ static inline void vcpu_set_wfx_traps(struct kvm_vcpu *vcpu)
	vcpu->arch.hcr_el2 |= HCR_TWI;
}

#ifdef CONFIG_ARM64_TWED
static inline void vcpu_set_twed(struct kvm_vcpu *vcpu)
{
	if (!cpus_have_const_cap(ARM64_HAS_TWED))
		return;

	if (twed_enable) {
		u64 delay = (u64)twedel;

		delay = (delay > HCR_TWEDEL_MAX) ? HCR_TWEDEL_MAX : delay;
		vcpu->arch.hcr_el2 |= HCR_TWEDEN;
		vcpu->arch.hcr_el2 &= ~HCR_TWEDEL_MASK;
		vcpu->arch.hcr_el2 |= (delay << HCR_TWEDEL_SHIFT);
	} else {
		vcpu->arch.hcr_el2 &= ~HCR_TWEDEN;
	}
}
#else
static inline void vcpu_set_twed(struct kvm_vcpu *vcpu) {}
#endif

static inline void vcpu_ptrauth_enable(struct kvm_vcpu *vcpu)
{
	vcpu->arch.hcr_el2 |= (HCR_API | HCR_APK);
+5 −0
Original line number Diff line number Diff line
@@ -1151,6 +1151,11 @@ void __init kvm_hyp_reserve(void);
static inline void kvm_hyp_reserve(void) { }
#endif

#ifdef CONFIG_ARM64_TWED
extern bool twed_enable;
extern unsigned int twedel;
#endif

void kvm_arm_vcpu_power_off(struct kvm_vcpu *vcpu);
bool kvm_arm_vcpu_stopped(struct kvm_vcpu *vcpu);

Loading