linux-mips
[Top] [All Lists]

Re: pci_alloc_consistent usage

To: Wayne Gowcher <wgowcher@yahoo.com>
Subject: Re: pci_alloc_consistent usage
From: Ralf Baechle <ralf@linux-mips.org>
Date: Tue, 27 May 2003 11:17:40 +0200
Cc: Linux-MIPS <linux-mips@linux-mips.org>
In-reply-to: <20030523215935.71373.qmail@web11901.mail.yahoo.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20030523215935.71373.qmail@web11901.mail.yahoo.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.1i
On Fri, May 23, 2003 at 02:59:35PM -0700, Wayne Gowcher wrote:

> Where PAGE_OFFSET is 0x8000 0000, and where PHYSADDR
> would AND the address against 0x1FFF FFFF. As far as I
> can tell the problem comes from pci_alloc_consistent
> doing :
> 
> ret = UNCAC_ADDR(ret) 
> 
> which converts a 0x8xxx address to 0xAxxx, and then
> when you pass this 0xAxxx_xxxx address through
> virt_to_phys() you get an address of the form
> 0x2xxx_xxxx. This 0x2xxx_xxxx is passed to the dma
> controller as the physical address to where it must
> read / write data, and because it is 0x2xxx_xxxx and
> not 0x0xxx_xxxx an exception occurs.

The change was partly done to catch broken code, partly because a
subtraction is potencially faster on some processors.

> At first I just tried AND'ing out the 0xA.. like
> PHYSADDR used to do it, but with that change i no
> longer get the exception, but the driver does not dma
> the data across - it just sits there.
> 
> I read DMA-mapping.txt and it says virt_to_phys() will
> be phased out, and should be used, but doesn't
> elaborate any further (like how you should do it now).

Use the value returned by pci_alloc_consistent in *dma_handle instead
of trying to do any conversions with of pci_alloc_consistent's return
value.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>