From 7833612484ea0b7149e2b2b552faf123b1d6c307 Mon Sep 17 00:00:00 2001 From: Ye Li Date: Mon, 13 Apr 2020 08:10:41 -0700 Subject: [PATCH] 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) --- arch/arm/mach-imx/imx8/clock.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) 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) -- 2.17.1