From: 陈亮 Date: Thu, 31 Jul 2014 12:21:43 +0000 (-0700) Subject: rk312x: init rockchip_pmu_ops X-Git-Tag: firefly_0821_release~4916^2~97 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d47b22f1f0c8998b83d34ccfb63d7a61a5d2f7f4;p=firefly-linux-kernel-4.4.55.git rk312x: init rockchip_pmu_ops --- diff --git a/arch/arm/mach-rockchip/rk312x.c b/arch/arm/mach-rockchip/rk312x.c index b6473e34eff9..8fc06d08d0f0 100755 --- a/arch/arm/mach-rockchip/rk312x.c +++ b/arch/arm/mach-rockchip/rk312x.c @@ -108,8 +108,50 @@ static void __init rk3128_dt_map_io(void) rk312x_dt_map_io(); } +extern void secondary_startup(void); +static int rk312x_sys_set_power_domain(enum pmu_power_domain pd, bool on) +{ + if (on) { +#ifdef CONFIG_SMP + if (pd >= PD_CPU_1 && pd <= PD_CPU_3) { + writel_relaxed(0x20000 << (pd - PD_CPU_1), + RK_CRU_VIRT + RK312X_CRU_SOFTRSTS_CON(0)); + dsb(); + udelay(10); + writel_relaxed(virt_to_phys(secondary_startup), + RK312X_IMEM_VIRT + 8); + writel_relaxed(0xDEADBEAF, RK312X_IMEM_VIRT + 4); + dsb_sev(); + } +#endif + } else { +#ifdef CONFIG_SMP + if (pd >= PD_CPU_1 && pd <= PD_CPU_3) { + writel_relaxed(0x20002 << (pd - PD_CPU_1), + RK_CRU_VIRT + RK312X_CRU_SOFTRSTS_CON(0)); + dsb(); + } +#endif + } + + return 0; +} + +static bool rk312x_pmu_power_domain_is_on(enum pmu_power_domain pd) +{ + return 1; +} + +static int rk312x_pmu_set_idle_request(enum pmu_idle_req req, bool idle) +{ + return 0; +} + static void __init rk312x_dt_init_timer(void) { + rockchip_pmu_ops.set_power_domain = rk312x_sys_set_power_domain; + rockchip_pmu_ops.power_domain_is_on = rk312x_pmu_power_domain_is_on; + rockchip_pmu_ops.set_idle_request = rk312x_pmu_set_idle_request; of_clk_init(NULL); clocksource_of_init(); of_dvfs_init(); diff --git a/include/linux/rockchip/cru.h b/include/linux/rockchip/cru.h index 2205d5b6c20a..bad44d358ccc 100755 --- a/include/linux/rockchip/cru.h +++ b/include/linux/rockchip/cru.h @@ -161,4 +161,9 @@ static inline void rk3288_cru_set_soft_reset(u32 idx, bool on) #define RK3036_CRU_SOFTRSTS_CON_CNT (9) #define RK3036_CRU_SOFTRSTS_CON(i) (RK3036_CRU_SOFTRST_CON + ((i) * 4)) +#define RK312X_CRU_SOFTRST_CON 0x110 + +#define RK312X_CRU_SOFTRSTS_CON_CNT (9) +#define RK312X_CRU_SOFTRSTS_CON(i) (RK312X_CRU_SOFTRST_CON + ((i) * 4)) + #endif