linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Ramirez Luna, Omar" <omar.ramirez@ti.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Joerg Roedel <joro@8bytes.org>, Arnd Bergmann <arnd@arndb.de>,
	Ohad Ben-Cohen <ohad@wizery.com>
Subject: Re: [RFC] ARM: dma_map|unmap_sg plus iommu
Date: Mon, 8 Aug 2011 10:04:58 -0500	[thread overview]
Message-ID: <CAB-zwWhh=ZTvheTebKhz55rr1=WFD8R=+BWZ8mwYiO_25mjpYA@mail.gmail.com> (raw)
In-Reply-To: <000301cc4dc4$31b53630$951fa290$%szyprowski@samsung.com>

Hi,

On Fri, Jul 29, 2011 at 2:50 AM, Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>> 1. There is no way to keep track of what virtual address are being mapped
>> in the scatterlist, which we need to propagate to the dsp, in order that it
>> knows where does the buffers start and end on its virtual address space.
>> I ended up adding an iov_address to scatterlist which if accepted should be
>> toggled/affected by the selection of CONFIG_IOMMU_API.
>
> Sorry, but your patch is completely wrong. You should not add any additional
> entries to scatterlist.

At the time it was the easiest way for me to keep track of both
virtual and physical addresses, without doing a page_to_phys every
time on unmap. I understand that it might fall out of the scope of the
scatterlist struct.

> dma_addr IS the virtual address in the device's io
> address space, so the dma_addr is a value that your device should put into
> it's own registers to start dma transfer to provided memory pages.

I also wanted to keep the same part as the original arm_dma_map_sg:

s->dma_address = __dma_map_page...

Where the dma_address was the "clean" (from cache) physical address.
But if desired, I guess this value can be replaced for the iommu va.

>> 2. tidspbridge driver sometimes needs to map a physical address into a
>> fixed virtual address (i.e. the start of a firmware section is expected to
>> be at dsp va 0x20000000), there is no straight forward way to do this with
>> the dma api given that it only expects to receive a cpu_addr, a sg or a
>> page, by adding iov_address I could pass phys and iov addresses in a sg
>> and overcome this limitation, but, these addresses belong to:
>
> We also encountered the problem of fixed firmware address. We addressed is by
> setting io address space start to this address and letting device driver to
> rely on the fact that the first call to dma_alloc() will match this address.

Indeed, however in my case, I need sections at (I might have
approximated the numbers to the real ones):

0x11000000 for dsp shared memory
0x11800000 for peripherals
0x20000000 for dsp external code
0x21000000 for mapped buffers

The end of a section and start of the other usually have a gap, so the
exact address needs to be specified by the firmware. So, this won't
work with just letting the pool manager to provide the virtual
address.

>>   2a. Shared memory between ARM and DSP: this memory is allocated through
>>       memblock API which takes it out of kernel control to be later
>>       ioremap'd and iommu map'd to the dsp (this because a non-cacheable
>>       requirement), so, these physical addresses doesn't have a linear
>>       virtual address translation, which is what dma api expects.
>
> I hope that the issue with page cache attributes can be resolved if we always
> allocate memory from CMA (see the latest CMAv12 patches:
> http://www.spinics.net/lists/linux-media/msg35674.html )

I'll take a look more closely and will be trying them if possible.

>>   2b. Bus addresses: of dsp peripherals which are also ioremap'd and
>>       affected by the same thing.
>
> Right now I have no idea how to handle ioremapped areas in dma-mapping
> framework, but do we really need to support them?

It would be good to know if this is expected to be handled by
dma-mapping, otherwise it can be dealt by iommu api as Joerg pointed
out.

Thanks for your comments,

Omar

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2011-08-08 15:05 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-28 21:09 Ramirez Luna, Omar
2011-07-29  7:50 ` Marek Szyprowski
2011-07-29  9:35   ` 'Joerg Roedel'
2011-07-29 10:14     ` Marek Szyprowski
2011-07-29 10:54       ` 'Joerg Roedel'
2011-07-29 14:24         ` Marek Szyprowski
2011-08-01  0:57           ` KyongHo Cho
2011-08-08 15:21             ` Ramirez Luna, Omar
2011-08-08 15:29               ` Russell King - ARM Linux
2011-08-09  7:04               ` Marek Szyprowski
2011-08-08 15:04   ` Ramirez Luna, Omar [this message]
2011-08-09  6:51     ` Marek Szyprowski
2011-08-13 14:39       ` Ramirez Luna, Omar

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='CAB-zwWhh=ZTvheTebKhz55rr1=WFD8R=+BWZ8mwYiO_25mjpYA@mail.gmail.com' \
    --to=omar.ramirez@ti.com \
    --cc=arnd@arndb.de \
    --cc=joro@8bytes.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@arm.linux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=ohad@wizery.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