Hello, I use a 82xx or 85xx host platform with a Linux 2.6.24 or 2.2.31.
On this host, I want to write a PCI driver for a target PMC device wich only supports 30bits (1GB) DMA addressing. The PMC device is the master of the DMA transfers from/to the host memory. In the host driver, I begin to set the two DMA masks with - pci_set_dma_mask(pdev, DMA_BIT_MASK(30)) and - pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(30)) Then I allocate DMA buffers in the host memory with - pci_alloc_consistent or - pci_pool_create and pci_pool_alloc My problem is that the alloc functions return physical addresses which are coherent with 32bits but not with the wanted 30bits. The allocations seem to work like a kmalloc with a GFP_DMA flag. On powerpc architecture, GFP_DMA preserves the allocations on 32bits unlike on x86 architecture which restrict the allocations on 24bits. I don't understand why it is recommended to use the PCI DMA API with the DMA masks if the final allocator is only able to use a GFP_DMA-like restriction and not a real provided mask. Surely I missed something... Any idea would be welcome. Thanks Laurent _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev