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.
Questions:
- What is the correct
serdes_pix_clk_hz
value 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
nvcsi_deskew_platform_setup()
function somewhere?