OPAL MPIPL APIs¶
#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 Dump (MPIPL) Device Tree Binding).
OPAL_MPIPL_UPDATE¶
Linux kernel will use this call to register/unregister MPIPL.
#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¶
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.
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¶
Post MPIPL linux kernel will call this API to get metadata tag. And use this tag to retrieve metadata information and generate dump.
#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