All of lore.kernel.org
 help / color / mirror / Atom feed
From: Songmao Tian <tiansm@lemote.com>
To: alsa-devel@alsa-project.org, linux-mips@linux-mips.org
Subject: ALSA on MIPS platform
Date: Wed, 01 Aug 2007 15:56:48 +0800	[thread overview]
Message-ID: <46B03CC0.3090000@lemote.com> (raw)

Hi,
    In 
http://www.linux-mips.org/archives/linux-mips/2007-04/msg00114.html, 
Atsushi Nemoto pointed out the problem is discussed before, the thread 
can be found at http://lkml.org/lkml/2006/1/25/117. Thanks Atsushi Nemoto:)
    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?

Regards,
Tian

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 59b29cd..fd0aa66 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3138,7 +3138,11 @@ static struct page 
*snd_pcm_mmap_data_nopage(struct vm_area_struct *area,
             return NOPAGE_OOM; /* XXX: is this really due to OOM? */
     } else {
         vaddr = runtime->dma_area + offset;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+        page = virt_to_page(CAC_ADDR(vaddr));
+#else
         page = virt_to_page(vaddr);
+#endif
     }
     get_page(page);
     if (type)
@@ -3254,6 +3258,11 @@ static int snd_pcm_mmap(struct file *file, struct 
vm_area_struct *area)
     substream = pcm_file->substream;
     snd_assert(substream != NULL, return -ENXIO);
 
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+    /* all mmap using uncached mode */
+    area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
+#endif
+
     offset = area->vm_pgoff << PAGE_SHIFT;
     switch (offset) {
     case SNDRV_PCM_MMAP_OFFSET_STATUS:
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c
index cefd228..2251e70 100644
--- a/sound/core/sgbuf.c
+++ b/sound/core/sgbuf.c
@@ -91,12 +91,21 @@ void *snd_malloc_sgbuf_pages(struct device *device,
         }
         sgbuf->table[i].buf = tmpb.area;
         sgbuf->table[i].addr = tmpb.addr;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+        sgbuf->page_table[i] = virt_to_page(CAC_ADDR(tmpb.area));
+#else
         sgbuf->page_table[i] = virt_to_page(tmpb.area);
+#endif
         sgbuf->pages++;
     }
 
     sgbuf->size = size;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+    /* maybe we should use uncached accelerated mode */
+    dmab->area = vmap(sgbuf->page_table, sgbuf->pages, VM_MAP, 
pgprot_noncached(PAGE_KERNEL));
+#else
     dmab->area = vmap(sgbuf->page_table, sgbuf->pages, VM_MAP, 
PAGE_KERNEL);
+#endif
     if (! dmab->area)
         goto _failed;
     return dmab->area;

             reply	other threads:[~2007-08-01  7:57 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-01  7:56 Songmao Tian [this message]
2007-08-02 14:56 ` ALSA on MIPS platform Atsushi Nemoto
2007-08-03 13:50   ` Songmao Tian
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=46B03CC0.3090000@lemote.com \
    --to=tiansm@lemote.com \
    --cc=alsa-devel@alsa-project.org \
    --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.