|
15 | 15 | GENMASK(KVM_REG_ARM_STD_HYP_BMAP_BIT_COUNT - 1, 0) |
16 | 16 | #define KVM_ARM_SMCCC_VENDOR_HYP_FEATURES \ |
17 | 17 | GENMASK(KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT - 1, 0) |
| 18 | +#define KVM_ARM_SMCCC_VENDOR_HYP_FEATURES_2 \ |
| 19 | + GENMASK(KVM_REG_ARM_VENDOR_HYP_BMAP_2_BIT_COUNT - 1, 0) |
18 | 20 |
|
19 | 21 | static void kvm_ptp_get_time(struct kvm_vcpu *vcpu, u64 *val) |
20 | 22 | { |
@@ -360,6 +362,8 @@ int kvm_smccc_call_handler(struct kvm_vcpu *vcpu) |
360 | 362 | break; |
361 | 363 | case ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID: |
362 | 364 | val[0] = smccc_feat->vendor_hyp_bmap; |
| 365 | + /* Function numbers 2-63 are reserved for pKVM for now */ |
| 366 | + val[2] = smccc_feat->vendor_hyp_bmap_2; |
363 | 367 | break; |
364 | 368 | case ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID: |
365 | 369 | kvm_ptp_get_time(vcpu, val); |
@@ -387,6 +391,7 @@ static const u64 kvm_arm_fw_reg_ids[] = { |
387 | 391 | KVM_REG_ARM_STD_BMAP, |
388 | 392 | KVM_REG_ARM_STD_HYP_BMAP, |
389 | 393 | KVM_REG_ARM_VENDOR_HYP_BMAP, |
| 394 | + KVM_REG_ARM_VENDOR_HYP_BMAP_2, |
390 | 395 | }; |
391 | 396 |
|
392 | 397 | void kvm_arm_init_hypercalls(struct kvm *kvm) |
@@ -497,6 +502,9 @@ int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) |
497 | 502 | case KVM_REG_ARM_VENDOR_HYP_BMAP: |
498 | 503 | val = READ_ONCE(smccc_feat->vendor_hyp_bmap); |
499 | 504 | break; |
| 505 | + case KVM_REG_ARM_VENDOR_HYP_BMAP_2: |
| 506 | + val = READ_ONCE(smccc_feat->vendor_hyp_bmap_2); |
| 507 | + break; |
500 | 508 | default: |
501 | 509 | return -ENOENT; |
502 | 510 | } |
@@ -527,6 +535,10 @@ static int kvm_arm_set_fw_reg_bmap(struct kvm_vcpu *vcpu, u64 reg_id, u64 val) |
527 | 535 | fw_reg_bmap = &smccc_feat->vendor_hyp_bmap; |
528 | 536 | fw_reg_features = KVM_ARM_SMCCC_VENDOR_HYP_FEATURES; |
529 | 537 | break; |
| 538 | + case KVM_REG_ARM_VENDOR_HYP_BMAP_2: |
| 539 | + fw_reg_bmap = &smccc_feat->vendor_hyp_bmap_2; |
| 540 | + fw_reg_features = KVM_ARM_SMCCC_VENDOR_HYP_FEATURES_2; |
| 541 | + break; |
530 | 542 | default: |
531 | 543 | return -ENOENT; |
532 | 544 | } |
@@ -633,6 +645,7 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) |
633 | 645 | case KVM_REG_ARM_STD_BMAP: |
634 | 646 | case KVM_REG_ARM_STD_HYP_BMAP: |
635 | 647 | case KVM_REG_ARM_VENDOR_HYP_BMAP: |
| 648 | + case KVM_REG_ARM_VENDOR_HYP_BMAP_2: |
636 | 649 | return kvm_arm_set_fw_reg_bmap(vcpu, reg->id, val); |
637 | 650 | default: |
638 | 651 | return -ENOENT; |
|
0 commit comments