Hello. We made board with referring i.MX8QMMEK.
After we modified device-tree, here's the result.
root@imx8qmmek:~# dmesg | grep "mxc"
[ 1.976687] mxc-isi 58100000.isi: mxc_isi.0 registered successfully
[ 1.983583] mxc-isi 58110000.isi: mxc_isi.1 registered successfully
[ 1.997486] mxc-isi 58120000.isi: mxc_isi.2 registered successfully
[ 2.004343] mxc-isi 58130000.isi: mxc_isi.3 registered successfully
[ 2.011198] mxc-isi 58140000.isi: mxc_isi.4 registered successfully
[ 2.018046] mxc-isi 58150000.isi: mxc_isi.5 registered successfully
[ 2.024911] mxc-isi 58160000.isi: mxc_isi.6 registered successfully
[ 2.031747] mxc-isi 58170000.isi: mxc_isi.7 registered successfully
[ 2.564748] mxc-mipi-csi2 58227000.csi: lanes: 4, name: mxc-mipi-csi2.0
[ 2.592724] mxc-mipi-csi2 58247000.csi: lanes: 4, name: mxc-mipi-csi2.1
[ 8.922146] mx8-img-md: Registered mxc_isi.0.capture as /dev/video2
[ 8.939080] mx8-img-md: Registered mxc_isi.1.capture as /dev/video3
[ 8.955665] mx8-img-md: Registered mxc_isi.2.capture as /dev/video4
[ 8.967181] mx8-img-md: Registered mxc_isi.3.capture as /dev/video5
[ 9.013098] mx8-img-md: Registered mxc_isi.4.capture as /dev/video6
[ 9.021249] mx8-img-md: Registered mxc_isi.5.capture as /dev/video7
[ 9.030102] mx8-img-md: Registered mxc_isi.6.capture as /dev/video8
[ 9.042226] mx8-img-md: Registered mxc_isi.7.capture as /dev/video9
[ 9.071250] mx8-img-md: created link [mxc_isi.0] => [mxc_isi.0.capture]
[ 9.079905] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.0]
[ 9.088083] mx8-img-md: created link [mxc_isi.1] => [mxc_isi.1.capture]
[ 9.096928] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.1]
[ 9.105247] mx8-img-md: created link [mxc_isi.2] => [mxc_isi.2.capture]
[ 9.115808] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.2]
[ 9.127793] mx8-img-md: created link [mxc_isi.3] => [mxc_isi.3.capture]
[ 9.142346] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.3]
[ 9.153588] mx8-img-md: created link [mxc_isi.4] => [mxc_isi.4.capture]
[ 9.167270] mx8-img-md: created link [mxc-mipi-csi2.1] => [mxc_isi.4]
[ 9.181246] mx8-img-md: created link [mxc_isi.5] => [mxc_isi.5.capture]
[ 9.234037] mx8-img-md: created link [mxc-mipi-csi2.1] => [mxc_isi.5]
[ 9.240650] mx8-img-md: created link [mxc_isi.6] => [mxc_isi.6.capture]
[ 9.252993] mx8-img-md: created link [mxc-mipi-csi2.1] => [mxc_isi.6]
[ 9.260534] mx8-img-md: created link [mxc_isi.7] => [mxc_isi.7.capture]
[ 9.275835] mx8-img-md: created link [mxc-mipi-csi2.1] => [mxc_isi.7]
[ 9.275850] mx8-img-md: created link [eocam_mipi 2-006a] => [mxc-mipi-csi2.0]
[ 9.299886] mx8-img-md: created link [ircam_mipi 3-003c] => [mxc-mipi-csi2.1]
[ 9.317470] mxc-md bus@58000000:camera: mxc_md_create_links
[ 9.469091] mxc-jpeg 58400000.jpegdec: decoder device registered as /dev/video10 (81,14)
[ 9.496812] mxc-jpeg 58450000.jpegenc: encoder device registered as /dev/video11 (81,15)
eocam and ircam are our v4l2 device driver to receive MIPI CSI frame.
It seems there's no error at all. But when we check to see camera frame using Gstreamer, there's no frame.
So, we set printk message on imx8-isi-core.c's interrupt handler named 'mxc_isi_irq_handler'.
But there's no printk message displayed on kernel console. It means, there's no interrupt occurred.
I don't know why.
The below is our MIPI device-tree.
解決済! 解決策の投稿を見る。
Dear community,
I figured out why there's no interrupt at ISI.
It was because of poor signal integrity + differential impedance matching of our board's connector/PCB pattern.
After temporary HW handling, I finally got intermittent interrupt.
Our HW team now working on this to solve the issue totally.
There was no reason that MIPI doesn't work in terms of SW. It's been a exciting and rough journey.
Thanks!
do you mind sharing the result when you use "v4l2-ctl --list-device"
we only tested 4x1280*800@30Hz, how about just enable one camera? is it ok? default bsp uses 24M mclk, what clock do you set for your new mclk now?
Actaully, that camera is FPGA. FPGA sends video frame. And mclk is unnecessary for our topology.
If 1280*800@30Hz with 4lane is only tested, 1920x1080@60Hz with 4lane can have a issue like this interrupt things?
not the same issue, refer to your settings, you use virtual channel, I need more your project information, I mailed to you pls check
In the other post, the MIPI CSI2 CSR PLM_CTRL[0x000] is 0x801, but why My MIPI CSI2 CSR PLM_CTRL[0x000] is 0x000?
In the code below, code set registers including PLM_CTRL.
thanks for your dts files, I reviewed them and I found you disable the virtual channels, since you use all of ISI, you need enable the virtual channels to map the video from mipi csi to the different ISI, pls enable it and try it again
Actually, Our camera#1 which has MIPI CSI-2 4-lane will connect to MIPI CSI-2 ch0 on i.MX8QM, camera#2 which also has same 4-lane will connect to MIPI CSI-2 ch1.
So, I disabled virtual-channel property in device-tree and also, I originally set all isi0-isi7 property but as you hinted about virtual-channel and isi things, I disabled isi1 to isi3 and isi5 to isi7, only set isi0(for MIPI CSI-2 ch0) and isi4(for MIPI CSI-2 ch1). Like the below.
But, above aspect doesn't work. Still isi interrupt doesn't occurred.
I suggest that you can refer to the nxp dts file as below which enable two camera to the different MIPI CSI
https://github.com/nxp-imx/linux-imx/blob/lf-6.1.y/arch/arm64/boot/dts/freescale/imx8qm-mek.dts
If input MIPI CSI-2 video frame's waveform is distorted or level is not matched with MIPI standard, does the below scenario make sense??
1. Pixel DMA in isi will not recognize input as video frame
2. For isi, there's no input video frame that recognized, DMA will not work
3. So, pixel DMA will not generate interrupt to GiC, so isi interrupt handler will never invoke.
Thanks.
In our design, we use FPGA as camera that start sending frame without configure using i2c.
So, we removed i2c.
In our device-tree, we put our camera property at "i2c_mipi_csi0" which there's nothing connected to that i2c pin, just floating in hardware.
Is this matter?
I don't know why isi's interrupt doesn't occurred when input MIPI frame waveform quality is fine.
Dear community,
I figured out why there's no interrupt at ISI.
It was because of poor signal integrity + differential impedance matching of our board's connector/PCB pattern.
After temporary HW handling, I finally got intermittent interrupt.
Our HW team now working on this to solve the issue totally.
There was no reason that MIPI doesn't work in terms of SW. It's been a exciting and rough journey.
Thanks!