2

I am using a 64 bit PCI express card on a 64 bit linux host, problem is that it's bars are 64 bit but always get an address that lies in 32 bit address range i.e. higher 32 bit of BAR is always zero.

How can I enforce it to use real 64 bit addresses ? I tried to enforce it with overriding BIOS enumeration with boot time args to kernel so that kernel can enumerate pci devices but it results same as by BIOS.

Is Linux not supporting real 64 bit addresses ?

flying-high
  • 219
  • 2
  • 7
  • 1
    Does it matter? I/O addresses shouldn't consume much memory, so 32bit is enough. Perhaps Linux chooses an easy way to support old devices, and gives low addresses to all of them. – ugoren May 16 '12 at 13:03
  • you should check if windowing is supported, that way u can map your window to traverse addresses up to 64 bit – Kinjal Patel Dec 11 '12 at 09:59

1 Answers1

0

You can try the following thing. That first of all make the PAE( Physical address extension) enable in kernel. Then using setpci command or from the driver, change the higher 32bit bar register to a non-zero value, if your end point device is under a pci bridge then don't forget to change the Pre-fetchable Base Upper 32 Bit and Pre-fetchable Limit Upper 32 Bit registers appropriately.