On Wed, May 20, 2026 at 11:36:47AM -0400, Thomas Vetere wrote:
> I run OpenBSD 7.9 on a Librem 14 (i7-10710U, 6c/12t, 15W) and spent
> the last few days trying to figure out why my CPU never seems to leave
> base clock under sustained load. Wanted to share what I found, partly
> because I'd like a sanity check on the diagnosis, and partly in case
> someone has thoughts on whether there's a small fix worth attempting.
>
> Under any sustained all-core workload, hw.cpuspeed reports 1101 MHz
> and stays there (this might be a cosmetic issue of hw.cpuspeed). apmd
> -A, apmd -H, and obsdfreqd all produce identical wall-clock benchmark
> times within ~1%. The same hardware on GNU/Linux turbos to ~2.2 GHz
> all-core and ~4 GHz single-core under the same loads.
>
> My dmesg shows acpicpu0 at acpi0: ..., PSS rather than the FVS line —
> reading acpicpu_x86.c, that's because _PCT uses FFixedHW addressing,
> which trips the goto in acpicpu_getpct. So acpicpu drops out of
> setperf duty and est(4) takes over.
>
> I dumped the ACPI tables and looked at _PSS. The first entry decodes to:
>
> CoreFreq: 1101 MHz, Control: 0x2F00 (ratio 47 = 4700 MHz)
>
> That's the standard "Pseudo-P0" turbo convention — base+1 as the
> marker frequency, Control encodes max turbo ratio. The other five
> entries are the actual non-turbo P-states (1100, 1000, 800, 600, 400).
> Reading est.c (via the github mirror), est_acpi_pss_changed copies
> pss_ctrl straight into its operating points table, so est would write
> 0x2F00 to MSR_IA32_PERF_CTL when setperf=100.
>
> I booted a Debian GNU/Linux live USB to read MSRs:
>
> 0x770 (PM_ENABLE):       1
> 0x1AD (TURBO_RATIO_LIMIT): 0x2727272729292F2F
> 0x1A0 (MISC_ENABLE) bit 38: 0
> 0xCE  (PLATFORM_INFO):   max non-turbo ratio = 11
>
> HWP is enabled by Purism's coreboot at boot. Per the SDM, that means
> PERF_CTL writes don't actually affect the chip's frequency —
> IA32_HWP_REQUEST (0x774) is what matters. With no OS-side HWP support,
> nothing's writing meaningful values there, so the chip sits in
> whatever state HWP defaults to, which on this platform happens to be
> base clock under load.
>
> So as far as I can tell: the est driver does the right thing with the
> Pseudo-P0 Control value, but the write is functionally a no-op while
> HWP is on.
>
> A couple of questions for anyone who knows this area better than I do:
>
> Is there in-progress HWP work I should know about? jcs mentioned a
> shim in 2021 (https://jcs.org/2021/01/27/x1nano), but I don't see
> signs it landed.
>
> Is the obvious-sounding minimal fix — detect HWP at boot, write a
> reasonable max-perf value to HWP_REQUEST per CPU, treat est's setperf
> as a no-op when HWP is on — actually as simple as it sounds, or are
> there suspend/resume / per-package / EPP-policy gotchas that make it
> worse than I think?
>
> The other alternative is to just rebuild coreboot from source with HWP
> disabled.
>
> Happy to share the full DSDT/SSDT dumps and dmesg if useful. The
> Librem 14 coreboot also exposes _CPC properly.
>
> Thanks, Thomas
>

an acpidump might be helpful here. man sendbug

Reply via email to