Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Weird clock behaviour with current (amd64) kernel
On Sun, Aug 14, 2022 at 02:38:07AM +0700, Robert Elz wrote:
> Date: Sat, 13 Aug 2022 17:41:05 +0200
> From: Michael van Elst <mlelstv%serpens.de@localhost>
> Message-ID: <YvfGEXBuss872Fwl%serpens.de@localhost>
>
> | If you boot the kernel in debug mode (netbsd -x),
>
> I did.
>
> | you may see output like:
>
> which was:
>
> [ 1.000003] cpu0: TSC freq CPUID 3417600000 Hz
> [ 1.000003] cpu0: TSC freq from CPUID 3417600000 Hz
> [ 1.064451] xhci0: hcc2=0x1fd<ETC_TSC,ETC,CIC,LEC,CTC,FSC,U3C>
> [ 1.064451] xhci3: hcc2=0xfd<ETC_TSC,ETC,CIC,LEC,CTC,FSC,U3C>
> [ 1.064451] cpu0: TSC freq from HPET 9007294000 Hz
> [ 1.064451] cpu0: TSC freq CPUID 3417600000 Hz
> [ 1.064451] cpu0: TSC freq calibrated 9007294000 Hz
So it's the HPET calibration that goes wrong.
The calibration works like:
Fetch hpet and tsc at attach time.
(void)cpu_counter();
val = bus_space_read_4(sc->sc_memt, sc->sc_memh, HPET_MCOUNT_LO);
hpet_attach_tsc = cpu_counter();
hpet_attach_val = val;
When calibtrating, make sure that hpet has counted for at
least 0.1 seconds:
hd = bus_space_read_4(sc->sc_memt, sc->sc_memh, HPET_MCOUNT_LO);
hd -= hpet_attach_val;
if (hd < (uint64_t)100000 * 1000000000 / sc->sc_period)
hpet_delay(100000);
Fetch hpet and tsc again
s = splhigh();
(void)cpu_counter();
hd = bus_space_read_4(sc->sc_memt, sc->sc_memh, HPET_MCOUNT_LO);
td = cpu_counter();
splx(s);
Compute tsc frequency from hpet frequency.
hd -= hpet_attach_val;
val = ((uint64_t)hd * sc->sc_period - sc->sc_adj) / 100000000;
freq = (td - hpet_attach_tsc) * 10000000 / val;
return rounddown(freq + 500, 1000);
In your case, you say it takes ~6 minutes between attachment and
calibration and your hpet runs at 19.2MHz.
This is enough for HPET_MCOUNT_LO to overflow.
Greetings,
--
Michael van Elst
Internet: mlelstv%serpens.de@localhost
"A potential Snark may lurk in every tree."
Home |
Main Index |
Thread Index |
Old Index