Cdi-mgr ioctls do not appear to power on deserializer

Please provide the following info (tick the boxes after creating this topic):
Software Version
DRIVE OS 6.0.8.1
DRIVE OS 6.0.6
DRIVE OS 6.0.5
DRIVE OS 6.0.4 (rev. 1)
DRIVE OS 6.0.4 SDK
other

Target Operating System
Linux
QNX
other

Hardware Platform
DRIVE AGX Orin Developer Kit (940-63710-0010-300)
DRIVE AGX Orin Developer Kit (940-63710-0010-200)
DRIVE AGX Orin Developer Kit (940-63710-0010-100)
DRIVE AGX Orin Developer Kit (940-63710-0010-D00)
DRIVE AGX Orin Developer Kit (940-63710-0010-C00)
DRIVE AGX Orin Developer Kit (not sure its number)
other

SDK Manager Version
1.9.3.10904
other

Host Machine Version
native Ubuntu Linux 20.04 Host installed with SDK Manager
native Ubuntu Linux 20.04 Host installed with DRIVE OS Docker Containers
native Ubuntu Linux 18.04 Host installed with DRIVE OS Docker Containers
other

When I run a camera using nvsipl, while it is running, I can use i2c tools on bus 0 to talk to the serializer at 0x29. When the camera stops, that goes away. cdi-mgr has ioctls listed -

#define CDI_MGR_IOCTL_ENABLE_DES_POWER _IO('o',   16)
#define CDI_MGR_IOCTL_DISABLE_DES_POWER _IO('o',   17)

When I enable power though - I still can’t communicate with it. How do you use ioctl to power up the deserializer at /dev/cdi-mgr.0.a? I have also tried trying to figure out how to use debugfs as well.

Thanks!

Why do you need to communicate the deserializer through I2C? You should do your application development based on SIPL frameworks or DriveWorks. You may consider trying CheckModuleStatus() call in nvsipl_camera source, as it should power on the deserializer.

Because we have other use cases and things we want to do beside nvsipl. I2C should be something we can do, and the ioctls are there. So - why I need I don’t think is really relevant. I just want to know how to use the ioctls so we can use common tools like i2ctransfer without having to run an entire nvsipl program. Based on what I have seen in the cdi-mgr module - it appears that should be possible, but obviously I am missing some steps.

Also, why is libnvsipl*.so stripped? I frequently find myself debugging and hitting stripped binaries.

According to this in the device tree in sipl_devblk_0:

			tca9539 {
				i2c-bus = <7>;
				addr = <0x74>;  /* 7 bit slave address */
				reg_len = <8>;  /* 8 bit register length */
				dat_len = <8>;  /* 8 bit data length */
			};

This expander controls the power to the deserializer - right - at power port 0?

power_port = <0>;

Should adding this keyword tp the pwr_ctrl section

default-power-on;

Turn the power on to the deserializer after cdi-mgr / cdi-dev take control? I have tried it and would expect that:

sudo i2ctransfer -y -f 0 w2@0x29 0x00 0x0d r1

should return 0xa0, but instead it returns an I/O error. It only works when nvsipl_camera is running.

So - what should I try next to achieve I2C communication without having to start an nvsipl process?

Thanks!

Your inquiry regarding custom camera modules and related functionalities, such as the serializer and the tca9539 I/O expander, is beyond the scope of forum support. This information is specifically a part of the PDK or an extra camera development package, but not included in the SDK.

Please reach out to your NVIDIA representative for further discussion.

Is there a PDK forum? Because I have access to the PDK.

There is no dedicated forum for PDK support. If you have access to the PDK, I assume that you should have another support channel. I recommend reaching out to your team to verify this.

In the meantime, I’ll check it on our side and provide any updates.

Ehhh - I figured it out. After boot:

sudo i2cset 7 0x74 0x3 0x1 <----turn deserializer on
sudo i2cset 7 0x74 0x3 0x0 <---- turn deserializer off

1 Like