From e0e2e6474aac6c3ae9c7a2b39a69566892ad8a70 Mon Sep 17 00:00:00 2001 From: Tony Truong Date: Thu, 5 Mar 2020 14:01:22 -0800 Subject: [PATCH] msm: pcie: switch pipe clk mux source to XO before disabling GDSC Having pipe clk mux source set to PCIe pipe clk can possibly cause PCIe gdsc to be stuck while being disabled until the source is switched to XO. Therefore switch the source to XO before disabling PCIe gdsc. Change-Id: I5292c1e3b7a006b3857ef82fa446392d324d616f Signed-off-by: Tony Truong --- drivers/pci/controller/pci-msm.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index ec7e0c56ed48..262e31ab3679 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -3169,11 +3169,11 @@ static int msm_pcie_clk_init(struct msm_pcie_dev_t *dev) clk_disable_unprepare(hdl); } - regulator_disable(dev->gdsc); - - /* switch pipe clock mux after gdsc is turned off */ + /* switch pipe clock mux to xo before turning off gdsc */ if (dev->pipe_clk_mux && dev->ref_clk_src) clk_set_parent(dev->pipe_clk_mux, dev->ref_clk_src); + + regulator_disable(dev->gdsc); } for (i = 0; i < MSM_PCIE_MAX_RESET; i++) { @@ -3246,12 +3246,12 @@ static void msm_pcie_clk_deinit(struct msm_pcie_dev_t *dev) dev->rc_idx); } - regulator_disable(dev->gdsc); - - /* switch pipe clock mux after gdsc is turned off */ + /* switch pipe clock mux to xo before turning off gdsc */ if (dev->pipe_clk_mux && dev->ref_clk_src) clk_set_parent(dev->pipe_clk_mux, dev->ref_clk_src); + regulator_disable(dev->gdsc); + PCIE_DBG(dev, "RC%d: exit\n", dev->rc_idx); }