static ssize_t slidle_state_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { int len = 0; char *p = buf; int i; p += sprintf(p, "*********** slow idle state ************\n"); for (i = 0; i < NR_REASONS; i++) { p += sprintf(p, "[%d]slidle_block_cnt[%s]=%lu\n", i, reason_name[i], slidle_block_cnt[i]); } p += sprintf(p, "\n"); for (i = 0; i < NR_GRPS; i++) { p += sprintf(p, "[%02d]slidle_condition_mask[%-8s]=0x%08x\t\t" "slidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), slidle_condition_mask[i], grp_get_name(i), slidle_block_mask[i]); } p += sprintf(p, "\n********** slidle command help **********\n"); p += sprintf(p, "slidle help: cat /sys/power/slidle_state\n"); p += sprintf(p, "switch on/off: echo [slidle] 1/0 > /sys/power/slidle_state\n"); len = p - buf; return len; }
static ssize_t mcidle_state_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { int len = 0; char *p = buf; int cpus, reason, i; p += sprintf(p, "*********** multi-core idle state ************\n"); p += sprintf(p, "mcidle_time_critera=%u\n", mcidle_time_critera); for (cpus = 0; cpus < nr_cpu_ids; cpus++) { p += sprintf(p, "cpu:%d\n", cpus); for (reason = 0; reason < NR_REASONS; reason++) { p += sprintf(p, "[%d]mcidle_block_cnt[%s]=%lu\n", reason, reason_name[reason], mcidle_block_cnt[cpus][reason]); } p += sprintf(p, "\n"); } for (i = 0; i < NR_GRPS; i++) { p += sprintf(p, "[%02d]soidle_condition_mask[%-8s]=0x%08x\t\t" "soidle_block_mask[%08x]=0x%08x\n", i, grp_get_name(i), soidle_condition_mask[i], grp_get_name(i), soidle_block_mask[i]); } p += sprintf(p, "\n********** mcidle command help **********\n"); p += sprintf(p, "mcidle help: cat /sys/power/mcidle_state\n"); p += sprintf(p, "switch on/off: echo [mcidle] 1/0 > /sys/power/mcidle_state\n"); p += sprintf(p, "modify tm_cri: echo time value(dec) > /sys/power/mcidle_state\n"); len = p - buf; return len; }
static ssize_t dpidle_state_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { int len = 0; char *p = buf; int i; p += sprintf(p, "*********** deep idle state ************\n"); p += sprintf(p, "dpidle_cpu_pdn = %d\n", dpidle_cpu_pdn); p += sprintf(p, "dpidle_time_critera=%u\n", dpidle_time_critera); p += sprintf(p, "dpidle_block_time_critera=%u\n", dpidle_block_time_critera); for (i = 0; i < NR_REASONS; i++) { p += sprintf(p, "[%d]dpidle_block_cnt[%s]=%lu\n", i, reason_name[i], dpidle_block_cnt[i]); } p += sprintf(p, "\n"); for (i = 0; i < NR_GRPS; i++) { p += sprintf(p, "[%02d]dpidle_condition_mask[%-8s]=0x%08x\t\t" "dpidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), dpidle_condition_mask[i], grp_get_name(i), dpidle_block_mask[i]); } p += sprintf(p, "\n*********** dpidle command help ************\n"); p += sprintf(p, "dpidle help: cat /sys/power/dpidle_state\n"); p += sprintf(p, "switch on/off: echo [dpidle] 1/0 > /sys/power/dpidle_state\n"); p += sprintf(p, "cpupdn on/off: echo cpupdn 1/0 > /sys/power/dpidle_state\n"); p += sprintf(p, "en_dp_by_bit: echo enable id > /sys/power/dpidle_state\n"); p += sprintf(p, "dis_dp_by_bit: echo disable id > /sys/power/dpidle_state\n"); p += sprintf(p, "modify tm_cri: echo time value(dec) > /sys/power/dpidle_state\n"); p += sprintf(p, "modify block_tm_cri: echo block_time value(ms) > /sys/power/dpidle_state\n"); len = p - buf; return len; }
static ssize_t dpidle_state_read(struct file *filp, char __user *userbuf, size_t count, loff_t *f_pos) { int len = 0; char *p = dbg_buf; int i; ssize_t retval = 0; p += sprintf(p, "*********** deep idle state ************\n"); p += sprintf(p, "dpidle_time_critera=%u\n", dpidle_time_critera); for (i = 0; i < NR_REASONS; i++) { p += sprintf(p, "[%d]dpidle_block_cnt[%s]=%lu\n", i, reason_name[i], dpidle_block_cnt[i]); } p += sprintf(p, "\n"); for (i = 0; i < NR_GRPS; i++) { p += sprintf(p, "[%02d]dpidle_condition_mask[%-8s]=0x%08x\t\t" "dpidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), dpidle_condition_mask[i], grp_get_name(i), dpidle_block_mask[i]); } p += sprintf(p, "dpidle_bypass_cg=%u\n", dpidle_by_pass_cg); p += sprintf(p, "\n*********** dpidle command help ************\n"); p += sprintf(p, "dpidle help: cat /sys/power/dpidle_state\n"); p += sprintf(p, "switch on/off: echo [dpidle] 1/0 > /sys/power/dpidle_state\n"); p += sprintf(p, "cpupdn on/off: echo cpupdn 1/0 > /sys/power/dpidle_state\n"); p += sprintf(p, "en_dp_by_bit: echo enable id > /sys/power/dpidle_state\n"); p += sprintf(p, "dis_dp_by_bit: echo disable id > /sys/power/dpidle_state\n"); p += sprintf(p, "modify tm_cri: echo time value(dec) > /sys/power/dpidle_state\n"); p += sprintf(p, "bypass cg: echo bypass 1/0 > /sys/power/dpidle_state\n"); len = p - dbg_buf; return simple_read_from_buffer(userbuf, count, f_pos, dbg_buf, len); }
static bool dpidle_can_enter(void) { int reason = NR_REASONS; int i = 0; unsigned long long dpidle_block_curr_time = 0; if(dpidle_by_pass_cg==0){ if (!mt_cpufreq_earlysuspend_status_get()){ reason = BY_VTG; goto out; } } #ifdef CONFIG_SMP if ((atomic_read(&is_in_hotplug) >= 1)||(num_online_cpus() != 1)) { reason = BY_CPU; goto out; } #endif if(idle_spm_lock){ reason = BY_VTG; goto out; } if(dpidle_by_pass_cg==0){ memset(dpidle_block_mask, 0, NR_GRPS * sizeof(unsigned int)); if (!clkmgr_idle_can_enter(dpidle_condition_mask, dpidle_block_mask)) { reason = BY_CLK; goto out; } } #ifdef CONFIG_SMP dpidle_timer_left = localtimer_get_counter(); if ((int)dpidle_timer_left < dpidle_time_critera || ((int)dpidle_timer_left) < 0) { reason = BY_TMR; goto out; } #else gpt_get_cnt(GPT1, &dpidle_timer_left); gpt_get_cmp(GPT1, &dpidle_timer_cmp); if((dpidle_timer_cmp-dpidle_timer_left)<dpidle_time_critera) { reason = BY_TMR; goto out; } #endif out: if (reason < NR_REASONS) { if( dpidle_block_prev_time == 0 ) dpidle_block_prev_time = idle_get_current_time_ms(); dpidle_block_curr_time = idle_get_current_time_ms(); if((dpidle_block_curr_time - dpidle_block_prev_time) > dpidle_block_time_critera) { if ((smp_processor_id() == 0)) { for (i = 0; i < nr_cpu_ids; i++) { idle_ver("dpidle_cnt[%d]=%lu, rgidle_cnt[%d]=%lu\n", i, dpidle_cnt[i], i, rgidle_cnt[i]); } for (i = 0; i < NR_REASONS; i++) { idle_ver("[%d]dpidle_block_cnt[%s]=%lu\n", i, reason_name[i], dpidle_block_cnt[i]); } for (i = 0; i < NR_GRPS; i++) { idle_ver("[%02d]dpidle_condition_mask[%-8s]=0x%08x\t\t" "dpidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), dpidle_condition_mask[i], grp_get_name(i), dpidle_block_mask[i]); } memset(dpidle_block_cnt, 0, sizeof(dpidle_block_cnt)); dpidle_block_prev_time = idle_get_current_time_ms(); } } dpidle_block_cnt[reason]++; return false; } else { dpidle_block_prev_time = idle_get_current_time_ms(); return true; } }
bool soidle_can_enter(int cpu) { int reason = NR_REASONS; unsigned long long soidle_block_curr_time = 0; #ifdef CONFIG_SMP if ((atomic_read(&is_in_hotplug) == 1)||(num_online_cpus() != 1)) { reason = BY_CPU; goto out; } #endif if(idle_spm_lock){ reason = BY_VTG; goto out; } #if !defined(SODI_DISPLAY_DRV_CHK_DIS) || (SODI_DISPLAY_DRV_CHK_DIS == 0) // decide when to enable SODI by display driver if(spm_get_sodi_en()==0){ reason = BY_OTH; goto out; } #endif if (soidle_by_pass_cg == 0) { memset(soidle_block_mask, 0, NR_GRPS * sizeof(unsigned int)); if (!clkmgr_idle_can_enter(soidle_condition_mask, soidle_block_mask)) { #if !defined(SODI_CG_CHK_DIS) || (SODI_CG_CHK_DIS == 0) reason = BY_CLK; goto out; #endif } } #ifdef CONFIG_SMP soidle_timer_left = localtimer_get_counter(); if ((int)soidle_timer_left < soidle_time_critera || ((int)soidle_timer_left) < 0) { reason = BY_TMR; goto out; } #else gpt_get_cnt(GPT1, &soidle_timer_left); gpt_get_cmp(GPT1, &soidle_timer_cmp); if((soidle_timer_cmp-soidle_timer_left)<soidle_time_critera) { reason = BY_TMR; goto out; } #endif out: if (reason < NR_REASONS) { if( soidle_block_prev_time == 0 ) soidle_block_prev_time = idle_get_current_time_ms(); soidle_block_curr_time = idle_get_current_time_ms(); if((soidle_block_curr_time - soidle_block_prev_time) > soidle_block_time_critera) { if ((smp_processor_id() == 0)) { int i = 0; for (i = 0; i < nr_cpu_ids; i++) { idle_ver("soidle_cnt[%d]=%lu, rgidle_cnt[%d]=%lu\n", i, soidle_cnt[i], i, rgidle_cnt[i]); } for (i = 0; i < NR_REASONS; i++) { idle_ver("[%d]soidle_block_cnt[0][%s]=%lu\n", i, reason_name[i], soidle_block_cnt[0][i]); } for (i = 0; i < NR_GRPS; i++) { idle_ver("[%02d]soidle_condition_mask[%-8s]=0x%08x\t\t" "soidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), soidle_condition_mask[i], grp_get_name(i), soidle_block_mask[i]); } memset(soidle_block_cnt, 0, sizeof(soidle_block_cnt)); soidle_block_prev_time = idle_get_current_time_ms(); } } soidle_block_cnt[cpu][reason]++; return false; } else { soidle_block_prev_time = idle_get_current_time_ms(); return true; } }
static bool dpidle_can_enter(void) { int reason = NR_REASONS; int i; unsigned long long dpidle_block_curr_time = 0; #ifdef SPM_MCDI_FUNC if (En_SPM_MCDI != 0) { reason = BY_OTH; goto out; } #endif #ifdef CONFIG_SMP if ((atomic_read(&is_in_hotplug) == 1)||(atomic_read(&hotplug_cpu_count) != 1)) { reason = BY_CPU; goto out; } #endif memset(dpidle_block_mask, 0, NR_GRPS * sizeof(unsigned int)); if (!clkmgr_idle_can_enter(dpidle_condition_mask, dpidle_block_mask)) { reason = BY_CLK; goto out; } #ifdef CONFIG_SMP dpidle_timer_left = localtimer_get_counter(); if (dpidle_timer_left < dpidle_time_critera || ((int)dpidle_timer_left) < 0) { reason = BY_TMR; goto out; } #else gpt_get_cnt(GPT1, &dpidle_timer_left); gpt_get_cmp(GPT1, &dpidle_timer_cmp); if((dpidle_timer_cmp-dpidle_timer_left)<dpidle_time_critera) { reason = BY_TMR; goto out; } #endif out: if (reason < NR_REASONS) { if( dpidle_block_prev_time == 0 ) dpidle_block_prev_time = idle_get_current_time_ms(); dpidle_block_curr_time = idle_get_current_time_ms(); if((dpidle_block_curr_time - dpidle_block_prev_time) > dpidle_block_time_critera) { if ((smp_processor_id() == 0)) { for (i = 0; i < nr_cpu_ids; i++) { idle_ver("dpidle_cnt[%d]=%lu, rgidle_cnt[%d]=%lu\n", i, dpidle_cnt[i], i, rgidle_cnt[i]); } for (i = 0; i < NR_REASONS; i++) { idle_ver("[%d]dpidle_block_cnt[%s]=%lu\n", i, reason_name[i], dpidle_block_cnt[i]); } for (i = 0; i < NR_GRPS; i++) { idle_ver("[%02d]dpidle_condition_mask[%-8s]=0x%08x\t\t" "dpidle_block_mask[%-8s]=0x%08x\n", i, grp_get_name(i), dpidle_condition_mask[i], grp_get_name(i), dpidle_block_mask[i]); } //printk("dpidle_block_prev_time =%lu, dpidle_block_curr_time = %lu\n",dpidle_block_prev_time,dpidle_block_curr_time); memset(dpidle_block_cnt, 0, sizeof(dpidle_block_cnt)); dpidle_block_prev_time = idle_get_current_time_ms(); } } dpidle_block_cnt[reason]++; return false; } else { dpidle_block_prev_time = idle_get_current_time_ms(); return true; } }