Received: from milmhbs1.lsil.com (147.145.21.209) by coscas01.lsi.com
 (172.21.36.60) with Microsoft SMTP Server id 8.1.393.1; Thu, 26 Nov 2009
 08:15:18 -0700
Received: from mail2.lsil.com (mail2.lsil.com [147.145.40.22])	by
 milmhbs1.lsil.com (8.12.11/8.12.11) with ESMTP id nAQFFIAW020556	for
 <andy.sharp@lsi.com>; Thu, 26 Nov 2009 07:15:18 -0800
Received: from psmtp.com (na3sys009amx167.postini.com [74.125.149.93])	by
 mail2.lsil.com (8.12.11/8.12.11) with SMTP id nAQFBDvN006670	for
 <andy.sharp@lsi.com>; Thu, 26 Nov 2009 07:11:13 -0800 (PST)
Received: from source ([78.24.191.182]) by na3sys009amx167.postini.com
 ([74.125.148.14]) with SMTP;	Thu, 26 Nov 2009 07:15:18 PST
Received: from localhost.localdomain ([127.0.0.1]:40346 "EHLO
        eddie.linux-mips.org" rhost-flags-OK-OK-OK-FAIL)        by
 eddie.linux-mips.org with ESMTP id S1493722AbZKZPPP (ORCPT
        <rfc822;andy.sharp@lsi.com>); Thu, 26 Nov 2009 16:15:15 +0100
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 26 Nov 2009 16:14:57
 +0100 (CET)
Received: from cantor2.suse.de ([195.135.220.15]:36315 "EHLO mx2.suse.de"
        rhost-flags-OK-OK-OK-OK) by eddie.linux-mips.org with ESMTP        id
 S1492904AbZKZPNo (ORCPT <rfc822;linux-mips@linux-mips.org>);        Thu, 26
 Nov 2009 16:13:44 +0100
Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.221.2])
        by mx2.suse.de (Postfix) with ESMTP id 0069486A2E;        Thu, 26 Nov
 2009 16:13:43 +0100 (CET)
From: Takashi Iwai <tiwai@suse.de>
To: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
CC: Ralf Baechle <ralf@linux-mips.org>, Wu Zhangjin <wuzhangjin@gmail.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, "linux-mips@linux-mips.org"
	<linux-mips@linux-mips.org>, Benjamin Herrenschmidt
	<benh@kernel.crashing.org>, Kumar Gala <galak@gate.crashing.org>, Becky Bruce
	<beckyb@kernel.crashing.org>, Takashi Iwai <tiwai@suse.de>
Sender: "linux-mips-bounce@linux-mips.org" <linux-mips-bounce@linux-mips.org>
Date: Thu, 26 Nov 2009 08:13:06 -0700
Subject: [PATCH 3/5] ALSA: pcm - fix page conversion on non-coherent MIPS
 arch
Thread-Topic: [PATCH 3/5] ALSA: pcm - fix page conversion on non-coherent
 MIPS arch
Thread-Index: Acpuq0QMObyjoACFTS26DdFoiuv6DQ==
Message-ID: <1259248388-20095-4-git-send-email-tiwai@suse.de>
References: <1259248388-20095-1-git-send-email-tiwai@suse.de>
 <1259248388-20095-2-git-send-email-tiwai@suse.de>
 <1259248388-20095-3-git-send-email-tiwai@suse.de>
In-Reply-To: <1259248388-20095-3-git-send-email-tiwai@suse.de>
Accept-Language: en-US
Content-Language: en-US
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Organization-AuthSource: coscas01.lsi.com
X-MS-Has-Attach:
X-Auto-Response-Suppress: All
X-MS-TNEF-Correlator:
x-scanned-by: MIMEDefang 2.39
errors-to: linux-mips-bounce@linux-mips.org
x-pstn-levels: (S:95.81537/99.90000 CV:99.9000 FC:95.5390 LC:95.5390
 R:95.9108 P:95.9108 M:97.0282 C:98.6951 )
x-pstn-settings: 3 (1.0000:1.0000) s cv gt3 gt2 gt1 r p m c 
x-pstn-addresses: from <tiwai@suse.de> [22/1] 
x-pstn-neptune: 0/0/0.00/0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0

The non-coherent MIPS arch doesn't give the correct address by a simple
virt_to_page() for pages allocated via dma_alloc_coherent().

Original patch by Wu Zhangjin <wuzj@lemote.com>.  A proper check of the
buffer allocation type was added to avoid the wrong conversion.

Note that this doesn't fix perfectly: the pages should be marked with
proper pgprot value.  This will be done in a future implementation like
the conversion to dma_mmap_coherent().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/core/pcm_native.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index c906be2..e48c5f6 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3066,6 +3066,10 @@ static inline struct page *
 snd_pcm_default_page_ops(struct snd_pcm_substream *substream, unsigned lon=
g ofs)
 {
 	void *vaddr =3D substream->runtime->dma_area + ofs;
+#if defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT)
+	if (substream->dma_buffer.dev.type =3D=3D SNDRV_DMA_TYPE_DEV)
+		return virt_to_page(CAC_ADDR(vaddr));
+#endif
 	return virt_to_page(vaddr);
 }
=20
--=20
1.6.5.3


