Skip to content

Commit a04776b

Browse files
committed
[arch][x86] add a few more feature bits
There's always more feature bits showing up on these things. Rename a few to match the intel manual closer.
1 parent e970a6e commit a04776b

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

arch/x86/64/mmu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ void x86_mmu_early_init(void) {
658658
vaddr_width = x86_get_vaddr_width();
659659

660660
/* check to see if we support huge (1GB) and invpcid instruction */
661-
supports_huge_pages = x86_feature_test(X86_FEATURE_HUGE_PAGE);
661+
supports_huge_pages = x86_feature_test(X86_FEATURE_PG1G);
662662
supports_invpcid = x86_feature_test(X86_FEATURE_INVPCID);
663663
supports_pcid = x86_feature_test(X86_FEATURE_PCID);
664664

arch/x86/include/arch/x86/feature.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ static inline bool x86_feature_test(struct x86_cpuid_bit bit) {
209209
#define X86_FEATURE_XSAVE X86_CPUID_BIT(0x1, 2, 26)
210210
#define X86_FEATURE_OSXSAVE X86_CPUID_BIT(0x1, 2, 27)
211211
#define X86_FEATURE_AVX X86_CPUID_BIT(0x1, 2, 28)
212+
#define X86_FEATURE_F16C X86_CPUID_BIT(0x1, 2, 29)
212213
#define X86_FEATURE_RDRAND X86_CPUID_BIT(0x1, 2, 30)
213214
#define X86_FEATURE_HYPERVISOR X86_CPUID_BIT(0x1, 2, 31)
214215
#define X86_FEATURE_FPU X86_CPUID_BIT(0x1, 3, 0)
@@ -250,16 +251,17 @@ static inline bool x86_feature_test(struct x86_cpuid_bit bit) {
250251
#define X86_FEATURE_HWP X86_CPUID_BIT(0x6, 0, 7)
251252
#define X86_FEATURE_HWP_NOT X86_CPUID_BIT(0x6, 0, 8)
252253
#define X86_FEATURE_HWP_ACT X86_CPUID_BIT(0x6, 0, 9)
253-
#define X86_FEATURE_HWP_PREF X86_CPUID_BIT(0x6, 0, 10)
254-
#define X86_FEATURE_HWP_EPP X86_CPUID_BIT(0x6, 0, 11)
255-
#define X86_FEATURE_HWP_PKG X86_CPUID_BIT(0x6, 0, 12)
254+
#define X86_FEATURE_HWP_EPP X86_CPUID_BIT(0x6, 0, 10)
255+
#define X86_FEATURE_HWP_PKG X86_CPUID_BIT(0x6, 0, 11)
256256
#define X86_FEATURE_HDC X86_CPUID_BIT(0x6, 0, 13)
257257
#define X86_FEATURE_TURBO_MAX X86_CPUID_BIT(0x6, 0, 14)
258258
#define X86_FEATURE_HWP_CAP X86_CPUID_BIT(0x6, 0, 15)
259259
#define X86_FEATURE_HWP_PECI X86_CPUID_BIT(0x6, 0, 16)
260260
#define X86_FEATURE_HWP_FLEX X86_CPUID_BIT(0x6, 0, 17)
261261
#define X86_FEATURE_HWP_FAST X86_CPUID_BIT(0x6, 0, 18)
262-
#define X86_FEATURE_HW_FEEDBACK X86_CPUID_BIT(0x6, 2, 0)
262+
#define X86_FEATURE_HW_FEEDBACK X86_CPUID_BIT(0x6, 0, 19)
263+
#define X86_FEATURE_THREAD_DIR X86_CPUID_BIT(0x6, 0, 23)
264+
#define X86_FEATURE_MPERF X86_CPUID_BIT(0x6, 2, 0)
263265
#define X86_FEATURE_PERF_BIAS X86_CPUID_BIT(0x6, 2, 3)
264266

265267
#define X86_FEATURE_FSGSBASE X86_CPUID_BIT(0x7, 1, 0)
@@ -268,12 +270,16 @@ static inline bool x86_feature_test(struct x86_cpuid_bit bit) {
268270
#define X86_FEATURE_BMI1 X86_CPUID_BIT(0x7, 1, 3)
269271
#define X86_FEATURE_HLE X86_CPUID_BIT(0x7, 1, 4)
270272
#define X86_FEATURE_AVX2 X86_CPUID_BIT(0x7, 1, 5)
273+
#define X86_FEATURE_FPDP X86_CPUID_BIT(0x7, 1, 6)
271274
#define X86_FEATURE_SMEP X86_CPUID_BIT(0x7, 1, 7)
272275
#define X86_FEATURE_BMI2 X86_CPUID_BIT(0x7, 1, 8)
273276
#define X86_FEATURE_ERMS X86_CPUID_BIT(0x7, 1, 9)
274277
#define X86_FEATURE_INVPCID X86_CPUID_BIT(0x7, 1, 10)
275278
#define X86_FEATURE_RTM X86_CPUID_BIT(0x7, 1, 11)
279+
#define X86_FEATURE_PQM X86_CPUID_BIT(0x7, 1, 12)
280+
#define X86_FEATURE_FPCSDS X86_CPUID_BIT(0x7, 1, 13)
276281
#define X86_FEATURE_MPX X86_CPUID_BIT(0x7, 1, 14)
282+
#define X86_FEATURE_PQE X86_CPUID_BIT(0x7, 1, 15)
277283
#define X86_FEATURE_AVX512F X86_CPUID_BIT(0x7, 1, 16)
278284
#define X86_FEATURE_AVX512DQ X86_CPUID_BIT(0x7, 1, 17)
279285
#define X86_FEATURE_RDSEED X86_CPUID_BIT(0x7, 1, 18)
@@ -348,14 +354,17 @@ static inline bool x86_feature_test(struct x86_cpuid_bit bit) {
348354
#define X86_FEATURE_KVM_CLOCKSOURCE_STABLE X86_CPUID_BIT(0x40000001, 0, 24)
349355

350356

357+
#define X86_FEATURE_AHF64 X86_CPUID_BIT(0x80000001, 2, 0)
358+
#define X86_FEATURE_LZCNT X86_CPUID_BIT(0x80000001, 2, 5)
359+
#define X86_FEATURE_PREFETCHW X86_CPUID_BIT(0x80000001, 2, 8)
351360
#define X86_FEATURE_AMD_TOPO X86_CPUID_BIT(0x80000001, 2, 22)
352361
#define X86_FEATURE_SSE4A X86_CPUID_BIT(0x80000001, 3, 6)
353362
#define X86_FEATURE_SYSCALL X86_CPUID_BIT(0x80000001, 3, 11)
354363
#define X86_FEATURE_NX X86_CPUID_BIT(0x80000001, 3, 20)
355-
#define X86_FEATURE_HUGE_PAGE X86_CPUID_BIT(0x80000001, 3, 26)
364+
#define X86_FEATURE_PG1G X86_CPUID_BIT(0x80000001, 3, 26)
356365
#define X86_FEATURE_RDTSCP X86_CPUID_BIT(0x80000001, 3, 27)
366+
#define X86_FEATURE_LM X86_CPUID_BIT(0x80000001, 3, 29)
357367
#define X86_FEATURE_INVAR_TSC X86_CPUID_BIT(0x80000007, 3, 8)
358-
#define X86_FEATURE_CONSTANT_TSC X86_CPUID_BIT(0x80000007, 3, 8)
359368

360369
// accessor to read some fields out of a register
361370
static inline uint32_t x86_get_vaddr_width(void) {

0 commit comments

Comments
 (0)