From e833cdb5c792912d459773cc23153e5d78875d34 Mon Sep 17 00:00:00 2001 From: Sham Muthayyan Date: Tue, 19 Jul 2016 20:05:25 +0530 Subject: PCIE: designware: Fixed PCI host init Change-Id: I949b302d77199fc09342acf26b7bb45a7ec467ee Signed-off-by: Sham Muthayyan --- drivers/pci/host/pcie-designware.c | 9 +++++++-- drivers/pci/host/pcie-designware.h | 2 +- drivers/pci/host/pcie-qcom.c | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) --- a/drivers/pci/host/pcie-designware.c +++ b/drivers/pci/host/pcie-designware.c @@ -637,8 +637,13 @@ int dw_pcie_host_init(struct pcie_port * } } - if (pp->ops->host_init) - pp->ops->host_init(pp); + if (pp->ops->host_init) { + ret = pp->ops->host_init(pp); + if (ret) { + dev_err(pp->dev, "hostinit failed\n"); + return 0; + } + } pp->root_bus_nr = pp->busn->start; if (IS_ENABLED(CONFIG_PCI_MSI)) { --- a/drivers/pci/host/pcie-designware.h +++ b/drivers/pci/host/pcie-designware.h @@ -63,7 +63,7 @@ struct pcie_host_ops { int (*wr_other_conf)(struct pcie_port *pp, struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val); int (*link_up)(struct pcie_port *pp); - void (*host_init)(struct pcie_port *pp); + int (*host_init)(struct pcie_port *pp); void (*msi_set_irq)(struct pcie_port *pp, int irq); void (*msi_clear_irq)(struct pcie_port *pp, int irq); phys_addr_t (*get_msi_addr)(struct pcie_port *pp); --- a/drivers/pci/host/pcie-qcom.c +++ b/drivers/pci/host/pcie-qcom.c @@ -515,7 +515,7 @@ static int qcom_pcie_link_up(struct pcie return !!(val & PCI_EXP_LNKSTA_DLLLA); } -static void qcom_pcie_host_init(struct pcie_port *pp) +static int qcom_pcie_host_init(struct pcie_port *pp) { struct qcom_pcie *pcie = to_qcom_pcie(pp); int ret; @@ -541,12 +541,13 @@ static void qcom_pcie_host_init(struct p if (ret) goto err; - return; + return 0; err: qcom_ep_reset_assert(pcie); phy_power_off(pcie->phy); err_deinit: pcie->ops->deinit(pcie); + return ret; } static int qcom_pcie_rd_own_conf(struct pcie_port *pp, int where, int size,