/** This function is called when the Mali device has completed power down * operation. */ void _mali_osk_pmm_power_down_done(mali_pmm_message_data data) { #if MALI_LICENSE_IS_GPL #ifdef CONFIG_PM is_wake_up_needed = 1; #if MALI_POWER_MGMT_TEST_SUITE #if MALI_PMM_INTERNAL_TESTING if (is_mali_pmu_present == 0) { pwr_mgmt_status_reg = _mali_pmm_cores_list(); } #endif /* MALI_PMM_INTERNAL_TESTING */ #endif /* MALI_POWER_MGMT_TEST_SUITE */ wake_up_process(pm_thread); MALI_DEBUG_PRINT(4, ("OSPMM: MALI Power down Done\n" )); return; #endif /* CONFIG_PM */ #endif /* MALI_LICENSE_IS_GPL */ }
/** This function is called when user wants to suspend the mali GPU device in order * to simulate the power up and power down events. */ static ssize_t store_file(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int err = 0; #if MALI_POWER_MGMT_TEST_SUITE int test_flag_dvfs = 0; pwr_mgmt_status_reg = 0; mali_is_pmu_present(); #endif if (!strncmp(buf,mali_states[_MALI_DEVICE_SUSPEND],strlen(mali_states[_MALI_DEVICE_SUSPEND]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI suspend Power operation is scheduled\n" )); err = mali_pm_suspend(NULL); } #if MALI_POWER_MGMT_TEST_SUITE else if (!strncmp(buf,mali_pmm_recording_events[_MALI_DEVICE_PMM_REGISTERED_CORES],strlen(mali_pmm_recording_events[_MALI_DEVICE_PMM_REGISTERED_CORES]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI Device get number of registerd cores\n" )); pwr_mgmt_status_reg = _mali_pmm_cores_list(); return count; } else if (!strncmp(buf,mali_pmm_recording_events[_MALI_DEVICE_PMM_TIMEOUT_EVENT],strlen(mali_pmm_recording_events[_MALI_DEVICE_PMM_TIMEOUT_EVENT]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI timeout event recording is enabled\n" )); mali_timeout_event_recording_on = 1; } else if (!strncmp(buf,mali_pmm_recording_events[_MALI_DEVICE_PMM_JOB_SCHEDULING_EVENTS],strlen(mali_pmm_recording_events[_MALI_DEVICE_PMM_JOB_SCHEDULING_EVENTS]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI Job scheduling events recording is enabled\n" )); mali_job_scheduling_events_recording_on = 1; } #endif /* MALI_POWER_MGMT_TEST_SUITE */ else if (!strncmp(buf,mali_states[_MALI_DEVICE_RESUME],strlen(mali_states[_MALI_DEVICE_RESUME]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI Resume Power operation is scheduled\n" )); err = mali_pm_resume(NULL); } else if (!strncmp(buf,mali_states[_MALI_DVFS_PAUSE_EVENT],strlen(mali_states[_MALI_DVFS_PAUSE_EVENT]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI DVFS Pause Power operation is scheduled\n" )); err = mali_dev_pause(); #if MALI_POWER_MGMT_TEST_SUITE test_flag_dvfs = 1; #endif /* MALI_POWER_MGMT_TEST_SUITE */ } else if (!strncmp(buf,mali_states[_MALI_DVFS_RESUME_EVENT],strlen(mali_states[_MALI_DVFS_RESUME_EVENT]))) { MALI_DEBUG_PRINT(4, ("PMMDEBUG: MALI DVFS Resume Power operation is scheduled\n" )); err = mali_dev_resume(); #if MALI_POWER_MGMT_TEST_SUITE test_flag_dvfs = 1; #endif /* MALI_POWER_MGMT_TEST_SUITE */ } else { MALI_DEBUG_PRINT(4, ("PMMDEBUG: Invalid Power Mode Operation selected\n" )); } #if MALI_POWER_MGMT_TEST_SUITE if (test_flag_dvfs == 1) { if (err) { pwr_mgmt_status_reg = 2; } else { pwr_mgmt_status_reg = 1; } } else { if (1 == is_mali_pmu_present) { pwr_mgmt_status_reg = pmu_get_power_up_down_info(); } } #endif /* MALI_POWER_MGMT_TEST_SUITE */ return count; }