Edward O'Callaghan (eocallaghan@alterapraxis.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6413
-gerrit
commit ea2dbdf2e84ff28b67c591ce880cb93b082f83e9 Author: Edward O'Callaghan eocallaghan@alterapraxis.com Date: Wed Jul 30 11:45:10 2014 +1000
cpu/intel: Make VMX bit configurable in CMOS
Use cmos.layout over Kconfig variable to make VMX setting runtime configurable. Fix the following boards cmos.layout to match:
* intel/cougar_canyon2 * kontron/ktqm77
Change-Id: I097b708fa22c735e962556e5d9e57caa322e0b24 Signed-off-by: Edward O'Callaghan eocallaghan@alterapraxis.com --- src/cpu/intel/fsp_model_206ax/Kconfig | 6 +----- src/cpu/intel/fsp_model_206ax/model_206ax_init.c | 9 ++++++--- src/cpu/intel/haswell/Kconfig | 4 ---- src/cpu/intel/haswell/haswell_init.c | 10 +++++++--- src/cpu/intel/model_2065x/Kconfig | 6 +----- src/cpu/intel/model_2065x/model_2065x_init.c | 10 +++++++--- src/cpu/intel/model_206ax/Kconfig | 6 +----- src/cpu/intel/model_206ax/model_206ax_init.c | 10 +++++++--- src/mainboard/intel/cougar_canyon2/Kconfig | 1 - src/mainboard/intel/cougar_canyon2/cmos.layout | 3 ++- src/mainboard/kontron/ktqm77/Kconfig | 1 - src/mainboard/kontron/ktqm77/cmos.layout | 3 ++- 12 files changed, 34 insertions(+), 35 deletions(-)
diff --git a/src/cpu/intel/fsp_model_206ax/Kconfig b/src/cpu/intel/fsp_model_206ax/Kconfig index 043320c..b642e18 100644 --- a/src/cpu/intel/fsp_model_206ax/Kconfig +++ b/src/cpu/intel/fsp_model_206ax/Kconfig @@ -49,10 +49,6 @@ config SMM_TSEG_SIZE hex default 0x800000
-config ENABLE_VMX - bool "Enable VMX for virtualization" - default n - config CPU_MICROCODE_CBFS_LOC hex depends on SUPPORT_CPU_UCODE_IN_CBFS @@ -69,4 +65,4 @@ config MICROCODE_INCLUDE_PATH default "../intel/cpu/ivybridge/microcode" if CPU_INTEL_FSP_MODEL_306AX default "../intel/cpu/sandybridge/microcode" if CPU_INTEL_FSP_MODEL_206AX
-endif +endif # CPU_INTEL_FSP_MODEL_206AX || CPU_INTEL_FSP_MODEL_306AX diff --git a/src/cpu/intel/fsp_model_206ax/model_206ax_init.c b/src/cpu/intel/fsp_model_206ax/model_206ax_init.c index b375d60..e1b04ff 100644 --- a/src/cpu/intel/fsp_model_206ax/model_206ax_init.c +++ b/src/cpu/intel/fsp_model_206ax/model_206ax_init.c @@ -40,7 +40,10 @@ static void configure_vmx(void) { struct cpuid_result regs; msr_t msr; - int enable = IS_ENABLED(CONFIG_ENABLE_VMX); + u8 enable_vmx; + + if (get_option(&enable_vmx, "enable_vmx") != CB_SUCCESS) + enable_vmx = 0; /* Default to disable VMX */
regs = cpuid(1); /* Check that the VMX is supported before reading or writing the MSR. */ @@ -62,9 +65,9 @@ static void configure_vmx(void) */ msr.hi = msr.lo = 0;
- printk(BIOS_DEBUG, "%s VMX\n", enable ? "Enabling" : "Disabling"); + printk(BIOS_DEBUG, "%s VMX\n", enable_vmx ? "Enabling" : "Disabling");
- if (enable) { + if (enable_vmx) { msr.lo |= (1 << 2); if (regs.ecx & CPUID_SMX) msr.lo |= (1 << 1); diff --git a/src/cpu/intel/haswell/Kconfig b/src/cpu/intel/haswell/Kconfig index 9e62ae5..9cda140 100644 --- a/src/cpu/intel/haswell/Kconfig +++ b/src/cpu/intel/haswell/Kconfig @@ -34,10 +34,6 @@ config SMM_TSEG_SIZE hex default 0x800000
-config ENABLE_VMX - bool "Enable VMX for virtualization" - default n - config IED_REGION_SIZE hex default 0x400000 diff --git a/src/cpu/intel/haswell/haswell_init.c b/src/cpu/intel/haswell/haswell_init.c index 1d1fef4..3bda6fd 100644 --- a/src/cpu/intel/haswell/haswell_init.c +++ b/src/cpu/intel/haswell/haswell_init.c @@ -150,11 +150,15 @@ static acpi_cstate_t cstate_map[NUM_C_STATES] = { }, };
+/* Enable VMX for virtualization in cmos.layout */ static void configure_vmx(void) { struct cpuid_result regs; msr_t msr; - int enable = IS_ENABLED(CONFIG_ENABLE_VMX); + u8 enable_vmx; + + if (get_option(&enable_vmx, "enable_vmx") != CB_SUCCESS) + enable_vmx = 0; /* Default to disable VMX */
regs = cpuid(1); /* Check that the VMX is supported before reading or writing the MSR. */ @@ -176,9 +180,9 @@ static void configure_vmx(void) */ msr.hi = msr.lo = 0;
- printk(BIOS_DEBUG, "%s VMX\n", enable ? "Enabling" : "Disabling"); + printk(BIOS_DEBUG, "%s VMX\n", enable_vmx ? "Enabling" : "Disabling");
- if (enable) { + if (enable_vmx) { msr.lo |= (1 << 2); if (regs.ecx & CPUID_SMX) msr.lo |= (1 << 1); diff --git a/src/cpu/intel/model_2065x/Kconfig b/src/cpu/intel/model_2065x/Kconfig index 8185d3a..7bd6f88 100644 --- a/src/cpu/intel/model_2065x/Kconfig +++ b/src/cpu/intel/model_2065x/Kconfig @@ -28,12 +28,8 @@ config SMM_TSEG_SIZE hex default 0x800000
-config ENABLE_VMX - bool "Enable VMX for virtualization" - default n - config XIP_ROM_SIZE hex default 0x20000
-endif +endif # CPU_INTEL_MODEL_2065X diff --git a/src/cpu/intel/model_2065x/model_2065x_init.c b/src/cpu/intel/model_2065x/model_2065x_init.c index d1ec124..ec1b61a 100644 --- a/src/cpu/intel/model_2065x/model_2065x_init.c +++ b/src/cpu/intel/model_2065x/model_2065x_init.c @@ -114,11 +114,15 @@ static acpi_cstate_t cstate_map[] = { { 0 } };
+/* Enable VMX for virtualization in cmos.layout */ static void configure_vmx(void) { struct cpuid_result regs; msr_t msr; - int enable = CONFIG_ENABLE_VMX; + u8 enable_vmx; + + if (get_option(&enable_vmx, "enable_vmx") != CB_SUCCESS) + enable_vmx = 0; /* Default to disable VMX */
regs = cpuid(1); /* Check that the VMX is supported before reading or writing the MSR. */ @@ -140,7 +144,7 @@ static void configure_vmx(void) */ msr.hi = msr.lo = 0;
- printk(BIOS_DEBUG, "%s VMX\n", enable ? "Enabling" : "Disabling"); + printk(BIOS_DEBUG, "%s VMX\n", enable_vmx ? "Enabling" : "Disabling");
/* Even though the Intel manual says you must set the lock bit in addition * to the VMX bit in order for VMX to work, it is incorrect. Thus we leave @@ -155,7 +159,7 @@ static void configure_vmx(void) * By leaving this to the OS (e.g. Linux), people can do exactly what they * want on the fly, and do it correctly (e.g. across multiple cores). */ - if (enable) { + if (enable_vmx) { msr.lo |= (1 << 2); if (regs.ecx & CPUID_SMX) msr.lo |= (1 << 1); diff --git a/src/cpu/intel/model_206ax/Kconfig b/src/cpu/intel/model_206ax/Kconfig index afd155a..8a6cc65 100644 --- a/src/cpu/intel/model_206ax/Kconfig +++ b/src/cpu/intel/model_206ax/Kconfig @@ -29,8 +29,4 @@ config SMM_TSEG_SIZE hex default 0x800000
-config ENABLE_VMX - bool "Enable VMX for virtualization" - default n - -endif +endif # CPU_INTEL_MODEL_206AX || CPU_INTEL_MODEL_306AX diff --git a/src/cpu/intel/model_206ax/model_206ax_init.c b/src/cpu/intel/model_206ax/model_206ax_init.c index 6debf3a..8864a24 100644 --- a/src/cpu/intel/model_206ax/model_206ax_init.c +++ b/src/cpu/intel/model_206ax/model_206ax_init.c @@ -114,11 +114,15 @@ static acpi_cstate_t cstate_map[] = { { 0 } };
+/* Enable VMX for virtualization in cmos.layout */ static void configure_vmx(void) { struct cpuid_result regs; msr_t msr; - int enable = CONFIG_ENABLE_VMX; + u8 enable_vmx; + + if (get_option(&enable_vmx, "enable_vmx") != CB_SUCCESS) + enable_vmx = 0; /* Default to disable VMX */
regs = cpuid(1); /* Check that the VMX is supported before reading or writing the MSR. */ @@ -140,7 +144,7 @@ static void configure_vmx(void) */ msr.hi = msr.lo = 0;
- printk(BIOS_DEBUG, "%s VMX\n", enable ? "Enabling" : "Disabling"); + printk(BIOS_DEBUG, "%s VMX\n", enable_vmx ? "Enabling" : "Disabling");
/* Even though the Intel manual says you must set the lock bit in addition * to the VMX bit in order for VMX to work, it is incorrect. Thus we leave @@ -155,7 +159,7 @@ static void configure_vmx(void) * By leaving this to the OS (e.g. Linux), people can do exactly what they * want on the fly, and do it correctly (e.g. across multiple cores). */ - if (enable) { + if (enable_vmx) { msr.lo |= (1 << 2); if (regs.ecx & CPUID_SMX) msr.lo |= (1 << 1); diff --git a/src/mainboard/intel/cougar_canyon2/Kconfig b/src/mainboard/intel/cougar_canyon2/Kconfig index 389a13c..4b0927f 100644 --- a/src/mainboard/intel/cougar_canyon2/Kconfig +++ b/src/mainboard/intel/cougar_canyon2/Kconfig @@ -10,7 +10,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy select HAVE_OPTION_TABLE select MMCONF_SUPPORT select SUPERIO_SMSC_SIO1007 - select ENABLE_VMX select EARLY_CBMEM_INIT select BROKEN_CAR_MIGRATE select VGA diff --git a/src/mainboard/intel/cougar_canyon2/cmos.layout b/src/mainboard/intel/cougar_canyon2/cmos.layout index 2dfa156..b8d50a3 100644 --- a/src/mainboard/intel/cougar_canyon2/cmos.layout +++ b/src/mainboard/intel/cougar_canyon2/cmos.layout @@ -63,7 +63,8 @@ entries
# ----------------------------------------------------------------- 0 120 r 0 reserved_memory -#120 264 r 0 unused +120 1 e 1 enable_vmx +#121 263 r 0 unused
# ----------------------------------------------------------------- # RTC_BOOT_BYTE (coreboot hardcoded) diff --git a/src/mainboard/kontron/ktqm77/Kconfig b/src/mainboard/kontron/ktqm77/Kconfig index d1a7d42..226368f 100644 --- a/src/mainboard/kontron/ktqm77/Kconfig +++ b/src/mainboard/kontron/ktqm77/Kconfig @@ -12,7 +12,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy select HAVE_OPTION_TABLE select HAVE_ACPI_RESUME select HAVE_SMI_HANDLER - select ENABLE_VMX select HAVE_MRC
config MAINBOARD_DIR diff --git a/src/mainboard/kontron/ktqm77/cmos.layout b/src/mainboard/kontron/ktqm77/cmos.layout index 245b47e..b9577e0 100644 --- a/src/mainboard/kontron/ktqm77/cmos.layout +++ b/src/mainboard/kontron/ktqm77/cmos.layout @@ -63,7 +63,8 @@ entries
# ----------------------------------------------------------------- 0 120 r 0 reserved_memory -#120 264 r 0 unused +120 1 e 1 enable_vmx +#121 263 r 0 unused
# ----------------------------------------------------------------- # RTC_BOOT_BYTE (coreboot hardcoded)