162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright(c) 2015, 2016 Intel Corporation.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __PLATFORM_H
762306a36Sopenharmony_ci#define __PLATFORM_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#define METADATA_TABLE_FIELD_START_SHIFT		0
1062306a36Sopenharmony_ci#define METADATA_TABLE_FIELD_START_LEN_BITS		15
1162306a36Sopenharmony_ci#define METADATA_TABLE_FIELD_LEN_SHIFT			16
1262306a36Sopenharmony_ci#define METADATA_TABLE_FIELD_LEN_LEN_BITS		16
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* Header structure */
1562306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_RECORD_IDX_SHIFT			0
1662306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_RECORD_IDX_LEN_BITS		6
1762306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_SHIFT		16
1862306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_LEN_BITS		12
1962306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_TABLE_TYPE_SHIFT			28
2062306a36Sopenharmony_ci#define PLATFORM_CONFIG_HEADER_TABLE_TYPE_LEN_BITS		4
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cienum platform_config_table_type_encoding {
2362306a36Sopenharmony_ci	PLATFORM_CONFIG_TABLE_RESERVED,
2462306a36Sopenharmony_ci	PLATFORM_CONFIG_SYSTEM_TABLE,
2562306a36Sopenharmony_ci	PLATFORM_CONFIG_PORT_TABLE,
2662306a36Sopenharmony_ci	PLATFORM_CONFIG_RX_PRESET_TABLE,
2762306a36Sopenharmony_ci	PLATFORM_CONFIG_TX_PRESET_TABLE,
2862306a36Sopenharmony_ci	PLATFORM_CONFIG_QSFP_ATTEN_TABLE,
2962306a36Sopenharmony_ci	PLATFORM_CONFIG_VARIABLE_SETTINGS_TABLE,
3062306a36Sopenharmony_ci	PLATFORM_CONFIG_TABLE_MAX
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cienum platform_config_system_table_fields {
3462306a36Sopenharmony_ci	SYSTEM_TABLE_RESERVED,
3562306a36Sopenharmony_ci	SYSTEM_TABLE_NODE_STRING,
3662306a36Sopenharmony_ci	SYSTEM_TABLE_SYSTEM_IMAGE_GUID,
3762306a36Sopenharmony_ci	SYSTEM_TABLE_NODE_GUID,
3862306a36Sopenharmony_ci	SYSTEM_TABLE_REVISION,
3962306a36Sopenharmony_ci	SYSTEM_TABLE_VENDOR_OUI,
4062306a36Sopenharmony_ci	SYSTEM_TABLE_META_VERSION,
4162306a36Sopenharmony_ci	SYSTEM_TABLE_DEVICE_ID,
4262306a36Sopenharmony_ci	SYSTEM_TABLE_PARTITION_ENFORCEMENT_CAP,
4362306a36Sopenharmony_ci	SYSTEM_TABLE_QSFP_POWER_CLASS_MAX,
4462306a36Sopenharmony_ci	SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_12G,
4562306a36Sopenharmony_ci	SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_25G,
4662306a36Sopenharmony_ci	SYSTEM_TABLE_VARIABLE_TABLE_ENTRIES_PER_PORT,
4762306a36Sopenharmony_ci	SYSTEM_TABLE_MAX
4862306a36Sopenharmony_ci};
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cienum platform_config_port_table_fields {
5162306a36Sopenharmony_ci	PORT_TABLE_RESERVED,
5262306a36Sopenharmony_ci	PORT_TABLE_PORT_TYPE,
5362306a36Sopenharmony_ci	PORT_TABLE_LOCAL_ATTEN_12G,
5462306a36Sopenharmony_ci	PORT_TABLE_LOCAL_ATTEN_25G,
5562306a36Sopenharmony_ci	PORT_TABLE_LINK_SPEED_SUPPORTED,
5662306a36Sopenharmony_ci	PORT_TABLE_LINK_WIDTH_SUPPORTED,
5762306a36Sopenharmony_ci	PORT_TABLE_AUTO_LANE_SHEDDING_ENABLED,
5862306a36Sopenharmony_ci	PORT_TABLE_EXTERNAL_LOOPBACK_ALLOWED,
5962306a36Sopenharmony_ci	PORT_TABLE_VL_CAP,
6062306a36Sopenharmony_ci	PORT_TABLE_MTU_CAP,
6162306a36Sopenharmony_ci	PORT_TABLE_TX_LANE_ENABLE_MASK,
6262306a36Sopenharmony_ci	PORT_TABLE_LOCAL_MAX_TIMEOUT,
6362306a36Sopenharmony_ci	PORT_TABLE_REMOTE_ATTEN_12G,
6462306a36Sopenharmony_ci	PORT_TABLE_REMOTE_ATTEN_25G,
6562306a36Sopenharmony_ci	PORT_TABLE_TX_PRESET_IDX_ACTIVE_NO_EQ,
6662306a36Sopenharmony_ci	PORT_TABLE_TX_PRESET_IDX_ACTIVE_EQ,
6762306a36Sopenharmony_ci	PORT_TABLE_RX_PRESET_IDX,
6862306a36Sopenharmony_ci	PORT_TABLE_CABLE_REACH_CLASS,
6962306a36Sopenharmony_ci	PORT_TABLE_MAX
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cienum platform_config_rx_preset_table_fields {
7362306a36Sopenharmony_ci	RX_PRESET_TABLE_RESERVED,
7462306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_CDR_APPLY,
7562306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_EMP_APPLY,
7662306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_AMP_APPLY,
7762306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_CDR,
7862306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_EMP,
7962306a36Sopenharmony_ci	RX_PRESET_TABLE_QSFP_RX_AMP,
8062306a36Sopenharmony_ci	RX_PRESET_TABLE_MAX
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cienum platform_config_tx_preset_table_fields {
8462306a36Sopenharmony_ci	TX_PRESET_TABLE_RESERVED,
8562306a36Sopenharmony_ci	TX_PRESET_TABLE_PRECUR,
8662306a36Sopenharmony_ci	TX_PRESET_TABLE_ATTN,
8762306a36Sopenharmony_ci	TX_PRESET_TABLE_POSTCUR,
8862306a36Sopenharmony_ci	TX_PRESET_TABLE_QSFP_TX_CDR_APPLY,
8962306a36Sopenharmony_ci	TX_PRESET_TABLE_QSFP_TX_EQ_APPLY,
9062306a36Sopenharmony_ci	TX_PRESET_TABLE_QSFP_TX_CDR,
9162306a36Sopenharmony_ci	TX_PRESET_TABLE_QSFP_TX_EQ,
9262306a36Sopenharmony_ci	TX_PRESET_TABLE_MAX
9362306a36Sopenharmony_ci};
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cienum platform_config_qsfp_attn_table_fields {
9662306a36Sopenharmony_ci	QSFP_ATTEN_TABLE_RESERVED,
9762306a36Sopenharmony_ci	QSFP_ATTEN_TABLE_TX_PRESET_IDX,
9862306a36Sopenharmony_ci	QSFP_ATTEN_TABLE_RX_PRESET_IDX,
9962306a36Sopenharmony_ci	QSFP_ATTEN_TABLE_MAX
10062306a36Sopenharmony_ci};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_cienum platform_config_variable_settings_table_fields {
10362306a36Sopenharmony_ci	VARIABLE_SETTINGS_TABLE_RESERVED,
10462306a36Sopenharmony_ci	VARIABLE_SETTINGS_TABLE_TX_PRESET_IDX,
10562306a36Sopenharmony_ci	VARIABLE_SETTINGS_TABLE_RX_PRESET_IDX,
10662306a36Sopenharmony_ci	VARIABLE_SETTINGS_TABLE_MAX
10762306a36Sopenharmony_ci};
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_cistruct platform_config {
11062306a36Sopenharmony_ci	size_t size;
11162306a36Sopenharmony_ci	const u8 *data;
11262306a36Sopenharmony_ci};
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_cistruct platform_config_data {
11562306a36Sopenharmony_ci	u32 *table;
11662306a36Sopenharmony_ci	u32 *table_metadata;
11762306a36Sopenharmony_ci	u32 num_table;
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci/*
12162306a36Sopenharmony_ci * This struct acts as a quick reference into the platform_data binary image
12262306a36Sopenharmony_ci * and is populated by parse_platform_config(...) depending on the specific
12362306a36Sopenharmony_ci * META_VERSION
12462306a36Sopenharmony_ci */
12562306a36Sopenharmony_cistruct platform_config_cache {
12662306a36Sopenharmony_ci	u8  cache_valid;
12762306a36Sopenharmony_ci	struct platform_config_data config_tables[PLATFORM_CONFIG_TABLE_MAX];
12862306a36Sopenharmony_ci};
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci/* This section defines default values and encodings for the
13162306a36Sopenharmony_ci * fields defined for each table above
13262306a36Sopenharmony_ci */
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci/*
13562306a36Sopenharmony_ci * =====================================================
13662306a36Sopenharmony_ci *  System table encodings
13762306a36Sopenharmony_ci * =====================================================
13862306a36Sopenharmony_ci */
13962306a36Sopenharmony_ci#define PLATFORM_CONFIG_MAGIC_NUM		0x3d4f5041
14062306a36Sopenharmony_ci#define PLATFORM_CONFIG_MAGIC_NUMBER_LEN	4
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci/*
14362306a36Sopenharmony_ci * These power classes are the same as defined in SFF 8636 spec rev 2.4
14462306a36Sopenharmony_ci * describing byte 129 in table 6-16, except enumerated in a different order
14562306a36Sopenharmony_ci */
14662306a36Sopenharmony_cienum platform_config_qsfp_power_class_encoding {
14762306a36Sopenharmony_ci	QSFP_POWER_CLASS_1 = 1,
14862306a36Sopenharmony_ci	QSFP_POWER_CLASS_2,
14962306a36Sopenharmony_ci	QSFP_POWER_CLASS_3,
15062306a36Sopenharmony_ci	QSFP_POWER_CLASS_4,
15162306a36Sopenharmony_ci	QSFP_POWER_CLASS_5,
15262306a36Sopenharmony_ci	QSFP_POWER_CLASS_6,
15362306a36Sopenharmony_ci	QSFP_POWER_CLASS_7
15462306a36Sopenharmony_ci};
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci/*
15762306a36Sopenharmony_ci * ====================================================
15862306a36Sopenharmony_ci *  Port table encodings
15962306a36Sopenharmony_ci * ====================================================
16062306a36Sopenharmony_ci */
16162306a36Sopenharmony_cienum platform_config_port_type_encoding {
16262306a36Sopenharmony_ci	PORT_TYPE_UNKNOWN,
16362306a36Sopenharmony_ci	PORT_TYPE_DISCONNECTED,
16462306a36Sopenharmony_ci	PORT_TYPE_FIXED,
16562306a36Sopenharmony_ci	PORT_TYPE_VARIABLE,
16662306a36Sopenharmony_ci	PORT_TYPE_QSFP,
16762306a36Sopenharmony_ci	PORT_TYPE_MAX
16862306a36Sopenharmony_ci};
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_cienum platform_config_link_speed_supported_encoding {
17162306a36Sopenharmony_ci	LINK_SPEED_SUPP_12G = 1,
17262306a36Sopenharmony_ci	LINK_SPEED_SUPP_25G,
17362306a36Sopenharmony_ci	LINK_SPEED_SUPP_12G_25G,
17462306a36Sopenharmony_ci	LINK_SPEED_SUPP_MAX
17562306a36Sopenharmony_ci};
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci/*
17862306a36Sopenharmony_ci * This is a subset (not strict) of the link downgrades
17962306a36Sopenharmony_ci * supported. The link downgrades supported are expected
18062306a36Sopenharmony_ci * to be supplied to the driver by another entity such as
18162306a36Sopenharmony_ci * the fabric manager
18262306a36Sopenharmony_ci */
18362306a36Sopenharmony_cienum platform_config_link_width_supported_encoding {
18462306a36Sopenharmony_ci	LINK_WIDTH_SUPP_1X = 1,
18562306a36Sopenharmony_ci	LINK_WIDTH_SUPP_2X,
18662306a36Sopenharmony_ci	LINK_WIDTH_SUPP_2X_1X,
18762306a36Sopenharmony_ci	LINK_WIDTH_SUPP_3X,
18862306a36Sopenharmony_ci	LINK_WIDTH_SUPP_3X_1X,
18962306a36Sopenharmony_ci	LINK_WIDTH_SUPP_3X_2X,
19062306a36Sopenharmony_ci	LINK_WIDTH_SUPP_3X_2X_1X,
19162306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X,
19262306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_1X,
19362306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_2X,
19462306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_2X_1X,
19562306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_3X,
19662306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_3X_1X,
19762306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_3X_2X,
19862306a36Sopenharmony_ci	LINK_WIDTH_SUPP_4X_3X_2X_1X,
19962306a36Sopenharmony_ci	LINK_WIDTH_SUPP_MAX
20062306a36Sopenharmony_ci};
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_cienum platform_config_virtual_lane_capability_encoding {
20362306a36Sopenharmony_ci	VL_CAP_VL0 = 1,
20462306a36Sopenharmony_ci	VL_CAP_VL0_1,
20562306a36Sopenharmony_ci	VL_CAP_VL0_2,
20662306a36Sopenharmony_ci	VL_CAP_VL0_3,
20762306a36Sopenharmony_ci	VL_CAP_VL0_4,
20862306a36Sopenharmony_ci	VL_CAP_VL0_5,
20962306a36Sopenharmony_ci	VL_CAP_VL0_6,
21062306a36Sopenharmony_ci	VL_CAP_VL0_7,
21162306a36Sopenharmony_ci	VL_CAP_VL0_8,
21262306a36Sopenharmony_ci	VL_CAP_VL0_9,
21362306a36Sopenharmony_ci	VL_CAP_VL0_10,
21462306a36Sopenharmony_ci	VL_CAP_VL0_11,
21562306a36Sopenharmony_ci	VL_CAP_VL0_12,
21662306a36Sopenharmony_ci	VL_CAP_VL0_13,
21762306a36Sopenharmony_ci	VL_CAP_VL0_14,
21862306a36Sopenharmony_ci	VL_CAP_MAX
21962306a36Sopenharmony_ci};
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci/* Max MTU */
22262306a36Sopenharmony_cienum platform_config_mtu_capability_encoding {
22362306a36Sopenharmony_ci	MTU_CAP_256   = 1,
22462306a36Sopenharmony_ci	MTU_CAP_512   = 2,
22562306a36Sopenharmony_ci	MTU_CAP_1024  = 3,
22662306a36Sopenharmony_ci	MTU_CAP_2048  = 4,
22762306a36Sopenharmony_ci	MTU_CAP_4096  = 5,
22862306a36Sopenharmony_ci	MTU_CAP_8192  = 6,
22962306a36Sopenharmony_ci	MTU_CAP_10240 = 7
23062306a36Sopenharmony_ci};
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_cienum platform_config_local_max_timeout_encoding {
23362306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_10_MS = 1,
23462306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_100_MS,
23562306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_1_S,
23662306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_10_S,
23762306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_100_S,
23862306a36Sopenharmony_ci	LOCAL_MAX_TIMEOUT_1000_S
23962306a36Sopenharmony_ci};
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_cienum link_tuning_encoding {
24262306a36Sopenharmony_ci	OPA_PASSIVE_TUNING,
24362306a36Sopenharmony_ci	OPA_ACTIVE_TUNING,
24462306a36Sopenharmony_ci	OPA_UNKNOWN_TUNING
24562306a36Sopenharmony_ci};
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ci/*
24862306a36Sopenharmony_ci * Shifts and masks for the link SI tuning values stuffed into the ASIC scratch
24962306a36Sopenharmony_ci * registers for integrated platforms
25062306a36Sopenharmony_ci */
25162306a36Sopenharmony_ci#define PORT0_PORT_TYPE_SHIFT		0
25262306a36Sopenharmony_ci#define PORT0_LOCAL_ATTEN_SHIFT		4
25362306a36Sopenharmony_ci#define PORT0_REMOTE_ATTEN_SHIFT	10
25462306a36Sopenharmony_ci#define PORT0_DEFAULT_ATTEN_SHIFT	32
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci#define PORT1_PORT_TYPE_SHIFT		16
25762306a36Sopenharmony_ci#define PORT1_LOCAL_ATTEN_SHIFT		20
25862306a36Sopenharmony_ci#define PORT1_REMOTE_ATTEN_SHIFT	26
25962306a36Sopenharmony_ci#define PORT1_DEFAULT_ATTEN_SHIFT	40
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci#define PORT0_PORT_TYPE_MASK		0xFUL
26262306a36Sopenharmony_ci#define PORT0_LOCAL_ATTEN_MASK		0x3FUL
26362306a36Sopenharmony_ci#define PORT0_REMOTE_ATTEN_MASK		0x3FUL
26462306a36Sopenharmony_ci#define PORT0_DEFAULT_ATTEN_MASK	0xFFUL
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci#define PORT1_PORT_TYPE_MASK		0xFUL
26762306a36Sopenharmony_ci#define PORT1_LOCAL_ATTEN_MASK		0x3FUL
26862306a36Sopenharmony_ci#define PORT1_REMOTE_ATTEN_MASK		0x3FUL
26962306a36Sopenharmony_ci#define PORT1_DEFAULT_ATTEN_MASK	0xFFUL
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci#define PORT0_PORT_TYPE_SMASK		(PORT0_PORT_TYPE_MASK << \
27262306a36Sopenharmony_ci					 PORT0_PORT_TYPE_SHIFT)
27362306a36Sopenharmony_ci#define PORT0_LOCAL_ATTEN_SMASK		(PORT0_LOCAL_ATTEN_MASK << \
27462306a36Sopenharmony_ci					 PORT0_LOCAL_ATTEN_SHIFT)
27562306a36Sopenharmony_ci#define PORT0_REMOTE_ATTEN_SMASK	(PORT0_REMOTE_ATTEN_MASK << \
27662306a36Sopenharmony_ci					 PORT0_REMOTE_ATTEN_SHIFT)
27762306a36Sopenharmony_ci#define PORT0_DEFAULT_ATTEN_SMASK	(PORT0_DEFAULT_ATTEN_MASK << \
27862306a36Sopenharmony_ci					 PORT0_DEFAULT_ATTEN_SHIFT)
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci#define PORT1_PORT_TYPE_SMASK		(PORT1_PORT_TYPE_MASK << \
28162306a36Sopenharmony_ci					 PORT1_PORT_TYPE_SHIFT)
28262306a36Sopenharmony_ci#define PORT1_LOCAL_ATTEN_SMASK		(PORT1_LOCAL_ATTEN_MASK << \
28362306a36Sopenharmony_ci					 PORT1_LOCAL_ATTEN_SHIFT)
28462306a36Sopenharmony_ci#define PORT1_REMOTE_ATTEN_SMASK	(PORT1_REMOTE_ATTEN_MASK << \
28562306a36Sopenharmony_ci					 PORT1_REMOTE_ATTEN_SHIFT)
28662306a36Sopenharmony_ci#define PORT1_DEFAULT_ATTEN_SMASK	(PORT1_DEFAULT_ATTEN_MASK << \
28762306a36Sopenharmony_ci					 PORT1_DEFAULT_ATTEN_SHIFT)
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci#define QSFP_MAX_POWER_SHIFT		0
29062306a36Sopenharmony_ci#define TX_NO_EQ_SHIFT			4
29162306a36Sopenharmony_ci#define TX_EQ_SHIFT			25
29262306a36Sopenharmony_ci#define RX_SHIFT			46
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci#define QSFP_MAX_POWER_MASK		0xFUL
29562306a36Sopenharmony_ci#define TX_NO_EQ_MASK			0x1FFFFFUL
29662306a36Sopenharmony_ci#define TX_EQ_MASK			0x1FFFFFUL
29762306a36Sopenharmony_ci#define RX_MASK				0xFFFFUL
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci#define QSFP_MAX_POWER_SMASK		(QSFP_MAX_POWER_MASK << \
30062306a36Sopenharmony_ci					 QSFP_MAX_POWER_SHIFT)
30162306a36Sopenharmony_ci#define TX_NO_EQ_SMASK			(TX_NO_EQ_MASK << TX_NO_EQ_SHIFT)
30262306a36Sopenharmony_ci#define TX_EQ_SMASK			(TX_EQ_MASK << TX_EQ_SHIFT)
30362306a36Sopenharmony_ci#define RX_SMASK			(RX_MASK << RX_SHIFT)
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci#define TX_PRECUR_SHIFT			0
30662306a36Sopenharmony_ci#define TX_ATTN_SHIFT			4
30762306a36Sopenharmony_ci#define QSFP_TX_CDR_APPLY_SHIFT		9
30862306a36Sopenharmony_ci#define QSFP_TX_EQ_APPLY_SHIFT		10
30962306a36Sopenharmony_ci#define QSFP_TX_CDR_SHIFT		11
31062306a36Sopenharmony_ci#define QSFP_TX_EQ_SHIFT		12
31162306a36Sopenharmony_ci#define TX_POSTCUR_SHIFT		16
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci#define TX_PRECUR_MASK			0xFUL
31462306a36Sopenharmony_ci#define TX_ATTN_MASK			0x1FUL
31562306a36Sopenharmony_ci#define QSFP_TX_CDR_APPLY_MASK		0x1UL
31662306a36Sopenharmony_ci#define QSFP_TX_EQ_APPLY_MASK		0x1UL
31762306a36Sopenharmony_ci#define QSFP_TX_CDR_MASK		0x1UL
31862306a36Sopenharmony_ci#define QSFP_TX_EQ_MASK			0xFUL
31962306a36Sopenharmony_ci#define TX_POSTCUR_MASK			0x1FUL
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci#define TX_PRECUR_SMASK			(TX_PRECUR_MASK << TX_PRECUR_SHIFT)
32262306a36Sopenharmony_ci#define TX_ATTN_SMASK			(TX_ATTN_MASK << TX_ATTN_SHIFT)
32362306a36Sopenharmony_ci#define QSFP_TX_CDR_APPLY_SMASK		(QSFP_TX_CDR_APPLY_MASK << \
32462306a36Sopenharmony_ci					 QSFP_TX_CDR_APPLY_SHIFT)
32562306a36Sopenharmony_ci#define QSFP_TX_EQ_APPLY_SMASK		(QSFP_TX_EQ_APPLY_MASK << \
32662306a36Sopenharmony_ci					 QSFP_TX_EQ_APPLY_SHIFT)
32762306a36Sopenharmony_ci#define QSFP_TX_CDR_SMASK		(QSFP_TX_CDR_MASK << QSFP_TX_CDR_SHIFT)
32862306a36Sopenharmony_ci#define QSFP_TX_EQ_SMASK		(QSFP_TX_EQ_MASK << QSFP_TX_EQ_SHIFT)
32962306a36Sopenharmony_ci#define TX_POSTCUR_SMASK		(TX_POSTCUR_MASK << TX_POSTCUR_SHIFT)
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci#define QSFP_RX_CDR_APPLY_SHIFT		0
33262306a36Sopenharmony_ci#define QSFP_RX_EMP_APPLY_SHIFT		1
33362306a36Sopenharmony_ci#define QSFP_RX_AMP_APPLY_SHIFT		2
33462306a36Sopenharmony_ci#define QSFP_RX_CDR_SHIFT		3
33562306a36Sopenharmony_ci#define QSFP_RX_EMP_SHIFT		4
33662306a36Sopenharmony_ci#define QSFP_RX_AMP_SHIFT		8
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci#define QSFP_RX_CDR_APPLY_MASK		0x1UL
33962306a36Sopenharmony_ci#define QSFP_RX_EMP_APPLY_MASK		0x1UL
34062306a36Sopenharmony_ci#define QSFP_RX_AMP_APPLY_MASK		0x1UL
34162306a36Sopenharmony_ci#define QSFP_RX_CDR_MASK		0x1UL
34262306a36Sopenharmony_ci#define QSFP_RX_EMP_MASK		0xFUL
34362306a36Sopenharmony_ci#define QSFP_RX_AMP_MASK		0x3UL
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci#define QSFP_RX_CDR_APPLY_SMASK		(QSFP_RX_CDR_APPLY_MASK << \
34662306a36Sopenharmony_ci					 QSFP_RX_CDR_APPLY_SHIFT)
34762306a36Sopenharmony_ci#define QSFP_RX_EMP_APPLY_SMASK		(QSFP_RX_EMP_APPLY_MASK << \
34862306a36Sopenharmony_ci					 QSFP_RX_EMP_APPLY_SHIFT)
34962306a36Sopenharmony_ci#define QSFP_RX_AMP_APPLY_SMASK		(QSFP_RX_AMP_APPLY_MASK << \
35062306a36Sopenharmony_ci					 QSFP_RX_AMP_APPLY_SHIFT)
35162306a36Sopenharmony_ci#define QSFP_RX_CDR_SMASK		(QSFP_RX_CDR_MASK << QSFP_RX_CDR_SHIFT)
35262306a36Sopenharmony_ci#define QSFP_RX_EMP_SMASK		(QSFP_RX_EMP_MASK << QSFP_RX_EMP_SHIFT)
35362306a36Sopenharmony_ci#define QSFP_RX_AMP_SMASK		(QSFP_RX_AMP_MASK << QSFP_RX_AMP_SHIFT)
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci#define BITMAP_VERSION			1
35662306a36Sopenharmony_ci#define BITMAP_VERSION_SHIFT		44
35762306a36Sopenharmony_ci#define BITMAP_VERSION_MASK		0xFUL
35862306a36Sopenharmony_ci#define BITMAP_VERSION_SMASK		(BITMAP_VERSION_MASK << \
35962306a36Sopenharmony_ci					 BITMAP_VERSION_SHIFT)
36062306a36Sopenharmony_ci#define CHECKSUM_SHIFT			48
36162306a36Sopenharmony_ci#define CHECKSUM_MASK			0xFFFFUL
36262306a36Sopenharmony_ci#define CHECKSUM_SMASK			(CHECKSUM_MASK << CHECKSUM_SHIFT)
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ci/* platform.c */
36562306a36Sopenharmony_civoid get_platform_config(struct hfi1_devdata *dd);
36662306a36Sopenharmony_civoid free_platform_config(struct hfi1_devdata *dd);
36762306a36Sopenharmony_civoid get_port_type(struct hfi1_pportdata *ppd);
36862306a36Sopenharmony_ciint set_qsfp_tx(struct hfi1_pportdata *ppd, int on);
36962306a36Sopenharmony_civoid tune_serdes(struct hfi1_pportdata *ppd);
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci#endif			/*__PLATFORM_H*/
372