1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright(c) 2015, 2016 Intel Corporation. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This file is provided under a dual BSD/GPLv2 license. When using or 5*4882a593Smuzhiyun * redistributing this file, you may do so under either license. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * GPL LICENSE SUMMARY 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 10*4882a593Smuzhiyun * it under the terms of version 2 of the GNU General Public License as 11*4882a593Smuzhiyun * published by the Free Software Foundation. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but 14*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 15*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16*4882a593Smuzhiyun * General Public License for more details. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * BSD LICENSE 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 21*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 22*4882a593Smuzhiyun * are met: 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * - Redistributions of source code must retain the above copyright 25*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 26*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above copyright 27*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 28*4882a593Smuzhiyun * the documentation and/or other materials provided with the 29*4882a593Smuzhiyun * distribution. 30*4882a593Smuzhiyun * - Neither the name of Intel Corporation nor the names of its 31*4882a593Smuzhiyun * contributors may be used to endorse or promote products derived 32*4882a593Smuzhiyun * from this software without specific prior written permission. 33*4882a593Smuzhiyun * 34*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35*4882a593Smuzhiyun * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36*4882a593Smuzhiyun * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37*4882a593Smuzhiyun * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38*4882a593Smuzhiyun * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39*4882a593Smuzhiyun * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40*4882a593Smuzhiyun * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41*4882a593Smuzhiyun * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42*4882a593Smuzhiyun * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44*4882a593Smuzhiyun * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45*4882a593Smuzhiyun * 46*4882a593Smuzhiyun */ 47*4882a593Smuzhiyun #ifndef __PLATFORM_H 48*4882a593Smuzhiyun #define __PLATFORM_H 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define METADATA_TABLE_FIELD_START_SHIFT 0 51*4882a593Smuzhiyun #define METADATA_TABLE_FIELD_START_LEN_BITS 15 52*4882a593Smuzhiyun #define METADATA_TABLE_FIELD_LEN_SHIFT 16 53*4882a593Smuzhiyun #define METADATA_TABLE_FIELD_LEN_LEN_BITS 16 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* Header structure */ 56*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_RECORD_IDX_SHIFT 0 57*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_RECORD_IDX_LEN_BITS 6 58*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_SHIFT 16 59*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_TABLE_LENGTH_LEN_BITS 12 60*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_TABLE_TYPE_SHIFT 28 61*4882a593Smuzhiyun #define PLATFORM_CONFIG_HEADER_TABLE_TYPE_LEN_BITS 4 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun enum platform_config_table_type_encoding { 64*4882a593Smuzhiyun PLATFORM_CONFIG_TABLE_RESERVED, 65*4882a593Smuzhiyun PLATFORM_CONFIG_SYSTEM_TABLE, 66*4882a593Smuzhiyun PLATFORM_CONFIG_PORT_TABLE, 67*4882a593Smuzhiyun PLATFORM_CONFIG_RX_PRESET_TABLE, 68*4882a593Smuzhiyun PLATFORM_CONFIG_TX_PRESET_TABLE, 69*4882a593Smuzhiyun PLATFORM_CONFIG_QSFP_ATTEN_TABLE, 70*4882a593Smuzhiyun PLATFORM_CONFIG_VARIABLE_SETTINGS_TABLE, 71*4882a593Smuzhiyun PLATFORM_CONFIG_TABLE_MAX 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun enum platform_config_system_table_fields { 75*4882a593Smuzhiyun SYSTEM_TABLE_RESERVED, 76*4882a593Smuzhiyun SYSTEM_TABLE_NODE_STRING, 77*4882a593Smuzhiyun SYSTEM_TABLE_SYSTEM_IMAGE_GUID, 78*4882a593Smuzhiyun SYSTEM_TABLE_NODE_GUID, 79*4882a593Smuzhiyun SYSTEM_TABLE_REVISION, 80*4882a593Smuzhiyun SYSTEM_TABLE_VENDOR_OUI, 81*4882a593Smuzhiyun SYSTEM_TABLE_META_VERSION, 82*4882a593Smuzhiyun SYSTEM_TABLE_DEVICE_ID, 83*4882a593Smuzhiyun SYSTEM_TABLE_PARTITION_ENFORCEMENT_CAP, 84*4882a593Smuzhiyun SYSTEM_TABLE_QSFP_POWER_CLASS_MAX, 85*4882a593Smuzhiyun SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_12G, 86*4882a593Smuzhiyun SYSTEM_TABLE_QSFP_ATTENUATION_DEFAULT_25G, 87*4882a593Smuzhiyun SYSTEM_TABLE_VARIABLE_TABLE_ENTRIES_PER_PORT, 88*4882a593Smuzhiyun SYSTEM_TABLE_MAX 89*4882a593Smuzhiyun }; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun enum platform_config_port_table_fields { 92*4882a593Smuzhiyun PORT_TABLE_RESERVED, 93*4882a593Smuzhiyun PORT_TABLE_PORT_TYPE, 94*4882a593Smuzhiyun PORT_TABLE_LOCAL_ATTEN_12G, 95*4882a593Smuzhiyun PORT_TABLE_LOCAL_ATTEN_25G, 96*4882a593Smuzhiyun PORT_TABLE_LINK_SPEED_SUPPORTED, 97*4882a593Smuzhiyun PORT_TABLE_LINK_WIDTH_SUPPORTED, 98*4882a593Smuzhiyun PORT_TABLE_AUTO_LANE_SHEDDING_ENABLED, 99*4882a593Smuzhiyun PORT_TABLE_EXTERNAL_LOOPBACK_ALLOWED, 100*4882a593Smuzhiyun PORT_TABLE_VL_CAP, 101*4882a593Smuzhiyun PORT_TABLE_MTU_CAP, 102*4882a593Smuzhiyun PORT_TABLE_TX_LANE_ENABLE_MASK, 103*4882a593Smuzhiyun PORT_TABLE_LOCAL_MAX_TIMEOUT, 104*4882a593Smuzhiyun PORT_TABLE_REMOTE_ATTEN_12G, 105*4882a593Smuzhiyun PORT_TABLE_REMOTE_ATTEN_25G, 106*4882a593Smuzhiyun PORT_TABLE_TX_PRESET_IDX_ACTIVE_NO_EQ, 107*4882a593Smuzhiyun PORT_TABLE_TX_PRESET_IDX_ACTIVE_EQ, 108*4882a593Smuzhiyun PORT_TABLE_RX_PRESET_IDX, 109*4882a593Smuzhiyun PORT_TABLE_CABLE_REACH_CLASS, 110*4882a593Smuzhiyun PORT_TABLE_MAX 111*4882a593Smuzhiyun }; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun enum platform_config_rx_preset_table_fields { 114*4882a593Smuzhiyun RX_PRESET_TABLE_RESERVED, 115*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_CDR_APPLY, 116*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_EMP_APPLY, 117*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_AMP_APPLY, 118*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_CDR, 119*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_EMP, 120*4882a593Smuzhiyun RX_PRESET_TABLE_QSFP_RX_AMP, 121*4882a593Smuzhiyun RX_PRESET_TABLE_MAX 122*4882a593Smuzhiyun }; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun enum platform_config_tx_preset_table_fields { 125*4882a593Smuzhiyun TX_PRESET_TABLE_RESERVED, 126*4882a593Smuzhiyun TX_PRESET_TABLE_PRECUR, 127*4882a593Smuzhiyun TX_PRESET_TABLE_ATTN, 128*4882a593Smuzhiyun TX_PRESET_TABLE_POSTCUR, 129*4882a593Smuzhiyun TX_PRESET_TABLE_QSFP_TX_CDR_APPLY, 130*4882a593Smuzhiyun TX_PRESET_TABLE_QSFP_TX_EQ_APPLY, 131*4882a593Smuzhiyun TX_PRESET_TABLE_QSFP_TX_CDR, 132*4882a593Smuzhiyun TX_PRESET_TABLE_QSFP_TX_EQ, 133*4882a593Smuzhiyun TX_PRESET_TABLE_MAX 134*4882a593Smuzhiyun }; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun enum platform_config_qsfp_attn_table_fields { 137*4882a593Smuzhiyun QSFP_ATTEN_TABLE_RESERVED, 138*4882a593Smuzhiyun QSFP_ATTEN_TABLE_TX_PRESET_IDX, 139*4882a593Smuzhiyun QSFP_ATTEN_TABLE_RX_PRESET_IDX, 140*4882a593Smuzhiyun QSFP_ATTEN_TABLE_MAX 141*4882a593Smuzhiyun }; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun enum platform_config_variable_settings_table_fields { 144*4882a593Smuzhiyun VARIABLE_SETTINGS_TABLE_RESERVED, 145*4882a593Smuzhiyun VARIABLE_SETTINGS_TABLE_TX_PRESET_IDX, 146*4882a593Smuzhiyun VARIABLE_SETTINGS_TABLE_RX_PRESET_IDX, 147*4882a593Smuzhiyun VARIABLE_SETTINGS_TABLE_MAX 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun struct platform_config { 151*4882a593Smuzhiyun size_t size; 152*4882a593Smuzhiyun const u8 *data; 153*4882a593Smuzhiyun }; 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun struct platform_config_data { 156*4882a593Smuzhiyun u32 *table; 157*4882a593Smuzhiyun u32 *table_metadata; 158*4882a593Smuzhiyun u32 num_table; 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun /* 162*4882a593Smuzhiyun * This struct acts as a quick reference into the platform_data binary image 163*4882a593Smuzhiyun * and is populated by parse_platform_config(...) depending on the specific 164*4882a593Smuzhiyun * META_VERSION 165*4882a593Smuzhiyun */ 166*4882a593Smuzhiyun struct platform_config_cache { 167*4882a593Smuzhiyun u8 cache_valid; 168*4882a593Smuzhiyun struct platform_config_data config_tables[PLATFORM_CONFIG_TABLE_MAX]; 169*4882a593Smuzhiyun }; 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun /* This section defines default values and encodings for the 172*4882a593Smuzhiyun * fields defined for each table above 173*4882a593Smuzhiyun */ 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* 176*4882a593Smuzhiyun * ===================================================== 177*4882a593Smuzhiyun * System table encodings 178*4882a593Smuzhiyun * ===================================================== 179*4882a593Smuzhiyun */ 180*4882a593Smuzhiyun #define PLATFORM_CONFIG_MAGIC_NUM 0x3d4f5041 181*4882a593Smuzhiyun #define PLATFORM_CONFIG_MAGIC_NUMBER_LEN 4 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* 184*4882a593Smuzhiyun * These power classes are the same as defined in SFF 8636 spec rev 2.4 185*4882a593Smuzhiyun * describing byte 129 in table 6-16, except enumerated in a different order 186*4882a593Smuzhiyun */ 187*4882a593Smuzhiyun enum platform_config_qsfp_power_class_encoding { 188*4882a593Smuzhiyun QSFP_POWER_CLASS_1 = 1, 189*4882a593Smuzhiyun QSFP_POWER_CLASS_2, 190*4882a593Smuzhiyun QSFP_POWER_CLASS_3, 191*4882a593Smuzhiyun QSFP_POWER_CLASS_4, 192*4882a593Smuzhiyun QSFP_POWER_CLASS_5, 193*4882a593Smuzhiyun QSFP_POWER_CLASS_6, 194*4882a593Smuzhiyun QSFP_POWER_CLASS_7 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* 198*4882a593Smuzhiyun * ==================================================== 199*4882a593Smuzhiyun * Port table encodings 200*4882a593Smuzhiyun * ==================================================== 201*4882a593Smuzhiyun */ 202*4882a593Smuzhiyun enum platform_config_port_type_encoding { 203*4882a593Smuzhiyun PORT_TYPE_UNKNOWN, 204*4882a593Smuzhiyun PORT_TYPE_DISCONNECTED, 205*4882a593Smuzhiyun PORT_TYPE_FIXED, 206*4882a593Smuzhiyun PORT_TYPE_VARIABLE, 207*4882a593Smuzhiyun PORT_TYPE_QSFP, 208*4882a593Smuzhiyun PORT_TYPE_MAX 209*4882a593Smuzhiyun }; 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun enum platform_config_link_speed_supported_encoding { 212*4882a593Smuzhiyun LINK_SPEED_SUPP_12G = 1, 213*4882a593Smuzhiyun LINK_SPEED_SUPP_25G, 214*4882a593Smuzhiyun LINK_SPEED_SUPP_12G_25G, 215*4882a593Smuzhiyun LINK_SPEED_SUPP_MAX 216*4882a593Smuzhiyun }; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun /* 219*4882a593Smuzhiyun * This is a subset (not strict) of the link downgrades 220*4882a593Smuzhiyun * supported. The link downgrades supported are expected 221*4882a593Smuzhiyun * to be supplied to the driver by another entity such as 222*4882a593Smuzhiyun * the fabric manager 223*4882a593Smuzhiyun */ 224*4882a593Smuzhiyun enum platform_config_link_width_supported_encoding { 225*4882a593Smuzhiyun LINK_WIDTH_SUPP_1X = 1, 226*4882a593Smuzhiyun LINK_WIDTH_SUPP_2X, 227*4882a593Smuzhiyun LINK_WIDTH_SUPP_2X_1X, 228*4882a593Smuzhiyun LINK_WIDTH_SUPP_3X, 229*4882a593Smuzhiyun LINK_WIDTH_SUPP_3X_1X, 230*4882a593Smuzhiyun LINK_WIDTH_SUPP_3X_2X, 231*4882a593Smuzhiyun LINK_WIDTH_SUPP_3X_2X_1X, 232*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X, 233*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_1X, 234*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_2X, 235*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_2X_1X, 236*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_3X, 237*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_3X_1X, 238*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_3X_2X, 239*4882a593Smuzhiyun LINK_WIDTH_SUPP_4X_3X_2X_1X, 240*4882a593Smuzhiyun LINK_WIDTH_SUPP_MAX 241*4882a593Smuzhiyun }; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun enum platform_config_virtual_lane_capability_encoding { 244*4882a593Smuzhiyun VL_CAP_VL0 = 1, 245*4882a593Smuzhiyun VL_CAP_VL0_1, 246*4882a593Smuzhiyun VL_CAP_VL0_2, 247*4882a593Smuzhiyun VL_CAP_VL0_3, 248*4882a593Smuzhiyun VL_CAP_VL0_4, 249*4882a593Smuzhiyun VL_CAP_VL0_5, 250*4882a593Smuzhiyun VL_CAP_VL0_6, 251*4882a593Smuzhiyun VL_CAP_VL0_7, 252*4882a593Smuzhiyun VL_CAP_VL0_8, 253*4882a593Smuzhiyun VL_CAP_VL0_9, 254*4882a593Smuzhiyun VL_CAP_VL0_10, 255*4882a593Smuzhiyun VL_CAP_VL0_11, 256*4882a593Smuzhiyun VL_CAP_VL0_12, 257*4882a593Smuzhiyun VL_CAP_VL0_13, 258*4882a593Smuzhiyun VL_CAP_VL0_14, 259*4882a593Smuzhiyun VL_CAP_MAX 260*4882a593Smuzhiyun }; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun /* Max MTU */ 263*4882a593Smuzhiyun enum platform_config_mtu_capability_encoding { 264*4882a593Smuzhiyun MTU_CAP_256 = 1, 265*4882a593Smuzhiyun MTU_CAP_512 = 2, 266*4882a593Smuzhiyun MTU_CAP_1024 = 3, 267*4882a593Smuzhiyun MTU_CAP_2048 = 4, 268*4882a593Smuzhiyun MTU_CAP_4096 = 5, 269*4882a593Smuzhiyun MTU_CAP_8192 = 6, 270*4882a593Smuzhiyun MTU_CAP_10240 = 7 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun enum platform_config_local_max_timeout_encoding { 274*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_10_MS = 1, 275*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_100_MS, 276*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_1_S, 277*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_10_S, 278*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_100_S, 279*4882a593Smuzhiyun LOCAL_MAX_TIMEOUT_1000_S 280*4882a593Smuzhiyun }; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun enum link_tuning_encoding { 283*4882a593Smuzhiyun OPA_PASSIVE_TUNING, 284*4882a593Smuzhiyun OPA_ACTIVE_TUNING, 285*4882a593Smuzhiyun OPA_UNKNOWN_TUNING 286*4882a593Smuzhiyun }; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* 289*4882a593Smuzhiyun * Shifts and masks for the link SI tuning values stuffed into the ASIC scratch 290*4882a593Smuzhiyun * registers for integrated platforms 291*4882a593Smuzhiyun */ 292*4882a593Smuzhiyun #define PORT0_PORT_TYPE_SHIFT 0 293*4882a593Smuzhiyun #define PORT0_LOCAL_ATTEN_SHIFT 4 294*4882a593Smuzhiyun #define PORT0_REMOTE_ATTEN_SHIFT 10 295*4882a593Smuzhiyun #define PORT0_DEFAULT_ATTEN_SHIFT 32 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun #define PORT1_PORT_TYPE_SHIFT 16 298*4882a593Smuzhiyun #define PORT1_LOCAL_ATTEN_SHIFT 20 299*4882a593Smuzhiyun #define PORT1_REMOTE_ATTEN_SHIFT 26 300*4882a593Smuzhiyun #define PORT1_DEFAULT_ATTEN_SHIFT 40 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun #define PORT0_PORT_TYPE_MASK 0xFUL 303*4882a593Smuzhiyun #define PORT0_LOCAL_ATTEN_MASK 0x3FUL 304*4882a593Smuzhiyun #define PORT0_REMOTE_ATTEN_MASK 0x3FUL 305*4882a593Smuzhiyun #define PORT0_DEFAULT_ATTEN_MASK 0xFFUL 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun #define PORT1_PORT_TYPE_MASK 0xFUL 308*4882a593Smuzhiyun #define PORT1_LOCAL_ATTEN_MASK 0x3FUL 309*4882a593Smuzhiyun #define PORT1_REMOTE_ATTEN_MASK 0x3FUL 310*4882a593Smuzhiyun #define PORT1_DEFAULT_ATTEN_MASK 0xFFUL 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun #define PORT0_PORT_TYPE_SMASK (PORT0_PORT_TYPE_MASK << \ 313*4882a593Smuzhiyun PORT0_PORT_TYPE_SHIFT) 314*4882a593Smuzhiyun #define PORT0_LOCAL_ATTEN_SMASK (PORT0_LOCAL_ATTEN_MASK << \ 315*4882a593Smuzhiyun PORT0_LOCAL_ATTEN_SHIFT) 316*4882a593Smuzhiyun #define PORT0_REMOTE_ATTEN_SMASK (PORT0_REMOTE_ATTEN_MASK << \ 317*4882a593Smuzhiyun PORT0_REMOTE_ATTEN_SHIFT) 318*4882a593Smuzhiyun #define PORT0_DEFAULT_ATTEN_SMASK (PORT0_DEFAULT_ATTEN_MASK << \ 319*4882a593Smuzhiyun PORT0_DEFAULT_ATTEN_SHIFT) 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun #define PORT1_PORT_TYPE_SMASK (PORT1_PORT_TYPE_MASK << \ 322*4882a593Smuzhiyun PORT1_PORT_TYPE_SHIFT) 323*4882a593Smuzhiyun #define PORT1_LOCAL_ATTEN_SMASK (PORT1_LOCAL_ATTEN_MASK << \ 324*4882a593Smuzhiyun PORT1_LOCAL_ATTEN_SHIFT) 325*4882a593Smuzhiyun #define PORT1_REMOTE_ATTEN_SMASK (PORT1_REMOTE_ATTEN_MASK << \ 326*4882a593Smuzhiyun PORT1_REMOTE_ATTEN_SHIFT) 327*4882a593Smuzhiyun #define PORT1_DEFAULT_ATTEN_SMASK (PORT1_DEFAULT_ATTEN_MASK << \ 328*4882a593Smuzhiyun PORT1_DEFAULT_ATTEN_SHIFT) 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun #define QSFP_MAX_POWER_SHIFT 0 331*4882a593Smuzhiyun #define TX_NO_EQ_SHIFT 4 332*4882a593Smuzhiyun #define TX_EQ_SHIFT 25 333*4882a593Smuzhiyun #define RX_SHIFT 46 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun #define QSFP_MAX_POWER_MASK 0xFUL 336*4882a593Smuzhiyun #define TX_NO_EQ_MASK 0x1FFFFFUL 337*4882a593Smuzhiyun #define TX_EQ_MASK 0x1FFFFFUL 338*4882a593Smuzhiyun #define RX_MASK 0xFFFFUL 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #define QSFP_MAX_POWER_SMASK (QSFP_MAX_POWER_MASK << \ 341*4882a593Smuzhiyun QSFP_MAX_POWER_SHIFT) 342*4882a593Smuzhiyun #define TX_NO_EQ_SMASK (TX_NO_EQ_MASK << TX_NO_EQ_SHIFT) 343*4882a593Smuzhiyun #define TX_EQ_SMASK (TX_EQ_MASK << TX_EQ_SHIFT) 344*4882a593Smuzhiyun #define RX_SMASK (RX_MASK << RX_SHIFT) 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun #define TX_PRECUR_SHIFT 0 347*4882a593Smuzhiyun #define TX_ATTN_SHIFT 4 348*4882a593Smuzhiyun #define QSFP_TX_CDR_APPLY_SHIFT 9 349*4882a593Smuzhiyun #define QSFP_TX_EQ_APPLY_SHIFT 10 350*4882a593Smuzhiyun #define QSFP_TX_CDR_SHIFT 11 351*4882a593Smuzhiyun #define QSFP_TX_EQ_SHIFT 12 352*4882a593Smuzhiyun #define TX_POSTCUR_SHIFT 16 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun #define TX_PRECUR_MASK 0xFUL 355*4882a593Smuzhiyun #define TX_ATTN_MASK 0x1FUL 356*4882a593Smuzhiyun #define QSFP_TX_CDR_APPLY_MASK 0x1UL 357*4882a593Smuzhiyun #define QSFP_TX_EQ_APPLY_MASK 0x1UL 358*4882a593Smuzhiyun #define QSFP_TX_CDR_MASK 0x1UL 359*4882a593Smuzhiyun #define QSFP_TX_EQ_MASK 0xFUL 360*4882a593Smuzhiyun #define TX_POSTCUR_MASK 0x1FUL 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun #define TX_PRECUR_SMASK (TX_PRECUR_MASK << TX_PRECUR_SHIFT) 363*4882a593Smuzhiyun #define TX_ATTN_SMASK (TX_ATTN_MASK << TX_ATTN_SHIFT) 364*4882a593Smuzhiyun #define QSFP_TX_CDR_APPLY_SMASK (QSFP_TX_CDR_APPLY_MASK << \ 365*4882a593Smuzhiyun QSFP_TX_CDR_APPLY_SHIFT) 366*4882a593Smuzhiyun #define QSFP_TX_EQ_APPLY_SMASK (QSFP_TX_EQ_APPLY_MASK << \ 367*4882a593Smuzhiyun QSFP_TX_EQ_APPLY_SHIFT) 368*4882a593Smuzhiyun #define QSFP_TX_CDR_SMASK (QSFP_TX_CDR_MASK << QSFP_TX_CDR_SHIFT) 369*4882a593Smuzhiyun #define QSFP_TX_EQ_SMASK (QSFP_TX_EQ_MASK << QSFP_TX_EQ_SHIFT) 370*4882a593Smuzhiyun #define TX_POSTCUR_SMASK (TX_POSTCUR_MASK << TX_POSTCUR_SHIFT) 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun #define QSFP_RX_CDR_APPLY_SHIFT 0 373*4882a593Smuzhiyun #define QSFP_RX_EMP_APPLY_SHIFT 1 374*4882a593Smuzhiyun #define QSFP_RX_AMP_APPLY_SHIFT 2 375*4882a593Smuzhiyun #define QSFP_RX_CDR_SHIFT 3 376*4882a593Smuzhiyun #define QSFP_RX_EMP_SHIFT 4 377*4882a593Smuzhiyun #define QSFP_RX_AMP_SHIFT 8 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun #define QSFP_RX_CDR_APPLY_MASK 0x1UL 380*4882a593Smuzhiyun #define QSFP_RX_EMP_APPLY_MASK 0x1UL 381*4882a593Smuzhiyun #define QSFP_RX_AMP_APPLY_MASK 0x1UL 382*4882a593Smuzhiyun #define QSFP_RX_CDR_MASK 0x1UL 383*4882a593Smuzhiyun #define QSFP_RX_EMP_MASK 0xFUL 384*4882a593Smuzhiyun #define QSFP_RX_AMP_MASK 0x3UL 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #define QSFP_RX_CDR_APPLY_SMASK (QSFP_RX_CDR_APPLY_MASK << \ 387*4882a593Smuzhiyun QSFP_RX_CDR_APPLY_SHIFT) 388*4882a593Smuzhiyun #define QSFP_RX_EMP_APPLY_SMASK (QSFP_RX_EMP_APPLY_MASK << \ 389*4882a593Smuzhiyun QSFP_RX_EMP_APPLY_SHIFT) 390*4882a593Smuzhiyun #define QSFP_RX_AMP_APPLY_SMASK (QSFP_RX_AMP_APPLY_MASK << \ 391*4882a593Smuzhiyun QSFP_RX_AMP_APPLY_SHIFT) 392*4882a593Smuzhiyun #define QSFP_RX_CDR_SMASK (QSFP_RX_CDR_MASK << QSFP_RX_CDR_SHIFT) 393*4882a593Smuzhiyun #define QSFP_RX_EMP_SMASK (QSFP_RX_EMP_MASK << QSFP_RX_EMP_SHIFT) 394*4882a593Smuzhiyun #define QSFP_RX_AMP_SMASK (QSFP_RX_AMP_MASK << QSFP_RX_AMP_SHIFT) 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define BITMAP_VERSION 1 397*4882a593Smuzhiyun #define BITMAP_VERSION_SHIFT 44 398*4882a593Smuzhiyun #define BITMAP_VERSION_MASK 0xFUL 399*4882a593Smuzhiyun #define BITMAP_VERSION_SMASK (BITMAP_VERSION_MASK << \ 400*4882a593Smuzhiyun BITMAP_VERSION_SHIFT) 401*4882a593Smuzhiyun #define CHECKSUM_SHIFT 48 402*4882a593Smuzhiyun #define CHECKSUM_MASK 0xFFFFUL 403*4882a593Smuzhiyun #define CHECKSUM_SMASK (CHECKSUM_MASK << CHECKSUM_SHIFT) 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun /* platform.c */ 406*4882a593Smuzhiyun void get_platform_config(struct hfi1_devdata *dd); 407*4882a593Smuzhiyun void free_platform_config(struct hfi1_devdata *dd); 408*4882a593Smuzhiyun void get_port_type(struct hfi1_pportdata *ppd); 409*4882a593Smuzhiyun int set_qsfp_tx(struct hfi1_pportdata *ppd, int on); 410*4882a593Smuzhiyun void tune_serdes(struct hfi1_pportdata *ppd); 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun #endif /*__PLATFORM_H*/ 413