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:16:06 -0700
Received: from mail1.lsil.com (mail1.lsil.com [147.145.40.21])	by
 milmhbs1.lsil.com (8.12.11/8.12.11) with ESMTP id nAQFG6wO020601	for
 <andy.sharp@lsi.com>; Thu, 26 Nov 2009 07:16:06 -0800
Received: from psmtp.com (na3sys009amx167.postini.com [74.125.149.93])	by
 mail1.lsil.com (8.12.11/8.12.11) with SMTP id nAQFG4K8028227	for
 <andy.sharp@lsi.com>; Thu, 26 Nov 2009 07:16:04 -0800 (PST)
Received: from source ([78.24.191.182]) by na3sys009amx167.postini.com
 ([74.125.148.14]) with SMTP;	Thu, 26 Nov 2009 07:16:05 PST
Received: from localhost.localdomain ([127.0.0.1]:50088 "EHLO
        eddie.linux-mips.org" rhost-flags-OK-OK-OK-FAIL)        by
 eddie.linux-mips.org with ESMTP id S1493713AbZKZPQD (ORCPT
        <rfc822;andy.sharp@lsi.com>); Thu, 26 Nov 2009 16:16:03 +0100
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 26 Nov 2009 16:15:45
 +0100 (CET)
Received: from cantor.suse.de ([195.135.220.2]:40127 "EHLO mx1.suse.de"
        rhost-flags-OK-OK-OK-OK) by eddie.linux-mips.org with ESMTP        id
 S1493720AbZKZPNo (ORCPT <rfc822;linux-mips@linux-mips.org>);        Thu, 26
 Nov 2009 16:13:44 +0100
Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.221.2])
        (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))        (No
 client certificate requested)        by mx1.suse.de (Postfix) with ESMTP id
 128DD8E8CC;        Thu, 26 Nov 2009 16:13:44 +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:07 -0700
Subject: [PATCH 4/5] ALSA: pcm - fix page conversion on non-coherent PPC arch
Thread-Topic: [PATCH 4/5] ALSA: pcm - fix page conversion on non-coherent
 PPC arch
Thread-Index: Acpuq2BNafnmb3DXT0yGEEKhA+XMag==
Message-ID: <1259248388-20095-5-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>
 <1259248388-20095-4-git-send-email-tiwai@suse.de>
In-Reply-To: <1259248388-20095-4-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:99.39639/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: 2/1/0.50/63
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0

The non-cohernet PPC arch doesn't give the correct address by a simple
virt_to_page() for pages allocated via dma_alloc_coherent().
This patch adds a hack to fix the conversion similarly like MIPS.

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 |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index e48c5f6..76eb763 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3070,6 +3070,16 @@ snd_pcm_default_page_ops(struct snd_pcm_substream *s=
ubstream, unsigned long ofs)
 	if (substream->dma_buffer.dev.type =3D=3D SNDRV_DMA_TYPE_DEV)
 		return virt_to_page(CAC_ADDR(vaddr));
 #endif
+#if defined(CONFIG_PPC32) && defined(CONFIG_NOT_COHERENT_CACHE)
+	if (substream->dma_buffer.dev.type =3D=3D SNDRV_DMA_TYPE_DEV) {
+		dma_addr_t addr =3D substream->runtime->dma_addr + ofs;
+		addr -=3D get_dma_offset(substream->dma_buffer.dev.dev);
+		/* assume dma_handle set via pfn_to_phys() in
+		 * mm/dma-noncoherent.c
+		 */
+		return pfn_to_page(dma_handle >> PAGE_SHIFT);
+	}
+#endif
 	return virt_to_page(vaddr);
 }
=20
--=20
1.6.5.3


