QUP v3 overview
The QUP v3 is a highly flexible and programmable hardware for supporting a wide range of serial interface. A single QUP v3 serial engine hardware core provides up to eight serial interfaces. The two QUP v3 hardware cores are as follows:- 16-serial engine core
- SSC QUP v3 hardware core with five serial engines available in the SSC_I/Os

Figure : QUP v3 block diagram
Supported transfer modes in QUP v3
The following modes can be configured in the QUP v3 serial engine.- FIFO mode: Simple and reliable, but CPU-intensive. Best suited for low-traffic control operations and basic bring-up.
- CPU DMA (SE DMA mode): Offloads data movement but still relies on CPU coordination. Delivers moderate performance improvements.
- Generic software interface (GSI) DMA mode (preferred): Fully hardware-driven transfers with minimal CPU involvement. Optimized for high performance, scalability, and power efficiency.
| Aspect | FIFO | CPU DMA | GSI DMA |
|---|---|---|---|
| CPU involvement | High | Medium | Minimal |
| Interrupt frequency | High | Medium | Very low |
| Power efficiency | Low | Medium | High |
| Performance scalability | Poor | Moderate | Excellent |
| Best for | Simple control | Medium transfers | High-performance systems |
QUPv3 GENI transfer modes
QUPv3 GENI supports multiple data movement mechanisms. Traditionally, transfers could be performed using FIFO (PIO-based) or CPU-managed DMA modes. While these approaches are sufficient for low-throughput or infrequent transfers, they place a continuous load on the CPU and generate a high interrupt rate under heavy traffic conditions. FIFO mode
Figure : FIFO mode
- ①: The application processor configures the generic interface (GENI).
- ②: The application processor processes Rx/Tx data. The data is transferred between GENI and memory.

Figure : DMA mode
- ①: The application processor initializes DMA.
- ②: The serial engine configures GENI, and initiates the transfer process.
- High-speed I3C devices
- Camera and Ethernet subsystems
- PCIe switches over I2C
- Major CPU offload
- Fewer interrupts
- Better scalability under load
- Performance improvements
- Stable performance for large transfers
- Lower interrupt rate per transfer
- Predictable latency
- Consistent throughput at high speeds
- No sharp degradation for large payloads

Figure : GSI mode
- ①: The application processor prepares TRE.
- ②: The application processor informs QUP (GSI).
- ③: The GSI processes TRE.
- ④: After the TRE completes processing, it’s sent to GENI.
- ⑤: The serial engine processes the Rx/Tx data.
NoteThe QUP v3 UART serial engine doesn’t support the GSI mode.
QUP v3 access control customization
The QUP v3 user access fileQUPAC_Access.c specifies the owners of the serial engine resource. Initially, it’s populated according to the system I/O GPIO allocation. All serial engines must be listed to access the subsystem. It’s flexible enough to list only the available serial engine on a particular device.
To customize the access control for the required serial engine protocol, configure the parameters in the QUPAC_Access.c file. The Qualcomm TEE image for the QUPAC_Access.c file is at /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/<chipset>/QUPAC_Access.c.
To specify the owner of the serial engine resource, modify the QUPAC_Access.c file to suit the board design.
The following use case specifies the default protocol that operates on an enabled serial engine. You can modify the code according to your board design.
Nonsecure mode use case in QUP v3 serial engine
The following nonsecure mode use cases are supported in the QUP v3 serial engine.
QUP v3 serial engine access list description
The following variables are passed into theQUPv3_se_security_permissions_type structure.
Table : Security permission variables for QUP v3
| Variables | Description |
|---|---|
| PeriphID | Serial engine peripheral to configure and assign. |
| ProtocolID | Macro of the required protocol. |
| Mode | Macro of FIFO/GSI/DMA modes. |
| NsOwner | Holds a macro of the image that needs access. |
| bAllowFifo | The boolean flag is set to True if the mode is FIFO, else the flag is set to False. |
| bLoad | The boolean flag value is set to True to load the protocol firmware. |
| bModExcl | This flag is exclusively for Qualcomm TEE. It’s set to True when NsOwner is AC_TZ. |
settings/buses/qup_accesscontrol/qupv3/interface/QupACCommonIds.h.
QUP v3 firmware status verification
For serial engines to work, the QUP firmware must be flashed correctly. The firmware is delivered through the metabuild atcommon/core_qupv3fw/<chipset>/qupv3fw.elf. You can verify the firmware status by checking GENI_FW_REVISION_RO (0xa8c068). For example, identify the register in the kernel log for the 0x0000ffff value. In the following log, the 0000ffff error indicates that the firmware isn’t flashed correctly.
QUPAC_Access.c file configuration only if you intend to use a protocol different from the default configuration.
The following sample log is displayed when configurations don’t match after loading.
Related documents
Acronyms and terms
| Acronym or term | Definition |
|---|---|
| aDSP | Application digital signal processor |
| ADB | Android debug bridge |
| ASPM | Active state power management |
| BDF | Bus device function |
| CAN | Controller area network |
| CRC | Cyclic redundancy check |
| CTS | Clear to send |
| DLLP | Data link layer packet |
| DTS | Device tree source |
| ECRC | End-to-end CRC |
| EE | Execution environment |
| ESE | Execute secure environment |
| FP | Fingerprint |
| GPIO | General-purpose input/output |
| GSI | Generic software interface |
| HID | Human interface device |
| I/O | Input/output |
| IOMMU | Input/output memory management unit |
| I2C | Interintegrated circuit |
| I3C | Improved interintegrated circuit |
| LSP | List processor |
| MS | Mass storage |
| MSI | Message signaled interrupt |
| NCM | Network control modem |
| NFC | Near-field communication |
| NIC | Network interface card |
| PCIe | Peripheral component interconnect express |
| QoS | Quality of service |
| QIM | Qualcomm intelligent multimedia |
| RTS | Request to send |
| SCL | Serial clock line |
| SDK | Software development kit |
| SDL | Serial data line |
| SE | Serial engine |
| SLPI | Sensor low-power island |
| SPI | Serial peripheral interface |
| SPMI | System power management interface |
| SR-IOV | Single root I/O virtualization |
| SSC | Snapdragon sensor core |
| TC | Traffic class |
| TEE | Trusted execution environment |
| TLP | Transaction layer packet |
| UEFI | Unified extensible firmware interface |
| UAC | USB audio class |
| UART | Universal asynchronous receiver-transmitter |
| UCSI | USB Type-C connector system software interface |
| V4L2 | Video4Linux2 |
| VC | Virtual channel |
| Yavta | Yet another V4L2 test application |

