Lines Matching +full:addr +full:- +full:mode
1 /*-
73 /* 40GBASE-LR4 and 40GBASE-SR4 are optic modules */
109 uint8_t addr; member
115 {.addr = 0x0A, .value = 0x0C, .mask = 0xff },
116 {.addr = 0x2F, .value = 0x54, .mask = 0xff },
117 {.addr = 0x31, .value = 0x20, .mask = 0xff },
118 {.addr = 0x1E, .value = 0xE9, .mask = 0xff },
119 {.addr = 0x1F, .value = 0x0B, .mask = 0xff },
120 {.addr = 0xA6, .value = 0x43, .mask = 0xff },
121 {.addr = 0x2A, .value = 0x5A, .mask = 0xff },
122 {.addr = 0x2B, .value = 0x0A, .mask = 0xff },
123 {.addr = 0x2C, .value = 0xF6, .mask = 0xff },
124 {.addr = 0x70, .value = 0x05, .mask = 0xff },
125 {.addr = 0x6A, .value = 0x21, .mask = 0xff },
126 {.addr = 0x35, .value = 0x0F, .mask = 0xff },
127 {.addr = 0x12, .value = 0x83, .mask = 0xff },
128 {.addr = 0x9C, .value = 0x24, .mask = 0xff },
129 {.addr = 0x98, .value = 0x00, .mask = 0xff },
130 {.addr = 0x42, .value = 0x50, .mask = 0xff },
131 {.addr = 0x44, .value = 0x90, .mask = 0xff },
132 {.addr = 0x45, .value = 0xC0, .mask = 0xff },
133 {.addr = 0x46, .value = 0xD0, .mask = 0xff },
134 {.addr = 0x47, .value = 0xD1, .mask = 0xff },
135 {.addr = 0x48, .value = 0xD5, .mask = 0xff },
136 {.addr = 0x49, .value = 0xD8, .mask = 0xff },
137 {.addr = 0x4A, .value = 0xEA, .mask = 0xff },
138 {.addr = 0x4B, .value = 0xF7, .mask = 0xff },
139 {.addr = 0x4C, .value = 0xFD, .mask = 0xff },
140 {.addr = 0x8E, .value = 0x00, .mask = 0xff },
141 {.addr = 0x3D, .value = 0x94, .mask = 0xff },
142 {.addr = 0x3F, .value = 0x40, .mask = 0xff },
143 {.addr = 0x3E, .value = 0x43, .mask = 0xff },
144 {.addr = 0x0A, .value = 0x00, .mask = 0xff },
148 {.addr = 0x0A, .value = 0x0C, .mask = 0xff},
149 {.addr = 0x2F, .value = 0x54, .mask = 0xff},
150 {.addr = 0x31, .value = 0x40, .mask = 0xff},
151 {.addr = 0x1E, .value = 0xE3, .mask = 0xff},
152 {.addr = 0x1F, .value = 0x0B, .mask = 0xff},
153 {.addr = 0xA6, .value = 0x43, .mask = 0xff},
154 {.addr = 0x2A, .value = 0x5A, .mask = 0xff},
155 {.addr = 0x2B, .value = 0x0A, .mask = 0xff},
156 {.addr = 0x2C, .value = 0xF6, .mask = 0xff},
157 {.addr = 0x70, .value = 0x05, .mask = 0xff},
158 {.addr = 0x6A, .value = 0x21, .mask = 0xff},
159 {.addr = 0x35, .value = 0x0F, .mask = 0xff},
160 {.addr = 0x12, .value = 0x83, .mask = 0xff},
161 {.addr = 0x9C, .value = 0x24, .mask = 0xff},
162 {.addr = 0x98, .value = 0x00, .mask = 0xff},
163 {.addr = 0x42, .value = 0x50, .mask = 0xff},
164 {.addr = 0x44, .value = 0x90, .mask = 0xff},
165 {.addr = 0x45, .value = 0xC0, .mask = 0xff},
166 {.addr = 0x46, .value = 0xD0, .mask = 0xff},
167 {.addr = 0x47, .value = 0xD1, .mask = 0xff},
168 {.addr = 0x48, .value = 0xD5, .mask = 0xff},
169 {.addr = 0x49, .value = 0xD8, .mask = 0xff},
170 {.addr = 0x4A, .value = 0xEA, .mask = 0xff},
171 {.addr = 0x4B, .value = 0xF7, .mask = 0xff},
172 {.addr = 0x4C, .value = 0xFD, .mask = 0xff},
173 {.addr = 0x8E, .value = 0x00, .mask = 0xff},
174 {.addr = 0x3D, .value = 0x94, .mask = 0xff},
175 {.addr = 0x3F, .value = 0x40, .mask = 0xff},
176 {.addr = 0x3E, .value = 0x43, .mask = 0xff},
177 {.addr = 0x0A, .value = 0x00, .mask = 0xff},
182 {.addr = 0x0A, .value = 0x0C, .mask = 0x0C},
183 /* Select 10.3125Gbps standard rate mode (6.6) */
184 {.addr = 0x2F, .value = 0x00, .mask = 0xF0},
185 /* Enable loop filter auto-adjust */
186 {.addr = 0x1F, .value = 0x08, .mask = 0x08},
187 /* Set Adapt Mode 1 (6.13) */
188 {.addr = 0x31, .value = 0x20, .mask = 0x60},
190 {.addr = 0x1E, .value = 0x08, .mask = 0x08},
192 {.addr = 0x0A, .value = 0x00, .mask = 0x0C},
194 {.addr = 0x3D, .value = 0x80, .mask = 0x80},
195 /* Set Main-cursor tap sign to positive (6.12) */
196 {.addr = 0x3D, .value = 0x00, .mask = 0x40},
197 /* Set Post-cursor tap sign to negative (6.12) */
198 {.addr = 0x3F, .value = 0x40, .mask = 0x40},
199 /* Set Pre-cursor tap sign to negative (6.12) */
200 {.addr = 0x3E, .value = 0x40, .mask = 0x40},
201 /* Set Main-cursor tap magnitude to 13 (6.12) */
202 {.addr = 0x3D, .value = 0x0D, .mask = 0x1F},
239 if (lm_context->debug) \
257 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_sfp_detect()
258 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_sfp_detect()
263 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_sfp_detect()
264 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_sfp_detect()
269 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_sfp_detect()
270 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_sfp_detect()
275 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_sfp_detect()
276 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_sfp_detect()
281 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_sfp_detect()
282 lm_context->sfp_bus_id, in al_eth_sfp_detect()
283 lm_context->sfp_i2c_addr, in al_eth_sfp_detect()
291 if (lm_context->mode != AL_ETH_LM_MODE_DISCONNECTED) in al_eth_sfp_detect()
299 ((lm_context->max_speed == AL_ETH_LM_MAX_SPEED_25G) || in al_eth_sfp_detect()
300 (lm_context->max_speed == AL_ETH_LM_MAX_SPEED_MAX))) in al_eth_sfp_detect()
303 ((lm_context->max_speed == AL_ETH_LM_MAX_SPEED_10G) || in al_eth_sfp_detect()
304 (lm_context->max_speed == AL_ETH_LM_MAX_SPEED_MAX))) in al_eth_sfp_detect()
316 lm_context->da_len = (sfp_cable_tech & SFP_10G_DA_PASSIVE) ? sfp_da_len : 0; in al_eth_sfp_detect()
327 al_eth_lm_mode_convert_to_str(lm_context->default_mode)); in al_eth_sfp_detect()
328 *new_mode = lm_context->default_mode; in al_eth_sfp_detect()
329 lm_context->da_len = lm_context->default_dac_len; in al_eth_sfp_detect()
332 if ((lm_context->sfp_detect_force_mode) && (*new_mode != AL_ETH_LM_MODE_DISCONNECTED) && in al_eth_sfp_detect()
333 (*new_mode != lm_context->default_mode)) { in al_eth_sfp_detect()
334 al_warn("%s: Force mode to default (%s). mode based of the SFP EEPROM %s\n", in al_eth_sfp_detect()
335 __func__, al_eth_lm_mode_convert_to_str(lm_context->default_mode), in al_eth_sfp_detect()
338 *new_mode = lm_context->default_mode; in al_eth_sfp_detect()
341 lm_context->mode = *new_mode; in al_eth_sfp_detect()
355 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_qsfp_detect()
356 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_qsfp_detect()
361 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_qsfp_detect()
362 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_qsfp_detect()
380 lm_context->da_len = qsfp_da_len; in al_eth_qsfp_detect()
387 al_eth_lm_mode_convert_to_str(lm_context->default_mode)); in al_eth_qsfp_detect()
388 *new_mode = lm_context->default_mode; in al_eth_qsfp_detect()
389 lm_context->da_len = lm_context->default_dac_len; in al_eth_qsfp_detect()
392 lm_context->mode = *new_mode; in al_eth_qsfp_detect()
405 if ((lm_context->gpio_get) && (lm_context->gpio_present != 0)) in al_eth_module_detect()
406 sfp_present = lm_context->gpio_get(lm_context->gpio_present); in al_eth_module_detect()
415 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_module_detect()
416 lm_context->sfp_bus_id, lm_context->sfp_i2c_addr, in al_eth_module_detect()
421 if (lm_context->mode != AL_ETH_LM_MODE_DISCONNECTED) in al_eth_module_detect()
490 if (lm_context->tx_param_dirty == 0) in al_eth_serdes_static_tx_params_set()
493 if (lm_context->serdes_tx_params_valid != 0) { in al_eth_serdes_static_tx_params_set()
494 lm_context->tx_param_dirty = 0; in al_eth_serdes_static_tx_params_set()
496 lm_context->tx_params_override.override = AL_TRUE; in al_eth_serdes_static_tx_params_set()
498 if ((lm_context->serdes_obj->tx_advanced_params_set) == 0) { in al_eth_serdes_static_tx_params_set()
503 lm_context->serdes_obj->tx_advanced_params_set( in al_eth_serdes_static_tx_params_set()
504 lm_context->serdes_obj, in al_eth_serdes_static_tx_params_set()
505 lm_context->lane, in al_eth_serdes_static_tx_params_set()
506 &lm_context->tx_params_override); in al_eth_serdes_static_tx_params_set()
508 } else if (lm_context->static_values != 0) { in al_eth_serdes_static_tx_params_set()
509 lm_context->tx_param_dirty = 0; in al_eth_serdes_static_tx_params_set()
511 if ((lm_context->serdes_obj->tx_advanced_params_set) == 0) { in al_eth_serdes_static_tx_params_set()
516 if ((lm_context->retimer_exist == 0) && in al_eth_serdes_static_tx_params_set()
517 (lm_context->mode == AL_ETH_LM_MODE_10G_DA)) in al_eth_serdes_static_tx_params_set()
518 lm_context->serdes_obj->tx_advanced_params_set( in al_eth_serdes_static_tx_params_set()
519 lm_context->serdes_obj, in al_eth_serdes_static_tx_params_set()
520 lm_context->lane, in al_eth_serdes_static_tx_params_set()
523 lm_context->serdes_obj->tx_advanced_params_set( in al_eth_serdes_static_tx_params_set()
524 lm_context->serdes_obj, in al_eth_serdes_static_tx_params_set()
525 lm_context->lane, in al_eth_serdes_static_tx_params_set()
534 if (lm_context->rx_param_dirty == 0) in al_eth_serdes_static_rx_params_set()
537 if (lm_context->serdes_rx_params_valid != 0) { in al_eth_serdes_static_rx_params_set()
538 lm_context->rx_param_dirty = 0; in al_eth_serdes_static_rx_params_set()
540 lm_context->rx_params_override.override = AL_TRUE; in al_eth_serdes_static_rx_params_set()
542 if ((lm_context->serdes_obj->rx_advanced_params_set) == 0) { in al_eth_serdes_static_rx_params_set()
547 lm_context->serdes_obj->rx_advanced_params_set( in al_eth_serdes_static_rx_params_set()
548 lm_context->serdes_obj, in al_eth_serdes_static_rx_params_set()
549 lm_context->lane, in al_eth_serdes_static_rx_params_set()
550 &lm_context->rx_params_override); in al_eth_serdes_static_rx_params_set()
552 } else if (lm_context->static_values != 0) { in al_eth_serdes_static_rx_params_set()
553 lm_context->rx_param_dirty = 0; in al_eth_serdes_static_rx_params_set()
555 if ((lm_context->serdes_obj->rx_advanced_params_set) == 0) { in al_eth_serdes_static_rx_params_set()
560 if ((lm_context->retimer_exist == 0) && in al_eth_serdes_static_rx_params_set()
561 (lm_context->mode == AL_ETH_LM_MODE_10G_DA)) in al_eth_serdes_static_rx_params_set()
562 lm_context->serdes_obj->rx_advanced_params_set( in al_eth_serdes_static_rx_params_set()
563 lm_context->serdes_obj, in al_eth_serdes_static_rx_params_set()
564 lm_context->lane, in al_eth_serdes_static_rx_params_set()
567 lm_context->serdes_obj->rx_advanced_params_set( in al_eth_serdes_static_rx_params_set()
568 lm_context->serdes_obj, in al_eth_serdes_static_rx_params_set()
569 lm_context->lane, in al_eth_serdes_static_rx_params_set()
579 int best_dcgain = -1; in al_eth_rx_equal_run()
581 int best_score = -1; in al_eth_rx_equal_run()
582 int test_score = -1; in al_eth_rx_equal_run()
585 lm_context->serdes_obj->rx_advanced_params_set(lm_context->serdes_obj, in al_eth_rx_equal_run()
586 lm_context->lane, &rx_params); in al_eth_rx_equal_run()
592 lm_context->serdes_obj->dcgain_set( in al_eth_rx_equal_run()
593 lm_context->serdes_obj, in al_eth_rx_equal_run()
596 test_score = lm_context->serdes_obj->rx_equalization( in al_eth_rx_equal_run()
597 lm_context->serdes_obj, in al_eth_rx_equal_run()
598 lm_context->lane); in al_eth_rx_equal_run()
610 lm_context->serdes_obj->rx_advanced_params_get( in al_eth_rx_equal_run()
611 lm_context->serdes_obj, in al_eth_rx_equal_run()
612 lm_context->lane, in al_eth_rx_equal_run()
623 lm_context->serdes_obj->dcgain_set( in al_eth_rx_equal_run()
624 lm_context->serdes_obj, in al_eth_rx_equal_run()
627 best_score = -1; in al_eth_rx_equal_run()
629 test_score = lm_context->serdes_obj->rx_equalization( in al_eth_rx_equal_run()
630 lm_context->serdes_obj, in al_eth_rx_equal_run()
631 lm_context->lane); in al_eth_rx_equal_run()
640 lm_context->serdes_obj->rx_advanced_params_get( in al_eth_rx_equal_run()
641 lm_context->serdes_obj, in al_eth_rx_equal_run()
642 lm_context->lane, in al_eth_rx_equal_run()
649 lm_context->serdes_obj->rx_advanced_params_set( in al_eth_rx_equal_run()
650 lm_context->serdes_obj, in al_eth_rx_equal_run()
651 lm_context->lane, in al_eth_rx_equal_run()
654 …lm_debug("-------------------- best dcgain %d ------------------------------------\n", best_dcgain… in al_eth_rx_equal_run()
671 al_eth_retimer_boost_addr[lm_context->retimer_channel][lm_context->retimer_type]; in al_eth_lm_retimer_boost_config()
673 if (lm_context->mode != AL_ETH_LM_MODE_10G_DA) { in al_eth_lm_retimer_boost_config()
674 boost = al_eth_retimer_boost_value[0][lm_context->retimer_type]; in al_eth_lm_retimer_boost_config()
677 if (lm_context->da_len <= al_eth_retimer_boost_lens[i]) { in al_eth_lm_retimer_boost_config()
678 boost = al_eth_retimer_boost_value[i][lm_context->retimer_type]; in al_eth_lm_retimer_boost_config()
684 boost = al_eth_retimer_boost_value[RETIMER_LENS_MAX][lm_context->retimer_type]; in al_eth_lm_retimer_boost_config()
687 lm_debug("config retimer boost in channel %d (addr %x) to 0x%x\n", in al_eth_lm_retimer_boost_config()
688 lm_context->retimer_channel, boost_addr, boost); in al_eth_lm_retimer_boost_config()
690 rc = lm_context->i2c_write(lm_context->i2c_context, in al_eth_lm_retimer_boost_config()
691 lm_context->retimer_bus_id, lm_context->retimer_i2c_addr, in al_eth_lm_retimer_boost_config()
696 "configuration (bus-id %x i2c-addr %x)\n", in al_eth_lm_retimer_boost_config()
697 __func__, rc, lm_context->retimer_bus_id, in al_eth_lm_retimer_boost_config()
698 lm_context->retimer_i2c_addr); in al_eth_lm_retimer_boost_config()
737 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_lm_retimer_ds25_write_reg()
738 lm_context->retimer_bus_id, in al_eth_lm_retimer_ds25_write_reg()
739 lm_context->retimer_i2c_addr, in al_eth_lm_retimer_ds25_write_reg()
749 rc = lm_context->i2c_write(lm_context->i2c_context, in al_eth_lm_retimer_ds25_write_reg()
750 lm_context->retimer_bus_id, in al_eth_lm_retimer_ds25_write_reg()
751 lm_context->retimer_i2c_addr, in al_eth_lm_retimer_ds25_write_reg()
797 config[i].addr, in al_eth_lm_retimer_ds25_channel_config()
859 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_lm_retimer_ds25_signal_detect()
860 lm_context->retimer_bus_id, in al_eth_lm_retimer_ds25_signal_detect()
861 lm_context->retimer_i2c_addr, in al_eth_lm_retimer_ds25_signal_detect()
889 rc = lm_context->i2c_read(lm_context->i2c_context, in al_eth_lm_retimer_ds25_cdr_lock()
890 lm_context->retimer_bus_id, in al_eth_lm_retimer_ds25_cdr_lock()
891 lm_context->retimer_i2c_addr, in al_eth_lm_retimer_ds25_cdr_lock()
917 timeout -= 10; in al_eth_lm_wait_for_lock()
919 lock = retimer[lm_context->retimer_type].cdr_lock(lm_context, channel); in al_eth_lm_wait_for_lock()
924 (AL_ETH_LM_RETIMER_WAIT_FOR_LOCK - timeout)); in al_eth_lm_wait_for_lock()
936 if (retimer[lm_context->retimer_type].signal_detect) { in al_eth_lm_retimer_signal_lock_check()
937 if (!retimer[lm_context->retimer_type].signal_detect(lm_context, channel)) { in al_eth_lm_retimer_signal_lock_check()
942 if (retimer[lm_context->retimer_type].cdr_lock) { in al_eth_lm_retimer_signal_lock_check()
943 cdr_lock = retimer[lm_context->retimer_type].cdr_lock( in al_eth_lm_retimer_signal_lock_check()
947 if (retimer[lm_context->retimer_type].reset) { in al_eth_lm_retimer_signal_lock_check()
948 retimer[lm_context->retimer_type].reset(lm_context, in al_eth_lm_retimer_signal_lock_check()
974 if (lm_context->mode == AL_ETH_LM_MODE_25G) { in al_eth_lm_retimer_ds25_full_config()
990 lm_context->retimer_channel, in al_eth_lm_retimer_ds25_full_config()
998 lm_context->retimer_tx_channel, in al_eth_lm_retimer_ds25_full_config()
1005 if (lm_context->serdes_obj->type_get() == AL_SRDS_TYPE_25G) { in al_eth_lm_retimer_ds25_full_config()
1006 lm_debug("%s: serdes 25G - perform tx and rx gearbox reset\n", __func__); in al_eth_lm_retimer_ds25_full_config()
1007 al_eth_gearbox_reset(lm_context->adapter, AL_TRUE, AL_TRUE); in al_eth_lm_retimer_ds25_full_config()
1011 al_eth_lm_retimer_signal_lock_check(lm_context, lm_context->retimer_tx_channel, &ready); in al_eth_lm_retimer_ds25_full_config()
1028 al_eth_lm_retimer_signal_lock_check(lm_context, lm_context->retimer_channel, &ready); in al_eth_lm_retimer_25g_rx_adaptation()
1032 __func__, lm_context->retimer_channel); in al_eth_lm_retimer_25g_rx_adaptation()
1047 al_eth_link_status_clear(lm_context->adapter); in al_eth_lm_check_for_link()
1048 al_eth_link_status_get(lm_context->adapter, &status); in al_eth_lm_check_for_link()
1052 al_eth_led_set(lm_context->adapter, AL_TRUE); in al_eth_lm_check_for_link()
1053 lm_context->link_state = AL_ETH_LM_LINK_UP; in al_eth_lm_check_for_link()
1058 lm_context->link_state = AL_ETH_LM_LINK_DOWN; in al_eth_lm_check_for_link()
1059 al_eth_led_set(lm_context->adapter, AL_FALSE); in al_eth_lm_check_for_link()
1065 lm_context->link_state = AL_ETH_LM_LINK_DOWN_RF; in al_eth_lm_check_for_link()
1066 al_eth_led_set(lm_context->adapter, AL_FALSE); in al_eth_lm_check_for_link()
1083 lm_context->adapter = params->adapter; in al_eth_lm_init()
1084 lm_context->serdes_obj = params->serdes_obj; in al_eth_lm_init()
1085 lm_context->lane = params->lane; in al_eth_lm_init()
1086 lm_context->sfp_detection = params->sfp_detection; in al_eth_lm_init()
1087 lm_context->sfp_bus_id = params->sfp_bus_id; in al_eth_lm_init()
1088 lm_context->sfp_i2c_addr = params->sfp_i2c_addr; in al_eth_lm_init()
1090 lm_context->retimer_exist = params->retimer_exist; in al_eth_lm_init()
1091 lm_context->retimer_type = params->retimer_type; in al_eth_lm_init()
1092 lm_context->retimer_bus_id = params->retimer_bus_id; in al_eth_lm_init()
1093 lm_context->retimer_i2c_addr = params->retimer_i2c_addr; in al_eth_lm_init()
1094 lm_context->retimer_channel = params->retimer_channel; in al_eth_lm_init()
1095 lm_context->retimer_tx_channel = params->retimer_tx_channel; in al_eth_lm_init()
1097 lm_context->default_mode = params->default_mode; in al_eth_lm_init()
1098 lm_context->default_dac_len = params->default_dac_len; in al_eth_lm_init()
1099 lm_context->link_training = params->link_training; in al_eth_lm_init()
1100 lm_context->rx_equal = params->rx_equal; in al_eth_lm_init()
1101 lm_context->static_values = params->static_values; in al_eth_lm_init()
1102 lm_context->i2c_read = params->i2c_read; in al_eth_lm_init()
1103 lm_context->i2c_write = params->i2c_write; in al_eth_lm_init()
1104 lm_context->i2c_context = params->i2c_context; in al_eth_lm_init()
1105 lm_context->get_random_byte = params->get_random_byte; in al_eth_lm_init()
1108 al_assert((lm_context->sfp_detection == false) || in al_eth_lm_init()
1109 (lm_context->i2c_read != NULL)); in al_eth_lm_init()
1111 al_assert((lm_context->retimer_exist == false) || in al_eth_lm_init()
1112 (lm_context->i2c_write != NULL)); in al_eth_lm_init()
1114 lm_context->local_adv.selector_field = 1; in al_eth_lm_init()
1115 lm_context->local_adv.capability = 0; in al_eth_lm_init()
1116 lm_context->local_adv.remote_fault = 0; in al_eth_lm_init()
1117 lm_context->local_adv.acknowledge = 0; in al_eth_lm_init()
1118 lm_context->local_adv.next_page = 0; in al_eth_lm_init()
1119 lm_context->local_adv.technology = AL_ETH_AN_TECH_10GBASE_KR; in al_eth_lm_init()
1120 lm_context->local_adv.fec_capability = params->kr_fec_enable; in al_eth_lm_init()
1122 lm_context->mode = AL_ETH_LM_MODE_DISCONNECTED; in al_eth_lm_init()
1123 lm_context->serdes_tx_params_valid = false; in al_eth_lm_init()
1124 lm_context->serdes_rx_params_valid = false; in al_eth_lm_init()
1126 lm_context->rx_param_dirty = 1; in al_eth_lm_init()
1127 lm_context->tx_param_dirty = 1; in al_eth_lm_init()
1129 lm_context->gpio_get = params->gpio_get; in al_eth_lm_init()
1130 lm_context->gpio_present = params->gpio_present; in al_eth_lm_init()
1132 lm_context->max_speed = params->max_speed; in al_eth_lm_init()
1133 lm_context->sfp_detect_force_mode = params->sfp_detect_force_mode; in al_eth_lm_init()
1135 lm_context->lm_pause = params->lm_pause; in al_eth_lm_init()
1137 lm_context->led_config = params->led_config; in al_eth_lm_init()
1139 lm_context->retimer_configured = false; in al_eth_lm_init()
1141 lm_context->link_state = AL_ETH_LM_LINK_DOWN; in al_eth_lm_init()
1160 * before and set new mode to disconnected to avoid calling to link establish in al_eth_lm_link_detection()
1163 if (lm_context->lm_pause != NULL) { in al_eth_lm_link_detection()
1164 bool lm_pause = lm_context->lm_pause(lm_context->i2c_context); in al_eth_lm_link_detection()
1168 if (lm_context->link_state == AL_ETH_LM_LINK_UP) in al_eth_lm_link_detection()
1178 *old_mode = lm_context->mode; in al_eth_lm_link_detection()
1179 *new_mode = lm_context->mode; in al_eth_lm_link_detection()
1184 switch (lm_context->link_state) { in al_eth_lm_link_detection()
1186 al_eth_link_status_get(lm_context->adapter, &status); in al_eth_lm_link_detection()
1192 al_eth_led_set(lm_context->adapter, AL_TRUE); in al_eth_lm_link_detection()
1197 lm_context->link_state = AL_ETH_LM_LINK_DOWN; in al_eth_lm_link_detection()
1200 lm_context->link_state = AL_ETH_LM_LINK_DOWN_RF; in al_eth_lm_link_detection()
1205 al_eth_link_status_get(lm_context->adapter, &status); in al_eth_lm_link_detection()
1209 lm_context->link_state = AL_ETH_LM_LINK_DOWN; in al_eth_lm_link_detection()
1214 lm_context->link_state = AL_ETH_LM_LINK_UP; in al_eth_lm_link_detection()
1222 al_eth_led_set(lm_context->adapter, AL_FALSE); in al_eth_lm_link_detection()
1224 if (lm_context->sfp_detection) { in al_eth_lm_link_detection()
1231 lm_context->mode = *new_mode; in al_eth_lm_link_detection()
1233 lm_context->mode = lm_context->default_mode; in al_eth_lm_link_detection()
1234 *new_mode = lm_context->mode; in al_eth_lm_link_detection()
1238 al_info("%s: New SFP mode detected %s -> %s\n", in al_eth_lm_link_detection()
1242 lm_context->rx_param_dirty = 1; in al_eth_lm_link_detection()
1243 lm_context->tx_param_dirty = 1; in al_eth_lm_link_detection()
1245 lm_context->new_port = true; in al_eth_lm_link_detection()
1247 if ((*new_mode != AL_ETH_LM_MODE_DISCONNECTED) && (lm_context->led_config)) { in al_eth_lm_link_detection()
1262 al_err("%s: unknown LM mode!\n", __func__); in al_eth_lm_link_detection()
1265 lm_context->led_config(lm_context->i2c_context, &data); in al_eth_lm_link_detection()
1278 switch (lm_context->link_state) { in al_eth_lm_link_establish()
1297 if (lm_context->lm_pause) { in al_eth_lm_link_establish()
1298 bool lm_pause = lm_context->lm_pause(lm_context->i2c_context); in al_eth_lm_link_establish()
1306 if ((lm_context->new_port) && (lm_context->retimer_exist)) { in al_eth_lm_link_establish()
1314 if (retimer[lm_context->retimer_type].config(lm_context)) { in al_eth_lm_link_establish()
1321 lm_context->new_port = false; in al_eth_lm_link_establish()
1326 if (lm_context->retimer_exist) { in al_eth_lm_link_establish()
1327 if (retimer[lm_context->retimer_type].rx_adaptation) { in al_eth_lm_link_establish()
1328 ret = retimer[lm_context->retimer_type].rx_adaptation(lm_context); in al_eth_lm_link_establish()
1339 signal_detected = lm_context->serdes_obj->signal_is_detected( in al_eth_lm_link_establish()
1340 lm_context->serdes_obj, in al_eth_lm_link_establish()
1341 lm_context->lane); in al_eth_lm_link_establish()
1350 if (lm_context->serdes_obj->type_get() == AL_SRDS_TYPE_25G) { in al_eth_lm_link_establish()
1351 lm_debug("%s: serdes 25G - perform rx gearbox reset\n", __func__); in al_eth_lm_link_establish()
1352 al_eth_gearbox_reset(lm_context->adapter, AL_FALSE, AL_TRUE); in al_eth_lm_link_establish()
1356 if (lm_context->retimer_exist) { in al_eth_lm_link_establish()
1369 if ((lm_context->mode == AL_ETH_LM_MODE_10G_DA) && (lm_context->link_training)) { in al_eth_lm_link_establish()
1370 lm_context->local_adv.transmitted_nonce = lm_context->get_random_byte(); in al_eth_lm_link_establish()
1371 lm_context->local_adv.transmitted_nonce &= 0x1f; in al_eth_lm_link_establish()
1373 ret = al_eth_an_lt_execute(lm_context->adapter, in al_eth_lm_link_establish()
1374 lm_context->serdes_obj, in al_eth_lm_link_establish()
1375 lm_context->lane, in al_eth_lm_link_establish()
1376 &lm_context->local_adv, in al_eth_lm_link_establish()
1377 &lm_context->partner_adv); in al_eth_lm_link_establish()
1379 lm_context->rx_param_dirty = 1; in al_eth_lm_link_establish()
1380 lm_context->tx_param_dirty = 1; in al_eth_lm_link_establish()
1384 lm_context->link_training_failures = 0; in al_eth_lm_link_establish()
1393 lm_context->link_training_failures++; in al_eth_lm_link_establish()
1394 if (lm_context->link_training_failures > AL_ETH_LT_FAILURES_TO_RESET) { in al_eth_lm_link_establish()
1398 lm_context->serdes_obj->pma_hard_reset_lane( in al_eth_lm_link_establish()
1399 lm_context->serdes_obj, in al_eth_lm_link_establish()
1400 lm_context->lane, in al_eth_lm_link_establish()
1402 lm_context->serdes_obj->pma_hard_reset_lane( in al_eth_lm_link_establish()
1403 lm_context->serdes_obj, in al_eth_lm_link_establish()
1404 lm_context->lane, in al_eth_lm_link_establish()
1406 lm_context->link_training_failures = 0; in al_eth_lm_link_establish()
1412 if ((lm_context->mode == AL_ETH_LM_MODE_10G_DA) && in al_eth_lm_link_establish()
1413 (lm_context->rx_equal)) { in al_eth_lm_link_establish()
1449 lm_context->tx_params_override = *tx_params; in al_eth_lm_static_parameters_override()
1450 lm_context->tx_param_dirty = 1; in al_eth_lm_static_parameters_override()
1451 lm_context->serdes_tx_params_valid = true; in al_eth_lm_static_parameters_override()
1455 lm_context->rx_params_override = *rx_params; in al_eth_lm_static_parameters_override()
1456 lm_context->rx_param_dirty = 1; in al_eth_lm_static_parameters_override()
1457 lm_context->serdes_rx_params_valid = true; in al_eth_lm_static_parameters_override()
1469 lm_context->serdes_tx_params_valid = false; in al_eth_lm_static_parameters_override_disable()
1471 lm_context->serdes_tx_params_valid = false; in al_eth_lm_static_parameters_override_disable()
1483 if (lm_context->serdes_tx_params_valid) in al_eth_lm_static_parameters_get()
1484 *tx_params = lm_context->tx_params_override; in al_eth_lm_static_parameters_get()
1486 lm_context->serdes_obj->tx_advanced_params_get( in al_eth_lm_static_parameters_get()
1487 lm_context->serdes_obj, in al_eth_lm_static_parameters_get()
1488 lm_context->lane, in al_eth_lm_static_parameters_get()
1493 if (lm_context->serdes_rx_params_valid) in al_eth_lm_static_parameters_get()
1494 *rx_params = lm_context->rx_params_override; in al_eth_lm_static_parameters_get()
1496 lm_context->serdes_obj->rx_advanced_params_get( in al_eth_lm_static_parameters_get()
1497 lm_context->serdes_obj, in al_eth_lm_static_parameters_get()
1498 lm_context->lane, in al_eth_lm_static_parameters_get()
1530 lm_context->debug = enable; in al_eth_lm_debug_mode_set()