mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 08:01:08 +00:00
x86: Move common Intel CPU info code into a function
Add cpu_intel_get_info() to find out the CPU info on modern Intel CPUs. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> [bmeng: add parameter and return value descriptions] Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
46dd41fa5a
commit
d3abc5d1ee
4 changed files with 32 additions and 14 deletions
|
@ -645,14 +645,7 @@ void cpu_set_power_limits(int power_limit_1_time)
|
||||||
|
|
||||||
static int broadwell_get_info(struct udevice *dev, struct cpu_info *info)
|
static int broadwell_get_info(struct udevice *dev, struct cpu_info *info)
|
||||||
{
|
{
|
||||||
msr_t msr;
|
return cpu_intel_get_info(info, BROADWELL_BCLK);
|
||||||
|
|
||||||
msr = msr_read(IA32_PERF_CTL);
|
|
||||||
info->cpu_freq = ((msr.lo >> 8) & 0xff) * BROADWELL_BCLK * 1000000;
|
|
||||||
info->features = 1 << CPU_FEAT_L1_CACHE | 1 << CPU_FEAT_MMU |
|
|
||||||
1 << CPU_FEAT_UCODE | 1 << CPU_FEAT_DEVICE_ID;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int broadwell_get_count(struct udevice *dev)
|
static int broadwell_get_count(struct udevice *dev)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <cpu.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <asm/cpu_common.h>
|
#include <asm/cpu_common.h>
|
||||||
|
@ -110,3 +111,15 @@ int cpu_set_flex_ratio_to_tdp_nominal(void)
|
||||||
/* Not reached */
|
/* Not reached */
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cpu_intel_get_info(struct cpu_info *info, int bclk)
|
||||||
|
{
|
||||||
|
msr_t msr;
|
||||||
|
|
||||||
|
msr = msr_read(IA32_PERF_CTL);
|
||||||
|
info->cpu_freq = ((msr.lo >> 8) & 0xff) * bclk * 1000000;
|
||||||
|
info->features = 1 << CPU_FEAT_L1_CACHE | 1 << CPU_FEAT_MMU |
|
||||||
|
1 << CPU_FEAT_UCODE | 1 << CPU_FEAT_DEVICE_ID;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu_common.h>
|
||||||
#include <asm/cpu_x86.h>
|
#include <asm/cpu_x86.h>
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
#include <asm/msr-index.h>
|
#include <asm/msr-index.h>
|
||||||
|
@ -436,12 +437,7 @@ static int model_206ax_init(struct udevice *dev)
|
||||||
|
|
||||||
static int model_206ax_get_info(struct udevice *dev, struct cpu_info *info)
|
static int model_206ax_get_info(struct udevice *dev, struct cpu_info *info)
|
||||||
{
|
{
|
||||||
msr_t msr;
|
return cpu_intel_get_info(info, SANDYBRIDGE_BCLK);
|
||||||
|
|
||||||
msr = msr_read(MSR_IA32_PERF_CTL);
|
|
||||||
info->cpu_freq = ((msr.lo >> 8) & 0xff) * SANDYBRIDGE_BCLK * 1000000;
|
|
||||||
info->features = 1 << CPU_FEAT_L1_CACHE | 1 << CPU_FEAT_MMU |
|
|
||||||
1 << CPU_FEAT_UCODE;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#define IA32_PERF_CTL 0x199
|
#define IA32_PERF_CTL 0x199
|
||||||
|
|
||||||
|
struct cpu_info;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cpu_common_init() - Set up common CPU init
|
* cpu_common_init() - Set up common CPU init
|
||||||
*
|
*
|
||||||
|
@ -31,4 +33,18 @@ int cpu_common_init(void);
|
||||||
*/
|
*/
|
||||||
int cpu_set_flex_ratio_to_tdp_nominal(void);
|
int cpu_set_flex_ratio_to_tdp_nominal(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu_intel_get_info() - Obtain CPU info for Intel CPUs
|
||||||
|
*
|
||||||
|
* Most Intel CPUs use the same MSR to obtain the clock speed, and use the same
|
||||||
|
* features. This function fills in these values, given the value of the base
|
||||||
|
* clock in MHz (typically this should be set to 100).
|
||||||
|
*
|
||||||
|
* @info: cpu_info struct to fill in
|
||||||
|
* @bclk_mz: the base clock in MHz
|
||||||
|
*
|
||||||
|
* @return 0 always
|
||||||
|
*/
|
||||||
|
int cpu_intel_get_info(struct cpu_info *info, int bclk_mz);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue