JP 6.0-DP MIPI camera binding issue

Working on AGX ORIN with JP6.0-DP for MIPI camera integration.

# cat /etc/nv_boot_control.conf
TNSPEC 3701-500-0000-L.0-1-1-jetson-agx-orin-devkit-
COMPATIBLE_SPEC 3701-300-0000--1--jetson-agx-orin-devkit-
TEGRA_BOOT_STORAGE mmcblk3
TEGRA_CHIPID 0x23
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0
# cat /etc/nv_tegra_release
# R36 (release), REVISION: 2.0, GCID: 34956989, BOARD: generic, EABI: aarch64, DATE: Thu Nov 30 19:03:58 UTC 2023
# KERNEL_VARIANT: oot
TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia

We are working in porting of RealSense D457 MIPI camera from JP5.1.2 to JP6.0.
So far - device can initialize and we have i2c communication.
Unfortunately - video nodes are not created by tegra vi5 driver.

# ls /dev/vid*
ls: cannot access '/dev/vid*': No such file or directory

The device-tree updated accordingly to example templates and all ports are enabled.

# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/nvcsi\@15a00000/channel\@0/ports/port\@0/endpoint\@0/status
disabled
# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/nvcsi\@15a00000/channel\@0/ports/port\@0/status
disabled
# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/nvcsi\@15a00000/channel\@0/ports/status
okay
# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/nvcsi\@15a00000/channel\@0/status
disabled
# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/nvcsi\@15a00000/status
okay
# cat /sys/firmware/devicetree/base/bus\@0/host1x\@13e00000/status
okay

Looks like endpoints disabled - kernel logs from tegra-capture-vi:

[    9.926319] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse max9295/max9296
[    9.926325] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse maxim,gmsl-dser-device
[    9.926328] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse maxim,gmsl-ser-device
[    9.926330] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse ports 0000000069b2cd92, num_channels: 2
[    9.926333] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926334] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926336] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 5
[    9.926338] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926339] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926341] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 4
[    9.926343] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926344] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926345] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 0
[    9.926347] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926348] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926350] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 1
[    9.926352] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926353] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926355] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 2
[    9.926357] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse all ports
[    9.926357] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse port port
[    9.926359] tegra-camrtc-capture-vi 3.tegra-capture-vi: vi_parse_dt, parse reg 3
[    9.928674] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.928934] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent
[    9.928937] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.929030] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent
[    9.929033] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.929065] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent
[    9.929066] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.929094] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent
[    9.929096] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.929121] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent
[    9.929123] tegra-camrtc-capture-vi 3.tegra-capture-vi: tegra_vi_graph_init(): of_graph_get_next_endpoint endpoint - endpoint.
[    9.929150] tegra-camrtc-capture-vi 3.tegra-capture-vi: cannot find remote port parent

Device tree portion:

        tegra-capture-vi {
                compatible = "nvidia,tegra-camrtc-capture-vi";
                nvidia,vi-devices = <0x20a 0x20c>;
                nvidia,vi-mapping-size = <0x06>;
                nvidia,vi-mapping = <0x00 0x00 0x01 0x00 0x02 0x01 0x03 0x01 0x04 0x00 0x05 0x01>;
                nvidia,vi-mapping-names = "csi-stream-id\0vi-unit-id";
                nvidia,vi-max-channels = <0x48>;
                status = "okay";
                num-channels = <0x04>;
                reg = <0x00>;
                phandle = <0x36b>;

                ports {
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        reg = <0x00>;
                        status = "okay";

                        port@0 {
                                reg = <0x00>;
                                status = "okay";

                                endpoint {
                                        status = "okay";
                                        port-index = <0x00>;
                                        bus-width = <0x02>;
                                        vc-id = <0x00>;
                                        remote-endpoint = <0x20d>;
                                        phandle = <0x10d>;
                                };
                        };

NVCSI poriton:

                        nvcsi@15a00000 {
                                compatible = "nvidia,tegra194-nvcsi";
                                resets = <0x03 0x2b>;
                                reset-names = "nvcsi";
                                clocks = <0x03 0x51>;
                                clock-names = "nvcsi";
                                status = "okay";
                                num-channels = <0x04>;
                                #address-cells = <0x01>;
                                #size-cells = <0x00>;
                                phandle = <0x247>;

                                channel@0 {
                                        reg = <0x00>;
                                        status = "okay";

                                        ports {
                                                #address-cells = <0x01>;
                                                #size-cells = <0x00>;
                                                status = "okay";

                                                port@0 {
                                                        reg = <0x00>;
                                                        status = "okay";

                                                        endpoint@0 {
                                                                status = "okay";
                                                                port-index = <0x00>;
                                                                bus-width = <0x02>;
                                                                remote-endpoint = <0x10c>;
                                                                phandle = <0xe7>;
                                                        };
                                                };

                                                port@1 {
                                                        reg = <0x01>;
                                                        status = "okay";

                                                        endpoint@1 {
                                                                status = "okay";
                                                                remote-endpoint = <0x10d>;
                                                                phandle = <0x20d>;
                                                        };
                                                };
                                        };
                                };

Device portion:

                                       d4m@1a {
                                                status = "okay";
                                                def-addr = <0x10>;
                                                reg = <0x1a>;
                                                compatible = "intel,d4xx";
                                                use_sensor_mode_id = "true";
                                                vcc-supply = <0xe3>;
                                                cam-type = "Depth";
                                                maxim,gmsl-ser-device = <0xe6>;
                                                maxim,gmsl-dser-device = <0xe5>;
                                                phandle = <0x219>;

                                                ports {
                                                        #address-cells = <0x01>;
                                                        #size-cells = <0x00>;

                                                        port@0 {
                                                                reg = <0x00>;

                                                                endpoint {
                                                                        vc-id = <0x00>;
                                                                        port-index = <0x00>;
                                                                        bus-width = <0x02>;
                                                                        remote-endpoint = <0xe7>;
                                                                        phandle = <0x10c>;
                                                                };
                                                        };
                                                };

All of phandles and remote-endpoints are correct pointers but somehow they are disabled.
Attaching dts and kernel log.

tegra234-d4xx.zip (40.5 KB)
dmesg-jp6-d4xx.zip (19.5 KB)

Using tegra234-p3737-0000+p3701-0000-nv.dtb as reference:

// SPDX-License-Identifier: GPL-2.0-only
// SPDX-FileCopyrightText: Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES.  All rights reserved.

/dts-v1/;

#include "tegra234-p3737-0000+p3701-0000.dts"
#include "tegra234-p3737-0000+p3701-xxxx-nv-common.dtsi"
#include "tegra234-p3701-0000.dtsi"
#include "tegra234-camera-d4xx.dtsi"

Include device specific dts source:
tegra234-camera-d4xx.zip (2.5 KB)

Thanks for assistance.
Dima.

Dump the device tree runtime to confirm again.

sudo dtc -I fs -O dts -o extracted_proc.dts /proc/device-tree

Yes, ports are disabled…
extracted_proc.zip (53.1 KB)

It’s done with device-tree overlay and Jetson-IO.

I used tegra234-p3737-camera-dual-hawk-ar0234-e3653-overlay.dts as template.
Enabled our overlay on jetson target with /opt/nvidia/jetson-io/jetson-io.py

# ls /dev/vid*
/dev/video0  /dev/video1  /dev/video2  /dev/video3  /dev/video4  /dev/video5

Followed:
https://docs.nvidia.com/jetson/archives/r36.2/DeveloperGuide/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html#using-the-jetson-io-tool

https://docs.nvidia.com/jetson/archives/r36.2/DeveloperGuide/HR/ConfiguringTheJetsonExpansionHeaders.html?highlight=plugin%20manager#creating-a-simple-device-tree-overlay

extracted_proc_done.zip (53.1 KB)

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.