[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 5/8] x86: Add AMX CPUIDs enumeration
From: |
David Edmondson |
Subject: |
Re: [PATCH v2 5/8] x86: Add AMX CPUIDs enumeration |
Date: |
Wed, 23 Feb 2022 11:30:44 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
On Wednesday, 2022-02-16 at 22:04:31 -08, Yang Zhong wrote:
> From: Jing Liu <jing2.liu@intel.com>
>
> Add AMX primary feature bits XFD and AMX_TILE to
> enumerate the CPU's AMX capability. Meanwhile, add
> AMX TILE and TMUL CPUID leaf and subleaves which
> exist when AMX TILE is present to provide the maximum
> capability of TILE and TMUL.
>
> Signed-off-by: Jing Liu <jing2.liu@intel.com>
> Signed-off-by: Yang Zhong <yang.zhong@intel.com>
Reviewed-by: David Edmondson <david.edmondson@oracle.com>
> ---
> target/i386/cpu.c | 55 ++++++++++++++++++++++++++++++++++++++++---
> target/i386/kvm/kvm.c | 4 +++-
> 2 files changed, 55 insertions(+), 4 deletions(-)
>
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 5a7ee8c7e1..2465bed5df 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -576,6 +576,18 @@ static CPUCacheInfo legacy_l3_cache = {
> #define INTEL_PT_CYCLE_BITMAP 0x1fff /* Support 0,2^(0~11) */
> #define INTEL_PT_PSB_BITMAP (0x003f << 16) /* Support
> 2K,4K,8K,16K,32K,64K */
>
> +/* CPUID Leaf 0x1D constants: */
> +#define INTEL_AMX_TILE_MAX_SUBLEAF 0x1
> +#define INTEL_AMX_TOTAL_TILE_BYTES 0x2000
> +#define INTEL_AMX_BYTES_PER_TILE 0x400
> +#define INTEL_AMX_BYTES_PER_ROW 0x40
> +#define INTEL_AMX_TILE_MAX_NAMES 0x8
> +#define INTEL_AMX_TILE_MAX_ROWS 0x10
> +
> +/* CPUID Leaf 0x1E constants: */
> +#define INTEL_AMX_TMUL_MAX_K 0x10
> +#define INTEL_AMX_TMUL_MAX_N 0x40
> +
> void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1,
> uint32_t vendor2, uint32_t vendor3)
> {
> @@ -845,8 +857,8 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> "avx512-vp2intersect", NULL, "md-clear", NULL,
> NULL, NULL, "serialize", NULL,
> "tsx-ldtrk", NULL, NULL /* pconfig */, NULL,
> - NULL, NULL, NULL, "avx512-fp16",
> - NULL, NULL, "spec-ctrl", "stibp",
> + NULL, NULL, "amx-bf16", "avx512-fp16",
> + "amx-tile", "amx-int8", "spec-ctrl", "stibp",
> NULL, "arch-capabilities", "core-capability", "ssbd",
> },
> .cpuid = {
> @@ -911,7 +923,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> .type = CPUID_FEATURE_WORD,
> .feat_names = {
> "xsaveopt", "xsavec", "xgetbv1", "xsaves",
> - NULL, NULL, NULL, NULL,
> + "xfd", NULL, NULL, NULL,
> NULL, NULL, NULL, NULL,
> NULL, NULL, NULL, NULL,
> NULL, NULL, NULL, NULL,
> @@ -5587,6 +5599,43 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index,
> uint32_t count,
> }
> break;
> }
> + case 0x1D: {
> + /* AMX TILE */
> + *eax = 0;
> + *ebx = 0;
> + *ecx = 0;
> + *edx = 0;
> + if (!(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_AMX_TILE)) {
> + break;
> + }
> +
> + if (count == 0) {
> + /* Highest numbered palette subleaf */
> + *eax = INTEL_AMX_TILE_MAX_SUBLEAF;
> + } else if (count == 1) {
> + *eax = INTEL_AMX_TOTAL_TILE_BYTES |
> + (INTEL_AMX_BYTES_PER_TILE << 16);
> + *ebx = INTEL_AMX_BYTES_PER_ROW | (INTEL_AMX_TILE_MAX_NAMES <<
> 16);
> + *ecx = INTEL_AMX_TILE_MAX_ROWS;
> + }
> + break;
> + }
> + case 0x1E: {
> + /* AMX TMUL */
> + *eax = 0;
> + *ebx = 0;
> + *ecx = 0;
> + *edx = 0;
> + if (!(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_AMX_TILE)) {
> + break;
> + }
> +
> + if (count == 0) {
> + /* Highest numbered palette subleaf */
> + *ebx = INTEL_AMX_TMUL_MAX_K | (INTEL_AMX_TMUL_MAX_N << 8);
> + }
> + break;
> + }
> case 0x40000000:
> /*
> * CPUID code in kvm_arch_init_vcpu() ignores stuff
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 3bdcd724c4..8562d3d138 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -1779,7 +1779,9 @@ int kvm_arch_init_vcpu(CPUState *cs)
> c = &cpuid_data.entries[cpuid_i++];
> }
> break;
> - case 0x14: {
> + case 0x14:
> + case 0x1d:
> + case 0x1e: {
> uint32_t times;
>
> c->function = i;
dme.
--
Why does it have to be like this? I can never tell.
- Re: [PATCH v2 1/8] x86: Fix the 64-byte boundary enumeration for extended state, (continued)
- [PATCH v2 2/8] x86: Add AMX XTILECFG and XTILEDATA components, Yang Zhong, 2022/02/17
- [PATCH v2 3/8] x86: Grant AMX permission for guest, Yang Zhong, 2022/02/17
- [PATCH v2 4/8] x86: Add XFD faulting bit for state components, Yang Zhong, 2022/02/17
- [PATCH v2 5/8] x86: Add AMX CPUIDs enumeration, Yang Zhong, 2022/02/17
- Re: [PATCH v2 5/8] x86: Add AMX CPUIDs enumeration,
David Edmondson <=
- [PATCH v2 6/8] x86: add support for KVM_CAP_XSAVE2 and AMX state migration, Yang Zhong, 2022/02/17
- [PATCH v2 7/8] x86: Support XFD and AMX xsave data migration, Yang Zhong, 2022/02/17
- [PATCH v2 8/8] linux-header: Sync the linux headers, Yang Zhong, 2022/02/17