On Fri, Dec 28, 2012 at 2:36 AM, Cédric Cano <ccano@xxxxxxxxxxxxxxxxxxxx> wrote: > Hi, > > I'm writing a driver for a DMA engine on the PCI bus. My architecture is a > 36-bit PowerPC (MPC85xx). > > In my DMA driver, I want to configure the DMA to transfer data to/from a PCI > device. > I get the PCI address of the device BAR with the command pci_resource_start. pci_resource_start() doesn't give you a PCI bus address; it gives you a CPU physical address. You ioremap() that address if you want a CPU to access the BAR MMIO space. > This address is 36-bit but the PCI BAR of the device is 32-bit: I can't use > the 36-bit address to run the DMA. > > In kernel documentations, it's advised not to directly read the BAR. > > Is there a function which provides the real PCI address i.e. the one stored > in the BAR? You can use pcibios_resource_to_bus() to convert the CPU physical address from the pci_dev.resource[] back to a PCI bus address. sym_iomap_device() does something similar to what you're asking about. Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html