linux/drivers/infiniband/hw/hfi1/platform.h
<<
>>
Prefs
   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*/
 372