x86: Sync up tsc_timer with Linux

Since we are using the code from Linux, update it to the newer version
in v6.11

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2024-08-27 19:44:27 -06:00
parent 7c0f70b65b
commit ecf31113f1

View file

@ -83,7 +83,7 @@ static unsigned long cpu_mhz_from_cpuid(void)
if (cpuid_eax(0) < 0x16) if (cpuid_eax(0) < 0x16)
return 0; return 0;
return cpuid_eax(0x16); return cpuid_eax(0x15);
} }
/* /*
@ -299,10 +299,19 @@ static unsigned long __maybe_unused quick_pit_calibrate(void)
if (!pit_expect_msb(0xff-i, &delta, &d2)) if (!pit_expect_msb(0xff-i, &delta, &d2))
break; break;
delta -= tsc;
/*
* Extrapolate the error and fail fast if the error will
* never be below 500 ppm.
*/
if (i == 1 &&
d1 + d2 >= (delta * MAX_QUICK_PIT_ITERATIONS) >> 11)
return 0;
/* /*
* Iterate until the error is less than 500 ppm * Iterate until the error is less than 500 ppm
*/ */
delta -= tsc;
if (d1+d2 >= delta >> 11) if (d1+d2 >= delta >> 11)
continue; continue;