[PATCH] katmai.dts: extend DMA ranges; add dma/sysace nodes
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Nov 27 11:42:39 EST 2008
> I've implemented (2) (the code is below), and it works. But,
> admittedly, this (working) looks strange to me because of the
> following:
> To be able to use 64-bit PCI mapping on PPC32 I had to replace the
> 'unsigned long' type of pci_dram_offset with 'resource_size_t', which
> on ppc440spe is 'u64'. So, in dma_alloc_coherent() I put the 64-bit
> value into the 'dma_addr_t' handle. I use 2.6.27 kernel for testing,
> which has sizeof(dma_addr_t) == sizeof(u32). Thus,
> dma_alloc_coherent() cuts the upper 32 bits of PCI address, and returns
> only low 32-bit part of PCI address to its caller. And, regardless of
> this fact, the PCI device does operate somehow (this is the PCI-E LSI
> disk controller served by the drivers/message/fusion/mptbase.c +
> mptsas.c drivers).
>
> I've verified that ppc440spe PCI-E bridge's BARs (PECFGn_BAR0L,H) are
> configured with the new, 1TB, address value:
Strange... when I look at pci4xx_parse_dma_ranges() I see it
specifically avoiding PCI addresses above 4G ... That needs fixing.
To implement that trick you definitely need to make dma_addr_t 64 bits.
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list