Unofficial (Simplified) Libreboot Documentation
  • Home
  • Building from source/
  • External SPI flashing/
  • Freedom in Libreboot/
  • Maintainance manual/
  • Operating systems/
  • Payloads/
  • Releases/
  • Targets/
    • ARM Chromebooks/
    • Emulation/
    • Other/
    • X86/
      • AMD pitfalls
      • Boards/
        • Acer G43T-AM3
        • ASUS KCMA-D8 Desktop/Workstation
        • ASUS KFSN4-DRE Server/Workstation
        • ASUS KGPE-D16 Server/Workstation
        • Dell Latitude flashing
        • Dell Latitude thermal throttling
        • Dell OptiPlex 3050 Micro
        • Dell OptiPlex 7010/9010 MT
        • Dell OptiPlex 7010/9010 SFF
        • Dell OptiPlex 7020/9020 SFF/MT, and XE2 MT/SFF
        • Dell OptiPlex 780 MT/USFF
        • Dell Precision T1650
        • Gigabyte GA-G41M-ES2L Desktop
        • HP Compaq Elite 8300 USDT
        • HP Elite 8200 SFF/MT and 6200 Pro Business
        • HP EliteBook 2170p
        • HP EliteBook 2560p
        • HP EliteBook 2570p
        • HP EliteBook 820 G2
        • HP EliteBook 8460p
        • HP EliteBook 8470p
        • HP EliteBook 8560w
        • HP EliteBook Folio 9470m
        • Intel D510MO/D410PT
        • Intel D945GCLF Desktop
        • MacBook 1,1 and 2,1
        • ThinkPad R400
        • ThinkPad T400 external flashing
        • ThinkPad T420 external flashing
        • ThinkPad T440p external flashing
        • ThinkPad T480/T480s
        • ThinkPad T500 external flashing
        • ThinkPad T60 recovery guide
        • ThinkPad W541/W540 external flashing
        • ThinkPad X200 first-time flashing
        • ThinkPad X220/X220T
        • ThinkPad X230/X230T external flashing
        • ThinkPad X60 recovery
        • ThinkPad X60 Tablet recovery
        • ThinkPad X60/X60T/T60 internal flashing
      • Changing the MAC address
      • Disabling /dev/mem protections
      • Disabling Intel Boot Guard on MEv11
      • EC firmware updates
      • Generic internal flashing
      • Insert vendor files
      • Intel pitfalls
      • Ivybridge internal flashing
      • Microcode
      • nvmutil import
      • nvmutil manual
  • UNCATEGORIZED/
Site license: GFDL v1.3 with disclaimer

Dell OptiPlex 7020/9020 SFF/MT, and XE2 MT/SFF

NOTE: Dell XE2 MT/SFF are also known to work, using the 9020 images. Same motherboards as the 9020 and 7020.

Dell OptiPlex 9020 Dell OptiPlex 9020
Dell OptiPlex 9020 Dell OptiPlex 9020
Dell OptiPlex 9020 Dell OptiPlex 9020
Specifications
Manufacturer Dell
Name OptiPlex 9020 SFF/MT
Variants OptiPlex 9020 SFF/MT
Chipset Intel Q87 Express
CPU Intel Haswell
Graphics Intel HD Graphics
Memory DDR3 DIMMs (max 32GB, 4x8GB)
Architecture x86_64
Original boot firmware Dell UEFI firmware
Intel ME/AMD PSP Present. Can be disabled with me_cleaner.
Flash chip 2x SOIC-8, 12MiB (8+4) (96Mbit)
W+: Works without vendor firmware; 
N: Doesn't work; 
W*: Works with vendor firmware; 
U: Untested; 
P+: Partially works; 
P*: Partially works with vendor firmware
?: UNKNOWN AT THIS TIME
Features
Internal flashing with original boot firmware W+
Display (if Intel GPU) W+
Display (discrete GPU, SeaBIOS payload only) W*
Audio W+
RAM Init W+
Payloads supported
GRUB (libgfxinit only) Works
SeaBIOS Works
SeaBIOS with GRUB Works
## Introduction

Official spec sheet

ECC memory support

The 9020 MT/SFF do not have ECC memory support. However:

Dell Precision T1700

The T1700 is a version of the same motherboard, but with ECC support. You can flash the 9020 MT image on this board, and it will boot.

Please note however that the native raminit (libre raminit) provided by Libreboot does not yet support ECC. You may be able to use ECC modules, but you won’t actually have functioning ECC.

ECC support currently requires mrc.bin, which is vendor firmware for raminit. Libreboot removed this some time ago, instead favouring only the libre raminit. Patches are welcome, otherwise you can use an older revision of Libreboot with mrc.bin if you need ECC; it’s unknown whether both the Haswell and Broadwell MRC (the latter works on 9020 MT) both support ECC, so you’ll just have to try either. Otherwise, you might simply compile your own custom coreboot configuration for this setup.

Libreboot’s binary blob reduction policy is very clear: if a blob can be avoided, it must be avoided. Therefore, mrc.bin is avoided since the libre raminit works pretty well these days (ECC notwithstanding).

Patch

Mate Kukri is the author of the original coreboot port who wrote a patch.

This patch, at this revision (patchset 31), is what Libreboot uses for this port.

QUBES: how to get it working

Qubes requires IOMMU to be turned on. Please now read the next section. Qubes WILL work, if you configure Libreboot as directed below, but otherwise it will fail by default. This is because Libreboot disables the IOMMU by default, on this board.

Graphics cards and IOMMU

IOMMU is buggy for some reason (we don’t know why yet), when you plug in a graphics card. The graphics card simply won’t work. On some of them, you can use the console but as soon as you start xorg/wayland, it will just b0rk.

Current Libreboot revisions disable IOMMU by default, on this board. The coreboot code for initialising IOMMU was modified by the Libreboot project, to make it a toggle. IOMMU works fine if you use only Intel graphics.

If you want to use IOMMU with a graphics card, you also can. Use this Linux kernel option at boot:

intel_iommu=enable,igfx_off

With the above option, IOMMU is enabled except for the Intel GPU. However, Libreboot also disables the Intel GPU in coreboot, entirely, when a graphics card is used. With the above option, it’s possible that something like Qubes may work, which requires an IOMMU to be turned on.

If you are using Intel graphics, and not a graphics card, you can ignore the above, and instead fully turn on the IOMMU, without any special kernel options.

The way coreboot works is this: if vt-d is present on the CPU, it enables an IOMMU, and only if vt-d is present. This is still the behaviour in Libreboot, but Libreboot adds an additional check: if iommu is not set in nvram, it defaults to on, but if it’s set to disabled, then IOMMU is not initialised.

Enable IOMMU

IOMMU is disabled by default, universally, on this board. You can turn it on, by modifying the ROM image prior to flashing, or modifying it prior to re-flashing.

On all other Haswell boards, LIbreboot enables IOMMU by default. To enable it on the 9020, do this on your ROM:

nvramtool -C libreboot.rom -w iommu=Enable

If you’re using a graphics card, please make sure to read the above notes about how to use IOMMU; specifically, the part that talks about Linux kernel option intel_iommu=enable,igfx_off

Then flash the ROM image. You can find nvramtool under src/coreboot/default/util/nvramtool. Do this in lbmk if you don’t already havse src/coreboot/default/:

./mk -f coreboot default

Then do this:

make -C src/coreboot/default/util/nvramtool

The binary nvramtool will then live in that directory. More information available in Libreboot build instructions. Information about dumping/flashing the ROM can be found in Libreboot flashing instructions and Libreboot external flashing instructions.

NOTE: If IOMMU is enabled, you can still use a graphics card, but you must pass this on the Linux cmdline parameters: iommu=off - or if you need IOMMU (e.g. for Qubes), use intel_iommu=enable,igfx_off instead.

NOTE2: Libreboot uses a static option table on all boards that have nvram, which is why you must use the -C option on your ROM, to change the static table that is baked into it.

Example of the type of errors we got when testing graphics cards with IOMMU enabled

Make sure to configure your image accordingly.

7020 compatibility

7020/9020 MT each have the same motherboard. Flash the 9020 ROM from Libreboot on your 7020, and it will work.

Ditto 7020/9020 SFF, it’s the same motherboard. However, Libreboot provides separate targets for MT and SFF.

Build ROM image from source

For the MT variant (7020 MT and 9020 MT):

./mk -b coreboot dell9020mt_nri_12mb

For the SFF variant (7020 SFF and 9020 SFF):

./mk -b coreboot dell9020sff_nri_12mb

It is important that you choose the right one. The MT variant is the full MTX tower.

Installation

Insert binary files

If you’re using a release ROM, please ensure that you’ve inserted extra firmware required refer to the guide for that. (failure to adhere to this advice will result in a bricked machine)

Libreboot’s build system automatically downloads and processes these files if you build Libreboot from source, but the same logic that it uses must be re-run if you’re using a release image.

Set MAC address

This platform uses an Intel Flash Descriptor, and defines an Intel GbE NVM region. As such, release/build ROMs will contain the same MAC address. To change the MAC address, please read nvmutil documentation.

Flash a ROM image (software)

If you’re already running Libreboot, and you don’t have flash protection turned on, internal flashing is possible.

Internal flashing can also be done with the original Dell BIOS, if the SERVICE_MODE jumper near the PCIe slots is installed. Before flashing,

rmmod spi-intel-platform

needs to be run to prevent errors. Once Libreboot is installed, the SERVICE_MODE jumper can be removed.

Note: The Dell BIOS can write EFI variables to flash when shutting down, which could corrupt the newly flashed Libreboot ROM and render the system unusable. To prevent this, after flashing internally from the original Dell BIOS, remove power from the computer instead of shutting it down normally. It’s recommended to use a live USB instead of the internal drive to prevent potential filesystem corruption.

Flash a ROM image (hardware)

REMOVE all power sources and connectors from the machine, before doing this. This is to prevent short circuiting and power surges while flashing.

For general information, please refer to 25xx NOR flash instructions - that page refers to use of socketed flash.

There are two SOIC-8 chips. You can split up your 12MB ROM image like so:

dd if=libreboot.rom of=4mb.rom bs=1M skip=8
dd if=libreboot.rom of=8mb.rom bs=1M count=8

The side cover comes off easily, and you can find the flash ICs next to the RAM.

Here’s the SOIC8 ICs being flashed:

SOIC8 flash IC on 9020 SFF SOIC8 flash IC on 9020 SFF

Enjoy!