]> Git Repo - J-linux.git/blob - drivers/infiniband/hw/hfi1/platform.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / infiniband / hw / hfi1 / platform.h
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright(c) 2015, 2016 Intel Corporation.
4  */
5
6 #ifndef __PLATFORM_H
7 #define __PLATFORM_H
8
9 #define METADATA_TABLE_FIELD_START_SHIFT                0
10 #define METADATA_TABLE_FIELD_START_LEN_BITS             15
11 #define METADATA_TABLE_FIELD_LEN_SHIFT                  16
12 #define METADATA_TABLE_FIELD_LEN_LEN_BITS               16
13
14 /* Header structure */
15 #define PLATFORM_CONFIG_HEADER_RECORD_IDX_SHIFT                 0
16 #define PLATFORM_CONFIG_HEADER_RECORD_IDX_LEN_BITS              6
17 #define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_SHIFT               16
18 #define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_LEN_BITS            12
19 #define PLATFORM_CONFIG_HEADER_TABLE_TYPE_SHIFT                 28
20 #define PLATFORM_CONFIG_HEADER_TABLE_TYPE_LEN_BITS              4
21
22 enum platform_config_table_type_encoding {
23         PLATFORM_CONFIG_TABLE_RESERVED,
24         PLATFORM_CONFIG_SYSTEM_TABLE,
25         PLATFORM_CONFIG_PORT_TABLE,
26         PLATFORM_CONFIG_RX_PRESET_TABLE,
27         PLATFORM_CONFIG_TX_PRESET_TABLE,
28         PLATFORM_CONFIG_QSFP_ATTEN_TABLE,
29         PLATFORM_CONFIG_VARIABLE_SETTINGS_TABLE,
30         PLATFORM_CONFIG_TABLE_MAX
31 };
32
33 enum platform_config_system_table_fields {
34         SYSTEM_TABLE_RESERVED,
35         SYSTEM_TABLE_NODE_STRING,
36         SYSTEM_TABLE_SYSTEM_IMAGE_GUID,
37         SYSTEM_TABLE_NODE_GUID,
38         SYSTEM_TABLE_REVISION,
39         SYSTEM_TABLE_VENDOR_OUI,
40         SYSTEM_TABLE_META_VERSION,
41         SYSTEM_TABLE_DEVICE_ID,
42         SYSTEM_TABLE_PARTITION_ENFORCEMENT_CAP,
43         SYSTEM_TABLE_QSFP_POWER_CLASS_MAX,
44         SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_12G,
45         SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_25G,
46         SYSTEM_TABLE_VARIABLE_TABLE_ENTRIES_PER_PORT,
47         SYSTEM_TABLE_MAX
48 };
49
50 enum platform_config_port_table_fields {
51         PORT_TABLE_RESERVED,
52         PORT_TABLE_PORT_TYPE,
53         PORT_TABLE_LOCAL_ATTEN_12G,
54         PORT_TABLE_LOCAL_ATTEN_25G,
55         PORT_TABLE_LINK_SPEED_SUPPORTED,
56         PORT_TABLE_LINK_WIDTH_SUPPORTED,
57         PORT_TABLE_AUTO_LANE_SHEDDING_ENABLED,
58         PORT_TABLE_EXTERNAL_LOOPBACK_ALLOWED,
59         PORT_TABLE_VL_CAP,
60         PORT_TABLE_MTU_CAP,
61         PORT_TABLE_TX_LANE_ENABLE_MASK,
62         PORT_TABLE_LOCAL_MAX_TIMEOUT,
63         PORT_TABLE_REMOTE_ATTEN_12G,
64         PORT_TABLE_REMOTE_ATTEN_25G,
65         PORT_TABLE_TX_PRESET_IDX_ACTIVE_NO_EQ,
66         PORT_TABLE_TX_PRESET_IDX_ACTIVE_EQ,
67         PORT_TABLE_RX_PRESET_IDX,
68         PORT_TABLE_CABLE_REACH_CLASS,
69         PORT_TABLE_MAX
70 };
71
72 enum platform_config_rx_preset_table_fields {
73         RX_PRESET_TABLE_RESERVED,
74         RX_PRESET_TABLE_QSFP_RX_CDR_APPLY,
75         RX_PRESET_TABLE_QSFP_RX_EMP_APPLY,
76         RX_PRESET_TABLE_QSFP_RX_AMP_APPLY,
77         RX_PRESET_TABLE_QSFP_RX_CDR,
78         RX_PRESET_TABLE_QSFP_RX_EMP,
79         RX_PRESET_TABLE_QSFP_RX_AMP,
80         RX_PRESET_TABLE_MAX
81 };
82
83 enum platform_config_tx_preset_table_fields {
84         TX_PRESET_TABLE_RESERVED,
85         TX_PRESET_TABLE_PRECUR,
86         TX_PRESET_TABLE_ATTN,
87         TX_PRESET_TABLE_POSTCUR,
88         TX_PRESET_TABLE_QSFP_TX_CDR_APPLY,
89         TX_PRESET_TABLE_QSFP_TX_EQ_APPLY,
90         TX_PRESET_TABLE_QSFP_TX_CDR,
91         TX_PRESET_TABLE_QSFP_TX_EQ,
92         TX_PRESET_TABLE_MAX
93 };
94
95 enum platform_config_qsfp_attn_table_fields {
96         QSFP_ATTEN_TABLE_RESERVED,
97         QSFP_ATTEN_TABLE_TX_PRESET_IDX,
98         QSFP_ATTEN_TABLE_RX_PRESET_IDX,
99         QSFP_ATTEN_TABLE_MAX
100 };
101
102 enum platform_config_variable_settings_table_fields {
103         VARIABLE_SETTINGS_TABLE_RESERVED,
104         VARIABLE_SETTINGS_TABLE_TX_PRESET_IDX,
105         VARIABLE_SETTINGS_TABLE_RX_PRESET_IDX,
106         VARIABLE_SETTINGS_TABLE_MAX
107 };
108
109 struct platform_config {
110         size_t size;
111         const u8 *data;
112 };
113
114 struct platform_config_data {
115         u32 *table;
116         u32 *table_metadata;
117         u32 num_table;
118 };
119
120 /*
121  * This struct acts as a quick reference into the platform_data binary image
122  * and is populated by parse_platform_config(...) depending on the specific
123  * META_VERSION
124  */
125 struct platform_config_cache {
126         u8  cache_valid;
127         struct platform_config_data config_tables[PLATFORM_CONFIG_TABLE_MAX];
128 };
129
130 /* This section defines default values and encodings for the
131  * fields defined for each table above
132  */
133
134 /*
135  * =====================================================
136  *  System table encodings
137  * =====================================================
138  */
139 #define PLATFORM_CONFIG_MAGIC_NUM               0x3d4f5041
140 #define PLATFORM_CONFIG_MAGIC_NUMBER_LEN        4
141
142 /*
143  * These power classes are the same as defined in SFF 8636 spec rev 2.4
144  * describing byte 129 in table 6-16, except enumerated in a different order
145  */
146 enum platform_config_qsfp_power_class_encoding {
147         QSFP_POWER_CLASS_1 = 1,
148         QSFP_POWER_CLASS_2,
149         QSFP_POWER_CLASS_3,
150         QSFP_POWER_CLASS_4,
151         QSFP_POWER_CLASS_5,
152         QSFP_POWER_CLASS_6,
153         QSFP_POWER_CLASS_7
154 };
155
156 /*
157  * ====================================================
158  *  Port table encodings
159  * ====================================================
160  */
161 enum platform_config_port_type_encoding {
162         PORT_TYPE_UNKNOWN,
163         PORT_TYPE_DISCONNECTED,
164         PORT_TYPE_FIXED,
165         PORT_TYPE_VARIABLE,
166         PORT_TYPE_QSFP,
167         PORT_TYPE_MAX
168 };
169
170 enum platform_config_link_speed_supported_encoding {
171         LINK_SPEED_SUPP_12G = 1,
172         LINK_SPEED_SUPP_25G,
173         LINK_SPEED_SUPP_12G_25G,
174         LINK_SPEED_SUPP_MAX
175 };
176
177 /*
178  * This is a subset (not strict) of the link downgrades
179  * supported. The link downgrades supported are expected
180  * to be supplied to the driver by another entity such as
181  * the fabric manager
182  */
183 enum platform_config_link_width_supported_encoding {
184         LINK_WIDTH_SUPP_1X = 1,
185         LINK_WIDTH_SUPP_2X,
186         LINK_WIDTH_SUPP_2X_1X,
187         LINK_WIDTH_SUPP_3X,
188         LINK_WIDTH_SUPP_3X_1X,
189         LINK_WIDTH_SUPP_3X_2X,
190         LINK_WIDTH_SUPP_3X_2X_1X,
191         LINK_WIDTH_SUPP_4X,
192         LINK_WIDTH_SUPP_4X_1X,
193         LINK_WIDTH_SUPP_4X_2X,
194         LINK_WIDTH_SUPP_4X_2X_1X,
195         LINK_WIDTH_SUPP_4X_3X,
196         LINK_WIDTH_SUPP_4X_3X_1X,
197         LINK_WIDTH_SUPP_4X_3X_2X,
198         LINK_WIDTH_SUPP_4X_3X_2X_1X,
199         LINK_WIDTH_SUPP_MAX
200 };
201
202 enum platform_config_virtual_lane_capability_encoding {
203         VL_CAP_VL0 = 1,
204         VL_CAP_VL0_1,
205         VL_CAP_VL0_2,
206         VL_CAP_VL0_3,
207         VL_CAP_VL0_4,
208         VL_CAP_VL0_5,
209         VL_CAP_VL0_6,
210         VL_CAP_VL0_7,
211         VL_CAP_VL0_8,
212         VL_CAP_VL0_9,
213         VL_CAP_VL0_10,
214         VL_CAP_VL0_11,
215         VL_CAP_VL0_12,
216         VL_CAP_VL0_13,
217         VL_CAP_VL0_14,
218         VL_CAP_MAX
219 };
220
221 /* Max MTU */
222 enum platform_config_mtu_capability_encoding {
223         MTU_CAP_256   = 1,
224         MTU_CAP_512   = 2,
225         MTU_CAP_1024  = 3,
226         MTU_CAP_2048  = 4,
227         MTU_CAP_4096  = 5,
228         MTU_CAP_8192  = 6,
229         MTU_CAP_10240 = 7
230 };
231
232 enum platform_config_local_max_timeout_encoding {
233         LOCAL_MAX_TIMEOUT_10_MS = 1,
234         LOCAL_MAX_TIMEOUT_100_MS,
235         LOCAL_MAX_TIMEOUT_1_S,
236         LOCAL_MAX_TIMEOUT_10_S,
237         LOCAL_MAX_TIMEOUT_100_S,
238         LOCAL_MAX_TIMEOUT_1000_S
239 };
240
241 enum link_tuning_encoding {
242         OPA_PASSIVE_TUNING,
243         OPA_ACTIVE_TUNING,
244         OPA_UNKNOWN_TUNING
245 };
246
247 /*
248  * Shifts and masks for the link SI tuning values stuffed into the ASIC scratch
249  * registers for integrated platforms
250  */
251 #define PORT0_PORT_TYPE_SHIFT           0
252 #define PORT0_LOCAL_ATTEN_SHIFT         4
253 #define PORT0_REMOTE_ATTEN_SHIFT        10
254 #define PORT0_DEFAULT_ATTEN_SHIFT       32
255
256 #define PORT1_PORT_TYPE_SHIFT           16
257 #define PORT1_LOCAL_ATTEN_SHIFT         20
258 #define PORT1_REMOTE_ATTEN_SHIFT        26
259 #define PORT1_DEFAULT_ATTEN_SHIFT       40
260
261 #define PORT0_PORT_TYPE_MASK            0xFUL
262 #define PORT0_LOCAL_ATTEN_MASK          0x3FUL
263 #define PORT0_REMOTE_ATTEN_MASK         0x3FUL
264 #define PORT0_DEFAULT_ATTEN_MASK        0xFFUL
265
266 #define PORT1_PORT_TYPE_MASK            0xFUL
267 #define PORT1_LOCAL_ATTEN_MASK          0x3FUL
268 #define PORT1_REMOTE_ATTEN_MASK         0x3FUL
269 #define PORT1_DEFAULT_ATTEN_MASK        0xFFUL
270
271 #define PORT0_PORT_TYPE_SMASK           (PORT0_PORT_TYPE_MASK << \
272                                          PORT0_PORT_TYPE_SHIFT)
273 #define PORT0_LOCAL_ATTEN_SMASK         (PORT0_LOCAL_ATTEN_MASK << \
274                                          PORT0_LOCAL_ATTEN_SHIFT)
275 #define PORT0_REMOTE_ATTEN_SMASK        (PORT0_REMOTE_ATTEN_MASK << \
276                                          PORT0_REMOTE_ATTEN_SHIFT)
277 #define PORT0_DEFAULT_ATTEN_SMASK       (PORT0_DEFAULT_ATTEN_MASK << \
278                                          PORT0_DEFAULT_ATTEN_SHIFT)
279
280 #define PORT1_PORT_TYPE_SMASK           (PORT1_PORT_TYPE_MASK << \
281                                          PORT1_PORT_TYPE_SHIFT)
282 #define PORT1_LOCAL_ATTEN_SMASK         (PORT1_LOCAL_ATTEN_MASK << \
283                                          PORT1_LOCAL_ATTEN_SHIFT)
284 #define PORT1_REMOTE_ATTEN_SMASK        (PORT1_REMOTE_ATTEN_MASK << \
285                                          PORT1_REMOTE_ATTEN_SHIFT)
286 #define PORT1_DEFAULT_ATTEN_SMASK       (PORT1_DEFAULT_ATTEN_MASK << \
287                                          PORT1_DEFAULT_ATTEN_SHIFT)
288
289 #define QSFP_MAX_POWER_SHIFT            0
290 #define TX_NO_EQ_SHIFT                  4
291 #define TX_EQ_SHIFT                     25
292 #define RX_SHIFT                        46
293
294 #define QSFP_MAX_POWER_MASK             0xFUL
295 #define TX_NO_EQ_MASK                   0x1FFFFFUL
296 #define TX_EQ_MASK                      0x1FFFFFUL
297 #define RX_MASK                         0xFFFFUL
298
299 #define QSFP_MAX_POWER_SMASK            (QSFP_MAX_POWER_MASK << \
300                                          QSFP_MAX_POWER_SHIFT)
301 #define TX_NO_EQ_SMASK                  (TX_NO_EQ_MASK << TX_NO_EQ_SHIFT)
302 #define TX_EQ_SMASK                     (TX_EQ_MASK << TX_EQ_SHIFT)
303 #define RX_SMASK                        (RX_MASK << RX_SHIFT)
304
305 #define TX_PRECUR_SHIFT                 0
306 #define TX_ATTN_SHIFT                   4
307 #define QSFP_TX_CDR_APPLY_SHIFT         9
308 #define QSFP_TX_EQ_APPLY_SHIFT          10
309 #define QSFP_TX_CDR_SHIFT               11
310 #define QSFP_TX_EQ_SHIFT                12
311 #define TX_POSTCUR_SHIFT                16
312
313 #define TX_PRECUR_MASK                  0xFUL
314 #define TX_ATTN_MASK                    0x1FUL
315 #define QSFP_TX_CDR_APPLY_MASK          0x1UL
316 #define QSFP_TX_EQ_APPLY_MASK           0x1UL
317 #define QSFP_TX_CDR_MASK                0x1UL
318 #define QSFP_TX_EQ_MASK                 0xFUL
319 #define TX_POSTCUR_MASK                 0x1FUL
320
321 #define TX_PRECUR_SMASK                 (TX_PRECUR_MASK << TX_PRECUR_SHIFT)
322 #define TX_ATTN_SMASK                   (TX_ATTN_MASK << TX_ATTN_SHIFT)
323 #define QSFP_TX_CDR_APPLY_SMASK         (QSFP_TX_CDR_APPLY_MASK << \
324                                          QSFP_TX_CDR_APPLY_SHIFT)
325 #define QSFP_TX_EQ_APPLY_SMASK          (QSFP_TX_EQ_APPLY_MASK << \
326                                          QSFP_TX_EQ_APPLY_SHIFT)
327 #define QSFP_TX_CDR_SMASK               (QSFP_TX_CDR_MASK << QSFP_TX_CDR_SHIFT)
328 #define QSFP_TX_EQ_SMASK                (QSFP_TX_EQ_MASK << QSFP_TX_EQ_SHIFT)
329 #define TX_POSTCUR_SMASK                (TX_POSTCUR_MASK << TX_POSTCUR_SHIFT)
330
331 #define QSFP_RX_CDR_APPLY_SHIFT         0
332 #define QSFP_RX_EMP_APPLY_SHIFT         1
333 #define QSFP_RX_AMP_APPLY_SHIFT         2
334 #define QSFP_RX_CDR_SHIFT               3
335 #define QSFP_RX_EMP_SHIFT               4
336 #define QSFP_RX_AMP_SHIFT               8
337
338 #define QSFP_RX_CDR_APPLY_MASK          0x1UL
339 #define QSFP_RX_EMP_APPLY_MASK          0x1UL
340 #define QSFP_RX_AMP_APPLY_MASK          0x1UL
341 #define QSFP_RX_CDR_MASK                0x1UL
342 #define QSFP_RX_EMP_MASK                0xFUL
343 #define QSFP_RX_AMP_MASK                0x3UL
344
345 #define QSFP_RX_CDR_APPLY_SMASK         (QSFP_RX_CDR_APPLY_MASK << \
346                                          QSFP_RX_CDR_APPLY_SHIFT)
347 #define QSFP_RX_EMP_APPLY_SMASK         (QSFP_RX_EMP_APPLY_MASK << \
348                                          QSFP_RX_EMP_APPLY_SHIFT)
349 #define QSFP_RX_AMP_APPLY_SMASK         (QSFP_RX_AMP_APPLY_MASK << \
350                                          QSFP_RX_AMP_APPLY_SHIFT)
351 #define QSFP_RX_CDR_SMASK               (QSFP_RX_CDR_MASK << QSFP_RX_CDR_SHIFT)
352 #define QSFP_RX_EMP_SMASK               (QSFP_RX_EMP_MASK << QSFP_RX_EMP_SHIFT)
353 #define QSFP_RX_AMP_SMASK               (QSFP_RX_AMP_MASK << QSFP_RX_AMP_SHIFT)
354
355 #define BITMAP_VERSION                  1
356 #define BITMAP_VERSION_SHIFT            44
357 #define BITMAP_VERSION_MASK             0xFUL
358 #define BITMAP_VERSION_SMASK            (BITMAP_VERSION_MASK << \
359                                          BITMAP_VERSION_SHIFT)
360 #define CHECKSUM_SHIFT                  48
361 #define CHECKSUM_MASK                   0xFFFFUL
362 #define CHECKSUM_SMASK                  (CHECKSUM_MASK << CHECKSUM_SHIFT)
363
364 /* platform.c */
365 void get_platform_config(struct hfi1_devdata *dd);
366 void free_platform_config(struct hfi1_devdata *dd);
367 void get_port_type(struct hfi1_pportdata *ppd);
368 int set_qsfp_tx(struct hfi1_pportdata *ppd, int on);
369 void tune_serdes(struct hfi1_pportdata *ppd);
370
371 #endif                  /*__PLATFORM_H*/
This page took 0.047049 seconds and 4 git commands to generate.