Skip to main content

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.

Background knowledge needed

You must have the background knowledge to modify the kernel configuration, rebuild, and replace the kernel and the device tree source (DTS).

e.g. WB-EDM-G-IMX8M-PLUS Baseboard

This article uses the *WB-EDM-G-IMX8M-PLUS baseboard as an example.


Supported Camera Modules

Camera SeriesProducts
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
Camera Sensor Comparison

Supported Boards

SoMBoard
EDM-G-IMX8M-PLUSWB-EDM-G-IMX8M-PLUS
EDM-G-WIZARD-IMX8M-PLUS
AXON-IMX8M-PLUSAXON-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.

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

Boot Mode

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

U-Boot Requirement

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 VersionYocto Branch
6.18.20tn-imx_6.18.20_2.0.0-stable
The latest kernel source code

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

🔗 Fetch Yocto Source

📖 Build Yocto (Instructions for EDM-IMX8MP)

Validation TODO

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

  1. Connect the debug console cable to the carrier board.

  2. Power on the board and interrupt the boot process.
    Keep pressing Enter when the following message appears: Hit any key to stop autoboot:

  3. Specify the appropriate device tree overlays for the LVDS panel and VLS-GM2 cameras using the dtoverlay environment variable in U-Boot:

u-boot=> setenv dtoverlay vls-gm2-csi0 vls-gm2-csi1
About Device Tree Overlays

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.

  1. 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 PathSensor EntitySensor Sub-deviceCapture Node
CSI1 / mcx-mipi-csi2.0tevs 10-0048/dev/v4l-subdev6/dev/video2
CSI2 / mcx-mipi-csi2.1tevs 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

$ 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)

CSI2 limitation

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.

$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! "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.

If the camera probes but streaming is unstable, run a GMSL2 link margin test via VizionSDK. See GMSL Link Margin Testing.