diff options
Diffstat (limited to 'drivers/pci/controller/pcie-mediatek.c')
| -rw-r--r-- | drivers/pci/controller/pcie-mediatek.c | 18 | 
1 files changed, 9 insertions, 9 deletions
| diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c index 2f3f974977a3..ddfbd4aebdec 100644 --- a/drivers/pci/controller/pcie-mediatek.c +++ b/drivers/pci/controller/pcie-mediatek.c @@ -365,19 +365,12 @@ static int mtk_pcie_config_read(struct pci_bus *bus, unsigned int devfn,  {  	struct mtk_pcie_port *port;  	u32 bn = bus->number; -	int ret;  	port = mtk_pcie_find_port(bus, devfn); -	if (!port) { -		*val = ~0; +	if (!port)  		return PCIBIOS_DEVICE_NOT_FOUND; -	} - -	ret = mtk_pcie_hw_rd_cfg(port, bn, devfn, where, size, val); -	if (ret) -		*val = ~0; -	return ret; +	return mtk_pcie_hw_rd_cfg(port, bn, devfn, where, size, val);  }  static int mtk_pcie_config_write(struct pci_bus *bus, unsigned int devfn, @@ -702,6 +695,13 @@ static int mtk_pcie_startup_port_v2(struct mtk_pcie_port *port)  	 */  	writel(PCIE_LINKDOWN_RST_EN, port->base + PCIE_RST_CTRL); +	/* +	 * Described in PCIe CEM specification sections 2.2 (PERST# Signal) and +	 * 2.2.1 (Initial Power-Up (G3 to S0)). The deassertion of PERST# should +	 * be delayed 100ms (TPVPERL) for the power and clock to become stable. +	 */ +	msleep(100); +  	/* De-assert PHY, PE, PIPE, MAC and configuration reset	*/  	val = readl(port->base + PCIE_RST_CTRL);  	val |= PCIE_PHY_RSTB | PCIE_PERSTB | PCIE_PIPE_SRSTB | |