OpenBSD on the Framework Laptop

posted on aug 6th, 2021 with tags hardware, laptops, and openbsd, and last updated on nov 12th, 2021
part of OpenBSD on Laptops series

Framework is a new company offering a laptop that is designed to be repairable and upgradeable, both in terms of internal components like the screen and motherboard, and in pluggable expansion cards.

Framework Laptop with expansion cards removed

Table of Contents

  1. Hardware
  2. Assembly
  3. Expansion Cards
  4. Firmware
  5. Battery
  6. OpenBSD Support Log
  7. Current OpenBSD Support Summary
  8. Conclusion

Hardware

While many classic ThinkPad owners will probably say “so what?” to a repairable and upgradeable laptop, doing so in an ultrabook-style thin and light laptop in 2021 is fairly novel. Each new ThinkPad I’ve used lately has become less and less repairable and upgradeable, with RAM and WiFi cards now being soldered to the motherboard.

The Framework Laptop became available for pre-order in May and was offered in two configurations of essentially the same device: a pre-built option and a DIY option that can be purchased without RAM, an SSD, a WiFi card, or a Windows license.

Both configurations offer the same 13.5” 3:2 aspect ratio screen and various Intel CPU options. I opted for the Intel i7-1185G7 processor Intel i5-1135G7, after exchanging it for the i7 model which I initially purchased.

The laptop weighs 2.8 lbs and is 11.6” wide, 9” tall, and 0.6” inches thick. It has basically two USB-C ports on each side, although they are recessed about 1.5” to accommodate the expansion cards which are just various USB-C dongles in uniform cases. Framework offers USB-C, USB-A, HDMI, and DisplayPort connector cards, along with a MicroSD card reader and 250GB and 1TB storage devices. Currently all of the cards desired must be purchased with the laptop at the time of ordering, and they are not yet available for sale separately.

In between the two expansion slots on the left side is an LED for charging status and a 3.5mm headphone jack to the right of the slots. On the right side of the laptop is another LED for charging, if charging via USB-C connection on that side.

There are two downward-firing speakers and a fan exhaust on the bottom. The speakers sound excellent and have a sufficient amount of bass (but not overpowering like the new MacBook Air). The fan is inaudible at idle, but can get very loud at full speed when doing a high amount of CPU and disk activity such as a git clone. It makes a little click/squeak when turning on, and in some cases can come on and turn off every few seconds which makes it kind of annoying in a very quiet room. There is no audible coil whine from any of the components.

The keyboard deck has a power button with integrated fingerprint reader in the upper-right corner. Unfortunately it also contains a white LED ring around it that is very bright and does not dim with the keyboard backlight, nor does it turn off when the fingerprint reader is disabled in the BIOS. Since the button is so close to the screen, it remains in my field of view and is very annoying in a dark room.

Update (2021-11-12): The 3.06 BIOS update adds a “Power Button LED Brightness Level” adjustment that can toggle between low, medium, and high. Even at the lowest setting it’s still kind of annoying, though. I wish it could be turned off completely. The images above show the light with the “high” setting which it defaulted to before.

The keyboard has 1.5mm of key travel with a pronounced but quiet tactile. It reminds me of the MacBook Pro 2015 keyboard but with slightly more tactile. I wish the arrow keys were an inverted T, however. The keyboard has 3 levels of backlight (plus off) adjustable with Fn+Space. The surface of the keys is somewhat rough and matte.

The 13.5” non-touch screen has a 3:2 aspect ratio and a 2256x1504 resolution, which is high enough to use 1.5x scaling. It is reportedly a >400 nit screen, and most of the time in my office I’m using it at about 30% brightness.

The screen lid is quite bendy, and has a lot of wobble on its hinge although the hinge itself doesn’t seem to wobble and is quite tight. This means that it doesn’t wobble in response to typing or moving things on my desk, which is what I was concerned about, but does wobble excessively when making screen angle adjustments. The lid can be mostly opened all the way with one hand and will open fully to 180 degrees. Centered on the back of the lid is the Framework logo in black, with “Framework” branding written on the front of the hinge in glossy black against the matte black plastic making it very discreet in most lighting.

The screen bezel is sufficiently thin, but still has space for a 1080p webcam with a physical cut-off switch (showing a red strip when disabled) next to the microphone which also has its own cut-off switch. The bezel is held on magnetically to make it easier to upgrade or change. If you’re wondering like I was, the square to the left is an ambient light sensor (though it is not exposed as a standard ACPI ALS device) and the one on the right is the actual camera. There is no Windows Hello IR camera.

The Windows Precision Touchpad is made by PixArt. Its surface is not quite as smooth as I would like but is not bad, although the click mechanism is somewhat loud and hollow sounding which makes it seem cheap.

Assembly

Since I purchased the DIY version, mine came with the 32GB of Crucial RAM that I ordered, along with an Intel AX210 WiFi card (which I swapped out for an AX201 due to OpenBSD compatibility) in separate packaging.

The Framework Laptop includes a screwdriver in the box with a removable Torx and Phillips bit on one end, and a spudger on the other. All of the screws on the laptop, from the captive ones on the bottom that release the keyboard deck (rather than the bottom casing coming off as on most laptops) to the internal screws on the WiFi card, SSD, and other internal components, can be removed with the same Torx bit.

Installation of the RAM and the Samsung 980 Pro 1TB NVMe SSD that I already had were very simple. Installing the WiFi card took a minute or two due to the custom bracket that is supposed to be installed over the antenna connectors, but is oriented differently when temporarily installed from the factory. All of the component locations on the motherboard have QR codes which direct one to URLs on the Framework website for instructions.

Expansion Cards

I initially installed USB-C and USB-A expansion cards on the left side, and a USB-C and 1TB storage card on the right which will be used for backups.

I like that the expansion cards keep the ports a good distance from each other and that there can be USB-C charging ports on either side. I’ve often run into problems with the two USB-C ports on my MacBook Air being too close to each other and with them both on the left side, I can’t opt to charge on the right side if I happen to be sitting with the wall outlet on that side of me.

Framework has an Expansion Card Developer Program to support 3rd party expansion cards and they’ve also made available the schematics and case designs for their existing cards. I miss the days of funky PCMCIA cards which brought so much expandability to laptops without needing dongles.

In the future I’d like to make a simple 3D-printed case for the Creative BT-W3 Bluetooth adapter and maybe one for the Logitech mouse dongle, allowing them to be plugged in without sticking out.

Firmware

The Framework Laptop has an InsydeH2O BIOS that is accessible upon pressing F2. Secure Boot must be disabled in the BIOS menu to boot OpenBSD, and CSM/Legacy booting is not supported. I opted to disable the fingerprint reader and Hyperthreading.

Battery

I don’t usually publish battery life estimates for laptops because power usage on modern laptops can vary wildly with screen brightness and CPU load, whether it’s constantly Turbo boosting, etc. The Framework Laptop has a 55 Watt-hour battery and it idles around 9 Watts with the screen at 25% brightness and connected to WiFi.

OpenBSD Support Log

2021-08-04: Initial boot of OpenBSD-current showed a strange issue once inteldrm took over from efifb. The screen would go blank and then the backlight would flicker off and on every second or so with the screen still black. Recompiling the kernel with DRMDEBUG enabled showed that it was having trouble training the eDP panel properly, although enabling debugging caused it to print messages to the console during the whole process, introducing enough delay that it could complete the training properly. Eventually I found that by switching between X and the console a few times, the screen would train and work properly, but after an xset dpms force off, or trying to resume from S3, this workaround does not usually work. I’m still trying to debug this, but I can’t reproduce it in Linux with the same DRM code that we have in OpenBSD (based on Linux 5.10.56).

I also started having stability issues with the machine randomly powering off which was extremely frustrating, but I eventually tracked it down to the touchpad as the culprit. Since OpenBSD does not yet have a Tiger Lake GPIO interrupt driver, the touchpad is working in polling mode (via ihidev). At some point this goes haywire (minutes to hours) and touching the touchpad results in the machine instantly powering off. I’m making a guess that the EC is crashing while trying to interface with the touchpad. By disabling the dwiic i2c driver, the touchpad becomes available through the legacy PS/2 interface, allowing it to work through the pms mouse driver. However, after a day of using this legacy configuration, the same power-offs would randomly happen when touching the touchpad. There is a BIOS option to disable this legacy interface, which I did, and am now running without a working touchpad until I can write a GPIO driver.

I’ve experienced a few other issues with the laptop that seem related to the EC, such as keyboard input in the EFI bootloader dropping keys and being very sluggish (this happened only once), USB-C ports refusing to accept power for charging until the system is powered off and back on again (I’ve had this happen a number of times), and it not restarting when instructed to by the kernel/ACPI (a few times). I’m sure all of these issues will work themselves out over time through future firmware/EC updates.

2021-08-08: While comparing debugging output of the Intel DRM driver in Linux and OpenBSD, I noticed that on OpenBSD, it was failing to parse the VBT of the graphics device, which contains crucial information about the connected panel and output ports. This explains why the panel was not able to be trained properly and why HDMI output didn’t work. Some more debugging located the cause of the problem, which was that the OpenBSD-specific code in the OpRegion-handling module was not mapping the correct base address, so the kernel was mapping junk and unable to find a valid VBT in that junk. I committed a fix for the bug and now the integrated display initializes normally when inteldrm takes over from efifb at boot, as well as when waking up from a DPMS sleep and upon S3 resume. I also re-tested the HDMI output Expansion Card and HDMI output works as expected.

2021-08-09: I added Tiger Lake LP support to pchgpio, enabling GPIO interrupt support for ihidev, which was needed to make the touchpad work properly in non-polling mode (and apparently not cause the EC to randomly freak out and power down the system).

2021-08-14: After some buyer’s remorse in spending $700 extra on the i7-1185G7 model (and discovering it has Intel AMT), I contacted Framework to ask about exchanging it for an i5-1135G7 model. They were very helpful and accepted the return of my i7 model and processed a new order for an i5 model, which I received within a few days without having to wait in line again for the next batch, which doesn’t ship until October.

2021-08-31: Closing the laptop’s lid does not currently cause an S3 suspend due to a bug in the DSDT of the Framework Laptop which references an invalid EC device in the ECDT. I’ve been told by Framework that this will be fixed in a future BIOS update.

2021-09-21: A fix has been committed for the touchpad not working after S3 resume.

2021-11-12: The 3.06 BIOS update added a “Power Button LED Brightness Level” adjustment to finally be able to lower the brightness of the ring around the power button. It also fixes the lid sensor interrupt that allows OpenBSD to suspend when the lid is closed.

Current OpenBSD Support Summary

Status is relative to OpenBSD-current as of 2021-09-21.

Component Works? Notes
Audio Yes Intel audio with Realtek ALC295 codec and supported by azalia. Microphone can be disabled by toggling the physical switch on the screen bezel.
Battery status Yes 55Whr battery, status available through acpibat.
Bluetooth No Usually provided by the wireless card, but OpenBSD does not support Bluetooth.
Fingerprint sensor Yes Goodix via USB, reportedly supported by libfprint. Can be disabled in the BIOS.
Keyboard backlight Yes Supported natively by the EC. Three levels of adjustment can be toggled with Fn+Space.
Hibernation Yes Can be triggered by ZZZ.
Micro-SD card reader Yes The Framework Micro-SD expansion card attaches via USB and works fine. An inserted card sticks out about 2mm from the edge.
SSD Yes M.2 2280 socket; I used a Samsung 980 Pro NVMe drive supported by nvme.
Suspend / resume Yes Can be triggered by zzz. Closing the lid does not yet work because acpiec is not receiving lid events.
Touchpad Yes Pixart I2C, supported by imt.
USB Yes The 4 USB-C ports work fine, though I’ve had a few occasions where Power Delivery charging did not work until the laptop was powered off and back on again.
Video Yes inteldrm supports accelerated video, DPMS, gamma control, and integrated backlight control. HDMI output through the HDMI Expansion Card works as expected.
Webcam Yes 1080p USB camera, supported by the uvideo driver when the kern.video.record sysctl is enabled. Can be disabled in the BIOS or by the switch on the bezel which will detach the USB device.
Wireless Yes M.2 socket; I used a Intel AX201 802.11ax wireless card supported by iwx. The Intel AX210 card sold by Framework is not yet supported by iwx.

Conclusion

Framework has done well with their future-thinking design and prioritizing repairability and upgradeability. Whether the company, replacement parts, and future motherboard/processor upgrades will be around in five or ten years to make good on their promises remains to be seen, but I feel like we’ll never get there unless consumers support the company in the beginning.

My concern before receiving my laptop was that reviewers and consumers would be expected to look past a lot of faults just because it was repairable and upgradeable, as can been seen with modular phones and other devices. However, I feel that the Framework Laptop is a well-executed product that can stand on its own right now and any future upgradeability is just icing on the cake.

I hope the expansion card idea takes off and 3rd party developers create some really interesting things.


Questions or comments? E-mail me or tweet your reply @jcs.