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