Hi Martin, On Tue, May 25, 2021 at 09:32:54AM +0200, Martin Kepplinger wrote: > Am Freitag, dem 21.05.2021 um 16:36 +0300 schrieb Laurent Pinchart: > > On Fri, May 21, 2021 at 01:02:30PM +0200, Martin Kepplinger wrote: > > > Am Freitag, dem 21.05.2021 um 12:43 +0300 schrieb Laurent Pinchart: > > > > On Fri, May 21, 2021 at 11:25:20AM +0200, Martin Kepplinger wrote: [snip] > > > > > media-ctl --set-v4l2 "'csi':0 [fmt:SGBRG10/640x480 colorspace:raw]" > > > > > media-ctl --set-v4l2 "'imx8mq-mipi-csi2.0':0 [fmt:SGBRG10/640x480 colorspace:raw]" > > > > > media-ctl -l "'hi846 2-0020':0 -> 'imx8mq-mipi-csi2.0':0 [1]" > > > > > > > > > > which gets me: > > > > > > > > > > Device topology > > > > > - entity 1: csi (2 pads, 2 links) > > > > > type V4L2 subdev subtype Unknown flags 0 > > > > > device node name /dev/v4l-subdev0 > > > > > pad0: Sink > > > > > [fmt:SGBRG10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] > > > > > <- "imx8mq-mipi-csi2.0":1 [ENABLED,IMMUTABLE] > > > > > pad1: Source > > > > > [fmt:SGBRG10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] > > > > > -> "csi capture":0 [ENABLED,IMMUTABLE] > > > > > > > > > > - entity 4: csi capture (1 pad, 1 link) > > > > > type Node subtype V4L flags 0 > > > > > device node name /dev/video0 > > > > > pad0: Sink > > > > > <- "csi":1 [ENABLED,IMMUTABLE] > > > > > > > > > > - entity 10: imx8mq-mipi-csi2.0 (2 pads, 2 links) > > > > > type V4L2 subdev subtype Unknown flags 0 > > > > > device node name /dev/v4l-subdev1 > > > > > pad0: Sink > > > > > [fmt:SGBRG10_1X10/640x480] > > > > > <- "hi846 2-0020":0 [ENABLED] > > > > > pad1: Source > > > > > [fmt:SGBRG10_1X10/640x480] > > > > > -> "csi":0 [ENABLED,IMMUTABLE] > > > > > > > > > > - entity 15: hi846 2-0020 (1 pad, 1 link) > > > > > type V4L2 subdev subtype Sensor flags 0 > > > > > device node name /dev/v4l-subdev2 > > > > > pad0: Source > > > > > [fmt:SGBRG10_1X10/640x480 field:none colorspace:raw] > > > > > -> "imx8mq-mipi-csi2.0":0 [ENABLED] > > > > > > > > This looks better. > > > > > > > > > but streaming still fails with: > > > > > > > > > > [ 352.255129] imx7-csi 30a90000.csi1_bridge: media bus code not > > > > > compatible with the pixel format set on the video node: 1 != 0 > > > > > > > > What is the capture command line ? Can you trace this (I assume the > > > > message is printed by capture_validate_fmt(), it's not present in > > > > mainline so I don't know what 1 and 0 correspond to, even though I > > > > suspect they would be IPUV3_COLORSPACE_* values) to see why it fails > > > > ? > > > > > > capture command: > > > > > > v4l2-ctl -d "/dev/v4l/by-path/platform-30a90000.csi1_bridge-video- > > > index0" --set-fmt-video=width=640,height=480 --stream-mmap > > > --stream-to=test.raw --stream-count=1 > > > > > > I'll have to continue after the weekend, but let's share some logs. > > > Yes, "1 != 0" is from capture_validate_fmt(): > > > > > > priv->vdev.cc->cs != cc->cs > > > > > > When I print the format the imx_media_find_mbus_format() finds and > > > do: > > > > > > media-ctl --set-v4l2 "'csi':0 [fmt:SGBRG10/640x480 colorspace:raw]" > > > > > > I see: > > > > > > [ 184.251144] mc: media_release: Media Release > > > [ 184.254397] selected specific mbus code 0 for list nr 0 (fourcc 0x59565955) > > > [ 184.264564] selected specific mbus code 0 for list nr 0 (fourcc 0x59565955) > > > [ 184.274763] selected specific mbus code 0 for list nr 21 (fourcc 0x36314247) > > > [ 184.285102] selected specific mbus code 0 for list nr 21 (fourcc 0x36314247) > > > [ 184.295383] selected specific mbus code 0 for list nr 21 (fourcc 0x36314247) > > > [ 184.305752] selected specific mbus code 0 for list nr 21 (fourcc 0x36314247) > > > > > > 21 is the correct bayer format I want, but there's 0, so > > > "MEDIA_BUS_FMT_UYVY8_2X8" found the first 2 times. That is > > > IPUV3_COLORSPACE_YUV (1) while the correct Bayer format 21 is > > > IPUV3_COLORSPACE_RGB (0). > > > > > > so some format settings not yet correct. > > > > You need to specify the capture pixel format to v4l2-ctl. The driver > > defaults to YUYV (I think) otherwise. The CSI bridge will pad data with > > 0's on the right, so you need SGBRG16 (if I recall correctly, try > > SGRBG10 if it doesn't work). > > right, now with: > > v4l2-ctl -d "/dev/v4l/by-path/platform-30a90000.csi1_bridge-video- > index0" --set-fmt-video=width=640,height=480,pixelformat='GB16' > --stream-mmap --stream-to=test.raw --stream-count=1 > > indeed the colorspace mismatch is gone. > > __media_pipeline_start returns broken pipe because of: > link validation failed for 'hi846 2-0020':0 -> 'imx8mq-mipi-csi2.0':0, error -32: > > imx7-csi 30a90000.csi1_bridge: walk: returning entity 'hi846 2-0020' > imx7-csi 30a90000.csi1_bridge: walk: returning entity 'imx8mq-mipi-csi2.0' > hi846 2-0020: hi846: starting hi846_get_format > hi846 2-0020: Get format w=640 h=480 code=0x300e colorspace=0xb > imx7-csi 30a90000.csi1_bridge: v4l2_subdev_link_validate_default: field does not match (source 1, sink 0) > imx7-csi 30a90000.csi1_bridge: v4l2_subdev_link_validate_default: link was "hi846 2-0020":0 -> "imx8mq-mipi-csi2.0":0 > imx7-csi 30a90000.csi1_bridge: link validation failed for 'hi846 2-0020':0 -> 'imx8mq-mipi-csi2.0':0, error -32 > ... > imx7-csi 30a90000.csi1_bridge: pipeline start failed with -32 > > > then I added the init_cfg() callback (that sets sink field to NONE) and > I could stream frames. Nice :-) > So the v4l2/mc side of things looks ok, despite the one thing: > > Also, now when saying "--list-formats-ext" on the video node, it lists > all formats that the mipi driver supports (since it doesn't ask the > sensor anymore about that). That seems to be wrong. That's expected. You can restrict the enumerated formats to the ones matching a given media bus code by setting the mbus_code field of struct v4l2_fmtdesc ([1]). [1] https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-enum-fmt.html#c.V4L.v4l2_fmtdesc > Also, the frames are all black, so I'll need to debug the driver side > of things. Indeed :-) > But I again append the current driver in case you want to have a look. I'm afraid I don't have time right now, but I'll try to review it when you'll post the patches. It'd be curious to try the libcamera simple pipeline handler based on that code. > thanks so much for walking through this with me :) I won't forget the > dt properties and upstreaming - after I get correct frames. -- Regards, Laurent Pinchart