cpu/intel/haswell: Enable timed MWAIT if supported
Broadwell code unconditionally enables timed MWAIT, but not all Haswell steppings support it. In preparation for merging Haswell and Broadwell, also enable timed MWAIT on Haswell code, but only if it is supported. Change-Id: I1d11d62f1801d65ae4d5623994fd55fd35e8f34a Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/46916 Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							8199b88222
						
					
				
				
					commit
					c89d2a2890
				
			@@ -36,6 +36,7 @@
 | 
				
			|||||||
#define MSR_CORE_THREAD_COUNT		0x35
 | 
					#define MSR_CORE_THREAD_COUNT		0x35
 | 
				
			||||||
#define MSR_PLATFORM_INFO		0xce
 | 
					#define MSR_PLATFORM_INFO		0xce
 | 
				
			||||||
#define  PLATFORM_INFO_SET_TDP		(1 << 29)
 | 
					#define  PLATFORM_INFO_SET_TDP		(1 << 29)
 | 
				
			||||||
 | 
					#define  TIMED_MWAIT_SUPPORTED		(1 << (37 - 32))
 | 
				
			||||||
#define MSR_PKG_CST_CONFIG_CONTROL	0xe2
 | 
					#define MSR_PKG_CST_CONFIG_CONTROL	0xe2
 | 
				
			||||||
#define MSR_PMG_IO_CAPTURE_BASE		0xe4
 | 
					#define MSR_PMG_IO_CAPTURE_BASE		0xe4
 | 
				
			||||||
#define MSR_FEATURE_CONFIG		0x13c
 | 
					#define MSR_FEATURE_CONFIG		0x13c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -431,7 +431,9 @@ void set_power_limits(u8 power_limit_1_time)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void configure_c_states(void)
 | 
					static void configure_c_states(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	msr_t msr;
 | 
						msr_t msr = rdmsr(MSR_PLATFORM_INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const bool timed_mwait_capable = !!(msr.hi & TIMED_MWAIT_SUPPORTED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	msr = rdmsr(MSR_PKG_CST_CONFIG_CONTROL);
 | 
						msr = rdmsr(MSR_PKG_CST_CONFIG_CONTROL);
 | 
				
			||||||
	msr.lo |= (1 << 30);	// Package c-state Undemotion Enable
 | 
						msr.lo |= (1 << 30);	// Package c-state Undemotion Enable
 | 
				
			||||||
@@ -441,6 +443,10 @@ static void configure_c_states(void)
 | 
				
			|||||||
	msr.lo |= (1 << 26);	// C1 Auto Demotion Enable
 | 
						msr.lo |= (1 << 26);	// C1 Auto Demotion Enable
 | 
				
			||||||
	msr.lo |= (1 << 25);	// C3 Auto Demotion Enable
 | 
						msr.lo |= (1 << 25);	// C3 Auto Demotion Enable
 | 
				
			||||||
	msr.lo &= ~(1 << 10);	// Disable IO MWAIT redirection
 | 
						msr.lo &= ~(1 << 10);	// Disable IO MWAIT redirection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (timed_mwait_capable)
 | 
				
			||||||
 | 
							msr.lo |= (1 << 31);	// Timed MWAIT Enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* The deepest package c-state defaults to factory-configured value. */
 | 
						/* The deepest package c-state defaults to factory-configured value. */
 | 
				
			||||||
	wrmsr(MSR_PKG_CST_CONFIG_CONTROL, msr);
 | 
						wrmsr(MSR_PKG_CST_CONFIG_CONTROL, msr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user