Hi,
In the past if the BIOS(config space) not set L1-substate our driver will keep drive low CLKREQ# when HOST want to enter power saving state that make whole system not enter the power saving state. But this patch we release the CLKREQ# to HOST, make whole system can enter power saving state success when the HOST want to enter the power saving state, but I don't know why this system can not wake out success from power saving state"
This is a PCIE CLKREQ# design problem on those platform, the pcie spec allow device release the CLKREQ# to HOST, this patch only do this....
I spent some time debugging today but I am not a PCIe expert. I think that the card reader is actually violating the PCIe spec by not forcing CLKREQ# low on systems that don't support ASPM, as appears to be done (accidentally?) by the regressing driver change.
The kernel logs on the affected system states the following: [ 0.142326] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
The PCIe 3.0 spec states (in the description of the Link Control Register), regarding enabling clock power management:
Enable Clock Power Management – Applicable only for Upstream Ports and with form factors that support a “Clock Request” (CLKREQ#) mechanism, this bit operates as follows: 0b Clock power management is disabled and device must hold CLKREQ# signal low. 1b When this bit is Set, the device is permitted to use CLKREQ# signal to power manage Link clock according to protocol defined in appropriate form factor specification.
My reading of this is that on this system which does not support ASPM and therefore also does not support clock PM, the driver must have the device hold the line low, but I may be wrong.
It's still unclear to me based on studying the schematic of the laptop and the PCH datasheet why the one PCIe port is able to break the other one like it does. The CLKREQ# lines are simply connected directly to the SRCCLKREQ# lines of the PCH, plus a 10k pull-up to 3v3, which seems entirely reasonable; any breakage surely would be some software/firmware level misconfiguration.
Jade