OPAL NPU2 calls¶
There are three OPAL calls for interacting with NPU2 devices:
#define OPAL_NPU_INIT_CONTEXT 146 #define OPAL_NPU_DESTROY_CONTEXT 147 #define OPAL_NPU_MAP_LPAR 148
These are used to setup and configure address translation services (ATS) for a given NVLink2 device. Note that in some documentation this is also referred to as extended translation services (XTS).
Each NVLink2 supports multiple processes running on a GPU which issues requests for address translation. The NPU2 is responsible for completing the request by forwarding it to the Nest MMU (NMMU) along with the appropriate translation context (MSR/LPCR) bits. These bits are keyed off a 20-bit process ID (PASID/PID) which is identical to the PID used on the processor.
The OPAL calls documented here are used to setup/destroy the appropriate context for a given process on a given NVLink2 device.
uint64_t phb_id int pasid uint64_t msr uint64_t lpid
Allocates a new context ID and sets up the given PASID/PID to be associated with the supplied MSR on for the given LPID. MSR should only contain bits set requried for NPU2 address lookups - ie. MSR DR/HV/PR/SF.
Returns the context ID on success or
OPAL_RESOURCE if no more
contexts are available or
OPAL_UNSUPPORTED in the case of
unsupported MSR bits.
uint64_t phb_id uint64_t id
Destroys a previously allocated context ID. This may cause further translation requests from the GPU to fail.
uint64_t phb_id uint64_t bdf uint64_t lparid uint64_t lpcr
Associates the given GPU BDF with a particular LPAR and LPCR bits. Hash mode ATS is currently unsupported so lpcr should be set to 0.