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.
OPAL_NPU_INIT_CONTEXT¶
Parameters:
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.
OPAL_NPU_DESTROY_CONTEXT¶
Parameters:
uint64_t phb_id
uint64_t id
Destroys a previously allocated context ID. This may cause further translation requests from the GPU to fail.
OPAL_NPU_MAP_LPAR¶
Parameters:
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.