From 51dafa59bfad159757edd317e329f0dc1aed0b27 Mon Sep 17 00:00:00 2001 From: Vivek Pernamitta Date: Tue, 5 Apr 2022 17:21:34 +0530 Subject: [PATCH] msm: pci: Dump PCIe clock registers on link failure Dump PCie clocks on failure to enter link into L0, linkdown interrupt, and on receiving wake IRQ from device. Change-Id: I89430b25feeb165709ac44d3af65c73b8ab4eada Signed-off-by: Vivek Pernamitta Signed-off-by: Prudhvi Yarlagadda --- drivers/pci/controller/pci-msm.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index 1fe65d6bc980..dcac123cc362 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "../pci.h" @@ -304,7 +305,6 @@ pr_err("%s: " fmt, __func__, arg); \ } while (0) - enum msm_pcie_res { MSM_PCIE_RES_PARF, MSM_PCIE_RES_PHY, @@ -2943,6 +2943,28 @@ static bool msm_pcie_check_ltssm_state(struct msm_pcie_dev_t *dev, u32 state) return false; } +void msm_pcie_clk_dump(struct msm_pcie_dev_t *pcie_dev) +{ + struct msm_pcie_clk_info_t *clk_info; + int i; + + PCIE_ERR(pcie_dev, + "PCIe: RC%d: Dump PCIe clocks\n", + pcie_dev->rc_idx); + + clk_info = pcie_dev->clk; + for (i = 0; i < pcie_dev->num_clk; i++, clk_info++) { + if (clk_info->hdl) + qcom_clk_dump(clk_info->hdl, NULL, 0); + } + + clk_info = pcie_dev->pipe_clk; + for (i = 0; i < pcie_dev->num_pipe_clk; i++, clk_info++) { + if (clk_info->hdl) + qcom_clk_dump(clk_info->hdl, NULL, 0); + } +} + /** * msm_pcie_iatu_config - configure outbound address translation region * @dev: root commpex @@ -5772,6 +5794,7 @@ static irqreturn_t handle_wake_irq(int irq, void *data) if (dev->drv_supported && !dev->suspending && dev->link_status == MSM_PCIE_LINK_ENABLED) { + msm_pcie_clk_dump(dev); pcie_phy_dump(dev); pcie_parf_dump(dev); pcie_dm_core_dump(dev); @@ -5847,6 +5870,7 @@ static void msm_pcie_handle_linkdown(struct msm_pcie_dev_t *dev) PCIE_DUMP(dev, "PCIe:Linkdown IRQ for RC%d Dumping PCIe registers\n", dev->rc_idx); + msm_pcie_clk_dump(dev); pcie_phy_dump(dev); pcie_parf_dump(dev); pcie_dm_core_dump(dev); @@ -7165,6 +7189,7 @@ int msm_pcie_prevent_l1(struct pci_dev *pci_dev) PCIE_ERR(pcie_dev, "PCIe: RC%d: dump PCIe registers\n", pcie_dev->rc_idx); + msm_pcie_clk_dump(pcie_dev); pcie_parf_dump(pcie_dev); pcie_dm_core_dump(pcie_dev); pcie_phy_dump(pcie_dev);