clk: rockchip: only enter pll slow-mode directly before reboots on rk3288
As commit1d33929e2a
("clk: rockchip: switch PLLs to slow mode before reboot for rk3288") states, switching the PLLs to slow-mode is only necessary when rebooting using the soft-reset done through the CRU. The dwc2 controllers used create really big number of interrupts in special constellations involving usb-hubs and their number is so high, it can even overwhelm the interrupt handler if the cpu-speed os to low. Right now the PLLs are put into slow-mode in a shutdown syscore_ops callback which means it happens on all reboots (not only the soft-reset ones) and even on poweroff actions. This can result in the system not powering off and getting stuck instead, so we should move the slow-mode change nearer to the actual reboot action. For this we introduce the possiblity to also set a callback that gets called from the restart-handler directly prior to restarting the system and move the shutdown-callback to this new option. With this the slow-mode switch is done only on the necessary reboots and also has a smaller possibility of causing artifacts. Fixes:1d33929e2a
("clk: rockchip: switch PLLs to slow mode before reboot for rk3288") Signed-off-by: Heiko Stuebner <heiko.stuebner@collabora.com> Reviewed-by: Douglas Anderson <dianders@chromium.org>
This commit is contained in:
@@ -848,7 +848,6 @@ static void rk3288_clk_shutdown(void)
|
||||
static struct syscore_ops rk3288_clk_syscore_ops = {
|
||||
.suspend = rk3288_clk_suspend,
|
||||
.resume = rk3288_clk_resume,
|
||||
.shutdown = rk3288_clk_shutdown,
|
||||
};
|
||||
|
||||
static void __init rk3288_clk_init(struct device_node *np)
|
||||
@@ -906,7 +905,8 @@ static void __init rk3288_clk_init(struct device_node *np)
|
||||
rk3288_cru_base + RK3288_SOFTRST_CON(0),
|
||||
ROCKCHIP_SOFTRST_HIWORD_MASK);
|
||||
|
||||
rockchip_register_restart_notifier(RK3288_GLB_SRST_FST);
|
||||
rockchip_register_restart_notifier(RK3288_GLB_SRST_FST,
|
||||
rk3288_clk_shutdown);
|
||||
register_syscore_ops(&rk3288_clk_syscore_ops);
|
||||
}
|
||||
CLK_OF_DECLARE(rk3288_cru, "rockchip,rk3288-cru", rk3288_clk_init);
|
||||
|
Reference in New Issue
Block a user