/** @file Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef cpuhost_h #define cpuhost_h #include "PlatformHost.h" #include "DataTypes.h" #include "SysHostChipCommon.h" #define inline __inline // // CPU ExtFamily/Family/Model bit[19:4] of cpuid(1)_eax // #ifndef CPU_FAMILY_HSX #define CPU_FAMILY_HSX 0x306F // Haswell CPU #endif #ifndef CPU_FAMILY_SKX #define CPU_FAMILY_SKX 0x5065 // Skylake CPU #endif #ifndef CPU_FAMILY_ICX #define CPU_FAMILY_ICX 0x606a // IceLake CPU #endif #ifndef CPU_FAMILY_KNH #define CPU_FAMILY_KNH 0x706F // KnightsHill CPU #endif //typedef INT32 CPU_STATUS; // this causes MiniBIOS build failure typedef int CPU_STATUS; #define CPU_SUCCESS 0 #define CPU_FAILURE -1 // // Reset types needed post execution // #define POST_RESET_NO_RESET 0x0 #define POST_RESET_WARM 0x2 // bit1 #define POST_RESET_POWERGOOD 0x4 // bit2 #define POST_RESET_AMI 0x8 // bit3 // // Max reservable TOR entries defines // #define MAX_TOR_ENTRIES_ISOC 15 #define MAX_TOR_ENTRIES_NORMAL 17 // // Error Code used for LogError() // #define ERROR_CPU_BIST 0xC0 #define ERROR_CPU_BIST_MINOR_SOME_SOCKET 0x01 #define ERROR_CPU_BIST_MINOR_SOME_BISTRESULTMASK 0x02 #define ERROR_CPU_BIST_MINOR_ALL 0x03 // // Error Codes used for LogError() and LogWarning() // #define WARN_CPU_BIST 0xC0 #define WARN_CPU_BIST_MINOR_LOWER_TILE_RANGE 0x01 #define WARN_CPU_BIST_MINOR_MIDDLE_TILE_RANGE 0x02 #define WARN_CPU_BIST_MINOR_UPPER_TILE_RANGE 0x03 #define WARN_CPU_BIST_MINOR_ALL 0x04 // // MSR definitions // #ifndef MSR_IA32_PLATFORM_ID #define MSR_IA32_PLATFORM_ID 0x0017 #endif #ifndef MSR_APIC_BASE #define MSR_APIC_BASE 0x001B #endif #ifndef MSR_EBC_FREQUENCY_ID #define MSR_EBC_FREQUENCY_ID 0x002C #endif #ifndef MSR_CORE_THREAD_COUNT #define MSR_CORE_THREAD_COUNT 0x0035 #endif #ifndef MSR_SOCKET_ID #define MSR_SOCKET_ID 0x0039 #endif #ifndef MSR_IA32_FEATURE_CONTROL #define MSR_IA32_FEATURE_CONTROL 0x003A #endif #ifndef VIRTUAL_MSR_MCA_ON_NON_NEW_CACHABLE_MMIO_EN_ADDR #define VIRTUAL_MSR_MCA_ON_NON_NEW_CACHABLE_MMIO_EN_ADDR 0x61 #endif #ifndef MCAONNONNEMCACHEABLEMMIO_BIT #define MCAONNONNEMCACHEABLEMMIO_BIT 0x1 #endif #ifndef MSR_IA32_BIOS_UPDT_TRIG #define MSR_IA32_BIOS_UPDT_TRIG 0x0079 #endif #ifndef MSR_TRACE_HUB_STH_ACPIBAR_BASE #define MSR_TRACE_HUB_STH_ACPIBAR_BASE 0x00000080 #define B_MSR_TRACE_HUB_STH_ACPIBAR_BASE_LOCK BIT0 #define V_MSR_TRACE_HUB_STH_ACPIBAR_BASE_MASK 0x0003FFFF #endif #ifndef PCH_TRACE_HUB_FW_BASE_ADDRESS #define PCH_TRACE_HUB_FW_BASE_ADDRESS 0xFE0C0000 ///< TraceHub FW MMIO base address #endif #ifndef MSR_IA32_BIOS_SIGN_ID #define MSR_IA32_BIOS_SIGN_ID 0x008B #endif #ifndef MSR_PLATFORM_INFO #define MSR_PLATFORM_INFO 0x00CE #endif #ifndef MSR_PMG_CST_CONFIG_CONTROL #define MSR_PMG_CST_CONFIG_CONTROL 0x00E2 #endif #ifndef MSR_PMG_IO_CAPTURE_BASE #define MSR_PMG_IO_CAPTURE_BASE 0x0E4 #endif #ifndef MSR_MCG_CONTAIN #define MSR_MCG_CONTAIN 0x178 #define B_MSR_MCG_CONTAIN_PE BIT0 #endif #ifndef MSR_IA32_MCG_CAP #define MSR_IA32_MCG_CAP 0x179 #define B_MSR_MCG_CAP_GCM BIT24 #endif #ifndef MSR_CLOCK_FLEX_MAX #define MSR_CLOCK_FLEX_MAX 0x0194 #endif #ifndef MSR_IA32_PERF_STS #define MSR_IA32_PERF_STS 0x0198 #endif #ifndef MSR_IA32_PERF_CTL #define MSR_IA32_PERF_CTL 0x0199 #endif #ifndef MSR_IA32_MISC_ENABLES #define MSR_IA32_MISC_ENABLES 0x01A0 #endif #ifndef IA32_MISC_ENABLE #define IA32_MISC_ENABLE 0x01A0 #endif #ifndef FAST_STRING_ENABLE_BIT #define FAST_STRING_ENABLE_BIT 0x1 #endif #ifndef MSR_MISC_PWR_MGMT #define MSR_MISC_PWR_MGMT 0x01AA #endif #ifndef MSR_TURBO_POWER_CURRENT_LIMIT #define MSR_TURBO_POWER_CURRENT_LIMIT 0x1AC #endif #ifndef MSR_TURBO_RATIO_LIMIT #define MSR_TURBO_RATIO_LIMIT 0x01AD #endif #ifndef MSR_POWER_CTRL #define MSR_POWER_CTRL 0x01FC #endif #ifndef MSR_NO_EVICT_MODE #define MSR_NO_EVICT_MODE 0x02E0 #endif #ifndef MSR_IA32_MC7_CTL #define MSR_IA32_MC7_CTL 0x041C #endif #ifndef MSR_IA32_MC8_MISC2 #define MSR_IA32_MC8_MISC2 0x0288 #endif #ifndef MSR_PCIEXBAR #define MSR_PCIEXBAR 0x0300 #endif #ifndef MSR_PPIN_CTL #define MSR_PPIN_CTL 0x004E #endif #ifndef MSR_PPIN #define MSR_PPIN 0x004F #endif #ifndef MSR_MC_CTL #define MSR_MC_CTL 0x0434 #endif #define MSR_UNCORE_FREQ 0x0620 #define MSR_UPI0_MC_STS 0x0415 #define MSR_UPI1_MC_STS 0x0431 #define MSR_UPI2_MC_STS 0x044d #ifndef MTRR_PHYS_BASE_0 #define MTRR_PHYS_BASE_0 0x0200 #define MTRR_PHYS_MASK_0 0x0201 #define MTRR_PHYS_BASE_1 0x0202 #define MTRR_PHYS_MASK_1 0x0203 #define MTRR_PHYS_BASE_2 0x0204 #define MTRR_PHYS_MASK_2 0x0205 #define MTRR_PHYS_BASE_3 0x0206 #define MTRR_PHYS_MASK_3 0x0207 #define MTRR_PHYS_BASE_4 0x0208 #define MTRR_PHYS_MASK_4 0x0209 #define MTRR_PHYS_BASE_5 0x020A #define MTRR_PHYS_MASK_5 0x020B #define MTRR_PHYS_BASE_6 0x020C #define MTRR_PHYS_MASK_6 0x020D #define MTRR_PHYS_BASE_7 0x020E #define MTRR_PHYS_MASK_7 0x020F #define MTRR_FIX_64K_00000 0x0250 #define MTRR_FIX_16K_80000 0x0258 #define MTRR_FIX_16K_A0000 0x0259 #define MTRR_FIX_4K_C0000 0x0268 #define MTRR_FIX_4K_C8000 0x0269 #define MTRR_FIX_4K_D0000 0x026A #define MTRR_FIX_4K_D8000 0x026B #define MTRR_FIX_4K_E0000 0x026C #define MTRR_FIX_4K_E8000 0x026D #define MTRR_FIX_4K_F0000 0x026E #define MTRR_FIX_4K_F8000 0x026F #define MTRR_DEF_TYPE 0x02FF #define MTRR_MEMORY_TYPE_UC 0x00 #define MTRR_MEMORY_TYPE_WC 0x01 #define MTRR_MEMORY_TYPE_WT 0x04 #define MTRR_MEMORY_TYPE_WP 0x05 #define MTRR_MEMORY_TYPE_WB 0x06 #define MTRR_DEF_TYPE_E 0x0800 #define MTRR_DEF_TYPE_FE 0x0400 #define MTRR_PHYS_MASK_VALID 0x0800 #endif // MTRR_PHYS_BASE_0 #define CONFIG_TDP_MAX_LEVEL 5 // // Memory-mapped APIC Offsets // #define APIC_LOCAL_APIC_ID 0x020 #define APIC_ICR_LO 0x300 #define APIC_ICR_HI 0x310 #define APIC_TMR_INITIAL_CNT 0x380 #define APIC_TMR_CURRENT_CNT 0x390 // // APIC Timer runs at 133MHz and by default decrements // the current count register at once per two clocks. // t = time in milliseconds // c = APIC Timer Initial Value // c = (t * 10^(-6) sec) * (133 * 10^6 count/sec) * (1/2 clocks) // Notice seconds and exponents cancel out leaving count value // c = (t * 133 / 2) // #define APIC_TMR_1US (1 * 133 / 2) #define APIC_TMR_10US (10 * 133 / 2) #define APIC_TMR_20US (20 * 133 / 2) #define APIC_TMR_100US (100 * 133 / 2) #define APIC_TMR_200US (200 * 133 / 2) #define APIC_TMR_10MS (10 * 1000 * 133 / 2) #endif // cpuhost_h