vmm: Add Hygon Dhyana support.

Submitted by:	Pu Wen <puwen@hygon.cn>
Discussed with:	grehan
Reviewed by:	jhb (previous version)
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D23553
This commit is contained in:
Konstantin Belousov 2020-02-13 19:03:12 +00:00
parent fe91dd0138
commit caab504277
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=357865
6 changed files with 14 additions and 10 deletions

View File

@ -184,7 +184,7 @@ iommu_init(void)
if (vmm_is_intel())
ops = &iommu_ops_intel;
else if (vmm_is_amd())
else if (vmm_is_svm())
ops = &iommu_ops_amd;
else
ops = NULL;

View File

@ -347,7 +347,7 @@ vmm_init(void)
if (vmm_is_intel())
ops = &vmm_ops_intel;
else if (vmm_is_amd())
else if (vmm_is_svm())
ops = &vmm_ops_amd;
else
return (ENXIO);

View File

@ -67,7 +67,7 @@ vmm_stat_register(void *arg)
if (vst->scope == VMM_STAT_SCOPE_INTEL && !vmm_is_intel())
return;
if (vst->scope == VMM_STAT_SCOPE_AMD && !vmm_is_amd())
if (vst->scope == VMM_STAT_SCOPE_AMD && !vmm_is_svm())
return;
if (vst_num_elems + vst->nelems >= MAX_VMM_STAT_ELEMS) {

View File

@ -46,9 +46,10 @@ vmm_is_intel(void)
}
bool
vmm_is_amd(void)
vmm_is_svm(void)
{
return (strcmp(cpu_vendor, "AuthenticAMD") == 0);
return (strcmp(cpu_vendor, "AuthenticAMD") == 0 ||
strcmp(cpu_vendor, "HygonGenuine") == 0);
}
bool

View File

@ -34,7 +34,7 @@
struct trapframe;
bool vmm_is_intel(void);
bool vmm_is_amd(void);
bool vmm_is_svm(void);
bool vmm_supports_1G_pages(void);
void dump_trapframe(struct trapframe *tf);

View File

@ -135,7 +135,7 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
break;
case CPUID_8000_0008:
cpuid_count(*eax, *ecx, regs);
if (vmm_is_amd()) {
if (vmm_is_svm()) {
/*
* As on Intel (0000_0007:0, EDX), mask out
* unsupported or unsafe AMD extended features
@ -234,7 +234,7 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
case CPUID_8000_001D:
/* AMD Cache topology, like 0000_0004 for Intel. */
if (!vmm_is_amd())
if (!vmm_is_svm())
goto default_leaf;
/*
@ -276,8 +276,11 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
break;
case CPUID_8000_001E:
/* AMD Family 16h+ additional identifiers */
if (!vmm_is_amd() || CPUID_TO_FAMILY(cpu_id) < 0x16)
/*
* AMD Family 16h+ and Hygon Family 18h additional
* identifiers.
*/
if (!vmm_is_svm() || CPUID_TO_FAMILY(cpu_id) < 0x16)
goto default_leaf;
vm_get_topology(vm, &sockets, &cores, &threads,