aboutsummaryrefslogtreecommitdiffstats
path: root/include/nvgpu/bios.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/nvgpu/bios.h')
-rw-r--r--include/nvgpu/bios.h1123
1 files changed, 1123 insertions, 0 deletions
diff --git a/include/nvgpu/bios.h b/include/nvgpu/bios.h
new file mode 100644
index 0000000..7d729b6
--- /dev/null
+++ b/include/nvgpu/bios.h
@@ -0,0 +1,1123 @@
1/*
2 * Copyright (c) 2014-2018, NVIDIA CORPORATION. All rights reserved.
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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#ifndef NVGPU_BIOS_H
24#define NVGPU_BIOS_H
25
26#include <nvgpu/types.h>
27
28struct gk20a;
29
30#define PERF_PTRS_WIDTH 0x4
31#define PERF_PTRS_WIDTH_16 0x2
32
33enum {
34 CLOCKS_TABLE = 2,
35 CLOCK_PROGRAMMING_TABLE,
36 FLL_TABLE,
37 VIN_TABLE,
38 FREQUENCY_CONTROLLER_TABLE
39};
40
41enum {
42 PERFORMANCE_TABLE = 0,
43 MEMORY_CLOCK_TABLE,
44 MEMORY_TWEAK_TABLE,
45 POWER_CONTROL_TABLE,
46 THERMAL_CONTROL_TABLE,
47 THERMAL_DEVICE_TABLE,
48 THERMAL_COOLERS_TABLE,
49 PERFORMANCE_SETTINGS_SCRIPT,
50 CONTINUOUS_VIRTUAL_BINNING_TABLE,
51 POWER_SENSORS_TABLE = 0xA,
52 POWER_CAPPING_TABLE = 0xB,
53 POWER_TOPOLOGY_TABLE = 0xF,
54 THERMAL_CHANNEL_TABLE = 0x12,
55 VOLTAGE_RAIL_TABLE = 26,
56 VOLTAGE_DEVICE_TABLE,
57 VOLTAGE_POLICY_TABLE,
58 LOWPOWER_TABLE,
59 LOWPOWER_GR_TABLE = 32,
60 LOWPOWER_MS_TABLE = 33,
61};
62
63enum {
64 VP_FIELD_TABLE = 0,
65 VP_FIELD_REGISTER,
66 VP_TRANSLATION_TABLE,
67};
68
69struct bit_token {
70 u8 token_id;
71 u8 data_version;
72 u16 data_size;
73 u16 data_ptr;
74} __packed;
75
76#define BIOS_GET_FIELD(value, name) ((value & name##_MASK) >> name##_SHIFT)
77
78struct fll_descriptor_header {
79 u8 version;
80 u8 size;
81} __packed;
82
83#define FLL_DESCRIPTOR_HEADER_10_SIZE_4 4U
84#define FLL_DESCRIPTOR_HEADER_10_SIZE_6 6U
85
86struct fll_descriptor_header_10 {
87 u8 version;
88 u8 header_size;
89 u8 entry_size;
90 u8 entry_count;
91 u16 max_min_freq_mhz;
92} __packed;
93
94#define FLL_DESCRIPTOR_ENTRY_10_SIZE 15U
95
96struct fll_descriptor_entry_10 {
97 u8 fll_device_type;
98 u8 clk_domain;
99 u8 fll_device_id;
100 u16 lut_params;
101 u8 vin_idx_logic;
102 u8 vin_idx_sram;
103 u16 fll_params;
104 u8 min_freq_vfe_idx;
105 u8 freq_ctrl_idx;
106 u16 ref_freq_mhz;
107 u16 ffr_cutoff_freq_mhz;
108} __packed;
109
110#define NV_FLL_DESC_FLL_PARAMS_MDIV_MASK 0x1F
111#define NV_FLL_DESC_FLL_PARAMS_MDIV_SHIFT 0
112
113#define NV_FLL_DESC_FLL_PARAMS_SKIP_PLDIV_BELOW_DVCO_MIN_MASK 0x20
114#define NV_FLL_DESC_FLL_PARAMS_SKIP_PLDIV_BELOW_DVCO_MIN_SHIFT 5
115
116#define NV_FLL_DESC_LUT_PARAMS_VSELECT_MASK 0x3
117#define NV_FLL_DESC_LUT_PARAMS_VSELECT_SHIFT 0
118
119#define NV_FLL_DESC_LUT_PARAMS_HYSTERISIS_THRESHOLD_MASK 0x3C
120#define NV_FLL_DESC_LUT_PARAMS_HYSTERISIS_THRESHOLD_SHIFT 2
121
122struct vin_descriptor_header_10 {
123 u8 version;
124 u8 header_sizee;
125 u8 entry_size;
126 u8 entry_count;
127 u8 flags0;
128 u32 vin_cal;
129} __packed;
130
131struct vin_descriptor_entry_10 {
132 u8 vin_device_type;
133 u8 volt_domain_vbios;
134 u8 vin_device_id;
135} __packed;
136
137#define NV_VIN_DESC_FLAGS0_VIN_CAL_REVISION_MASK 0x7
138#define NV_VIN_DESC_FLAGS0_VIN_CAL_REVISION_SHIFT 0
139
140#define NV_VIN_DESC_FLAGS0_VIN_CAL_TYPE_MASK 0xF0
141#define NV_VIN_DESC_FLAGS0_VIN_CAL_TYPE_SHIFT 4
142
143#define NV_VIN_DESC_FLAGS0_DISABLE_CONTROL_MASK 0x8
144#define NV_VIN_DESC_FLAGS0_DISABLE_CONTROL_SHIFT 3
145
146#define NV_VIN_DESC_VIN_CAL_SLOPE_FRACTION_MASK 0x1FF
147#define NV_VIN_DESC_VIN_CAL_SLOPE_FRACTION_SHIFT 0
148
149#define NV_VIN_DESC_VIN_CAL_SLOPE_INTEGER_MASK 0x3C00
150#define NV_VIN_DESC_VIN_CAL_SLOPE_INTEGER_SHIFT 10
151
152#define NV_VIN_DESC_VIN_CAL_INTERCEPT_FRACTION_MASK 0x3C000
153#define NV_VIN_DESC_VIN_CAL_INTERCEPT_FRACTION_SHIFT 14
154
155#define NV_VIN_DESC_VIN_CAL_INTERCEPT_INTEGER_MASK 0xFFC0000
156#define NV_VIN_DESC_VIN_CAL_INTERCEPT_INTEGER_SHIFT 18
157
158#define NV_VIN_DESC_VIN_CAL_OFFSET_MASK 0x7F
159#define NV_VIN_DESC_VIN_CAL_OFFSET_SHIFT 0
160
161#define NV_VIN_DESC_VIN_CAL_GAIN_MASK 0xF80
162#define NV_VIN_DESC_VIN_CAL_GAIN_SHIFT 7
163
164#define VBIOS_CLOCKS_TABLE_1X_HEADER_SIZE_07 0x07U
165struct vbios_clocks_table_1x_header {
166 u8 version;
167 u8 header_size;
168 u8 entry_size;
169 u8 entry_count;
170 u8 clocks_hal;
171 u16 cntr_sampling_periodms;
172} __packed;
173
174#define VBIOS_CLOCKS_TABLE_35_HEADER_SIZE_09 0x09U
175struct vbios_clocks_table_35_header {
176 u8 version;
177 u8 header_size;
178 u8 entry_size;
179 u8 entry_count;
180 u8 clocks_hal;
181 u16 cntr_sampling_periodms;
182 u16 reference_window;
183} __packed;
184
185#define VBIOS_CLOCKS_TABLE_1X_ENTRY_SIZE_09 0x09U
186struct vbios_clocks_table_1x_entry {
187 u8 flags0;
188 u16 param0;
189 u32 param1;
190 u16 param2;
191} __packed;
192
193#define VBIOS_CLOCKS_TABLE_35_ENTRY_SIZE_11 0x0BU
194struct vbios_clocks_table_35_entry {
195 u8 flags0;
196 u16 param0;
197 u32 param1;
198 u16 param2;
199 u16 param3;
200} __packed;
201
202#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_FLAGS0_USAGE_MASK 0x1F
203#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_FLAGS0_USAGE_SHIFT 0
204#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_FLAGS0_USAGE_FIXED 0x00
205#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_FLAGS0_USAGE_MASTER 0x01
206#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_FLAGS0_USAGE_SLAVE 0x02
207
208#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM0_PROG_CLK_PROG_IDX_FIRST_MASK 0xFF
209#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM0_PROG_CLK_PROG_IDX_FIRST_SHIFT 0
210#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM0_PROG_CLK_PROG_IDX_LAST_MASK 0xFF00
211#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM0_PROG_CLK_PROG_IDX_LAST_SHIFT 0x08
212
213#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_FIXED_FREQUENCY_MHZ_MASK 0xFFFF
214#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_FIXED_FREQUENCY_MHZ_SHIFT 0
215#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_MASTER_FREQ_OC_DELTA_MIN_MHZ_MASK 0xFFFF
216#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_MASTER_FREQ_OC_DELTA_MIN_MHZ_SHIFT 0
217
218#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_MASTER_FREQ_OC_DELTA_MAX_MHZ_MASK 0xFFFF0000
219#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_MASTER_FREQ_OC_DELTA_MAX_MHZ_SHIFT 0
220
221#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_SLAVE_MASTER_DOMAIN_MASK 0xF
222#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM1_SLAVE_MASTER_DOMAIN_SHIFT 0
223
224#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM2_PROG_NOISE_UNAWARE_ORDERING_IDX_MASK 0xF
225#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM2_PROG_NOISE_UNAWARE_ORDERING_IDX_SHIFT 0
226
227#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM2_PROG_NOISE_AWARE_ORDERING_IDX_MASK 0xF0
228#define NV_VBIOS_CLOCKS_TABLE_1X_ENTRY_PARAM2_PROG_NOISE_AWARE_ORDERING_IDX_SHIFT 4