From: Yong <yong.deng@magewell.com>
To: Baruch Siach <baruch@tkos.co.il>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>, Chen-Yu Tsai <wens@csie.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"David S. Miller" <davem@davemloft.net>,
Hans Verkuil <hverkuil@xs4all.nl>, Arnd Bergmann <arnd@arndb.de>,
Hugues Fruchet <hugues.fruchet@st.com>,
Yannick Fertre <yannick.fertre@st.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Benoit Parrot <bparrot@ti.com>,
Benjamin Gaignard <benjamin.gaignard@linaro.org>,
Jean-Christophe Trotin <jean-christophe.trotin@st.com>,
Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>,
Minghsiu Tsai <minghsiu.tsai@mediatek.com>,
Krzysztof Kozlowski <krzk@kernel.org>,
Robert Jarzmik <robert.jarzmik@free.fr>,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com
Subject: Re: [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI.
Date: Mon, 31 Jul 2017 09:48:06 +0800 [thread overview]
Message-ID: <20170731094806.88c3188576d7e2c14b5e3e33@magewell.com> (raw)
In-Reply-To: <20170730060801.bkc2kvm72ktixy74@tarshish>
Hi,
On Sun, 30 Jul 2017 09:08:01 +0300
Baruch Siach <baruch@tkos.co.il> wrote:
> Hi Maxime, Yong,
>
> On Fri, Jul 28, 2017 at 06:02:33PM +0200, Maxime Ripard wrote:
> > Hi,
> >
> > Thanks for the second iteration!
> >
> > On Thu, Jul 27, 2017 at 01:01:35PM +0800, Yong Deng wrote:
> > > Allwinner V3s SoC have two CSI module. CSI0 is used for MIPI interface
> > > and CSI1 is used for parallel interface. This is not documented in
> > > datasheet but by testing and guess.
> > >
> > > This patch implement a v4l2 framework driver for it.
> > >
> > > Currently, the driver only support the parallel interface. MIPI-CSI2,
> > > ISP's support are not included in this patch.
> > >
> > > Signed-off-by: Yong Deng <yong.deng@magewell.com>
>
> [...]
>
> > > +#ifdef DEBUG
> > > +static void sun6i_csi_dump_regs(struct sun6i_csi_dev *sdev)
> > > +{
> > > + struct regmap *regmap = sdev->regmap;
> > > + u32 val;
> > > +
> > > + regmap_read(regmap, CSI_EN_REG, &val);
> > > + printk("CSI_EN_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_IF_CFG_REG, &val);
> > > + printk("CSI_IF_CFG_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CAP_REG, &val);
> > > + printk("CSI_CAP_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_SYNC_CNT_REG, &val);
> > > + printk("CSI_SYNC_CNT_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_FIFO_THRS_REG, &val);
> > > + printk("CSI_FIFO_THRS_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_PTN_LEN_REG, &val);
> > > + printk("CSI_PTN_LEN_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_PTN_ADDR_REG, &val);
> > > + printk("CSI_PTN_ADDR_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_VER_REG, &val);
> > > + printk("CSI_VER_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_CFG_REG, &val);
> > > + printk("CSI_CH_CFG_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_SCALE_REG, &val);
> > > + printk("CSI_CH_SCALE_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_F0_BUFA_REG, &val);
> > > + printk("CSI_CH_F0_BUFA_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_F1_BUFA_REG, &val);
> > > + printk("CSI_CH_F1_BUFA_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_F2_BUFA_REG, &val);
> > > + printk("CSI_CH_F2_BUFA_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_STA_REG, &val);
> > > + printk("CSI_CH_STA_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_INT_EN_REG, &val);
> > > + printk("CSI_CH_INT_EN_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_INT_STA_REG, &val);
> > > + printk("CSI_CH_INT_STA_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_FLD1_VSIZE_REG, &val);
> > > + printk("CSI_CH_FLD1_VSIZE_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_HSIZE_REG, &val);
> > > + printk("CSI_CH_HSIZE_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_VSIZE_REG, &val);
> > > + printk("CSI_CH_VSIZE_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_BUF_LEN_REG, &val);
> > > + printk("CSI_CH_BUF_LEN_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_FLIP_SIZE_REG, &val);
> > > + printk("CSI_CH_FLIP_SIZE_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_FRM_CLK_CNT_REG, &val);
> > > + printk("CSI_CH_FRM_CLK_CNT_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_ACC_ITNL_CLK_CNT_REG, &val);
> > > + printk("CSI_CH_ACC_ITNL_CLK_CNT_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_FIFO_STAT_REG, &val);
> > > + printk("CSI_CH_FIFO_STAT_REG=0x%x\n", val);
> > > + regmap_read(regmap, CSI_CH_PCLK_STAT_REG, &val);
> > > + printk("CSI_CH_PCLK_STAT_REG=0x%x\n", val);
> > > +}
> > > +#endif
> >
> > You can already dump a regmap through debugfs, that's redundant.
>
> The advantage of in-code registers dump routine is the ability to synchronize
> the snapshot with the driver code execution. This is particularly important
> for the capture statistics registers. I have found it useful here.
Agree. It is not used to expose the registers value to user space. If you
think it is redundant, I will delete it.
>
> [...]
>
> > > +static int update_buf_addr(struct sun6i_csi *csi, dma_addr_t addr)
> > > +{
> > > + struct sun6i_csi_dev *sdev = sun6i_csi_to_dev(csi);
> > > + /* transform physical address to bus address */
> > > + dma_addr_t bus_addr = addr - 0x40000000;
> >
> > Like Baruch noticed, you should use PHYS_OFFSET here. The A80 for
> > example has a different RAM base address.
> >
> > > +
> > > + regmap_write(sdev->regmap, CSI_CH_F0_BUFA_REG,
> > > + (bus_addr + sdev->planar_offset[0]) >> 2);
>
> Why do you need the bit shift? Does that work for you?
>
> The User Manuals of both the V3s and the and the A33 (AKA R16) state that the
> BUFA field size in this register is 31:00, that is 32bit. I have found no
> indication of this bit shift in the Olimex provided sunxi-vfe[1] driver. On
> the A33 I have found that only after removing the bit-shift, (some sort of)
> data started to appear in the buffer.
>
> [1] https://github.com/hehopmajieh/a33_linux/tree/master/drivers/media/video/sunxi-vfe
>
The Users Manuals do not document this bit shift. You should see line 10 to
32 in https://github.com/hehopmajieh/a33_linux/blob/master/drivers/media/video/sunxi-vfe/csi/csi_reg.c
> [...]
>
> > > +static irqreturn_t sun6i_csi_isr(int irq, void *dev_id)
> > > +{
> > > + struct sun6i_csi_dev *sdev = (struct sun6i_csi_dev *)dev_id;
> > > + struct regmap *regmap = sdev->regmap;
> > > + u32 status;
> > > +
> > > + regmap_read(regmap, CSI_CH_INT_STA_REG, &status);
> > > +
> > > + if ((status & CSI_CH_INT_STA_FIFO0_OF_PD) ||
> > > + (status & CSI_CH_INT_STA_FIFO1_OF_PD) ||
> > > + (status & CSI_CH_INT_STA_FIFO2_OF_PD) ||
> > > + (status & CSI_CH_INT_STA_HB_OF_PD)) {
> > > + regmap_write(regmap, CSI_CH_INT_STA_REG, status);
> > > + regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN, 0);
> > > + regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN,
> > > + CSI_EN_CSI_EN);
> >
> > You need to enable / disable it at every frame? How do you deal with
> > double buffering? (or did you choose to ignore it for now?)
>
> These *_OF_PD status bits indicate an overflow error condition.
Right.
>
> > > + return IRQ_HANDLED;
> > > + }
> > > +
> > > + if (status & CSI_CH_INT_STA_FD_PD) {
> > > + sun6i_video_frame_done(&sdev->csi.video);
> > > + }
> > > +
> > > + regmap_write(regmap, CSI_CH_INT_STA_REG, status);
> >
> > Isn't it redundant with the one you did in the condition a bit above?
> >
> > You should also check that your device indeed generated an
> > interrupt. In the occurence of a spourious interrupt, your code will
> > return IRQ_HANDLED, which is the wrong thing to do.
> >
> > I think you should reverse your logic a bit here to make this
> > easier. You should just check that your status flags are indeed set,
> > and if not just bail out and return IRQ_NONE.
> >
> > And if they are, go on with treating your interrupt.
> >
> > > +
> > > + return IRQ_HANDLED;
> > > +}
>
> baruch
>
> --
> http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
> =}------------------------------------------------ooO--U--Ooo------------{=
> - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -
Thanks,
Yong
next prev parent reply other threads:[~2017-07-31 1:48 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-27 5:01 [PATCH v2 0/3] Initial Allwinner V3s CSI Support Yong Deng
2017-07-27 5:01 ` [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI Yong Deng
2017-07-27 12:16 ` Baruch Siach
2017-07-27 12:25 ` Maxime Ripard
2017-07-31 0:47 ` Yong
2017-07-28 16:02 ` Maxime Ripard
2017-07-30 6:08 ` Baruch Siach
2017-07-31 1:48 ` Yong [this message]
2017-07-31 5:13 ` Baruch Siach
2017-08-21 20:21 ` Maxime Ripard
2017-08-23 2:41 ` Yong
2017-08-23 19:24 ` Maxime Ripard
2017-08-24 1:43 ` Yong
2017-07-31 3:16 ` Yong
2017-08-22 17:43 ` Maxime Ripard
2017-08-23 2:32 ` Yong
2017-08-25 13:41 ` Maxime Ripard
2017-08-28 7:00 ` Yong
2017-08-21 14:37 ` Hans Verkuil
2017-08-22 3:01 ` Yong
2017-08-22 6:43 ` Hans Verkuil
2017-08-22 7:51 ` Yong
2017-08-22 20:17 ` Maxime Ripard
2017-08-22 20:52 ` Laurent Pinchart
2017-08-23 6:52 ` Hans Verkuil
2017-08-23 7:43 ` Laurent Pinchart
2017-08-23 11:13 ` icenowy
2017-09-21 13:45 ` [linux-sunxi] " Ondřej Jirman
2017-09-22 8:44 ` Mylene JOSSERAND
2017-09-22 9:08 ` Yong
2017-11-21 15:48 ` Maxime Ripard
2017-11-22 1:33 ` Yong
2017-11-22 9:45 ` Maxime Ripard
2017-11-23 1:14 ` Yong
2017-11-25 16:02 ` Maxime Ripard
2017-12-04 9:45 ` Yong
2017-12-15 10:50 ` Maxime Ripard
2017-12-15 11:01 ` Yong
2017-12-15 22:14 ` Maxime Ripard
2017-07-27 5:01 ` [PATCH v2 2/3] dt-bindings: media: Add Allwinner V3s Camera Sensor Interface (CSI) Yong Deng
2017-07-28 16:03 ` Maxime Ripard
2017-07-31 0:50 ` Yong
2017-08-03 19:14 ` Rob Herring
2017-08-07 1:00 ` Yong
2017-12-19 11:53 ` Sakari Ailus
2017-12-21 2:49 ` Yong
2017-12-27 21:47 ` Sakari Ailus
2017-12-28 1:04 ` Yong
2017-07-27 5:01 ` [PATCH v2 3/3] media: MAINTAINERS: add entries for Allwinner V3s CSI Yong Deng
2017-12-19 11:48 ` Sakari Ailus
2017-12-21 2:40 ` Yong
-- strict thread matches above, loose matches on Subject: below --
2017-07-27 3:51 [PATCH v2 0/3] Initial Allwinner V3s CSI Support Yong Deng
2017-07-27 3:51 ` [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI Yong Deng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170731094806.88c3188576d7e2c14b5e3e33@magewell.com \
--to=yong.deng@magewell.com \
--cc=arnd@arndb.de \
--cc=baruch@tkos.co.il \
--cc=benjamin.gaignard@linaro.org \
--cc=bparrot@ti.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hugues.fruchet@st.com \
--cc=hverkuil@xs4all.nl \
--cc=jean-christophe.trotin@st.com \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-sunxi@googlegroups.com \
--cc=mark.rutland@arm.com \
--cc=maxime.ripard@free-electrons.com \
--cc=mchehab@kernel.org \
--cc=minghsiu.tsai@mediatek.com \
--cc=p.zabel@pengutronix.de \
--cc=ramesh.shanmugasundaram@bp.renesas.com \
--cc=robert.jarzmik@free.fr \
--cc=robh+dt@kernel.org \
--cc=wens@csie.org \
--cc=yannick.fertre@st.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).