Framework Laptop (12th Gen) with Fedora 37

Table of Contents

These are my notes on installing a brand new Framework Laptop DIY Edition (12th Gen Intel® Core™) from Batch 1 for myself.

This very similar to the previous post, the 12th Gen model was announced shortly after my nephew got his 11th Gen and overall I liked the Gen11 so much that I wanted a machine from Framework for myself.

Summary

Installing Fedora was completely painless and is fully documented.

Installing Fedora on this machine is actually so smooth that I did not even do a write-up when I originally got the machine and installed Fedora 36.

F36 also smoothly did dnf system-upgrade to 37.

But, to do a neat and tidy F37 write-up, I also did a fresh F37 install.

Today (2023-02-21), I noticed that I had forgotten to publish this write-up. :facepalm: I’ll publish now, but will leave the original date.

Hardware Info

The Framework Support page should be your entry point.

Be sure to check out the Setup, Upgrade, and Repair Guides.

And if you already have a Gen11 but want a Gen12, see their Upgrade Kit Guide.

Hardware Summary

  • CPU: 12th Gen Intel(R) Core(TM) i7-1260P
  • Memory: 64GB (2 x 32GB) DDR4-3200
  • Storage: 2TB - WD_BLACK™ SN850 NVMe™
  • Keyboard: English International

Make, Model, Version

[root@ipu ~]# dmidecode --type system | head --lines=9
# dmidecode 3.4
Getting SMBIOS data from sysfs.
SMBIOS 3.3 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: Framework
        Product Name: Laptop (12th Gen Intel Core)
        Version: A6

BIOS Version

As Shipped

For the Gen 12 today’s latest is what is factory installed, 03.04

[root@ipu ~]# dmidecode -s bios-version
03.04

Since this version is vulnerable to

I recommend you apply a later release of the BIOS once available.

12th Gen Intel Core BIOS 3.06 Beta

While this is certainly not everyone’s view, I was fully prepared for a beta BIOS to have issues but I wanted the 9 CVE fixes and am comfortable in tryin gbetas and reporting back.

I did have to do the documented work-around of power off, remove AC, wait 2 minutes to get it to apply. And reported to the forum as requested.

Read the linked thread for details when deciding if you want to test the beta.

If you are not adventurous, do wait for a non-beta release. Not everyone shares my a beta could worst case brick the machine, I accept that when I beta test view :-)

My USB-A ports feel more finicky since the update. But I have not yet looked at that in depth.

CPU

12th Gen Intel(R) Core(TM) i7-1260P aka Alder Lake. It has 4 Performance-cores, 8 Efficient-cores and can do 16 Total Threads.

[root@ipu ~]# lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         39 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  16
  On-line CPU(s) list:   0-15
Vendor ID:               GenuineIntel
  BIOS Vendor ID:        Intel(R) Corporation
  Model name:            12th Gen Intel(R) Core(TM) i7-1260P
    BIOS Model name:     12th Gen Intel(R) Core(TM) i7-1260P To Be Filled By O.E.M. CPU @ 1.9GHz
    BIOS CPU family:     198
    CPU family:          6
    Model:               154
    Thread(s) per core:  2
    Core(s) per socket:  12
    Socket(s):           1
    Stepping:            3
    CPU(s) scaling MHz:  44%
    CPU max MHz:         4700.0000
    CPU min MHz:         400.0000
    BogoMIPS:            4992.00
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts 
                         acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art ar
                         ch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_f
                         req pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdc
                         m pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdran
                         d lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp ibrs
                         _enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2
                          smep bmi2 erms invpcid rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsa
                         vec xgetbv1 xsaves split_lock_detect avx_vnni dtherm ida arat pln pts hwp hwp_notify
                          hwp_act_window hwp_epp hwp_pkg_req hfi umip pku ospke waitpkg gfni vaes vpclmulqdq 
                         rdpid movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabili
                         ties
Virtualization features: 
  Virtualization:        VT-x
Caches (sum of all):     
  L1d:                   448 KiB (12 instances)
  L1i:                   640 KiB (12 instances)
  L2:                    9 MiB (6 instances)
  L3:                    18 MiB (1 instance)
NUMA:                    
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-15
Vulnerabilities:         
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Not affected
  Retbleed:              Not affected
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence
  Srbds:                 Not affected
  Tsx async abort:       Not affected

Storage

WD_BLACK SN850 2TB

[root@ipu ~]# nvme list
Node                  Generic               SN                   Model                                    Namespace Usage                      Format           FW Rev  
--------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            [REDACTED]           WDS200T1X0E-00AFY0                       1           2.00  TB /   2.00  TB    512   B +  0 B   614900WD
[root@ipu ~]# df -h -x tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-0       1.9T  7.0G  1.9T   1% /
/dev/dm-0       1.9T  7.0G  1.9T   1% /home
/dev/nvme0n1p2  974M  226M  681M  25% /boot
/dev/nvme0n1p1  599M   18M  582M   3% /boot/efi

Note that Fedora uses btrfs by default since F33.

Memory

2x Crucial 32GB DDR4-3200 SODIMM (CT32G4SFD832A.M16FF)

Click to show technical details.
[root@ipu ~]# dmidecode -t memory
# dmidecode 3.4
Getting SMBIOS data from sysfs.
SMBIOS 3.3 present.

Handle 0x0018, DMI type 16, 23 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: None
        Maximum Capacity: 64 GB
        Error Information Handle: Not Provided
        Number Of Devices: 2

Handle 0x0019, DMI type 17, 92 bytes
Memory Device
        Array Handle: 0x0018
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 32 GB
        Form Factor: SODIMM
        Set: None
        Locator: Controller0-ChannelA-DIMM0
        Bank Locator: BANK 0
        Type: DDR4
        Type Detail: Synchronous
        Speed: 3200 MT/s
        Manufacturer: Crucial Technology
        Serial Number: [REDACTED]
        Asset Tag: 9876543210
        Part Number: CT32G4SFD832A.M16FF 
        Rank: 2
        Configured Memory Speed: 3200 MT/s
        Minimum Voltage: Unknown
        Maximum Voltage: Unknown
        Configured Voltage: 1.2 V
        Memory Technology: DRAM
        Memory Operating Mode Capability: Volatile memory
        Firmware Version: Not Specified
        Module Manufacturer ID: Bank 6, Hex 0x9B
        Module Product ID: Unknown
        Memory Subsystem Controller Manufacturer ID: Unknown
        Memory Subsystem Controller Product ID: Unknown
        Non-Volatile Size: None
        Volatile Size: 32 GB
        Cache Size: None
        Logical Size: None

Handle 0x001A, DMI type 17, 92 bytes
Memory Device
        Array Handle: 0x0018
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 32 GB
        Form Factor: SODIMM
        Set: None
        Locator: Controller1-ChannelA-DIMM0
        Bank Locator: BANK 0
        Type: DDR4
        Type Detail: Synchronous
        Speed: 3200 MT/s
        Manufacturer: Crucial Technology
        Serial Number: [REDACTED]
        Asset Tag: 9876543210
        Part Number: CT32G4SFD832A.M16FF 
        Rank: 2
        Configured Memory Speed: 3200 MT/s
        Minimum Voltage: Unknown
        Maximum Voltage: Unknown
        Configured Voltage: 1.2 V
        Memory Technology: DRAM
        Memory Operating Mode Capability: Volatile memory
        Firmware Version: Not Specified
        Module Manufacturer ID: Bank 6, Hex 0x9B
        Module Product ID: Unknown
        Memory Subsystem Controller Manufacturer ID: Unknown
        Memory Subsystem Controller Product ID: Unknown
        Non-Volatile Size: None
        Volatile Size: 32 GB
        Cache Size: None
        Logical Size: None
[root@ipu ~]# free -h
               total        used        free      shared  buff/cache   available
Mem:            62Gi       2.5Gi        53Gi       1.7Gi       6.3Gi        57Gi
Swap:          8.0Gi          0B       8.0Gi

Expansion Cards

I went for the following

count description
1 DisplayPort Expansion Card
1 HDMI Expansion Card
3 USB-C Expansion Card
2 USB-A Expansion Card
1 MicroSD Expansion Card

Initial Bring-up

Insert RAM and NVMe

Is well documented in the Framework Laptop DIY Edition Quick Start Guide. Yes, same guide for Gen11 and 12.

Install Fedora 37 KDE Plasma

  • Is well documented in Framework’s article Fedora 37 Installation on the Framework Laptop

  • Although, preferring KDE Plasma, I installed that Spin instead of the default Gnome one.

  • Yes, of course under Wayland and SecureBoot is on, it’s 2022. :-)

  • I know I can not hibernate in SecureBoot mode, that’s OK, shutdown and bootup is super snappy. And so far I am fine that suspending eats a bit of battery.

Post installation set-up

  • Not using Gnome, I skipped the fractional desktop workaround, Plasma has been doing fractional scaling out of the box for quite a while.

  • Not having a SN750 with older firmware (I have a SN850), I did not bother with the nvme.noacpi=1 workaround.

  • Neither did I bother with TLP so far, I’ll first see how batter life is out of the box in F37 KDE Plasma.

  • The module_blacklist=hid_sensor_hub workaround I did put in place (because brightness keys were not working under 6.0.11-300.fc37.x86_64).

  • I did not bother with a Windows install, Linux is a first class citizen an this hardware, I do not expect to need a legacy OS like Windows 11 for anything (Yes, I’m biased).

  • I disabled Management Engine (ME) / Active Management Technologies (AMT) and strongly recommend you also change the default password (and potentially disable ME completely).

  • I set up HW decode as per https://fedoraproject.org/wiki/Firefox_Hardware_acceleration I used intel-media-driver.

Usage Notes

KDE Plasma Configuration

Not much to say really. It all just works out of the box (ootb). Here’s what I configured;

  • fingerprint for sudo and screen unlock.
  • no fingerprint for initial login. I would not want that. If it was available, I would disable it.
  • screen refresh reduced to 48 Hz, not sure this is needed as PSR (see below) works ootb.

powerop

I did run a powertop --calibrate, like I always do for a new battery powered machine.

And I enabled a run of powertop --auto-tune at boot with

[root@ipu ~]# systemctl enable powertop.service 
                                                                                        
Created symlink /etc/systemd/system/multi-user.target.wants/powertop.service → /usr/lib/systemd/system/powertop.service.

Again, like i have been doing on my machines for quite a few years now and it’s been ages since I needed to work around powertop related issues. With Fedora a first class citizen on this hardware I want to know if something breaks even though I expect it not to.

Panel Self Refresh

Is enabled out of the box, nice.

[root@ipu ~]#  cat /sys/kernel/debug/dri/1/i915_edp_psr_status 
Sink support: yes [0x03]
PSR mode: PSR2 enabled
Source PSR ctl: enabled [0x80000226]
Source PSR status: DEEP_SLEEP [0x80000100]
Busy frontbuffer bits: 0x00000000
Frame:  PSR2 SU blocks:
0       0
1       0
2       0
3       0
4       0
5       0
6       0
7       0
PSR2 selective fetch: enabled

Potential Battery Life Tuning

If, when travelling regularly again, I find battery life not good enough, then I’ll look into the thread Linux battery life tuning.

Install Packages for Virtualization

Also as usual, just read Getting started with virtualization and Installing virtual operating systems with GNOME Boxes in the Fedora Quick Docs before choosing between the two options.

Let-downs

Are so far few but definitely worth mentioning.

Glossy screens are annoying

This is my first glossy screen on a laptop in decades and I find the reflections highly irritating, even in an office setting. So much in fact that I changed my tune from how bad can a glossy screen be, the Framework laptop has so many things that speak for it to I will never again buy a laptop without a matte screen :-(

And that means a matte screen shipped by the vendor! I failed to locate a completely dust free environment to apply a matte screen protector and gave up after what felt like 20 minutes of trying to apply it without a single dust mote stick between screen and protector.

With enough effort and time, it seems very feasible to apply one cleanly. See the forum thread Matte screen protector. But I expect the vendor to deal with that amount of hassle (dust free, perfectly aligned, …).

Keyboard

After decades of ThinkPads as laptops (X31, X60, X230, X270) I have very hight expectations towards keyboards. I was fully aware that The Framework laptop’s keyboard would feel like a drop in typing quality to me.

In light of this, for me, the Framework laptop’s keyboard is OK for 15 minutes to maximum an hour, but if I ever need to type at it for multiple hours a day, then I will definitely use an external keyboard of high quality.

Mind you this is Meckern auf hohem Niveau as the Germans say. It is definitely not a bad keyboard, it’s just not at ThinkPad typing feel levels.

Conclusion (after 3 months of light use)

As of today (2023-02-21), thanks to mostly working from home, the machine got little use so this conclusion is only of limited value;

  • If it was offered with a matte screen I certainly would buy one again.
  • But with a glossy screen, nope (nor any other brand with a glossy screen for that matter).

Sure, it’s not perfect, but consumer grade hardware rarely is, hell pretty much nothing ever is.

The fact that the machine can be easily serviced with standard components is highly valued, as is Framework’s attitude towards hardware upgrades for Gen11 owners (not only are upgrade boards readily purchasable, on top of that the price is reasonable and Framework has suggestions plus 3D plans to recycle a Gen11 motherboard)

Also a big big thanks to Framework for their superb documentation. While not quite at the level of ThinkPads (the Hardware Maintenance Manuals to be precise) it is close enough in technical detail and even more palatable in how the information is presented (scan QR code on a piece of Framework hardware, get URL to relevant documentation section without any pay-wall hassle) I wish all laptop vendors offered this level of technical details and ease of access!

I’m hoping that I can buy a matter screen at some point in the future and swap out the only major annoyance I have so far.