PCIe IOMEM Resource Allocation
Hi
I am trying to write a PCIe linux device driver to handle PCIe switches and endpoints that show up after the Redhat 6.4 linux is already up and running.
If I try to allocate the resources of the PCIe switches & endpoints between 0xF4000000 and 0xF47FFFFF everything works fine .. But this range is quite full with other devices, so I tried to extend this range to start from 0xF0000000, or from 0xD0000000 the allocation works fine, but I am unable to access devices in the extended range
Anybody has idea why I am unable to use the complete 3G - 4G address range ? Is it related to some ACPI boot configuration that need to be changed, I can see in my dmesg
pci_root PNP0A08:00: host bridge window [mem 0xf4000000-0xf7ffffff] pci_root PNP0A08:00: host bridge window [io 0x1000-0x7fff] pci_root PNP0A08:00: host bridge window [io 0x0000-0x03af] pci_root PNP0A08:00: host bridge window [io 0x03e0-0x0cf7] pci_root PNP0A08:00: host bridge window [io 0x0d00-0x0fff] pci_root PNP0A08:00: host bridge window [mem 0xfed00000-0xfed03fff] pci_root PNP0A08:00: host bridge window [mem 0xfed40000-0xfed44fff] pci_root PNP0A08:00: host bridge window [io 0x03b0-0x03bb] pci_root PNP0A08:00: host bridge window [io 0x03c0-0x03df] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] pci_root PNP0A08:01: host bridge window [mem 0xf8000000-0xfbffffff] pci_root PNP0A08:01: host bridge window [io 0x8000-0xffff]
Is there a reason for this limited range ? Is it processor dependant ?
Thanks
Quoted 27 lines · John
Hi
I am trying to write a PCIe linux device driver to handle PCIe switches and endpoints that show up after the Redhat 6.4 linux is already up and running.If I try to allocate the resources of the PCIe switches & endpoints between
0xF4000000and0xF47FFFFFeverything works fine .. But this range is quite full with other devices, so I tried to extend this range to start from0xF0000000, or from0xD0000000the allocation works fine, but I am unable to access devices in the extended rangeAnybody has idea why I am unable to use the complete 3G - 4G address range ? Is it related to some ACPI boot configuration that need to be changed, I can see in my dmesg
pci_rootPNP0A08:00: host bridge window [mem 0xf4000000-0xf7ffffff]pci_rootPNP0A08:00: host bridge window [io 0x1000-0x7fff]pci_rootPNP0A08:00: host bridge window [io 0x0000-0x03af]pci_rootPNP0A08:00: host bridge window [io 0x03e0-0x0cf7]pci_rootPNP0A08:00: host bridge window [io 0x0d00-0x0fff]pci_rootPNP0A08:00: host bridge window [mem 0xfed00000-0xfed03fff]pci_rootPNP0A08:00: host bridge window [mem 0xfed40000-0xfed44fff]pci_rootPNP0A08:00: host bridge window [io 0x03b0-0x03bb]pci_rootPNP0A08:00: host bridge window [io 0x03c0-0x03df]pci_rootPNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff]pci_rootPNP0A08:01: host bridge window [mem 0xf8000000-0xfbffffff]pci_rootPNP0A08:01: host bridge window [io 0x8000-0xffff]
Quoted 1 line
Is there a reason for this limited range ? Is it processor dependant ?
Yes, you should use the resource range in host bridge window, or you won't request resource success. PCI hostbridge retrieve the host bridge window from ACPI _CRS method, if _CRS is not exist, PCI may use global resource iomem_resource and ioport_resource as its hostbridge window.
BIOS is responsible for the _CRS resource range report.
BTW, you can append the pci=nocrs in command line and try again.
Thanks!
Yijing.
Quoted 9 lines
Thanks
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 2 lines
Thanks! Yijing
A message that is not in the archive (sent off-list or not yet received): CAEYyDAt-PHsB9wrfCiNnd1_RFq3xUQNXWeh5QR9nJVZKho_0JQ@mail.gmail.com
Quoted 6 lines · John Fadel
I already tried pci=nocrs and I have exactly the same behaviour ..
Is there any way to extend this range after linux is up ? How can I access
_CRSmethod to extend this range ? Is there a way to force larger range during the boot of linux ?
First you should guarantee the extend resource range is free in your system,
you can check this from cat /proc/iomem;
Then if you add the pci=nocrs and still fail to use the extend resource range,
this is not a OS problem, and maybe BIOS does not allow OS to use extend resource out of default hostbridge window.
There is no other way to extend the _CRS from OS.
Thanks!
Yijing.
Quoted 65 lines · On Thu, Jul 24, 2014 at 9:14 AM, Yijing Wang <[email protected]…
On 2014/7/24 14:35, John wrote:
> Hi
> I am trying to write a PCIe linux device driver to handle PCIe switches and
> endpoints that show up after the Redhat 6.4 linux is already up and running.
>
> If I try to allocate the resources of the PCIe switches & endpoints between
> 0xF4000000 and 0xF47FFFFF everything works fine .. But this range is quite
> full with other devices, so I tried to extend this range to start from
> 0xF0000000, or from 0xD0000000 the allocation works fine, but I am unable to
> access devices in the extended range
>
> Anybody has idea why I am unable to use the complete 3G - 4G address range ?
> Is it related to some ACPI boot configuration that need to be changed, I can
> see in my dmesg
>
> pci_root PNP0A08:00: host bridge window [mem 0xf4000000-0xf7ffffff]
> pci_root PNP0A08:00: host bridge window [io 0x1000-0x7fff]
> pci_root PNP0A08:00: host bridge window [io 0x0000-0x03af]
> pci_root PNP0A08:00: host bridge window [io 0x03e0-0x0cf7]
> pci_root PNP0A08:00: host bridge window [io 0x0d00-0x0fff]
> pci_root PNP0A08:00: host bridge window [mem 0xfed00000-0xfed03fff]
> pci_root PNP0A08:00: host bridge window [mem 0xfed40000-0xfed44fff]
> pci_root PNP0A08:00: host bridge window [io 0x03b0-0x03bb]
> pci_root PNP0A08:00: host bridge window [io 0x03c0-0x03df]
> pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff]
> pci_root PNP0A08:01: host bridge window [mem 0xf8000000-0xfbffffff]
> pci_root PNP0A08:01: host bridge window [io 0x8000-0xffff]
>
> Is there a reason for this limited range ? Is it processor dependant ?
Yes, you should use the resource range in host bridge window, or you won't
request resource success. PCI hostbridge retrieve the host bridge window
from ACPI _CRS method, if _CRS is not exist, PCI may use global resource
iomem_resource and ioport_resource as its hostbridge window.
BIOS is responsible for the _CRS resource range report.
BTW, you can append the pci=nocrs in command line and try again.
Thanks!
Yijing.
>
> Thanks
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to [email protected] <mailto:[email protected]>
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
--
Thanks!
YijingSignature · 2 lines
Thanks! Yijing