Message ID | 20220208155027.891055-1-jeanmichel.hautbois@ideasonboard.com |
---|---|
Headers | show |
Series | Add support for BCM2835 camera interface (unicam) | expand |
Hi Jean-Michel, Am 08.02.22 um 16:50 schrieb Jean-Michel Hautbois: > Add both MIPI CSI-2 nodes in the core bcm2711 tree. Use the 3-cells > interrupt declaration, corresponding clocks and default as disabled. > > Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > arch/arm/boot/dts/bcm2711-rpi.dtsi | 15 +++++++++++++++ > arch/arm/boot/dts/bcm2711.dtsi | 22 ++++++++++++++++++++++ > 2 files changed, 37 insertions(+) > > diff --git a/arch/arm/boot/dts/bcm2711-rpi.dtsi b/arch/arm/boot/dts/bcm2711-rpi.dtsi > index ca266c5d9f9b..97ee494891af 100644 > --- a/arch/arm/boot/dts/bcm2711-rpi.dtsi > +++ b/arch/arm/boot/dts/bcm2711-rpi.dtsi > @@ -1,6 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0 > #include "bcm2835-rpi.dtsi" > > +#include <dt-bindings/power/raspberrypi-power.h> > #include <dt-bindings/reset/raspberrypi,firmware-reset.h> > > / { > @@ -18,6 +19,20 @@ aliases { > }; > }; > > +&csi0 { > + clocks = <&clocks BCM2835_CLOCK_CAM0>, > + <&firmware_clocks 4>; > + clock-names = "lp", "vpu"; > + power-domains = <&power RPI_POWER_DOMAIN_UNICAM0>; > +}; > + > +&csi1 { > + clocks = <&clocks BCM2835_CLOCK_CAM1>, > + <&firmware_clocks 4>; > + clock-names = "lp", "vpu"; > + power-domains = <&power RPI_POWER_DOMAIN_UNICAM1>; > +}; see comment below > + > &firmware { > firmware_clocks: clocks { > compatible = "raspberrypi,firmware-clocks"; > diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi > index dff18fc9a906..21eb10122e50 100644 > --- a/arch/arm/boot/dts/bcm2711.dtsi > +++ b/arch/arm/boot/dts/bcm2711.dtsi > @@ -293,6 +293,28 @@ hvs: hvs@7e400000 { > interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; > }; > > + csi0: csi@7e800000 { > + compatible = "brcm,bcm2835-unicam"; > + reg = <0x7e800000 0x800>, > + <0x7e802000 0x4>; > + reg-names = "unicam", "cmi"; > + interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; > + status = "disabled"; > + port { > + }; > + }; > + > + csi1: csi@7e801000 { > + compatible = "brcm,bcm2835-unicam"; > + reg = <0x7e801000 0x800>, > + <0x7e802004 0x4>; > + reg-names = "unicam", "cmi"; > + interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>; > + status = "disabled"; > + port { > + }; > + }; > + i didn't noticed before that everything except of the interrupts are identical to the bcm283x boards [1]. So please define both nodes in bcm283x.dtsi (with bcm283x interrupts) and just override the interrupts for bcm2711 in this dtsi file. As a result the clocks and power domains from above can go to bcm2835-rpi.dtsi. > pixelvalve3: pixelvalve@7ec12000 { > compatible = "brcm,bcm2711-pixelvalve3"; > reg = <0x7ec12000 0x100>;
Am 13.02.22 um 11:35 schrieb Stefan Wahren: > Hi Jean-Michel, > > Am 08.02.22 um 16:50 schrieb Jean-Michel Hautbois: >> + >> &firmware { >> firmware_clocks: clocks { >> compatible = "raspberrypi,firmware-clocks"; >> diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi >> index dff18fc9a906..21eb10122e50 100644 >> --- a/arch/arm/boot/dts/bcm2711.dtsi >> +++ b/arch/arm/boot/dts/bcm2711.dtsi >> @@ -293,6 +293,28 @@ hvs: hvs@7e400000 { >> interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; >> }; >> >> + csi0: csi@7e800000 { >> + compatible = "brcm,bcm2835-unicam"; >> + reg = <0x7e800000 0x800>, >> + <0x7e802000 0x4>; >> + reg-names = "unicam", "cmi"; >> + interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; >> + status = "disabled"; >> + port { >> + }; >> + }; >> + >> + csi1: csi@7e801000 { >> + compatible = "brcm,bcm2835-unicam"; >> + reg = <0x7e801000 0x800>, >> + <0x7e802004 0x4>; >> + reg-names = "unicam", "cmi"; >> + interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>; >> + status = "disabled"; >> + port { >> + }; >> + }; >> + > i didn't noticed before that everything except of the interrupts are > identical to the bcm283x boards [1]. So please define both nodes in > bcm283x.dtsi (with bcm283x interrupts) and just override the interrupts > for bcm2711 in this dtsi file. > > As a result the clocks and power domains from above can go to > bcm2835-rpi.dtsi. sorry, i forgot the downstream link: [1] - https://github.com/raspberrypi/linux/blob/rpi-5.15.y/arch/arm/boot/dts/bcm270x.dtsi#L88 > >> pixelvalve3: pixelvalve@7ec12000 { >> compatible = "brcm,bcm2711-pixelvalve3"; >> reg = <0x7ec12000 0x100>;
Hi Jean-Michel, Am 20.02.22 um 15:30 schrieb Jean-Michel Hautbois: > Hi Stefan, > > On 16/02/2022 21:57, Stefan Wahren wrote: >> Hi Jean-Michel, >> >> Am 08.02.22 um 16:50 schrieb Jean-Michel Hautbois: >>> Hello ! >>> >>> ... >>> >>> In order to properly configure the media pipeline, it is needed to call >>> the usual ioctls, and configure routing in order to send the embedded >>> data from the sensor to the "unicam-embedded" device node : >>> >>> ``` >>> media=0 >>> media-ctl -d${media} -l "'imx219 2-0010':0->'unicam-subdev':0 [1]" >>> media-ctl -d${media} -l "'unicam-subdev':1->'unicam-image':0 [1]" >>> media-ctl -d${media} -v -R "'unicam-subdev' [0/0->1/0[1],0/1->2/0[1]]" >>> media-ctl -d${media} -V "'imx219 2-0010':0/0 >>> [fmt:SRGGB10_1X10/3280x2464 field:none]" >>> v4l2-ctl -d0 --set-fmt-video >>> width=3280,height=2464,pixelformat='pRAA',field=none >>> media-ctl -d${media} -v -V "'imx219 2-0010':0/1 >>> [fmt:METADATA_8/16384x1 field:none]" >>> media-ctl -d${media} -p >>> ``` >> >> i tried to test the unicam driver on a Raspberry Pi 4 with the imx219 >> camera (based on 5.17-rc4). The unicam & imx219 driver probes and >> /dev/video0 is created. >> >> If a execute the first media-ctl command, it complains with invalid >> argument 22. Is there a more fool-proof variant to configure this (a >> script or something else)? I never used the unicam driver before. >> >> Here is the output of >> >> $ mediactl -d0 -p >> > > Based on your output, I suppose the issue is the naming of the imx219 > media entity ('imx219 2-0010' vs 'imx219 5-0010'). > You could add a '-v' in the line to help you I suppose. > > A more bullet-proof version of the commands is certainly doable, not > sure how though as I would not like to rewrite a libcamera-like > command ;-). Today i had a little bit time and manage to get the commands working. After running the yavta command, the kernel put the following: [ 405.908674] cma: cma_alloc: linux,cma: alloc failed, req-size: 2484 pages, ret: -12 [ 405.908695] unicam fe801000.csi: dma alloc of size 10174464 failed As per default the CMA size with mainline DTB is 64 MB. After that i increase the value to 256 MB and the issue disappeared. Maybe this is something which could be integrated into the overlay. But at least a note about this in the cover letter of the next version of this series would be nice. Best regards