Thread (12 messages) 12 messages, 3 authors, 2018-01-26

Re: [PATCH 2/2] MIPS: Loongson64: Add cache_sync to loongson_dma_map_ops

From: James Hogan <jhogan@kernel.org>
Date: 2018-01-25 07:55:42

Hi Huacai,

On Thu, Jan 25, 2018 at 03:09:33PM +0800, Huacai Chen wrote:
Hi, James and Christoph,

We have modified arch/mips/loongson64/common/dma-swiotlb.c to make
Loongson support coherent&non-coherent devices co-exist. You can see
code here:
https://github.com/linux-loongson/linux-loongson/commit/3f212e36b2432a7c4a843649e4b79c9c0837d1d2
When device is non-coherent, we will call dma_cache_sync().

Then, if dma_cache_sync() is only designed for
DMA_ATTR_NON_CONSISTENT, what can I use?
How did you allocate the memory? The appropriate generic API for the
type of memory should always be used in drivers over arch specific
stuff.

AFAIK (see e.g. Documentation/DMA-API.txt):
- dma_alloc_coherent() shouldn't require syncing, though it may require
  flushing of write combiners
- dma_alloc_attrs() only requires syncing when DMA_ATTR_NON_CONSISTENT
  is used, otherwise is the same as dma_alloc_coherent()
- guaranteed contiguous memory within PA range (e.g. kmalloc()'d memory
  with the appropriate GFP_DMA flags) can be synced using the
  dma_map_*() and dma_unmap_*() functions.

Cheers
James
1, __dma_sync_virtual() and __dma_sync() are both static functions, so
can't be called in other files.
2, mips_dma_cache_sync() is not static, but I think it isn't designed
to be called directly (So it should be static).
3, dma_cache_wback(), dma_cache_inv() and dma_cache_wback_inv() does't
take a "direction" argument, so I should determine the direction first
(then I will reimplement __dma_cache_sync for myself).
So, It seems that I can only use dma_cache_sync().

Huacai

On Wed, Jan 24, 2018 at 11:29 PM, Christoph Hellwig [off-list ref] wrote:
quoted
On Wed, Jan 24, 2018 at 03:03:05PM +0000, James Hogan wrote:
quoted
I see, that makes sense. Thanks Christoph. I'll assume this patch isn't
applicable then unless Huacai adds some explanation.
In addition there also is no driver that can be used on loongsoon
that actually calls dma_cache_sync either.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help