linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH 1/2] dmaengine: rcar-dmac: add iommu support for slave transfers
Date: Wed, 13 Jan 2016 23:15:37 +0000	[thread overview]
Message-ID: <1647514.ouZGeHZKGU@avalon> (raw)
In-Reply-To: <1452478667-30966-2-git-send-email-niklas.soderlund+renesas@ragnatech.se>

(Again with Linus' e-mail address fixed, sorry for the noise)

On Thursday 14 January 2016 01:13:20 Laurent Pinchart wrote:
> Hi Vinod,
> 
> (CC'ing Linus as he's mentioned)
> 
> On Wednesday 13 January 2016 14:55:50 Niklas Söderlund wrote:
> > * Vinod Koul <vinod.koul@intel.com> [2016-01-13 19:06:01 +0530]:
> >> On Mon, Jan 11, 2016 at 03:17:46AM +0100, Niklas Söderlund wrote:
> >>> Enable slave transfers to devices behind IPMMU:s by mapping the slave
> >>> addresses using the dma-mapping API.
> >>> 
> >>> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> >>> ---
> >>> 
> >>>  drivers/dma/sh/rcar-dmac.c | 64 +++++++++++++++++++++++++++++++++++---
> >>>  1 file changed, 60 insertions(+), 4 deletions(-)
> >>> 
> >>> diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
> >>> index 7820d07..da94809 100644
> >>> --- a/drivers/dma/sh/rcar-dmac.c
> >>> +++ b/drivers/dma/sh/rcar-dmac.c
> >>> @@ -13,6 +13,7 @@
> >>>  #include <linux/dma-mapping.h>
> >>>  #include <linux/dmaengine.h>
> >>>  #include <linux/interrupt.h>
> >>> +#include <linux/iommu.h>
> >>>  #include <linux/list.h>
> >>>  #include <linux/module.h>
> >>>  #include <linux/mutex.h>
> >>> @@ -1101,6 +1102,24 @@ rcar_dmac_prep_dma_cyclic(struct dma_chan *chan,
> >>> dma_addr_t buf_addr,
> >>>  	return desc;
> >>>  }
> >>> 
> >>> +static dma_addr_t __rcar_dmac_dma_map(struct dma_chan *chan,
> >>> phys_addr_t addr,
> >>> +		size_t size, enum dma_data_direction dir)
> >>> +{
> >>> +	struct rcar_dmac_chan *rchan = to_rcar_dmac_chan(chan);
> >>> +	struct page *page = phys_to_page(addr);
> >>> +	size_t offset = addr - page_to_phys(page);
> >>> +	dma_addr_t map = dma_map_page(chan->device->dev, page, offset, size,
> >>> +			dir);
> >> 
> >> Hmmmm, dmaengine APIs for slave cases expect that client has already
> >> ammped and provided an address which the dmaengine understands. So doing
> >> this in driver here does not sound good to me
> > 
> > It was my understanding that clients do not do this mapping and in fact
> > are expected not to. Is this not what Linus Walleij is trying to address
> > in '[PATCH] dmaengine: use phys_addr_t for slave configuration'?
> 
> There's a problem somewhere and we need to fix it. Clients currently pass
> physical addresses and the DMA engine API expects a DMA address. There's
> only two ways to fix that, either modify the API to expect a phys_addr_t,
> or modify the clients to provide a dma_addr_t.
> 
> The struct device used to map buffer through the DMA mapping API needs to be
> the DMA engine struct device, not the client struct device. As the client
> is not expected to have access to the DMA engine device I would argue that
> DMA engines should perform the mapping and the API should take a
> phys_addr_t.
> 
> Vinod, unless you have reasons to do it otherwise, can we get your ack on
> this approach and start hammering at the code ? The problem has remained
> known and unfixed for too long, we need to move on.
> 
> >>> On Fri, Apr 26, 2013 at 11:06 AM, Linus Walleij wrote:
> >>>> The documentation already says these are physical addresses, and
> >>>> we have concluded that any translation into the DMA address space
> >>>> needs to reside in the dmaengine driver, so change the type of
> >>>> the passed arguments

-- 
Regards,

Laurent Pinchart


  parent reply	other threads:[~2016-01-13 23:15 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-11  2:17 [PATCH 1/2] dmaengine: rcar-dmac: add iommu support for slave transfers Niklas Söderlund
2016-01-11  2:37 ` kbuild test robot
2016-01-11  7:55 ` Geert Uytterhoeven
2016-01-11 18:59 ` Niklas Söderlund
2016-01-13 13:48 ` Vinod Koul
2016-01-13 13:55 ` Niklas Söderlund
2016-01-13 23:13 ` Laurent Pinchart
2016-01-13 23:15 ` Laurent Pinchart [this message]
2016-01-13 23:37 ` Laurent Pinchart
2016-01-14  3:48 ` Vinod Koul
2016-01-14 13:59 ` Laurent Pinchart
2016-01-14 21:37 ` Niklas Söderlund
2016-01-14 23:27 ` Laurent Pinchart
2016-01-18 13:48 ` Vinod Koul
2016-01-24 22:38 ` Laurent Pinchart
2016-02-03 12:04 ` Laurent Pinchart
2016-02-08  3:47 ` Vinod Koul
2016-02-10 23:51 ` Laurent Pinchart
2016-02-10 23:59 ` Laurent Pinchart
2016-02-15 17:41 ` Vinod Koul

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=1647514.ouZGeHZKGU@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-sh@vger.kernel.org \
    /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).