pci: layerscape: Only set EP CFG READY bit
authorPankaj Bansal <pankaj.bansal@nxp.com>
Mon, 14 Oct 2019 11:43:19 +0000 (11:43 +0000)
committerPriyanka Jain <priyanka.jain@nxp.com>
Fri, 8 Nov 2019 05:43:38 +0000 (11:13 +0530)
In ls_pcie_ep_enable_cfg(), as part of EP setup,config ready bit
of pci controller is set, so that RC can read the config space of EP.

While setting the config ready bit, LTSSM_EN bit in same register was
also inadvertently getting cleared. This restarts the link training
between RC and EP.

Update code to just set the desired CFG_READY bit (bit 0),
while leaving the other bits unchanged.

Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
Reviewed-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
drivers/pci/pcie_layerscape.c

index db1375a1cea06c8964830a63e0f06abd3ac2a8e9..5ad7c287735126d2b65ef8a4508f228de0249f55 100644 (file)
@@ -406,7 +406,11 @@ static void ls_pcie_ep_setup_bars(void *bar_base)
 
 static void ls_pcie_ep_enable_cfg(struct ls_pcie *pcie)
 {
-       ctrl_writel(pcie, PCIE_CONFIG_READY, PCIE_PF_CONFIG);
+       u32 config;
+
+       config = ctrl_readl(pcie,  PCIE_PF_CONFIG);
+       config |= PCIE_CONFIG_READY;
+       ctrl_writel(pcie, config, PCIE_PF_CONFIG);
 }
 
 static void ls_pcie_setup_ep(struct ls_pcie *pcie)