void spm_dpidle_before_wfi(void) { int err = 0; g_clk_aud_intbus_sel = clkmux_get(MT_CLKMUX_AUD_INTBUS_SEL,"Deep_Idle"); clkmux_sel(MT_CLKMUX_AUD_INTBUS_SEL, MT_CG_SYS_26M,"Deep_Idle"); enable_clock(MT_CG_PMIC_SW_CG_AP, "DEEP_IDLE");//PMIC CG bit for AP. SPM need PMIC wrapper clock to change Vcore voltage #ifdef CONFIG_SMP free_gpt(GPT4); err = request_gpt(GPT4, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } dpidle_timer_left2 = localtimer_get_counter(); if( dpidle_timer_left2 <=0 ) gpt_set_cmp(GPT4, 1);//Trigger GPT4 Timerout imediately else gpt_set_cmp(GPT4, dpidle_timer_left2); start_gpt(GPT4); #else gpt_get_cnt(GPT1, &dpidle_timer_left2); #endif }
void soidle_before_wfi(void) { #ifdef CONFIG_SMP int err = 0; soidle_timer_left2 = localtimer_get_counter(); free_gpt(GPT4); err = request_gpt(GPT4, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } soidle_timer_left2 = localtimer_get_counter(); if( soidle_timer_left2 <=0 ) gpt_set_cmp(GPT4, 1);//Trigger GPT4 Timerout imediately else gpt_set_cmp(GPT4, soidle_timer_left2); start_gpt(GPT4); #else gpt_get_cnt(GPT1, &soidle_timer_left2); #endif }
void soidle_before_wfi(int cpu) { int err = 0; unsigned int id = soidle_gpt_percpu[cpu]; free_gpt(id); err = request_gpt(id, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } soidle_timer_left2[cpu] = localtimer_get_counter(); if( (int)soidle_timer_left2[cpu] <=0 ) { gpt_set_cmp(id, 1);//Trigger GPT4 Timerout imediately } else gpt_set_cmp(id, soidle_timer_left2[cpu]); start_gpt(id); }
void mt_idle_init(void) { int err = 0; idle_info("[%s]entry!!\n", __func__); arm_pm_idle = arch_idle; #ifndef SPM_SUSPEND_GPT_EN err = request_gpt(GPT4, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } #endif err = sysfs_create_file(power_kobj, &idle_state_attr.attr); #ifdef SPM_MCDI_FUNC err |= sysfs_create_file(power_kobj, &mcidle_state_attr.attr); #endif err |= sysfs_create_file(power_kobj, &soidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &dpidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &rgidle_state_attr.attr); if (err) { idle_err("[%s]: fail to create sysfs\n", __func__); } }
void mt_idle_init(void) { int err = 0; int i = 0; idle_info("[%s]entry!!\n", __func__); arm_pm_idle = arch_idle; err = request_gpt(idle_gpt, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT%d\n", __func__,idle_gpt+1); } err = 0; for(i=0;i<NR_CPUS;i++){ err |= cpu_xgpt_register_timer(i,NULL); } if (err) { idle_info("[%s]fail to request cpuxgpt\n", __func__); } #if defined(CONFIG_PM) err = sysfs_create_file(power_kobj, &idle_state_attr.attr); err |= sysfs_create_file(power_kobj, &soidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &dpidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &rgidle_state_attr.attr); if (err) { idle_err("[%s]: fail to create sysfs\n", __func__); } #endif }
void local_timer_test_init(void) { int err = 0; int i = 0; unsigned char name[10] = {'\0'}; struct task_struct *thread[nr_cpu_ids]; static struct clock_event_device *evt; err = request_gpt(GPT6, GPT_FREE_RUN, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, 0); if (err) { printk(KERN_ERR "fail to request gpt, err=%d\n", err); } err = request_percpu_irq(GIC_PPI_PRIVATE_TIMER, test_handler, "timer", &evt); if (err) { printk(KERN_ERR "can't register interrupt %d, err=%d\n", GIC_PPI_PRIVATE_TIMER, err); } init_completion(&ack); for (i = 0; i < nr_cpu_ids; i++) { cpuid[i] = i; init_completion(¬ify[i]); sprintf(name, "timer-%d", i); thread[i] = kthread_create(local_timer_test, &cpuid[i], name); if (IS_ERR(thread[i])) { err = PTR_ERR(thread[i]); thread[i] = NULL; printk(KERN_ERR "[%s]: kthread_create %s fail(%d)\n", __func__, name, err); return; } kthread_bind(thread[i], i); wake_up_process(thread[i]); } }
void spm_mcdi_LDVT_mcdi(void) { clc_notice("spm_mcdi_LDVT_mcdi() start.\n"); mtk_wdt_suspend(); // spm_direct_disable_sodi ============================ spm_direct_disable_sodi(); #if 1 { u32 mcdi_error; // init GPT ================================== free_gpt(GPT4); mcdi_error = request_gpt(GPT4, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if(mcdi_error != 0) { clc_notice("GPT4 init failed.(0x%x)\n", mcdi_error); } } #else // init GPT ================================== //spm_write(0xf0008010, 0x2); //clear GPT1 count //spm_write(0xf0008040, 0x2); //clear GPT4 count //spm_write(0xf0008050, 0x2); //clear GPT5 count //spm_write(0xf0008000, (spm_read(0xf0008000) | 0x19)); //enable GPT1, 4, 5 IRQ #endif #if 0 smp_call_function(spm_mcdi_wfi_for_test, NULL, 0); spm_mcdi_wfi_for_test(); #else mcdi_task_0 = kthread_create(spm_wfi_for_mcdi_test, NULL, "mcdi_task_0"); mcdi_task_1 = kthread_create(spm_wfi_for_mcdi_test, NULL, "mcdi_task_1"); if(IS_ERR(mcdi_task_0)||IS_ERR(mcdi_task_1) ) { clc_notice("Unable to start kernel thread(0x%x, 0x%x)./n", (u32)IS_ERR(mcdi_task_0), (u32)IS_ERR(mcdi_task_1)); mcdi_task_0 = NULL; mcdi_task_1 = NULL; } kthread_bind(mcdi_task_0, 0); kthread_bind(mcdi_task_1, 1); wake_up_process(mcdi_task_0); wake_up_process(mcdi_task_1); #endif }
void spm_mcdi_before_wfi(int cpu) { unsigned int id = mcidle_gpt_percpu[cpu]; if (cpu != 0) { mcidle_timer_left2[cpu] = localtimer_get_counter(); #ifdef SPM_SUSPEND_GPT_EN err = request_gpt(id, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } #endif gpt_set_cmp(id, mcidle_timer_left2[cpu]); start_gpt(id); } }
void mt_idle_init(void) { int err = 0; idle_info("[%s]entry!!\n", __func__); arm_pm_idle = arch_idle; #ifndef SPM_SODI_ENABLED idle_switch[IDLE_TYPE_SO] = 0; #endif //92 deepidle keep use xgpt err = request_gpt(GPT4, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } err = cpu_xgpt_register_timer(0,NULL); err |= cpu_xgpt_register_timer(1,NULL); err |= cpu_xgpt_register_timer(2,NULL); err |= cpu_xgpt_register_timer(3,NULL); err |= cpu_xgpt_register_timer(4,NULL); err |= cpu_xgpt_register_timer(5,NULL); err |= cpu_xgpt_register_timer(6,NULL); err |= cpu_xgpt_register_timer(7,NULL); if (err) { idle_info("[%s]fail to request cpuxgpt\n", __func__); } err = sysfs_create_file(power_kobj, &idle_state_attr.attr); #ifdef SPM_SODI_ENABLED err |= sysfs_create_file(power_kobj, &soidle_state_attr.attr); #endif #ifdef SPM_MCDI_FUNC err |= sysfs_create_file(power_kobj, &mcidle_state_attr.attr); #endif err |= sysfs_create_file(power_kobj, &dpidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &slidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &rgidle_state_attr.attr); if (err) { idle_err("[%s]: fail to create sysfs\n", __func__); } }
void mt_idle_init(void) { int err = 0; int i = 0; CHIP_SW_VER ver=mt_get_chip_sw_ver(); if(CHIP_SW_VER_02<=ver) { memcpy(idle_switch,idle_switch_E2,sizeof(idle_switch)); //return;//TODO,for E2 default off arch_idle } idle_info("[%s]entry!!\n", __func__); arm_pm_idle = arch_idle; err = request_gpt(idle_gpt, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT%d\n", __func__,idle_gpt+1); } err = 0; for(i=0;i<NR_CPUS;i++){ err |= cpu_xgpt_register_timer(i,NULL); } if (err) { idle_info("[%s]fail to request cpuxgpt\n", __func__); } err = sysfs_create_file(power_kobj, &idle_state_attr.attr); err |= sysfs_create_file(power_kobj, &soidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &mcidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &dpidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &slidle_state_attr.attr); err |= sysfs_create_file(power_kobj, &rgidle_state_attr.attr); if (err) { idle_err("[%s]: fail to create sysfs\n", __func__); } }
void mcidle_before_wfi(int cpu) { #ifdef CONFIG_SMP int err = 0; unsigned int id = mcidle_gpt_percpu[cpu]; mcidle_timer_left2[cpu] = localtimer_get_counter(); free_gpt(id); err = request_gpt(id, GPT_ONE_SHOT, GPT_CLK_SRC_SYS, GPT_CLK_DIV_1, 0, NULL, GPT_NOAUTOEN); if (err) { idle_info("[%s]fail to request GPT4\n", __func__); } mcidle_timer_left2[cpu] = localtimer_get_counter(); if(cpu!=0)//core1~n, avoid gpt clear by core0 { if( mcidle_timer_left2[cpu] <=2600 ) //200us(todo) { if(mcidle_timer_left2[cpu]<=0) gpt_set_cmp(id, 1);//Trigger GPT4 Timerout imediately else gpt_set_cmp(id, mcidle_timer_left2[cpu]); spm_write(SPM_SLEEP_CPU_WAKEUP_EVENT,spm_read(SPM_SLEEP_CPU_WAKEUP_EVENT)|0x1);//spm wake up directly } else gpt_set_cmp(id, mcidle_timer_left2[cpu]); start_gpt(id); } #else gpt_get_cnt(GPT1, &mcidle_timer_left2); #endif }