0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __CGX_FW_INTF_H__
0009 #define __CGX_FW_INTF_H__
0010
0011 #include <linux/bitops.h>
0012 #include <linux/bitfield.h>
0013
0014 #define CGX_FIRMWARE_MAJOR_VER 1
0015 #define CGX_FIRMWARE_MINOR_VER 0
0016
0017 #define CGX_EVENT_ACK 1UL
0018
0019
0020 enum cgx_error_type {
0021 CGX_ERR_NONE,
0022 CGX_ERR_LMAC_NOT_ENABLED,
0023 CGX_ERR_LMAC_MODE_INVALID,
0024 CGX_ERR_REQUEST_ID_INVALID,
0025 CGX_ERR_PREV_ACK_NOT_CLEAR,
0026 CGX_ERR_PHY_LINK_DOWN,
0027 CGX_ERR_PCS_RESET_FAIL,
0028 CGX_ERR_AN_CPT_FAIL,
0029 CGX_ERR_TX_NOT_IDLE,
0030 CGX_ERR_RX_NOT_IDLE,
0031 CGX_ERR_SPUX_BR_BLKLOCK_FAIL,
0032 CGX_ERR_SPUX_RX_ALIGN_FAIL,
0033 CGX_ERR_SPUX_TX_FAULT,
0034 CGX_ERR_SPUX_RX_FAULT,
0035 CGX_ERR_SPUX_RESET_FAIL,
0036 CGX_ERR_SPUX_AN_RESET_FAIL,
0037 CGX_ERR_SPUX_USX_AN_RESET_FAIL,
0038 CGX_ERR_SMUX_RX_LINK_NOT_OK,
0039 CGX_ERR_PCS_RECV_LINK_FAIL,
0040 CGX_ERR_TRAINING_FAIL,
0041 CGX_ERR_RX_EQU_FAIL,
0042 CGX_ERR_SPUX_BER_FAIL,
0043 CGX_ERR_SPUX_RSFEC_ALGN_FAIL,
0044 CGX_ERR_SPUX_MARKER_LOCK_FAIL,
0045 CGX_ERR_SET_FEC_INVALID,
0046 CGX_ERR_SET_FEC_FAIL,
0047 CGX_ERR_MODULE_INVALID,
0048 CGX_ERR_MODULE_NOT_PRESENT,
0049 CGX_ERR_SPEED_CHANGE_INVALID,
0050 };
0051
0052
0053 enum cgx_link_speed {
0054 CGX_LINK_NONE,
0055 CGX_LINK_10M,
0056 CGX_LINK_100M,
0057 CGX_LINK_1G,
0058 CGX_LINK_2HG,
0059 CGX_LINK_5G,
0060 CGX_LINK_10G,
0061 CGX_LINK_20G,
0062 CGX_LINK_25G,
0063 CGX_LINK_40G,
0064 CGX_LINK_50G,
0065 CGX_LINK_80G,
0066 CGX_LINK_100G,
0067 CGX_LINK_SPEED_MAX,
0068 };
0069
0070 enum CGX_MODE_ {
0071 CGX_MODE_SGMII,
0072 CGX_MODE_1000_BASEX,
0073 CGX_MODE_QSGMII,
0074 CGX_MODE_10G_C2C,
0075 CGX_MODE_10G_C2M,
0076 CGX_MODE_10G_KR,
0077 CGX_MODE_20G_C2C,
0078 CGX_MODE_25G_C2C,
0079 CGX_MODE_25G_C2M,
0080 CGX_MODE_25G_2_C2C,
0081 CGX_MODE_25G_CR,
0082 CGX_MODE_25G_KR,
0083 CGX_MODE_40G_C2C,
0084 CGX_MODE_40G_C2M,
0085 CGX_MODE_40G_CR4,
0086 CGX_MODE_40G_KR4,
0087 CGX_MODE_40GAUI_C2C,
0088 CGX_MODE_50G_C2C,
0089 CGX_MODE_50G_C2M,
0090 CGX_MODE_50G_4_C2C,
0091 CGX_MODE_50G_CR,
0092 CGX_MODE_50G_KR,
0093 CGX_MODE_80GAUI_C2C,
0094 CGX_MODE_100G_C2C,
0095 CGX_MODE_100G_C2M,
0096 CGX_MODE_100G_CR4,
0097 CGX_MODE_100G_KR4,
0098 CGX_MODE_MAX
0099 };
0100
0101 enum cgx_cmd_id {
0102 CGX_CMD_NONE,
0103 CGX_CMD_GET_FW_VER,
0104 CGX_CMD_GET_MAC_ADDR,
0105 CGX_CMD_SET_MTU,
0106 CGX_CMD_GET_LINK_STS,
0107 CGX_CMD_LINK_BRING_UP,
0108 CGX_CMD_LINK_BRING_DOWN,
0109 CGX_CMD_INTERNAL_LBK,
0110 CGX_CMD_EXTERNAL_LBK,
0111 CGX_CMD_HIGIG,
0112 CGX_CMD_LINK_STAT_CHANGE,
0113 CGX_CMD_MODE_CHANGE,
0114 CGX_CMD_INTF_SHUTDOWN,
0115 CGX_CMD_GET_MKEX_PRFL_SIZE,
0116 CGX_CMD_GET_MKEX_PRFL_ADDR,
0117 CGX_CMD_GET_FWD_BASE,
0118 CGX_CMD_GET_LINK_MODES,
0119 CGX_CMD_SET_LINK_MODE,
0120 CGX_CMD_GET_SUPPORTED_FEC,
0121 CGX_CMD_SET_FEC,
0122 CGX_CMD_GET_AN,
0123 CGX_CMD_SET_AN,
0124 CGX_CMD_GET_ADV_LINK_MODES,
0125 CGX_CMD_GET_ADV_FEC,
0126 CGX_CMD_GET_PHY_MOD_TYPE,
0127 CGX_CMD_SET_PHY_MOD_TYPE,
0128 CGX_CMD_PRBS,
0129 CGX_CMD_DISPLAY_EYE,
0130 CGX_CMD_GET_PHY_FEC_STATS,
0131 };
0132
0133
0134 enum cgx_evt_id {
0135 CGX_EVT_NONE,
0136 CGX_EVT_LINK_CHANGE,
0137 };
0138
0139
0140 enum cgx_evt_type {
0141 CGX_EVT_ASYNC,
0142 CGX_EVT_CMD_RESP
0143 };
0144
0145 enum cgx_stat {
0146 CGX_STAT_SUCCESS,
0147 CGX_STAT_FAIL
0148 };
0149
0150 enum cgx_cmd_own {
0151 CGX_CMD_OWN_NS,
0152 CGX_CMD_OWN_FIRMWARE,
0153 };
0154
0155
0156
0157
0158
0159 #define FIELD_SET(m, y, x) \
0160 (((x) & ~(m)) | \
0161 FIELD_PREP((m), (y)))
0162
0163
0164
0165
0166
0167 #define EVTREG_ACK BIT_ULL(0)
0168 #define EVTREG_EVT_TYPE BIT_ULL(1)
0169 #define EVTREG_STAT BIT_ULL(2)
0170 #define EVTREG_ID GENMASK_ULL(8, 3)
0171
0172
0173
0174
0175
0176
0177 #define EVTREG_ERRTYPE GENMASK_ULL(18, 9)
0178
0179
0180
0181
0182 #define RESP_MAJOR_VER GENMASK_ULL(12, 9)
0183 #define RESP_MINOR_VER GENMASK_ULL(16, 13)
0184
0185
0186
0187
0188 #define RESP_MAC_ADDR GENMASK_ULL(56, 9)
0189
0190
0191
0192
0193 #define RESP_MKEX_PRFL_SIZE GENMASK_ULL(63, 9)
0194
0195
0196
0197
0198 #define RESP_MKEX_PRFL_ADDR GENMASK_ULL(63, 9)
0199
0200
0201
0202
0203 #define RESP_FWD_BASE GENMASK_ULL(56, 9)
0204 #define RESP_LINKSTAT_LMAC_TYPE GENMASK_ULL(35, 28)
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216 struct cgx_lnk_sts {
0217 uint64_t reserved1:9;
0218 uint64_t link_up:1;
0219 uint64_t full_duplex:1;
0220 uint64_t speed:4;
0221 uint64_t err_type:10;
0222 uint64_t an:1;
0223 uint64_t fec:2;
0224 uint64_t port:8;
0225 uint64_t reserved2:28;
0226 };
0227
0228 #define RESP_LINKSTAT_UP GENMASK_ULL(9, 9)
0229 #define RESP_LINKSTAT_FDUPLEX GENMASK_ULL(10, 10)
0230 #define RESP_LINKSTAT_SPEED GENMASK_ULL(14, 11)
0231 #define RESP_LINKSTAT_ERRTYPE GENMASK_ULL(24, 15)
0232 #define RESP_LINKSTAT_AN GENMASK_ULL(25, 25)
0233 #define RESP_LINKSTAT_FEC GENMASK_ULL(27, 26)
0234 #define RESP_LINKSTAT_PORT GENMASK_ULL(35, 28)
0235
0236
0237
0238
0239 #define CMDREG_OWN BIT_ULL(0)
0240 #define CMDREG_ID GENMASK_ULL(7, 2)
0241
0242
0243
0244
0245
0246 #define CMDREG_ENABLE BIT_ULL(8)
0247
0248
0249 #define CMDMTU_SIZE GENMASK_ULL(23, 8)
0250
0251
0252 #define CMDLINKCHANGE_LINKUP BIT_ULL(8)
0253 #define CMDLINKCHANGE_FULLDPLX BIT_ULL(9)
0254 #define CMDLINKCHANGE_SPEED GENMASK_ULL(13, 10)
0255
0256 #define CMDSETFEC GENMASK_ULL(9, 8)
0257
0258 #define CMDMODECHANGE_SPEED GENMASK_ULL(11, 8)
0259 #define CMDMODECHANGE_DUPLEX GENMASK_ULL(12, 12)
0260 #define CMDMODECHANGE_AN GENMASK_ULL(13, 13)
0261 #define CMDMODECHANGE_PORT GENMASK_ULL(21, 14)
0262 #define CMDMODECHANGE_FLAGS GENMASK_ULL(63, 22)
0263
0264
0265 #define LINKCFG_TIMEOUT GENMASK_ULL(21, 8)
0266 #endif