[U-Boot] [PATCH] x86: tsc: add support for reading CPU freq from cpuid
Christian Gmeiner
christian.gmeiner at gmail.com
Wed May 23 12:01:14 UTC 2018
Am Mi., 23. Mai 2018 um 11:48 Uhr schrieb Bin Meng <bmeng.cn at gmail.com>:
> On Mon, May 14, 2018 at 5:32 PM, Christian Gmeiner
> <christian.gmeiner at gmail.com> wrote:
> > Starting with cpuid level 0x16 (Skylake-based processors)
> > it is possible to get CPU base freq via cpuid.
> >
> > This fixes booting on a skylake based system.
> >
> > Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
> > ---
> > drivers/timer/tsc_timer.c | 31 +++++++++++++++++++++++++------
> > 1 file changed, 25 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/timer/tsc_timer.c b/drivers/timer/tsc_timer.c
> > index c7fefd2031..96a3e55513 100644
> > --- a/drivers/timer/tsc_timer.c
> > +++ b/drivers/timer/tsc_timer.c
> > @@ -21,6 +21,17 @@
> >
> > DECLARE_GLOBAL_DATA_PTR;
> >
> > +static unsigned long cpu_mhz_from_cpuid(void)
> > +{
> > + if (gd->arch.x86_vendor != X86_VENDOR_INTEL)
> > + return 0;
> > +
> > + if (cpuid_eax(0) < 0x16)
> > + return 0;
> > +
> > + return cpuid_eax(0x16);
> > +}
> > +
> > /*
> > * According to Intel 64 and IA-32 System Programming Guide,
> > * if MSR_PERF_STAT[31] is set, the maximum resolved bus ratio can be
> > @@ -343,14 +354,22 @@ static void tsc_timer_ensure_setup(void)
> > if (!gd->arch.clock_rate) {
> > unsigned long fast_calibrate;
> >
> > + fast_calibrate = cpu_mhz_from_cpuid();
> > + if (fast_calibrate)
> > + goto done;
> > +
> > fast_calibrate = cpu_mhz_from_msr();
> > - if (!fast_calibrate) {
> > - fast_calibrate = quick_pit_calibrate();
> > - if (!fast_calibrate)
> > - panic("TSC frequency is ZERO");
> > - }
> > + if (fast_calibrate)
> > + goto done;
> > +
> > + fast_calibrate = quick_pit_calibrate();
> > + if (fast_calibrate)
> > + goto done;
> > +
> > + panic("TSC frequency is ZERO");
> >
> > - gd->arch.clock_rate = fast_calibrate * 1000000;
> > + done:
> nits: this indention is wrong, and will cause checkpatch warnings.
Oops.
> > + gd->arch.clock_rate = fast_calibrate * 1000000;
> > }
> > }
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> I can fix the nits when applying.
That would be great - thanks!
--
greets
--
Christian Gmeiner, MSc
https://christian-gmeiner.info
More information about the U-Boot
mailing list