All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yong <yong.deng@magewell.com>
To: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Baruch Siach <baruch@tkos.co.il>,
	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: Wed, 23 Aug 2017 10:41:18 +0800	[thread overview]
Message-ID: <20170823104118.b4524830e4bb767d7714772c@magewell.com> (raw)
In-Reply-To: <20170821202145.kmxancepyq55v3o2@flea.lan>

On Mon, 21 Aug 2017 22:21:45 +0200
Maxime Ripard <maxime.ripard@free-electrons.com> wrote:

> Hi Baruch,
> 
> On Sun, Jul 30, 2017 at 09:08:01AM +0300, Baruch Siach wrote:
> > 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.
> 
> You also have the option to use the traces to do that, but if that's
> useful, this should be added to regmap itself. It can benefit others
> too.
> 
> > > > +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.
> 
> Shouldn't we return an error code then? The names of these flags could
> be better too.

Then, where and how to deal with the error coce.

> 
> Maxime
> 
> -- 
> Maxime Ripard, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com


Thanks,
Yong

WARNING: multiple messages have this Message-ID (diff)
From: Yong <yong.deng-+3dxTMOEIRNWk0Htik3J/w@public.gmane.org>
To: Maxime Ripard
	<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
Cc: Baruch Siach <baruch-NswTu9S1W3P6gbPvEgmw2w@public.gmane.org>,
	Mauro Carvalho Chehab
	<mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	"David S. Miller" <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>,
	Hans Verkuil <hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Hugues Fruchet <hugues.fruchet-qxv4g6HH51o@public.gmane.org>,
	Yannick Fertre <yannick.fertre-qxv4g6HH51o@public.gmane.org>,
	Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
	Benoit Parrot <bparrot-l0cyMroinI0@public.gmane.org>,
	Benjamin Gaignard
	<benjamin.gaignard-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Jean-Christophe Trotin
	<jean-christophe.trotin-qxv4g6HH51o@public.gmane.org>,
	Ramesh Shanmugasundaram
	<ramesh.shanmugasundaram-kTT6dE0pTRh9uiUsa/gSgQ@public.gmane.org>,
	Minghsiu Tsai
	<minghsiu.tsai-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>,
	Krzysztof Kozlowski
	<krzk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Robert Jarzmik <robert.jarzmik-GANU6spQydw@public.gmane.org>,
	linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.orglinux
Subject: Re: [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI.
Date: Wed, 23 Aug 2017 10:41:18 +0800	[thread overview]
Message-ID: <20170823104118.b4524830e4bb767d7714772c@magewell.com> (raw)
In-Reply-To: <20170821202145.kmxancepyq55v3o2-ZC1Zs529Oq4@public.gmane.org>

On Mon, 21 Aug 2017 22:21:45 +0200
Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> wrote:

> Hi Baruch,
> 
> On Sun, Jul 30, 2017 at 09:08:01AM +0300, Baruch Siach wrote:
> > 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-+3dxTMOEIRNWk0Htik3J/w@public.gmane.org>
> > 
> > [...]
> > 
> > > > +#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.
> 
> You also have the option to use the traces to do that, but if that's
> useful, this should be added to regmap itself. It can benefit others
> too.
> 
> > > > +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.
> 
> Shouldn't we return an error code then? The names of these flags could
> be better too.

Then, where and how to deal with the error coce.

> 
> Maxime
> 
> -- 
> Maxime Ripard, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com


Thanks,
Yong

WARNING: multiple messages have this Message-ID (diff)
From: yong.deng@magewell.com (Yong)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI.
Date: Wed, 23 Aug 2017 10:41:18 +0800	[thread overview]
Message-ID: <20170823104118.b4524830e4bb767d7714772c@magewell.com> (raw)
In-Reply-To: <20170821202145.kmxancepyq55v3o2@flea.lan>

On Mon, 21 Aug 2017 22:21:45 +0200
Maxime Ripard <maxime.ripard@free-electrons.com> wrote:

> Hi Baruch,
> 
> On Sun, Jul 30, 2017 at 09:08:01AM +0300, Baruch Siach wrote:
> > 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.
> 
> You also have the option to use the traces to do that, but if that's
> useful, this should be added to regmap itself. It can benefit others
> too.
> 
> > > > +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.
> 
> Shouldn't we return an error code then? The names of these flags could
> be better too.

Then, where and how to deal with the error coce.

> 
> Maxime
> 
> -- 
> Maxime Ripard, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com


Thanks,
Yong

  reply	other threads:[~2017-08-23  2:41 UTC|newest]

Thread overview: 159+ 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 ` Yong Deng
2017-07-27  5:01 ` Yong Deng
2017-07-27  5:01 ` [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI Yong Deng
2017-07-27  5:01   ` Yong Deng
2017-07-27  5:01   ` Yong Deng
2017-07-27 12:16   ` Baruch Siach
2017-07-27 12:16     ` Baruch Siach
2017-07-27 12:16     ` Baruch Siach
2017-07-27 12:25     ` Maxime Ripard
2017-07-27 12:25       ` Maxime Ripard
2017-07-27 12:25       ` Maxime Ripard
2017-07-31  0:47       ` Yong
2017-07-31  0:47         ` Yong
2017-07-31  0:47         ` Yong
2017-07-28 16:02   ` Maxime Ripard
2017-07-28 16:02     ` Maxime Ripard
2017-07-28 16:02     ` Maxime Ripard
2017-07-30  6:08     ` Baruch Siach
2017-07-30  6:08       ` Baruch Siach
2017-07-30  6:08       ` Baruch Siach
2017-07-31  1:48       ` Yong
2017-07-31  1:48         ` Yong
2017-07-31  1:48         ` Yong
2017-07-31  5:13         ` Baruch Siach
2017-07-31  5:13           ` Baruch Siach
2017-07-31  5:13           ` Baruch Siach
2017-08-21 20:21       ` Maxime Ripard
2017-08-21 20:21         ` Maxime Ripard
2017-08-21 20:21         ` Maxime Ripard
2017-08-23  2:41         ` Yong [this message]
2017-08-23  2:41           ` Yong
2017-08-23  2:41           ` Yong
2017-08-23 19:24           ` Maxime Ripard
2017-08-23 19:24             ` Maxime Ripard
2017-08-23 19:24             ` Maxime Ripard
2017-08-24  1:43             ` Yong
2017-08-24  1:43               ` Yong
2017-08-24  1:43               ` Yong
2017-07-31  3:16     ` Yong
2017-07-31  3:16       ` Yong
2017-07-31  3:16       ` Yong
2017-08-22 17:43       ` Maxime Ripard
2017-08-22 17:43         ` Maxime Ripard
2017-08-22 17:43         ` Maxime Ripard
2017-08-23  2:32         ` Yong
2017-08-23  2:32           ` Yong
2017-08-23  2:32           ` Yong
2017-08-25 13:41           ` Maxime Ripard
2017-08-25 13:41             ` Maxime Ripard
2017-08-25 13:41             ` Maxime Ripard
2017-08-28  7:00             ` Yong
2017-08-28  7:00               ` Yong
2017-08-28  7:00               ` Yong
2017-08-21 14:37   ` Hans Verkuil
2017-08-21 14:37     ` Hans Verkuil
2017-08-21 14:37     ` Hans Verkuil
2017-08-22  3:01     ` Yong
2017-08-22  3:01       ` Yong
2017-08-22  3:01       ` Yong
2017-08-22  6:43       ` Hans Verkuil
2017-08-22  6:43         ` Hans Verkuil
2017-08-22  6:43         ` Hans Verkuil
2017-08-22  7:51         ` Yong
2017-08-22  7:51           ` Yong
2017-08-22  7:51           ` Yong
2017-08-22 20:17         ` Maxime Ripard
2017-08-22 20:17           ` Maxime Ripard
2017-08-22 20:17           ` Maxime Ripard
2017-08-22 20:52           ` Laurent Pinchart
2017-08-22 20:52             ` Laurent Pinchart
2017-08-22 20:52             ` Laurent Pinchart
2017-08-23  6:52           ` Hans Verkuil
2017-08-23  6:52             ` Hans Verkuil
2017-08-23  6:52             ` Hans Verkuil
2017-08-23  7:43             ` Laurent Pinchart
2017-08-23  7:43               ` Laurent Pinchart
2017-08-23  7:43               ` Laurent Pinchart
2017-08-23 11:13               ` icenowy
2017-08-23 11:13                 ` icenowy at aosc.io
2017-08-23 11:13                 ` icenowy
2017-09-21 13:45   ` [linux-sunxi] " Ondřej Jirman
2017-09-21 13:45     ` Ondřej Jirman
2017-09-21 13:45     ` 'Ondřej Jirman' via linux-sunxi
2017-09-22  0:57   ` 回复:[linux-sunxi] " 邓永
2017-09-22  8:44   ` Mylene JOSSERAND
2017-09-22  8:44     ` Mylene JOSSERAND
2017-09-22  8:44     ` Mylene JOSSERAND
2017-09-22  9:08     ` Yong
2017-09-22  9:08       ` Yong
2017-09-22  9:08       ` Yong
2017-11-21 15:48   ` Maxime Ripard
2017-11-21 15:48     ` Maxime Ripard
2017-11-21 15:48     ` Maxime Ripard
2017-11-22  1:33     ` Yong
2017-11-22  1:33       ` Yong
2017-11-22  1:33       ` Yong
2017-11-22  9:45       ` Maxime Ripard
2017-11-22  9:45         ` Maxime Ripard
2017-11-22  9:45         ` Maxime Ripard
2017-11-23  1:14         ` Yong
2017-11-23  1:14           ` Yong
2017-11-23  1:14           ` Yong
2017-11-25 16:02           ` Maxime Ripard
2017-11-25 16:02             ` Maxime Ripard
2017-11-25 16:02             ` Maxime Ripard
2017-12-04  9:45             ` Yong
2017-12-04  9:45               ` Yong
2017-12-04  9:45               ` Yong
2017-12-15 10:50               ` Maxime Ripard
2017-12-15 10:50                 ` Maxime Ripard
2017-12-15 10:50                 ` Maxime Ripard
2017-12-15 11:01                 ` Yong
2017-12-15 11:01                   ` Yong
2017-12-15 11:01                   ` Yong
2017-12-15 22:14                   ` Maxime Ripard
2017-12-15 22:14                     ` Maxime Ripard
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-27  5:01   ` Yong Deng
2017-07-27  5:01   ` Yong Deng
2017-07-28 16:03   ` Maxime Ripard
2017-07-28 16:03     ` Maxime Ripard
2017-07-28 16:03     ` Maxime Ripard
2017-07-31  0:50     ` Yong
2017-07-31  0:50       ` Yong
2017-07-31  0:50       ` Yong
2017-08-03 19:14   ` Rob Herring
2017-08-03 19:14     ` Rob Herring
2017-08-03 19:14     ` Rob Herring
2017-08-07  1:00     ` Yong
2017-08-07  1:00       ` Yong
2017-08-07  1:00       ` Yong
2017-12-19 11:53   ` Sakari Ailus
2017-12-19 11:53     ` Sakari Ailus
2017-12-19 11:53     ` Sakari Ailus
2017-12-21  2:49     ` Yong
2017-12-21  2:49       ` Yong
2017-12-21  2:49       ` Yong
2017-12-27 21:47       ` Sakari Ailus
2017-12-27 21:47         ` Sakari Ailus
2017-12-27 21:47         ` Sakari Ailus
2017-12-28  1:04         ` Yong
2017-12-28  1:04           ` Yong
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-07-27  5:01   ` Yong Deng
2017-07-27  5:01   ` Yong Deng
2017-12-19 11:48   ` Sakari Ailus
2017-12-19 11:48     ` Sakari Ailus
2017-12-19 11:48     ` Sakari Ailus
2017-12-21  2:40     ` Yong
2017-12-21  2:40       ` Yong
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
2017-07-27  3:51   ` Yong Deng
2017-07-27  3:51 ` Yong Deng
     [not found] ` <1501127474-40895-1-git-send-email-yong.deng-+3dxTMOEIRNWk0Htik3J/w@public.gmane.org>
2017-07-27  3:51   ` Yong Deng
2017-07-27  3:51   ` 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=20170823104118.b4524830e4bb767d7714772c@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.