diff options
author | Vijayakumar Subbu <vsubbu@nvidia.com> | 2016-07-28 01:29:15 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-09-29 16:17:46 -0400 |
commit | b17d9708c9e9930778de43de1edf1385acb13ebd (patch) | |
tree | fc485e96cc19575d463c61c8b80a09dd89745f3f /drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h | |
parent | 27b47b1969d7d9cdd3de9fd6f0131ad357f4b0fa (diff) |
gpu: nvgpu: Add dGPU clocks support
JIRA DNVGPU-45
Change-Id: I237ce81e31b036c05c82d46eea8694ffe1c2e3df
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Signed-off-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-on: http://git-master/r/1205849
(cherry picked from commit 9a4006f76b75a8ad525e7aa5ad1f609aaae49126)
Reviewed-on: http://git-master/r/1227256
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h')
-rw-r--r-- | drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h b/drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h new file mode 100644 index 00000000..6bad6445 --- /dev/null +++ b/drivers/gpu/nvgpu/pmuif/gpmuifperfvfe.h | |||
@@ -0,0 +1,220 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | */ | ||
13 | #ifndef _GPMUIFPERFVFE_H_ | ||
14 | #define _GPMUIFPERFVFE_H_ | ||
15 | |||
16 | #include "gpmuifbios.h" | ||
17 | #include "gpmuifboardobj.h" | ||
18 | |||
19 | #define CTRL_PERF_VFE_EQU_QUADRATIC_COEFF_COUNT 0x03 | ||
20 | #define NV_PMU_PERF_RPC_VFE_EQU_EVAL_VAR_COUNT_MAX 2 | ||
21 | #define NV_PMU_PERF_RPC_VFE_EQU_MONITOR_COUNT_MAX 16 | ||
22 | #define NV_PMU_VFE_VAR_SINGLE_SENSED_FUSE_SEGMENTS_MAX 1 | ||
23 | |||
24 | struct nv_pmu_perf_vfe_var_value { | ||
25 | u8 var_type; | ||
26 | u8 reserved[3]; | ||
27 | u32 var_value; | ||
28 | }; | ||
29 | |||
30 | union nv_pmu_perf_vfe_equ_result { | ||
31 | u32 freq_m_hz; | ||
32 | u32 voltu_v; | ||
33 | u32 vf_gain; | ||
34 | int volt_deltau_v; | ||
35 | }; | ||
36 | |||
37 | struct nv_pmu_perf_rpc_vfe_equ_eval { | ||
38 | u8 equ_idx; | ||
39 | u8 var_count; | ||
40 | u8 output_type; | ||
41 | struct nv_pmu_perf_vfe_var_value var_values[ | ||
42 | NV_PMU_PERF_RPC_VFE_EQU_EVAL_VAR_COUNT_MAX]; | ||
43 | union nv_pmu_perf_vfe_equ_result result; | ||
44 | }; | ||
45 | |||
46 | struct nv_pmu_perf_rpc_vfe_load { | ||
47 | bool b_load; | ||
48 | }; | ||
49 | |||
50 | struct nv_pmu_perf_vfe_var_boardobjgrp_get_status_header { | ||
51 | struct nv_pmu_boardobjgrp_e32 super; | ||
52 | }; | ||
53 | |||
54 | struct nv_pmu_perf_vfe_var_get_status_super { | ||
55 | struct nv_pmu_boardobj_query board_obj; | ||
56 | }; | ||
57 | |||
58 | struct nv_pmu_perf_vfe_var_single_sensed_fuse_get_status { | ||
59 | struct nv_pmu_perf_vfe_var_get_status_super super; | ||
60 | u32 fuse_value_integer; | ||
61 | u32 fuse_value_hw_integer; | ||
62 | u8 fuse_version; | ||
63 | bool b_version_check_failed; | ||
64 | }; | ||
65 | |||
66 | union nv_pmu_perf_vfe_var_boardobj_get_status_union { | ||
67 | struct nv_pmu_boardobj_query board_obj; | ||
68 | struct nv_pmu_perf_vfe_var_get_status_super super; | ||
69 | struct nv_pmu_perf_vfe_var_single_sensed_fuse_get_status fuse_status; | ||
70 | }; | ||
71 | |||
72 | NV_PMU_BOARDOBJ_GRP_GET_STATUS_MAKE_E32(perf, vfe_var); | ||
73 | |||
74 | struct nv_pmu_vfe_var { | ||
75 | struct nv_pmu_boardobj super; | ||
76 | u32 out_range_min; | ||
77 | u32 out_range_max; | ||
78 | }; | ||
79 | |||
80 | struct nv_pmu_vfe_var_derived { | ||
81 | struct nv_pmu_vfe_var super; | ||
82 | }; | ||
83 | |||
84 | struct nv_pmu_vfe_var_derived_product { | ||
85 | struct nv_pmu_vfe_var_derived super; | ||
86 | u8 var_idx0; | ||
87 | u8 var_idx1; | ||
88 | }; | ||
89 | |||
90 | struct nv_pmu_vfe_var_derived_sum { | ||
91 | struct nv_pmu_vfe_var_derived super; | ||
92 | u8 var_idx0; | ||
93 | u8 var_idx1; | ||
94 | }; | ||
95 | |||
96 | struct nv_pmu_vfe_var_single { | ||
97 | struct nv_pmu_vfe_var super; | ||
98 | u8 override_type; | ||
99 | u32 override_value; | ||
100 | }; | ||
101 | |||
102 | struct nv_pmu_vfe_var_single_frequency { | ||
103 | struct nv_pmu_vfe_var_single super; | ||
104 | }; | ||
105 | |||
106 | struct nv_pmu_vfe_var_single_sensed { | ||
107 | struct nv_pmu_vfe_var_single super; | ||
108 | }; | ||
109 | |||
110 | struct nv_pmu_vfe_var_single_sensed_fuse_info { | ||
111 | u8 segment_count; | ||
112 | union nv_pmu_bios_vfield_register_segment segments[ | ||
113 | NV_PMU_VFE_VAR_SINGLE_SENSED_FUSE_SEGMENTS_MAX]; | ||
114 | }; | ||
115 | |||
116 | struct nv_pmu_vfe_var_single_sensed_fuse_vfield_info { | ||
117 | struct nv_pmu_vfe_var_single_sensed_fuse_info fuse; | ||
118 | u32 fuse_val_default; | ||
119 | int hw_correction_scale; | ||
120 | int hw_correction_offset; | ||
121 | u8 v_field_id; | ||
122 | }; | ||
123 | |||
124 | struct nv_pmu_vfe_var_single_sensed_fuse_ver_vfield_info { | ||
125 | struct nv_pmu_vfe_var_single_sensed_fuse_info fuse; | ||
126 | u8 ver_expected; | ||
127 | bool b_ver_check; | ||
128 | bool b_use_default_on_ver_check_fail; | ||
129 | u8 v_field_id_ver; | ||
130 | }; | ||
131 | |||
132 | struct nv_pmu_vfe_var_single_sensed_fuse_override_info { | ||
133 | u32 fuse_val_override; | ||
134 | bool b_fuse_regkey_override; | ||
135 | }; | ||
136 | |||
137 | struct nv_pmu_vfe_var_single_sensed_fuse { | ||
138 | struct nv_pmu_vfe_var_single_sensed super; | ||
139 | struct nv_pmu_vfe_var_single_sensed_fuse_override_info override_info; | ||
140 | struct nv_pmu_vfe_var_single_sensed_fuse_vfield_info vfield_info; | ||
141 | struct nv_pmu_vfe_var_single_sensed_fuse_ver_vfield_info vfield_ver_info; | ||
142 | }; | ||
143 | |||
144 | struct nv_pmu_vfe_var_single_sensed_temp { | ||
145 | struct nv_pmu_vfe_var_single_sensed super; | ||
146 | u8 therm_channel_index; | ||
147 | int temp_hysteresis_positive; | ||
148 | int temp_hysteresis_negative; | ||
149 | int temp_default; | ||
150 | }; | ||
151 | |||
152 | struct nv_pmu_vfe_var_single_voltage { | ||
153 | struct nv_pmu_vfe_var_single super; | ||
154 | }; | ||
155 | |||
156 | struct nv_pmu_perf_vfe_var_boardobjgrp_set_header { | ||
157 | struct nv_pmu_boardobjgrp_e32 super; | ||
158 | u8 polling_periodms; | ||
159 | }; | ||
160 | |||
161 | union nv_pmu_perf_vfe_var_boardobj_set_union { | ||
162 | struct nv_pmu_boardobj board_obj; | ||
163 | struct nv_pmu_vfe_var var; | ||
164 | struct nv_pmu_vfe_var_derived var_derived; | ||
165 | struct nv_pmu_vfe_var_derived_product var_derived_product; | ||
166 | struct nv_pmu_vfe_var_derived_sum var_derived_sum; | ||
167 | struct nv_pmu_vfe_var_single var_single; | ||
168 | struct nv_pmu_vfe_var_single_frequency var_single_frequiency; | ||
169 | struct nv_pmu_vfe_var_single_sensed var_single_sensed; | ||
170 | struct nv_pmu_vfe_var_single_sensed_fuse var_single_sensed_fuse; | ||
171 | struct nv_pmu_vfe_var_single_sensed_temp var_single_sensed_temp; | ||
172 | struct nv_pmu_vfe_var_single_voltage var_single_voltage; | ||
173 | }; | ||
174 | |||
175 | NV_PMU_BOARDOBJ_GRP_SET_MAKE_E32(perf, vfe_var); | ||
176 | |||
177 | struct nv_pmu_vfe_equ { | ||
178 | struct nv_pmu_boardobj super; | ||
179 | u8 var_idx; | ||
180 | u8 equ_idx_next; | ||
181 | u8 output_type; | ||
182 | u32 out_range_min; | ||
183 | u32 out_range_max; | ||
184 | }; | ||
185 | |||
186 | struct nv_pmu_vfe_equ_compare { | ||
187 | struct nv_pmu_vfe_equ super; | ||
188 | u8 func_id; | ||
189 | u8 equ_idx_true; | ||
190 | u8 equ_idx_false; | ||
191 | u32 criteria; | ||
192 | }; | ||
193 | |||
194 | struct nv_pmu_vfe_equ_minmax { | ||
195 | struct nv_pmu_vfe_equ super; | ||
196 | bool b_max; | ||
197 | u8 equ_idx0; | ||
198 | u8 equ_idx1; | ||
199 | }; | ||
200 | |||
201 | struct nv_pmu_vfe_equ_quadratic { | ||
202 | struct nv_pmu_vfe_equ super; | ||
203 | u32 coeffs[CTRL_PERF_VFE_EQU_QUADRATIC_COEFF_COUNT]; | ||
204 | }; | ||
205 | |||
206 | struct nv_pmu_perf_vfe_equ_boardobjgrp_set_header { | ||
207 | struct nv_pmu_boardobjgrp_e255 super; | ||
208 | }; | ||
209 | |||
210 | union nv_pmu_perf_vfe_equ_boardobj_set_union { | ||
211 | struct nv_pmu_boardobj board_obj; | ||
212 | struct nv_pmu_vfe_equ equ; | ||
213 | struct nv_pmu_vfe_equ_compare equ_comapre; | ||
214 | struct nv_pmu_vfe_equ_minmax equ_minmax; | ||
215 | struct nv_pmu_vfe_equ_quadratic equ_quadratic; | ||
216 | }; | ||
217 | |||
218 | NV_PMU_BOARDOBJ_GRP_SET_MAKE_E255(perf, vfe_equ); | ||
219 | |||
220 | #endif /* _GPMUIFPERFVFE_H_*/ | ||