]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
usb: host: ehci-msm: Disable clocks after all register accesses
authorStephan Gerhold <stephan.gerhold@linaro.org>
Mon, 7 Apr 2025 09:54:23 +0000 (11:54 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 30 Oct 2025 17:04:51 +0000 (11:04 -0600)
We need the USB clocks to do accesses like
  wait_for_bit_le32(&ehci->usbcmd, CMD_RESET, ...)
so we should disable them only after all of them are done.

At the moment this works only because the clock driver doesn't actually
disabling these clocks in U-Boot.

Fixes: 9b3a9f896e66 ("ehci: msm: bring up iface + core clocks")
Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Acked-by: Caleb Connolly <caleb.connolly@linaro.org>
Tested-by: Sam Day <me@samcday.com>
Link: https://patch.msgid.link/20250407-ehci-msm-fixes-v1-3-f8b30eb05d07@linaro.org
Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
drivers/usb/host/ehci-msm.c

index 60b2dc44d3d35ddc5b8cf37f70bbccd91c5e962c..bf46e89104ecd594587eb9132b8d10d566feb766 100644 (file)
@@ -110,9 +110,6 @@ static int ehci_usb_remove(struct udevice *dev)
        /* Stop controller. */
        clrbits_le32(&ehci->usbcmd, CMD_RUN);
 
-       clk_disable_unprepare(&p->iface_clk);
-       clk_disable_unprepare(&p->core_clk);
-
        ret = generic_shutdown_phy(&p->phy);
        if (ret)
                return ret;
@@ -130,6 +127,8 @@ static int ehci_usb_remove(struct udevice *dev)
                return -ETIMEDOUT;
        }
 
+       clk_disable_unprepare(&p->iface_clk);
+       clk_disable_unprepare(&p->core_clk);
        return 0;
 }