I’m trying to configure an AGX Orin to receive data from a GMSL2 deserialiser (MAX9296) with a MIPI lane rate of greater than 1.5 Gbps.
I can successfully receive frames with the lane rate set to 1.5 Gbps (and below). In this configuration, I have
serdes_pix_clk_hz set to
375000000 Hz in the device tree. The interface is using all four lanes, and the bits-per-pixel is set to 16 (YUV data from an external ISP). This gives a MIPI lane rate of ((375000000 * 16) / 4) = 1,500,000,000 bits/second.
I understand that I’ll need to enable deskewing to work with lane rates above 1.5 Gbps, but it’s not clear how to do this. I’ve tried adding
deskew_initial_enable = "true"; to the device tree, but it looks like this is only used if the
serdes_pix_clk_hz is greater than or equal to
750000000 Hz (this check is in the
deskew_setup() function in
csi.c). For our four lane, 16 bpp configuration, a
serdes_pix_clk_hz value of
750000000 equates to a lane rate of 3 Gbps, which is higher than the maximum rate supported by the Orin (2.5 Gbps).
If I change the threshold in
csi.c, I get a kernel panic in
nvcsi_deskew_setup() as it tries to access a NULL pointer (
mc_csi isn’t initialised). It appears that the
nvcsi_deskew_platform_setup() function is never called, which is responsible for initialising that variable. This function was called in kernel 4.9, but isn’t called in 5.10.
- What is the correct
serdes_pix_clk_hzvalue for a 2.5 Gbps lane rate, assuming that all four lanes are used, and that the bits-per-pixel is 16?
- How do I enable deskewing for a given CSI port?
- Do I need to add a call to the