From 9c31f04cf20e65612e238952773dfbe368c49f2f Mon Sep 17 00:00:00 2001 From: Vivek Pernamitta Date: Wed, 11 Nov 2020 16:11:47 +0530 Subject: [PATCH] pci: msm: Dump PCIe registers to debug linkdown Support to dump PARF,PHY,DBI/dm_core registers for PCIe linkdown. Change-Id: I54a19245e91e68f0d58f230509e6cb1a2ff02665 Signed-off-by: Vivek Pernamitta --- drivers/pci/controller/pci-msm.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index 674ade11c1f8..296e455ea62e 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -1186,6 +1186,29 @@ static void pcie_parf_dump(struct msm_pcie_dev_t *dev) } } +static void pcie_dm_core_dump(struct msm_pcie_dev_t *dev) +{ + int i, size; + + PCIE_DUMP(dev, "PCIe: RC%d DBI/dm_core register dump\n", dev->rc_idx); + + size = resource_size(dev->res[MSM_PCIE_RES_DM_CORE].resource); + + for (i = 0; i < size; i += 32) { + PCIE_DUMP(dev, + "RC%d: 0x%04x %08x %08x %08x %08x %08x %08x %08x %08x\n", + dev->rc_idx, i, + readl_relaxed(dev->dm_core + i), + readl_relaxed(dev->dm_core + (i + 4)), + readl_relaxed(dev->dm_core + (i + 8)), + readl_relaxed(dev->dm_core + (i + 12)), + readl_relaxed(dev->dm_core + (i + 16)), + readl_relaxed(dev->dm_core + (i + 20)), + readl_relaxed(dev->dm_core + (i + 24)), + readl_relaxed(dev->dm_core + (i + 28))); + } +} + static void msm_pcie_show_status(struct msm_pcie_dev_t *dev) { PCIE_DBG_FS(dev, "PCIe: RC%d is %s enumerated\n", @@ -4727,6 +4750,13 @@ static void msm_pcie_handle_linkdown(struct msm_pcie_dev_t *dev) dev->link_status = MSM_PCIE_LINK_DOWN; dev->shadow_en = false; + /* PCIe registers dump on link down */ + PCIE_DUMP(dev, "PCIe:Linkdown IRQ for RC%d Dumping PCIe registers\n", + dev->rc_idx); + pcie_phy_dump(dev); + pcie_parf_dump(dev); + pcie_dm_core_dump(dev); + /* assert PERST */ if (!(msm_pcie_keep_resources_on & BIT(dev->rc_idx))) gpio_set_value(dev->gpio[MSM_PCIE_GPIO_PERST].num,