static ssize_t power_always_on_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { unsigned long val; int ret; char buf[32]; cnt = min(cnt, sizeof(buf) - 1); if (copy_from_user(buf, ubuf, cnt)) { return -EFAULT; } buf[cnt] = '\0'; ret = strict_strtoul(buf, 10, &val); if (0 != ret) { return ret; } /* Update setting (not exactly thread safe) */ if (1 == val && MALI_FALSE == power_always_on_enabled) { power_always_on_enabled = MALI_TRUE; _mali_osk_pm_dev_ref_add(); } else if (0 == val && MALI_TRUE == power_always_on_enabled) { power_always_on_enabled = MALI_FALSE; _mali_osk_pm_dev_ref_dec(); } *ppos += cnt; return cnt; }
void mali_pm_core_event(enum mali_core_event core_event) { MALI_DEBUG_ASSERT(MALI_CORE_EVENT_GP_START == core_event || MALI_CORE_EVENT_PP_START == core_event || MALI_CORE_EVENT_GP_STOP == core_event || MALI_CORE_EVENT_PP_STOP == core_event); if (MALI_CORE_EVENT_GP_START == core_event || MALI_CORE_EVENT_PP_START == core_event) { _mali_osk_pm_dev_ref_add(); if (mali_utilization_enabled()) { mali_utilization_core_start(_mali_osk_time_get_ns()); } } else { _mali_osk_pm_dev_ref_dec(); if (mali_utilization_enabled()) { mali_utilization_core_end(_mali_osk_time_get_ns()); } } }