Re: [RESEND PATCH V1 3/5] PCI: tegra: Disable interrupts before entering L2

From: Krzysztof Wilczyński
Date: Thu May 27 2021 - 08:13:25 EST


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