1 /* 2 * Copyright (C) 2011-2017 ARM Limited. All rights reserved. 3 * 4 * This program is free software and is provided to you under the terms of the GNU General Public License version 2 5 * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. 6 * 7 * A copy of the licence is included with the program, and can also be obtained from Free Software 8 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 9 */ 10 11 #ifndef __MALI_PM_H__ 12 #define __MALI_PM_H__ 13 14 #include "mali_osk.h" 15 #include "mali_pm_domain.h" 16 17 #define MALI_DOMAIN_INDEX_GP 0 18 #define MALI_DOMAIN_INDEX_PP0 1 19 #define MALI_DOMAIN_INDEX_PP1 2 20 #define MALI_DOMAIN_INDEX_PP2 3 21 #define MALI_DOMAIN_INDEX_PP3 4 22 #define MALI_DOMAIN_INDEX_PP4 5 23 #define MALI_DOMAIN_INDEX_PP5 6 24 #define MALI_DOMAIN_INDEX_PP6 7 25 #define MALI_DOMAIN_INDEX_PP7 8 26 #define MALI_DOMAIN_INDEX_L20 9 27 #define MALI_DOMAIN_INDEX_L21 10 28 #define MALI_DOMAIN_INDEX_L22 11 29 /* 30 * The dummy domain is used when there is no physical power domain 31 * (e.g. no PMU or always on cores) 32 */ 33 #define MALI_DOMAIN_INDEX_DUMMY 12 34 #define MALI_MAX_NUMBER_OF_DOMAINS 13 35 36 /** 37 * Initialize the Mali PM module 38 * 39 * PM module covers Mali PM core, PM domains and Mali PMU 40 */ 41 _mali_osk_errcode_t mali_pm_initialize(void); 42 43 /** 44 * Terminate the Mali PM module 45 */ 46 void mali_pm_terminate(void); 47 48 void mali_pm_exec_lock(void); 49 void mali_pm_exec_unlock(void); 50 51 52 struct mali_pm_domain *mali_pm_register_l2_cache(u32 domain_index, 53 struct mali_l2_cache_core *l2_cache); 54 struct mali_pm_domain *mali_pm_register_group(u32 domain_index, 55 struct mali_group *group); 56 57 mali_bool mali_pm_get_domain_refs(struct mali_pm_domain **domains, 58 struct mali_group **groups, 59 u32 num_domains); 60 mali_bool mali_pm_put_domain_refs(struct mali_pm_domain **domains, 61 u32 num_domains); 62 63 void mali_pm_init_begin(void); 64 void mali_pm_init_end(void); 65 66 void mali_pm_update_sync(void); 67 void mali_pm_update_async(void); 68 69 /* Callback functions for system power management */ 70 void mali_pm_os_suspend(mali_bool os_suspend); 71 void mali_pm_os_resume(void); 72 73 mali_bool mali_pm_runtime_suspend(void); 74 void mali_pm_runtime_resume(void); 75 76 #if MALI_STATE_TRACKING 77 u32 mali_pm_dump_state_domain(struct mali_pm_domain *domain, 78 char *buf, u32 size); 79 #endif 80 81 void mali_pm_power_cost_setup(void); 82 83 void mali_pm_get_best_power_cost_mask(int num_requested, int *dst); 84 85 #if defined(DEBUG) 86 const char *mali_pm_mask_to_string(u32 mask); 87 #endif 88 89 u32 mali_pm_get_current_mask(void); 90 u32 mali_pm_get_wanted_mask(void); 91 #endif /* __MALI_PM_H__ */ 92