From 2d0ad89b0d88604133260eb6df348a3b6cfdedf7 Mon Sep 17 00:00:00 2001 From: JonasZhou Date: Fri, 4 Mar 2022 17:14:52 +0800 Subject: [PATCH] Support Zhaoxin/Centaur kh40000 as ZEN Signed-off-by: JonasZhou --- cpuid_x86.c | 54 ++++++++++++++++++++++++++++++++++++++--- driver/others/dynamic.c | 27 +++++++++++++++++++-- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/cpuid_x86.c b/cpuid_x86.c index d7d85eb20..4ac1de047 100644 --- a/cpuid_x86.c +++ b/cpuid_x86.c @@ -1707,8 +1707,18 @@ int get_cpuname(void){ if (model == 0xf && stepping < 0xe) return CPUTYPE_NANO; return CPUTYPE_NEHALEM; + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return CPUTYPE_ZEN; + else + return CPUTYPE_DUNNINGTON; + default: + return CPUTYPE_NEHALEM; + } default: - if (family >= 0x7) + if (family >= 0x8) return CPUTYPE_NEHALEM; else return CPUTYPE_VIAC3; @@ -1716,7 +1726,20 @@ int get_cpuname(void){ } if (vendor == VENDOR_ZHAOXIN){ - return CPUTYPE_NEHALEM; + switch (family) { + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return CPUTYPE_ZEN; + else + return CPUTYPE_DUNNINGTON; + default: + return CPUTYPE_NEHALEM; + } + default: + return CPUTYPE_NEHALEM; + } } if (vendor == VENDOR_RISE){ @@ -2416,8 +2439,18 @@ int get_coretype(void){ if (model == 0xf && stepping < 0xe) return CORE_NANO; return CORE_NEHALEM; + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return CORE_ZEN; + else + return CORE_DUNNINGTON; + default: + return CORE_NEHALEM; + } default: - if (family >= 0x7) + if (family >= 0x8) return CORE_NEHALEM; else return CORE_VIAC3; @@ -2425,7 +2458,20 @@ int get_coretype(void){ } if (vendor == VENDOR_ZHAOXIN) { - return CORE_NEHALEM; + switch (family) { + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return CORE_ZEN; + else + return CORE_DUNNINGTON; + default: + return CORE_NEHALEM; + } + default: + return CORE_NEHALEM; + } } return CORE_UNKNOWN; diff --git a/driver/others/dynamic.c b/driver/others/dynamic.c index 52a7c6087..7d7a41de2 100644 --- a/driver/others/dynamic.c +++ b/driver/others/dynamic.c @@ -875,14 +875,37 @@ static gotoblas_t *get_coretype(void){ if (model == 0xf && stepping < 0xe) return &gotoblas_NANO; return &gotoblas_NEHALEM; + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return &gotoblas_ZEN; + else + return &gotoblas_DUNNINGTON; + default: + return &gotoblas_NEHALEM; + } default: - if (family >= 0x7) + if (family >= 0x8) return &gotoblas_NEHALEM; } } if (vendor == VENDOR_ZHAOXIN) { - return &gotoblas_NEHALEM; + switch (family) { + case 0x7: + switch (exmodel) { + case 5: + if (support_avx2()) + return &gotoblas_ZEN; + else + return &gotoblas_DUNNINGTON; + default: + return &gotoblas_NEHALEM; + } + default: + return &gotoblas_NEHALEM; + } } return NULL;