/* SPDX-License-Identifier: GPL-2.0-or-later */ #include #include #include #include static unsigned long mhz; unsigned long tsc_freq_mhz(void) { msr_t msr; uint8_t cpufid; uint8_t cpudid; uint8_t high_state; if (mhz) return mhz; high_state = rdmsr(PS_LIM_REG).lo & 0x7; msr = rdmsr(PSTATE_0_MSR + high_state); if (!(msr.hi & 0x80000000)) die("Unknown error: cannot determine P-state 0\n"); cpufid = (msr.lo & 0x3f); cpudid = (msr.lo & 0x1c0) >> 6; mhz = (100 * (cpufid + 0x10)) / (0x01 << cpudid); return mhz; }