0001
0002
0003
0004
0005
0006
0007 #define QSFP_DEV 0xA0
0008 #define QSFP_PWR_LAG_MSEC 2000
0009 #define QSFP_MODPRS_LAG_MSEC 20
0010
0011 #define QSFP_MAX_NUM_PAGES 5
0012
0013
0014
0015
0016
0017 #define QSFP_HFI0_I2CCLK BIT(0)
0018 #define QSFP_HFI0_I2CDAT BIT(1)
0019 #define QSFP_HFI0_RESET_N BIT(2)
0020 #define QSFP_HFI0_INT_N BIT(3)
0021 #define QSFP_HFI0_MODPRST_N BIT(4)
0022
0023
0024 #define QSFP_PAGESIZE 256
0025
0026 #define QSFP_RW_BOUNDARY 128
0027
0028
0029 #define __QSFP_OFFSET_SIZE 1
0030 #define QSFP_OFFSET_SIZE (__QSFP_OFFSET_SIZE << 8)
0031
0032
0033
0034
0035 #define QSFP_MONITOR_VAL_START 22
0036 #define QSFP_MONITOR_VAL_END 81
0037 #define QSFP_MONITOR_RANGE (QSFP_MONITOR_VAL_END - QSFP_MONITOR_VAL_START + 1)
0038 #define QSFP_TX_CTRL_BYTE_OFFS 86
0039 #define QSFP_PWR_CTRL_BYTE_OFFS 93
0040 #define QSFP_CDR_CTRL_BYTE_OFFS 98
0041
0042 #define QSFP_PAGE_SELECT_BYTE_OFFS 127
0043
0044 #define QSFP_MOD_ID_OFFS 128
0045
0046
0047
0048
0049
0050 #define QSFP_MOD_PWR_OFFS 129
0051
0052
0053
0054
0055 #define QSFP_NOM_BIT_RATE_100_OFFS 140
0056
0057
0058
0059 #define QSFP_MOD_LEN_OFFS 146
0060
0061
0062
0063
0064 #define QSFP_MOD_TECH_OFFS 147
0065 extern const char *const hfi1_qsfp_devtech[16];
0066
0067 #define QSFP_IS_ACTIVE(tech) ((0xA2FF >> ((tech) >> 4)) & 1)
0068
0069 #define QSFP_IS_ACTIVE_FAR(tech) ((0x32FF >> ((tech) >> 4)) & 1)
0070
0071 #define QSFP_HAS_ATTEN(tech) ((0x4D00 >> ((tech) >> 4)) & 1)
0072
0073 #define QSFP_IS_CU(tech) ((0xED00 >> ((tech) >> 4)) & 1)
0074 #define QSFP_TECH_1490 9
0075
0076 #define QSFP_OUI(oui) (((unsigned)oui[0] << 16) | ((unsigned)oui[1] << 8) | \
0077 oui[2])
0078 #define QSFP_OUI_AMPHENOL 0x415048
0079 #define QSFP_OUI_FINISAR 0x009065
0080 #define QSFP_OUI_GORE 0x002177
0081
0082
0083 #define QSFP_VEND_OFFS 148
0084 #define QSFP_VEND_LEN 16
0085
0086 #define QSFP_IBXCV_OFFS 164
0087
0088 #define QSFP_VOUI_OFFS 165
0089 #define QSFP_VOUI_LEN 3
0090
0091 #define QSFP_PN_OFFS 168
0092 #define QSFP_PN_LEN 16
0093
0094 #define QSFP_REV_OFFS 184
0095 #define QSFP_REV_LEN 2
0096
0097
0098
0099
0100
0101 #define QSFP_ATTEN_OFFS 186
0102 #define QSFP_ATTEN_LEN 2
0103
0104
0105
0106
0107
0108 #define QSFP_CU_ATTEN_7G_OFFS 188
0109 #define QSFP_CU_ATTEN_12G_OFFS 189
0110
0111
0112 #define QSFP_CC_OFFS 191
0113 #define QSFP_EQ_INFO_OFFS 193
0114 #define QSFP_CDR_INFO_OFFS 194
0115
0116 #define QSFP_SN_OFFS 196
0117 #define QSFP_SN_LEN 16
0118
0119 #define QSFP_DATE_OFFS 212
0120 #define QSFP_DATE_LEN 6
0121
0122 #define QSFP_LOT_OFFS 218
0123 #define QSFP_LOT_LEN 2
0124
0125
0126 #define QSFP_NOM_BIT_RATE_250_OFFS 222
0127
0128 #define QSFP_CC_EXT_OFFS 223
0129
0130
0131
0132
0133 #define QSFP_DATA_NOT_READY 0x01
0134
0135 #define QSFP_HIGH_TEMP_ALARM 0x80
0136 #define QSFP_LOW_TEMP_ALARM 0x40
0137 #define QSFP_HIGH_TEMP_WARNING 0x20
0138 #define QSFP_LOW_TEMP_WARNING 0x10
0139
0140 #define QSFP_HIGH_VCC_ALARM 0x80
0141 #define QSFP_LOW_VCC_ALARM 0x40
0142 #define QSFP_HIGH_VCC_WARNING 0x20
0143 #define QSFP_LOW_VCC_WARNING 0x10
0144
0145 #define QSFP_HIGH_POWER_ALARM 0x88
0146 #define QSFP_LOW_POWER_ALARM 0x44
0147 #define QSFP_HIGH_POWER_WARNING 0x22
0148 #define QSFP_LOW_POWER_WARNING 0x11
0149
0150 #define QSFP_HIGH_BIAS_ALARM 0x88
0151 #define QSFP_LOW_BIAS_ALARM 0x44
0152 #define QSFP_HIGH_BIAS_WARNING 0x22
0153 #define QSFP_LOW_BIAS_WARNING 0x11
0154
0155 #define QSFP_ATTEN_SDR(attenarray) (attenarray[0])
0156 #define QSFP_ATTEN_DDR(attenarray) (attenarray[1])
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 struct qsfp_data {
0170
0171 struct hfi1_pportdata *ppd;
0172 struct work_struct qsfp_work;
0173 u8 cache[QSFP_MAX_NUM_PAGES * 128];
0174
0175 spinlock_t qsfp_lock;
0176 u8 check_interrupt_flags;
0177 u8 reset_needed;
0178 u8 limiting_active;
0179 u8 cache_valid;
0180 u8 cache_refresh_required;
0181 };
0182
0183 int refresh_qsfp_cache(struct hfi1_pportdata *ppd,
0184 struct qsfp_data *cp);
0185 int get_qsfp_power_class(u8 power_byte);
0186 int qsfp_mod_present(struct hfi1_pportdata *ppd);
0187 int get_cable_info(struct hfi1_devdata *dd, u32 port_num, u32 addr,
0188 u32 len, u8 *data);
0189
0190 int i2c_write(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
0191 int offset, void *bp, int len);
0192 int i2c_read(struct hfi1_pportdata *ppd, u32 target, int i2c_addr,
0193 int offset, void *bp, int len);
0194 int qsfp_write(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
0195 int len);
0196 int qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
0197 int len);
0198 int one_qsfp_write(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
0199 int len);
0200 int one_qsfp_read(struct hfi1_pportdata *ppd, u32 target, int addr, void *bp,
0201 int len);
0202 struct hfi1_asic_data;
0203 int set_up_i2c(struct hfi1_devdata *dd, struct hfi1_asic_data *ad);
0204 void clean_up_i2c(struct hfi1_devdata *dd, struct hfi1_asic_data *ad);