IMX8MP VLS-GM2 Camera Usage Guide
Introduction
This article guides you how to get started using TechNexion VLS-GM2 GMSL2 camera modules on the IMX8MP development kits board.
You must have the background knowledge to modify the kernel configuration, rebuild, and replace the kernel and the device tree source (DTS).
This article uses the *WB-EDM-G-IMX8M-PLUS baseboard as an example.
Supported Camera Modules
| Camera Series | Products |
|---|---|
| VLS-GM2 | VLS-GM2-AR0144 VLS-GM2-AR0145 VLS-GM2-AR0234 VLS-GM2-AR0235 VLS-GM2-AR0246 VLS-GM2-AR0521 VLS-GM2-AR0522 VLS-GM2-AR0544 VLS-GM2-AR0821 VLS-GM2-AR0822 VLS-GM2-AR0830 VLS-GM2-AR1335 VLS-GM2-AR2020 |

Supported Boards
| SoM | Board |
|---|---|
| EDM-G-IMX8M-PLUS | WB-EDM-G-IMX8M-PLUS EDM-G-WIZARD-IMX8M-PLUS |
| AXON-IMX8M-PLUS | AXON-WIZARD-IMX8M-PLUS |
Hardware Setup Instructions
Power Supply Preparation
Use a DC 12V power cable to supply power to the board.
Connect the power adapter via the barrel jack connector.
The GMSL2 adapter board does not require a separate power input in this setup.
Debug Console Connection
Prepare a USB-to-UART cable if you're connecting to a PC.
Connect the cable to the debug console port on the WB-EDM-G-IMX8M-PLUS board.
GMSL2 Adapter and Camera Connection
Attach the GMSL2 adapter module directly to the WB-EDM-G-IMX8M-PLUS board.
No ribbon cable is required between the GMSL2 adapter module and the WB-EDM-G-IMX8M-PLUS board.
Connect the VLS-GM2 camera modules to the GMSL2 adapter module port 1 (J1).
Prepare Yocto Demo Image for Testing TechNexion Camera
To test TechNexion VLS-GM2 cameras, use a Yocto-based demo image that includes the required device tree overlays, GMSL2 deserializer/serializer drivers, and camera drivers.
Downloading the Demo Image
Prebuilt demo images are available for download on TechNexion's official server.
Download Link
Flashing the Image
You can flash the image to either e.MMC or an SD Card using one of the following methods.
Using uuu Tool (Universal Update Utility)
TechNexion provides a guide to flash the image using the uuu tool:
How to Flash with UUU
Before flashing, ensure the board is set to Serial Download Mode in the boot configuration.
Using ums Command in U-Boot (USB Mass Storage)
Alternatively, you can write the image directly to flash storage over USB-OTG using U-Boot's ums command:
Using UMS in U-Boot
The board must be booted with a version of U-Boot that supports the ums command. Typically, this is done from the existing e.MMC.
Build Yocto
TechNexion supports building a Yocto-based Linux image tailored for camera modules using the following kernel and branch.
Supported Linux Kernel
| Linux Kernel Version | Yocto Branch |
|---|---|
| 6.18.20 | tn-imx_6.18.20_2.0.0-stable |
This "linux_kernel_version-stable" branch is used for the official quarterly release. To view the latest kernel source code, switch to the "linux_kernel_version-next" branch.
Source and Build Instructions
📖 Build Yocto (Instructions for EDM-IMX8MP)
Confirm the kernel configuration symbols and device tree sources used by the VLS-GM2 overlays before adding board-specific patch instructions here.
Camera Testing Instructions
Specify Camera DTBO in U-Boot
-
Connect the debug console cable to the carrier board.
-
Power on the board and interrupt the boot process.
Keep pressingEnterwhen the following message appears:Hit any key to stop autoboot: -
Specify the appropriate device tree overlays for the LVDS panel and VLS-GM2 cameras using the
dtoverlayenvironment variable in U-Boot:
u-boot=> setenv dtoverlay vls-gm2-csi0 vls-gm2-csi1
The command above is an example for connecting cameras on both CSI paths simultaneously. If only one GMSL2 camera path is connected, use only the corresponding VLS-GM2 overlay, such as vls-gm2-csi0 or vls-gm2-csi1.
- Continue the boot process.
u-boot=> saveenv
u-boot=> boot
Camera Device Mapping
The following mapping can be confirmed from cam -l, dmesg, and media-ctl -p.
| CSI Path | Sensor Entity | Sensor Sub-device | Capture Node |
|---|---|---|---|
CSI1 / mcx-mipi-csi2.0 | tevs 10-0048 | /dev/v4l-subdev6 | /dev/video2 |
CSI2 / mcx-mipi-csi2.1 | tevs 11-0048 | /dev/v4l-subdev7 | /dev/video3 |
Check Camera Status
Check camera initialization in kernel log:
$ dmesg -t | grep tevs
tevs 10-0048: tevs_probe() device node: tevs@48
tevs 10-0048: Version:26.4.0.3
tevs 10-0048: Product:TEVS-AR0521, HeaderVer:3, MIPI_Rate:800
tevs 10-0048: Chip ID: 0x0457
tevs 10-0048: probe success
tevs 11-0048: tevs_probe() device node: tevs@48
tevs 11-0048: Version:26.4.0.3
tevs 11-0048: Product:TEVS-AR0521, HeaderVer:3, MIPI_Rate:800
tevs 11-0048: Chip ID: 0x0457
tevs 11-0048: probe success
Check media controller topology:
$ media-ctl -p
Media controller API version 6.18.20
Media device information
------------------------
driver mxc-md
model FSL Capture Media Device
serial
bus info platform:32c00000.bus:camera
hw revision 0x0
driver version 6.18.20
Device topology
- entity 1: mxc_isi.0 (16 pads, 2 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
pad0: SINK
<- "mxc-mipi-csi2.0":4 [ENABLED]
pad1: SINK
pad2: SINK
pad3: SINK
pad4: SINK
pad5: SINK
pad6: SINK
pad7: SINK
pad8: SINK
pad9: SINK
pad10: SINK
pad11: SINK
pad12: SOURCE
-> "mxc_isi.0.capture":0 [ENABLED]
pad13: SOURCE
pad14: SOURCE
pad15: SINK
- entity 18: mxc_isi.0.capture (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video2
pad0: SINK
<- "mxc_isi.0":12 [ENABLED]
- entity 22: mxc_isi.1 (16 pads, 2 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
pad0: SINK
pad1: SINK
pad2: SINK
pad3: SINK
pad4: SINK
<- "mxc-mipi-csi2.1":4 [ENABLED]
pad5: SINK
pad6: SINK
pad7: SINK
pad8: SINK
pad9: SINK
pad10: SINK
pad11: SINK
pad12: SOURCE
-> "mxc_isi.1.capture":0 [ENABLED]
pad13: SOURCE
pad14: SOURCE
pad15: SINK
- entity 39: mxc_isi.1.capture (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video3
pad0: SINK
<- "mxc_isi.1":12 [ENABLED]
- entity 43: mxc-mipi-csi2.0 (8 pads, 2 links)
type Node subtype V4L flags 0
device node name /dev/v4l-subdev0
pad0: SINK
<- "max96724 1-002e":4 [ENABLED,IMMUTABLE]
pad1: SINK
pad2: SINK
pad3: SINK
pad4: SOURCE
-> "mxc_isi.0":0 [ENABLED]
pad5: SOURCE
pad6: SOURCE
pad7: SOURCE
- entity 52: mxc-mipi-csi2.1 (8 pads, 2 links)
type Node subtype V4L flags 0
device node name /dev/v4l-subdev1
pad0: SINK
pad1: SINK
<- "max96724 4-002e":4 [ENABLED,IMMUTABLE]
pad2: SINK
pad3: SINK
pad4: SOURCE
-> "mxc_isi.1":4 [ENABLED]
pad5: SOURCE
pad6: SOURCE
pad7: SOURCE
- entity 61: max96724 1-002e (9 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
routes:
0/0 -> 4/0 [ACTIVE]
pad0: SINK
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
<- "max96717 8-0040":1 [ENABLED,IMMUTABLE]
pad1: SINK
pad2: SINK
pad3: SINK
pad4: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
-> "mxc-mipi-csi2.0":0 [ENABLED,IMMUTABLE]
pad5: SOURCE
pad6: SOURCE
pad7: SOURCE
pad8: SINK,0x8
- entity 71: max96724 4-002e (9 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev3
routes:
0/0 -> 4/0 [ACTIVE]
pad0: SINK
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
<- "max96717 9-0040":1 [ENABLED,IMMUTABLE]
pad1: SINK
pad2: SINK
pad3: SINK
pad4: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
-> "mxc-mipi-csi2.1":1 [ENABLED,IMMUTABLE]
pad5: SOURCE
pad6: SOURCE
pad7: SOURCE
pad8: SINK,0x8
- entity 81: max96717 8-0040 (3 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev4
routes:
0/0 -> 1/0 [ACTIVE]
pad0: SINK
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
<- "tevs 10-0048":0 [ENABLED,IMMUTABLE]
pad1: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
-> "max96724 1-002e":0 [ENABLED,IMMUTABLE]
pad2: SINK,0x8
- entity 87: max96717 9-0040 (3 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev5
routes:
0/0 -> 1/0 [ACTIVE]
pad0: SINK
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
<- "tevs 11-0048":0 [ENABLED,IMMUTABLE]
pad1: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none]
-> "max96724 4-002e":0 [ENABLED,IMMUTABLE]
pad2: SINK,0x8
- entity 93: tevs 10-0048 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev6
pad0: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
crop.bounds:(0,0)/2592x1944
crop:(0,0)/640x480]
-> "max96717 8-0040":0 [ENABLED,IMMUTABLE]
- entity 97: tevs 11-0048 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev7
pad0: SOURCE
[stream:0 fmt:UYVY8_1X16/640x480@1/120 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
crop.bounds:(0,0)/2592x1944
crop:(0,0)/640x480]
-> "max96717 9-0040":0 [ENABLED,IMMUTABLE]
Check Supported Formats and Resolutions
- CSI1
- CSI2
$ v4l2-ctl -d /dev/video2 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'RGBP' (16-bit RGB 5-6-5)
[1]: 'RGB3' (24-bit RGB 8-8-8)
[2]: 'BGR3' (24-bit BGR 8-8-8)
[3]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 640x480
Interval: Discrete 0.008s (120.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2560x1440
Interval: Discrete 0.031s (32.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.042s (24.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
[4]: 'YUV4' (32-bit A/XYUV 8-8-8-8)
[5]: 'NV12' (Y/UV 4:2:0)
[6]: 'NM12' (Y/UV 4:2:0 (N-C))
[7]: 'YM24' (Planar YUV 4:4:4 (N-C))
[8]: 'XR24' (32-bit BGRX 8-8-8-8)
[9]: 'AR24' (32-bit BGRA 8-8-8-8)
$ v4l2-ctl -d /dev/video3 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'RGBP' (16-bit RGB 5-6-5)
[1]: 'RGB3' (24-bit RGB 8-8-8)
[2]: 'BGR3' (24-bit BGR 8-8-8)
[3]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 640x480
Interval: Discrete 0.008s (120.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
[4]: 'YUV4' (32-bit A/XYUV 8-8-8-8)
[5]: 'NV12' (Y/UV 4:2:0)
[6]: 'NM12' (Y/UV 4:2:0 (N-C))
[7]: 'YM24' (Planar YUV 4:4:4 (N-C))
[8]: 'XR24' (32-bit BGRX 8-8-8-8)
[9]: 'AR24' (32-bit BGRA 8-8-8-8)
CSI2 only displays with a resolution width of 2048 pixels or less.
GStreamer Capture Test
Use these commands to verify that the capture node can stream frames without requiring a display output.
- CSI1
- CSI2
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! "video/x-raw,width=1280,height=720" ! waylandsink sync=false
$ gst-launch-1.0 -v v4l2src device=/dev/video3 ! "video/x-raw,width=1280,height=720" ! waylandsink sync=false
Troubleshooting
Verify Camera and GMSL2 Initialization
Use dmesg to check whether the GMSL2 deserializer/serializer and camera sensor drivers initialized correctly. grep tevs is enough to check the camera sensor probe logs only, but the broader filter below is recommended for VLS-GM2 because it also catches the GMSL2 deserializer, serializer, CSI, and camera framework messages.
$ dmesg | grep -Ei "max967|tevs|csi|mxc-md"
If the dmesg ring buffer no longer contains the boot-time probe logs, use journalctl when it is available:
$ journalctl -k -b | grep -Ei "max967|tevs|csi|mxc-md"
If both commands return no boot-time probe messages, use cam -l, media-ctl -p, and the GStreamer streaming test as the current-state checks.
Example output, abridged to the routing and probe lines:
[ 0.055504] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.055576] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e40000
[ 0.055628] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.055740] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.055842] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.056118] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.056189] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e50000
[ 0.056240] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.056353] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.056460] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.057696] /soc@0/bus@32c00000/camera/csi@32e40000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.057790] /soc@0/bus@32c00000/camera/csi@32e50000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.067107] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.067167] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e40000
[ 0.067217] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.067301] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.067377] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.067634] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.067688] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e50000
[ 0.067736] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.067816] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.067889] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.070625] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.070685] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e40000
[ 0.070737] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.070827] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.070912] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.072370] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.072422] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e50000
[ 0.072475] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 0.072565] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.072650] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 0.075387] /soc@0/bus@32c00000/camera/csi@32e40000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.075470] /soc@0/bus@32c00000/camera/csi@32e50000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.079678] /soc@0/bus@32c00000/camera/csi@32e40000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.079763] /soc@0/bus@32c00000/camera/csi@32e50000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.080765] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e40000
[ 0.080888] /soc@0/bus@32c00000/camera/csi@32e40000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 0.081208] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@32c00000/camera/csi@32e50000
[ 0.081313] /soc@0/bus@32c00000/camera/csi@32e50000: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 0.094289] SCSI subsystem initialized
[ 0.177014] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)
[ 2.658296] mxc-mipi-csi2-sam 32e40000.csi: supply mipi-phy not found, using dummy regulator
[ 2.667231] : mipi_csis_imx8mp_phy_reset, No remote pad found!
[ 2.673145] mxc-mipi-csi2-sam 32e40000.csi: lanes: 4, hs_settle: 33, clk_settle: 2, wclk: 0, freq: 500000000
[ 2.690291] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator
[ 2.699161] : mipi_csis_imx8mp_phy_reset, No remote pad found!
[ 2.705051] mxc-mipi-csi2-sam 32e50000.csi: lanes: 4, hs_settle: 33, clk_settle: 2, wclk: 0, freq: 266000000
[ 3.082124] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 3.096748] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 3.120023] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 3.139176] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 3.157013] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 3.175864] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 3.284853] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 3.299505] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 3.318405] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 3.332885] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 3.350720] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 3.369584] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 9.077612] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 9.077670] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 9.077790] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 9.077855] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.077901] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 9.356755] /soc@0/bus@30800000/i2c@30a30000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.356874] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 9.356918] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e
[ 9.358013] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 9.358108] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.361011] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 9.447689] mx8-img-md: Registered sensor subdevice: max96724 1-002e (1)
[ 9.579380] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 9.579442] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 9.579864] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 9.579954] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.580006] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 9.880117] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.880252] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 9.880302] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e
[ 9.880380] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/mfp0-pins
[ 9.880450] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 9.880503] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 9.951300] mx8-img-md: Registered sensor subdevice: max96724 4-002e (2)
[ 9.978495] max96717: loading out-of-tree module taints kernel.
[ 10.016116] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 10.016371] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.019378] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 10.019614] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 10.019827] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.022680] /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30a30000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.061466] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 10.061615] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.063911] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48
[ 10.064055] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40
[ 10.064138] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.066459] /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/tevs@48: Fixed dependency cycle(s) with /soc@0/bus@30800000/i2c@30ad0000/max96724@2e/i2c-atr/i2c@0/serializer@40/i2c-atr/i2c@0/pca9554@25
[ 10.106500] tevs 10-0048: tevs_probe() device node: tevs@48
[ 10.801569] tevs 10-0048: Version:26.4.0.3
[ 10.807272] tevs 10-0048: Product:TEVM-AR0521, HeaderVer:3, MIPI_Rate:800
[ 10.807744] tevs 10-0048: Chip ID: 0x0457
[ 10.831814] tevs 10-0048: probe success
[ 10.832564] tevs 11-0048: tevs_probe() device node: tevs@48
[ 11.503887] tevs 11-0048: Version:26.4.0.3
[ 11.509444] tevs 11-0048: Product:TEVM-AR0521, HeaderVer:3, MIPI_Rate:800
[ 11.509983] tevs 11-0048: Chip ID: 0x0457
[ 11.534932] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.0]
[ 11.534944] mx8-img-md: created link [mxc-mipi-csi2.1] => [mxc_isi.1]
[ 11.534961] mx8-img-md: created link [max96724 1-002e] => [mxc-mipi-csi2.0]
[ 11.534973] mx8-img-md: created link [max96724 4-002e] => [mxc-mipi-csi2.1]
[ 11.534981] mxc-md 32c00000.bus:camera: mxc_md_create_links
[ 11.547910] tevs 11-0048: probe success
The Fixed dependency cycle(s) lines are expected graph dependency messages on this platform.
They are useful for confirming the CSI/deserializer mapping, but they are not probe failures. The important sensor confirmation is that tevs 10-0048 through tevs 11-0048 all report probe success.
Check GMSL2 Link Quality
If the camera probes but streaming is unstable, run a GMSL2 link margin test via VizionSDK. See GMSL Link Margin Testing.