PCIe ASPM

Hi there,

This question is not completely WDK specific, but I hope someone can answer.

PCI-Express has a feature ASPM (Active State Power Management) which disables a PCIe link while it is not used. It is fully supported only on Windows Vista/7. In the energy options you can choose L0s power saving, L1, or None. When the link is fully powered it’s called L0.

http://download.microsoft.com/download/5/b/9/5b97017b-e28a-4bae-ba48-174cf47d23cd/cpa070_wh06.ppt

This is a white paper describing that Windows Vista/7 checks whether it is safe to activate L0s or L1. The PCIe root complex and the device it is communicating with store information about their L0s/L1 exit latency and L0s/L1 acceptable latency in the PCIe config space. Exit latency is how long the device takes to transition from sleep mode to active mode. Acceptable latency is how long the device may buffer incoming data.

Windows adds the exit latencies of the devices in the PCIe hierarchy and compares whether it is larger than the acceptable latency. When it is larger, there is danger that the buffers may overflow and so Windows should deactivate ASPM.

My problem:
I tried different settings for the exit/acceptable latency. I have a problem with ASPM and want to turn it off. But Windows always sets ASPM in my PCIe config space to ON. What am I missing? Is it because I use a PCIe-to-PCI-Bridge?

Here are the settings:
Root complex: L0s exit: 128ns…256ns, L1 exit: 2us…4us
Device: L0s exit: 64ns…128ns, L1 exit: <1us
Device: L0s acceptable: <64ns, L1 acceptable: <1us

or
Root complex: L0s exit: 128ns…256ns, L1 exit: 2us…4us
Device: L0s exit: 256ns…512ns, L1 exit: 8us…16us
Device: L0s acceptable: <64ns, L1 acceptable: <1us