.. SPDX-License-Identifier: GPL-2.0-only

===============================
 Qualcomm Cloud AI 100 (AIC100)
===============================

Overview
========

The Qualcomm Cloud AI 100/AIC100 family of products (including SA9000P - part of
Snapdragon Ride) are PCIe adapter cards which contain a dedicated SoC ASIC for
the purpose of efficiently running Artificial Intelligence (AI) Deep Learning
inference workloads. They are AI accelerators.

The PCIe interface of AIC100 is capable of PCIe Gen4 speeds over eight lanes
(x8). An individual SoC on a card can have up to 16 NSPs for running workloads.
Each SoC has an A53 management CPU. On card, there can be up to 32 GB of DDR.

Multiple AIC100 cards can be hosted in a single system to scale overall
performance. AIC100 cards are multi-user capable and able to execute workloads
from multiple users in a concurrent manner.

Hardware Description
====================

An AIC100 card consists of an AIC100 SoC, on-card DDR, and a set of misc
peripherals (PMICs, etc).

An AIC100 card can either be a PCIe HHHL form factor (a traditional PCIe card),
or a Dual M.2 card. Both use PCIe to connect to the host system.

As a PCIe endpoint/adapter, AIC100 uses the standard VendorID(VID)/
DeviceID(DID) combination to uniquely identify itself to the host. AIC100
uses the standard Qualcomm VID (0x17cb). All AIC100 SKUs use the same
AIC100 DID (0xa100).

AIC100 does not implement FLR (function level reset).

AIC100 implements MSI but does not implement MSI-X. AIC100 prefers 17 MSIs to
operate (1 for MHI, 16 for the DMA Bridge). Falling back to 1 MSI is possible in
scenarios where reserving 32 MSIs isn't feasible.

As a PCIe device, AIC100 utilizes BARs to provide host interfaces to the device
hardware. AIC100 provides 3, 64-bit BARs.

* The first BAR is 4K in size, and exposes the MHI interface to the host.

* The second BAR is 2M in size, and exposes the DMA Bridge interface to the
  host.

* The third BAR is variable in size based on an individual AIC100's
  configuration, but defaults to 64K. This BAR currently has no purpose.

From the host perspective, AIC100 has several key hardware components -

* MHI (Modem Host Interface)
* QSM (QAIC Service Manager)
* NSPs (Neural Signal Processor)
* DMA Bridge
* DDR

MHI
---

AIC100 has one MHI interface over PCIe. MHI itself is documented at
Documentation/mhi/index.rst MHI is the mechanism the host uses to communicate
with the QSM. Except for workload data via the DMA Bridge, all interaction with
the device occurs via MHI.

QSM
---

QAIC Service Manager. This is an ARM A53 CPU that runs the primary
firmware of the card and performs on-card management tasks. It also
communicates with the host via MHI. Each AIC100 has one of
these.

NSP
---

Neural Signal Processor. Each AIC100 has up to 16 of these. These are
the processors that run the workloads on AIC100. Each NSP is a Qualcomm Hexagon
(Q6) DSP with HVX and HMX. Each NSP can only run one workload at a time, but
multiple NSPs may be assigned to a single workload. Since each NSP can only run
one workload, AIC100 is limited to 16 concurrent workloads. Workload
"scheduling" is under the purview of the host. AIC100 does not automatically
timeslice.

DMA Bridge
----------

The DMA Bridge is custom DMA engine that manages the flow of data
in and out of workloads. AIC100 has one of these. The DMA Bridge has 16
channels, each consisting of a set of request/response FIFOs. Each active
workload is assigned a single DMA Bridge channel. The DMA Bridge exposes
hardware registers to manage the FIFOs (head/tail pointers), but requires host
memory to store the FIFOs.

DDR
---

AIC100 has on-card DDR. In total, an AIC100 can have up to 32 GB of DDR.
This DDR is used to store workloads, data for the workloads, and is used by the
QSM for managing the device. NSPs are granted access to sections of the DDR by
the QSM. The host does not have direct access to the DDR, and must make
requests to the QSM to transfer data to the DDR.

High-level Use Flow
===================

AIC100 is a multi-user, programmable accelerator typically used for running
neural networks in inferencing mode to efficiently perform AI operations.
AIC100 is not intended for training neural networks. AIC100 can be utilized
for generic compute workloads.

Assuming a user wants to utilize AIC100, they would follow these steps:

1. Compile the workload into an ELF targeting the NSP(s)
2. Make requests to the QSM to load the workload and related artifacts into the
   device DDR
3. Make a request to the QSM to activate the workload onto a set of idle NSPs
4. Make requests to the DMA Bridge to send input data to the workload to be
   processed, and other requests to receive processed output data from the
   workload.
5. Once the workload is no longer required, make a request to the QSM to
   deactivate the workload, thus putting the NSPs back into an idle state.
6. Once the workload and related artifacts are no longer needed for future
   sessions, make requests to the QSM to unload the data from DDR. This frees
   the DDR to be used by other users.


Boot Flow
=========

AIC100 uses a flashless boot flow, derived from Qualcomm MSMs.

When AIC100 is first powered on, it begins executing PBL (Primary Bootloader)
from ROM. PBL enumerates the PCIe link, and initializes the BHI (Boot Host
Interface) component of MHI.

Using BHI, the host points PBL to the location of the SBL (Secondary Bootloader)
image. The PBL pulls the image from the host, validates it, and begins
execution of SBL.

SBL initializes MHI, and uses MHI to notify the host that the device has entered
the SBL stage. SBL performs a number of operations:

* SBL initializes the majority of hardware (anything PBL left uninitialized),
  including DDR.
* SBL offloads the bootlog to the host.
* SBL synchronizes timestamps with the host for future logging.
* SBL uses the Sahara protocol to obtain the runtime firmware images from the
  host.

Once SBL has obtained and validated the runtime firmware, it brings the NSPs out
of reset, and jumps into the QSM.

The QSM uses MHI to notify the host that the device has entered the QSM stage
(AMSS in MHI terms). At this point, the AIC100 device is fully functional, and
ready to process workloads.

Userspace components
====================

Compiler
--------

An open compiler for AIC100 based on upstream LLVM can be found at:
https://github.com/quic/software-kit-for-qualcomm-cloud-ai-100-cc

Usermode Driver (UMD)
---------------------

An open UMD that interfaces with the qaic kernel driver can be found at:
https://github.com/quic/software-kit-for-qualcomm-cloud-ai-100

Sahara loader
-------------

An open implementation of the Sahara protocol called kickstart can be found at:
https://github.com/andersson/qdl

MHI Channels
============

AIC100 defines a number of MHI channels for different purposes. This is a list
of the defined channels, and their uses.

+----------------+---------+----------+----------------------------------------+
| Channel name   | IDs     | EEs      | Purpose                                |
+================+=========+==========+========================================+
| QAIC_LOOPBACK  | 0 & 1   | AMSS     | Any data sent to the device on this    |
|                |         |          | channel is sent back to the host.      |
+----------------+---------+----------+----------------------------------------+
| QAIC_SAHARA    | 2 & 3   | SBL      | Used by SBL to obtain the runtime      |
|                |         |          | firmware from the host.                |
+----------------+---------+----------+----------------------------------------+
| QAIC_DIAG      | 4 & 5   | AMSS     | Used to communicate with QSM via the   |
|                |         |          | DIAG protocol.                         |
+----------------+---------+----------+----------------------------------------+
| QAIC_SSR       | 6 & 7   | AMSS     | Used to notify the host of subsystem   |
|                |         |          | restart events, and to offload SSR     |
|                |         |          | crashdumps.                            |
+----------------+---------+----------+----------------------------------------+
| QAIC_QDSS      | 8 & 9   | AMSS     | Used for the Qualcomm Debug Subsystem. |
+----------------+---------+----------+----------------------------------------+
| QAIC_CONTROL   | 10 & 11 | AMSS     | Used for the Neural Network Control    |
|                |         |          | (NNC) protocol. This is the primary    |
|                |         |          | channel between host and QSM for       |
|                |         |          | managing workloads.                    |
+----------------+---------+----------+----------------------------------------+
| QAIC_LOGGING   | 12 & 13 | SBL      | Used by the SBL to send the bootlog to |
|                |         |          | the host.                              |
+----------------+---------+----------+----------------------------------------+
| QAIC_STATUS    | 14 & 15 | AMSS     | Used to notify the host of Reliability,|
|                |         |          | Accessibility, Serviceability (RAS)    |
|                |         |          | events.                                |
+----------------+---------+----------+----------------------------------------+
| QAIC_TELEMETRY | 16 & 17 | AMSS     | Used to get/set power/thermal/etc      |
|                |         |          | attributes.                            |
+----------------+---------+----------+----------------------------------------+
| QAIC_DEBUG     | 18 & 19 | AMSS     | Not used.                              |
+----------------+---------+----------+----------------------------------------+
| QAIC_TIMESYNC  | 20 & 21 | SBL      | Used to synchronize timestamps in the  |
|                |         |          | device side logs with the host time    |
|                |         |          | source.                                |
+----------------+---------+----------+----------------------------------------+
| QAIC_TIMESYNC  | 22 & 23 | AMSS     | Used to periodically synchronize       |
| _PERIODIC      |         |          | timestamps in the device side logs with|
|                |         |          | the host time source.                  |
+----------------+---------+----------+----------------------------------------+

DMA Bridge
==========

Overview
--------

The DMA Bridge is one of the main interfaces to the host from the device
(the other being MHI). As part of activating a workload to run on NSPs, the QSM
assigns that network a DMA Bridge channel. A workload's DMA Bridge channel
(DBC for short) is solely for the use of that workload and is not shared with
other workloads.

Each DBC is a pair of FIFOs that manage data in and out of the workload. One
FIFO is the request FIFO. The other FIFO is the response FIFO.

Each DBC contains 4 registers in hardware:

* Request FIFO head pointer (offset 0x0). Read only by the host. Indicates the
  latest item in the FIFO the device has consumed.
* Request FIFO tail pointer (offset 0x4). Read/write by the host. Host
  increments this register to add new items to the FIFO.
* Response FIFO head pointer (offset 0x8). Read/write by the host. Indicates
  the latest item in the FIFO the host has consumed.
* Response FIFO tail pointer (offset 0xc). Read only by the host. Device
  increments this register to add new items to the FIFO.

The values in each register are indexes in the FIFO. To get the location of the
FIFO element pointed to by the register: FIFO base address + register * element
size.

DBC registers are exposed to the host via the second BAR. Each DBC consumes
4KB of space in the BAR.

The actual FIFOs are backed by host memory. When sending a request to the QSM
to activate a network, the host must donate memory to be used for the FIFOs.
Due to internal mapping limitations of the device, a single contiguous chunk of
memory must be provided per DBC, which hosts both FIFOs. The request FIFO will
consume the beginning of the memory chunk, and the response FIFO will consume
the end of the memory chunk.

Request FIFO
------------

A request FIFO element has the following structure:

.. code-block:: c

  struct request_elem {
	u16 req_id;
	u8  seq_id;
	u8  pcie_dma_cmd;
	u32 reserved;
	u64 pcie_dma_source_addr;
	u64 pcie_dma_dest_addr;
	u32 pcie_dma_len;
	u32 reserved;
	u64 doorbell_addr;
	u8  doorbell_attr;
	u8  reserved;
	u16 reserved;
	u32 doorbell_data;
	u32 sem_cmd0;
	u32 sem_cmd1;
	u32 sem_cmd2;
	u32 sem_cmd3;
  };

Request field descriptions:

req_id
	request ID. A request FIFO element and a response FIFO element with
	the same request ID refer to the same command.

seq_id
	sequence ID within a request. Ignored by the DMA Bridge.

pcie_dma_cmd
	describes the DMA element of this request.

	* Bit(7) is the force msi flag, which overrides the DMA Bridge MSI logic
	  and generates a MSI when this request is complete, and QSM
	  configures the DMA Bridge to look at this bit.
	* Bits(6:5) are reserved.
	* Bit(4) is the completion code flag, and indicates that the DMA Bridge
	  shall generate a response FIFO element when this request is
	  complete.
	* Bit(3) indicates if this request is a linked list transfer(0) or a bulk
	  transfer(1).
	* Bit(2) is reserved.
	* Bits(1:0) indicate the type of transfer. No transfer(0), to device(1),
	  from device(2). Value 3 is illegal.

pcie_dma_source_addr
	source address for a bulk transfer, or the address of the linked list.

pcie_dma_dest_addr
	destination address for a bulk transfer.

pcie_dma_len
	length of the bulk transfer. Note that the size of this field
	limits transfers to 4G in size.

doorbell_addr
	address of the doorbell to ring when this request is complete.

doorbell_attr
	doorbell attributes.

	* Bit(7) indicates if a write to a doorbell is to occur.
	* Bits(6:2) are reserved.
	* Bits(1:0) contain the encoding of the doorbell length. 0 is 32-bit,
	  1 is 16-bit, 2 is 8-bit, 3 is reserved. The doorbell address
	  must be naturally aligned to the specified length.

doorbell_data
	data to write to the doorbell. Only the bits corresponding to
	the doorbell length are valid.

sem_cmdN
	semaphore command.

	* Bit(31) indicates this semaphore command is enabled.
	* Bit(30) is the to-device DMA fence. Block this request until all
	  to-device DMA transfers are complete.
	* Bit(29) is the from-device DMA fence. Block this request until all
	  from-device DMA transfers are complete.
	* Bits(28:27) are reserved.
	* Bits(26:24) are the semaphore command. 0 is NOP. 1 is init with the
	  specified value. 2 is increment. 3 is decrement. 4 is wait
	  until the semaphore is equal to the specified value. 5 is wait
	  until the semaphore is greater or equal to the specified value.
	  6 is "P", wait until semaphore is greater than 0, then
	  decrement by 1. 7 is reserved.
	* Bit(23) is reserved.
	* Bit(22) is the semaphore sync. 0 is post sync, which means that the
	  semaphore operation is done after the DMA transfer. 1 is
	  presync, which gates the DMA transfer. Only one presync is
	  allowed per request.
	* Bit(21) is reserved.
	* Bits(20:16) is the index of the semaphore to operate on.
	* Bits(15:12) are reserved.
	* Bits(11:0) are the semaphore value to use in operations.

Overall, a request is processed in 4 steps:

1. If specified, the presync semaphore condition must be true
2. If enabled, the DMA transfer occurs
3. If specified, the postsync semaphore conditions must be true
4. If enabled, the doorbell is written

By using the semaphores in conjunction with the workload running on the NSPs,
the data pipeline can be synchronized such that the host can queue multiple
requests of data for the workload to process, but the DMA Bridge will only copy
the data into the memory of the workload when the workload is ready to process
the next input.

Response FIFO
-------------

Once a request is fully processed, a response FIFO element is generated if
specified in pcie_dma_cmd. The structure of a response FIFO element:

.. code-block:: c

  struct response_elem {
	u16 req_id;
	u16 completion_code;
  };

req_id
	matches the req_id of the request that generated this element.

completion_code
	status of this request. 0 is success. Non-zero is an error.

The DMA Bridge will generate a MSI to the host as a reaction to activity in the
response FIFO of a DBC. The DMA Bridge hardware has an IRQ storm mitigation
algorithm, where it will only generate a MSI when the response FIFO transitions
from empty to non-empty (unless force MSI is enabled and triggered). In
response to this MSI, the host is expected to drain the response FIFO, and must
take care to handle any race conditions between draining the FIFO, and the
device inserting elements into the FIFO.

Neural Network Control (NNC) Protocol
=====================================

The NNC protocol is how the host makes requests to the QSM to manage workloads.
It uses the QAIC_CONTROL MHI channel.

Each NNC request is packaged into a message. Each message is a series of
transactions. A passthrough type transaction can contain elements known as
commands.

QSM requires NNC messages be little endian encoded and the fields be naturally
aligned. Since there are 64-bit elements in some NNC messages, 64-bit alignment
must be maintained.

A message contains a header and then a series of transactions. A message may be
at most 4K in size from QSM to the host. From the host to the QSM, a message
can be at most 64K (maximum size of a single MHI packet), but there is a
continuation feature where message N+1 can be marked as a continuation of
message N. This is used for exceedingly large DMA xfer transactions.

Transaction descriptions
------------------------

passthrough
	Allows userspace to send an opaque payload directly to the QSM.
	This is used for NNC commands. Userspace is responsible for managing
	the QSM message requirements in the payload.

dma_xfer
	DMA transfer. Describes an object that the QSM should DMA into the
	device via address and size tuples.

activate
	Activate a workload onto NSPs. The host must provide memory to be
	used by the DBC.

deactivate
	Deactivate an active workload and return the NSPs to idle.

status
	Query the QSM about it's NNC implementation. Returns the NNC version,
	and if CRC is used.

terminate
	Release a user's resources.

dma_xfer_cont
	Continuation of a previous DMA transfer. If a DMA transfer
	cannot be specified in a single message (highly fragmented), this
	transaction can be used to specify more ranges.

validate_partition
	Query to QSM to determine if a partition identifier is valid.

Each message is tagged with a user id, and a partition id. The user id allows
QSM to track resources, and release them when the user goes away (eg the process
crashes). A partition id identifies the resource partition that QSM manages,
which this message applies to.

Messages may have CRCs. Messages should have CRCs applied until the QSM
reports via the status transaction that CRCs are not needed. The QSM on the
SA9000P requires CRCs for black channel safing.

Subsystem Restart (SSR)
=======================

SSR is the concept of limiting the impact of an error. An AIC100 device may
have multiple users, each with their own workload running. If the workload of
one user crashes, the fallout of that should be limited to that workload and not
impact other workloads. SSR accomplishes this.

If a particular workload crashes, QSM notifies the host via the QAIC_SSR MHI
channel. This notification identifies the workload by it's assigned DBC. A
multi-stage recovery process is then used to cleanup both sides, and get the
DBC/NSPs into a working state.

When SSR occurs, any state in the workload is lost. Any inputs that were in
process, or queued by not yet serviced, are lost. The loaded artifacts will
remain in on-card DDR, but the host will need to re-activate the workload if
it desires to recover the workload.

Reliability, Accessibility, Serviceability (RAS)
================================================

AIC100 is expected to be deployed in server systems where RAS ideology is
applied. Simply put, RAS is the concept of detecting, classifying, and
reporting errors. While PCIe has AER (Advanced Error Reporting) which factors
into RAS, AER does not allow for a device to report details about internal
errors. Therefore, AIC100 implements a custom RAS mechanism. When a RAS event
occurs, QSM will report the event with appropriate details via the QAIC_STATUS
MHI channel. A sysadmin may determine that a particular device needs
additional service based on RAS reports.

Telemetry
=========

QSM has the ability to report various physical attributes of the device, and in
some cases, to allow the host to control them. Examples include thermal limits,
thermal readings, and power readings. These items are communicated via the
QAIC_TELEMETRY MHI channel.
