> 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. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev