From 50dedb3321f980596a40cf7475c3bf311eaadf35 Mon Sep 17 00:00:00 2001 From: Yue Wang Date: Mon, 9 Jul 2018 12:48:05 +0800 Subject: [PATCH] pcie: fix check linkup timeout bug when pcie resume. PD#169779: pcie: fix check linkup timeout bug when pcie resume. Change-Id: Ia648c63447f101b71ae84dd960c0f414b80cbd32 Signed-off-by: Yue Wang --- drivers/amlogic/pci/pcie-amlogic-v2.c | 8 ++++++++ drivers/amlogic/pci/pcie-amlogic.c | 8 ++++++++ drivers/amlogic/pci/pcie-amlogic.h | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/drivers/amlogic/pci/pcie-amlogic-v2.c b/drivers/amlogic/pci/pcie-amlogic-v2.c index 530beab..527ed28 100644 --- a/drivers/amlogic/pci/pcie-amlogic-v2.c +++ b/drivers/amlogic/pci/pcie-amlogic-v2.c @@ -554,8 +554,16 @@ static int amlogic_pcie_link_up(struct pcie_port *pp) u32 speed_okay = 0; u32 current_data_rate; int cnt = 0; + u32 val = 0; + u32 linkup = 0; struct amlogic_pcie *amlogic_pcie = to_amlogic_pcie(pp); + val = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1); + linkup = ((val & PCIE_PHY_DEBUG_R1_LINK_UP) && + (!(val & PCIE_PHY_DEBUG_R1_LINK_IN_TRAINING))); + if (linkup) + return linkup; + while (smlh_up == 0 || rdlh_up == 0 || ltssm_up == 0 || speed_okay == 0) { udelay(20); diff --git a/drivers/amlogic/pci/pcie-amlogic.c b/drivers/amlogic/pci/pcie-amlogic.c index 2ac3b05..9a5362f 100644 --- a/drivers/amlogic/pci/pcie-amlogic.c +++ b/drivers/amlogic/pci/pcie-amlogic.c @@ -514,8 +514,16 @@ int amlogic_pcie_link_up(struct pcie_port *pp) u32 speed_okay = 0; u32 current_data_rate; int cnt = 0; + u32 val = 0; + u32 linkup = 0; struct amlogic_pcie *amlogic_pcie = to_amlogic_pcie(pp); + val = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1); + linkup = ((val & PCIE_PHY_DEBUG_R1_LINK_UP) && + (!(val & PCIE_PHY_DEBUG_R1_LINK_IN_TRAINING))); + if (linkup) + return linkup; + while (smlh_up == 0 || rdlh_up == 0 || ltssm_up == 0 || speed_okay == 0) { udelay(20); diff --git a/drivers/amlogic/pci/pcie-amlogic.h b/drivers/amlogic/pci/pcie-amlogic.h index af537f0..d3fca81 100644 --- a/drivers/amlogic/pci/pcie-amlogic.h +++ b/drivers/amlogic/pci/pcie-amlogic.h @@ -33,6 +33,12 @@ #define PCIE_CFG_STATUS12 0x30 #define PCIE_CFG_STATUS17 0x44 +/* PCIe Port Logic registers */ +#define PLR_OFFSET 0x700 +#define PCIE_PHY_DEBUG_R1 (PLR_OFFSET + 0x2c) +#define PCIE_PHY_DEBUG_R1_LINK_UP (0x1 << 4) +#define PCIE_PHY_DEBUG_R1_LINK_IN_TRAINING (0x1 << 29) + #define WAIT_LINKUP_TIMEOUT 2000 enum pcie_data_rate { -- 2.7.4