soc/intel/broadwell_de: Implement smbios_cpu_get_maximum_freq_mhz()
Determine maximum speed by looking at either turbo flex limit or uncore ratio limit. Signed-off-by: Andrey Petrov <anpetrov@fb.com> Change-Id: I0f3a64a40cb1d28d8eb9380c2071ec748e345b88 Reviewed-on: https://review.coreboot.org/c/coreboot/+/36284 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: David Hendricks <david.hendricks@gmail.com>
This commit is contained in:
parent
2e032f07df
commit
0108c8b742
|
@ -20,6 +20,7 @@
|
||||||
#include <cpu/cpu.h>
|
#include <cpu/cpu.h>
|
||||||
#include <cpu/intel/microcode.h>
|
#include <cpu/intel/microcode.h>
|
||||||
#include <cpu/intel/smm_reloc.h>
|
#include <cpu/intel/smm_reloc.h>
|
||||||
|
#include <cpu/intel/turbo.h>
|
||||||
#include <cpu/x86/cache.h>
|
#include <cpu/x86/cache.h>
|
||||||
#include <cpu/x86/lapic.h>
|
#include <cpu/x86/lapic.h>
|
||||||
#include <cpu/x86/mp.h>
|
#include <cpu/x86/mp.h>
|
||||||
|
@ -27,6 +28,8 @@
|
||||||
#include <cpu/x86/mtrr.h>
|
#include <cpu/x86/mtrr.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <device/pci_ops.h>
|
#include <device/pci_ops.h>
|
||||||
|
#include <smbios.h>
|
||||||
|
#include <soc/broadwell_de.h>
|
||||||
#include <soc/lpc.h>
|
#include <soc/lpc.h>
|
||||||
#include <soc/msr.h>
|
#include <soc/msr.h>
|
||||||
#include <soc/pattrs.h>
|
#include <soc/pattrs.h>
|
||||||
|
@ -98,6 +101,25 @@ static void set_max_ratio(void)
|
||||||
wrmsr(IA32_PERF_CTL, perf_ctl);
|
wrmsr(IA32_PERF_CTL, perf_ctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int smbios_cpu_get_max_speed_mhz(void)
|
||||||
|
{
|
||||||
|
msr_t msr;
|
||||||
|
uint32_t uncore_max_ratio, turbo_max_ratio = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use turbo's max ratio if it is enabled, otherwise use
|
||||||
|
* uncore's max ratio.
|
||||||
|
*/
|
||||||
|
msr = rdmsr(MSR_UNCORE_RATIO_LIMIT);
|
||||||
|
uncore_max_ratio = msr.lo & 0x7f;
|
||||||
|
if (get_turbo_state() == TURBO_ENABLED) {
|
||||||
|
msr = rdmsr(MSR_TURBO_RATIO_LIMIT);
|
||||||
|
turbo_max_ratio = msr.lo & 0xff; /* 1 core */
|
||||||
|
}
|
||||||
|
|
||||||
|
return MAX(uncore_max_ratio, turbo_max_ratio) * CPU_BCLK;
|
||||||
|
}
|
||||||
|
|
||||||
static void alt_smm_lock(void)
|
static void alt_smm_lock(void)
|
||||||
{
|
{
|
||||||
struct device *dev = pcidev_on_root(LPC_DEV, LPC_FUNC);
|
struct device *dev = pcidev_on_root(LPC_DEV, LPC_FUNC);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define MSR_TURBO_RATIO_LIMIT 0x1ad
|
#define MSR_TURBO_RATIO_LIMIT 0x1ad
|
||||||
#define MSR_PKG_POWER_SKU_UNIT 0x606
|
#define MSR_PKG_POWER_SKU_UNIT 0x606
|
||||||
#define MSR_PKG_POWER_LIMIT 0x610
|
#define MSR_PKG_POWER_LIMIT 0x610
|
||||||
|
#define MSR_UNCORE_RATIO_LIMIT 0x620
|
||||||
#define MSR_CONFIG_TDP_NOMINAL 0x648
|
#define MSR_CONFIG_TDP_NOMINAL 0x648
|
||||||
|
|
||||||
#define SMM_MCA_CAP_MSR 0x17d
|
#define SMM_MCA_CAP_MSR 0x17d
|
||||||
|
|
Loading…
Reference in New Issue