From: Songmao Tian <tiansm@lemote.com>
To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: linux-mips@linux-mips.org, alsa-devel@alsa-project.org,
Dajie Tan <jiankemeng@gmail.com>,
greg@kroah.com
Subject: Re: ALSA on MIPS platform
Date: Fri, 03 Aug 2007 21:50:36 +0800 [thread overview]
Message-ID: <46B332AC.8020403@lemote.com> (raw)
In-Reply-To: <20070802.235606.122255120.anemo@mba.ocn.ne.jp>
Atsushi Nemoto wrote:
> On Wed, 01 Aug 2007 15:56:48 +0800, Songmao Tian <tiansm@lemote.com> wrote:
>
>> The problem is clear:
>> 1. dma_alloc_noncoherent() return a non-cached address, and
>> virt_to_page() need a cached logical addr (Have I named it right?)
>> 2. mmaped dam buffer should be non-cached.
>>
>> We have a ugly patch, but we want to solve the problem cleanly, so can
>> anyone show me the way?
>>
>
> virt_to_page() is used in many place in mm so making it robust might
> affect performance. IMHO virt_to_page() seems too low-level as DMA
> API.
>
> If something like dma_virt_to_page(dev, cpu_addr) which can take a cpu
> address returned by dma_xxx APIs was defined, MIPS can implement it
> appropriately.
>
> And then pgprot_noncached issues still exist...
>
> ---
> Atsushi Nemoto
>
>
>
>
I agree, and I am investigating to implement a dma_map_coherent, but It
seems dma_map_coherent doesn't solve all the problem and will change a
lot of code:(
dma_virt_to_page can be something like this.
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h
index b92dd8c..d2ead8a 100644
--- a/include/asm-mips/page.h
+++ b/include/asm-mips/page.h
@@ -181,6 +181,8 @@ typedef struct { unsigned long pgprot; } pgprot_t;
#define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys(kaddr)))
#define virt_addr_valid(kaddr) pfn_valid(PFN_DOWN(virt_to_phys(kaddr)))
+#define dma_virt_to_page(dma_addr)
pfn_to_page(PFN_DOWN(virt_to_phys(CAC_ADDR(kaddr))))
+
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 655094d..5e694dd 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -39,6 +39,10 @@ extern int sysctl_legacy_va_layout;
#include <asm/pgtable.h>
#include <asm/processor.h>
+#ifndef dma_virt_to_page
+#define dma_virt_to_page virt_to_page
+#endif
+
#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))
/*
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c
index cefd228..8b29bfd 100644
--- a/sound/core/sgbuf.c
+++ b/sound/core/sgbuf.c
@@ -91,7 +91,7 @@ void *snd_malloc_sgbuf_pages(struct device *device,
}
sgbuf->table[i].buf = tmpb.area;
sgbuf->table[i].addr = tmpb.addr;
- sgbuf->page_table[i] = virt_to_page(tmpb.area);
+ sgbuf->page_table[i] = dma_virt_to_page(tmpb.area);
sgbuf->pages++;
}
WARNING: multiple messages have this Message-ID (diff)
From: Songmao Tian <tiansm@lemote.com>
To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: alsa-devel@alsa-project.org, linux-mips@linux-mips.org,
greg@kroah.com, Dajie Tan <jiankemeng@gmail.com>
Subject: Re: ALSA on MIPS platform
Date: Fri, 03 Aug 2007 21:50:36 +0800 [thread overview]
Message-ID: <46B332AC.8020403@lemote.com> (raw)
In-Reply-To: <20070802.235606.122255120.anemo@mba.ocn.ne.jp>
Atsushi Nemoto wrote:
> On Wed, 01 Aug 2007 15:56:48 +0800, Songmao Tian <tiansm@lemote.com> wrote:
>
>> The problem is clear:
>> 1. dma_alloc_noncoherent() return a non-cached address, and
>> virt_to_page() need a cached logical addr (Have I named it right?)
>> 2. mmaped dam buffer should be non-cached.
>>
>> We have a ugly patch, but we want to solve the problem cleanly, so can
>> anyone show me the way?
>>
>
> virt_to_page() is used in many place in mm so making it robust might
> affect performance. IMHO virt_to_page() seems too low-level as DMA
> API.
>
> If something like dma_virt_to_page(dev, cpu_addr) which can take a cpu
> address returned by dma_xxx APIs was defined, MIPS can implement it
> appropriately.
>
> And then pgprot_noncached issues still exist...
>
> ---
> Atsushi Nemoto
>
>
>
>
I agree, and I am investigating to implement a dma_map_coherent, but It
seems dma_map_coherent doesn't solve all the problem and will change a
lot of code:(
dma_virt_to_page can be something like this.
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h
index b92dd8c..d2ead8a 100644
--- a/include/asm-mips/page.h
+++ b/include/asm-mips/page.h
@@ -181,6 +181,8 @@ typedef struct { unsigned long pgprot; } pgprot_t;
#define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys(kaddr)))
#define virt_addr_valid(kaddr) pfn_valid(PFN_DOWN(virt_to_phys(kaddr)))
+#define dma_virt_to_page(dma_addr)
pfn_to_page(PFN_DOWN(virt_to_phys(CAC_ADDR(kaddr))))
+
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 655094d..5e694dd 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -39,6 +39,10 @@ extern int sysctl_legacy_va_layout;
#include <asm/pgtable.h>
#include <asm/processor.h>
+#ifndef dma_virt_to_page
+#define dma_virt_to_page virt_to_page
+#endif
+
#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))
/*
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c
index cefd228..8b29bfd 100644
--- a/sound/core/sgbuf.c
+++ b/sound/core/sgbuf.c
@@ -91,7 +91,7 @@ void *snd_malloc_sgbuf_pages(struct device *device,
}
sgbuf->table[i].buf = tmpb.area;
sgbuf->table[i].addr = tmpb.addr;
- sgbuf->page_table[i] = virt_to_page(tmpb.area);
+ sgbuf->page_table[i] = dma_virt_to_page(tmpb.area);
sgbuf->pages++;
}
next prev parent reply other threads:[~2007-08-03 13:50 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-01 7:56 ALSA on MIPS platform Songmao Tian
2007-08-02 14:56 ` Atsushi Nemoto
2007-08-03 13:50 ` Songmao Tian [this message]
2007-08-03 13:50 ` Songmao Tian
2007-08-03 13:59 ` Takashi Iwai
2007-08-03 13:59 ` [alsa-devel] " Takashi Iwai
2007-08-03 15:57 ` Songmao Tian
2007-08-03 15:57 ` [alsa-devel] " Songmao Tian
2007-08-06 12:17 ` Takashi Iwai
2007-08-06 12:17 ` [alsa-devel] " Takashi Iwai
2007-08-07 5:53 ` Dajie Tan
2007-08-07 6:18 ` Dajie Tan
2007-08-07 14:01 ` Atsushi Nemoto
2007-08-07 17:54 ` Ralf Baechle
2007-08-07 17:54 ` Ralf Baechle
2007-08-07 18:41 ` Takashi Iwai
2007-08-07 18:41 ` Takashi Iwai
2007-08-08 11:58 ` Ralf Baechle
2007-08-08 11:58 ` Ralf Baechle
2007-08-08 12:40 ` Maciej W. Rozycki
2007-08-08 12:57 ` Takashi Iwai
2007-08-08 12:57 ` Takashi Iwai
2007-08-09 1:24 ` Songmao Tian
2007-08-09 1:24 ` Songmao Tian
2007-08-08 0:40 ` Songmao Tian
2007-08-08 0:40 ` [alsa-devel] " Songmao Tian
-- strict thread matches above, loose matches on Subject: below --
2006-01-25 14:50 Atsushi Nemoto
2006-01-25 19:03 ` Takashi Iwai
2006-01-26 15:29 ` Atsushi Nemoto
2006-01-26 16:02 ` Takashi Iwai
2006-01-26 19:19 ` Hugh Dickins
2006-01-27 15:45 ` Atsushi Nemoto
2006-01-27 15:49 ` Martin Michlmayr
2006-01-27 16:01 ` Takashi Iwai
2006-01-27 15:57 ` Takashi Iwai
2006-01-30 9:56 ` Atsushi Nemoto
2006-01-30 10:18 ` Takashi Iwai
2006-01-30 10:38 ` Atsushi Nemoto
2006-01-30 12:25 ` Ralf Baechle
2006-01-30 15:46 ` Martin Michlmayr
2006-01-30 15:52 ` Takashi Iwai
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=46B332AC.8020403@lemote.com \
--to=tiansm@lemote.com \
--cc=alsa-devel@alsa-project.org \
--cc=anemo@mba.ocn.ne.jp \
--cc=greg@kroah.com \
--cc=jiankemeng@gmail.com \
--cc=linux-mips@linux-mips.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 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.