From: Ye Li Date: Mon, 13 Apr 2020 15:10:41 +0000 (-0700) Subject: MLK-23783-1 imx8: clock: Set rate for USB3 clocks X-Git-Tag: rel_imx_5.10.35_2.0.0-somdevices.0~292 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=7833612484ea0b7149e2b2b552faf123b1d6c307;p=u-boot.git MLK-23783-1 imx8: clock: Set rate for USB3 clocks Current codes depend on default clock setting on SCFW, but on QXP c0, the USB3 BUS clock requires a lower clock at 250Mhz. Found USB TRB error on 8DX (QXP c0), if we use default 500Mhz bus clock. Per SCFW suggestion, SW should be responsible for setting up these clocks not depending on SCFW. So adding the clock set rate for all USB3 clocks Signed-off-by: Ye Li Reviewe-by: Peng Fan (cherry picked from commit 601da3c130fc6b0a864645009cf50c2d4a884d39) (cherry picked from commit 04cf5746dc0dd8c31902c783c93d2031caf17a6f) --- diff --git a/arch/arm/mach-imx/imx8/clock.c b/arch/arm/mach-imx/imx8/clock.c index d63f6e864e..4eb22ce129 100644 --- a/arch/arm/mach-imx/imx8/clock.c +++ b/arch/arm/mach-imx/imx8/clock.c @@ -223,6 +223,40 @@ void enable_usboh3_clk(unsigned char enable) void init_clk_usb3(int index) { sc_err_t err; + sc_pm_clock_rate_t rate; + + err = sc_pm_clock_enable(-1, SC_R_USB_2, SC_PM_CLK_MISC, false, false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(-1, SC_R_USB_2, SC_PM_CLK_MST_BUS, false, false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(-1, SC_R_USB_2, SC_PM_CLK_PER, false, false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + rate = 12000000; + err = sc_pm_set_clock_rate(-1, SC_R_USB_2, SC_PM_CLK_MISC, &rate); + if (err != SC_ERR_NONE) + printf("USB3 set MISC clock rate failed!, line=%d (error = %d)\n", + __LINE__, err); + + rate = 250000000; + err = sc_pm_set_clock_rate(-1, SC_R_USB_2, SC_PM_CLK_MST_BUS, &rate); + if (err != SC_ERR_NONE) + printf("USB3 set BUS clock rate failed!, line=%d (error = %d)\n", + __LINE__, err); + + rate = 125000000; + err = sc_pm_set_clock_rate(-1, SC_R_USB_2, SC_PM_CLK_PER, &rate); + if (err != SC_ERR_NONE) + printf("USB3 set PER clock rate failed!, line=%d (error = %d)\n", + __LINE__, err); err = sc_pm_clock_enable(-1, SC_R_USB_2, SC_PM_CLK_MISC, true, false); if (err != SC_ERR_NONE)