NVIDIA: SAUCE: PCI: tegra194: Disable interrupt before link status check

BugLink: https://bugs.launchpad.net/bugs/2072591

Data abort is observed due to synchronization issue between irq
handler and driver shutdown call. Disable interrupt before link
status check to avoid this issue.

http://nvbugs/3938884

Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Prathamesh Shete <pshete@nvidia.com>
Tested-by: Prathamesh Shete <pshete@nvidia.com>
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Acked-by: Jacob Martin <jacob.martin@canonical.com>
Acked-by: Noah Wager <noah.wager@canonical.com>
Signed-off-by: Noah Wager <noah.wager@canonical.com>
This commit is contained in:
Manikanta Maddireddy
2023-01-12 11:17:24 +05:30
committed by Noah Wager
parent 5192f0241f
commit d5ea36d92d
+5 -6
View File
@@ -2962,6 +2962,7 @@ static void tegra_pcie_dw_remove(struct platform_device *pdev)
#endif
if (pcie->of_data->mode == DW_PCIE_RC_TYPE) {
disable_irq(pcie->prsnt_irq);
if (!pcie->link_state)
return;
@@ -3098,17 +3099,15 @@ static void tegra_pcie_dw_shutdown(struct platform_device *pdev)
struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev);
if (pcie->of_data->mode == DW_PCIE_RC_TYPE) {
if (!pcie->link_state)
return;
if (!pm_runtime_enabled(pcie->dev))
return;
debugfs_remove_recursive(pcie->debugfs);
disable_irq(pcie->prsnt_irq);
disable_irq(pcie->pci.pp.irq);
if (IS_ENABLED(CONFIG_PCI_MSI))
disable_irq(pcie->pci.pp.msi_irq[0]);
if (!pcie->link_state)
return;
if (!pm_runtime_enabled(pcie->dev))
return;
tegra_pcie_dw_pme_turnoff(pcie);
tegra_pcie_unconfig_controller(pcie);
pm_runtime_put_sync(pcie->dev);