All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Wood <scottwood@freescale.com>
To: <hongbo.zhang@freescale.com>
Cc: vinod.koul@intel.com, linux-kernel@vger.kernel.org,
	vakul@freescale.com, Hongbo Zhang <hongbo.zhang@freescale.com>,
	djbw@fb.com, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 2/2] DMA: Freescale: update driver to support 8-channel DMA engine
Date: Tue, 2 Jul 2013 18:13:06 -0500	[thread overview]
Message-ID: <1372806786.8183.127@snotra> (raw)
In-Reply-To: <1372650378-2936-2-git-send-email-hongbo.zhang@freescale.com> (from hongbo.zhang@freescale.com on Sun Jun 30 22:46:18 2013)

On 06/30/2013 10:46:18 PM, hongbo.zhang@freescale.com wrote:
> From: Hongbo Zhang <hongbo.zhang@freescale.com>
>=20
> This patch adds support to 8-channel DMA engine, thus the driver =20
> works for both
> the new 8-channel and the legacy 4-channel DMA engines.
>=20
> Signed-off-by: Hongbo Zhang <hongbo.zhang@freescale.com>
> ---
>  drivers/dma/fsldma.c |   48 =20
> ++++++++++++++++++++++++++++++++++--------------
>  drivers/dma/fsldma.h |    4 ++--
>  2 files changed, 36 insertions(+), 16 deletions(-)
>=20
> diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
> index 4fc2980..0f453ea 100644
> --- a/drivers/dma/fsldma.c
> +++ b/drivers/dma/fsldma.c
> @@ -1119,27 +1119,33 @@ static irqreturn_t fsldma_ctrl_irq(int irq, =20
> void *data)
>  	struct fsldma_device *fdev =3D data;
>  	struct fsldma_chan *chan;
>  	unsigned int handled =3D 0;
> -	u32 gsr, mask;
> +	u8 chan_sr[round_up(FSL_DMA_MAX_CHANS_PER_DEVICE, 4)];
> +	u32 gsr;
>  	int i;
>=20
> -	gsr =3D (fdev->feature & FSL_DMA_BIG_ENDIAN) ? in_be32(fdev->regs)
> -						   : =20
> in_le32(fdev->regs);
> -	mask =3D 0xff000000;
> -	dev_dbg(fdev->dev, "IRQ: gsr 0x%.8x\n", gsr);
> +	memset(&chan_sr, 0, sizeof(chan_sr));
> +	gsr =3D (fdev->feature & FSL_DMA_BIG_ENDIAN) ? =20
> in_be32(fdev->regs0)
> +						   : =20
> in_le32(fdev->regs0);
> +	memcpy(&chan_sr[0], &gsr, 4);
> +	dev_dbg(fdev->dev, "IRQ: gsr0 0x%.8x\n", gsr);
> +
> +	if (of_device_is_compatible(fdev->dev->of_node, =20
> "fsl,eloplus-dma2")) {

NACK; Figure out what sort of device you've got when you first probe =20
the device, and store the information for later.  Do not call device =20
tree stuff in an interrupt handler.

> +		gsr =3D (fdev->feature & FSL_DMA_BIG_ENDIAN) ?
> +			in_be32(fdev->regs1) : in_le32(fdev->regs1);
> +		memcpy(&chan_sr[4], &gsr, 4);
> +		dev_dbg(fdev->dev, "IRQ: gsr1 0x%.8x\n", gsr);
> +	}

Do these memcpy()s get inlined?  If not (and maybe even if they do), =20
it'd be better to use a union instead.

Wait a second -- how are we even getting into this code on these new =20
DMA controllers?  All 85xx-family DMA controllers use fsldma_chan_irq =20
directly.

> @@ -1341,13 +1349,22 @@ static int fsldma_of_probe(struct =20
> platform_device *op)
>  	INIT_LIST_HEAD(&fdev->common.channels);
>=20
>  	/* ioremap the registers for use */
> -	fdev->regs =3D of_iomap(op->dev.of_node, 0);
> -	if (!fdev->regs) {
> -		dev_err(&op->dev, "unable to ioremap registers\n");
> +	fdev->regs0 =3D of_iomap(op->dev.of_node, 0);
> +	if (!fdev->regs0) {
> +		dev_err(&op->dev, "unable to ioremap register0\n");
>  		err =3D -ENOMEM;
>  		goto out_free_fdev;
>  	}
>=20
> +	if (of_device_is_compatible(op->dev.of_node, =20
> "fsl,eloplus-dma2")) {

Not "fsl,eloplusplus-dma"? :-)

More seriously, if we're sticking with this "elo" naming, maybe =20
"fsl,elo3-dma" would be better.  It would be odd to have "2" in the =20
name of the third generation of this hardware.

> diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
> index f5c3879..880664d 100644
> --- a/drivers/dma/fsldma.h
> +++ b/drivers/dma/fsldma.h
> @@ -112,10 +112,10 @@ struct fsldma_chan_regs {
>  };
>=20
>  struct fsldma_chan;
> -#define FSL_DMA_MAX_CHANS_PER_DEVICE 4
> +#define FSL_DMA_MAX_CHANS_PER_DEVICE 8
>=20
>  struct fsldma_device {
> -	void __iomem *regs;	/* DGSR register base */
> +	void __iomem *regs0, *regs1;	/* DGSR registers */

Either give these meaningful names, or use an array.  Or both (dgsr[2]).

Or just get rid of this, since I don't see why we need DGSR1 at all, as =20
previously noted.

-Scott=

WARNING: multiple messages have this Message-ID (diff)
From: Scott Wood <scottwood@freescale.com>
To: <hongbo.zhang@freescale.com>
Cc: <vinod.koul@intel.com>, <djbw@fb.com>, <vakul@freescale.com>,
	<leoLi@freescale.com>, <linux-kernel@vger.kernel.org>,
	Hongbo Zhang <hongbo.zhang@freescale.com>,
	<linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH 2/2] DMA: Freescale: update driver to support 8-channel DMA engine
Date: Tue, 2 Jul 2013 18:13:06 -0500	[thread overview]
Message-ID: <1372806786.8183.127@snotra> (raw)
In-Reply-To: <1372650378-2936-2-git-send-email-hongbo.zhang@freescale.com> (from hongbo.zhang@freescale.com on Sun Jun 30 22:46:18 2013)

On 06/30/2013 10:46:18 PM, hongbo.zhang@freescale.com wrote:
> From: Hongbo Zhang <hongbo.zhang@freescale.com>
> 
> This patch adds support to 8-channel DMA engine, thus the driver  
> works for both
> the new 8-channel and the legacy 4-channel DMA engines.
> 
> Signed-off-by: Hongbo Zhang <hongbo.zhang@freescale.com>
> ---
>  drivers/dma/fsldma.c |   48  
> ++++++++++++++++++++++++++++++++++--------------
>  drivers/dma/fsldma.h |    4 ++--
>  2 files changed, 36 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
> index 4fc2980..0f453ea 100644
> --- a/drivers/dma/fsldma.c
> +++ b/drivers/dma/fsldma.c
> @@ -1119,27 +1119,33 @@ static irqreturn_t fsldma_ctrl_irq(int irq,  
> void *data)
>  	struct fsldma_device *fdev = data;
>  	struct fsldma_chan *chan;
>  	unsigned int handled = 0;
> -	u32 gsr, mask;
> +	u8 chan_sr[round_up(FSL_DMA_MAX_CHANS_PER_DEVICE, 4)];
> +	u32 gsr;
>  	int i;
> 
> -	gsr = (fdev->feature & FSL_DMA_BIG_ENDIAN) ? in_be32(fdev->regs)
> -						   :  
> in_le32(fdev->regs);
> -	mask = 0xff000000;
> -	dev_dbg(fdev->dev, "IRQ: gsr 0x%.8x\n", gsr);
> +	memset(&chan_sr, 0, sizeof(chan_sr));
> +	gsr = (fdev->feature & FSL_DMA_BIG_ENDIAN) ?  
> in_be32(fdev->regs0)
> +						   :  
> in_le32(fdev->regs0);
> +	memcpy(&chan_sr[0], &gsr, 4);
> +	dev_dbg(fdev->dev, "IRQ: gsr0 0x%.8x\n", gsr);
> +
> +	if (of_device_is_compatible(fdev->dev->of_node,  
> "fsl,eloplus-dma2")) {

NACK; Figure out what sort of device you've got when you first probe  
the device, and store the information for later.  Do not call device  
tree stuff in an interrupt handler.

> +		gsr = (fdev->feature & FSL_DMA_BIG_ENDIAN) ?
> +			in_be32(fdev->regs1) : in_le32(fdev->regs1);
> +		memcpy(&chan_sr[4], &gsr, 4);
> +		dev_dbg(fdev->dev, "IRQ: gsr1 0x%.8x\n", gsr);
> +	}

Do these memcpy()s get inlined?  If not (and maybe even if they do),  
it'd be better to use a union instead.

Wait a second -- how are we even getting into this code on these new  
DMA controllers?  All 85xx-family DMA controllers use fsldma_chan_irq  
directly.

> @@ -1341,13 +1349,22 @@ static int fsldma_of_probe(struct  
> platform_device *op)
>  	INIT_LIST_HEAD(&fdev->common.channels);
> 
>  	/* ioremap the registers for use */
> -	fdev->regs = of_iomap(op->dev.of_node, 0);
> -	if (!fdev->regs) {
> -		dev_err(&op->dev, "unable to ioremap registers\n");
> +	fdev->regs0 = of_iomap(op->dev.of_node, 0);
> +	if (!fdev->regs0) {
> +		dev_err(&op->dev, "unable to ioremap register0\n");
>  		err = -ENOMEM;
>  		goto out_free_fdev;
>  	}
> 
> +	if (of_device_is_compatible(op->dev.of_node,  
> "fsl,eloplus-dma2")) {

Not "fsl,eloplusplus-dma"? :-)

More seriously, if we're sticking with this "elo" naming, maybe  
"fsl,elo3-dma" would be better.  It would be odd to have "2" in the  
name of the third generation of this hardware.

> diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
> index f5c3879..880664d 100644
> --- a/drivers/dma/fsldma.h
> +++ b/drivers/dma/fsldma.h
> @@ -112,10 +112,10 @@ struct fsldma_chan_regs {
>  };
> 
>  struct fsldma_chan;
> -#define FSL_DMA_MAX_CHANS_PER_DEVICE 4
> +#define FSL_DMA_MAX_CHANS_PER_DEVICE 8
> 
>  struct fsldma_device {
> -	void __iomem *regs;	/* DGSR register base */
> +	void __iomem *regs0, *regs1;	/* DGSR registers */

Either give these meaningful names, or use an array.  Or both (dgsr[2]).

Or just get rid of this, since I don't see why we need DGSR1 at all, as  
previously noted.

-Scott

  reply	other threads:[~2013-07-02 23:13 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-01  3:46 [PATCH 1/2] DMA: Freescale: Add new 8-channel DMA engine device tree nodes hongbo.zhang
2013-07-01  3:46 ` [PATCH 2/2] DMA: Freescale: update driver to support 8-channel DMA engine hongbo.zhang
2013-07-02 23:13   ` Scott Wood [this message]
2013-07-02 23:13     ` Scott Wood
2013-07-03  3:47     ` Hongbo Zhang
2013-07-03  3:47       ` Hongbo Zhang
2013-07-03 16:41       ` Scott Wood
2013-07-03 16:41         ` Scott Wood
2013-07-03 16:41         ` Scott Wood
2013-07-03  3:53 ` [PATCH 1/2] DMA: Freescale: Add new 8-channel DMA engine device tree nodes Hongbo Zhang
2013-07-03  3:53   ` Hongbo Zhang
2013-07-03  3:53   ` Hongbo Zhang
2013-07-03  7:48   ` Hongbo Zhang
2013-07-03  7:48     ` Hongbo Zhang
2013-07-03  7:48     ` Hongbo Zhang
2013-07-03 19:02     ` Scott Wood
2013-07-03 19:02       ` Scott Wood
2013-07-03 19:02       ` Scott Wood
  -- strict thread matches above, loose matches on Subject: below --
2013-07-01  3:20 hongbo.zhang
2013-07-01  3:20 ` [PATCH 2/2] DMA: Freescale: update driver to support 8-channel DMA engine hongbo.zhang
2013-07-01  3:20   ` hongbo.zhang

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=1372806786.8183.127@snotra \
    --to=scottwood@freescale.com \
    --cc=djbw@fb.com \
    --cc=hongbo.zhang@freescale.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=vakul@freescale.com \
    --cc=vinod.koul@intel.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.