Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
@ 2023-07-08  0:27 Tim Harvey
  2023-07-08  1:10 ` Adam Ford
  0 siblings, 1 reply; 9+ messages in thread
From: Tim Harvey @ 2023-07-08  0:27 UTC (permalink / raw)
  To: Laurent Pinchart, Linux ARM Mailing List, linux-media,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Adam Ford,
	Schrempf Frieder

Greetings,

I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
following details:
- camera is a RaspberryPi Camera v2 -
https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
- has its own on-board 24MHz osc so no clock is required from the baseboard
- pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
IMX8MP GPIO1_IO1 so we use that as a gpio regulator
- MIPI_CSI1 lanes 0 and 1 are used

I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
DT nodes to imx8mp.dtsi [1] as follows:

#include <dt-bindings/gpio/gpio.h>
#include "imx8mp-pinfunc.h"

/dts-v1/;
/plugin/;

&{/} {
        compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";

        reg_cam: regulator-cam {
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_reg_cam>;
                compatible = "regulator-fixed";
                regulator-name = "reg_cam";
                gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
                enable-active-high;
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
        };

        cam24m: cam24m {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <24000000>;
                clock-output-names = "cam24m";
        };
};

&i2c3 {
        #address-cells = <1>;
        #size-cells = <0>;

        imx219: sensor@10 {
                compatible = "sony,imx219";
                reg = <0x10>;
                clocks = <&cam24m>;
                VDIG-supply = <&reg_cam>;

                port {
                        /* MIPI CSI-2 bus endpoint */
                        imx219_to_mipi_csi2: endpoint {
                                remote-endpoint = <&mipi_csi_0_in>;
                                clock-lanes = <0>;
                                data-lanes = <1 2>;
                                link-frequencies = /bits/ 64 <456000000>;
                        };
                };
        };
};

&mipi_csi_0 {
        status = "okay";

        ports {
                port@0 {
                        mipi_csi_0_in: endpoint {
                                remote-endpoint = <&imx219_to_mipi_csi2>;
                                data-lanes = <1 2>;
                        };
                };
        };
};

&iomuxc {
        pinctrl_reg_cam: regcamgrp {
                fsl,pins = <
                        MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
                >;
        };
};

imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
not clear what to do with that:
imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
imx-mipi-csis: probe of 32e40000.csi failed with error -2

Any suggestions?

Best regards,

Tim
[1] https://patchwork.linuxtv.org/project/linux-media/patch/20230418153104.21337-2-laurent.pinchart@ideasonboard.com/

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-08  0:27 imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1 Tim Harvey
@ 2023-07-08  1:10 ` Adam Ford
  2023-07-11  0:58   ` Tim Harvey
  0 siblings, 1 reply; 9+ messages in thread
From: Adam Ford @ 2023-07-08  1:10 UTC (permalink / raw)
  To: Tim Harvey
  Cc: Laurent Pinchart, Linux ARM Mailing List, linux-media,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
>
> Greetings,
>
> I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> following details:
> - camera is a RaspberryPi Camera v2 -
> https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> - has its own on-board 24MHz osc so no clock is required from the baseboard
> - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> - MIPI_CSI1 lanes 0 and 1 are used
>
> I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> DT nodes to imx8mp.dtsi [1] as follows:
>
> #include <dt-bindings/gpio/gpio.h>
> #include "imx8mp-pinfunc.h"
>
> /dts-v1/;
> /plugin/;
>
> &{/} {
>         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
>
>         reg_cam: regulator-cam {
>                 pinctrl-names = "default";
>                 pinctrl-0 = <&pinctrl_reg_cam>;
>                 compatible = "regulator-fixed";
>                 regulator-name = "reg_cam";
>                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
>                 enable-active-high;
>                 regulator-min-microvolt = <1800000>;
>                 regulator-max-microvolt = <1800000>;
>         };
>
>         cam24m: cam24m {
>                 compatible = "fixed-clock";
>                 #clock-cells = <0>;
>                 clock-frequency = <24000000>;
>                 clock-output-names = "cam24m";
>         };
> };
>
> &i2c3 {
>         #address-cells = <1>;
>         #size-cells = <0>;
>
>         imx219: sensor@10 {
>                 compatible = "sony,imx219";
>                 reg = <0x10>;
>                 clocks = <&cam24m>;
>                 VDIG-supply = <&reg_cam>;
>
>                 port {
>                         /* MIPI CSI-2 bus endpoint */
>                         imx219_to_mipi_csi2: endpoint {
>                                 remote-endpoint = <&mipi_csi_0_in>;
>                                 clock-lanes = <0>;
>                                 data-lanes = <1 2>;
>                                 link-frequencies = /bits/ 64 <456000000>;
>                         };
>                 };
>         };
> };
>
> &mipi_csi_0 {
>         status = "okay";
>
>         ports {
>                 port@0 {
>                         mipi_csi_0_in: endpoint {
>                                 remote-endpoint = <&imx219_to_mipi_csi2>;
>                                 data-lanes = <1 2>;
>                         };
>                 };
>         };
> };
>
> &iomuxc {
>         pinctrl_reg_cam: regcamgrp {
>                 fsl,pins = <
>                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
>                 >;
>         };
> };
>
> imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> not clear what to do with that:
> imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> imx-mipi-csis: probe of 32e40000.csi failed with error -2
>
> Any suggestions?

I think the port needs to point to an ISI node or a ISP node.
Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
referencing, it appears that node@1 is missing.

Check out:

https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d

See if that helps.

adam


>
> Best regards,
>
> Tim
> [1] https://patchwork.linuxtv.org/project/linux-media/patch/20230418153104.21337-2-laurent.pinchart@ideasonboard.com/

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-08  1:10 ` Adam Ford
@ 2023-07-11  0:58   ` Tim Harvey
  2023-07-11  1:08     ` Adam Ford
  0 siblings, 1 reply; 9+ messages in thread
From: Tim Harvey @ 2023-07-11  0:58 UTC (permalink / raw)
  To: Adam Ford, linux-media
  Cc: Laurent Pinchart, Linux ARM Mailing List, NXP Linux Team,
	Sascha Hauer, Shawn Guo, Krzysztof Kozlowski, Jacopo Mondi,
	Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
>
> On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> >
> > Greetings,
> >
> > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > following details:
> > - camera is a RaspberryPi Camera v2 -
> > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > - MIPI_CSI1 lanes 0 and 1 are used
> >
> > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > DT nodes to imx8mp.dtsi [1] as follows:
> >
> > #include <dt-bindings/gpio/gpio.h>
> > #include "imx8mp-pinfunc.h"
> >
> > /dts-v1/;
> > /plugin/;
> >
> > &{/} {
> >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> >
> >         reg_cam: regulator-cam {
> >                 pinctrl-names = "default";
> >                 pinctrl-0 = <&pinctrl_reg_cam>;
> >                 compatible = "regulator-fixed";
> >                 regulator-name = "reg_cam";
> >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> >                 enable-active-high;
> >                 regulator-min-microvolt = <1800000>;
> >                 regulator-max-microvolt = <1800000>;
> >         };
> >
> >         cam24m: cam24m {
> >                 compatible = "fixed-clock";
> >                 #clock-cells = <0>;
> >                 clock-frequency = <24000000>;
> >                 clock-output-names = "cam24m";
> >         };
> > };
> >
> > &i2c3 {
> >         #address-cells = <1>;
> >         #size-cells = <0>;
> >
> >         imx219: sensor@10 {
> >                 compatible = "sony,imx219";
> >                 reg = <0x10>;
> >                 clocks = <&cam24m>;
> >                 VDIG-supply = <&reg_cam>;
> >
> >                 port {
> >                         /* MIPI CSI-2 bus endpoint */
> >                         imx219_to_mipi_csi2: endpoint {
> >                                 remote-endpoint = <&mipi_csi_0_in>;
> >                                 clock-lanes = <0>;
> >                                 data-lanes = <1 2>;
> >                                 link-frequencies = /bits/ 64 <456000000>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &mipi_csi_0 {
> >         status = "okay";
> >
> >         ports {
> >                 port@0 {
> >                         mipi_csi_0_in: endpoint {
> >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> >                                 data-lanes = <1 2>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &iomuxc {
> >         pinctrl_reg_cam: regcamgrp {
> >                 fsl,pins = <
> >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> >                 >;
> >         };
> > };
> >
> > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > not clear what to do with that:
> > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> >
> > Any suggestions?
>
> I think the port needs to point to an ISI node or a ISP node.
> Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> referencing, it appears that node@1 is missing.
>
> Check out:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
>
> See if that helps.
>
> adam
>

Hi Adam,

Thanks for the info. I didn't realize those patches were already in
linux-next and I missed the fact that the ISI was related to the CSI
(so I was missing the ISI patch and enabling that driver).

I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
nodes to the imx8mp.dtsi with the following dt fragment:
#include <dt-bindings/gpio/gpio.h>

#include "imx8mp-pinfunc.h"

/dts-v1/;
/plugin/;

&{/} {
        compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";

        reg_cam: regulator-cam {
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_reg_cam>;
                compatible = "regulator-fixed";
                regulator-name = "reg_cam";
                gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
                enable-active-high;
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
        };

        cam24m: cam24m {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <24000000>;
                clock-output-names = "cam24m";
        };
};

&i2c4 {
        #address-cells = <1>;
        #size-cells = <0>;

        imx219: sensor@10 {
                compatible = "sony,imx219";
                reg = <0x10>;
                clocks = <&cam24m>;
                VDIG-supply = <&reg_cam>;

                port {
                        /* MIPI CSI-2 bus endpoint */
                        imx219_to_mipi_csi2: endpoint {
                                remote-endpoint = <&mipi_csi_0_in>;
                                clock-lanes = <0>;
                                data-lanes = <1 2>;
                                link-frequencies = /bits/ 64 <456000000>;
                        };
                };
        };
};

&isi_0 {
        status = "okay";
};

&mipi_csi_0 {
        status = "okay";

        ports {
                port@0 {
                        mipi_csi_0_in: endpoint {
                                remote-endpoint = <&imx219_to_mipi_csi2>;
                                data-lanes = <1 2>;
                        };
                };
        };
};

&iomuxc {
        pinctrl_reg_cam: regcamgrp {
                fsl,pins = <
                        MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
                >;
        };
};

Now I'm getting:
# dmesg | grep imx219
[    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
[    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
[    5.520396] imx219 2-0010: Consider updating driver imx219 to match
on endpoints
# dmesg | grep mipi
[    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
# cat /sys/bus/media/devices/media*/model
FSL Capture Media Device
hantro-vpu
hantro-vpu
# cat /sys/class/video4linux/video*/name
mxc_isi.0.capture
mxc_isi.1.capture
mxc_isi.m2m
nxp,imx8mm-vpu-g1-dec
nxp,imx8mq-vpu-g2-dec
# media-ctl /dev/media0 -p
Media controller API version 6.5.0

Media device information
------------------------
driver          mxc-isi
model           FSL Capture Media Device
serial
bus info        platform:32e00000.isi
hw revision     0x0
driver version  6.5.0

Device topology
- entity 1: crossbar (5 pads, 4 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        pad0: Sink
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:lim-range]
                <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
        pad1: Sink
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:lim-range]
        pad2: Sink
                <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
        pad3: Source
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
        pad4: Source
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]

- entity 7: mxc_isi.0 (2 pads, 2 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev1
        pad0: Sink
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":3 [ENABLED,IMMUTABLE]
        pad1: Source
                [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]

- entity 10: mxc_isi.0.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video0
        pad0: Sink
                <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]

- entity 18: mxc_isi.1 (2 pads, 2 links)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
        pad0: Sink
                [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":4 [ENABLED,IMMUTABLE]
        pad1: Source
                [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]

- entity 21: mxc_isi.1.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video1
        pad0: Sink
                <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]

- entity 29: mxc_isi.output (1 pad, 1 link)
             type Node subtype V4L flags 0
        pad0: Source
                -> "crossbar":2 [ENABLED,IMMUTABLE]

- entity 36: csis-32e40000.csi (2 pads, 2 links)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
        pad0: Sink
                [fmt:UYVY8_1X16/640x480 field:none
colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                <- "imx219 3-0010":0 []
        pad1: Source
                [fmt:UYVY8_1X16/640x480 field:none
colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                -> "crossbar":0 [ENABLED,IMMUTABLE]

- entity 41: imx219 3-0010 (1 pad, 1 link)
             type V4L2 subdev subtype Sensor flags 0
             device node name /dev/v4l-subdev4
        pad0: Source
                [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(8,8)/3280x2464
                 crop:(8,8)/3280x2464]
                -> "csis-32e40000.csi":0 []

# enable imx219 to csi link
media-ctl --device /dev/media0 --links "'imx219
3-0010':0->'csis-32e40000.csi':0[1]"

# v4l2-ctl --device /dev/video0 --all
Driver Info:
        Driver name      : mxc-isi
        Card type        : mxc-isi-cap
        Bus info         : platform:32e00000.isi
        Driver version   : 6.5.0
        Capabilities     : 0xa4201000
                Video Capture Multiplanar
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x24201000
                Video Capture Multiplanar
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : mxc-isi
        Model            : FSL Capture Media Device
        Serial           :
        Bus info         : platform:32e00000.isi
        Media version    : 6.5.0
        Hardware revision: 0x00000000 (0)
        Driver version   : 6.5.0
Interface Info:
        ID               : 0x0300000c
        Type             : V4L Video
Entity Info:
        ID               : 0x0000000a (10)
        Name             : mxc_isi.0.capture
        Function         : V4L2 I/O
        Pad 0x0100000b   : 0: Sink
          Link 0x0200000e: from remote pad 0x1000009 of entity
'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (mxc_isi.0.capture: ok)
Format Video Capture Multiplanar:
        Width/Height      : 640/480
        Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
        Field             : None
        Number of planes  : 1
        Flags             :
        Colorspace        : sRGB
        Transfer Function : sRGB
        YCbCr/HSV Encoding: ITU-R 601
        Quantization      : Limited Range
        Plane 0           :
           Bytes per Line : 640
           Size Image     : 307200

User Controls

                horizontal_flip 0x00980914 (bool)   : default=0 value=0
                  vertical_flip 0x00980915 (bool)   : default=0 value=0
                alpha_component 0x00980929 (int)    : min=0 max=255
step=1 default=0 value=0

# try to capture a frame
v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
                VIDIOC_STREAMON returned -1 (Broken pipe)
^^^ fails... not sure why

# try to use gstreamer
gst-launch-1.0 v4l2src device=/dev/video0 !
video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
to allocate required memory.
Additional debug info:
../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Buffer pool activation failed
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Internal data stream error.
Execution ended after 0:00:00.005517125
Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Setting pipeline to NULL ...
Freeing pipeline ...
^^^ not sure what the memory allocation failure is about. It was
complaining about cma memory until I added cma=256M to the cmdline

I'm now at the point where I likely need help from the video4linux and
linux-media (cc'd) gurus.

best regards,

Tim



>
> >
> > Best regards,
> >
> > Tim
> > [1] https://patchwork.linuxtv.org/project/linux-media/patch/20230418153104.21337-2-laurent.pinchart@ideasonboard.com/

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11  0:58   ` Tim Harvey
@ 2023-07-11  1:08     ` Adam Ford
  2023-07-11 22:16       ` Tim Harvey
  2023-07-12 17:34       ` Laurent Pinchart
  0 siblings, 2 replies; 9+ messages in thread
From: Adam Ford @ 2023-07-11  1:08 UTC (permalink / raw)
  To: Tim Harvey
  Cc: linux-media, Laurent Pinchart, Linux ARM Mailing List,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Mon, Jul 10, 2023 at 7:59 PM Tim Harvey <tharvey@gateworks.com> wrote:
>
> On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
> >
> > On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > >
> > > Greetings,
> > >
> > > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > > following details:
> > > - camera is a RaspberryPi Camera v2 -
> > > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > > - MIPI_CSI1 lanes 0 and 1 are used
> > >
> > > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > > DT nodes to imx8mp.dtsi [1] as follows:
> > >
> > > #include <dt-bindings/gpio/gpio.h>
> > > #include "imx8mp-pinfunc.h"
> > >
> > > /dts-v1/;
> > > /plugin/;
> > >
> > > &{/} {
> > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > >
> > >         reg_cam: regulator-cam {
> > >                 pinctrl-names = "default";
> > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > >                 compatible = "regulator-fixed";
> > >                 regulator-name = "reg_cam";
> > >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> > >                 enable-active-high;
> > >                 regulator-min-microvolt = <1800000>;
> > >                 regulator-max-microvolt = <1800000>;
> > >         };
> > >
> > >         cam24m: cam24m {
> > >                 compatible = "fixed-clock";
> > >                 #clock-cells = <0>;
> > >                 clock-frequency = <24000000>;
> > >                 clock-output-names = "cam24m";
> > >         };
> > > };
> > >
> > > &i2c3 {
> > >         #address-cells = <1>;
> > >         #size-cells = <0>;
> > >
> > >         imx219: sensor@10 {
> > >                 compatible = "sony,imx219";
> > >                 reg = <0x10>;
> > >                 clocks = <&cam24m>;
> > >                 VDIG-supply = <&reg_cam>;
> > >
> > >                 port {
> > >                         /* MIPI CSI-2 bus endpoint */
> > >                         imx219_to_mipi_csi2: endpoint {
> > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > >                                 clock-lanes = <0>;
> > >                                 data-lanes = <1 2>;
> > >                                 link-frequencies = /bits/ 64 <456000000>;
> > >                         };
> > >                 };
> > >         };
> > > };
> > >
> > > &mipi_csi_0 {
> > >         status = "okay";
> > >
> > >         ports {
> > >                 port@0 {
> > >                         mipi_csi_0_in: endpoint {
> > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > >                                 data-lanes = <1 2>;
> > >                         };
> > >                 };
> > >         };
> > > };
> > >
> > > &iomuxc {
> > >         pinctrl_reg_cam: regcamgrp {
> > >                 fsl,pins = <
> > >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> > >                 >;
> > >         };
> > > };
> > >
> > > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > > not clear what to do with that:
> > > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> > >
> > > Any suggestions?
> >
> > I think the port needs to point to an ISI node or a ISP node.
> > Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> > referencing, it appears that node@1 is missing.
> >
> > Check out:
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
> >
> > See if that helps.
> >
> > adam
> >
>
> Hi Adam,
>
> Thanks for the info. I didn't realize those patches were already in
> linux-next and I missed the fact that the ISI was related to the CSI
> (so I was missing the ISI patch and enabling that driver).
>
> I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
> nodes to the imx8mp.dtsi with the following dt fragment:
> #include <dt-bindings/gpio/gpio.h>
>
> #include "imx8mp-pinfunc.h"
>
> /dts-v1/;
> /plugin/;
>
> &{/} {
>         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
>
>         reg_cam: regulator-cam {
>                 pinctrl-names = "default";
>                 pinctrl-0 = <&pinctrl_reg_cam>;
>                 compatible = "regulator-fixed";
>                 regulator-name = "reg_cam";
>                 gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
>                 enable-active-high;
>                 regulator-min-microvolt = <1800000>;
>                 regulator-max-microvolt = <1800000>;
>         };
>
>         cam24m: cam24m {
>                 compatible = "fixed-clock";
>                 #clock-cells = <0>;
>                 clock-frequency = <24000000>;
>                 clock-output-names = "cam24m";
>         };
> };
>
> &i2c4 {
>         #address-cells = <1>;
>         #size-cells = <0>;
>
>         imx219: sensor@10 {
>                 compatible = "sony,imx219";
>                 reg = <0x10>;
>                 clocks = <&cam24m>;
>                 VDIG-supply = <&reg_cam>;
>
>                 port {
>                         /* MIPI CSI-2 bus endpoint */
>                         imx219_to_mipi_csi2: endpoint {
>                                 remote-endpoint = <&mipi_csi_0_in>;
>                                 clock-lanes = <0>;
>                                 data-lanes = <1 2>;
>                                 link-frequencies = /bits/ 64 <456000000>;
>                         };
>                 };
>         };
> };
>
> &isi_0 {
>         status = "okay";
> };
>
> &mipi_csi_0 {
>         status = "okay";
>
>         ports {
>                 port@0 {
>                         mipi_csi_0_in: endpoint {
>                                 remote-endpoint = <&imx219_to_mipi_csi2>;
>                                 data-lanes = <1 2>;
>                         };
>                 };
>         };
> };
>
> &iomuxc {
>         pinctrl_reg_cam: regcamgrp {
>                 fsl,pins = <
>                         MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
>                 >;
>         };
> };
>
> Now I'm getting:
> # dmesg | grep imx219
> [    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
> [    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
> [    5.520396] imx219 2-0010: Consider updating driver imx219 to match
> on endpoints
> # dmesg | grep mipi
> [    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
> # cat /sys/bus/media/devices/media*/model
> FSL Capture Media Device
> hantro-vpu
> hantro-vpu
> # cat /sys/class/video4linux/video*/name
> mxc_isi.0.capture
> mxc_isi.1.capture
> mxc_isi.m2m
> nxp,imx8mm-vpu-g1-dec
> nxp,imx8mq-vpu-g2-dec
> # media-ctl /dev/media0 -p
> Media controller API version 6.5.0
>
> Media device information
> ------------------------
> driver          mxc-isi
> model           FSL Capture Media Device
> serial
> bus info        platform:32e00000.isi
> hw revision     0x0
> driver version  6.5.0
>
> Device topology
> - entity 1: crossbar (5 pads, 4 links)
>             type V4L2 subdev subtype Unknown flags 0
>             device node name /dev/v4l-subdev0
>         pad0: Sink
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:lim-range]
>                 <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
>         pad1: Sink
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:lim-range]
>         pad2: Sink
>                 <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
>         pad3: Source
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:lim-range]
>                 -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
>         pad4: Source
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:lim-range]
>                 -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
>
> - entity 7: mxc_isi.0 (2 pads, 2 links)
>             type V4L2 subdev subtype Unknown flags 0
>             device node name /dev/v4l-subdev1
>         pad0: Sink
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> xfer:srgb ycbcr:601 quantization:full-range
>                  compose.bounds:(0,0)/1920x1080
>                  compose:(0,0)/1920x1080]
>                 <- "crossbar":3 [ENABLED,IMMUTABLE]
>         pad1: Source
>                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> xfer:srgb ycbcr:601 quantization:full-range
>                  crop.bounds:(0,0)/1920x1080
>                  crop:(0,0)/1920x1080]
>                 -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]
>
> - entity 10: mxc_isi.0.capture (1 pad, 1 link)
>              type Node subtype V4L flags 0
>              device node name /dev/video0
>         pad0: Sink
>                 <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
>
> - entity 18: mxc_isi.1 (2 pads, 2 links)
>              type V4L2 subdev subtype Unknown flags 0
>              device node name /dev/v4l-subdev2
>         pad0: Sink
>                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> xfer:srgb ycbcr:601 quantization:full-range
>                  compose.bounds:(0,0)/1920x1080
>                  compose:(0,0)/1920x1080]
>                 <- "crossbar":4 [ENABLED,IMMUTABLE]
>         pad1: Source
>                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> xfer:srgb ycbcr:601 quantization:full-range
>                  crop.bounds:(0,0)/1920x1080
>                  crop:(0,0)/1920x1080]
>                 -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]
>
> - entity 21: mxc_isi.1.capture (1 pad, 1 link)
>              type Node subtype V4L flags 0
>              device node name /dev/video1
>         pad0: Sink
>                 <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]
>
> - entity 29: mxc_isi.output (1 pad, 1 link)
>              type Node subtype V4L flags 0
>         pad0: Source
>                 -> "crossbar":2 [ENABLED,IMMUTABLE]
>
> - entity 36: csis-32e40000.csi (2 pads, 2 links)
>              type V4L2 subdev subtype Unknown flags 0
>              device node name /dev/v4l-subdev3
>         pad0: Sink
>                 [fmt:UYVY8_1X16/640x480 field:none
> colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
>                 <- "imx219 3-0010":0 []
>         pad1: Source
>                 [fmt:UYVY8_1X16/640x480 field:none
> colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
>                 -> "crossbar":0 [ENABLED,IMMUTABLE]
>
> - entity 41: imx219 3-0010 (1 pad, 1 link)
>              type V4L2 subdev subtype Sensor flags 0
>              device node name /dev/v4l-subdev4
>         pad0: Source
>                 [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
> xfer:srgb ycbcr:601 quantization:full-range
>                  crop.bounds:(8,8)/3280x2464
>                  crop:(8,8)/3280x2464]
>                 -> "csis-32e40000.csi":0 []
>
> # enable imx219 to csi link
> media-ctl --device /dev/media0 --links "'imx219
> 3-0010':0->'csis-32e40000.csi':0[1]"
>
> # v4l2-ctl --device /dev/video0 --all
> Driver Info:
>         Driver name      : mxc-isi
>         Card type        : mxc-isi-cap
>         Bus info         : platform:32e00000.isi
>         Driver version   : 6.5.0
>         Capabilities     : 0xa4201000
>                 Video Capture Multiplanar
>                 Streaming
>                 Extended Pix Format
>                 Device Capabilities
>         Device Caps      : 0x24201000
>                 Video Capture Multiplanar
>                 Streaming
>                 Extended Pix Format
> Media Driver Info:
>         Driver name      : mxc-isi
>         Model            : FSL Capture Media Device
>         Serial           :
>         Bus info         : platform:32e00000.isi
>         Media version    : 6.5.0
>         Hardware revision: 0x00000000 (0)
>         Driver version   : 6.5.0
> Interface Info:
>         ID               : 0x0300000c
>         Type             : V4L Video
> Entity Info:
>         ID               : 0x0000000a (10)
>         Name             : mxc_isi.0.capture
>         Function         : V4L2 I/O
>         Pad 0x0100000b   : 0: Sink
>           Link 0x0200000e: from remote pad 0x1000009 of entity
> 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
> Priority: 2
> Video input : 0 (mxc_isi.0.capture: ok)
> Format Video Capture Multiplanar:
>         Width/Height      : 640/480
>         Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
>         Field             : None
>         Number of planes  : 1
>         Flags             :
>         Colorspace        : sRGB
>         Transfer Function : sRGB
>         YCbCr/HSV Encoding: ITU-R 601
>         Quantization      : Limited Range
>         Plane 0           :
>            Bytes per Line : 640
>            Size Image     : 307200
>
> User Controls
>
>                 horizontal_flip 0x00980914 (bool)   : default=0 value=0
>                   vertical_flip 0x00980915 (bool)   : default=0 value=0
>                 alpha_component 0x00980929 (int)    : min=0 max=255
> step=1 default=0 value=0
>
> # try to capture a frame
> v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
>                 VIDIOC_STREAMON returned -1 (Broken pipe)
> ^^^ fails... not sure why
>
> # try to use gstreamer
> gst-launch-1.0 v4l2src device=/dev/video0 !
> video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
> fakesink
> Setting pipeline to PAUSED ...
> Pipeline is live and does not need PREROLL ...
> Pipeline is PREROLLED ...
> Setting pipeline to PLAYING ...
> New clock: GstSystemClock
> ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
> to allocate required memory.
> Additional debug info:
> ../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
> /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> Buffer pool activation failed
> ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> Internal data stream error.
> Execution ended after 0:00:00.005517125
> Additional debug info:
> ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> streaming stopped, reason not-negotiated (-4)
> Setting pipeline to NULL ...
> Freeing pipeline ...
> ^^^ not sure what the memory allocation failure is about. It was
> complaining about cma memory until I added cma=256M to the cmdline
>
> I'm now at the point where I likely need help from the video4linux and
> linux-media (cc'd) gurus.


The video format from the camera doesn't match the video format
through the ISI and the crossbar, so you're getting the broken pipe.
My experience with the ISI is that they all need to match since the
ISI isn't an ISP.
Laurent would likely suggest libcamera, but I haven't used it yet.
I'm waiting for the 8MP's ISP driver to get finalized.  However, the
ISI on the Nano is similar to the ISI on the Plus, so if you want to
take a look at the patch I did for the Beacon Nano board, it might
give you some ideas on how to set the video formats.  The patch I
submitted uses a different video format, but I would expect it to work
if you change the video format to the RGGB from the IMX219 camera.

Hopefully this patch [1] can give you some idea on how to set the
video formats for each of the subdevs.

adam

[1] - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi?h=v6.5-rc1&id=6bc3ea47332648a4211926ba7afc1e1fb935c71a

>
> best regards,
>
> Tim
>
>
>
> >
> > >
> > > Best regards,
> > >
> > > Tim
> > > [1] https://patchwork.linuxtv.org/project/linux-media/patch/20230418153104.21337-2-laurent.pinchart@ideasonboard.com/

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11  1:08     ` Adam Ford
@ 2023-07-11 22:16       ` Tim Harvey
  2023-07-11 22:49         ` Kieran Bingham
  2023-07-12 17:34       ` Laurent Pinchart
  1 sibling, 1 reply; 9+ messages in thread
From: Tim Harvey @ 2023-07-11 22:16 UTC (permalink / raw)
  To: Adam Ford
  Cc: linux-media, Laurent Pinchart, Linux ARM Mailing List,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Mon, Jul 10, 2023 at 6:09 PM Adam Ford <aford173@gmail.com> wrote:
>
> On Mon, Jul 10, 2023 at 7:59 PM Tim Harvey <tharvey@gateworks.com> wrote:
> >
> > On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
> > >
> > > On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > > >
> > > > Greetings,
> > > >
> > > > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > > > following details:
> > > > - camera is a RaspberryPi Camera v2 -
> > > > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > > > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > > > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > > > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > > > - MIPI_CSI1 lanes 0 and 1 are used
> > > >
> > > > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > > > DT nodes to imx8mp.dtsi [1] as follows:
> > > >
> > > > #include <dt-bindings/gpio/gpio.h>
> > > > #include "imx8mp-pinfunc.h"
> > > >
> > > > /dts-v1/;
> > > > /plugin/;
> > > >
> > > > &{/} {
> > > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > > >
> > > >         reg_cam: regulator-cam {
> > > >                 pinctrl-names = "default";
> > > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > > >                 compatible = "regulator-fixed";
> > > >                 regulator-name = "reg_cam";
> > > >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> > > >                 enable-active-high;
> > > >                 regulator-min-microvolt = <1800000>;
> > > >                 regulator-max-microvolt = <1800000>;
> > > >         };
> > > >
> > > >         cam24m: cam24m {
> > > >                 compatible = "fixed-clock";
> > > >                 #clock-cells = <0>;
> > > >                 clock-frequency = <24000000>;
> > > >                 clock-output-names = "cam24m";
> > > >         };
> > > > };
> > > >
> > > > &i2c3 {
> > > >         #address-cells = <1>;
> > > >         #size-cells = <0>;
> > > >
> > > >         imx219: sensor@10 {
> > > >                 compatible = "sony,imx219";
> > > >                 reg = <0x10>;
> > > >                 clocks = <&cam24m>;
> > > >                 VDIG-supply = <&reg_cam>;
> > > >
> > > >                 port {
> > > >                         /* MIPI CSI-2 bus endpoint */
> > > >                         imx219_to_mipi_csi2: endpoint {
> > > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > > >                                 clock-lanes = <0>;
> > > >                                 data-lanes = <1 2>;
> > > >                                 link-frequencies = /bits/ 64 <456000000>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &mipi_csi_0 {
> > > >         status = "okay";
> > > >
> > > >         ports {
> > > >                 port@0 {
> > > >                         mipi_csi_0_in: endpoint {
> > > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > > >                                 data-lanes = <1 2>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &iomuxc {
> > > >         pinctrl_reg_cam: regcamgrp {
> > > >                 fsl,pins = <
> > > >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> > > >                 >;
> > > >         };
> > > > };
> > > >
> > > > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > > > not clear what to do with that:
> > > > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > > > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> > > >
> > > > Any suggestions?
> > >
> > > I think the port needs to point to an ISI node or a ISP node.
> > > Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> > > referencing, it appears that node@1 is missing.
> > >
> > > Check out:
> > >
> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
> > >
> > > See if that helps.
> > >
> > > adam
> > >
> >
> > Hi Adam,
> >
> > Thanks for the info. I didn't realize those patches were already in
> > linux-next and I missed the fact that the ISI was related to the CSI
> > (so I was missing the ISI patch and enabling that driver).
> >
> > I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
> > nodes to the imx8mp.dtsi with the following dt fragment:
> > #include <dt-bindings/gpio/gpio.h>
> >
> > #include "imx8mp-pinfunc.h"
> >
> > /dts-v1/;
> > /plugin/;
> >
> > &{/} {
> >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> >
> >         reg_cam: regulator-cam {
> >                 pinctrl-names = "default";
> >                 pinctrl-0 = <&pinctrl_reg_cam>;
> >                 compatible = "regulator-fixed";
> >                 regulator-name = "reg_cam";
> >                 gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
> >                 enable-active-high;
> >                 regulator-min-microvolt = <1800000>;
> >                 regulator-max-microvolt = <1800000>;
> >         };
> >
> >         cam24m: cam24m {
> >                 compatible = "fixed-clock";
> >                 #clock-cells = <0>;
> >                 clock-frequency = <24000000>;
> >                 clock-output-names = "cam24m";
> >         };
> > };
> >
> > &i2c4 {
> >         #address-cells = <1>;
> >         #size-cells = <0>;
> >
> >         imx219: sensor@10 {
> >                 compatible = "sony,imx219";
> >                 reg = <0x10>;
> >                 clocks = <&cam24m>;
> >                 VDIG-supply = <&reg_cam>;
> >
> >                 port {
> >                         /* MIPI CSI-2 bus endpoint */
> >                         imx219_to_mipi_csi2: endpoint {
> >                                 remote-endpoint = <&mipi_csi_0_in>;
> >                                 clock-lanes = <0>;
> >                                 data-lanes = <1 2>;
> >                                 link-frequencies = /bits/ 64 <456000000>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &isi_0 {
> >         status = "okay";
> > };
> >
> > &mipi_csi_0 {
> >         status = "okay";
> >
> >         ports {
> >                 port@0 {
> >                         mipi_csi_0_in: endpoint {
> >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> >                                 data-lanes = <1 2>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &iomuxc {
> >         pinctrl_reg_cam: regcamgrp {
> >                 fsl,pins = <
> >                         MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
> >                 >;
> >         };
> > };
> >
> > Now I'm getting:
> > # dmesg | grep imx219
> > [    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
> > [    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
> > [    5.520396] imx219 2-0010: Consider updating driver imx219 to match
> > on endpoints
> > # dmesg | grep mipi
> > [    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
> > # cat /sys/bus/media/devices/media*/model
> > FSL Capture Media Device
> > hantro-vpu
> > hantro-vpu
> > # cat /sys/class/video4linux/video*/name
> > mxc_isi.0.capture
> > mxc_isi.1.capture
> > mxc_isi.m2m
> > nxp,imx8mm-vpu-g1-dec
> > nxp,imx8mq-vpu-g2-dec
> > # media-ctl /dev/media0 -p
> > Media controller API version 6.5.0
> >
> > Media device information
> > ------------------------
> > driver          mxc-isi
> > model           FSL Capture Media Device
> > serial
> > bus info        platform:32e00000.isi
> > hw revision     0x0
> > driver version  6.5.0
> >
> > Device topology
> > - entity 1: crossbar (5 pads, 4 links)
> >             type V4L2 subdev subtype Unknown flags 0
> >             device node name /dev/v4l-subdev0
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
> >         pad1: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >         pad2: Sink
> >                 <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
> >         pad3: Source
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
> >         pad4: Source
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
> >
> > - entity 7: mxc_isi.0 (2 pads, 2 links)
> >             type V4L2 subdev subtype Unknown flags 0
> >             device node name /dev/v4l-subdev1
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  compose.bounds:(0,0)/1920x1080
> >                  compose:(0,0)/1920x1080]
> >                 <- "crossbar":3 [ENABLED,IMMUTABLE]
> >         pad1: Source
> >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(0,0)/1920x1080
> >                  crop:(0,0)/1920x1080]
> >                 -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]
> >
> > - entity 10: mxc_isi.0.capture (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >              device node name /dev/video0
> >         pad0: Sink
> >                 <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
> >
> > - entity 18: mxc_isi.1 (2 pads, 2 links)
> >              type V4L2 subdev subtype Unknown flags 0
> >              device node name /dev/v4l-subdev2
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  compose.bounds:(0,0)/1920x1080
> >                  compose:(0,0)/1920x1080]
> >                 <- "crossbar":4 [ENABLED,IMMUTABLE]
> >         pad1: Source
> >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(0,0)/1920x1080
> >                  crop:(0,0)/1920x1080]
> >                 -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]
> >
> > - entity 21: mxc_isi.1.capture (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >              device node name /dev/video1
> >         pad0: Sink
> >                 <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]
> >
> > - entity 29: mxc_isi.output (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >         pad0: Source
> >                 -> "crossbar":2 [ENABLED,IMMUTABLE]
> >
> > - entity 36: csis-32e40000.csi (2 pads, 2 links)
> >              type V4L2 subdev subtype Unknown flags 0
> >              device node name /dev/v4l-subdev3
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/640x480 field:none
> > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> >                 <- "imx219 3-0010":0 []
> >         pad1: Source
> >                 [fmt:UYVY8_1X16/640x480 field:none
> > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> >                 -> "crossbar":0 [ENABLED,IMMUTABLE]
> >
> > - entity 41: imx219 3-0010 (1 pad, 1 link)
> >              type V4L2 subdev subtype Sensor flags 0
> >              device node name /dev/v4l-subdev4
> >         pad0: Source
> >                 [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(8,8)/3280x2464
> >                  crop:(8,8)/3280x2464]
> >                 -> "csis-32e40000.csi":0 []
> >
> > # enable imx219 to csi link
> > media-ctl --device /dev/media0 --links "'imx219
> > 3-0010':0->'csis-32e40000.csi':0[1]"
> >
> > # v4l2-ctl --device /dev/video0 --all
> > Driver Info:
> >         Driver name      : mxc-isi
> >         Card type        : mxc-isi-cap
> >         Bus info         : platform:32e00000.isi
> >         Driver version   : 6.5.0
> >         Capabilities     : 0xa4201000
> >                 Video Capture Multiplanar
> >                 Streaming
> >                 Extended Pix Format
> >                 Device Capabilities
> >         Device Caps      : 0x24201000
> >                 Video Capture Multiplanar
> >                 Streaming
> >                 Extended Pix Format
> > Media Driver Info:
> >         Driver name      : mxc-isi
> >         Model            : FSL Capture Media Device
> >         Serial           :
> >         Bus info         : platform:32e00000.isi
> >         Media version    : 6.5.0
> >         Hardware revision: 0x00000000 (0)
> >         Driver version   : 6.5.0
> > Interface Info:
> >         ID               : 0x0300000c
> >         Type             : V4L Video
> > Entity Info:
> >         ID               : 0x0000000a (10)
> >         Name             : mxc_isi.0.capture
> >         Function         : V4L2 I/O
> >         Pad 0x0100000b   : 0: Sink
> >           Link 0x0200000e: from remote pad 0x1000009 of entity
> > 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
> > Priority: 2
> > Video input : 0 (mxc_isi.0.capture: ok)
> > Format Video Capture Multiplanar:
> >         Width/Height      : 640/480
> >         Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
> >         Field             : None
> >         Number of planes  : 1
> >         Flags             :
> >         Colorspace        : sRGB
> >         Transfer Function : sRGB
> >         YCbCr/HSV Encoding: ITU-R 601
> >         Quantization      : Limited Range
> >         Plane 0           :
> >            Bytes per Line : 640
> >            Size Image     : 307200
> >
> > User Controls
> >
> >                 horizontal_flip 0x00980914 (bool)   : default=0 value=0
> >                   vertical_flip 0x00980915 (bool)   : default=0 value=0
> >                 alpha_component 0x00980929 (int)    : min=0 max=255
> > step=1 default=0 value=0
> >
> > # try to capture a frame
> > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
> >                 VIDIOC_STREAMON returned -1 (Broken pipe)
> > ^^^ fails... not sure why
> >
> > # try to use gstreamer
> > gst-launch-1.0 v4l2src device=/dev/video0 !
> > video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
> > fakesink
> > Setting pipeline to PAUSED ...
> > Pipeline is live and does not need PREROLL ...
> > Pipeline is PREROLLED ...
> > Setting pipeline to PLAYING ...
> > New clock: GstSystemClock
> > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
> > to allocate required memory.
> > Additional debug info:
> > ../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
> > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > Buffer pool activation failed
> > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > Internal data stream error.
> > Execution ended after 0:00:00.005517125
> > Additional debug info:
> > ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > streaming stopped, reason not-negotiated (-4)
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
> > ^^^ not sure what the memory allocation failure is about. It was
> > complaining about cma memory until I added cma=256M to the cmdline
> >
> > I'm now at the point where I likely need help from the video4linux and
> > linux-media (cc'd) gurus.
>
>
> The video format from the camera doesn't match the video format
> through the ISI and the crossbar, so you're getting the broken pipe.
> My experience with the ISI is that they all need to match since the
> ISI isn't an ISP.
> Laurent would likely suggest libcamera, but I haven't used it yet.
> I'm waiting for the 8MP's ISP driver to get finalized.  However, the
> ISI on the Nano is similar to the ISI on the Plus, so if you want to
> take a look at the patch I did for the Beacon Nano board, it might
> give you some ideas on how to set the video formats.  The patch I
> submitted uses a different video format, but I would expect it to work
> if you change the video format to the RGGB from the IMX219 camera.
>
> Hopefully this patch [1] can give you some idea on how to set the
> video formats for each of the subdevs.
>
> adam
>
> [1] - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi?h=v6.5-rc1&id=6bc3ea47332648a4211926ba7afc1e1fb935c71a
>

Hi Adam,

Thanks, this helped point me in the right direction and proves the
video capture device works with v4l2.

For the imx219 which can capture 640x480 raw 8bit bayer:
# configure media entities for 8-bit raw bayer 640x480
media-ctl -v -V "'imx219 3-0010':0 [fmt:SRGGB8/640x480 field:none]"
media-ctl -v -V "'crossbar':0 [fmt:SRGGB8/640x480 field:none]"
media-ctl -v -V "'mxc_isi.0':0 [fmt:SRGGB8/640x480 field:none]"
# configure for RGGB (8-bit bayer) 640x480
v4l2-ctl --device /dev/video0
--set-fmt-video=width=640,height=480,pixelformat=RGGB --verbose
# capture a frame
v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=frame.raw
--stream-count=1
convert -size 640x480 -depth 8 gray:frame.raw frame.png # convert to png
# stream to display
gst-launch-1.0 v4l2src ! \
      video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 ! \
      bayer2rgb ! fbdevsink

best regards,

Tim



Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Setting pipeline to NULL ...
Freeing pipeline ...

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11 22:16       ` Tim Harvey
@ 2023-07-11 22:49         ` Kieran Bingham
  2023-07-11 23:45           ` Tim Harvey
  0 siblings, 1 reply; 9+ messages in thread
From: Kieran Bingham @ 2023-07-11 22:49 UTC (permalink / raw)
  To: Adam Ford, Tim Harvey
  Cc: linux-media, Laurent Pinchart, Linux ARM Mailing List,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

Hi Tim,

Quoting Tim Harvey (2023-07-11 23:16:33)
> On Mon, Jul 10, 2023 at 6:09 PM Adam Ford <aford173@gmail.com> wrote:
> >
> > On Mon, Jul 10, 2023 at 7:59 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > >
> > > On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
> > > >
> > > > On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > > > >
> > > > > Greetings,
> > > > >
> > > > > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > > > > following details:
> > > > > - camera is a RaspberryPi Camera v2 -
> > > > > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > > > > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > > > > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > > > > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > > > > - MIPI_CSI1 lanes 0 and 1 are used
> > > > >
> > > > > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > > > > DT nodes to imx8mp.dtsi [1] as follows:
> > > > >
> > > > > #include <dt-bindings/gpio/gpio.h>
> > > > > #include "imx8mp-pinfunc.h"
> > > > >
> > > > > /dts-v1/;
> > > > > /plugin/;
> > > > >
> > > > > &{/} {
> > > > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > > > >
> > > > >         reg_cam: regulator-cam {
> > > > >                 pinctrl-names = "default";
> > > > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > > > >                 compatible = "regulator-fixed";
> > > > >                 regulator-name = "reg_cam";
> > > > >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> > > > >                 enable-active-high;
> > > > >                 regulator-min-microvolt = <1800000>;
> > > > >                 regulator-max-microvolt = <1800000>;
> > > > >         };
> > > > >
> > > > >         cam24m: cam24m {
> > > > >                 compatible = "fixed-clock";
> > > > >                 #clock-cells = <0>;
> > > > >                 clock-frequency = <24000000>;
> > > > >                 clock-output-names = "cam24m";
> > > > >         };
> > > > > };
> > > > >
> > > > > &i2c3 {
> > > > >         #address-cells = <1>;
> > > > >         #size-cells = <0>;
> > > > >
> > > > >         imx219: sensor@10 {
> > > > >                 compatible = "sony,imx219";
> > > > >                 reg = <0x10>;
> > > > >                 clocks = <&cam24m>;
> > > > >                 VDIG-supply = <&reg_cam>;
> > > > >
> > > > >                 port {
> > > > >                         /* MIPI CSI-2 bus endpoint */
> > > > >                         imx219_to_mipi_csi2: endpoint {
> > > > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > > > >                                 clock-lanes = <0>;
> > > > >                                 data-lanes = <1 2>;
> > > > >                                 link-frequencies = /bits/ 64 <456000000>;
> > > > >                         };
> > > > >                 };
> > > > >         };
> > > > > };
> > > > >
> > > > > &mipi_csi_0 {
> > > > >         status = "okay";
> > > > >
> > > > >         ports {
> > > > >                 port@0 {
> > > > >                         mipi_csi_0_in: endpoint {
> > > > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > > > >                                 data-lanes = <1 2>;
> > > > >                         };
> > > > >                 };
> > > > >         };
> > > > > };
> > > > >
> > > > > &iomuxc {
> > > > >         pinctrl_reg_cam: regcamgrp {
> > > > >                 fsl,pins = <
> > > > >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> > > > >                 >;
> > > > >         };
> > > > > };
> > > > >
> > > > > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > > > > not clear what to do with that:
> > > > > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > > > > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> > > > >
> > > > > Any suggestions?
> > > >
> > > > I think the port needs to point to an ISI node or a ISP node.
> > > > Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> > > > referencing, it appears that node@1 is missing.
> > > >
> > > > Check out:
> > > >
> > > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
> > > >
> > > > See if that helps.
> > > >
> > > > adam
> > > >
> > >
> > > Hi Adam,
> > >
> > > Thanks for the info. I didn't realize those patches were already in
> > > linux-next and I missed the fact that the ISI was related to the CSI
> > > (so I was missing the ISI patch and enabling that driver).
> > >
> > > I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
> > > nodes to the imx8mp.dtsi with the following dt fragment:
> > > #include <dt-bindings/gpio/gpio.h>
> > >
> > > #include "imx8mp-pinfunc.h"
> > >
> > > /dts-v1/;
> > > /plugin/;
> > >
> > > &{/} {
> > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > >
> > >         reg_cam: regulator-cam {
> > >                 pinctrl-names = "default";
> > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > >                 compatible = "regulator-fixed";
> > >                 regulator-name = "reg_cam";
> > >                 gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
> > >                 enable-active-high;
> > >                 regulator-min-microvolt = <1800000>;
> > >                 regulator-max-microvolt = <1800000>;
> > >         };
> > >
> > >         cam24m: cam24m {
> > >                 compatible = "fixed-clock";
> > >                 #clock-cells = <0>;
> > >                 clock-frequency = <24000000>;
> > >                 clock-output-names = "cam24m";
> > >         };
> > > };
> > >
> > > &i2c4 {
> > >         #address-cells = <1>;
> > >         #size-cells = <0>;
> > >
> > >         imx219: sensor@10 {
> > >                 compatible = "sony,imx219";
> > >                 reg = <0x10>;
> > >                 clocks = <&cam24m>;
> > >                 VDIG-supply = <&reg_cam>;
> > >
> > >                 port {
> > >                         /* MIPI CSI-2 bus endpoint */
> > >                         imx219_to_mipi_csi2: endpoint {
> > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > >                                 clock-lanes = <0>;
> > >                                 data-lanes = <1 2>;
> > >                                 link-frequencies = /bits/ 64 <456000000>;
> > >                         };
> > >                 };
> > >         };
> > > };
> > >
> > > &isi_0 {
> > >         status = "okay";
> > > };
> > >
> > > &mipi_csi_0 {
> > >         status = "okay";
> > >
> > >         ports {
> > >                 port@0 {
> > >                         mipi_csi_0_in: endpoint {
> > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > >                                 data-lanes = <1 2>;
> > >                         };
> > >                 };
> > >         };
> > > };
> > >
> > > &iomuxc {
> > >         pinctrl_reg_cam: regcamgrp {
> > >                 fsl,pins = <
> > >                         MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
> > >                 >;
> > >         };
> > > };
> > >
> > > Now I'm getting:
> > > # dmesg | grep imx219
> > > [    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
> > > [    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
> > > [    5.520396] imx219 2-0010: Consider updating driver imx219 to match
> > > on endpoints
> > > # dmesg | grep mipi
> > > [    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
> > > # cat /sys/bus/media/devices/media*/model
> > > FSL Capture Media Device
> > > hantro-vpu
> > > hantro-vpu
> > > # cat /sys/class/video4linux/video*/name
> > > mxc_isi.0.capture
> > > mxc_isi.1.capture
> > > mxc_isi.m2m
> > > nxp,imx8mm-vpu-g1-dec
> > > nxp,imx8mq-vpu-g2-dec
> > > # media-ctl /dev/media0 -p
> > > Media controller API version 6.5.0
> > >
> > > Media device information
> > > ------------------------
> > > driver          mxc-isi
> > > model           FSL Capture Media Device
> > > serial
> > > bus info        platform:32e00000.isi
> > > hw revision     0x0
> > > driver version  6.5.0
> > >
> > > Device topology
> > > - entity 1: crossbar (5 pads, 4 links)
> > >             type V4L2 subdev subtype Unknown flags 0
> > >             device node name /dev/v4l-subdev0
> > >         pad0: Sink
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > xfer:srgb ycbcr:601 quantization:lim-range]
> > >                 <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
> > >         pad1: Sink
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > xfer:srgb ycbcr:601 quantization:lim-range]
> > >         pad2: Sink
> > >                 <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
> > >         pad3: Source
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > xfer:srgb ycbcr:601 quantization:lim-range]
> > >                 -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
> > >         pad4: Source
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > xfer:srgb ycbcr:601 quantization:lim-range]
> > >                 -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
> > >
> > > - entity 7: mxc_isi.0 (2 pads, 2 links)
> > >             type V4L2 subdev subtype Unknown flags 0
> > >             device node name /dev/v4l-subdev1
> > >         pad0: Sink
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > > xfer:srgb ycbcr:601 quantization:full-range
> > >                  compose.bounds:(0,0)/1920x1080
> > >                  compose:(0,0)/1920x1080]
> > >                 <- "crossbar":3 [ENABLED,IMMUTABLE]
> > >         pad1: Source
> > >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > > xfer:srgb ycbcr:601 quantization:full-range
> > >                  crop.bounds:(0,0)/1920x1080
> > >                  crop:(0,0)/1920x1080]
> > >                 -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]
> > >
> > > - entity 10: mxc_isi.0.capture (1 pad, 1 link)
> > >              type Node subtype V4L flags 0
> > >              device node name /dev/video0
> > >         pad0: Sink
> > >                 <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
> > >
> > > - entity 18: mxc_isi.1 (2 pads, 2 links)
> > >              type V4L2 subdev subtype Unknown flags 0
> > >              device node name /dev/v4l-subdev2
> > >         pad0: Sink
> > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > > xfer:srgb ycbcr:601 quantization:full-range
> > >                  compose.bounds:(0,0)/1920x1080
> > >                  compose:(0,0)/1920x1080]
> > >                 <- "crossbar":4 [ENABLED,IMMUTABLE]
> > >         pad1: Source
> > >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > > xfer:srgb ycbcr:601 quantization:full-range
> > >                  crop.bounds:(0,0)/1920x1080
> > >                  crop:(0,0)/1920x1080]
> > >                 -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]
> > >
> > > - entity 21: mxc_isi.1.capture (1 pad, 1 link)
> > >              type Node subtype V4L flags 0
> > >              device node name /dev/video1
> > >         pad0: Sink
> > >                 <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]
> > >
> > > - entity 29: mxc_isi.output (1 pad, 1 link)
> > >              type Node subtype V4L flags 0
> > >         pad0: Source
> > >                 -> "crossbar":2 [ENABLED,IMMUTABLE]
> > >
> > > - entity 36: csis-32e40000.csi (2 pads, 2 links)
> > >              type V4L2 subdev subtype Unknown flags 0
> > >              device node name /dev/v4l-subdev3
> > >         pad0: Sink
> > >                 [fmt:UYVY8_1X16/640x480 field:none
> > > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> > >                 <- "imx219 3-0010":0 []
> > >         pad1: Source
> > >                 [fmt:UYVY8_1X16/640x480 field:none
> > > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> > >                 -> "crossbar":0 [ENABLED,IMMUTABLE]
> > >
> > > - entity 41: imx219 3-0010 (1 pad, 1 link)
> > >              type V4L2 subdev subtype Sensor flags 0
> > >              device node name /dev/v4l-subdev4
> > >         pad0: Source
> > >                 [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
> > > xfer:srgb ycbcr:601 quantization:full-range
> > >                  crop.bounds:(8,8)/3280x2464
> > >                  crop:(8,8)/3280x2464]
> > >                 -> "csis-32e40000.csi":0 []
> > >
> > > # enable imx219 to csi link
> > > media-ctl --device /dev/media0 --links "'imx219
> > > 3-0010':0->'csis-32e40000.csi':0[1]"
> > >
> > > # v4l2-ctl --device /dev/video0 --all
> > > Driver Info:
> > >         Driver name      : mxc-isi
> > >         Card type        : mxc-isi-cap
> > >         Bus info         : platform:32e00000.isi
> > >         Driver version   : 6.5.0
> > >         Capabilities     : 0xa4201000
> > >                 Video Capture Multiplanar
> > >                 Streaming
> > >                 Extended Pix Format
> > >                 Device Capabilities
> > >         Device Caps      : 0x24201000
> > >                 Video Capture Multiplanar
> > >                 Streaming
> > >                 Extended Pix Format
> > > Media Driver Info:
> > >         Driver name      : mxc-isi
> > >         Model            : FSL Capture Media Device
> > >         Serial           :
> > >         Bus info         : platform:32e00000.isi
> > >         Media version    : 6.5.0
> > >         Hardware revision: 0x00000000 (0)
> > >         Driver version   : 6.5.0
> > > Interface Info:
> > >         ID               : 0x0300000c
> > >         Type             : V4L Video
> > > Entity Info:
> > >         ID               : 0x0000000a (10)
> > >         Name             : mxc_isi.0.capture
> > >         Function         : V4L2 I/O
> > >         Pad 0x0100000b   : 0: Sink
> > >           Link 0x0200000e: from remote pad 0x1000009 of entity
> > > 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
> > > Priority: 2
> > > Video input : 0 (mxc_isi.0.capture: ok)
> > > Format Video Capture Multiplanar:
> > >         Width/Height      : 640/480
> > >         Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
> > >         Field             : None
> > >         Number of planes  : 1
> > >         Flags             :
> > >         Colorspace        : sRGB
> > >         Transfer Function : sRGB
> > >         YCbCr/HSV Encoding: ITU-R 601
> > >         Quantization      : Limited Range
> > >         Plane 0           :
> > >            Bytes per Line : 640
> > >            Size Image     : 307200
> > >
> > > User Controls
> > >
> > >                 horizontal_flip 0x00980914 (bool)   : default=0 value=0
> > >                   vertical_flip 0x00980915 (bool)   : default=0 value=0
> > >                 alpha_component 0x00980929 (int)    : min=0 max=255
> > > step=1 default=0 value=0
> > >
> > > # try to capture a frame
> > > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
> > >                 VIDIOC_STREAMON returned -1 (Broken pipe)
> > > ^^^ fails... not sure why
> > >
> > > # try to use gstreamer
> > > gst-launch-1.0 v4l2src device=/dev/video0 !
> > > video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
> > > fakesink
> > > Setting pipeline to PAUSED ...
> > > Pipeline is live and does not need PREROLL ...
> > > Pipeline is PREROLLED ...
> > > Setting pipeline to PLAYING ...
> > > New clock: GstSystemClock
> > > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
> > > to allocate required memory.
> > > Additional debug info:
> > > ../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
> > > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > Buffer pool activation failed
> > > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > Internal data stream error.
> > > Execution ended after 0:00:00.005517125
> > > Additional debug info:
> > > ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> > > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > streaming stopped, reason not-negotiated (-4)
> > > Setting pipeline to NULL ...
> > > Freeing pipeline ...
> > > ^^^ not sure what the memory allocation failure is about. It was
> > > complaining about cma memory until I added cma=256M to the cmdline
> > >
> > > I'm now at the point where I likely need help from the video4linux and
> > > linux-media (cc'd) gurus.
> >
> >
> > The video format from the camera doesn't match the video format
> > through the ISI and the crossbar, so you're getting the broken pipe.
> > My experience with the ISI is that they all need to match since the
> > ISI isn't an ISP.
> > Laurent would likely suggest libcamera, but I haven't used it yet.
> > I'm waiting for the 8MP's ISP driver to get finalized.  However, the
> > ISI on the Nano is similar to the ISI on the Plus, so if you want to
> > take a look at the patch I did for the Beacon Nano board, it might
> > give you some ideas on how to set the video formats.  The patch I
> > submitted uses a different video format, but I would expect it to work
> > if you change the video format to the RGGB from the IMX219 camera.
> >
> > Hopefully this patch [1] can give you some idea on how to set the
> > video formats for each of the subdevs.
> >
> > adam
> >
> > [1] - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi?h=v6.5-rc1&id=6bc3ea47332648a4211926ba7afc1e1fb935c71a
> >
> 
> Hi Adam,
> 
> Thanks, this helped point me in the right direction and proves the
> video capture device works with v4l2.
> 
> For the imx219 which can capture 640x480 raw 8bit bayer:
> # configure media entities for 8-bit raw bayer 640x480
> media-ctl -v -V "'imx219 3-0010':0 [fmt:SRGGB8/640x480 field:none]"
> media-ctl -v -V "'crossbar':0 [fmt:SRGGB8/640x480 field:none]"
> media-ctl -v -V "'mxc_isi.0':0 [fmt:SRGGB8/640x480 field:none]"
> # configure for RGGB (8-bit bayer) 640x480
> v4l2-ctl --device /dev/video0
> --set-fmt-video=width=640,height=480,pixelformat=RGGB --verbose
> # capture a frame
> v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=frame.raw
> --stream-count=1
> convert -size 640x480 -depth 8 gray:frame.raw frame.png # convert to png
> # stream to display
> gst-launch-1.0 v4l2src ! \
>       video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 ! \
>       bayer2rgb ! fbdevsink
> 

I would expect if that's all working then libcamera with the ISI
pipeline handler would be able to handle all of the media-ctl
configuration for you.

You should be able to use this directly (without needing calls to media-ctl):

gst-launch-1.0 libcamerasrc ! \
	video/x-bayer,format=rggb,width=640,height=480 ! \
	bayer2rgb ! fbdevsink

in the same way.

If it does work, I'd be interested to hear that, and if it doesn't -
then lets fix it!

Note I removed the framerate=10/1 as that's the part I would suspect
might cause issues in the libcamerasrc. It's likely worth trying both
with and without it.

Regards
--
Kieran




> best regards,
> 
> Tim
> 
> 
> 
> Additional debug info:
> ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> streaming stopped, reason not-negotiated (-4)
> Setting pipeline to NULL ...
> Freeing pipeline ...
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11 22:49         ` Kieran Bingham
@ 2023-07-11 23:45           ` Tim Harvey
  2023-07-12  9:27             ` Kieran Bingham
  0 siblings, 1 reply; 9+ messages in thread
From: Tim Harvey @ 2023-07-11 23:45 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Adam Ford, linux-media, Laurent Pinchart, Linux ARM Mailing List,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Tue, Jul 11, 2023 at 3:49 PM Kieran Bingham
<kieran.bingham@ideasonboard.com> wrote:
>
> Hi Tim,
>
> Quoting Tim Harvey (2023-07-11 23:16:33)
> > On Mon, Jul 10, 2023 at 6:09 PM Adam Ford <aford173@gmail.com> wrote:
> > >
> > > On Mon, Jul 10, 2023 at 7:59 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > > >
> > > > On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
> > > > >
> > > > > On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > > > > >
> > > > > > Greetings,
> > > > > >
> > > > > > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > > > > > following details:
> > > > > > - camera is a RaspberryPi Camera v2 -
> > > > > > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > > > > > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > > > > > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > > > > > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > > > > > - MIPI_CSI1 lanes 0 and 1 are used
> > > > > >
> > > > > > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > > > > > DT nodes to imx8mp.dtsi [1] as follows:
> > > > > >
> > > > > > #include <dt-bindings/gpio/gpio.h>
> > > > > > #include "imx8mp-pinfunc.h"
> > > > > >
> > > > > > /dts-v1/;
> > > > > > /plugin/;
> > > > > >
> > > > > > &{/} {
> > > > > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > > > > >
> > > > > >         reg_cam: regulator-cam {
> > > > > >                 pinctrl-names = "default";
> > > > > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > > > > >                 compatible = "regulator-fixed";
> > > > > >                 regulator-name = "reg_cam";
> > > > > >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> > > > > >                 enable-active-high;
> > > > > >                 regulator-min-microvolt = <1800000>;
> > > > > >                 regulator-max-microvolt = <1800000>;
> > > > > >         };
> > > > > >
> > > > > >         cam24m: cam24m {
> > > > > >                 compatible = "fixed-clock";
> > > > > >                 #clock-cells = <0>;
> > > > > >                 clock-frequency = <24000000>;
> > > > > >                 clock-output-names = "cam24m";
> > > > > >         };
> > > > > > };
> > > > > >
> > > > > > &i2c3 {
> > > > > >         #address-cells = <1>;
> > > > > >         #size-cells = <0>;
> > > > > >
> > > > > >         imx219: sensor@10 {
> > > > > >                 compatible = "sony,imx219";
> > > > > >                 reg = <0x10>;
> > > > > >                 clocks = <&cam24m>;
> > > > > >                 VDIG-supply = <&reg_cam>;
> > > > > >
> > > > > >                 port {
> > > > > >                         /* MIPI CSI-2 bus endpoint */
> > > > > >                         imx219_to_mipi_csi2: endpoint {
> > > > > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > > > > >                                 clock-lanes = <0>;
> > > > > >                                 data-lanes = <1 2>;
> > > > > >                                 link-frequencies = /bits/ 64 <456000000>;
> > > > > >                         };
> > > > > >                 };
> > > > > >         };
> > > > > > };
> > > > > >
> > > > > > &mipi_csi_0 {
> > > > > >         status = "okay";
> > > > > >
> > > > > >         ports {
> > > > > >                 port@0 {
> > > > > >                         mipi_csi_0_in: endpoint {
> > > > > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > > > > >                                 data-lanes = <1 2>;
> > > > > >                         };
> > > > > >                 };
> > > > > >         };
> > > > > > };
> > > > > >
> > > > > > &iomuxc {
> > > > > >         pinctrl_reg_cam: regcamgrp {
> > > > > >                 fsl,pins = <
> > > > > >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> > > > > >                 >;
> > > > > >         };
> > > > > > };
> > > > > >
> > > > > > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > > > > > not clear what to do with that:
> > > > > > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > > > > > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> > > > > >
> > > > > > Any suggestions?
> > > > >
> > > > > I think the port needs to point to an ISI node or a ISP node.
> > > > > Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> > > > > referencing, it appears that node@1 is missing.
> > > > >
> > > > > Check out:
> > > > >
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
> > > > >
> > > > > See if that helps.
> > > > >
> > > > > adam
> > > > >
> > > >
> > > > Hi Adam,
> > > >
> > > > Thanks for the info. I didn't realize those patches were already in
> > > > linux-next and I missed the fact that the ISI was related to the CSI
> > > > (so I was missing the ISI patch and enabling that driver).
> > > >
> > > > I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
> > > > nodes to the imx8mp.dtsi with the following dt fragment:
> > > > #include <dt-bindings/gpio/gpio.h>
> > > >
> > > > #include "imx8mp-pinfunc.h"
> > > >
> > > > /dts-v1/;
> > > > /plugin/;
> > > >
> > > > &{/} {
> > > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > > >
> > > >         reg_cam: regulator-cam {
> > > >                 pinctrl-names = "default";
> > > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > > >                 compatible = "regulator-fixed";
> > > >                 regulator-name = "reg_cam";
> > > >                 gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
> > > >                 enable-active-high;
> > > >                 regulator-min-microvolt = <1800000>;
> > > >                 regulator-max-microvolt = <1800000>;
> > > >         };
> > > >
> > > >         cam24m: cam24m {
> > > >                 compatible = "fixed-clock";
> > > >                 #clock-cells = <0>;
> > > >                 clock-frequency = <24000000>;
> > > >                 clock-output-names = "cam24m";
> > > >         };
> > > > };
> > > >
> > > > &i2c4 {
> > > >         #address-cells = <1>;
> > > >         #size-cells = <0>;
> > > >
> > > >         imx219: sensor@10 {
> > > >                 compatible = "sony,imx219";
> > > >                 reg = <0x10>;
> > > >                 clocks = <&cam24m>;
> > > >                 VDIG-supply = <&reg_cam>;
> > > >
> > > >                 port {
> > > >                         /* MIPI CSI-2 bus endpoint */
> > > >                         imx219_to_mipi_csi2: endpoint {
> > > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > > >                                 clock-lanes = <0>;
> > > >                                 data-lanes = <1 2>;
> > > >                                 link-frequencies = /bits/ 64 <456000000>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &isi_0 {
> > > >         status = "okay";
> > > > };
> > > >
> > > > &mipi_csi_0 {
> > > >         status = "okay";
> > > >
> > > >         ports {
> > > >                 port@0 {
> > > >                         mipi_csi_0_in: endpoint {
> > > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > > >                                 data-lanes = <1 2>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &iomuxc {
> > > >         pinctrl_reg_cam: regcamgrp {
> > > >                 fsl,pins = <
> > > >                         MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
> > > >                 >;
> > > >         };
> > > > };
> > > >
> > > > Now I'm getting:
> > > > # dmesg | grep imx219
> > > > [    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
> > > > [    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
> > > > [    5.520396] imx219 2-0010: Consider updating driver imx219 to match
> > > > on endpoints
> > > > # dmesg | grep mipi
> > > > [    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
> > > > # cat /sys/bus/media/devices/media*/model
> > > > FSL Capture Media Device
> > > > hantro-vpu
> > > > hantro-vpu
> > > > # cat /sys/class/video4linux/video*/name
> > > > mxc_isi.0.capture
> > > > mxc_isi.1.capture
> > > > mxc_isi.m2m
> > > > nxp,imx8mm-vpu-g1-dec
> > > > nxp,imx8mq-vpu-g2-dec
> > > > # media-ctl /dev/media0 -p
> > > > Media controller API version 6.5.0
> > > >
> > > > Media device information
> > > > ------------------------
> > > > driver          mxc-isi
> > > > model           FSL Capture Media Device
> > > > serial
> > > > bus info        platform:32e00000.isi
> > > > hw revision     0x0
> > > > driver version  6.5.0
> > > >
> > > > Device topology
> > > > - entity 1: crossbar (5 pads, 4 links)
> > > >             type V4L2 subdev subtype Unknown flags 0
> > > >             device node name /dev/v4l-subdev0
> > > >         pad0: Sink
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > > xfer:srgb ycbcr:601 quantization:lim-range]
> > > >                 <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
> > > >         pad1: Sink
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > > xfer:srgb ycbcr:601 quantization:lim-range]
> > > >         pad2: Sink
> > > >                 <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
> > > >         pad3: Source
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > > xfer:srgb ycbcr:601 quantization:lim-range]
> > > >                 -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
> > > >         pad4: Source
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > > > xfer:srgb ycbcr:601 quantization:lim-range]
> > > >                 -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 7: mxc_isi.0 (2 pads, 2 links)
> > > >             type V4L2 subdev subtype Unknown flags 0
> > > >             device node name /dev/v4l-subdev1
> > > >         pad0: Sink
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > > > xfer:srgb ycbcr:601 quantization:full-range
> > > >                  compose.bounds:(0,0)/1920x1080
> > > >                  compose:(0,0)/1920x1080]
> > > >                 <- "crossbar":3 [ENABLED,IMMUTABLE]
> > > >         pad1: Source
> > > >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > > > xfer:srgb ycbcr:601 quantization:full-range
> > > >                  crop.bounds:(0,0)/1920x1080
> > > >                  crop:(0,0)/1920x1080]
> > > >                 -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 10: mxc_isi.0.capture (1 pad, 1 link)
> > > >              type Node subtype V4L flags 0
> > > >              device node name /dev/video0
> > > >         pad0: Sink
> > > >                 <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 18: mxc_isi.1 (2 pads, 2 links)
> > > >              type V4L2 subdev subtype Unknown flags 0
> > > >              device node name /dev/v4l-subdev2
> > > >         pad0: Sink
> > > >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > > > xfer:srgb ycbcr:601 quantization:full-range
> > > >                  compose.bounds:(0,0)/1920x1080
> > > >                  compose:(0,0)/1920x1080]
> > > >                 <- "crossbar":4 [ENABLED,IMMUTABLE]
> > > >         pad1: Source
> > > >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > > > xfer:srgb ycbcr:601 quantization:full-range
> > > >                  crop.bounds:(0,0)/1920x1080
> > > >                  crop:(0,0)/1920x1080]
> > > >                 -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 21: mxc_isi.1.capture (1 pad, 1 link)
> > > >              type Node subtype V4L flags 0
> > > >              device node name /dev/video1
> > > >         pad0: Sink
> > > >                 <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 29: mxc_isi.output (1 pad, 1 link)
> > > >              type Node subtype V4L flags 0
> > > >         pad0: Source
> > > >                 -> "crossbar":2 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 36: csis-32e40000.csi (2 pads, 2 links)
> > > >              type V4L2 subdev subtype Unknown flags 0
> > > >              device node name /dev/v4l-subdev3
> > > >         pad0: Sink
> > > >                 [fmt:UYVY8_1X16/640x480 field:none
> > > > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> > > >                 <- "imx219 3-0010":0 []
> > > >         pad1: Source
> > > >                 [fmt:UYVY8_1X16/640x480 field:none
> > > > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> > > >                 -> "crossbar":0 [ENABLED,IMMUTABLE]
> > > >
> > > > - entity 41: imx219 3-0010 (1 pad, 1 link)
> > > >              type V4L2 subdev subtype Sensor flags 0
> > > >              device node name /dev/v4l-subdev4
> > > >         pad0: Source
> > > >                 [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
> > > > xfer:srgb ycbcr:601 quantization:full-range
> > > >                  crop.bounds:(8,8)/3280x2464
> > > >                  crop:(8,8)/3280x2464]
> > > >                 -> "csis-32e40000.csi":0 []
> > > >
> > > > # enable imx219 to csi link
> > > > media-ctl --device /dev/media0 --links "'imx219
> > > > 3-0010':0->'csis-32e40000.csi':0[1]"
> > > >
> > > > # v4l2-ctl --device /dev/video0 --all
> > > > Driver Info:
> > > >         Driver name      : mxc-isi
> > > >         Card type        : mxc-isi-cap
> > > >         Bus info         : platform:32e00000.isi
> > > >         Driver version   : 6.5.0
> > > >         Capabilities     : 0xa4201000
> > > >                 Video Capture Multiplanar
> > > >                 Streaming
> > > >                 Extended Pix Format
> > > >                 Device Capabilities
> > > >         Device Caps      : 0x24201000
> > > >                 Video Capture Multiplanar
> > > >                 Streaming
> > > >                 Extended Pix Format
> > > > Media Driver Info:
> > > >         Driver name      : mxc-isi
> > > >         Model            : FSL Capture Media Device
> > > >         Serial           :
> > > >         Bus info         : platform:32e00000.isi
> > > >         Media version    : 6.5.0
> > > >         Hardware revision: 0x00000000 (0)
> > > >         Driver version   : 6.5.0
> > > > Interface Info:
> > > >         ID               : 0x0300000c
> > > >         Type             : V4L Video
> > > > Entity Info:
> > > >         ID               : 0x0000000a (10)
> > > >         Name             : mxc_isi.0.capture
> > > >         Function         : V4L2 I/O
> > > >         Pad 0x0100000b   : 0: Sink
> > > >           Link 0x0200000e: from remote pad 0x1000009 of entity
> > > > 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
> > > > Priority: 2
> > > > Video input : 0 (mxc_isi.0.capture: ok)
> > > > Format Video Capture Multiplanar:
> > > >         Width/Height      : 640/480
> > > >         Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
> > > >         Field             : None
> > > >         Number of planes  : 1
> > > >         Flags             :
> > > >         Colorspace        : sRGB
> > > >         Transfer Function : sRGB
> > > >         YCbCr/HSV Encoding: ITU-R 601
> > > >         Quantization      : Limited Range
> > > >         Plane 0           :
> > > >            Bytes per Line : 640
> > > >            Size Image     : 307200
> > > >
> > > > User Controls
> > > >
> > > >                 horizontal_flip 0x00980914 (bool)   : default=0 value=0
> > > >                   vertical_flip 0x00980915 (bool)   : default=0 value=0
> > > >                 alpha_component 0x00980929 (int)    : min=0 max=255
> > > > step=1 default=0 value=0
> > > >
> > > > # try to capture a frame
> > > > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
> > > >                 VIDIOC_STREAMON returned -1 (Broken pipe)
> > > > ^^^ fails... not sure why
> > > >
> > > > # try to use gstreamer
> > > > gst-launch-1.0 v4l2src device=/dev/video0 !
> > > > video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
> > > > fakesink
> > > > Setting pipeline to PAUSED ...
> > > > Pipeline is live and does not need PREROLL ...
> > > > Pipeline is PREROLLED ...
> > > > Setting pipeline to PLAYING ...
> > > > New clock: GstSystemClock
> > > > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
> > > > to allocate required memory.
> > > > Additional debug info:
> > > > ../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
> > > > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > > Buffer pool activation failed
> > > > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > > Internal data stream error.
> > > > Execution ended after 0:00:00.005517125
> > > > Additional debug info:
> > > > ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> > > > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > > > streaming stopped, reason not-negotiated (-4)
> > > > Setting pipeline to NULL ...
> > > > Freeing pipeline ...
> > > > ^^^ not sure what the memory allocation failure is about. It was
> > > > complaining about cma memory until I added cma=256M to the cmdline
> > > >
> > > > I'm now at the point where I likely need help from the video4linux and
> > > > linux-media (cc'd) gurus.
> > >
> > >
> > > The video format from the camera doesn't match the video format
> > > through the ISI and the crossbar, so you're getting the broken pipe.
> > > My experience with the ISI is that they all need to match since the
> > > ISI isn't an ISP.
> > > Laurent would likely suggest libcamera, but I haven't used it yet.
> > > I'm waiting for the 8MP's ISP driver to get finalized.  However, the
> > > ISI on the Nano is similar to the ISI on the Plus, so if you want to
> > > take a look at the patch I did for the Beacon Nano board, it might
> > > give you some ideas on how to set the video formats.  The patch I
> > > submitted uses a different video format, but I would expect it to work
> > > if you change the video format to the RGGB from the IMX219 camera.
> > >
> > > Hopefully this patch [1] can give you some idea on how to set the
> > > video formats for each of the subdevs.
> > >
> > > adam
> > >
> > > [1] - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi?h=v6.5-rc1&id=6bc3ea47332648a4211926ba7afc1e1fb935c71a
> > >
> >
> > Hi Adam,
> >
> > Thanks, this helped point me in the right direction and proves the
> > video capture device works with v4l2.
> >
> > For the imx219 which can capture 640x480 raw 8bit bayer:
> > # configure media entities for 8-bit raw bayer 640x480
> > media-ctl -v -V "'imx219 3-0010':0 [fmt:SRGGB8/640x480 field:none]"
> > media-ctl -v -V "'crossbar':0 [fmt:SRGGB8/640x480 field:none]"
> > media-ctl -v -V "'mxc_isi.0':0 [fmt:SRGGB8/640x480 field:none]"
> > # configure for RGGB (8-bit bayer) 640x480
> > v4l2-ctl --device /dev/video0
> > --set-fmt-video=width=640,height=480,pixelformat=RGGB --verbose
> > # capture a frame
> > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=frame.raw
> > --stream-count=1
> > convert -size 640x480 -depth 8 gray:frame.raw frame.png # convert to png
> > # stream to display
> > gst-launch-1.0 v4l2src ! \
> >       video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 ! \
> >       bayer2rgb ! fbdevsink
> >
>
> I would expect if that's all working then libcamera with the ISI
> pipeline handler would be able to handle all of the media-ctl
> configuration for you.
>
> You should be able to use this directly (without needing calls to media-ctl):
>
> gst-launch-1.0 libcamerasrc ! \
>         video/x-bayer,format=rggb,width=640,height=480 ! \
>         bayer2rgb ! fbdevsink
>
> in the same way.
>
> If it does work, I'd be interested to hear that, and if it doesn't -
> then lets fix it!
>
> Note I removed the framerate=10/1 as that's the part I would suspect
> might cause issues in the libcamerasrc. It's likely worth trying both
> with and without it.

Hi Kieran,

I've never looked into libcamera before but I love the idea of not
needing to deal with media-ctl pipelines. I don't see a libcamerasrc
in gstreamer 1.20.3 which I'm using. A quick look at the libcamera
docs [1] seems to indicate building from source isn't necessary when
libcamera is installed but I've installed libcamera-tools/libcamera0
and there is still no libcamerasrc shown in gstreamer?

best regards,

Tim
[1] https://libcamera.org/getting-started.html

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11 23:45           ` Tim Harvey
@ 2023-07-12  9:27             ` Kieran Bingham
  0 siblings, 0 replies; 9+ messages in thread
From: Kieran Bingham @ 2023-07-12  9:27 UTC (permalink / raw)
  To: Tim Harvey
  Cc: Adam Ford, linux-media, Laurent Pinchart, Linux ARM Mailing List,
	NXP Linux Team, Sascha Hauer, Shawn Guo, Krzysztof Kozlowski,
	Jacopo Mondi, Xavier Roumegue, Fabio Estevam, Schrempf Frieder

Quoting Tim Harvey (2023-07-12 00:45:10)
> On Tue, Jul 11, 2023 at 3:49 PM Kieran Bingham
> <kieran.bingham@ideasonboard.com> wrote:
> >
> > Hi Tim,
> >

<snip>

> > >
> > > Hi Adam,
> > >
> > > Thanks, this helped point me in the right direction and proves the
> > > video capture device works with v4l2.
> > >
> > > For the imx219 which can capture 640x480 raw 8bit bayer:
> > > # configure media entities for 8-bit raw bayer 640x480
> > > media-ctl -v -V "'imx219 3-0010':0 [fmt:SRGGB8/640x480 field:none]"
> > > media-ctl -v -V "'crossbar':0 [fmt:SRGGB8/640x480 field:none]"
> > > media-ctl -v -V "'mxc_isi.0':0 [fmt:SRGGB8/640x480 field:none]"
> > > # configure for RGGB (8-bit bayer) 640x480
> > > v4l2-ctl --device /dev/video0
> > > --set-fmt-video=width=640,height=480,pixelformat=RGGB --verbose
> > > # capture a frame
> > > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=frame.raw
> > > --stream-count=1
> > > convert -size 640x480 -depth 8 gray:frame.raw frame.png # convert to png
> > > # stream to display
> > > gst-launch-1.0 v4l2src ! \
> > >       video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 ! \
> > >       bayer2rgb ! fbdevsink
> > >
> >
> > I would expect if that's all working then libcamera with the ISI
> > pipeline handler would be able to handle all of the media-ctl
> > configuration for you.
> >
> > You should be able to use this directly (without needing calls to media-ctl):
> >
> > gst-launch-1.0 libcamerasrc ! \
> >         video/x-bayer,format=rggb,width=640,height=480 ! \
> >         bayer2rgb ! fbdevsink
> >
> > in the same way.
> >
> > If it does work, I'd be interested to hear that, and if it doesn't -
> > then lets fix it!
> >
> > Note I removed the framerate=10/1 as that's the part I would suspect
> > might cause issues in the libcamerasrc. It's likely worth trying both
> > with and without it.
> 
> Hi Kieran,
> 
> I've never looked into libcamera before but I love the idea of not
> needing to deal with media-ctl pipelines. I don't see a libcamerasrc

Indeed, that's one of the key points of libcamera - to handle all this
complexity of routing, configuration, and format propogation for every
platform on behalf of each application. (As well as manage any connected
ISP).

There's a few out of tree patches I believe, but it doesn't take much to
get libcamera running the ISP on the i.MX8MP as well so then you can
have hardware accelerated debayering and image processing too.


> in gstreamer 1.20.3 which I'm using. A quick look at the libcamera
> docs [1] seems to indicate building from source isn't necessary when
> libcamera is installed but I've installed libcamera-tools/libcamera0
> and there is still no libcamerasrc shown in gstreamer?

libcamerasrc is currently built as part of the libcamera project, not
gstreamer. I don't know what package libcamera-tools/libcamera0 refers
to - but look to see if your distribution package the gstreamer
component of libcamera separately. Once that's installed it should be
available.

Feel free to find us in the IRC/Matrix channels too if you get stuck for
a realtime support channel to get things running.

--
Kieran


> 
> best regards,
> 
> Tim
> [1] https://libcamera.org/getting-started.html

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1
  2023-07-11  1:08     ` Adam Ford
  2023-07-11 22:16       ` Tim Harvey
@ 2023-07-12 17:34       ` Laurent Pinchart
  1 sibling, 0 replies; 9+ messages in thread
From: Laurent Pinchart @ 2023-07-12 17:34 UTC (permalink / raw)
  To: Adam Ford
  Cc: Tim Harvey, linux-media, Linux ARM Mailing List, NXP Linux Team,
	Sascha Hauer, Shawn Guo, Krzysztof Kozlowski, Jacopo Mondi,
	Xavier Roumegue, Fabio Estevam, Schrempf Frieder

On Mon, Jul 10, 2023 at 08:08:51PM -0500, Adam Ford wrote:
> On Mon, Jul 10, 2023 at 7:59 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > On Fri, Jul 7, 2023 at 6:11 PM Adam Ford <aford173@gmail.com> wrote:
> > > On Fri, Jul 7, 2023 at 7:28 PM Tim Harvey <tharvey@gateworks.com> wrote:
> > > >
> > > > Greetings,
> > > >
> > > > I have an imx219 camera connected to an imx8mp-venice-gw74xx via the
> > > > following details:
> > > > - camera is a RaspberryPi Camera v2 -
> > > > https://datasheets.raspberrypi.com/camera/camera-v2-schematics.pdf
> > > > - has its own on-board 24MHz osc so no clock is required from the baseboard
> > > > - pin 11 on the camera enables 1.8V and 2.8V LDO which is connected to
> > > > IMX8MP GPIO1_IO1 so we use that as a gpio regulator
> > > > - MIPI_CSI1 lanes 0 and 1 are used
> > > >
> > > > I'm using Linux 6.4 with Laurent's pending patch to add the MIPI CSI
> > > > DT nodes to imx8mp.dtsi [1] as follows:
> > > >
> > > > #include <dt-bindings/gpio/gpio.h>
> > > > #include "imx8mp-pinfunc.h"
> > > >
> > > > /dts-v1/;
> > > > /plugin/;
> > > >
> > > > &{/} {
> > > >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> > > >
> > > >         reg_cam: regulator-cam {
> > > >                 pinctrl-names = "default";
> > > >                 pinctrl-0 = <&pinctrl_reg_cam>;
> > > >                 compatible = "regulator-fixed";
> > > >                 regulator-name = "reg_cam";
> > > >                 gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
> > > >                 enable-active-high;
> > > >                 regulator-min-microvolt = <1800000>;
> > > >                 regulator-max-microvolt = <1800000>;
> > > >         };
> > > >
> > > >         cam24m: cam24m {
> > > >                 compatible = "fixed-clock";
> > > >                 #clock-cells = <0>;
> > > >                 clock-frequency = <24000000>;
> > > >                 clock-output-names = "cam24m";
> > > >         };
> > > > };
> > > >
> > > > &i2c3 {
> > > >         #address-cells = <1>;
> > > >         #size-cells = <0>;
> > > >
> > > >         imx219: sensor@10 {
> > > >                 compatible = "sony,imx219";
> > > >                 reg = <0x10>;
> > > >                 clocks = <&cam24m>;
> > > >                 VDIG-supply = <&reg_cam>;
> > > >
> > > >                 port {
> > > >                         /* MIPI CSI-2 bus endpoint */
> > > >                         imx219_to_mipi_csi2: endpoint {
> > > >                                 remote-endpoint = <&mipi_csi_0_in>;
> > > >                                 clock-lanes = <0>;
> > > >                                 data-lanes = <1 2>;
> > > >                                 link-frequencies = /bits/ 64 <456000000>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &mipi_csi_0 {
> > > >         status = "okay";
> > > >
> > > >         ports {
> > > >                 port@0 {
> > > >                         mipi_csi_0_in: endpoint {
> > > >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> > > >                                 data-lanes = <1 2>;
> > > >                         };
> > > >                 };
> > > >         };
> > > > };
> > > >
> > > > &iomuxc {
> > > >         pinctrl_reg_cam: regcamgrp {
> > > >                 fsl,pins = <
> > > >                         MX8MP_IOMUXC_GPIO1_IO01__GPIO1_IO01     0x41
> > > >                 >;
> > > >         };
> > > > };
> > > >
> > > > imx-mipi-csis fails to probe due to a missing port1 endpoint and I'm
> > > > not clear what to do with that:
> > > > imx-mipi-csis 32e40000.csi: Unable to retrieve endpoint for port@1
> > > > imx-mipi-csis: probe of 32e40000.csi failed with error -2
> > > >
> > > > Any suggestions?
> > >
> > > I think the port needs to point to an ISI node or a ISP node.
> > > Linux-next shows port@1 pointing to  isi_in_0.  In the patch you're
> > > referencing, it appears that node@1 is missing.
> > >
> > > Check out:
> > >
> > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/arch/arm64/boot/dts/freescale/imx8mp.dtsi?h=next-20230707&id=9da15c4c850dd53309e07d5611f33655f8f8c05d
> > >
> > > See if that helps.
> > >
> > > adam
> > >
> >
> > Hi Adam,
> >
> > Thanks for the info. I didn't realize those patches were already in
> > linux-next and I missed the fact that the ISI was related to the CSI
> > (so I was missing the ISI patch and enabling that driver).
> >
> > I'm now using 6.5.0-rc1 which has the patches that add CSI and ISI
> > nodes to the imx8mp.dtsi with the following dt fragment:
> > #include <dt-bindings/gpio/gpio.h>
> >
> > #include "imx8mp-pinfunc.h"
> >
> > /dts-v1/;
> > /plugin/;
> >
> > &{/} {
> >         compatible = "gw,imx8mp-gw74xx", "fsl,imx8mp";
> >
> >         reg_cam: regulator-cam {
> >                 pinctrl-names = "default";
> >                 pinctrl-0 = <&pinctrl_reg_cam>;
> >                 compatible = "regulator-fixed";
> >                 regulator-name = "reg_cam";
> >                 gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
> >                 enable-active-high;
> >                 regulator-min-microvolt = <1800000>;
> >                 regulator-max-microvolt = <1800000>;
> >         };
> >
> >         cam24m: cam24m {
> >                 compatible = "fixed-clock";
> >                 #clock-cells = <0>;
> >                 clock-frequency = <24000000>;
> >                 clock-output-names = "cam24m";
> >         };
> > };
> >
> > &i2c4 {
> >         #address-cells = <1>;
> >         #size-cells = <0>;
> >
> >         imx219: sensor@10 {
> >                 compatible = "sony,imx219";
> >                 reg = <0x10>;
> >                 clocks = <&cam24m>;
> >                 VDIG-supply = <&reg_cam>;
> >
> >                 port {
> >                         /* MIPI CSI-2 bus endpoint */
> >                         imx219_to_mipi_csi2: endpoint {
> >                                 remote-endpoint = <&mipi_csi_0_in>;
> >                                 clock-lanes = <0>;
> >                                 data-lanes = <1 2>;
> >                                 link-frequencies = /bits/ 64 <456000000>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &isi_0 {
> >         status = "okay";
> > };
> >
> > &mipi_csi_0 {
> >         status = "okay";
> >
> >         ports {
> >                 port@0 {
> >                         mipi_csi_0_in: endpoint {
> >                                 remote-endpoint = <&imx219_to_mipi_csi2>;
> >                                 data-lanes = <1 2>;
> >                         };
> >                 };
> >         };
> > };
> >
> > &iomuxc {
> >         pinctrl_reg_cam: regcamgrp {
> >                 fsl,pins = <
> >                         MX8MP_IOMUXC_GPIO1_IO04__GPIO1_IO04     0x41
> >                 >;
> >         };
> > };
> >
> > Now I'm getting:
> > # dmesg | grep imx219
> > [    1.764111] imx219 2-0010: supply VANA not found, using dummy regulator
> > [    1.770953] imx219 2-0010: supply VDDL not found, using dummy regulator
> > [    5.520396] imx219 2-0010: Consider updating driver imx219 to match
> > on endpoints
> > # dmesg | grep mipi
> > [    2.080468] imx-mipi-csis 32e40000.csi: lanes: 2, freq: 500000000
> > # cat /sys/bus/media/devices/media*/model
> > FSL Capture Media Device
> > hantro-vpu
> > hantro-vpu
> > # cat /sys/class/video4linux/video*/name
> > mxc_isi.0.capture
> > mxc_isi.1.capture
> > mxc_isi.m2m
> > nxp,imx8mm-vpu-g1-dec
> > nxp,imx8mq-vpu-g2-dec
> > # media-ctl /dev/media0 -p
> > Media controller API version 6.5.0
> >
> > Media device information
> > ------------------------
> > driver          mxc-isi
> > model           FSL Capture Media Device
> > serial
> > bus info        platform:32e00000.isi
> > hw revision     0x0
> > driver version  6.5.0
> >
> > Device topology
> > - entity 1: crossbar (5 pads, 4 links)
> >             type V4L2 subdev subtype Unknown flags 0
> >             device node name /dev/v4l-subdev0
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 <- "csis-32e40000.csi":1 [ENABLED,IMMUTABLE]
> >         pad1: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >         pad2: Sink
> >                 <- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
> >         pad3: Source
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
> >         pad4: Source
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:lim-range]
> >                 -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
> >
> > - entity 7: mxc_isi.0 (2 pads, 2 links)
> >             type V4L2 subdev subtype Unknown flags 0
> >             device node name /dev/v4l-subdev1
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  compose.bounds:(0,0)/1920x1080
> >                  compose:(0,0)/1920x1080]
> >                 <- "crossbar":3 [ENABLED,IMMUTABLE]
> >         pad1: Source
> >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(0,0)/1920x1080
> >                  crop:(0,0)/1920x1080]
> >                 -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]
> >
> > - entity 10: mxc_isi.0.capture (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >              device node name /dev/video0
> >         pad0: Sink
> >                 <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]
> >
> > - entity 18: mxc_isi.1 (2 pads, 2 links)
> >              type V4L2 subdev subtype Unknown flags 0
> >              device node name /dev/v4l-subdev2
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  compose.bounds:(0,0)/1920x1080
> >                  compose:(0,0)/1920x1080]
> >                 <- "crossbar":4 [ENABLED,IMMUTABLE]
> >         pad1: Source
> >                 [fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(0,0)/1920x1080
> >                  crop:(0,0)/1920x1080]
> >                 -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]
> >
> > - entity 21: mxc_isi.1.capture (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >              device node name /dev/video1
> >         pad0: Sink
> >                 <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]
> >
> > - entity 29: mxc_isi.output (1 pad, 1 link)
> >              type Node subtype V4L flags 0
> >         pad0: Source
> >                 -> "crossbar":2 [ENABLED,IMMUTABLE]
> >
> > - entity 36: csis-32e40000.csi (2 pads, 2 links)
> >              type V4L2 subdev subtype Unknown flags 0
> >              device node name /dev/v4l-subdev3
> >         pad0: Sink
> >                 [fmt:UYVY8_1X16/640x480 field:none
> > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> >                 <- "imx219 3-0010":0 []
> >         pad1: Source
> >                 [fmt:UYVY8_1X16/640x480 field:none
> > colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
> >                 -> "crossbar":0 [ENABLED,IMMUTABLE]
> >
> > - entity 41: imx219 3-0010 (1 pad, 1 link)
> >              type V4L2 subdev subtype Sensor flags 0
> >              device node name /dev/v4l-subdev4
> >         pad0: Source
> >                 [fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb
> > xfer:srgb ycbcr:601 quantization:full-range
> >                  crop.bounds:(8,8)/3280x2464
> >                  crop:(8,8)/3280x2464]
> >                 -> "csis-32e40000.csi":0 []
> >
> > # enable imx219 to csi link
> > media-ctl --device /dev/media0 --links "'imx219
> > 3-0010':0->'csis-32e40000.csi':0[1]"
> >
> > # v4l2-ctl --device /dev/video0 --all
> > Driver Info:
> >         Driver name      : mxc-isi
> >         Card type        : mxc-isi-cap
> >         Bus info         : platform:32e00000.isi
> >         Driver version   : 6.5.0
> >         Capabilities     : 0xa4201000
> >                 Video Capture Multiplanar
> >                 Streaming
> >                 Extended Pix Format
> >                 Device Capabilities
> >         Device Caps      : 0x24201000
> >                 Video Capture Multiplanar
> >                 Streaming
> >                 Extended Pix Format
> > Media Driver Info:
> >         Driver name      : mxc-isi
> >         Model            : FSL Capture Media Device
> >         Serial           :
> >         Bus info         : platform:32e00000.isi
> >         Media version    : 6.5.0
> >         Hardware revision: 0x00000000 (0)
> >         Driver version   : 6.5.0
> > Interface Info:
> >         ID               : 0x0300000c
> >         Type             : V4L Video
> > Entity Info:
> >         ID               : 0x0000000a (10)
> >         Name             : mxc_isi.0.capture
> >         Function         : V4L2 I/O
> >         Pad 0x0100000b   : 0: Sink
> >           Link 0x0200000e: from remote pad 0x1000009 of entity
> > 'mxc_isi.0' (Video Pixel Formatter): Data, Enabled, Immutable
> > Priority: 2
> > Video input : 0 (mxc_isi.0.capture: ok)
> > Format Video Capture Multiplanar:
> >         Width/Height      : 640/480
> >         Pixel Format      : 'RGGB' (8-bit Bayer RGRG/GBGB)
> >         Field             : None
> >         Number of planes  : 1
> >         Flags             :
> >         Colorspace        : sRGB
> >         Transfer Function : sRGB
> >         YCbCr/HSV Encoding: ITU-R 601
> >         Quantization      : Limited Range
> >         Plane 0           :
> >            Bytes per Line : 640
> >            Size Image     : 307200
> >
> > User Controls
> >
> >                 horizontal_flip 0x00980914 (bool)   : default=0 value=0
> >                   vertical_flip 0x00980915 (bool)   : default=0 value=0
> >                 alpha_component 0x00980929 (int)    : min=0 max=255
> > step=1 default=0 value=0
> >
> > # try to capture a frame
> > v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=x.raw --stream-count=1
> >                 VIDIOC_STREAMON returned -1 (Broken pipe)
> > ^^^ fails... not sure why
> >
> > # try to use gstreamer
> > gst-launch-1.0 v4l2src device=/dev/video0 !
> > video/x-bayer,format=rggb,width=640,height=480,framerate=10/1 !
> > fakesink
> > Setting pipeline to PAUSED ...
> > Pipeline is live and does not need PREROLL ...
> > Pipeline is PREROLLED ...
> > Setting pipeline to PLAYING ...
> > New clock: GstSystemClock
> > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed
> > to allocate required memory.
> > Additional debug info:
> > ../sys/v4l2/gstv4l2src.c(759): gst_v4l2src_decide_allocation ():
> > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > Buffer pool activation failed
> > ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > Internal data stream error.
> > Execution ended after 0:00:00.005517125
> > Additional debug info:
> > ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop ():
> > /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> > streaming stopped, reason not-negotiated (-4)
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
> > ^^^ not sure what the memory allocation failure is about. It was
> > complaining about cma memory until I added cma=256M to the cmdline
> >
> > I'm now at the point where I likely need help from the video4linux and
> > linux-media (cc'd) gurus.
> 
> 
> The video format from the camera doesn't match the video format
> through the ISI and the crossbar, so you're getting the broken pipe.
> My experience with the ISI is that they all need to match since the
> ISI isn't an ISP.

I've written a guide that explains how to use the MC and V4L2 subdev
userspace APIs to configure a pipeline. You can find it at
https://git.ideasonboard.org/doc/mc-v4l2.git/. It only assumes knowledge
of the traditional V4L2 API, and should hand-hold you through the rest.
If anything is unclear there, please let me know (or submit a patch
:-)).

> Laurent would likely suggest libcamera, but I haven't used it yet.

How did you know ? :-)

> I'm waiting for the 8MP's ISP driver to get finalized.  However, the
> ISI on the Nano is similar to the ISI on the Plus, so if you want to
> take a look at the patch I did for the Beacon Nano board, it might
> give you some ideas on how to set the video formats.  The patch I
> submitted uses a different video format, but I would expect it to work
> if you change the video format to the RGGB from the IMX219 camera.
> 
> Hopefully this patch [1] can give you some idea on how to set the
> video formats for each of the subdevs.
> 
> adam
> 
> [1] - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mn-beacon-baseboard.dtsi?h=v6.5-rc1&id=6bc3ea47332648a4211926ba7afc1e1fb935c71a
> 
> > > > [1] https://patchwork.linuxtv.org/project/linux-media/patch/20230418153104.21337-2-laurent.pinchart@ideasonboard.com/

-- 
Regards,

Laurent Pinchart

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-07-12 17:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-08  0:27 imx8mp mipi csi camera overlay: Unable to retrieve endpoint for port@1 Tim Harvey
2023-07-08  1:10 ` Adam Ford
2023-07-11  0:58   ` Tim Harvey
2023-07-11  1:08     ` Adam Ford
2023-07-11 22:16       ` Tim Harvey
2023-07-11 22:49         ` Kieran Bingham
2023-07-11 23:45           ` Tim Harvey
2023-07-12  9:27             ` Kieran Bingham
2023-07-12 17:34       ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox