xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/radeon/ci_dpm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2013 Advanced Micro Devices, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
5*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
6*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
7*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
9*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * The above copyright notice and this permission notice shall be included in
12*4882a593Smuzhiyun  * all copies or substantial portions of the Software.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*4882a593Smuzhiyun  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*4882a593Smuzhiyun  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*4882a593Smuzhiyun  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*4882a593Smuzhiyun  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*4882a593Smuzhiyun  * OTHER DEALINGS IN THE SOFTWARE.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun #ifndef __CI_DPM_H__
24*4882a593Smuzhiyun #define __CI_DPM_H__
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #include "ppsmc.h"
27*4882a593Smuzhiyun #include "radeon.h"
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define SMU__NUM_SCLK_DPM_STATE  8
30*4882a593Smuzhiyun #define SMU__NUM_MCLK_DPM_LEVELS 6
31*4882a593Smuzhiyun #define SMU__NUM_LCLK_DPM_LEVELS 8
32*4882a593Smuzhiyun #define SMU__NUM_PCIE_DPM_LEVELS 8
33*4882a593Smuzhiyun #include "smu7_discrete.h"
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define CISLANDS_MAX_HARDWARE_POWERLEVELS 2
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define CISLANDS_UNUSED_GPIO_PIN 0x7F
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun struct ci_pl {
40*4882a593Smuzhiyun 	u32 mclk;
41*4882a593Smuzhiyun 	u32 sclk;
42*4882a593Smuzhiyun 	enum radeon_pcie_gen pcie_gen;
43*4882a593Smuzhiyun 	u16 pcie_lane;
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun struct ci_ps {
47*4882a593Smuzhiyun 	u16 performance_level_count;
48*4882a593Smuzhiyun 	bool dc_compatible;
49*4882a593Smuzhiyun 	u32 sclk_t;
50*4882a593Smuzhiyun 	struct ci_pl performance_levels[CISLANDS_MAX_HARDWARE_POWERLEVELS];
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun struct ci_dpm_level {
54*4882a593Smuzhiyun 	bool enabled;
55*4882a593Smuzhiyun 	u32 value;
56*4882a593Smuzhiyun 	u32 param1;
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define CISLAND_MAX_DEEPSLEEP_DIVIDER_ID 5
60*4882a593Smuzhiyun #define MAX_REGULAR_DPM_NUMBER 8
61*4882a593Smuzhiyun #define CISLAND_MINIMUM_ENGINE_CLOCK 800
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun struct ci_single_dpm_table {
64*4882a593Smuzhiyun 	u32 count;
65*4882a593Smuzhiyun 	struct ci_dpm_level dpm_levels[MAX_REGULAR_DPM_NUMBER];
66*4882a593Smuzhiyun };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun struct ci_dpm_table {
69*4882a593Smuzhiyun 	struct ci_single_dpm_table sclk_table;
70*4882a593Smuzhiyun 	struct ci_single_dpm_table mclk_table;
71*4882a593Smuzhiyun 	struct ci_single_dpm_table pcie_speed_table;
72*4882a593Smuzhiyun 	struct ci_single_dpm_table vddc_table;
73*4882a593Smuzhiyun 	struct ci_single_dpm_table vddci_table;
74*4882a593Smuzhiyun 	struct ci_single_dpm_table mvdd_table;
75*4882a593Smuzhiyun };
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun struct ci_mc_reg_entry {
78*4882a593Smuzhiyun 	u32 mclk_max;
79*4882a593Smuzhiyun 	u32 mc_data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
80*4882a593Smuzhiyun };
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun struct ci_mc_reg_table {
83*4882a593Smuzhiyun 	u8 last;
84*4882a593Smuzhiyun 	u8 num_entries;
85*4882a593Smuzhiyun 	u16 valid_flag;
86*4882a593Smuzhiyun 	struct ci_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES];
87*4882a593Smuzhiyun 	SMU7_Discrete_MCRegisterAddress mc_reg_address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun struct ci_ulv_parm
91*4882a593Smuzhiyun {
92*4882a593Smuzhiyun 	bool supported;
93*4882a593Smuzhiyun 	u32 cg_ulv_parameter;
94*4882a593Smuzhiyun 	u32 volt_change_delay;
95*4882a593Smuzhiyun 	struct ci_pl pl;
96*4882a593Smuzhiyun };
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #define CISLANDS_MAX_LEAKAGE_COUNT  8
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun struct ci_leakage_voltage {
101*4882a593Smuzhiyun 	u16 count;
102*4882a593Smuzhiyun 	u16 leakage_id[CISLANDS_MAX_LEAKAGE_COUNT];
103*4882a593Smuzhiyun 	u16 actual_voltage[CISLANDS_MAX_LEAKAGE_COUNT];
104*4882a593Smuzhiyun };
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun struct ci_dpm_level_enable_mask {
107*4882a593Smuzhiyun 	u32 uvd_dpm_enable_mask;
108*4882a593Smuzhiyun 	u32 vce_dpm_enable_mask;
109*4882a593Smuzhiyun 	u32 acp_dpm_enable_mask;
110*4882a593Smuzhiyun 	u32 samu_dpm_enable_mask;
111*4882a593Smuzhiyun 	u32 sclk_dpm_enable_mask;
112*4882a593Smuzhiyun 	u32 mclk_dpm_enable_mask;
113*4882a593Smuzhiyun 	u32 pcie_dpm_enable_mask;
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun struct ci_vbios_boot_state
117*4882a593Smuzhiyun {
118*4882a593Smuzhiyun 	u16 mvdd_bootup_value;
119*4882a593Smuzhiyun 	u16 vddc_bootup_value;
120*4882a593Smuzhiyun 	u16 vddci_bootup_value;
121*4882a593Smuzhiyun 	u32 sclk_bootup_value;
122*4882a593Smuzhiyun 	u32 mclk_bootup_value;
123*4882a593Smuzhiyun 	u16 pcie_gen_bootup_value;
124*4882a593Smuzhiyun 	u16 pcie_lane_bootup_value;
125*4882a593Smuzhiyun };
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun struct ci_clock_registers {
128*4882a593Smuzhiyun 	u32 cg_spll_func_cntl;
129*4882a593Smuzhiyun 	u32 cg_spll_func_cntl_2;
130*4882a593Smuzhiyun 	u32 cg_spll_func_cntl_3;
131*4882a593Smuzhiyun 	u32 cg_spll_func_cntl_4;
132*4882a593Smuzhiyun 	u32 cg_spll_spread_spectrum;
133*4882a593Smuzhiyun 	u32 cg_spll_spread_spectrum_2;
134*4882a593Smuzhiyun 	u32 dll_cntl;
135*4882a593Smuzhiyun 	u32 mclk_pwrmgt_cntl;
136*4882a593Smuzhiyun 	u32 mpll_ad_func_cntl;
137*4882a593Smuzhiyun 	u32 mpll_dq_func_cntl;
138*4882a593Smuzhiyun 	u32 mpll_func_cntl;
139*4882a593Smuzhiyun 	u32 mpll_func_cntl_1;
140*4882a593Smuzhiyun 	u32 mpll_func_cntl_2;
141*4882a593Smuzhiyun 	u32 mpll_ss1;
142*4882a593Smuzhiyun 	u32 mpll_ss2;
143*4882a593Smuzhiyun };
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun struct ci_thermal_temperature_setting {
146*4882a593Smuzhiyun 	s32 temperature_low;
147*4882a593Smuzhiyun 	s32 temperature_high;
148*4882a593Smuzhiyun 	s32 temperature_shutdown;
149*4882a593Smuzhiyun };
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun struct ci_pcie_perf_range {
152*4882a593Smuzhiyun 	u16 max;
153*4882a593Smuzhiyun 	u16 min;
154*4882a593Smuzhiyun };
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun enum ci_pt_config_reg_type {
157*4882a593Smuzhiyun 	CISLANDS_CONFIGREG_MMR = 0,
158*4882a593Smuzhiyun 	CISLANDS_CONFIGREG_SMC_IND,
159*4882a593Smuzhiyun 	CISLANDS_CONFIGREG_DIDT_IND,
160*4882a593Smuzhiyun 	CISLANDS_CONFIGREG_CACHE,
161*4882a593Smuzhiyun 	CISLANDS_CONFIGREG_MAX
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun #define POWERCONTAINMENT_FEATURE_BAPM            0x00000001
165*4882a593Smuzhiyun #define POWERCONTAINMENT_FEATURE_TDCLimit        0x00000002
166*4882a593Smuzhiyun #define POWERCONTAINMENT_FEATURE_PkgPwrLimit     0x00000004
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun struct ci_pt_config_reg {
169*4882a593Smuzhiyun 	u32 offset;
170*4882a593Smuzhiyun 	u32 mask;
171*4882a593Smuzhiyun 	u32 shift;
172*4882a593Smuzhiyun 	u32 value;
173*4882a593Smuzhiyun 	enum ci_pt_config_reg_type type;
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun struct ci_pt_defaults {
177*4882a593Smuzhiyun 	u8 svi_load_line_en;
178*4882a593Smuzhiyun 	u8 svi_load_line_vddc;
179*4882a593Smuzhiyun 	u8 tdc_vddc_throttle_release_limit_perc;
180*4882a593Smuzhiyun 	u8 tdc_mawt;
181*4882a593Smuzhiyun 	u8 tdc_waterfall_ctl;
182*4882a593Smuzhiyun 	u8 dte_ambient_temp_base;
183*4882a593Smuzhiyun 	u32 display_cac;
184*4882a593Smuzhiyun 	u32 bapm_temp_gradient;
185*4882a593Smuzhiyun 	u16 bapmti_r[SMU7_DTE_ITERATIONS * SMU7_DTE_SOURCES * SMU7_DTE_SINKS];
186*4882a593Smuzhiyun 	u16 bapmti_rc[SMU7_DTE_ITERATIONS * SMU7_DTE_SOURCES * SMU7_DTE_SINKS];
187*4882a593Smuzhiyun };
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun #define DPMTABLE_OD_UPDATE_SCLK     0x00000001
190*4882a593Smuzhiyun #define DPMTABLE_OD_UPDATE_MCLK     0x00000002
191*4882a593Smuzhiyun #define DPMTABLE_UPDATE_SCLK        0x00000004
192*4882a593Smuzhiyun #define DPMTABLE_UPDATE_MCLK        0x00000008
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun struct ci_power_info {
195*4882a593Smuzhiyun 	struct ci_dpm_table dpm_table;
196*4882a593Smuzhiyun 	u32 voltage_control;
197*4882a593Smuzhiyun 	u32 mvdd_control;
198*4882a593Smuzhiyun 	u32 vddci_control;
199*4882a593Smuzhiyun 	u32 active_auto_throttle_sources;
200*4882a593Smuzhiyun 	struct ci_clock_registers clock_registers;
201*4882a593Smuzhiyun 	u16 acpi_vddc;
202*4882a593Smuzhiyun 	u16 acpi_vddci;
203*4882a593Smuzhiyun 	enum radeon_pcie_gen force_pcie_gen;
204*4882a593Smuzhiyun 	enum radeon_pcie_gen acpi_pcie_gen;
205*4882a593Smuzhiyun 	struct ci_leakage_voltage vddc_leakage;
206*4882a593Smuzhiyun 	struct ci_leakage_voltage vddci_leakage;
207*4882a593Smuzhiyun 	u16 max_vddc_in_pp_table;
208*4882a593Smuzhiyun 	u16 min_vddc_in_pp_table;
209*4882a593Smuzhiyun 	u16 max_vddci_in_pp_table;
210*4882a593Smuzhiyun 	u16 min_vddci_in_pp_table;
211*4882a593Smuzhiyun 	u32 mclk_strobe_mode_threshold;
212*4882a593Smuzhiyun 	u32 mclk_stutter_mode_threshold;
213*4882a593Smuzhiyun 	u32 mclk_edc_enable_threshold;
214*4882a593Smuzhiyun 	u32 mclk_edc_wr_enable_threshold;
215*4882a593Smuzhiyun 	struct ci_vbios_boot_state vbios_boot_state;
216*4882a593Smuzhiyun 	/* smc offsets */
217*4882a593Smuzhiyun 	u32 sram_end;
218*4882a593Smuzhiyun 	u32 dpm_table_start;
219*4882a593Smuzhiyun 	u32 soft_regs_start;
220*4882a593Smuzhiyun 	u32 mc_reg_table_start;
221*4882a593Smuzhiyun 	u32 fan_table_start;
222*4882a593Smuzhiyun 	u32 arb_table_start;
223*4882a593Smuzhiyun 	/* smc tables */
224*4882a593Smuzhiyun 	SMU7_Discrete_DpmTable smc_state_table;
225*4882a593Smuzhiyun 	SMU7_Discrete_MCRegisters smc_mc_reg_table;
226*4882a593Smuzhiyun 	SMU7_Discrete_PmFuses smc_powertune_table;
227*4882a593Smuzhiyun 	/* other stuff */
228*4882a593Smuzhiyun 	struct ci_mc_reg_table mc_reg_table;
229*4882a593Smuzhiyun 	struct atom_voltage_table vddc_voltage_table;
230*4882a593Smuzhiyun 	struct atom_voltage_table vddci_voltage_table;
231*4882a593Smuzhiyun 	struct atom_voltage_table mvdd_voltage_table;
232*4882a593Smuzhiyun 	struct ci_ulv_parm ulv;
233*4882a593Smuzhiyun 	u32 power_containment_features;
234*4882a593Smuzhiyun 	const struct ci_pt_defaults *powertune_defaults;
235*4882a593Smuzhiyun 	u32 dte_tj_offset;
236*4882a593Smuzhiyun 	bool vddc_phase_shed_control;
237*4882a593Smuzhiyun 	struct ci_thermal_temperature_setting thermal_temp_setting;
238*4882a593Smuzhiyun 	struct ci_dpm_level_enable_mask dpm_level_enable_mask;
239*4882a593Smuzhiyun 	u32 need_update_smu7_dpm_table;
240*4882a593Smuzhiyun 	u32 sclk_dpm_key_disabled;
241*4882a593Smuzhiyun 	u32 mclk_dpm_key_disabled;
242*4882a593Smuzhiyun 	u32 pcie_dpm_key_disabled;
243*4882a593Smuzhiyun 	u32 thermal_sclk_dpm_enabled;
244*4882a593Smuzhiyun 	struct ci_pcie_perf_range pcie_gen_performance;
245*4882a593Smuzhiyun 	struct ci_pcie_perf_range pcie_lane_performance;
246*4882a593Smuzhiyun 	struct ci_pcie_perf_range pcie_gen_powersaving;
247*4882a593Smuzhiyun 	struct ci_pcie_perf_range pcie_lane_powersaving;
248*4882a593Smuzhiyun 	u32 activity_target[SMU7_MAX_LEVELS_GRAPHICS];
249*4882a593Smuzhiyun 	u32 mclk_activity_target;
250*4882a593Smuzhiyun 	u32 low_sclk_interrupt_t;
251*4882a593Smuzhiyun 	u32 last_mclk_dpm_enable_mask;
252*4882a593Smuzhiyun 	u32 sys_pcie_mask;
253*4882a593Smuzhiyun 	/* caps */
254*4882a593Smuzhiyun 	bool caps_power_containment;
255*4882a593Smuzhiyun 	bool caps_cac;
256*4882a593Smuzhiyun 	bool caps_sq_ramping;
257*4882a593Smuzhiyun 	bool caps_db_ramping;
258*4882a593Smuzhiyun 	bool caps_td_ramping;
259*4882a593Smuzhiyun 	bool caps_tcp_ramping;
260*4882a593Smuzhiyun 	bool caps_fps;
261*4882a593Smuzhiyun 	bool caps_sclk_ds;
262*4882a593Smuzhiyun 	bool caps_sclk_ss_support;
263*4882a593Smuzhiyun 	bool caps_mclk_ss_support;
264*4882a593Smuzhiyun 	bool caps_uvd_dpm;
265*4882a593Smuzhiyun 	bool caps_vce_dpm;
266*4882a593Smuzhiyun 	bool caps_samu_dpm;
267*4882a593Smuzhiyun 	bool caps_acp_dpm;
268*4882a593Smuzhiyun 	bool caps_automatic_dc_transition;
269*4882a593Smuzhiyun 	bool caps_sclk_throttle_low_notification;
270*4882a593Smuzhiyun 	bool caps_dynamic_ac_timing;
271*4882a593Smuzhiyun 	bool caps_od_fuzzy_fan_control_support;
272*4882a593Smuzhiyun 	/* flags */
273*4882a593Smuzhiyun 	bool thermal_protection;
274*4882a593Smuzhiyun 	bool pcie_performance_request;
275*4882a593Smuzhiyun 	bool dynamic_ss;
276*4882a593Smuzhiyun 	bool dll_default_on;
277*4882a593Smuzhiyun 	bool cac_enabled;
278*4882a593Smuzhiyun 	bool uvd_enabled;
279*4882a593Smuzhiyun 	bool battery_state;
280*4882a593Smuzhiyun 	bool pspp_notify_required;
281*4882a593Smuzhiyun 	bool mem_gddr5;
282*4882a593Smuzhiyun 	bool enable_bapm_feature;
283*4882a593Smuzhiyun 	bool enable_tdc_limit_feature;
284*4882a593Smuzhiyun 	bool enable_pkg_pwr_tracking_feature;
285*4882a593Smuzhiyun 	bool use_pcie_performance_levels;
286*4882a593Smuzhiyun 	bool use_pcie_powersaving_levels;
287*4882a593Smuzhiyun 	bool uvd_power_gated;
288*4882a593Smuzhiyun 	/* driver states */
289*4882a593Smuzhiyun 	struct radeon_ps current_rps;
290*4882a593Smuzhiyun 	struct ci_ps current_ps;
291*4882a593Smuzhiyun 	struct radeon_ps requested_rps;
292*4882a593Smuzhiyun 	struct ci_ps requested_ps;
293*4882a593Smuzhiyun 	/* fan control */
294*4882a593Smuzhiyun 	bool fan_ctrl_is_in_default_mode;
295*4882a593Smuzhiyun 	bool fan_is_controlled_by_smc;
296*4882a593Smuzhiyun 	u32 t_min;
297*4882a593Smuzhiyun 	u32 fan_ctrl_default_mode;
298*4882a593Smuzhiyun };
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun #define CISLANDS_VOLTAGE_CONTROL_NONE                   0x0
301*4882a593Smuzhiyun #define CISLANDS_VOLTAGE_CONTROL_BY_GPIO                0x1
302*4882a593Smuzhiyun #define CISLANDS_VOLTAGE_CONTROL_BY_SVID2               0x2
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun #define CISLANDS_Q88_FORMAT_CONVERSION_UNIT             256
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT0                              0x3FFFC000
307*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT1                              0x000400
308*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT2                              0xC00080
309*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT3                              0xC00200
310*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT4                              0xC01680
311*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT5                              0xC00033
312*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT6                              0xC00033
313*4882a593Smuzhiyun #define CISLANDS_VRC_DFLT7                              0x3FFFC000
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun #define CISLANDS_CGULVPARAMETER_DFLT                    0x00040035
316*4882a593Smuzhiyun #define CISLAND_TARGETACTIVITY_DFLT                     30
317*4882a593Smuzhiyun #define CISLAND_MCLK_TARGETACTIVITY_DFLT                10
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun #define PCIE_PERF_REQ_REMOVE_REGISTRY   0
320*4882a593Smuzhiyun #define PCIE_PERF_REQ_FORCE_LOWPOWER    1
321*4882a593Smuzhiyun #define PCIE_PERF_REQ_PECI_GEN1         2
322*4882a593Smuzhiyun #define PCIE_PERF_REQ_PECI_GEN2         3
323*4882a593Smuzhiyun #define PCIE_PERF_REQ_PECI_GEN3         4
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun int ci_copy_bytes_to_smc(struct radeon_device *rdev,
326*4882a593Smuzhiyun 			 u32 smc_start_address,
327*4882a593Smuzhiyun 			 const u8 *src, u32 byte_count, u32 limit);
328*4882a593Smuzhiyun void ci_start_smc(struct radeon_device *rdev);
329*4882a593Smuzhiyun void ci_reset_smc(struct radeon_device *rdev);
330*4882a593Smuzhiyun int ci_program_jump_on_start(struct radeon_device *rdev);
331*4882a593Smuzhiyun void ci_stop_smc_clock(struct radeon_device *rdev);
332*4882a593Smuzhiyun void ci_start_smc_clock(struct radeon_device *rdev);
333*4882a593Smuzhiyun bool ci_is_smc_running(struct radeon_device *rdev);
334*4882a593Smuzhiyun PPSMC_Result ci_wait_for_smc_inactive(struct radeon_device *rdev);
335*4882a593Smuzhiyun int ci_load_smc_ucode(struct radeon_device *rdev, u32 limit);
336*4882a593Smuzhiyun int ci_read_smc_sram_dword(struct radeon_device *rdev,
337*4882a593Smuzhiyun 			   u32 smc_address, u32 *value, u32 limit);
338*4882a593Smuzhiyun int ci_write_smc_sram_dword(struct radeon_device *rdev,
339*4882a593Smuzhiyun 			    u32 smc_address, u32 value, u32 limit);
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #endif
342