Loading arch/arm/kernel/process.c +5 −7 Original line number Diff line number Diff line Loading @@ -114,18 +114,13 @@ void soft_restart(unsigned long addr) BUG(); } static void null_restart(enum reboot_mode reboot_mode, const char *cmd) { } /* * Function pointers to optional machine specific functions */ void (*pm_power_off)(void); EXPORT_SYMBOL(pm_power_off); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd) = null_restart; EXPORT_SYMBOL_GPL(arm_pm_restart); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); /* * This is our default idle handler. Loading Loading @@ -230,7 +225,10 @@ void machine_restart(char *cmd) local_irq_disable(); smp_send_stop(); if (arm_pm_restart) arm_pm_restart(reboot_mode, cmd); else do_kernel_restart(cmd); /* Give a grace period for failure to restart of 1s */ mdelay(1000); Loading arch/arm64/kernel/process.c +2 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ void (*pm_power_off)(void); EXPORT_SYMBOL_GPL(pm_power_off); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); EXPORT_SYMBOL_GPL(arm_pm_restart); /* * This is our default idle handler. Loading Loading @@ -180,6 +179,8 @@ void machine_restart(char *cmd) /* Now call the architecture specific reboot code. */ if (arm_pm_restart) arm_pm_restart(reboot_mode, cmd); else do_kernel_restart(cmd); /* * Whoops - the architecture was unable to reboot. Loading drivers/clk/rockchip/clk-rk3188.c +2 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,8 @@ static void __init rk3188_common_clk_init(struct device_node *np) rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0), ROCKCHIP_SOFTRST_HIWORD_MASK); rockchip_register_restart_notifier(RK2928_GLB_SRST_FST); } static void __init rk3066a_clk_init(struct device_node *np) Loading drivers/clk/rockchip/clk-rk3288.c +6 −4 Original line number Diff line number Diff line Loading @@ -300,15 +300,15 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { COMPOSITE(0, "i2s_src", mux_pll_src_cpll_gpll_p, 0, RK3288_CLKSEL_CON(4), 15, 1, MFLAGS, 0, 7, DFLAGS, RK3288_CLKGATE_CON(4), 1, GFLAGS), COMPOSITE_FRAC(0, "i2s_frac", "i2s_src", 0, COMPOSITE_FRAC(0, "i2s_frac", "i2s_src", CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(8), 0, RK3288_CLKGATE_CON(4), 2, GFLAGS), MUX(0, "i2s_pre", mux_i2s_pre_p, 0, MUX(0, "i2s_pre", mux_i2s_pre_p, CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(4), 8, 2, MFLAGS), COMPOSITE_NODIV(0, "i2s0_clkout", mux_i2s_clkout_p, 0, COMPOSITE_NODIV(0, "i2s0_clkout", mux_i2s_clkout_p, CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(4), 12, 1, MFLAGS, RK3288_CLKGATE_CON(4), 0, GFLAGS), GATE(SCLK_I2S0, "sclk_i2s0", "i2s_pre", 0, GATE(SCLK_I2S0, "sclk_i2s0", "i2s_pre", CLK_SET_RATE_PARENT, RK3288_CLKGATE_CON(4), 3, GFLAGS), MUX(0, "spdif_src", mux_pll_src_cpll_gpll_p, 0, Loading Loading @@ -808,5 +808,7 @@ static void __init rk3288_clk_init(struct device_node *np) rockchip_register_softrst(np, 12, reg_base + RK3288_SOFTRST_CON(0), ROCKCHIP_SOFTRST_HIWORD_MASK); rockchip_register_restart_notifier(RK3288_GLB_SRST_FST); } CLK_OF_DECLARE(rk3288_cru, "rockchip,rk3288-cru", rk3288_clk_init); drivers/clk/rockchip/clk.c +25 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/clk-provider.h> #include <linux/mfd/syscon.h> #include <linux/regmap.h> #include <linux/reboot.h> #include "clk.h" /** Loading Loading @@ -330,3 +331,27 @@ void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks) clk_prepare_enable(clk); } } static unsigned int reg_restart; static int rockchip_restart_notify(struct notifier_block *this, unsigned long mode, void *cmd) { writel(0xfdb9, reg_base + reg_restart); return NOTIFY_DONE; } static struct notifier_block rockchip_restart_handler = { .notifier_call = rockchip_restart_notify, .priority = 128, }; void __init rockchip_register_restart_notifier(unsigned int reg) { int ret; reg_restart = reg; ret = register_restart_handler(&rockchip_restart_handler); if (ret) pr_err("%s: cannot register restart handler, %d\n", __func__, ret); } Loading
arch/arm/kernel/process.c +5 −7 Original line number Diff line number Diff line Loading @@ -114,18 +114,13 @@ void soft_restart(unsigned long addr) BUG(); } static void null_restart(enum reboot_mode reboot_mode, const char *cmd) { } /* * Function pointers to optional machine specific functions */ void (*pm_power_off)(void); EXPORT_SYMBOL(pm_power_off); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd) = null_restart; EXPORT_SYMBOL_GPL(arm_pm_restart); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); /* * This is our default idle handler. Loading Loading @@ -230,7 +225,10 @@ void machine_restart(char *cmd) local_irq_disable(); smp_send_stop(); if (arm_pm_restart) arm_pm_restart(reboot_mode, cmd); else do_kernel_restart(cmd); /* Give a grace period for failure to restart of 1s */ mdelay(1000); Loading
arch/arm64/kernel/process.c +2 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ void (*pm_power_off)(void); EXPORT_SYMBOL_GPL(pm_power_off); void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); EXPORT_SYMBOL_GPL(arm_pm_restart); /* * This is our default idle handler. Loading Loading @@ -180,6 +179,8 @@ void machine_restart(char *cmd) /* Now call the architecture specific reboot code. */ if (arm_pm_restart) arm_pm_restart(reboot_mode, cmd); else do_kernel_restart(cmd); /* * Whoops - the architecture was unable to reboot. Loading
drivers/clk/rockchip/clk-rk3188.c +2 −0 Original line number Diff line number Diff line Loading @@ -735,6 +735,8 @@ static void __init rk3188_common_clk_init(struct device_node *np) rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0), ROCKCHIP_SOFTRST_HIWORD_MASK); rockchip_register_restart_notifier(RK2928_GLB_SRST_FST); } static void __init rk3066a_clk_init(struct device_node *np) Loading
drivers/clk/rockchip/clk-rk3288.c +6 −4 Original line number Diff line number Diff line Loading @@ -300,15 +300,15 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { COMPOSITE(0, "i2s_src", mux_pll_src_cpll_gpll_p, 0, RK3288_CLKSEL_CON(4), 15, 1, MFLAGS, 0, 7, DFLAGS, RK3288_CLKGATE_CON(4), 1, GFLAGS), COMPOSITE_FRAC(0, "i2s_frac", "i2s_src", 0, COMPOSITE_FRAC(0, "i2s_frac", "i2s_src", CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(8), 0, RK3288_CLKGATE_CON(4), 2, GFLAGS), MUX(0, "i2s_pre", mux_i2s_pre_p, 0, MUX(0, "i2s_pre", mux_i2s_pre_p, CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(4), 8, 2, MFLAGS), COMPOSITE_NODIV(0, "i2s0_clkout", mux_i2s_clkout_p, 0, COMPOSITE_NODIV(0, "i2s0_clkout", mux_i2s_clkout_p, CLK_SET_RATE_PARENT, RK3288_CLKSEL_CON(4), 12, 1, MFLAGS, RK3288_CLKGATE_CON(4), 0, GFLAGS), GATE(SCLK_I2S0, "sclk_i2s0", "i2s_pre", 0, GATE(SCLK_I2S0, "sclk_i2s0", "i2s_pre", CLK_SET_RATE_PARENT, RK3288_CLKGATE_CON(4), 3, GFLAGS), MUX(0, "spdif_src", mux_pll_src_cpll_gpll_p, 0, Loading Loading @@ -808,5 +808,7 @@ static void __init rk3288_clk_init(struct device_node *np) rockchip_register_softrst(np, 12, reg_base + RK3288_SOFTRST_CON(0), ROCKCHIP_SOFTRST_HIWORD_MASK); rockchip_register_restart_notifier(RK3288_GLB_SRST_FST); } CLK_OF_DECLARE(rk3288_cru, "rockchip,rk3288-cru", rk3288_clk_init);
drivers/clk/rockchip/clk.c +25 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/clk-provider.h> #include <linux/mfd/syscon.h> #include <linux/regmap.h> #include <linux/reboot.h> #include "clk.h" /** Loading Loading @@ -330,3 +331,27 @@ void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks) clk_prepare_enable(clk); } } static unsigned int reg_restart; static int rockchip_restart_notify(struct notifier_block *this, unsigned long mode, void *cmd) { writel(0xfdb9, reg_base + reg_restart); return NOTIFY_DONE; } static struct notifier_block rockchip_restart_handler = { .notifier_call = rockchip_restart_notify, .priority = 128, }; void __init rockchip_register_restart_notifier(unsigned int reg) { int ret; reg_restart = reg; ret = register_restart_handler(&rockchip_restart_handler); if (ret) pr_err("%s: cannot register restart handler, %d\n", __func__, ret); }