void mali_platform_power_mode_change(mali_power_mode power_mode) { unsigned long flags; switch (power_mode) { case MALI_POWER_MODE_ON: MALI_DEBUG_PRINT(3, ("Mali platform: Got MALI_POWER_MODE_ON event, %s\n", atomic_read((atomic_t *)&bPoweroff) ? "powering on" : "already on")); if (atomic_read((atomic_t *)&bPoweroff) == 1) { MALI_DEBUG_PRINT(3,("[+]MFG enable_clock \n")); mfg_pwr_lock(flags); if (!clock_is_on(MT_CG_MFG_G3D)) { enable_clock(MT_CG_DISP0_SMI_COMMON, "MFG"); enable_clock(MT_CG_MFG_G3D, "MFG"); } mfg_pwr_unlock(flags); MALI_DEBUG_PRINT(3,("[-]MFG enable_clock \n")); #if defined(CONFIG_MALI400_PROFILING) _mali_osk_profiling_add_event(MALI_PROFILING_EVENT_TYPE_SINGLE | MALI_PROFILING_EVENT_CHANNEL_GPU | MALI_PROFILING_EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE, 500, 1200/1000, 0, 0, 0); #endif atomic_set((atomic_t *)&bPoweroff, 0); } break; case MALI_POWER_MODE_LIGHT_SLEEP: case MALI_POWER_MODE_DEEP_SLEEP: MALI_DEBUG_PRINT(3, ("Mali platform: Got %s event, %s\n", power_mode == MALI_POWER_MODE_LIGHT_SLEEP ? "MALI_POWER_MODE_LIGHT_SLEEP" : "MALI_POWER_MODE_DEEP_SLEEP", atomic_read((atomic_t *)&bPoweroff) ? "already off" : "powering off")); if (atomic_read((atomic_t *)&bPoweroff) == 0) { MALI_DEBUG_PRINT(3,("[+]MFG disable_clock \n")); mfg_pwr_lock(flags); if (clock_is_on(MT_CG_MFG_G3D)) { disable_clock(MT_CG_MFG_G3D, "MFG"); disable_clock(MT_CG_DISP0_SMI_COMMON, "MFG"); } mfg_pwr_unlock(flags); MALI_DEBUG_PRINT(3,("[-]MFG disable_clock \n")); #if defined(CONFIG_MALI400_PROFILING) _mali_osk_profiling_add_event(MALI_PROFILING_EVENT_TYPE_SINGLE | MALI_PROFILING_EVENT_CHANNEL_GPU | MALI_PROFILING_EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE, 0, 0, 0, 0, 0); #endif atomic_set((atomic_t *)&bPoweroff, 1); } break; } }
int mali_platform_power_mode_change(mali_power_mode power_mode) { unsigned long flags; switch (power_mode) { case MALI_POWER_MODE_ON: MALI_DEBUG_PRINT(3, ("Mali platform: Got MALI_POWER_MODE_ON event, %s\n", atomic_read((atomic_t *)&bPoweroff) ? "powering on" : "already on")); if (atomic_read((atomic_t *)&bPoweroff) == 1) { MALI_DEBUG_PRINT(2,("[+]MFG enable_clock \n")); mfg_pwr_lock(flags); if (!clock_is_on(MT_CG_MFG_PDN_BG3D_SW_CG)) { enable_clock(MT_CG_MFG_PDN_BG3D_SW_CG, "G3D_DRV"); /// enable WHPLL and set the GPU freq. to 500MHz if(get_gpu_level() != GPU_LEVEL_0){ clkmux_sel(MT_CLKMUX_MFG_MUX_SEL, MT_CG_GPU_500P5M_EN, "G3D_DRV"); } } mfg_pwr_unlock(flags); MALI_DEBUG_PRINT(2,("[-]MFG enable_clock \n")); #if defined(CONFIG_MALI400_PROFILING) _mali_osk_profiling_add_event(MALI_PROFILING_EVENT_TYPE_SINGLE | MALI_PROFILING_EVENT_CHANNEL_GPU | MALI_PROFILING_EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE, 500, 1200/1000, 0, 0, 0); #endif atomic_set((atomic_t *)&bPoweroff, 0); } break; case MALI_POWER_MODE_LIGHT_SLEEP: case MALI_POWER_MODE_DEEP_SLEEP: MALI_DEBUG_PRINT(1, ("Mali platform: Got %s event, %s\n", power_mode == MALI_POWER_MODE_LIGHT_SLEEP ? "MALI_POWER_MODE_LIGHT_SLEEP" : "MALI_POWER_MODE_DEEP_SLEEP", atomic_read((atomic_t *)&bPoweroff) ? "already off" : "powering off")); if (atomic_read((atomic_t *)&bPoweroff) == 0) { MALI_DEBUG_PRINT(2,("[+]MFG disable_clock \n")); mfg_pwr_lock(flags); if (clock_is_on(MT_CG_MFG_PDN_BG3D_SW_CG)) { disable_clock(MT_CG_MFG_PDN_BG3D_SW_CG, "G3D_DRV"); } mfg_pwr_unlock(flags); MALI_DEBUG_PRINT(2,("[-]MFG disable_clock \n")); #if defined(CONFIG_MALI400_PROFILING) _mali_osk_profiling_add_event(MALI_PROFILING_EVENT_TYPE_SINGLE | MALI_PROFILING_EVENT_CHANNEL_GPU | MALI_PROFILING_EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE, 0, 0, 0, 0, 0); #endif atomic_set((atomic_t *)&bPoweroff, 1); } break; } }