Driver failed probe after upgrading to Jetpack 6.2

Hi, we have a camera system that works OK on Jetpack 5.1.3. However, we’d like to upgrade the Jetpack to evaluate the performance boost, and the bug fix.

Our system consist of a Jetson Orin Nano, on a LI-ONX-CB-4CAM-FP carrier board, which has a FPGA to emulate an I2C mux (pca9548). The carrier board connects to 3 of DS90UB954, and each DS90UB954 connects to 2 cameras with coax cable, which contains AR0234 and DS90UB953.

Unfortunately, Leopard Imaging does not supply any help on Jetpack 6. So we are on our own.

I don’t think the MIPI signal matters before the camera start streaming. As for I2C signal flow, the I2C bus on 3180000 got multiplexed into 8 additional I2C buses. On 3 of the additional bus, there will be 3 devices: DS90UB954 de-serializers, and 2 sensors got I2C relayed by DS90UB954.

So far we’ve got the I2C mux working, and DS90UB954 driver working. But when we try to load AR0234 driver, the module does not probe.

We’ve tested the I2C signals. The Jetson never tried to send signal to AR0234 address, so the issue should be on software side. The device tree seems partially work, as we I run tree /sys/bus/i2c/devices/

/sys/bus/i2c/devices/
├── 1-0050 -> ../../../devices/platform/bus@0/3160000.i2c/i2c-1/1-0050
├── 1-0057 -> ../../../devices/platform/bus@0/3160000.i2c/i2c-1/1-0057
├── 2-0077 -> ../../../devices/platform/3180000.i2c/i2c-2/2-0077
├── 3-0021 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-3/3-0021
├── 3-0022 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-3/3-0022
├── 3-0030 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-3/3-0030
├── 4-0021 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-4/4-0021
├── 4-0022 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-4/4-0022
├── 4-0030 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-4/4-0030
├── 5-0021 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-5/5-0021
├── 5-0022 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-5/5-0022
├── 5-0030 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-5/5-0030
├── 6-0021 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-6/6-0021
├── 6-0022 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-6/6-0022
├── 6-0030 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-6/6-0030
├── i2c-0 -> ../../../devices/platform/bpmp/bpmp:i2c/i2c-0
├── i2c-1 -> ../../../devices/platform/bus@0/3160000.i2c/i2c-1
├── i2c-10 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-10
├── i2c-2 -> ../../../devices/platform/3180000.i2c/i2c-2
├── i2c-3 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-3
├── i2c-4 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-4
├── i2c-5 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-5
├── i2c-6 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-6
├── i2c-7 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-7
├── i2c-8 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-8
└── i2c-9 -> ../../../devices/platform/3180000.i2c/i2c-2/i2c-9 

I can see the cameras appear at addresses such as 3-0021. In side that folder, when I do cat uevent

OF_NAME=custom_ar0234_a
OF_FULLNAME=/i2c@3180000/tca9548@77/i2c@0/custom_ar0234_a@21
OF_COMPATIBLE_0=onsemi,sh_ar0234
OF_COMPATIBLE_N=1
MODALIAS=of:Ncustom_ar0234_aT(null)Consemi,sh_ar0234

And those information matches the device tree. However, there is a waiting_for_supplier files, which content was 1. I think it should have something to do with the no-probing issue.

We’ve used the attached dtsi files with tegra234-p3768-0000+p3767-0003.dts to build the dtb.
dtsi.zip (4.4 KB)
tegra234-p3768-0000+p3767-0003.zip (25.8 KB)
And the decompiled dts
running_system_change_id.zip (26.2 KB)

We also tried to compare some device tree from Veye imaging for
Jetpack 6.2

and Jetpack 5.1.3

with no success.

We are out of clue to get the code work, any suggestions will be appreciated. Thanks

Dump the sensor is in /sys/firmware/devicetree/base/bus@0/i2c@3180000

ls -al /sys/firmware/devicetree/base/bus@0/i2c@3180000

Also, dump the device tree to confirm.

sudo dtc -I fs -O dts -o extracted_proc.dts /proc/device-tree
sh@rig35nano3:~/Documents/GitHub/SH002_CAM_DRIVER$ ls -al /sys/firmware/devicetree/base/bus@0/i2c@3180000
total 0
drwxr-xr-x   2 root root 0 Mar 26 14:54 .
drwxr-xr-x 103 root root 0 Mar 26 14:54 ..
-r--r--r--   1 root root 4 Mar 26 14:54 name
-r--r--r--   1 root root 4 Mar 26 14:54 phandle

Add the dumped tree is here
extracted_proc.zip (26.2 KB)

Didn’t see the tca9548@77 under the i2c@31800000, do you make sure the tca9548 probe successfully?

i2c@3180000 appears 2 times in the device tree.


but in the Jetpack5 version there is only one. let me see if it is a cause.

I removed the duplicated entry in device tree before make dtbs. The issue is still there.
The new device tree is.
extracted_proc.zip (26.1 KB)

Add message in the tca9548 probe driver to make sure it been loaded successfully.

How should I add message? It seems loaded automatically in dmesg

[    1.678919] i2c i2c-2: Added multiplexed i2c bus 3
[    1.679196] i2c i2c-2: Added multiplexed i2c bus 4
[    1.679487] i2c i2c-2: Added multiplexed i2c bus 5
[    1.679722] i2c i2c-2: Added multiplexed i2c bus 6
[    1.679802] i2c i2c-2: Added multiplexed i2c bus 7
[    1.679892] i2c i2c-2: Added multiplexed i2c bus 8
[    1.679974] i2c i2c-2: Added multiplexed i2c bus 9
[    1.680042] i2c i2c-2: Added multiplexed i2c bus 10
[    1.680047] pca954x 2-0077: registered 8 multiplexed busses for I2C switch pca9548

OK, that tell the pca954x driver is loaded.
You need to probe the i2c signal for the camera to confirm.

Yes, the boot process will generate an access to address 77, and the i2c mux did generate ACK. This is confirmed on logic analyzer.
The i2c mux should be working properly both in hardware in linux. The DS90UB954 de-ser after the i2c mux also works well and the module can be loaded without problem. The only issue is the AR0234 driver refuse to probe.

OK, maybe review the device tree if any missing.