# Troubleshoot video
This section outlines the process to verify the function of the VPU driver. You can use the commands and samples provided in this section to:
- Verify if the VPU driver is successfully loaded
- Verify if decoding/encoding is successfully offloaded to the VPU
- Debug the VPU driver, firmware, and GStreamer video plugins
The following workflow diagram shows the sequence to verify the VPU driver:
**Figure: Workflow to verify the VPU driver**
The workflow diagram outlines the sequential steps involved in initializing and validating the VPU driver:
1. Boot up the driver to begin the startup process and initialize the VPU driver.
2. Verify if the VPU driver is successfully loaded into the video system.
3. Verify if the video decoding and encoding tasks are appropriately handled by the VPU.
4. Run use cases to validate the VPU functionality.
## Verify if VPU driver is loaded
The kernel image loads the VPU driver. You can use the `lsmod` or `udevadm` commands to check if the VPU driver loads successfully.
### Verify using the lsmod command
1. Run the `lsmod` command on the device shell:
lsmod | grep -i "iris"
Copy to clipboard
2. To verify that the VPU driver loaded successfully, review the sample output and ensure that an entry for `iris_vpu` is available under the Module column:
Module Size Used by
iris_vpu 585728 0
Copy to clipboard
### Verify using the udevadm command
1. Run the `udevadm` command on the device shell:
udevadm info -n /dev/video*
Copy to clipboard
2. To verify that the VPU loaded successfully, review that the following sample output shows `msm_vidc_decoder` and `msm_vidc_encoder` against the `ID_V4L_PRODUCT` tag:
P: /devices/platform/soc@0/aa00000.video-codec/video4linux/video32
M: video32
R: 32
U: video4linux
D: c 81:0
N: video32
L: 0
S: v4l/by-path/platform-aa00000.video-codec-video-index0
E: DEVPATH=/devices/platform/soc@0/aa00000.video-codec/video4linux/video32
E: DEVNAME=/dev/video32
E: MAJOR=81
E: MINOR=0
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=3749470
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=msm_vidc_decoder
E: ID_V4L_CAPABILITIES=:
E: ID_PATH=platform-aa00000.video-codec
E: ID_PATH_TAG=platform-aa00000_video-codec
E: ID_FOR_SEAT=video4linux-platform-aa00000_video-codec
E: DEVLINKS=/dev/v4l/by-path/platform-aa00000.video-codec-video-index0
E: TAGS=:seat:uaccess:
E: CURRENT_TAGS=:seat:uaccess:
|
P: /devices/platform/soc@0/aa00000.video-codec/video4linux/video33
M: video33
R: 33
U: video4linux
D: c 81:1
N: video33
L: 0
S: v4l/by-path/platform-aa00000.video-codec-video-index1
E: DEVPATH=/devices/platform/soc@0/aa00000.video-codec/video4linux/video33
E: DEVNAME=/dev/video33
E: MAJOR=81
E: MINOR=1
E: SUBSYSTEM=video4linux
E: USEC_INITIALIZED=3749498
E: ID_V4L_VERSION=2
E: ID_V4L_PRODUCT=msm_vidc_encoder
E: ID_V4L_CAPABILITIES=:
E: ID_PATH=platform-aa00000.video-codec
E: ID_PATH_TAG=platform-aa00000_video-codec
E: ID_FOR_SEAT=video4linux-platform-aa00000_video-codec
E: DEVLINKS=/dev/v4l/by-path/platform-aa00000.video-codec-video-index1
E: TAGS=:seat:uaccess:
E: CURRENT_TAGS=:seat:uaccess:
Copy to clipboard
Note
To identify the device nodes, check for the `DEVNAME` tag. In the earlier example, the `/dev/video32` is for the VPU decoder node and `/dev/video33` is for the VPU encoder node.
## Verify if decoding or encoding are offloaded
To confirm if video decoding or encoding is successfully offloaded to the VPU:
1. Run the following command in a loop:
>
>
> cat /proc/interrupts | grep "msm-vidc"
> Copy to clipboard
>
>
> Sample output:
>
>
> 253: 4 0 0 0 0 0 0 0 GICv3 206 Level msm-vidc
> Copy to clipboard
2. Verify that the interrupt count from `msm-vidc` increases on any CPU while the decoding or encoding use case is running.
## Debug video
If you face an issue while running a video decode or encode use case, debugging can help identify the root cause.
### Debug the VPU driver
This section provides the commands to use, debug log levels, and log value information that helps in debugging the VPU driver and firmware.
The following workflow diagram shows the sequence to debug the VPU driver and firmware:
**Figure: Debug VPU workflow**
This workflow outlines the procedure for capturing debug logs from the VPU:
1. Mount the debug file system to start the debug process.
2. Choose the preferred log level.
3. Configure the log levels for the VPU driver and/or VPU firmware as needed.
4. Apply the chosen log level using debugfs node.
5. Start capturing logs for both the VPU driver and the VPU firmware.
Follow the steps to debug the VPU driver and firmware:
1. Mount the `debugfs` node using the following command:
mount -t debugfs none /sys/kernel/debug/
Copy to clipboard
2. Choose the VPU driver debug log level and debug log value as listed in the following table. You can also select many debug log levels by using the bitmask of debug log values.
Table: VPU driver Debug log levels and values
| Debug log level | Debug log value |
| --- | --- |
| VIDC\_ERR | 0x00000001 |
| VIDC\_HIGH | 0x00000002 |
| VIDC\_LOW | 0x00000004 |
| VIDC\_PERF | 0x00000008 |
| VIDC\_PKT | 0x00000010 |
| VIDC\_BUS | 0x00000020 |
| VIDC\_STAT | 0x00000040 |
| VIDC\_ENCODER | 0x00000100 |
| VIDC\_DECODER | 0x00000200 |
| VIDC\_PRINTK | 0x10000000 |
| VIDC\_FTRACE | 0x20000000 |
Note
The VPU driver sets the default debug level to `VIDC_ERR` and limits debug logs to error scenarios.
3. Set the VPU driver debug log value to the `/sys/module/iris_vpu/parameters/msm_vidc_debug` node.
Sample command to activate all message levels:
echo 0x1000037F > /sys/module/iris_vpu/parameters/msm_vidc_debug
Copy to clipboard
4. Choose the VPU firmware debug log level and debug log value as listed in the following table. You can also select many debug log levels by using the bitmask of debug log values.
Table: VPU firmware debug log levels and values
| Debug log level | Debug log value |
| --- | --- |
| FW\_LOW | 0x00000001 |
| FW\_MED | 0x00000002 |
| FW\_HIGH | 0x00000004 |
| FW\_ERROR | 0x00000008 |
| FW\_FATAL | 0x00000010 |
| FW\_PERF | 0x00000020 |
| FW\_CACHE\_LOW | 0x00000100 |
| FW\_CACHE\_MED | 0x00000200 |
| FW\_CACHE\_HIGH | 0x00000400 |
| FW\_CACHE\_ERROR | 0x00000800 |
| FW\_CACHE\_FATAL | 0x00001000 |
| FW\_CACHE\_PERF | 0x00002000 |
| FW\_PRINTK | 0x10000000 |
| FW\_FTRACE | 0x20000000 |
Note
The VPU firmware debug logs are limited to error and fatal scenarios, and the default debug level is set to `FW_ERROR | FW_FATAL`.
5. Set the VPU firmware debug log value to the `/sys/module/iris_vpu/parameters/msm_fw_debug` node.
The sample command to activate all message levels:
echo 0x1000037F > /sys/module/iris_vpu/parameters/msm_fw_debug
Copy to clipboard
6. Start capturing kernel messages for both the VPU driver and the firmware using the following command and run the use case:
cat /proc/kmsg
Copy to clipboard
### Debug the GStreamer plugins
Qualcomm GStreamer video plugins are compliant with the standard GStreamer framework. For information about the debugging these plugins, see [Debugging tools](https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html).
Last Published: Jun 26, 2026
[Previous Topic
Explore video sample applications](https://docs.qualcomm.com/bundle/publicresource/80-70030-20/topics/interfaces.md) [Next Topic
Advanced video specifications](https://docs.qualcomm.com/bundle/publicresource/80-70030-20/topics/feature-descriptions.md)