Hi Prakash, > Tegra194 implements suspend_noirq() hook and during the system suspend, the link > is taken to L2 state after PME_Turn_off handshake and if it doesn't go into L2, > PERST# is asserted. It is observed that with some of the endpoints (Ex:- Marvell > SATA controller), the link doesn't go into L2 state and asserting PERST# results > in Surprise Link Down error and the corresponding AER interrupt is also raised. > Since the system is in noirq phase, this interrupt is not served. Both PME and > AER interrupts are served by the same wire interrupt in Tegra194, and since the > PCIe sub-system enables wake capability for PME interrupt, having a pending AER > interrupt is treated as PME wake interrupt by the system and prevents the system > going into the suspend state. To address this issue, the interrupts are disabled > before taking the link into L2 state as the interrupts are not expected anyway > from the controller afterward. This commit could use some formatting, perhaps splitting it into few paragraphs and also I believe your line length could use some adjustment. Having said that, I am not sure if the whole detailed account of the problem is required to be included here in the commit message. > + /* > + * PCIe controller exits from L2 only if reset is applied, so > + * controller doesn't handle interrupts. But in cases where > + * L2 entry fails, PERST# is asserted which can trigger surprise > + * link down AER. However this function call happens in > + * suspend_noirq(), so AER interrupt will not be processed. > + * Disable all interrupts to avoid such a scenario. > + */ [...] This code comment added below makes for a better commit message that the commit message above - clear, concise and straight to the point of why this was added. Krzysztof