drm/amd/powerplay: add event manager sub-component
[linux-2.6-block.git] / drivers / gpu / drm / amd / powerplay / eventmgr / eventactionchains.c
1 /*
2  * Copyright 2015 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 #include "eventmgr.h"
24 #include "eventactionchains.h"
25 #include "eventsubchains.h"
26
27 static const pem_event_action *initialize_event[] = {
28         block_adjust_power_state_tasks,
29         power_budget_tasks,
30         system_config_tasks,
31         setup_asic_tasks,
32         enable_dynamic_state_management_tasks,
33         enable_clock_power_gatings_tasks,
34         get_2d_performance_state_tasks,
35         set_performance_state_tasks,
36         conditionally_force_3d_performance_state_tasks,
37         process_vbios_eventinfo_tasks,
38         broadcast_power_policy_tasks,
39         NULL
40 };
41
42 const struct action_chain initialize_action_chain = {
43         "Initialize",
44         initialize_event
45 };
46
47 static const pem_event_action *uninitialize_event[] = {
48         ungate_all_display_phys_tasks,
49         uninitialize_display_phy_access_tasks,
50         disable_gfx_voltage_island_power_gating_tasks,
51         disable_gfx_clock_gating_tasks,
52         set_boot_state_tasks,
53         adjust_power_state_tasks,
54         disable_dynamic_state_management_tasks,
55         disable_clock_power_gatings_tasks,
56         cleanup_asic_tasks,
57         prepare_for_pnp_stop_tasks,
58         NULL
59 };
60
61 const struct action_chain uninitialize_action_chain = {
62         "Uninitialize",
63         uninitialize_event
64 };
65
66 static const pem_event_action *power_source_change_event_pp_enabled[] = {
67         set_power_source_tasks,
68         set_power_saving_state_tasks,
69         adjust_power_state_tasks,
70         enable_disable_fps_tasks,
71         set_nbmcu_state_tasks,
72         broadcast_power_policy_tasks,
73         NULL
74 };
75
76 const struct action_chain power_source_change_action_chain_pp_enabled = {
77         "Power source change - PowerPlay enabled",
78         power_source_change_event_pp_enabled
79 };
80
81 static const pem_event_action *power_source_change_event_pp_disabled[] = {
82         set_power_source_tasks,
83         set_nbmcu_state_tasks,
84         NULL
85 };
86
87 const struct action_chain power_source_changes_action_chain_pp_disabled = {
88         "Power source change - PowerPlay disabled",
89         power_source_change_event_pp_disabled
90 };
91
92 static const pem_event_action *power_source_change_event_hardware_dc[] = {
93         set_power_source_tasks,
94         set_power_saving_state_tasks,
95         adjust_power_state_tasks,
96         enable_disable_fps_tasks,
97         reset_hardware_dc_notification_tasks,
98         set_nbmcu_state_tasks,
99         broadcast_power_policy_tasks,
100         NULL
101 };
102
103 const struct action_chain power_source_change_action_chain_hardware_dc = {
104         "Power source change - with Hardware DC switching",
105         power_source_change_event_hardware_dc
106 };
107
108 static const pem_event_action *suspend_event[] = {
109         reset_display_phy_access_tasks,
110         unregister_interrupt_tasks,
111         disable_gfx_voltage_island_power_gating_tasks,
112         disable_gfx_clock_gating_tasks,
113         notify_smu_suspend_tasks,
114         disable_smc_firmware_ctf_tasks,
115         set_boot_state_tasks,
116         adjust_power_state_tasks,
117         disable_fps_tasks,
118         vari_bright_suspend_tasks,
119         reset_fan_speed_to_default_tasks,
120         power_down_asic_tasks,
121         disable_stutter_mode_tasks,
122         set_connected_standby_tasks,
123         block_hw_access_tasks,
124         NULL
125 };
126
127 const struct action_chain suspend_action_chain = {
128         "Suspend",
129         suspend_event
130 };
131
132 static const pem_event_action *resume_event[] = {
133         unblock_hw_access_tasks,
134         resume_connected_standby_tasks,
135         notify_smu_resume_tasks,
136         reset_display_configCounter_tasks,
137         update_dal_configuration_tasks,
138         vari_bright_resume_tasks,
139         block_adjust_power_state_tasks,
140         setup_asic_tasks,
141         enable_stutter_mode_tasks, /*must do this in boot state and before SMC is started */
142         enable_dynamic_state_management_tasks,
143         enable_clock_power_gatings_tasks,
144         enable_disable_bapm_tasks,
145         reset_boot_state_tasks,
146         adjust_power_state_tasks,
147         enable_disable_fps_tasks,
148         notify_hw_power_source_tasks,
149         process_vbios_event_info_tasks,
150         enable_gfx_clock_gating_tasks,
151         enable_gfx_voltage_island_power_gating_tasks,
152         reset_clock_gating_tasks,
153         notify_smu_vpu_recovery_end_tasks,
154         disable_vpu_cap_tasks,
155         execute_escape_sequence_tasks,
156         NULL
157 };
158
159
160 const struct action_chain resume_action_chain = {
161         "resume",
162         resume_event
163 };
164
165 static const pem_event_action *complete_init_event[] = {
166         adjust_power_state_tasks,
167         enable_gfx_clock_gating_tasks,
168         enable_gfx_voltage_island_power_gating_tasks,
169         notify_power_state_change_tasks,
170         NULL
171 };
172
173 const struct action_chain complete_init_action_chain = {
174         "complete init",
175         complete_init_event
176 };
177
178 static const pem_event_action *enable_gfx_clock_gating_event[] = {
179         enable_gfx_clock_gating_tasks,
180         NULL
181 };
182
183 const struct action_chain enable_gfx_clock_gating_action_chain = {
184         "enable gfx clock gate",
185         enable_gfx_clock_gating_event
186 };
187
188 static const pem_event_action *disable_gfx_clock_gating_event[] = {
189         disable_gfx_clock_gating_tasks,
190         NULL
191 };
192
193 const struct action_chain disable_gfx_clock_gating_action_chain = {
194         "disable gfx clock gate",
195         disable_gfx_clock_gating_event
196 };
197
198 static const pem_event_action *enable_cgpg_event[] = {
199         enable_cgpg_tasks,
200         NULL
201 };
202
203 const struct action_chain enable_cgpg_action_chain = {
204         "eable cg pg",
205         enable_cgpg_event
206 };
207
208 static const pem_event_action *disable_cgpg_event[] = {
209         disable_cgpg_tasks,
210         NULL
211 };
212
213 const struct action_chain disable_cgpg_action_chain = {
214         "disable cg pg",
215         disable_cgpg_event
216 };
217
218
219 /* Enable user _2d performance and activate */
220
221 static const pem_event_action *enable_user_state_event[] = {
222         create_new_user_performance_state_tasks,
223         adjust_power_state_tasks,
224         NULL
225 };
226
227 const struct action_chain enable_user_state_action_chain = {
228         "Enable user state",
229         enable_user_state_event
230 };
231
232 static const pem_event_action *enable_user_2d_performance_event[] = {
233         enable_user_2d_performance_tasks,
234         add_user_2d_performance_state_tasks,
235         set_performance_state_tasks,
236         adjust_power_state_tasks,
237         delete_user_2d_performance_state_tasks,
238         NULL
239 };
240
241 const struct action_chain enable_user_2d_performance_action_chain = {
242         "enable_user_2d_performance_event_activate",
243         enable_user_2d_performance_event
244 };
245
246
247 static const pem_event_action *disable_user_2d_performance_event[] = {
248         disable_user_2d_performance_tasks,
249         delete_user_2d_performance_state_tasks,
250         NULL
251 };
252
253 const struct action_chain disable_user_2d_performance_action_chain = {
254         "disable_user_2d_performance_event",
255         disable_user_2d_performance_event
256 };
257
258
259 static const pem_event_action *display_config_change_event[] = {
260         /* countDisplayConfigurationChangeEventTasks, */
261         unblock_adjust_power_state_tasks,
262         /* setCPUPowerState,*/
263         notify_hw_power_source_tasks,
264         /* updateDALConfigurationTasks,
265         variBrightDisplayConfigurationChangeTasks, */
266         adjust_power_state_tasks,
267         /*enableDisableFPSTasks,
268         setNBMCUStateTasks,
269         notifyPCIEDeviceReadyTasks,*/
270         NULL
271 };
272
273 const struct action_chain display_config_change_action_chain = {
274         "Display configuration change",
275         display_config_change_event
276 };
277
278 static const pem_event_action *readjust_power_state_event[] = {
279         adjust_power_state_tasks,
280         NULL
281 };
282
283 const struct action_chain readjust_power_state_action_chain = {
284         "re-adjust power state",
285         readjust_power_state_event
286 };
287