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 Latitude flashing

All of the Dell Latitude models can be flashed internally, which means that you do not need to disassemble them. You can do it from Linux/BSD, using the instructions on this page.

Disable security before flashing

Please also disable /dev/mem protection, otherwise flashprog and dell-flash-unlock won’t work. You can re-enable the protections after flashing.

Please also disable SecureBoot, if you’re using a UEFI-based Dell Latitude. Note that Libreboot does not currently implement UEFI on x86 platforms, but you can set up Secure libreBoot after flashing.

MAC address

Make sure to set your own MAC address in the ROM image before flashing. Please read the nvmutil manual which says how to do this.

Thermal safety

Thermal safety: this machine shuts down very quickly, when the machine exceeds 80c CPU temperature, which is far more conservative than on most laptops (non-Dell ones), so you should make sure that your thermals are excellent. More info available here. This is a known bug, but otherwise the machine will be mostly stable.

Machine-specific notes

Latitude E6400

Vendor files not required for Dell Latitude E6400 if you have the Intel GPU.

If you have the Nvidia model, please use the e6400nvidia_4mb target, and make sure to run the inject script prior to flashing.

E6400 nvidia issues

See issue 14.

If using Linux on Nvidia GPU variants of E6400, please boot using nomodeset. The nv drivers on BSD systems generally work, but can have severe performance issues; use of a tiling window manager is recommended, on BSD systems, because moving windows around can literally lag a lot otherwise, on most window managers.

dGPU variants

On everything except E6400, Libreboot only supports the variant with an Intel GPU. Therefore, you must only purchase a Dell Latitude that has the Intel graphics; even on E6400, this is good advice, due to issues with the Nvidia GPU on E6400, documented later in this guide.

Internal flashing

You can simply boot Linux/BSD, on the Dell Latitude you wish to flash, and run flashprog from there, for Libreboot installation. Certain other steps are also required, documented in the steps below:

You can flash Libreboot directly from the vendor (Dell) BIOS, without taking the machine apart. It can be done entirely from Linux/BSD.

NOTE (15 October 2023): The util is now called dell-flash-unlock, but it was previously called e6400-flash-unlock. Links have been updated.

Check util/dell-flash-unlock in the lbmk.git repository, or in release archives for Libreboot releases from 20230423 onwards.

Go in there:

cd util/dell-flash-unlock
make

With this program, you can unlock the flash in such a way where everything is writeable. Information about how to use it is in the README.md file which is included in that program’s directory, or you can read it online

Please make sure that you do fully read the README, because it contains useful information.

Literally just run that program, and do what it says. You run it once, and shut down, and when you do, the system brings itself back up automatically; on some systems, you have to boot the machine back up manually, after power down. Then you run it and flash it unlocked. Then you run it again. The source code is intuitive enough that you can easily get the gist of it; it’s writing some EC commands and changing some chipset config bits. The EC on this machine is hooked up to the GPIO33 signal, sometimes called HDA_DOCK_EN, which sets the flash descriptor override thus disabling any flash protection by the IFD. It also bypasses the SMM BIOS lock protection by disabling SMIs, and Dell’s BIOS doesn’t set any other type of protection either such as writing to Protected Range registers.

MAKE SURE to back up the original firmware image first:

flashprog -p internal -r factory.rom

When you flash it, you can use this command:

flashprog -p internal -w libreboot.rom

Where libreboot.rom is your Dell Latitude ROM. Make sure it’s the right one. If flashprog complains about multiple flash chips detected, just pick one of them (doesn’t matter which one). On most Dell machines, the most correct would probably be this option in flashprog: -c MX25L3205D/MX25L3208D.

So:

flashprog -p internal -w libreboot.rom -c MX25L3205D/MX25L3208D

When you see flashprog say VERIFIED at the end, that means the flash was successful. If you don’t see that, or you’re unsure, please contact the Libreboot project via IRC.

External flashing

General guidance

Machine-specific disassembly instructions not provided, but you can find the hardware maintenance manual for your Latitude module online. Just search for it. The flash chips(s) is/are usually under the keyboard/palmrest. Near to the PCH/southbridge.

Note that you often have to provide a high current for VCC, because the flash chip will share a common voltage rail with other power-hungry ICs on the board, or the flash ICs will share a common MISO/MOSI line without resistance, with chip selects controlled by PCH, and/or the PCH itself might be live while flashing - so you need to set the drive strength high.

Take stock of the above advice, which is also mentioned on the external SPI flashing guide.

Please read the external SPI flash guide

External flashing is usually not required, on these machines.

Chip size guidance

SOme Dell Latitudes use a single flash chip, so you can just use the ROM images as-is.

If there are two flash chips, you must split the ROM images. Check the silk screen on the board, and the first chip might be labelled something like SPI1, second one SPI2. Figure out which one is first.

Look at the part number on the chip and find the flash size for it. For example: a 10MB flash might be 2MB for SPI1 and 8MB for SPI2, so you would do:

dd if=libreboot.rom of=spi1.rom bs=1M count=2
dd if=libreboot.rom of=spi2.rom bs=1M skip=2

Adapt accordingly, to the exact flash configuration on your machine. 16MB is likely one chip. 12MB is usually SPI1 8MB and SPI2 4MB so you would do:

dd if=libreboot.rom of=spi1.rom bs=1M count=8
dd if=libreboot.rom of=spi2.rom bs=1M skip=8

If in doubt, just ask on Libreboot IRC.