From nobody Fri Apr 10 13:51:54 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fsdWt2TtXz6Yky7 for ; Fri, 10 Apr 2026 13:51:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fsdWt1dW1z3RxB for ; Fri, 10 Apr 2026 13:51:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775829114; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tvdWheY0U02UXu3yo9DyHFQrZtcYr2XuXXiovE/QT3k=; b=k9CBFv3o2Anf1nk1YHEQ6wk6X1v1zqaJs396sCsVEZL7YMEZWCpM5OGGTPPx7uCT0gan7x aPbdC9hMm03xpjUQUQVipWFirKaQsbEiVTBmxBVF6VXNTt0KIpVSibKdAqK/TfVuN44S8h 55lnUyf/cnUpBctAUdPmAdkmsOnmETpj5rj/+QjlncW0pL3EDKrz4NarCcOXjTLQCaQHUf CImKo1haZ/A2c1TETVN1ktrRtraH7KHxGw5OocpKLKHPFJc6rA6sld6rcjpbzBmS8vW4Rc 1uJrbiC1byagZnUKpwHGs+gX24UNiZCVQPY7rv7oABDGfhuUdRE3uSVOjK7V6w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775829114; a=rsa-sha256; cv=none; b=rfmzYxaNOMSug0UNbLIaNnMW+cd5GhhDBLvXgmOqDkN6UuYrhLCxi6QUvozqd84GmVwpM8 85k1RYW3qQqmqRv0eQIIJCnXAfiKHC9iA0Mc7qcL7Se4xHXu84tVIJArGtiFj1vlGqsnne /diwM0QyEw4ErJaPTbiPJNe1QIq7D/uao6EUSMZRSKS8JO1bXJOnA6STIWLN5GIoAPUurF gP3wtju3BuakvLv8LUZLV/pcSmnQLZvlq8VJDUcKJRMF8986rkXqUzsh+gDctZcBkkVFvS 7J9bLP0r42hY2RlY4RfMkBIEf5uqarODJkCJ71/aJsqZcoe2FCdVf+q1fKwRnA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775829114; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tvdWheY0U02UXu3yo9DyHFQrZtcYr2XuXXiovE/QT3k=; b=U7shuqh3TFWufJg2VvmEf1s5aCv2Mu04Y08myJB7n6QhTeZdhUW910bfew53X41t7zA12q Ho3YrZQaj6joOkPEFmnXeAYivVYR6cBGtedeyhja/Vy9sNAS2pcV/4U3sTPezCBFKgpSek QRWRzbmBG482UN8k6dnvjoWQTygH0I0OM+L4H197fI/6UQkvpCTOGKW727rcq+h4g76EWm ouJli82Dg11zJV8+ZUPmxpyfEoWr4MxVRl3X0u+OrOepSPfffuvbgTDsLy4B7/0UeWsW7n hK1zCkKM4N9sHFNUzdcy99P03KxDolLg31zjmLqGEQc4UkWnr/PWuC1vccR3sQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fsdWt13fKzn7Y for ; Fri, 10 Apr 2026 13:51:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b986 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 10 Apr 2026 13:51:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 2358492b0347 - main - x86: Add zen identifier helper function List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2358492b0347b11178fb594069330820f11ec81f Auto-Submitted: auto-generated Date: Fri, 10 Apr 2026 13:51:54 +0000 Message-Id: <69d9007a.3b986.545a2a38@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=2358492b0347b11178fb594069330820f11ec81f commit 2358492b0347b11178fb594069330820f11ec81f Author: ShengYi Hung AuthorDate: 2026-04-09 08:14:57 +0000 Commit: ShengYi Hung CommitDate: 2026-04-10 13:51:31 +0000 x86: Add zen identifier helper function Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56330 --- sys/x86/include/cputypes.h | 12 ++++++++++++ sys/x86/x86/identcpu.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/sys/x86/include/cputypes.h b/sys/x86/include/cputypes.h index f2bd3c2983f0..ed26304a89ac 100644 --- a/sys/x86/include/cputypes.h +++ b/sys/x86/include/cputypes.h @@ -45,4 +45,16 @@ #define CPU_VENDOR_CENTAUR CPU_VENDOR_IDT #define CPU_VENDOR_HYGON 0x1d94 /* Hygon */ +#define CPU_AMD_ZEN1 0x00 +#define CPU_AMD_ZEN2 0x01 +#define CPU_AMD_ZEN3 0x02 +#define CPU_AMD_ZEN4 0x03 +#define CPU_AMD_ZEN5 0x04 +#define CPU_AMD_ZEN6 0x05 +#define CPU_AMD_UNKNOWN 0xffffffff + +#ifdef _KERNEL +u_int ident_zen_cpu(void); +#endif + #endif /* !_X86_CPUTYPES_H_ */ diff --git a/sys/x86/x86/identcpu.c b/sys/x86/x86/identcpu.c index 7e0ccc72f7bb..75144ccae8bc 100644 --- a/sys/x86/x86/identcpu.c +++ b/sys/x86/x86/identcpu.c @@ -64,6 +64,7 @@ #include #include +#include #include #include @@ -2690,3 +2691,49 @@ cpu_getmaxphyaddr(void) #endif return ((1ULL << cpu_maxphyaddr) - 1); } + +const static struct { + u_int family; + u_int model_min; + u_int model_max; + u_int generation; +} zen_idents[] = { + { .family = 0x17, .model_min = 0x00, .model_max = 0x2f, .generation = CPU_AMD_ZEN1 }, + { .family = 0x17, .model_min = 0x50, .model_max = 0x5f, .generation = CPU_AMD_ZEN1 }, + { .family = 0x17, .model_min = 0x30, .model_max = 0x4f, .generation = CPU_AMD_ZEN2 }, + { .family = 0x17, .model_min = 0x60, .model_max = 0x7f, .generation = CPU_AMD_ZEN2 }, + { .family = 0x17, .model_min = 0x90, .model_max = 0x91, .generation = CPU_AMD_ZEN2 }, + { .family = 0x17, .model_min = 0xa0, .model_max = 0xaf, .generation = CPU_AMD_ZEN2 }, + { .family = 0x19, .model_min = 0x00, .model_max = 0x0f, .generation = CPU_AMD_ZEN3 }, + { .family = 0x19, .model_min = 0x20, .model_max = 0x5f, .generation = CPU_AMD_ZEN3 }, + { .family = 0x19, .model_min = 0x10, .model_max = 0x1f, .generation = CPU_AMD_ZEN4 }, + { .family = 0x19, .model_min = 0x60, .model_max = 0xaf, .generation = CPU_AMD_ZEN4 }, + { .family = 0x1a, .model_min = 0x00, .model_max = 0x2f, .generation = CPU_AMD_ZEN5 }, + { .family = 0x1a, .model_min = 0x40, .model_max = 0x4f, .generation = CPU_AMD_ZEN5 }, + { .family = 0x1a, .model_min = 0x60, .model_max = 0x7f, .generation = CPU_AMD_ZEN5 }, + { .family = 0x1a, .model_min = 0x50, .model_max = 0x5f, .generation = CPU_AMD_ZEN6 }, + { .family = 0x1a, .model_min = 0x80, .model_max = 0xaf, .generation = CPU_AMD_ZEN6 }, + { .family = 0x1a, .model_min = 0xc0, .model_max = 0xcf, .generation = CPU_AMD_ZEN6 }, +}; + +u_int +ident_zen_cpu(void) +{ + u_int family = CPUID_TO_FAMILY(cpu_id); + u_int model = CPUID_TO_MODEL(cpu_id); + int i; + + if (cpu_vendor_id != CPU_VENDOR_AMD) + return (CPU_AMD_UNKNOWN); + + for (i = 0; i < nitems(zen_idents); i++) { + if (family != zen_idents[i].family) + continue; + if (model < zen_idents[i].model_min || + model > zen_idents[i].model_max) + continue; + return (zen_idents[i].generation); + } + + return (CPU_AMD_UNKNOWN); +}