.. _OPAL_NPU2:

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:

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:

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:

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.
