Xavier NX: Using multiple MIPI channels to increase data throughput

Hello All,

I am currently working on a project that requires up to 20Gbps of data to be transferred to the Xavier NX GPU. Is it possible at the kernel level to aggregate video data from multiple MIPI inputs into one stream? I know from research that the ISP interface is accessible by some kernel drivers, however, I was not able to find a register map of the ISP describing possible readable status messages/source ID numbers from the hardware PHY.

Does anyone know of any examples relating to using multiple MIPI channels to increase data bandwidth of 1 stream to the GPU?

Thanks for any help,
Chance

hello chance189 ,

may I know what’s your actual use-case.
if you’re using DPHY, it’s 2.5Gbps per lane, so you’ll need 8-lane configuration to achieve 20-Gbps.
if that’s CPHY, than it’s 6.85Gbps per lane, you’ll only need 3-lane to achieve that.

Hello @JerryChang

The use case would be with an FPGA that can produce a maximum TX MIPI channel of 1 clk + 4 data lanes using the D-PHY architecture, meaning I can only go up to 10Gbps for one channel. The FPGA does not support 1x8 MIPI architecture, but can support numerous 4 lane channels for sending MIPI data. For scalability and dealing with possible overhead issues (I’m going to be using 20Gbps of raw data for current use case, but want to be able to support up to the Xavier NX’s maximum of 30Gbps) I wanted to have three of the 4 lane channels, each acting as a separate link that I could stitch together on the other end.

The idea I had was single high speed camera input that could be split and reordered on the GPU side to maximize flexibility, i.e:

20-30Gbps high frame rate stream → sub stream assignment based on frame number → send via designated mipi channel → Jetson side concatenate frames in kernel driver after frame is received by ISP → make DMA memory address accessible to CUDA and or user apps, swap DMA address buffer as needed based on read ptr of application.

Would the above possibly work? Are there examples of attempts using this type of restructuring of image stream to increase bandwidth limitations of MIPI CSI-2? Is there a frame count register available in the ISP for frame counting and reordering on GPU kernel side?

I found this link regarding another user wanting 1x12 MIPI, but I am strictly constrained to 3 x 4 lane mipi.

Link: CSI Interface -- one 12 lanes configuration possible or not???

Thanks,
Chance

hello chance189,

if you’re working with the latest release (i.e. r32.6.1), there’s implementation added for Xavier to have gang mode support.
it means you’re able to enable 2x 4-lane to use the gang mode with 8 CSI lanes.
please check kernel drivers for reference,
for example,
$L4T_Sources/r32.6.1/Linux_for_Tegra/source/public/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c
and
$L4T_Sources/r32.6.1/Linux_for_Tegra/source/public/kernel/nvidia/drivers/media/platform/tegra/camera/vi/channel.c


you cannot enable 3x 4-lane as single input source since it only support top/bottom or left/right gang mode currently.

1 Like