Lines Matching +full:lo +full:- +full:freq +full:- +full:khz
1 // SPDX-License-Identifier: GPL-2.0
14 #include <asm/intel-family.h>
63 * so the freq number is not exactly the same as reported
161 * MSR-based CPU/TSC frequency discovery for certain CPUs.
164 * Return processor base frequency in KHz, or 0 on failure.
168 u32 lo, hi, ratio, freq, tscref; in cpu_khz_from_msr() local
179 freq_desc = (struct freq_desc *)id->driver_data; in cpu_khz_from_msr()
180 if (freq_desc->use_msr_plat) { in cpu_khz_from_msr()
181 rdmsr(MSR_PLATFORM_INFO, lo, hi); in cpu_khz_from_msr()
182 ratio = (lo >> 8) & 0xff; in cpu_khz_from_msr()
184 rdmsr(MSR_IA32_PERF_STATUS, lo, hi); in cpu_khz_from_msr()
188 /* Get FSB FREQ ID */ in cpu_khz_from_msr()
189 rdmsr(MSR_FSB_FREQ, lo, hi); in cpu_khz_from_msr()
190 index = lo & freq_desc->mask; in cpu_khz_from_msr()
191 md = &freq_desc->muldiv[index]; in cpu_khz_from_msr()
195 * part of muldiv, in that case the else will set freq and res to 0. in cpu_khz_from_msr()
197 if (md->divider) { in cpu_khz_from_msr()
198 tscref = TSC_REFERENCE_KHZ * md->multiplier; in cpu_khz_from_msr()
199 freq = DIV_ROUND_CLOSEST(tscref, md->divider); in cpu_khz_from_msr()
202 * accuracy than just calculating freq * ratio. in cpu_khz_from_msr()
204 res = DIV_ROUND_CLOSEST(tscref * ratio, md->divider); in cpu_khz_from_msr()
206 freq = freq_desc->freqs[index]; in cpu_khz_from_msr()
207 res = freq * ratio; in cpu_khz_from_msr()
210 if (freq == 0) in cpu_khz_from_msr()
214 lapic_timer_period = (freq * 1000) / HZ; in cpu_khz_from_msr()