soc/intel/skylake: Add option to enable/disable EIST

Set MSR 0x1A0 bit[16] based on EIST config option.
Default Hardware Managed P-state (HWP) also known as Intel Speed Shift
is enabled on SKL hence disable EIST and ACPI P-state table.

Change-Id: I2b7374a8a04b596edcc88165b64980b7aa09e2a7
Signed-off-by: Subrata Banik <subrata.banik@intel.com>
Reviewed-on: https://review.coreboot.org/19676
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Subrata Banik 2017-05-12 11:43:57 +05:30 committed by Martin Roth
parent 481b364222
commit 6b45ee44a9
4 changed files with 19 additions and 4 deletions

View File

@ -523,9 +523,10 @@ void generate_cpu_entries(device_t device)
generate_c_state_entries(is_s0ix_enable, generate_c_state_entries(is_s0ix_enable,
max_c_state); max_c_state);
/* Generate P-state tables */ if (config->eist_enable)
generate_p_state_entries(core_id, /* Generate P-state tables */
cores_per_package); generate_p_state_entries(core_id,
cores_per_package);
acpigen_pop_len(); acpigen_pop_len();
} }

View File

@ -459,6 +459,12 @@ struct soc_intel_skylake_config {
/* Enable SGX feature */ /* Enable SGX feature */
u8 sgx_enable; u8 sgx_enable;
/* Enable/Disable EIST
* 1b - Enabled
* 0b - Disabled
*/
u8 eist_enable;
}; };
typedef struct soc_intel_skylake_config config_t; typedef struct soc_intel_skylake_config config_t;

View File

@ -261,6 +261,9 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
/* Enable PMC XRAM read */ /* Enable PMC XRAM read */
tconfig->PchPmPmcReadDisable = config->PchPmPmcReadDisable; tconfig->PchPmPmcReadDisable = config->PchPmPmcReadDisable;
/* Enable/Disable EIST */
tconfig->Eist = config->eist_enable;
soc_irq_settings(params); soc_irq_settings(params);
} }

View File

@ -245,12 +245,17 @@ static void configure_isst(void)
static void configure_misc(void) static void configure_misc(void)
{ {
device_t dev = SA_DEV_ROOT;
config_t *conf = dev->chip_info;
msr_t msr; msr_t msr;
msr = rdmsr(IA32_MISC_ENABLE); msr = rdmsr(IA32_MISC_ENABLE);
msr.lo |= (1 << 0); /* Fast String enable */ msr.lo |= (1 << 0); /* Fast String enable */
msr.lo |= (1 << 3); /* TM1/TM2/EMTTM enable */ msr.lo |= (1 << 3); /* TM1/TM2/EMTTM enable */
msr.lo |= (1 << 16); /* Enhanced SpeedStep Enable */ if (conf->eist_enable)
msr.lo |= (1 << 16); /* Enhanced SpeedStep Enable */
else
msr.lo &= ~(1 << 16); /* Enhanced SpeedStep Disable */
wrmsr(IA32_MISC_ENABLE, msr); wrmsr(IA32_MISC_ENABLE, msr);
/* Disable Thermal interrupts */ /* Disable Thermal interrupts */