# Verify

Source: [https://docs.qualcomm.com/doc/80-70015-20/topic/bring-up.html](https://docs.qualcomm.com/doc/80-70015-20/topic/bring-up.html)

The following workflow outlines the process to verify the function of the VPU driver.

Figure : Workflow to verify the VPU driver
                
                <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export Video-Verify-workflow.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="9.00521in" height="1.76563in" viewbox="0 0 648.375 127.125" xml:space="preserve" color-interpolation-filters="sRGB" class="st7"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #f7f8fa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #ffffff; stroke: #3253dc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.25 }
.svg-1 .st3 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st4 { font-size: 1em }
.svg-1 .st5 { marker-end: url("#mrkr5-23"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.25 }
.svg-1 .st6 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.47169811320755 }
.svg-1 .st7 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-23" class="st6" v:arrowtype="5" v:arrowsize="2" v:setback="3.71" refx="-3.71" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-2.12,-2.12) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape13-1" v:mid="13" v:groupcontext="shape" transform="translate(18,-18)">		<title></title>		<rect x="0" y="36" width="612" height="91.125" class="st1"></rect>	</g>	<g id="shape6-3" v:mid="6" v:groupcontext="shape" transform="translate(495,-39.7895)">		<title></title>		<desc>Run use cases</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="54" cy="101.645" width="108" height="50.9605"></v:textrect>		<path d="M10.8 127.13 L97.2 127.13 A10.7998 10.7998 -180 0 0 108 116.33 L108 86.96 A10.7998 10.7998 -180 0 0 97.2 76.16					 L10.8 76.16 A10.7998 10.7998 -180 0 0 0 86.96 L0 116.33 A10.7998 10.7998 -180 0 0 10.8 127.13 Z" class="st2"></path>		<text x="14.31" y="105.25" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Run use cases</text>		</g>	<g id="shape7-6" v:mid="7" v:groupcontext="shape" transform="translate(342.375,-39.7895)">		<title></title>		<desc>Verify if decode/encode is offloaded to VPU</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="54" cy="101.645" width="108" height="50.9605"></v:textrect>		<path d="M10.8 127.13 L97.2 127.13 A10.7998 10.7998 -180 0 0 108 116.33 L108 86.96 A10.7998 10.7998 -180 0 0 97.2 76.16					 L10.8 76.16 A10.7998 10.7998 -180 0 0 0 86.96 L0 116.33 A10.7998 10.7998 -180 0 0 10.8 127.13 Z" class="st2"></path>		<text x="10.98" y="90.84" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Verify if decode/<tspan x="28.32" dy="1.2em" class="st4">encode is </tspan><tspan x="8.64" dy="1.2em" class="st4">offloaded to VPU</tspan></text>		</g>	<g id="shape8-11" v:mid="8" v:groupcontext="shape" transform="translate(189.375,-39.7895)">		<title></title>		<desc>Verify if VPU driver is loaded</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="54" cy="101.645" width="108" height="50.9605"></v:textrect>		<path d="M10.8 127.13 L97.2 127.13 A10.7998 10.7998 -180 0 0 108 116.33 L108 86.96 A10.7998 10.7998 -180 0 0 97.2 76.16					 L10.8 76.16 A10.7998 10.7998 -180 0 0 0 86.96 L0 116.33 A10.7998 10.7998 -180 0 0 10.8 127.13 Z" class="st2"></path>		<text x="19.99" y="98.04" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Verify if VPU <tspan x="13.31" dy="1.2em" class="st4">driver is loaded</tspan></text>		</g>	<g id="shape9-15" v:mid="9" v:groupcontext="shape" transform="translate(36.375,-39.7895)">		<title></title>		<desc>Boot up the driver</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(1):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):0"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="54" cy="101.645" width="108" height="50.9605"></v:textrect>		<path d="M10.8 127.13 L97.2 127.13 A10.7998 10.7998 -180 0 0 108 116.33 L108 86.96 A10.7998 10.7998 -180 0 0 97.2 76.16					 L10.8 76.16 A10.7998 10.7998 -180 0 0 0 86.96 L0 116.33 A10.7998 10.7998 -180 0 0 10.8 127.13 Z" class="st2"></path>		<text x="6.64" y="105.25" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Boot up the driver</text>		</g>	<g id="shape10-18" v:mid="10" v:groupcontext="shape" v:layermember="0" transform="translate(144.375,-56.2697)">		<title></title>		<path d="M0 118.13 L36.65 118.13" class="st5"></path>	</g>	<g id="shape11-24" v:mid="11" v:groupcontext="shape" v:layermember="0" transform="translate(297.375,-56.2697)">		<title></title>		<path d="M0 118.13 L36.65 118.13" class="st5"></path>	</g>	<g id="shape12-29" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(450.375,-56.2697)">		<title></title>		<path d="M0 118.13 L36.28 118.13" class="st5"></path>	</g></g>
</svg>

The commands and samples provided here enable you to verify the following:
- VPU driver is successfully loaded
- Decoding/encoding is offloaded to the VPU

## Verify if the VPU driver is successfully loaded

The VPU driver is loaded as part of the kernel image. You can confirm whether the VPU
                driver is loaded successfully by executing either of the following commands:

**Using lsmod command** 
1. Run the following `lsmod` command on the device
                        shell:

        lsmod | grep -i "iris"Copy to clipboard
2. To verify if the VPU driver is successfully loaded, 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    0Copy to clipboard

**Using udevadm command** 
1. Run the following command on the device shell and verify if the output shows
                            `msm_vidc_decoder` and `msm_vidc_encoder`
                        against the `ID_V4L_PRODUCT`
                        tag.

        udevadm info -n /dev/video*Copy to clipboard
2. To verify whether the VPU is successfully loaded, review the following
                        sample
                        output:

        P: /devices/platform/soc@0/aa00000.video-codec/video4linux/video32
        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=26
        E: SUBSYSTEM=video4linux
        E: USEC_INITIALIZED=6690806
        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
        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=27
        E: SUBSYSTEM=video4linux
        E: USEC_INITIALIZED=6686892
        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 the decoding/encoding is offloaded to the VPU

You can confirm if the video decoding or encoding is successfully offloaded to the
                VPU by doing the following:
- Execute the following command as a
                        loop:

        cat /proc/interrupts | grep "msm-vidc"Copy to clipboard
- The following is the sample output that helps you verify whether the video
                        decoding/encoding is offloaded to the VPU. Verify if the interrupt count
                        from `msm-vidc` is increasing across any CPU when the use
                        case is
                        running:

        253: 4     0      0        0        0        0        0        0     GICv3 206 Level  msm-vidcCopy to clipboard

Last Published: Oct 15, 2024

[Previous Topic
Software](https://docs.qualcomm.com/bundle/publicresource/80-70015-20/topics/software.md) [Next Topic
Sample applications](https://docs.qualcomm.com/bundle/publicresource/80-70015-20/topics/samples.md)