From: Thierry Reding <thierry.reding@gmail.com>
To: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Cc: bhelgaas@google.com, robh+dt@kernel.org, mark.rutland@arm.com,
jonathanh@nvidia.com, lorenzo.pieralisi@arm.com,
vidyas@nvidia.com, linux-tegra@vger.kernel.org,
linux-pci@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH V2 04/28] PCI: tegra: Disable PCIe interrupts in runtime suspend
Date: Thu, 9 May 2019 16:10:59 +0200 [thread overview]
Message-ID: <20190509141059.GD8907@ulmo> (raw)
In-Reply-To: <20190423092825.759-5-mmaddireddy@nvidia.com>
[-- Attachment #1: Type: text/plain, Size: 5881 bytes --]
On Tue, Apr 23, 2019 at 02:58:01PM +0530, Manikanta Maddireddy wrote:
> Disable PCIe interrupts in runtime suspend to avoid executing irq handler
> and power off sequence in parallel.
>
> Following sequence triggers such scenario,
> - tegra_pcie_remove() triggers runtime suspend
> - pex_rst is asserted in runtime suspend
> - PRSNT_MAP bit field in RP_PRIV_MISC register changes from EP_PRSNT to
> EP_ABSNT
> - This is sensed by AFI and triggers "Slot present pin change" interrupt
> - tegra_pcie_isr() function accesses AFI register when runtime suspend
> is going through power off sequence
This sounds like more of a workaround than a proper solution. If the
above sequence crashes, it means that we have a bug somewhere in that
sequence. By the time the controller is runtime suspended, we should
have shut everything down already.
That said, from the looks of it, I think we may be able to fix this by
moving the pm_runtime_*() calls in tegra_pcie_remove() below the
tegra_pcie_put_resources(). At that point, nothing should be accessing
any registers anymore.
Thierry
>
> rmmod pci-tegra
> pci_generic_config_write32: 108 callbacks suppressed
> pci_bus 0002:00: 2-byte config write to 0002:00:02.0 offset 0x4c may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:02.0 offset 0x9c may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:02.0 offset 0x88 may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:02.0 offset 0x90 may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:02.0 offset 0x4 may corrupt adjacent RW1C bits
> igb 0002:04:00.1: removed PHC on enP2p4s0f1
> igb 0002:04:00.0: removed PHC on enP2p4s0f0
> pci_bus 0002:00: 2-byte config write to 0002:00:01.0 offset 0x4c may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:01.0 offset 0x9c may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:01.0 offset 0x88 may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:01.0 offset 0x90 may corrupt adjacent RW1C bits
> pci_bus 0002:00: 2-byte config write to 0002:00:01.0 offset 0x4 may corrupt adjacent RW1C bits
> rcu: INFO: rcu_preempt self-detected stall on CPU
> SError Interrupt on CPU0, code 0xbf000002 -- SError
> CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.1.0-rc3-next-20190405-00027-gcd8110499e6f-dirty #42
> Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
> pstate: 20000085 (nzCv daIf -PAN -UAO)
> pc : tegra_pcie_isr+0x58/0x178 [pci_tegra]
> lr : tegra_pcie_isr+0x40/0x178 [pci_tegra]
> sp : ffff000010003da0
> x29: ffff000010003da0 x28: 0000000000000000
> x27: ffff8000f9e61000 x26: ffff000010fbf420
> x25: ffff000011427f93 x24: ffff8000fa600410
> x23: ffff00001129d000 x22: ffff00001129d000
> x21: ffff8000f18bf3c0 x20: 0000000000000070
> x19: 00000000ffffffff x18: 0000000000000000
> x17: 0000000000000000 x16: 0000000000000000
> x15: 0000000000000000 x14: ffff000008d40a48
> x13: ffff000008d40a30 x12: ffff000008d40a20
> x11: ffff000008d40a10 x10: ffff000008d40a00
> x9 : ffff000008d409e8 x8 : ffff000008d40ae8
> x7 : ffff000008d40ad0 x6 : ffff000010003e58
> x5 : ffff8000fac00248 x4 : 0000000000000000
> x3 : ffff000008d40b08 x2 : fffffffffffffff8
> x1 : ffff000008d3f4e8 x0 : 00000000ffffffff
> Kernel panic - not syncing: Asynchronous SError Interrupt
> CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.1.0-rc3-next-20190405-00027-gcd8110499e6f-dirty #42
> Hardware name: NVIDIA Jetson TX1 Developer Kit (DT)
> Call trace:
> dump_backtrace+0x0/0x158
> show_stack+0x14/0x20
> dump_stack+0xa8/0xcc
> panic+0x140/0x2f4
> nmi_panic+0x6c/0x70
> arm64_serror_panic+0x74/0x80
> __pte_error+0x0/0x28
> el1_error+0x84/0xf8
> tegra_pcie_isr+0x58/0x178 [pci_tegra]
> __handle_irq_event_percpu+0x70/0x198
> handle_irq_event_percpu+0x34/0x88
> handle_irq_event+0x48/0x78
> handle_fasteoi_irq+0xb4/0x190
> generic_handle_irq+0x24/0x38
> __handle_domain_irq+0x5c/0xb8
> gic_handle_irq+0x58/0xa8
> el1_irq+0xb8/0x180
> cpuidle_enter_state+0x138/0x358
> cpuidle_enter+0x18/0x20
> call_cpuidle+0x1c/0x48
> do_idle+0x230/0x2d0
> cpu_startup_entry+0x20/0x28
> rest_init+0xd4/0xe0
> arch_call_rest_init+0xc/0x14
> start_kernel+0x444/0x470
>
> Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
> ---
> V2: This is new patch in V2
>
> drivers/pci/controller/pci-tegra.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c
> index bb3c0af9c830..8c0ad038699d 100644
> --- a/drivers/pci/controller/pci-tegra.c
> +++ b/drivers/pci/controller/pci-tegra.c
> @@ -1622,6 +1622,18 @@ static int tegra_pcie_disable_msi(struct tegra_pcie *pcie)
> return 0;
> }
>
> +static void tegra_pcie_disable_interrupts(struct tegra_pcie *pcie)
> +{
> + u32 value;
> +
> + value = afi_readl(pcie, AFI_INTR_MASK);
> + value &= ~AFI_INTR_MASK_INT_MASK;
> + afi_writel(pcie, value, AFI_INTR_MASK);
> +
> + if (IS_ENABLED(CONFIG_PCI_MSI))
> + tegra_pcie_disable_msi(pcie);
> +}
> +
> static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes,
> u32 *xbar)
> {
> @@ -2466,6 +2478,11 @@ static int __maybe_unused tegra_pcie_pm_suspend(struct device *dev)
> tegra_pcie_pme_turnoff(port);
>
> tegra_pcie_disable_ports(pcie);
> + /*
> + * disable interrupts to avoid executing irq handler in parallel
> + * to power off sequence.
> + */
> + tegra_pcie_disable_interrupts(pcie);
>
> if (pcie->soc->program_uphy) {
> err = tegra_pcie_phy_power_off(pcie);
> --
> 2.17.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2019-05-09 14:11 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-23 9:27 [PATCH V2 00/28] Enable Tegra PCIe root port features Manikanta Maddireddy
2019-04-23 9:27 ` Manikanta Maddireddy
2019-04-23 9:27 ` [PATCH V2 01/28] soc/tegra: pmc: Export tegra_powergate_power_on() Manikanta Maddireddy
2019-04-23 9:27 ` Manikanta Maddireddy
2019-05-09 14:02 ` Thierry Reding
2019-04-23 9:27 ` [PATCH V2 02/28] PCI: tegra: Handle failure cases in tegra_pcie_power_on() Manikanta Maddireddy
2019-04-23 9:27 ` Manikanta Maddireddy
2019-05-09 14:04 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 03/28] PCI: tegra: Rearrange Tegra PCIe driver functions Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:05 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 04/28] PCI: tegra: Disable PCIe interrupts in runtime suspend Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:10 ` Thierry Reding [this message]
2019-05-09 15:57 ` Manikanta Maddireddy
2019-05-09 15:57 ` Manikanta Maddireddy
2019-04-23 9:28 ` [PATCH V2 05/28] PCI: tegra: Fix PCIe host power up sequence Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:14 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 06/28] PCI: tegra: Add PCIe Gen2 link speed support Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:17 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 07/28] PCI: tegra: Advertise PCIe Advanced Error Reporting (AER) capability Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:17 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 08/28] PCI: tegra: Program UPHY electrical settings for Tegra210 Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:18 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 09/28] PCI: tegra: Enable opportunistic UpdateFC and ACK Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-23 9:28 ` [PATCH V2 10/28] PCI: tegra: Disable AFI dynamic clock gating Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-23 9:28 ` [PATCH V2 11/28] PCI: tegra: Process pending DLL transactions before entering L1 or L2 Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-23 9:28 ` [PATCH V2 12/28] PCI: tegra: Enable PCIe xclk clock clamping Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:20 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 13/28] PCI: tegra: Increase the deskew retry time Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:20 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 14/28] PCI: tegra: Add SW fixup for RAW violations Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:21 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 15/28] PCI: tegra: Update flow control timer frequency in Tegra210 Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:22 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 16/28] PCI: tegra: Set target speed as Gen1 before starting LTSSM Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:23 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 17/28] PCI: tegra: Fix PLLE power down issue due to CLKREQ# signal Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:24 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 18/28] PCI: tegra: Program AFI_CACHE* registers only for Tegra20 Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-26 15:32 ` Thierry Reding
2019-04-29 9:30 ` Manikanta Maddireddy
2019-04-29 9:30 ` Manikanta Maddireddy
2019-05-09 14:25 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 19/28] PCI: tegra: Change PRSNT_SENSE irq log to debug Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:27 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 20/28] PCI: tegra: Use legacy irq for port service drivers Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:29 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 21/28] PCI: tegra: Add AFI_PEX2_CTRL reg offset as part of soc struct Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-23 9:28 ` [PATCH V2 22/28] PCI: tegra: Access endpoint config only if PCIe link is up Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-04-23 20:24 ` Bjorn Helgaas
2019-04-24 3:51 ` Manikanta Maddireddy
2019-04-24 3:51 ` Manikanta Maddireddy
2019-05-09 14:34 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 23/28] dt-bindings: pci: tegra: Document PCIe DPD pinctrl optional prop Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-01 19:52 ` Rob Herring
2019-05-01 19:52 ` Rob Herring
2019-05-09 14:34 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 24/28] arm64: tegra: Add PEX DPD states as pinctrl properties Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:38 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 25/28] PCI: tegra: Put PEX CLK & BIAS pads in DPD mode Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:35 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 26/28] dt-bindings: pci: tegra: Document reset-gpio optional prop Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-01 19:58 ` Rob Herring
2019-05-09 14:37 ` Thierry Reding
2019-05-09 14:37 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 27/28] PCI: tegra: Add support for GPIO based PCIe reset Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:45 ` Thierry Reding
2019-04-23 9:28 ` [PATCH V2 28/28] PCI: tegra: Change link retry log level to info Manikanta Maddireddy
2019-04-23 9:28 ` Manikanta Maddireddy
2019-05-09 14:47 ` Thierry Reding
2019-04-26 13:22 ` [PATCH V2 00/28] Enable Tegra PCIe root port features Thierry Reding
2019-05-01 11:13 ` Lorenzo Pieralisi
2019-05-01 11:43 ` Manikanta Maddireddy
2019-05-01 11:43 ` Manikanta Maddireddy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190509141059.GD8907@ulmo \
--to=thierry.reding@gmail.com \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=jonathanh@nvidia.com \
--cc=linux-pci@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=mmaddireddy@nvidia.com \
--cc=robh+dt@kernel.org \
--cc=vidyas@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.