All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vkoul@kernel.org>
To: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
	Chris Paterson <Chris.Paterson2@renesas.com>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	dmaengine@vger.kernel.org,
	Chris Brandt <chris.brandt@renesas.com>,
	linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 3/5] drivers: dma: sh: Add DMAC driver for RZ/G2L SoC
Date: Wed, 16 Jun 2021 16:01:00 +0530	[thread overview]
Message-ID: <YMnS5AdR8PL0hKuC@vkoul-mobl> (raw)
In-Reply-To: <20210611113642.18457-4-biju.das.jz@bp.renesas.com>

On 11-06-21, 12:36, Biju Das wrote:
> Add DMA Controller driver for RZ/G2L SoC.
> 
> Based on the work done by Chris Brandt for RZ/A DMA driver.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
>  drivers/dma/sh/Kconfig   |    8 +
>  drivers/dma/sh/Makefile  |    1 +
>  drivers/dma/sh/rz-dmac.c | 1050 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 1059 insertions(+)
>  create mode 100644 drivers/dma/sh/rz-dmac.c
> 
> diff --git a/drivers/dma/sh/Kconfig b/drivers/dma/sh/Kconfig
> index 13437323a85b..280a6d359e36 100644
> --- a/drivers/dma/sh/Kconfig
> +++ b/drivers/dma/sh/Kconfig
> @@ -47,3 +47,11 @@ config RENESAS_USB_DMAC
>  	help
>  	  This driver supports the USB-DMA controller found in the Renesas
>  	  SoCs.
> +
> +config RZ_DMAC
> +	tristate "Renesas RZ/G2L Controller"
> +	depends on ARCH_R9A07G044 || COMPILE_TEST
> +	select RENESAS_DMA
> +	help
> +	  This driver supports the general purpose DMA controller found in the
> +	  Renesas RZ/G2L SoC variants.
> diff --git a/drivers/dma/sh/Makefile b/drivers/dma/sh/Makefile
> index 112fbd22bb3f..9b2927f543bf 100644
> --- a/drivers/dma/sh/Makefile
> +++ b/drivers/dma/sh/Makefile
> @@ -15,3 +15,4 @@ obj-$(CONFIG_SH_DMAE) += shdma.o
>  
>  obj-$(CONFIG_RCAR_DMAC) += rcar-dmac.o
>  obj-$(CONFIG_RENESAS_USB_DMAC) += usb-dmac.o
> +obj-$(CONFIG_RZ_DMAC) += rz-dmac.o
> diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c
> new file mode 100644
> index 000000000000..87a902ba3cfa
> --- /dev/null
> +++ b/drivers/dma/sh/rz-dmac.c
> @@ -0,0 +1,1050 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Renesas RZ/G2L Controller Driver
> + *
> + * Based on imx-dma.c
> + *
> + * Copyright (C) 2021 Renesas Electronics Corp.
> + * Copyright 2010 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de>
> + * Copyright 2012 Javier Martin, Vista Silicon <javier.martin@vista-silicon.com>
> + */
> +
> +#include <linux/dma-mapping.h>
> +#include <linux/dmaengine.h>
> +#include <linux/interrupt.h>
> +#include <linux/list.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_dma.h>
> +#include <linux/of_platform.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/spinlock.h>
> +
> +#include "../dmaengine.h"
> +
> +struct rz_dmac_slave_config {
> +	u32 mid_rid;
> +	dma_addr_t addr;
> +	u32 chcfg;
> +};

why not use dma_slave_config()

> +
> +enum  rz_dmac_prep_type {
> +	RZ_DMAC_DESC_MEMCPY,
> +	RZ_DMAC_DESC_SLAVE_SG,
> +};
> +
> +struct rz_lmdesc {
> +	u32 header;
> +	u32 sa;
> +	u32 da;
> +	u32 tb;
> +	u32 chcfg;
> +	u32 chitvl;
> +	u32 chext;
> +	u32 nxla;
> +};
> +
> +struct rz_dmac_desc {
> +	struct list_head node;

what is this list node for?

> +	struct dma_async_tx_descriptor desc;
> +	enum dma_status status;
> +	dma_addr_t src;
> +	dma_addr_t dest;
> +	size_t len;
> +	enum dma_transfer_direction direction;
> +	enum rz_dmac_prep_type type;
> +	/* For memcpy */
> +	unsigned int config_port;
> +	unsigned int config_mem;
> +	/* For slave sg */
> +	struct scatterlist *sg;
> +	unsigned int sgcount;
> +};

why not use virt_dma_desc ?

> +
> +struct rz_dmac_channel {
> +	struct rz_dmac_engine *rzdma;
> +	unsigned int index;
> +	int irq;
> +
> +	spinlock_t lock;
> +	struct list_head ld_free;
> +	struct list_head ld_queue;
> +	struct list_head ld_active;

why not use virt_dma_chan() ?

> +
> +	int descs_allocated;
> +	enum dma_slave_buswidth word_size;
> +	dma_addr_t per_address;
> +	struct dma_chan chan;
> +	struct dma_async_tx_descriptor desc;
> +	enum dma_status status;

Both desc and chan need status?

> +	const struct rz_dmac_slave_config *slave;
> +	void __iomem *ch_base;
> +	void __iomem *ch_cmn_base;
> +
> +	struct {
> +		struct rz_lmdesc *base;
> +		struct rz_lmdesc *head;
> +		struct rz_lmdesc *tail;
> +		int valid;
> +		dma_addr_t base_dma;
> +	} lmdesc;
> +
> +	u32 chcfg;
> +	u32 chctrl;
> +
> +	struct {
> +		int issue;
> +		int prep_slave_sg;
> +	} stat;
> +};

I have glanced at the rest of the driver, looks mostly okay but please
move this to use virt_dma_chan and virt_dma_desc that would ease a lot
of code from driver

Thanks
-- 
~Vinod

  reply	other threads:[~2021-06-16 10:31 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-11 11:36 [PATCH 0/5] Add RZ/G2L DMAC support Biju Das
2021-06-11 11:36 ` [PATCH 1/5] dt-bindings: dma: Document RZ/G2L bindings Biju Das
2021-06-11 17:55   ` Rob Herring
2021-06-12 12:17     ` Biju Das
2021-06-11 19:39   ` Rob Herring
2021-06-12 12:26     ` Biju Das
2021-06-14 12:11   ` Geert Uytterhoeven
2021-06-14 12:54     ` Biju Das
2021-06-14 14:29       ` Laurent Pinchart
2021-06-14 16:09         ` Biju Das
2021-06-14 16:17           ` Laurent Pinchart
2021-06-14 16:24             ` Biju Das
2021-06-14 16:28               ` Laurent Pinchart
2021-06-14 16:33                 ` Biju Das
2021-06-14 17:30                   ` Laurent Pinchart
2021-06-15  8:06                     ` Biju Das
2021-06-11 11:36 ` [PATCH 2/5] drivers: clk: renesas: r9a07g044-cpg: Add DMAC clocks Biju Das
2021-06-14 12:02   ` Geert Uytterhoeven
2021-06-11 11:36 ` [PATCH 3/5] drivers: dma: sh: Add DMAC driver for RZ/G2L SoC Biju Das
2021-06-16 10:31   ` Vinod Koul [this message]
2021-06-16 11:02     ` Biju Das
2021-06-11 11:36 ` [PATCH 4/5] arm64: dts: renesas: r9a07g044: Add DMAC support Biju Das
2021-06-14 12:15   ` Geert Uytterhoeven
2021-06-14 13:02     ` Biju Das
2021-06-14 13:48       ` Geert Uytterhoeven
2021-06-15  8:12         ` Biju Das
2021-06-11 11:36 ` [PATCH 5/5] arm64: defconfig: Enable DMA controller for RZ/G2L SoC's Biju Das
2021-06-11 11:36   ` Biju Das

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=YMnS5AdR8PL0hKuC@vkoul-mobl \
    --to=vkoul@kernel.org \
    --cc=Chris.Paterson2@renesas.com \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=chris.brandt@renesas.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=geert+renesas@glider.be \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.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.