Linux Audio

Check our new training course

Loading...
v6.8
  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
 22enum 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
 33enum 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
 50enum 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
 72enum 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
 83enum 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
 95enum 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
102enum 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
109struct platform_config {
110	size_t size;
111	const u8 *data;
112};
113
114struct 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 */
125struct 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 */
146enum 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 */
161enum 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
170enum 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 */
183enum 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
202enum 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 */
222enum 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
232enum 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
241enum 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 */
365void get_platform_config(struct hfi1_devdata *dd);
366void free_platform_config(struct hfi1_devdata *dd);
367void get_port_type(struct hfi1_pportdata *ppd);
368int set_qsfp_tx(struct hfi1_pportdata *ppd, int on);
369void tune_serdes(struct hfi1_pportdata *ppd);
370
371#endif			/*__PLATFORM_H*/
v6.13.7
  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
 22enum 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
 33enum 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
 50enum 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
 72enum 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
 83enum 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
 95enum 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
102enum 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
109struct platform_config {
110	size_t size;
111	const u8 *data;
112};
113
114struct 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 */
125struct 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 */
146enum 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 */
161enum 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
170enum 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 */
183enum 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
202enum 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 */
222enum 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
232enum 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
241enum 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 */
365void get_platform_config(struct hfi1_devdata *dd);
366void free_platform_config(struct hfi1_devdata *dd);
367void get_port_type(struct hfi1_pportdata *ppd);
368int set_qsfp_tx(struct hfi1_pportdata *ppd, int on);
369void tune_serdes(struct hfi1_pportdata *ppd);
370
371#endif			/*__PLATFORM_H*/