| .. _opal-api-mpipl: |
| |
| OPAL MPIPL APIs |
| =============== |
| |
| .. code-block:: c |
| |
| #define OPAL_MPIPL_UPDATE 173 |
| #define OPAL_MPIPL_REGISTER_TAG 174 |
| #define OPAL_MPIPL_QUERY_TAG 175 |
| |
| These calls are used for MPIPL (Memory Preserving Initial Program Load). |
| |
| It is an OPTIONAL part of the OPAL spec. |
| |
| If a platform supports MPIPL, then we will have "/ibm,opal/dump" node in |
| device tree (see :ref:`device-tree/ibm,opal/dump`). |
| |
| .. _OPAL_MPIPL_UPDATE: |
| |
| OPAL_MPIPL_UPDATE |
| ================== |
| Linux kernel will use this call to register/unregister MPIPL. |
| |
| .. code-block:: c |
| |
| #define OPAL_MPIPL_UPDATE 173 |
| |
| int64_t opal_mpipl_update(enum mpipl_ops ops, u64 src, u64 dest, u64 size) |
| |
| /* MPIPL update operations */ |
| enum mpipl_ops { |
| OPAL_MPIPL_ADD_RANGE = 0, |
| OPAL_MPIPL_REMOVE_RANGE = 1, |
| OPAL_MPIPL_REMOVE_ALL = 2, |
| OPAL_MPIPL_FREE_PRESERVED_MEMORY= 3, |
| }; |
| |
| ops : |
| ----- |
| OPAL_MPIPL_ADD_RANGE |
| Add new entry to MPIPL table. Kernel will send src, dest and size. |
| During MPIPL content from source address is moved to destination address. |
| src = Source start address |
| dest = Destination start address |
| size = size |
| |
| OPAL_MPIPL_REMOVE_RANGE |
| Remove kernel requested entry from MPIPL table. |
| src = Source start address |
| dest = Destination start address |
| size = ignore |
| |
| OPAL_MPIPL_REMOVE_ALL |
| Remove all kernel passed entry from MPIPL table. |
| src = ignore |
| dest = ignore |
| size = ignore |
| |
| OPAL_MPIPL_FREE_PRESERVED_MEMORY |
| Post MPIPL, kernel will indicate OPAL that it has processed dump and |
| it can clear/release metadata area. |
| src = ignore |
| dest = ignore |
| size = ignore |
| |
| Return Values |
| ------------- |
| |
| ``OPAL_SUCCESS`` |
| Operation success |
| |
| ``OPAL_PARAMETER`` |
| Invalid parameter |
| |
| ``OPAL_RESOURCE`` |
| Ran out of space in MDST/MDDT table to add new entry |
| |
| ``OPAL_HARDWARE`` |
| Platform does not support fadump |
| |
| |
| .. _OPAL_MPIPL_REGISTER_TAG: |
| |
| OPAL_MPIPL_REGISTER_TAG |
| ======================= |
| Kernel will use this API to register tags during MPIPL registration. |
| It expects OPAL to preserve these tags across MPIPL. Post MPIPL Linux |
| kernel will use `opal_mpipl_query_tag` call to retrieve these tags. |
| |
| .. code-block:: c |
| |
| opal_mpipl_register_tag(enum opal_mpipl_tags tag, uint64_t tag_val) |
| |
| tag: |
| OPAL_MPIPL_TAG_KERNEL |
| During first boot, kernel will setup its metadata area and asks |
| OPAL to preserve metadata area pointer across MPIPL. Post MPIPL |
| kernel requests OPAL to provide metadata pointer and it will use |
| that pointer to retrieve metadata and create dump. |
| |
| OPAL_MPIPL_TAG_BOOT_MEM |
| During MPIPL registration kernel will specify how much memory |
| firmware can use for Post MPIPL load. Post MPIPL petitboot kernel |
| will query for this tag to get boot memory size. |
| |
| Return Values |
| ------------- |
| ``OPAL_SUCCESS`` |
| Operation success |
| |
| ``OPAL_PARAMETER`` |
| Invalid parameter |
| |
| .. _OPAL_MPIPL_QUERY_TAG: |
| |
| OPAL_MPIPL_QUERY_TAG |
| ==================== |
| Post MPIPL linux kernel will call this API to get metadata tag. And use this |
| tag to retrieve metadata information and generate dump. |
| |
| .. code-block:: c |
| |
| #define OPAL_MPIPL_QUERY_TAG 175 |
| |
| uint64_t opal_mpipl_query_tag(enum opal_mpipl_tags tag, uint64_t *tag_val) |
| |
| enum opal_mpipl_tags { |
| OPAL_MPIPL_TAG_CPU = 0, |
| OPAL_MPIPL_TAG_OPAL = 1, |
| OPAL_MPIPL_TAG_KERNEL = 2, |
| OPAL_MPIPL_TAG_BOOT_MEM = 3, |
| }; |
| |
| tag : |
| OPAL_MPIPL_TAG_CPU |
| Pointer to CPU register data content metadata area |
| OPAL_MPIPL_TAG_OPAL |
| Pointer to OPAL metadata area |
| OPAL_MPIPL_TAG_KERNEL |
| During first boot, kernel will setup its metadata area and asks |
| OPAL to preserve metadata area pointer across MPIPL. Post MPIPL |
| kernel calls this API to get metadata pointer and it will use |
| that pointer to retrieve metadata and create dump. |
| OPAL_MPIPL_TAG_BOOT_MEM |
| During MPIPL registration kernel will specify how much memory |
| firmware can use for Post MPIPL load. Post MPIPL petitboot kernel |
| will query for this tag to get boot memory size. |
| |
| Return Values |
| ------------- |
| |
| ``OPAL_SUCCESS`` |
| Operation success |
| |
| ``OPAL_PARAMETER`` |
| Invalid parameter |