I am trying to find our why I need VoodooTSCSycn on my x299 system.
I am comparing my published efi platform data to one from a a real iMacPro. The obvious differences are (other keys are removed for clarity):
| +-o platform <class IOService, id 0x100000113, !registered, !matched, active, busy 0, retain 7>
| "board-rev" = <09>
| "InitialTSC" = <26486eee7a2a0000>
| "apple-coprocessor-version" = <00000200>
| "FSBFrequency" = <00105e5f00000000>
| "board-id" = <"Mac-7BA5B2D9E42DDD94">
My x299 hack
| +-o platform <class IOService, id 0x100000113, !registered, !matched, active, busy 0, retain 9>
| "CPUFrequency" = <40e6a2d600000000>
| "FSBFrequency" = <6717f60500000000>
| "InitialTSC" = <984a9bd600000000>
So iMacPro has a board-rev and board-id property, but I don't think that matters here.
More interestingly, there is no CPUFrequency on the real mac, and that key is not referenced anywhere in the kernel or boot.efi. So while this is a difference, it probably does not matter (i can boot without one).
The FSBFrequency on the iMacPro is 1600Mhz, like if it was multiplied by the logical core count(16*100Mhz). In the kernel, FSBFrquency is not used for skylake cpu family, but there is a reference in boot.efi, so it might matter.
And the most interesting, the InitialTSC value is 3600501400Hz for my system, and that is probably correct. However, this field on the iMacPro looks like it should not contain the TSC frequency, but the intital tsc tick value, something like you can read by rdtsc64(). This value is read by the kernel to tsc_at_boot and then used like this in one point:
if (tsc_rebase_abs_time == 0) tsc_rebase_abs_time = _rtc_tsc_to_nanoseconds(rdtsc64() - tsc_at_boot, rntp);
Which makes it clear that this value should indeed be a tick number, not a frequency value.
At another point, tsc_at_boot is stored in sysctl like this:
SYSCTL_QUAD(_machdep_tsc, OID_AUTO, at_boot, CTLFLAG_RD|CTLFLAG_LOCKED, &tsc_at_boot, "");
That variable on my system after boot is:
Which is interesting, as it is set on efi/platform, but somehow ends up being 0.
So my questions are:
- Why is the FSBFrequency 1600Mhz on the iMacPro? Does it even matter?
- Is the InitialTSC value calculated by clover properly? The use of this value by the kernel indicates it is not.