]> git.karo-electronics.de Git - linux-beck.git/commitdiff
PCI: iproc: Do not reset PAXC when initializing the driver
authorRay Jui <ray.jui@broadcom.com>
Tue, 1 Nov 2016 00:38:31 +0000 (17:38 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 14 Nov 2016 21:54:57 +0000 (15:54 -0600)
During initialization, the current iProc PCIe host driver resets PAXC and
the downstream internal endpoint device that PAXC connects to.  If the
endpoint device is already loaded with firmware and has started running
from the bootloader stage, this downstream reset causes the endpoint device
to stop working.

Signed-off-by: Ray Jui <raj.jui@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
drivers/pci/host/pcie-iproc.c

index a9b9cd8631f40c421ddb18860d8916d1d2ab0e17..93b4d619c0ed9d9f5a536dd6cb74bc1181139211 100644 (file)
@@ -243,16 +243,13 @@ static void iproc_pcie_reset(struct iproc_pcie *pcie)
 {
        u32 val;
 
-       if (pcie->ep_is_internal) {
-               val = iproc_pcie_read_reg(pcie, IPROC_PCIE_CLK_CTRL);
-               val &= ~PAXC_RESET_MASK;
-               iproc_pcie_write_reg(pcie, IPROC_PCIE_CLK_CTRL, val);
-               udelay(100);
-               val |= PAXC_RESET_MASK;
-               iproc_pcie_write_reg(pcie, IPROC_PCIE_CLK_CTRL, val);
-               udelay(100);
+       /*
+        * PAXC and the internal emulated endpoint device downstream should not
+        * be reset.  If firmware has been loaded on the endpoint device at an
+        * earlier boot stage, reset here causes issues.
+        */
+       if (pcie->ep_is_internal)
                return;
-       }
 
        /*
         * Select perst_b signal as reset source. Put the device into reset,