've just performed the upgrade with LVFS (worked flawlessly, awesome!), and I see an improvement, in the sense that I do see some CPUs hit turbo sometimes.
This is a 12th gen Framework 13" with a 12th Gen Intel(R) Core(TM) i5-1240P
CPU.
Here’s what i7z looks like as I’m typing this:
Cpu speed from cpuinfo 2111.00Mhz
cpuinfo might be wrong if cpufreq is enabled. To guess correctly try estimating via tsc
Linux's inbuilt cpu_khz code emulated now
True Frequency (without accounting Turbo) 2111 MHz
CPU Multiplier 21x || Bus clock frequency (BCLK) 100.52 MHz
Socket [0] - [physical cores=12, logical cores=16, max online cores ever=12]
TURBO ENABLED on 12 Cores, Hyper Threading ON
Max Frequency without considering Turbo 2211.52 MHz (100.52 x [22])
Max TURBO Multiplier (if Enabled) with 1/2/3/4/5/6 Cores is 44x/44x/37x/35x/35x/35x
Real Current Frequency 3076.65 MHz [100.52 x 30.61] (Max of below)
Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp VCore
Core 1 [0]: 2014.95 (20.04x) 1.21 97.8 0 1 46 1.1127
Core 2 [2]: 3076.65 (30.61x) 2.36 95.6 0 1 46 1.1127
Core 3 [4]: 2350.32 (23.38x) 2.1 96.2 0 1.5 46 1.1078
Core 4 [6]: 2973.10 (29.58x) 2.77 95.1 0 1 48 1.1277
Core 5 [8]: 2334.90 (23.23x) 1.68 2.28 0 95.9 45 1.1127
Core 6 [9]: 2715.21 (27.01x) 1.65 1.66 0 96.2 45 1.1127
Core 7 [10]: 2170.68 (21.59x) 1 1.91 0 97.1 45 1.1277
Core 8 [11]: 1643.91 (16.35x) 1.4 3.64 0 95.3 45 1.1277
Core 9 [12]: 2174.92 (21.64x) 1 1.3 0 98.1 48 1.1477
Core 10 [13]: 2066.47 (20.56x) 1 5.84 0 93.5 48 1.1377
Core 11 [14]: 1810.60 (18.01x) 1 0.621 0 99 48 1.1377
Core 12 [15]: 1432.82 (14.25x) 1.26 3.24 0 95.9 48 1.1377
Now I wish I had copy-pasted the i7z output in Framework Laptop 13 - 12th Gen Intel Core BIOS 3.17 Release Stable - #124 by anarcat to compare, but I seem to recall it was more stuck around 1000MHz before, I would not see those 2000/3000MHz marks at all.
And while performing a becnhamark, it actually spins up to 4GHz correctly:
Cpu speed from cpuinfo 2111.00Mhz
cpuinfo might be wrong if cpufreq is enabled. To guess correctly try estimating via tsc
Linux's inbuilt cpu_khz code emulated now
True Frequency (without accounting Turbo) 2105 MHz
CPU Multiplier 21x || Bus clock frequency (BCLK) 100.24 MHz
Socket [0] - [physical cores=12, logical cores=16, max online cores ever=12]
TURBO ENABLED on 12 Cores, Hyper Threading ON
Max Frequency without considering Turbo 2205.24 MHz (100.24 x [22])
Max TURBO Multiplier (if Enabled) with 1/2/3/4/5/6 Cores is 44x/44x/37x/35x/35x/35x
Real Current Frequency 4316.37 MHz [100.24 x 43.06] (Max of below)
Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp VCore
Core 1 [0]: 2924.97 (29.18x) 4.27 91 0 3.04 63 1.0684
Core 2 [2]: 4316.37 (43.06x) 100 0 0 0 94 1.0884
Core 3 [4]: 3427.23 (34.19x) 3.22 93.8 0 1 60 1.1338
Core 4 [6]: 3468.47 (34.60x) 6.07 88.5 0 1.52 63 1.0638
Core 5 [8]: 2942.05 (29.35x) 4.56 4.12 0 89.5 60 1.1238
Core 6 [9]: 3059.79 (30.53x) 7.99 3.86 0 84.6 60 1.1438
Core 7 [10]: 2831.92 (28.25x) 2.12 4.76 0 92.4 59 1.1438
Core 8 [11]: 3049.16 (30.42x) 5.73 2.29 0 89.4 59 1.1438
Core 9 [12]: 2677.65 (26.71x) 2.93 3.67 0 92.6 61 1.1538
Core 10 [13]: 2762.01 (27.55x) 2.99 6.05 0 90 61 1.1538
Core 11 [14]: 2930.54 (29.24x) 2.63 3.34 0 93 61 1.1688
Core 12 [15]: 2126.81 (21.22x) 3.23 9.71 0 87 61 1.1538
… and I do see a performance improvement on the benchmarks!
anarcat@angela:~/s/asncounter> hyperfine -i -w 3 --input test/data/sample-10m.ips \
"./asncounter.py --cache-dir=test/cache"
Benchmark 1: ./asncounter.py --cache-dir=test/cache
Time (mean ± σ): 6.506 s ± 0.104 s [User: 6.387 s, System: 0.118 s]
Range (min … max): 6.361 s … 6.690 s 10 runs
Before the BIOS upgrade, it was 16 seconds instead of 6 seconds.
I don’t get the quirky fan spinups anymore (which were oddly satisfying, after the first knee-jerk reaction), but I guess that’s a profile I can adjust myself…
Fan is at 5k RPM during the benchmark according to sensors
and spins down to 3k after a a couple minutes, the whole thing gets pretty hot still (50C), so I’m not sure the fan profiles are ideal.
Every 2.0s: sensors angela: Thu Jul 10 10:00:16 2025
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: +42.0°C
cros_ec-isa-000c
Adapter: ISA adapter
fan1: 3361 RPM
F75303_Local: +47.9°C
F75303_CPU: +49.9°C
F75303_DDR: +47.9°C
Battery: +31.9°C
PECI: +51.9°C
F75397_VCCGT: +45.9°C
acpitz-acpi-0
Adapter: ACPI interface
temp1: +51.8°C
temp2: +47.8°C
temp3: +49.8°C
temp4: +45.8°C
temp5: +31.8°C
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +52.0°C (high = +100.0°C, crit = +100.0°C)
Core 0: +52.0°C (high = +100.0°C, crit = +100.0°C)
Core 4: +51.0°C (high = +100.0°C, crit = +100.0°C)
Core 8: +50.0°C (high = +100.0°C, crit = +100.0°C)
Core 12: +48.0°C (high = +100.0°C, crit = +100.0°C)
Core 16: +50.0°C (high = +100.0°C, crit = +100.0°C)
Core 17: +50.0°C (high = +100.0°C, crit = +100.0°C)
Core 18: +50.0°C (high = +100.0°C, crit = +100.0°C)
Core 19: +50.0°C (high = +100.0°C, crit = +100.0°C)
Core 20: +51.0°C (high = +100.0°C, crit = +100.0°C)
Core 21: +51.0°C (high = +100.0°C, crit = +100.0°C)
Core 22: +51.0°C (high = +100.0°C, crit = +100.0°C)
Core 23: +51.0°C (high = +100.0°C, crit = +100.0°C)
BAT1-acpi-0
Adapter: ACPI interface
in0: 17.21 V
curr1: 0.00 A
nvme-pci-0100
Adapter: PCI adapter
Composite: +36.9°C (low = -40.1°C, high = +83.8°C)
(crit = +87.8°C)
Sensor 1: +51.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +36.9°C (low = -273.1°C, high = +65261.8°C)
here’s what the ec fan profile looks like:
anarcat@angela:~[1]> sudo dist/EmbeddedController/build/bds/util/ectool thermalget
sensor warn high halt fan_off fan_max name
0 0 361 371 324 342 F75303_Local
1 0 361 371 324 342 F75303_CPU
2 0 360 370 313 342 F75303_DDR
3 0 323 333 313 323 Battery
4 388 393 400 376 378 PECI
5 0 361 371 324 342 F75397_VCCGT
EC result 3 (INVALID_PARAM)
(all temps in degrees Kelvin)
this seems similar to previously reported (e.g. Framework Laptop 13 - 12th Gen Intel Core BIOS 3.17 Release Stable - #54 by Ryan_Martens)
After writing this for a while, the fan has spun down to 2k RPM and is not audible over the ambiant noise here, it was barely audible before, even during the benchmark.
Finally:
I saw that! It’s a little distracting, but otherwise feels completely inoffensive.
That, I did not notice however, not sure what it means.
So, long story short, I’d call this a Great Success, thanks for iterating quickly on this, and congrats on the team!