.. _mpipl: MPIPL (aka FADUMP) Overview =========================== Memory Preserving Initial Program Load (MPIPL) is a Power feature where the contents of memory are preserved while the system reboots after a failure. This is accomplished by the firmware/OS publishing ranges of memory to be preserved across boots. Registration ------------ In the OPAL context, OPAL and host Linux communicate the memory ranges to be preserved via source descriptor tables in the HDAT (MDST and MDDT table inside SPIRAH). Host Linux can register/unregister using OPAL_MPIPL_UPDATE API (see :ref:`opal-api-mpipl`). Initiating dump --------------- Whenever Linux crashes, it makes reboot2 OPAL call with type as MPIPL. (see :ref:`opal-api-cec-reboot`). Depending on sevice processor type OPAL makes appropriate call to initiate MPIPL. On FSP system we call `attn` instruction (see ``__trigger_attn()``) and on BMC system we call SBE `S0 interrupt` (see ``p9_sbe_terminate()``). Dump collection --------------- Hostboot then re-IPLs the machine taking care to copy over contents of the source memory to a alternate memory locations as specified in descriptor table. Hostboot publishes this information in the result descriptor tables (MDRT table inside SPIRAH structure). The success/failure of the copy is indicated by a results table. SBE/Hostboot also does the requisite procedures to gather hardware register states for all active threads at the time of the crash. MPIPL boot ---------- On MPIPL boot, OPAL adds device tree entry (``/ibm,opal/dump/mpipl-boot``) to indicate its MPIPL boot. Kernel will use OPAL_MPIPL_QUERY_TAG API (:ref:`opal-api-mpipl`) to retrieve metadata tag. Kernel then uses its existing logic (kdump/fadump) to write out a core dump of OPAL and Linux kernel in a format that GDB and crash can understand. Device tree ----------- We create new device tree node (``/ibm,opal/dump``) to pass dump details to Linux kernel from OPAL (see :ref:`device-tree/ibm,opal/dump`).