On Tue 01 Sep 07:49 CDT 2020, Ansuel Smith wrote: > Qsdk U-Boot can incorrectly leave the PCIe interface in an undefined > state if bootm command is used instead of bootipq. This is caused by the > not deinit of PCIe when bootm is called. Reset the PCIe before init > anyway to fix this U-Boot bug. >
Looks sensible. Reviewed-by: Bjorn Andersson <bjorn.anders...@linaro.org> Regards, Bjorn > Signed-off-by: Ansuel Smith <ansuels...@gmail.com> > Fixes: 82a823833f4e ("PCI: qcom: Add Qualcomm PCIe controller driver") > Cc: sta...@vger.kernel.org # v4.19+ > --- > drivers/pci/controller/dwc/pcie-qcom.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pcie-qcom.c > b/drivers/pci/controller/dwc/pcie-qcom.c > index 3aac77a295ba..82336bbaf8dc 100644 > --- a/drivers/pci/controller/dwc/pcie-qcom.c > +++ b/drivers/pci/controller/dwc/pcie-qcom.c > @@ -302,6 +302,9 @@ static void qcom_pcie_deinit_2_1_0(struct qcom_pcie *pcie) > reset_control_assert(res->por_reset); > reset_control_assert(res->ext_reset); > reset_control_assert(res->phy_reset); > + > + writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL); > + > regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies); > } > > @@ -314,6 +317,16 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie) > u32 val; > int ret; > > + /* reset the PCIe interface as uboot can leave it undefined state */ > + reset_control_assert(res->pci_reset); > + reset_control_assert(res->axi_reset); > + reset_control_assert(res->ahb_reset); > + reset_control_assert(res->por_reset); > + reset_control_assert(res->ext_reset); > + reset_control_assert(res->phy_reset); > + > + writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL); > + > ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies); > if (ret < 0) { > dev_err(dev, "cannot enable regulators\n"); > -- > 2.27.0 >