OpenBSD on the Framework Laptop
OpenBSD on the Framework Laptop (11th Gen Intel)

					
						
						
					
					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.
					
					
					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 below 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.
					Update (2021-12-07): Framework now offers transparent and blank keyboards,
						the latter of which I purchased and installed.
					
					
					
					
					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 or by closing the lid.
							
							
								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.
				