src: Move common IA-32 MSRs to <cpu/x86/msr.h>
Use "cpu/x86/msr.h" for common IA-32 MSRs and correct IA-32 MSRs names. Change-Id: Ida7f2d608c55796abf9452f190a58802e498302d Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr> Reviewed-on: https://review.coreboot.org/28752 Reviewed-by: Martin Roth <martinroth@google.com> Reviewed-by: Lijian Zhao <lijian.zhao@intel.com> Reviewed-by: Pratikkumar V Prajapati <pratikkumar.v.prajapati@intel.com> Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Martin Roth
						Martin Roth
					
				
			
			
				
	
			
			
			
						parent
						
							603963e1ba
						
					
				
				
					commit
					419bfbc1f1
				
			| @@ -20,10 +20,6 @@ | ||||
| #include <cpu/x86/msr.h> | ||||
| #include "common.h" | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL	0x3a | ||||
| #define CPUID_VMX		(1 << 5) | ||||
| #define CPUID_SMX		(1 << 6) | ||||
|  | ||||
| void set_vmx(void) | ||||
| { | ||||
| 	struct cpuid_result regs; | ||||
| @@ -105,7 +101,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
|  | ||||
| 	config->version = version; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_HWP_CAPABILITIES; | ||||
| 	msr.addrl = IA32_HWP_CAPABILITIES; | ||||
|  | ||||
| 	/* | ||||
| 	 * Highest Performance: | ||||
| @@ -141,7 +137,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
| 	msr.bit_offset = 8; | ||||
| 	config->regs[CPPC_GUARANTEED_PERF] = msr; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_HWP_REQUEST; | ||||
| 	msr.addrl = IA32_HWP_REQUEST; | ||||
|  | ||||
| 	/* | ||||
| 	 * Desired Performance Register: | ||||
| @@ -182,7 +178,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
| 	 */ | ||||
| 	config->regs[CPPC_COUNTER_WRAP] = unsupported; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_MPERF; | ||||
| 	msr.addrl = IA32_MPERF; | ||||
|  | ||||
| 	/* | ||||
| 	 * Reference Performance Counter Register: | ||||
| @@ -192,7 +188,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
| 	msr.bit_offset = 0; | ||||
| 	config->regs[CPPC_REF_PERF_COUNTER] = msr; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_APERF; | ||||
| 	msr.addrl = IA32_APERF; | ||||
|  | ||||
| 	/* | ||||
| 	 * Delivered Performance Counter Register: | ||||
| @@ -200,7 +196,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
| 	 */ | ||||
| 	config->regs[CPPC_DELIVERED_PERF_COUNTER] = msr; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_HWP_STATUS; | ||||
| 	msr.addrl = IA32_HWP_STATUS; | ||||
|  | ||||
| 	/* | ||||
| 	 * Performance Limited Register: | ||||
| @@ -210,7 +206,7 @@ void cpu_init_cppc_config(struct cppc_config *config, u32 version) | ||||
| 	msr.bit_offset = 2; | ||||
| 	config->regs[CPPC_PERF_LIMITED] = msr; | ||||
|  | ||||
| 	msr.addrl = MSR_IA32_PM_ENABLE; | ||||
| 	msr.addrl = IA32_PM_ENABLE; | ||||
|  | ||||
| 	/* | ||||
| 	 * CPPC Enable Register: | ||||
|   | ||||
| @@ -20,25 +20,12 @@ | ||||
| /* SandyBridge/IvyBridge bus clock is fixed at 100MHz */ | ||||
| #define SANDYBRIDGE_BCLK		100 | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL		0x3a | ||||
| #define  CPUID_VMX			(1 << 5) | ||||
| #define  CPUID_SMX			(1 << 6) | ||||
| #define MSR_FEATURE_CONFIG		0x13c | ||||
| #define MSR_FLEX_RATIO			0x194 | ||||
| #define  FLEX_RATIO_LOCK		(1 << 20) | ||||
| #define  FLEX_RATIO_EN			(1 << 16) | ||||
| #define IA32_PLATFORM_DCA_CAP		0x1f8 | ||||
| #define IA32_MISC_ENABLE		0x1a0 | ||||
| #define MSR_TEMPERATURE_TARGET		0x1a2 | ||||
| #define IA32_PERF_CTL			0x199 | ||||
| #define IA32_THERM_INTERRUPT		0x19b | ||||
| #define IA32_ENERGY_PERFORMANCE_BIAS	0x1b0 | ||||
| #define  ENERGY_POLICY_PERFORMANCE	0 | ||||
| #define  ENERGY_POLICY_NORMAL		6 | ||||
| #define  ENERGY_POLICY_POWERSAVE	15 | ||||
| #define IA32_PACKAGE_THERM_INTERRUPT	0x1b2 | ||||
| #define MSR_LT_LOCK_MEMORY		0x2e7 | ||||
| #define IA32_MC0_STATUS			0x401 | ||||
|  | ||||
| #define MSR_PIC_MSG_CONTROL		0x2e | ||||
| #define MSR_PLATFORM_INFO		0xce | ||||
|   | ||||
| @@ -21,25 +21,12 @@ | ||||
| /* Rangeley bus clock is fixed at 100MHz */ | ||||
| #define RANGELEY_BCLK		100 | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL		0x3a | ||||
| #define  CPUID_VMX			(1 << 5) | ||||
| #define  CPUID_SMX			(1 << 6) | ||||
| #define MSR_FEATURE_CONFIG		0x13c | ||||
| #define MSR_FLEX_RATIO			0x194 | ||||
| #define  FLEX_RATIO_LOCK		(1 << 20) | ||||
| #define  FLEX_RATIO_EN			(1 << 16) | ||||
| #define IA32_PLATFORM_DCA_CAP		0x1f8 | ||||
| #define IA32_MISC_ENABLE		0x1a0 | ||||
| #define MSR_TEMPERATURE_TARGET		0x1a2 | ||||
| #define IA32_PERF_CTL			0x199 | ||||
| #define IA32_THERM_INTERRUPT		0x19b | ||||
| #define IA32_ENERGY_PERFORMANCE_BIAS	0x1b0 | ||||
| #define  ENERGY_POLICY_PERFORMANCE	0 | ||||
| #define  ENERGY_POLICY_NORMAL		6 | ||||
| #define  ENERGY_POLICY_POWERSAVE	15 | ||||
| #define IA32_PACKAGE_THERM_INTERRUPT	0x1b2 | ||||
| #define MSR_LT_LOCK_MEMORY		0x2e7 | ||||
| #define IA32_MC0_STATUS			0x401 | ||||
|  | ||||
| #define MSR_NO_EVICT_MODE		0x2e0 | ||||
| #define MSR_PIC_MSG_CONTROL		0x2e | ||||
|   | ||||
| @@ -35,25 +35,12 @@ | ||||
| #define HASWELL_BCLK			100 | ||||
|  | ||||
| #define CORE_THREAD_COUNT_MSR		0x35 | ||||
| #define IA32_FEATURE_CONTROL		0x3a | ||||
| #define  CPUID_VMX			(1 << 5) | ||||
| #define  CPUID_SMX			(1 << 6) | ||||
| #define MSR_FEATURE_CONFIG		0x13c | ||||
| #define MSR_FLEX_RATIO			0x194 | ||||
| #define  FLEX_RATIO_LOCK		(1 << 20) | ||||
| #define  FLEX_RATIO_EN			(1 << 16) | ||||
| #define IA32_PLATFORM_DCA_CAP		0x1f8 | ||||
| #define IA32_MISC_ENABLE		0x1a0 | ||||
| #define MSR_TEMPERATURE_TARGET		0x1a2 | ||||
| #define IA32_PERF_CTL			0x199 | ||||
| #define IA32_THERM_INTERRUPT		0x19b | ||||
| #define IA32_ENERGY_PERFORMANCE_BIAS	0x1b0 | ||||
| #define  ENERGY_POLICY_PERFORMANCE	0 | ||||
| #define  ENERGY_POLICY_NORMAL		6 | ||||
| #define  ENERGY_POLICY_POWERSAVE	15 | ||||
| #define IA32_PACKAGE_THERM_INTERRUPT	0x1b2 | ||||
| #define MSR_LT_LOCK_MEMORY		0x2e7 | ||||
| #define IA32_MC0_STATUS			0x401 | ||||
|  | ||||
| #define MSR_PIC_MSG_CONTROL		0x2e | ||||
| #define MSR_PLATFORM_INFO		0xce | ||||
|   | ||||
| @@ -649,10 +649,10 @@ static void set_energy_perf_bias(u8 policy) | ||||
| 		return; | ||||
|  | ||||
| 	/* Energy Policy is bits 3:0 */ | ||||
| 	msr = rdmsr(IA32_ENERGY_PERFORMANCE_BIAS); | ||||
| 	msr = rdmsr(IA32_ENERGY_PERF_BIAS); | ||||
| 	msr.lo &= ~0xf; | ||||
| 	msr.lo |= policy & 0xf; | ||||
| 	wrmsr(IA32_ENERGY_PERFORMANCE_BIAS, msr); | ||||
| 	wrmsr(IA32_ENERGY_PERF_BIAS, msr); | ||||
|  | ||||
| 	printk(BIOS_DEBUG, "haswell: energy policy set to %u\n", | ||||
| 	       policy); | ||||
| @@ -661,11 +661,10 @@ static void set_energy_perf_bias(u8 policy) | ||||
| static void configure_mca(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
| 	const unsigned int mcg_cap_msr = 0x179; | ||||
| 	int i; | ||||
| 	int num_banks; | ||||
|  | ||||
| 	msr = rdmsr(mcg_cap_msr); | ||||
| 	msr = rdmsr(IA32_MCG_CAP); | ||||
| 	num_banks = msr.lo & 0xff; | ||||
| 	msr.lo = msr.hi = 0; | ||||
| 	/* TODO(adurbin): This should only be done on a cold boot. Also, some | ||||
|   | ||||
| @@ -190,7 +190,7 @@ static void configure_misc(const int eist, const int tm2, const int emttm) | ||||
|  | ||||
| 	const u32 sub_cstates = cpuid_edx(5); | ||||
|  | ||||
| 	msr = rdmsr(IA32_MISC_ENABLES); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	msr.lo |= (1 << 3);	/* TM1 enable */ | ||||
| 	if (tm2) | ||||
| 		msr.lo |= (1 << 13);	/* TM2 enable */ | ||||
| @@ -220,11 +220,11 @@ static void configure_misc(const int eist, const int tm2, const int emttm) | ||||
| 	if (rdmsr(MSR_FSB_CLOCK_VCC).hi & (1 << (63 - 32))) | ||||
| 		msr.hi &= ~(1 << (38 - 32)); | ||||
|  | ||||
| 	wrmsr(IA32_MISC_ENABLES, msr); | ||||
| 	wrmsr(IA32_MISC_ENABLE, msr); | ||||
|  | ||||
| 	if (eist) { | ||||
| 		msr.lo |= (1 << 20);	/* Lock Enhanced SpeedStep Enable */ | ||||
| 		wrmsr(IA32_MISC_ENABLES, msr); | ||||
| 		wrmsr(IA32_MISC_ENABLE, msr); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -56,7 +56,6 @@ static void configure_c_states(void) | ||||
| 	wrmsr(MSR_PMG_IO_CAPTURE_ADDR, msr); | ||||
| } | ||||
|  | ||||
| #define IA32_MISC_ENABLE	0x1a0 | ||||
| static void configure_misc(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
|   | ||||
| @@ -20,26 +20,13 @@ | ||||
| /* Nehalem bus clock is fixed at 133MHz */ | ||||
| #define NEHALEM_BCLK		133 | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL		0x3a | ||||
| #define  CPUID_VMX			(1 << 5) | ||||
| #define  CPUID_SMX			(1 << 6) | ||||
| #define MSR_FEATURE_CONFIG		0x13c | ||||
| #define MSR_FLEX_RATIO			0x194 | ||||
| #define  FLEX_RATIO_LOCK		(1 << 20) | ||||
| #define  FLEX_RATIO_EN			(1 << 16) | ||||
| #define IA32_PLATFORM_DCA_CAP		0x1f8 | ||||
| #define IA32_MISC_ENABLE		0x1a0 | ||||
| #define MSR_TEMPERATURE_TARGET		0x1a2 | ||||
| #define IA32_FERR_CAPABILITY		0x1f1 | ||||
| #define   FERR_ENABLE			(1 << 0) | ||||
| #define IA32_PERF_CTL			0x199 | ||||
| #define IA32_THERM_INTERRUPT		0x19b | ||||
| #define IA32_ENERGY_PERFORMANCE_BIAS	0x1b0 | ||||
| #define  ENERGY_POLICY_PERFORMANCE	0 | ||||
| #define  ENERGY_POLICY_NORMAL		6 | ||||
| #define  ENERGY_POLICY_POWERSAVE	15 | ||||
| #define IA32_PACKAGE_THERM_INTERRUPT	0x1b2 | ||||
| #define IA32_MC0_STATUS			0x401 | ||||
|  | ||||
| #define MSR_PIC_MSG_CONTROL		0x2e | ||||
| #define MSR_PLATFORM_INFO		0xce | ||||
|   | ||||
| @@ -231,10 +231,10 @@ static void set_energy_perf_bias(u8 policy) | ||||
| 	msr_t msr; | ||||
|  | ||||
| 	/* Energy Policy is bits 3:0 */ | ||||
| 	msr = rdmsr(IA32_ENERGY_PERFORMANCE_BIAS); | ||||
| 	msr = rdmsr(IA32_ENERGY_PERF_BIAS); | ||||
| 	msr.lo &= ~0xf; | ||||
| 	msr.lo |= policy & 0xf; | ||||
| 	wrmsr(IA32_ENERGY_PERFORMANCE_BIAS, msr); | ||||
| 	wrmsr(IA32_ENERGY_PERF_BIAS, msr); | ||||
|  | ||||
| 	printk(BIOS_DEBUG, "model_x06ax: energy policy set to %u\n", | ||||
| 	       policy); | ||||
|   | ||||
| @@ -19,8 +19,6 @@ | ||||
| #include <cpu/x86/msr.h> | ||||
| #include "model_206ax.h" | ||||
|  | ||||
| #define IA32_PLATFORM_ID		0x17 | ||||
|  | ||||
| int get_platform_id(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
|   | ||||
| @@ -20,27 +20,12 @@ | ||||
| /* SandyBridge/IvyBridge bus clock is fixed at 100MHz */ | ||||
| #define SANDYBRIDGE_BCLK		100 | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL		0x3a | ||||
| #define  CPUID_VMX			(1 << 5) | ||||
| #define  CPUID_SMX			(1 << 6) | ||||
| #define MSR_FEATURE_CONFIG		0x13c | ||||
| #define MSR_FLEX_RATIO			0x194 | ||||
| #define  FLEX_RATIO_LOCK		(1 << 20) | ||||
| #define  FLEX_RATIO_EN			(1 << 16) | ||||
| #define IA32_PLATFORM_DCA_CAP		0x1f8 | ||||
| #define IA32_MISC_ENABLE		0x1a0 | ||||
| #define MSR_TEMPERATURE_TARGET		0x1a2 | ||||
| #define IA32_PERF_CTL			0x199 | ||||
| #define IA32_THERM_INTERRUPT		0x19b | ||||
| #define IA32_ENERGY_PERFORMANCE_BIAS	0x1b0 | ||||
| #define  ENERGY_POLICY_PERFORMANCE	0 | ||||
| #define  ENERGY_POLICY_NORMAL		6 | ||||
| #define  ENERGY_POLICY_POWERSAVE	15 | ||||
| #define IA32_PACKAGE_THERM_INTERRUPT	0x1b2 | ||||
| #define MSR_LT_LOCK_MEMORY		0x2e7 | ||||
| #define IA32_MC0_STATUS			0x401 | ||||
| #define IA32_MCG_CAP			0x179 | ||||
|  | ||||
| #define MSR_PIC_MSG_CONTROL		0x2e | ||||
| #define MSR_PLATFORM_INFO		0xce | ||||
| #define  PLATFORM_INFO_SET_TDP		(1 << 29) | ||||
|   | ||||
| @@ -401,10 +401,10 @@ static void set_energy_perf_bias(u8 policy) | ||||
| 	msr_t msr; | ||||
|  | ||||
| 	/* Energy Policy is bits 3:0 */ | ||||
| 	msr = rdmsr(IA32_ENERGY_PERFORMANCE_BIAS); | ||||
| 	msr = rdmsr(IA32_ENERGY_PERF_BIAS); | ||||
| 	msr.lo &= ~0xf; | ||||
| 	msr.lo |= policy & 0xf; | ||||
| 	wrmsr(IA32_ENERGY_PERFORMANCE_BIAS, msr); | ||||
| 	wrmsr(IA32_ENERGY_PERF_BIAS, msr); | ||||
|  | ||||
| 	printk(BIOS_DEBUG, "model_x06ax: energy policy set to %u\n", | ||||
| 	       policy); | ||||
|   | ||||
| @@ -58,7 +58,6 @@ static void configure_c_states(void) | ||||
| 	wrmsr(MSR_PMG_IO_CAPTURE_ADDR, msr); | ||||
| } | ||||
|  | ||||
| #define IA32_MISC_ENABLE	0x1a0 | ||||
| static void configure_misc(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
|   | ||||
| @@ -59,7 +59,6 @@ static void configure_c_states(void) | ||||
| 	wrmsr(MSR_PMG_IO_CAPTURE_ADDR, msr); | ||||
| } | ||||
|  | ||||
| #define IA32_MISC_ENABLE	0x1a0 | ||||
| #define IA32_PECI_CTL		0x5a0 | ||||
|  | ||||
| static void configure_misc(void) | ||||
|   | ||||
| @@ -36,10 +36,6 @@ | ||||
| #define  G_SMRAME	(1 << 3) | ||||
| #define  C_BASE_SEG	((0 << 2) | (1 << 1) | (0 << 0)) | ||||
|  | ||||
| #define IA32_FEATURE_CONTROL	0x3a | ||||
| #define FEATURE_CONTROL_LOCK_BIT	(1 << 0) | ||||
| #define SMRR_ENABLE			(1 << 3) | ||||
|  | ||||
| struct ied_header { | ||||
| 	char signature[10]; | ||||
| 	u32 size; | ||||
|   | ||||
| @@ -72,7 +72,7 @@ static void speedstep_get_limits(sst_params_t *const params) | ||||
| 	msr = rdmsr(MSR_FSB_CLOCK_VCC); | ||||
| 	if ((msr.hi & (1 << (63 - 32))) && | ||||
| 		/* supported and */ | ||||
| 			!(rdmsr(IA32_MISC_ENABLES).hi & (1 << (38 - 32)))) { | ||||
| 			!(rdmsr(IA32_MISC_ENABLE).hi & (1 << (38 - 32)))) { | ||||
| 			/* not disabled */ | ||||
| 		params->turbo = SPEEDSTEP_STATE_FROM_MSR(msr.hi, state_mask); | ||||
| 		params->turbo.is_turbo = 1; | ||||
|   | ||||
| @@ -68,7 +68,7 @@ int get_turbo_state(void) | ||||
| 	cpuid_regs = cpuid(CPUID_LEAF_PM); | ||||
| 	turbo_cap = !!(cpuid_regs.eax & PM_CAP_TURBO_MODE); | ||||
|  | ||||
| 	msr = rdmsr(MSR_IA32_MISC_ENABLES); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	turbo_en = !(msr.hi & H_MISC_DISABLE_TURBO); | ||||
|  | ||||
| 	if (!turbo_cap && turbo_en) { | ||||
| @@ -97,9 +97,9 @@ void enable_turbo(void) | ||||
| 	/* Only possible if turbo is available but hidden */ | ||||
| 	if (get_turbo_state() == TURBO_DISABLED) { | ||||
| 		/* Clear Turbo Disable bit in Misc Enables */ | ||||
| 		msr = rdmsr(MSR_IA32_MISC_ENABLES); | ||||
| 		msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 		msr.hi &= ~H_MISC_DISABLE_TURBO; | ||||
| 		wrmsr(MSR_IA32_MISC_ENABLES, msr); | ||||
| 		wrmsr(IA32_MISC_ENABLE, msr); | ||||
|  | ||||
| 		/* Update cached turbo state */ | ||||
| 		set_global_turbo_state(TURBO_ENABLED); | ||||
| @@ -115,9 +115,9 @@ void disable_turbo(void) | ||||
| 	msr_t msr; | ||||
|  | ||||
| 	/* Set Turbo Disable bit in Misc Enables */ | ||||
| 	msr = rdmsr(MSR_IA32_MISC_ENABLES); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	msr.hi |= H_MISC_DISABLE_TURBO; | ||||
| 	wrmsr(MSR_IA32_MISC_ENABLES, msr); | ||||
| 	wrmsr(IA32_MISC_ENABLE, msr); | ||||
|  | ||||
| 	/* Update cached turbo state */ | ||||
| 	set_global_turbo_state(TURBO_UNAVAILABLE); | ||||
|   | ||||
| @@ -28,9 +28,6 @@ | ||||
| #define MODEL_NANO_3000_B0	0x8 | ||||
| #define MODEL_NANO_3000_B2	0xa | ||||
|  | ||||
| #define MSR_IA32_PERF_STATUS	0x00000198 | ||||
| #define MSR_IA32_PERF_CTL	0x00000199 | ||||
| #define MSR_IA32_MISC_ENABLE	0x000001a0 | ||||
| #define NANO_MYSTERIOUS_MSR	0x120e | ||||
|  | ||||
| static void nano_finish_fid_vid_transition(void) | ||||
| @@ -41,7 +38,7 @@ static void nano_finish_fid_vid_transition(void) | ||||
| 	int cnt = 0; | ||||
| 	do { | ||||
| 		udelay(16); | ||||
| 		msr = rdmsr(MSR_IA32_PERF_STATUS); | ||||
| 		msr = rdmsr(IA32_PERF_STATUS); | ||||
| 		cnt++; | ||||
| 		if (cnt > 128) { | ||||
| 			printk(BIOS_WARNING, | ||||
| @@ -61,7 +58,7 @@ static void nano_set_max_fid_vid(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
| 	/* Get voltage and frequency info */ | ||||
| 	msr = rdmsr(MSR_IA32_PERF_STATUS); | ||||
| 	msr = rdmsr(IA32_PERF_STATUS); | ||||
| 	u8 min_fid = (msr.hi >> 24); | ||||
| 	u8 max_fid = (msr.hi >>  8) & 0xff; | ||||
| 	u8 min_vid = (msr.hi >> 16) & 0xff; | ||||
| @@ -78,7 +75,7 @@ static void nano_set_max_fid_vid(void) | ||||
| 		/* Set highest frequency and VID */ | ||||
| 		msr.lo = msr.hi; | ||||
| 		msr.hi = 0; | ||||
| 		wrmsr(MSR_IA32_PERF_CTL, msr); | ||||
| 		wrmsr(IA32_PERF_CTL, msr); | ||||
| 		/* Wait for the transition to complete, otherwise, the CPU | ||||
| 		 * might reset itself repeatedly */ | ||||
| 		nano_finish_fid_vid_transition(); | ||||
| @@ -96,9 +93,9 @@ static void nano_power(void) | ||||
| { | ||||
| 	msr_t msr; | ||||
| 	/* Enable Powersaver */ | ||||
| 	msr = rdmsr(MSR_IA32_MISC_ENABLE); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	msr.lo |= (1 << 16); | ||||
| 	wrmsr(MSR_IA32_MISC_ENABLE, msr); | ||||
| 	wrmsr(IA32_MISC_ENABLE, msr); | ||||
|  | ||||
| 	/* Enable 6 bit or 7-bit VRM support | ||||
| 	 * This MSR is not documented by VIA docs, other than setting these | ||||
| @@ -116,24 +113,24 @@ static void nano_power(void) | ||||
| 	nano_set_max_fid_vid(); | ||||
|  | ||||
| 	/* Enable TM3 */ | ||||
| 	msr = rdmsr(MSR_IA32_MISC_ENABLE); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	msr.lo |= ( (1 << 3) | (1 << 13) ); | ||||
| 	wrmsr(MSR_IA32_MISC_ENABLE, msr); | ||||
| 	wrmsr(IA32_MISC_ENABLE, msr); | ||||
|  | ||||
| 	u8 stepping = ( cpuid_eax(0x1) ) &0xf; | ||||
| 	if (stepping >= MODEL_NANO_3000_B0) { | ||||
| 		/* Hello Nano 3000. The Terminator needs a CPU upgrade */ | ||||
| 		/* Enable C1e, C2e, C3e, and C4e states */ | ||||
| 		msr = rdmsr(MSR_IA32_MISC_ENABLE); | ||||
| 		msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 		msr.lo |= ( (1 << 25) | (1 << 26) | (1 << 31)); /* C1e, C2e, C3e */ | ||||
| 		msr.hi |= (1 << 0); /* C4e */ | ||||
| 		wrmsr(MSR_IA32_MISC_ENABLE, msr); | ||||
| 		wrmsr(IA32_MISC_ENABLE, msr); | ||||
| 	} | ||||
|  | ||||
| 	/* Lock on Powersaver */ | ||||
| 	msr = rdmsr(MSR_IA32_MISC_ENABLE); | ||||
| 	msr = rdmsr(IA32_MISC_ENABLE); | ||||
| 	msr.lo |= (1 << 20); | ||||
| 	wrmsr(MSR_IA32_MISC_ENABLE, msr); | ||||
| 	wrmsr(IA32_MISC_ENABLE, msr); | ||||
| } | ||||
|  | ||||
| static void nano_init(struct device *dev) | ||||
|   | ||||
| @@ -32,7 +32,7 @@ static ucode_update_status nano_apply_ucode(const nano_ucode_header *ucode) | ||||
| 	 * not the header. The header is just there to help us. */ | ||||
| 	msr.lo = (unsigned int)(&(ucode->ucode_start)); | ||||
| 	msr.hi = 0; | ||||
| 	wrmsr(MSR_IA32_BIOS_UPDT_TRIG, msr); | ||||
| 	wrmsr(IA32_BIOS_UPDT_TRIG, msr); | ||||
|  | ||||
| 	/* Let's see if we updated successfully */ | ||||
| 	msr = rdmsr(MSR_UCODE_UPDATE_STATUS); | ||||
|   | ||||
| @@ -18,8 +18,6 @@ | ||||
|  | ||||
| #include <cpu/cpu.h> | ||||
|  | ||||
| #define MSR_IA32_BIOS_UPDT_TRIG         0x00000079 | ||||
| #define MSR_IA32_BIOS_SIGN_ID           0x0000008b | ||||
| #define MSR_UCODE_UPDATE_STATUS         0x00001205 | ||||
|  | ||||
| #define NANO_UCODE_SIGNATURE            0x53415252 | ||||
|   | ||||
| @@ -183,7 +183,7 @@ void paging_set_pat(uint64_t pat) | ||||
| 	msr_t msr; | ||||
| 	msr.lo = pat; | ||||
| 	msr.hi = pat >> 32; | ||||
| 	wrmsr(MSR_IA32_PAT, msr); | ||||
| 	wrmsr(IA32_PAT, msr); | ||||
| } | ||||
|  | ||||
| /* PAT encoding used in util/x86/x86_page_tables.go. It matches the linux | ||||
|   | ||||
| @@ -16,6 +16,7 @@ | ||||
|  | ||||
| #include <cpu/x86/cr.h> | ||||
| #include <cpu/amd/mtrr.h> | ||||
| #include <cpu/x86/msr.h> | ||||
|  | ||||
| /* The SIPI vector is responsible for initializing the APs in the system. It | ||||
|  * loads microcode, sets up MSRs, and enables caching before calling into | ||||
| @@ -25,9 +26,6 @@ | ||||
| #define CODE_SEG 0x10 | ||||
| #define DATA_SEG 0x18 | ||||
|  | ||||
| #define IA32_UPDT_TRIG 0x79 | ||||
| #define IA32_BIOS_SIGN_ID 0x8b | ||||
|  | ||||
| .section ".module_parameters", "aw", @progbits | ||||
| ap_start_params: | ||||
| gdtaddr: | ||||
| @@ -145,7 +143,7 @@ lock_microcode: | ||||
|  | ||||
| load_microcode: | ||||
| 	/* Load new microcode. */ | ||||
| 	mov	$IA32_UPDT_TRIG, %ecx | ||||
| 	mov	$IA32_BIOS_UPDT_TRIG, %ecx | ||||
| 	xor	%edx, %edx | ||||
| 	mov	%edi, %eax | ||||
| 	/* The microcode pointer is passed in pointing to the header. Adjust | ||||
|   | ||||
		Reference in New Issue
	
	Block a user