xref: /aosp_15_r20/external/flashrom/doc/user_docs/management_engine.rst (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker======================
2*0d6140beSAndroid Build Coastguard WorkerME (Management Engine)
3*0d6140beSAndroid Build Coastguard Worker======================
4*0d6140beSAndroid Build Coastguard Worker
5*0d6140beSAndroid Build Coastguard WorkerME stands for Management Engine (or Manageability Engine) and refers to an Embedded Controller found in Intel chipsets. It uses different versions
6*0d6140beSAndroid Build Coastguard Workerof an `ARC <http://en.wikipedia.org/wiki/ARC_International>`_ 32-bit microcontroller that runs its own operating system independently from the user's.
7*0d6140beSAndroid Build Coastguard WorkerThe ME has access to all kinds of buses which allows for out-of-band processing which is used for features
8*0d6140beSAndroid Build Coastguard Workerlike `Active Management Technology <http://en.wikipedia.org/wiki/Intel_Active_Management_Technology>`_, but it makes it also a very interesting target for black hats.
9*0d6140beSAndroid Build Coastguard WorkerThe firmware it runs is secured by certificates stored in ROM, but it is a complex beast and it is very unlikely that there is
10*0d6140beSAndroid Build Coastguard Workerno `way around its security measures <http://invisiblethingslab.com/resources/misc09/Quest%20To%20The%20Core%20(public).pdf>`_ (intentional backdoors included).
11*0d6140beSAndroid Build Coastguard WorkerFor further details about the ME please see these excellent `slides by Igor Skochinsky <http://2012.ruxconbreakpoint.com/assets/Uploads/bpx/Breakpoint%202012%20Skochinsky.pdf>`_
12*0d6140beSAndroid Build Coastguard Workerand the `Security Evaluation of AMT by Vassilios Ververis <http://web.it.kth.se/~maguire/DEGREE-PROJECT-REPORTS/100402-Vassilios_Ververis-with-cover.pdf>`_.
13*0d6140beSAndroid Build Coastguard Worker
14*0d6140beSAndroid Build Coastguard WorkerEffects on flashrom
15*0d6140beSAndroid Build Coastguard Worker===================
16*0d6140beSAndroid Build Coastguard Worker
17*0d6140beSAndroid Build Coastguard WorkerThe firmware of the ME usually shares the flash memory with the firmware of the host PC (BIOS/UEFI/coreboot).
18*0d6140beSAndroid Build Coastguard WorkerThe address space is separated into regions (similar to partitions on a harddisk). The first one (*Descriptor region*)
19*0d6140beSAndroid Build Coastguard Workercontains configuration data which contains something similar to a partition table and access rights for the different devices that can access the flash
20*0d6140beSAndroid Build Coastguard Worker(host CPU, ME, GbE controller). These restrictions are enforced by the chipset's SPI controller which is the main interface for flashrom
21*0d6140beSAndroid Build Coastguard Workerto access the flash chip(s) attached to the chipset. Intel recommends to set the descriptor region read-only and to forbid reads and writes to the ME region by the host CPU.
22*0d6140beSAndroid Build Coastguard WorkerWrites by the host could interfere with the code running on the ME. This means that flashrom which runs on the host PC can not access
23*0d6140beSAndroid Build Coastguard Workerthe ME firmware region of the flash at all in this configuration. flashrom detects that, warns the user and disables write access for safety reasons in that case.
24*0d6140beSAndroid Build Coastguard Worker
25*0d6140beSAndroid Build Coastguard WorkerUnlocking the ME region
26*0d6140beSAndroid Build Coastguard Worker=======================
27*0d6140beSAndroid Build Coastguard Worker
28*0d6140beSAndroid Build Coastguard WorkerThere are a few ways to enable full access to the ME region, but they are not user friendly at all in general. Also, the Descriptor region is not affected by these actions,
29*0d6140beSAndroid Build Coastguard Workerso it is still not possible to access the complete flash memory even when the ME region is unlocked. For the different possibilities please see
30*0d6140beSAndroid Build Coastguard Workerthe document :doc:`misc_intel`.
31*0d6140beSAndroid Build Coastguard Worker
32*0d6140beSAndroid Build Coastguard WorkerSuggested workarounds
33*0d6140beSAndroid Build Coastguard Worker=====================
34*0d6140beSAndroid Build Coastguard Worker
35*0d6140beSAndroid Build Coastguard Worker   * If you just want to update the proprietary firmware of the board use the vendor tool(s).
36*0d6140beSAndroid Build Coastguard Worker   * If you need full access to the flash chip get an external programmer (see :doc:`/supported_hw/supported_prog/index`) and try in-circuit programming.
37*0d6140beSAndroid Build Coastguard Worker   * If you only need to update the BIOS region, then you may use the options ``--ifd -i bios --noverify-all`` to write (and verify) only the BIOS region as described in the Intel flash descriptor.
38*0d6140beSAndroid Build Coastguard Worker
39*0d6140beSAndroid Build Coastguard Worker.. todo:: Migrate page for in-circuit programming (ISP)
40*0d6140beSAndroid Build Coastguard Worker
41*0d6140beSAndroid Build Coastguard WorkerSee also
42*0d6140beSAndroid Build Coastguard Worker========
43*0d6140beSAndroid Build Coastguard Worker
44*0d6140beSAndroid Build Coastguard Worker   * The respective `coreboot page on the management engine <http://www.coreboot.org/Intel_Management_Engine>`_
45*0d6140beSAndroid Build Coastguard Worker   * :doc:`misc_intel`
46