Lines Matching refs:params
740 struct elink_params *params,
943 static int elink_check_lfa(struct elink_params *params) in elink_check_lfa() argument
948 struct bxe_softc *sc = params->sc; in elink_check_lfa()
951 REG_RD(sc, params->lfa_base + in elink_check_lfa()
959 REG_WR(sc, params->lfa_base + in elink_check_lfa()
966 link_status = REG_RD(sc, params->shmem_base + in elink_check_lfa()
968 port_mb[params->port].link_status)); in elink_check_lfa()
975 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_BOOT_FROM_SAN) in elink_check_lfa()
979 if (params->loopback_mode) in elink_check_lfa()
983 if (!params->lfa_base) in elink_check_lfa()
986 if (params->num_phys == 3) { in elink_check_lfa()
995 saved_val = REG_RD(sc, params->lfa_base + in elink_check_lfa()
997 req_val = params->req_duplex[0] | (params->req_duplex[1] << 16); in elink_check_lfa()
1004 saved_val = REG_RD(sc, params->lfa_base + in elink_check_lfa()
1006 req_val = params->req_flow_ctrl[0] | (params->req_flow_ctrl[1] << 16); in elink_check_lfa()
1013 saved_val = REG_RD(sc, params->lfa_base + in elink_check_lfa()
1015 req_val = params->req_line_speed[0] | (params->req_line_speed[1] << 16); in elink_check_lfa()
1023 cur_speed_cap_mask = REG_RD(sc, params->lfa_base + in elink_check_lfa()
1027 if (cur_speed_cap_mask != params->speed_cap_mask[cfg_idx]) { in elink_check_lfa()
1030 params->speed_cap_mask[cfg_idx]); in elink_check_lfa()
1036 REG_RD(sc, params->lfa_base + in elink_check_lfa()
1040 if ((uint16_t)cur_req_fc_auto_adv != params->req_fc_auto_adv) { in elink_check_lfa()
1042 cur_req_fc_auto_adv, params->req_fc_auto_adv); in elink_check_lfa()
1046 eee_status = REG_RD(sc, params->shmem2_base + in elink_check_lfa()
1048 eee_status[params->port])); in elink_check_lfa()
1051 (params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI)) || in elink_check_lfa()
1053 (params->eee_mode & ELINK_EEE_MODE_ADV_LPI))) { in elink_check_lfa()
1054 ELINK_DEBUG_P2(sc, "EEE mismatch %x vs. %x\n", params->eee_mode, in elink_check_lfa()
1137 static void elink_ets_e2e3a0_disabled(struct elink_params *params) in elink_ets_e2e3a0_disabled() argument
1140 struct bxe_softc *sc = params->sc; in elink_ets_e2e3a0_disabled()
1228 const struct elink_params *params, in elink_ets_e3b0_set_credit_upper_bound_nig() argument
1231 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_set_credit_upper_bound_nig()
1232 const uint8_t port = params->port; in elink_ets_e3b0_set_credit_upper_bound_nig()
1266 static void elink_ets_e3b0_nig_disabled(const struct elink_params *params, in elink_ets_e3b0_nig_disabled() argument
1269 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_nig_disabled()
1270 const uint8_t port = params->port; in elink_ets_e3b0_nig_disabled()
1342 elink_ets_e3b0_set_credit_upper_bound_nig(params, min_w_val); in elink_ets_e3b0_nig_disabled()
1350 const struct elink_params *params, in elink_ets_e3b0_set_credit_upper_bound_pbf() argument
1353 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_set_credit_upper_bound_pbf()
1356 const uint8_t port = params->port; in elink_ets_e3b0_set_credit_upper_bound_pbf()
1383 static void elink_ets_e3b0_pbf_disabled(const struct elink_params *params) in elink_ets_e3b0_pbf_disabled() argument
1385 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_pbf_disabled()
1386 const uint8_t port = params->port; in elink_ets_e3b0_pbf_disabled()
1434 elink_ets_e3b0_set_credit_upper_bound_pbf(params, min_w_val_pbf); in elink_ets_e3b0_pbf_disabled()
1441 static elink_status_t elink_ets_e3b0_disabled(const struct elink_params *params, in elink_ets_e3b0_disabled() argument
1444 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_disabled()
1452 elink_ets_e3b0_nig_disabled(params, vars); in elink_ets_e3b0_disabled()
1454 elink_ets_e3b0_pbf_disabled(params); in elink_ets_e3b0_disabled()
1464 elink_status_t elink_ets_disabled(struct elink_params *params, in elink_ets_disabled() argument
1467 struct bxe_softc *sc = params->sc; in elink_ets_disabled()
1471 elink_ets_e2e3a0_disabled(params); in elink_ets_disabled()
1473 elink_status = elink_ets_e3b0_disabled(params, vars); in elink_ets_disabled()
1487 static elink_status_t elink_ets_e3b0_cli_map(const struct elink_params *params, in elink_ets_e3b0_cli_map() argument
1492 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_cli_map()
1493 const uint8_t port = params->port; in elink_ets_e3b0_cli_map()
1594 const struct elink_params *params, in elink_ets_e3b0_get_total_bw() argument
1598 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_get_total_bw()
1607 if (!ets_params->cos[cos_idx].params.bw_params.bw) { in elink_ets_e3b0_get_total_bw()
1613 ets_params->cos[cos_idx].params.bw_params.bw in elink_ets_e3b0_get_total_bw()
1617 ets_params->cos[cos_idx].params.bw_params.bw; in elink_ets_e3b0_get_total_bw()
1654 static elink_status_t elink_ets_e3b0_sp_pri_to_cos_set(const struct elink_params *params, in elink_ets_e3b0_sp_pri_to_cos_set() argument
1658 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_sp_pri_to_cos_set()
1659 const uint8_t port = params->port; in elink_ets_e3b0_sp_pri_to_cos_set()
1736 static elink_status_t elink_ets_e3b0_sp_set_pri_cli_reg(const struct elink_params *params, in elink_ets_e3b0_sp_set_pri_cli_reg() argument
1739 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_sp_set_pri_cli_reg()
1741 const uint8_t port = params->port; in elink_ets_e3b0_sp_set_pri_cli_reg()
1829 elink_status_t elink_ets_e3b0_config(const struct elink_params *params, in elink_ets_e3b0_config() argument
1833 struct bxe_softc *sc = params->sc; in elink_ets_e3b0_config()
1835 const uint8_t port = params->port; in elink_ets_e3b0_config()
1862 elink_status = elink_ets_e3b0_get_total_bw(params, ets_params, in elink_ets_e3b0_config()
1873 elink_ets_e3b0_set_credit_upper_bound_nig(params, min_w_val_nig); in elink_ets_e3b0_config()
1874 elink_ets_e3b0_set_credit_upper_bound_pbf(params, min_w_val_pbf); in elink_ets_e3b0_config()
1886 ets_params->cos[cos_entry].params.bw_params.bw, in elink_ets_e3b0_config()
1893 params, in elink_ets_e3b0_config()
1895 ets_params->cos[cos_entry].params.sp_params.pri, in elink_ets_e3b0_config()
1911 elink_status = elink_ets_e3b0_sp_set_pri_cli_reg(params, in elink_ets_e3b0_config()
1921 elink_status = elink_ets_e3b0_cli_map(params, ets_params, in elink_ets_e3b0_config()
1931 static void elink_ets_bw_limit_common(const struct elink_params *params) in elink_ets_bw_limit_common() argument
1934 struct bxe_softc *sc = params->sc; in elink_ets_bw_limit_common()
1975 void elink_ets_bw_limit(const struct elink_params *params, const uint32_t cos0_bw, in elink_ets_bw_limit() argument
1979 struct bxe_softc *sc = params->sc; in elink_ets_bw_limit()
1998 elink_ets_bw_limit_common(params); in elink_ets_bw_limit()
2007 elink_status_t elink_ets_strict(const struct elink_params *params, const uint8_t strict_cos) in elink_ets_strict() argument
2010 struct bxe_softc *sc = params->sc; in elink_ets_strict()
2050 static void elink_update_pfc_xmac(struct elink_params *params, in elink_update_pfc_xmac() argument
2054 struct bxe_softc *sc = params->sc; in elink_update_pfc_xmac()
2059 xmac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0; in elink_update_pfc_xmac()
2067 if (!(params->feature_config_flags & in elink_update_pfc_xmac()
2100 ((params->mac_addr[2] << 24) | in elink_update_pfc_xmac()
2101 (params->mac_addr[3] << 16) | in elink_update_pfc_xmac()
2102 (params->mac_addr[4] << 8) | in elink_update_pfc_xmac()
2103 (params->mac_addr[5]))); in elink_update_pfc_xmac()
2105 ((params->mac_addr[0] << 8) | in elink_update_pfc_xmac()
2106 (params->mac_addr[1]))); in elink_update_pfc_xmac()
2112 static void elink_emac_get_pfc_stat(struct elink_params *params, in elink_emac_get_pfc_stat() argument
2117 struct bxe_softc *sc = params->sc; in elink_emac_get_pfc_stat()
2118 uint32_t emac_base = params->port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; in elink_emac_get_pfc_stat()
2144 void elink_pfc_statistic(struct elink_params *params, struct elink_vars *vars, in elink_pfc_statistic() argument
2149 struct bxe_softc *sc = params->sc; in elink_pfc_statistic()
2158 elink_emac_get_pfc_stat(params, pfc_frames_sent, in elink_pfc_statistic()
2196 struct elink_params *params) in elink_set_mdio_emac_per_phy() argument
2200 for (phy_index = ELINK_INT_PHY; phy_index < params->num_phys; in elink_set_mdio_emac_per_phy()
2202 elink_set_mdio_clk(sc, params->chip_id, in elink_set_mdio_emac_per_phy()
2203 params->phy[phy_index].mdio_ctrl); in elink_set_mdio_emac_per_phy()
2219 static void elink_emac_init(struct elink_params *params, in elink_emac_init() argument
2223 struct bxe_softc *sc = params->sc; in elink_emac_init()
2224 uint8_t port = params->port; in elink_emac_init()
2251 elink_set_mdio_emac_per_phy(sc, params); in elink_emac_init()
2253 val = ((params->mac_addr[0] << 8) | in elink_emac_init()
2254 params->mac_addr[1]); in elink_emac_init()
2257 val = ((params->mac_addr[2] << 24) | in elink_emac_init()
2258 (params->mac_addr[3] << 16) | in elink_emac_init()
2259 (params->mac_addr[4] << 8) | in elink_emac_init()
2260 params->mac_addr[5]); in elink_emac_init()
2264 static void elink_set_xumac_nig(struct elink_params *params, in elink_set_xumac_nig() argument
2268 struct bxe_softc *sc = params->sc; in elink_set_xumac_nig()
2270 REG_WR(sc, params->port ? NIG_REG_P1_MAC_IN_EN : NIG_REG_P0_MAC_IN_EN, in elink_set_xumac_nig()
2272 REG_WR(sc, params->port ? NIG_REG_P1_MAC_OUT_EN : NIG_REG_P0_MAC_OUT_EN, in elink_set_xumac_nig()
2274 REG_WR(sc, params->port ? NIG_REG_P1_MAC_PAUSE_OUT_EN : in elink_set_xumac_nig()
2278 static void elink_set_umac_rxtx(struct elink_params *params, uint8_t en) in elink_set_umac_rxtx() argument
2280 uint32_t umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0; in elink_set_umac_rxtx()
2282 struct bxe_softc *sc = params->sc; in elink_set_umac_rxtx()
2284 (MISC_REGISTERS_RESET_REG_2_UMAC0 << params->port))) in elink_set_umac_rxtx()
2297 static void elink_umac_enable(struct elink_params *params, in elink_umac_enable() argument
2301 uint32_t umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0; in elink_umac_enable()
2302 struct bxe_softc *sc = params->sc; in elink_umac_enable()
2305 (MISC_REGISTERS_RESET_REG_2_UMAC0 << params->port)); in elink_umac_enable()
2309 (MISC_REGISTERS_RESET_REG_2_UMAC0 << params->port)); in elink_umac_enable()
2314 REG_WR(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port*4, 1); in elink_umac_enable()
2362 ((params->mac_addr[2] << 24) | in elink_umac_enable()
2363 (params->mac_addr[3] << 16) | in elink_umac_enable()
2364 (params->mac_addr[4] << 8) | in elink_umac_enable()
2365 (params->mac_addr[5]))); in elink_umac_enable()
2367 ((params->mac_addr[0] << 8) | in elink_umac_enable()
2368 (params->mac_addr[1]))); in elink_umac_enable()
2389 elink_set_xumac_nig(params, in elink_umac_enable()
2396 static void elink_xmac_init(struct elink_params *params, uint32_t max_speed) in elink_xmac_init() argument
2398 struct bxe_softc *sc = params->sc; in elink_xmac_init()
2458 static void elink_set_xmac_rxtx(struct elink_params *params, uint8_t en) in elink_set_xmac_rxtx() argument
2460 uint8_t port = params->port; in elink_set_xmac_rxtx()
2461 struct bxe_softc *sc = params->sc; in elink_set_xmac_rxtx()
2486 static elink_status_t elink_xmac_enable(struct elink_params *params, in elink_xmac_enable() argument
2490 struct bxe_softc *sc = params->sc; in elink_xmac_enable()
2493 xmac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0; in elink_xmac_enable()
2495 elink_xmac_init(params, vars->line_speed); in elink_xmac_enable()
2504 REG_WR(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port*4, 0); in elink_xmac_enable()
2509 if (!(params->phy[ELINK_INT_PHY].flags & ELINK_FLAGS_TX_ERROR_CHECK)) { in elink_xmac_enable()
2525 elink_update_pfc_xmac(params, vars, 0); in elink_xmac_enable()
2540 (params->phy[ELINK_INT_PHY].supported & in elink_xmac_enable()
2548 elink_set_xumac_nig(params, in elink_xmac_enable()
2556 static elink_status_t elink_emac_enable(struct elink_params *params, in elink_emac_enable() argument
2559 struct bxe_softc *sc = params->sc; in elink_emac_enable()
2560 uint8_t port = params->port; in elink_emac_enable()
2594 uint32_t ser_lane = ((params->lane_config & in elink_emac_enable()
2629 if (!(params->feature_config_flags & in elink_emac_enable()
2660 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) { in elink_emac_enable()
2704 if ((params->feature_config_flags & in elink_emac_enable()
2728 static void elink_update_pfc_bmac1(struct elink_params *params, in elink_update_pfc_bmac1() argument
2732 struct bxe_softc *sc = params->sc; in elink_update_pfc_bmac1()
2733 uint32_t bmac_addr = params->port ? NIG_REG_INGRESS_BMAC1_MEM : in elink_update_pfc_bmac1()
2737 if ((!(params->feature_config_flags & in elink_update_pfc_bmac1()
2748 if (!(params->feature_config_flags & in elink_update_pfc_bmac1()
2757 static void elink_update_pfc_bmac2(struct elink_params *params, in elink_update_pfc_bmac2() argument
2765 struct bxe_softc *sc = params->sc; in elink_update_pfc_bmac2()
2766 uint32_t bmac_addr = params->port ? NIG_REG_INGRESS_BMAC1_MEM : in elink_update_pfc_bmac2()
2770 if ((!(params->feature_config_flags & in elink_update_pfc_bmac2()
2782 if (!(params->feature_config_flags & in elink_update_pfc_bmac2()
2790 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) { in elink_update_pfc_bmac2()
2819 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) in elink_update_pfc_bmac2()
2834 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) in elink_update_pfc_bmac2()
2890 static void elink_update_mng(struct elink_params *params, uint32_t link_status) in elink_update_mng() argument
2892 struct bxe_softc *sc = params->sc; in elink_update_mng()
2894 REG_WR(sc, params->shmem_base + in elink_update_mng()
2896 port_mb[params->port].link_status), link_status); in elink_update_mng()
2899 static void elink_update_link_attr(struct elink_params *params, uint32_t link_attr) in elink_update_link_attr() argument
2901 struct bxe_softc *sc = params->sc; in elink_update_link_attr()
2904 REG_WR(sc, params->shmem2_base + in elink_update_link_attr()
2906 link_attr_sync[params->port]), link_attr); in elink_update_link_attr()
2909 static void elink_update_pfc_nig(struct elink_params *params, in elink_update_pfc_nig() argument
2916 struct bxe_softc *sc = params->sc; in elink_update_pfc_nig()
2917 uint8_t port = params->port; in elink_update_pfc_nig()
2919 int set_pfc = params->feature_config_flags & in elink_update_pfc_nig()
3005 elink_status_t elink_update_pfc(struct elink_params *params, in elink_update_pfc() argument
3014 struct bxe_softc *sc = params->sc; in elink_update_pfc()
3016 uint8_t bmac_loopback = (params->loopback_mode == ELINK_LOOPBACK_BMAC); in elink_update_pfc()
3018 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) in elink_update_pfc()
3023 elink_update_mng(params, vars->link_status); in elink_update_pfc()
3026 elink_update_pfc_nig(params, vars, pfc_params); in elink_update_pfc()
3035 elink_update_pfc_xmac(params, vars, 0); in elink_update_pfc()
3039 (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << params->port)) in elink_update_pfc()
3042 elink_emac_enable(params, vars, 0); in elink_update_pfc()
3046 elink_update_pfc_bmac2(params, vars, bmac_loopback); in elink_update_pfc()
3048 elink_update_pfc_bmac1(params, vars); in elink_update_pfc()
3051 if ((params->feature_config_flags & in elink_update_pfc()
3055 REG_WR(sc, NIG_REG_BMAC0_PAUSE_OUT_EN + params->port*4, val); in elink_update_pfc()
3060 static elink_status_t elink_bmac1_enable(struct elink_params *params, in elink_bmac1_enable() argument
3064 struct bxe_softc *sc = params->sc; in elink_bmac1_enable()
3065 uint8_t port = params->port; in elink_bmac1_enable()
3080 wb_data[0] = ((params->mac_addr[2] << 24) | in elink_bmac1_enable()
3081 (params->mac_addr[3] << 16) | in elink_bmac1_enable()
3082 (params->mac_addr[4] << 8) | in elink_bmac1_enable()
3083 params->mac_addr[5]); in elink_bmac1_enable()
3084 wb_data[1] = ((params->mac_addr[0] << 8) | in elink_bmac1_enable()
3085 params->mac_addr[1]); in elink_bmac1_enable()
3103 elink_update_pfc_bmac1(params, vars); in elink_bmac1_enable()
3133 static elink_status_t elink_bmac2_enable(struct elink_params *params, in elink_bmac2_enable() argument
3137 struct bxe_softc *sc = params->sc; in elink_bmac2_enable()
3138 uint8_t port = params->port; in elink_bmac2_enable()
3159 wb_data[0] = ((params->mac_addr[2] << 24) | in elink_bmac2_enable()
3160 (params->mac_addr[3] << 16) | in elink_bmac2_enable()
3161 (params->mac_addr[4] << 8) | in elink_bmac2_enable()
3162 params->mac_addr[5]); in elink_bmac2_enable()
3163 wb_data[1] = ((params->mac_addr[0] << 8) | in elink_bmac2_enable()
3164 params->mac_addr[1]); in elink_bmac2_enable()
3193 elink_update_pfc_bmac2(params, vars, is_lb); in elink_bmac2_enable()
3198 static elink_status_t elink_bmac_enable(struct elink_params *params, in elink_bmac_enable() argument
3203 uint8_t port = params->port; in elink_bmac_enable()
3204 struct bxe_softc *sc = params->sc; in elink_bmac_enable()
3221 rc = elink_bmac2_enable(params, vars, is_lb); in elink_bmac_enable()
3223 rc = elink_bmac1_enable(params, vars, is_lb); in elink_bmac_enable()
3228 if ((params->feature_config_flags & in elink_bmac_enable()
3269 static elink_status_t elink_pbf_update(struct elink_params *params, uint32_t flow_ctrl, in elink_pbf_update() argument
3272 struct bxe_softc *sc = params->sc; in elink_pbf_update()
3273 uint8_t port = params->port; in elink_pbf_update()
3621 static uint8_t elink_eee_has_cap(struct elink_params *params) in elink_eee_has_cap() argument
3623 struct bxe_softc *sc = params->sc; in elink_eee_has_cap()
3625 if (REG_RD(sc, params->shmem2_base) <= in elink_eee_has_cap()
3626 offsetof(struct shmem2_region, eee_status[params->port])) in elink_eee_has_cap()
3672 static uint32_t elink_eee_calc_timer(struct elink_params *params) in elink_eee_calc_timer() argument
3675 struct bxe_softc *sc = params->sc; in elink_eee_calc_timer()
3677 if (params->eee_mode & ELINK_EEE_MODE_OVERRIDE_NVRAM) { in elink_eee_calc_timer()
3678 if (params->eee_mode & ELINK_EEE_MODE_OUTPUT_TIME) { in elink_eee_calc_timer()
3680 eee_idle = params->eee_mode & ELINK_EEE_MODE_TIMER_MASK; in elink_eee_calc_timer()
3683 if (elink_eee_nvram_to_time(params->eee_mode & in elink_eee_calc_timer()
3690 eee_mode = ((REG_RD(sc, params->shmem_base + in elink_eee_calc_timer()
3692 port_feature_config[params->port]. in elink_eee_calc_timer()
3704 static elink_status_t elink_eee_set_timers(struct elink_params *params, in elink_eee_set_timers() argument
3708 struct bxe_softc *sc = params->sc; in elink_eee_set_timers()
3710 eee_idle = elink_eee_calc_timer(params); in elink_eee_set_timers()
3713 REG_WR(sc, MISC_REG_CPMU_LP_IDLE_THR_P0 + (params->port << 2), in elink_eee_set_timers()
3715 } else if ((params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI) && in elink_eee_set_timers()
3716 (params->eee_mode & ELINK_EEE_MODE_OVERRIDE_NVRAM) && in elink_eee_set_timers()
3717 (params->eee_mode & ELINK_EEE_MODE_OUTPUT_TIME)) { in elink_eee_set_timers()
3723 if (params->eee_mode & ELINK_EEE_MODE_OUTPUT_TIME) { in elink_eee_set_timers()
3737 static elink_status_t elink_eee_initial_config(struct elink_params *params, in elink_eee_initial_config() argument
3743 if (params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI) in elink_eee_initial_config()
3748 if (params->eee_mode & ELINK_EEE_MODE_ADV_LPI) in elink_eee_initial_config()
3753 return elink_eee_set_timers(params, vars); in elink_eee_initial_config()
3757 struct elink_params *params, in elink_eee_disable() argument
3760 struct bxe_softc *sc = params->sc; in elink_eee_disable()
3763 REG_WR(sc, MISC_REG_CPMU_LP_FW_ENABLE_P0 + (params->port << 2), 0); in elink_eee_disable()
3773 struct elink_params *params, in elink_eee_advertise() argument
3776 struct bxe_softc *sc = params->sc; in elink_eee_advertise()
3780 REG_WR(sc, MISC_REG_CPMU_LP_MASK_EXT_P0 + (params->port << 2), 0xfc20); in elink_eee_advertise()
3799 static void elink_update_mng_eee(struct elink_params *params, uint32_t eee_status) in elink_update_mng_eee() argument
3801 struct bxe_softc *sc = params->sc; in elink_update_mng_eee()
3803 if (elink_eee_has_cap(params)) in elink_update_mng_eee()
3804 REG_WR(sc, params->shmem2_base + in elink_update_mng_eee()
3806 eee_status[params->port]), eee_status); in elink_update_mng_eee()
3810 struct elink_params *params, in elink_eee_an_resolve() argument
3813 struct bxe_softc *sc = params->sc; in elink_eee_an_resolve()
3858 static void elink_bsc_module_sel(struct elink_params *params) in elink_bsc_module_sel() argument
3863 struct bxe_softc *sc = params->sc; in elink_bsc_module_sel()
3864 uint8_t port = params->port; in elink_bsc_module_sel()
3866 board_cfg = REG_RD(sc, params->shmem_base + in elink_bsc_module_sel()
3874 sfp_ctrl = REG_RD(sc, params->shmem_base + in elink_bsc_module_sel()
3884 static elink_status_t elink_bsc_read(struct elink_params *params, in elink_bsc_read() argument
3900 if (params) in elink_bsc_read()
3901 elink_bsc_module_sel(params); in elink_bsc_read()
3989 elink_status_t elink_phy_read(struct elink_params *params, uint8_t phy_addr, in elink_phy_read() argument
3996 for (phy_index = 0; phy_index < params->num_phys; phy_index++) { in elink_phy_read()
3997 if (params->phy[phy_index].addr == phy_addr) { in elink_phy_read()
3998 return elink_cl45_read(params->sc, in elink_phy_read()
3999 ¶ms->phy[phy_index], devad, in elink_phy_read()
4006 elink_status_t elink_phy_write(struct elink_params *params, uint8_t phy_addr, in elink_phy_write() argument
4013 for (phy_index = 0; phy_index < params->num_phys; phy_index++) { in elink_phy_write()
4014 if (params->phy[phy_index].addr == phy_addr) { in elink_phy_write()
4015 return elink_cl45_write(params->sc, in elink_phy_write()
4016 ¶ms->phy[phy_index], devad, in elink_phy_write()
4023 struct elink_params *params) in elink_get_warpcore_lane() argument
4026 struct bxe_softc *sc = params->sc; in elink_get_warpcore_lane()
4031 port = params->port; in elink_get_warpcore_lane()
4076 static void elink_set_aer_mmd(struct elink_params *params, in elink_set_aer_mmd() argument
4081 struct bxe_softc *sc = params->sc; in elink_set_aer_mmd()
4082 ser_lane = ((params->lane_config & in elink_set_aer_mmd()
4090 aer_val = elink_get_warpcore_lane(phy, params); in elink_set_aer_mmd()
4147 struct elink_params *params, in elink_xgxs_specific_func() argument
4150 struct bxe_softc *sc = params->sc; in elink_xgxs_specific_func()
4154 REG_WR(sc, NIG_REG_XGXS0_CTRL_MD_ST + params->port*0x18, 0); in elink_xgxs_specific_func()
4155 REG_WR(sc, NIG_REG_XGXS0_CTRL_MD_DEVAD + params->port*0x18, in elink_xgxs_specific_func()
4161 static void elink_xgxs_deassert(struct elink_params *params) in elink_xgxs_deassert() argument
4163 struct bxe_softc *sc = params->sc; in elink_xgxs_deassert()
4167 port = params->port; in elink_xgxs_deassert()
4175 elink_xgxs_specific_func(¶ms->phy[ELINK_INT_PHY], params, in elink_xgxs_deassert()
4180 struct elink_params *params, uint16_t *ieee_fc) in elink_calc_ieee_aneg_adv() argument
4182 struct bxe_softc *sc = params->sc; in elink_calc_ieee_aneg_adv()
4190 switch (params->req_fc_auto_adv) { in elink_calc_ieee_aneg_adv()
4220 static void set_phy_vars(struct elink_params *params, in set_phy_vars() argument
4223 struct bxe_softc *sc = params->sc; in set_phy_vars()
4225 uint8_t phy_config_swapped = params->multi_phy_config & in set_phy_vars()
4227 for (phy_index = ELINK_INT_PHY; phy_index < params->num_phys; in set_phy_vars()
4237 params->phy[actual_phy_idx].req_flow_ctrl = in set_phy_vars()
4238 params->req_flow_ctrl[link_cfg_idx]; in set_phy_vars()
4240 params->phy[actual_phy_idx].req_line_speed = in set_phy_vars()
4241 params->req_line_speed[link_cfg_idx]; in set_phy_vars()
4243 params->phy[actual_phy_idx].speed_cap_mask = in set_phy_vars()
4244 params->speed_cap_mask[link_cfg_idx]; in set_phy_vars()
4246 params->phy[actual_phy_idx].req_duplex = in set_phy_vars()
4247 params->req_duplex[link_cfg_idx]; in set_phy_vars()
4249 if (params->req_line_speed[link_cfg_idx] == in set_phy_vars()
4255 params->phy[actual_phy_idx].req_flow_ctrl, in set_phy_vars()
4256 params->phy[actual_phy_idx].req_line_speed, in set_phy_vars()
4257 params->phy[actual_phy_idx].speed_cap_mask); in set_phy_vars()
4261 static void elink_ext_phy_set_pause(struct elink_params *params, in elink_ext_phy_set_pause() argument
4266 struct bxe_softc *sc = params->sc; in elink_ext_phy_set_pause()
4273 elink_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc); in elink_ext_phy_set_pause()
4317 struct elink_params *params, in elink_ext_phy_update_adv_fc() argument
4323 struct bxe_softc *sc = params->sc; in elink_ext_phy_update_adv_fc()
4328 ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_ext_phy_update_adv_fc()
4329 uint8_t lane = elink_get_warpcore_lane(phy, params); in elink_ext_phy_update_adv_fc()
4372 struct elink_params *params, in elink_ext_phy_resolve_fc() argument
4380 elink_ext_phy_update_adv_fc(phy, params, vars); in elink_ext_phy_resolve_fc()
4384 vars->flow_ctrl = params->req_fc_auto_adv; in elink_ext_phy_resolve_fc()
4387 elink_ext_phy_update_adv_fc(phy, params, vars); in elink_ext_phy_resolve_fc()
4410 struct elink_params *params, in elink_warpcore_enable_AN_KR2() argument
4413 struct bxe_softc *sc = params->sc; in elink_warpcore_enable_AN_KR2()
4445 elink_update_link_attr(params, vars->link_attr_sync); in elink_warpcore_enable_AN_KR2()
4448 static void elink_disable_kr2(struct elink_params *params, in elink_disable_kr2() argument
4452 struct bxe_softc *sc = params->sc; in elink_disable_kr2()
4478 elink_update_link_attr(params, vars->link_attr_sync); in elink_disable_kr2()
4484 struct elink_params *params) in elink_warpcore_set_lpi_passthrough() argument
4486 struct bxe_softc *sc = params->sc; in elink_warpcore_set_lpi_passthrough()
4496 struct elink_params *params) in elink_warpcore_restart_AN_KR() argument
4499 struct bxe_softc *sc = params->sc; in elink_warpcore_restart_AN_KR()
4500 uint16_t lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_restart_AN_KR()
4507 elink_set_aer_mmd(params, phy); in elink_warpcore_restart_AN_KR()
4511 struct elink_params *params, in elink_warpcore_enable_AN_KR() argument
4514 struct bxe_softc *sc = params->sc; in elink_warpcore_enable_AN_KR()
4560 elink_set_aer_mmd(params, phy); in elink_warpcore_enable_AN_KR()
4565 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_enable_AN_KR()
4592 if (REG_RD(sc, params->shmem_base + in elink_warpcore_enable_AN_KR()
4594 port_hw_config[params->port].default_cfg)) & in elink_warpcore_enable_AN_KR()
4603 elink_ext_phy_set_pause(params, phy, vars); in elink_warpcore_enable_AN_KR()
4625 elink_set_aer_mmd(params, phy); in elink_warpcore_enable_AN_KR()
4627 elink_warpcore_enable_AN_KR2(phy, params, vars); in elink_warpcore_enable_AN_KR()
4640 elink_set_aer_mmd(params, phy); in elink_warpcore_enable_AN_KR()
4642 elink_disable_kr2(params, vars, phy); in elink_warpcore_enable_AN_KR()
4646 elink_warpcore_restart_AN_KR(phy, params); in elink_warpcore_enable_AN_KR()
4650 struct elink_params *params, in elink_warpcore_set_10G_KR() argument
4653 struct bxe_softc *sc = params->sc; in elink_warpcore_set_10G_KR()
4672 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_set_10G_KR()
4689 elink_set_aer_mmd(params, phy); in elink_warpcore_set_10G_KR()
4718 struct elink_params *params, in elink_warpcore_set_10G_XFI() argument
4721 struct bxe_softc *sc = params->sc; in elink_warpcore_set_10G_XFI()
4771 cfg_tap_val = REG_RD(sc, params->shmem_base + in elink_warpcore_set_10G_XFI()
4773 port_hw_config[params->port]. in elink_warpcore_set_10G_XFI()
4800 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_set_10G_XFI()
4816 elink_warpcore_set_lpi_passthrough(phy, params); in elink_warpcore_set_10G_XFI()
4832 struct elink_params *params) in elink_warpcore_set_20G_force_KR2() argument
4835 struct bxe_softc *sc = params->sc; in elink_warpcore_set_20G_force_KR2()
4844 elink_set_aer_mmd(params, phy); in elink_warpcore_set_20G_force_KR2()
4881 elink_set_aer_mmd(params, phy); in elink_warpcore_set_20G_force_KR2()
4939 struct elink_params *params, in elink_warpcore_set_sgmii_speed() argument
4943 struct bxe_softc *sc = params->sc; in elink_warpcore_set_sgmii_speed()
4950 elink_warpcore_set_lpi_passthrough(phy, params); in elink_warpcore_set_sgmii_speed()
5041 struct elink_params *params, in elink_warpcore_clear_regs() argument
5044 struct bxe_softc *sc = params->sc; in elink_warpcore_clear_regs()
5070 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_clear_regs()
5116 struct elink_params *params) in elink_is_sfp_module_plugged() argument
5118 struct bxe_softc *sc = params->sc; in elink_is_sfp_module_plugged()
5121 if (elink_get_mod_abs_int_cfg(sc, params->chip_id, in elink_is_sfp_module_plugged()
5122 params->shmem_base, params->port, in elink_is_sfp_module_plugged()
5134 struct elink_params *params) in elink_warpcore_get_sigdet() argument
5137 struct bxe_softc *sc = params->sc; in elink_warpcore_get_sigdet()
5139 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_get_sigdet()
5148 struct elink_params *params, in elink_warpcore_config_runtime() argument
5151 struct bxe_softc *sc = params->sc; in elink_warpcore_config_runtime()
5161 uint16_t lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_config_runtime()
5162 serdes_net_if = (REG_RD(sc, params->shmem_base + in elink_warpcore_config_runtime()
5164 port_hw_config[params->port].default_cfg)) & in elink_warpcore_config_runtime()
5201 struct elink_params *params) in elink_warpcore_config_sfi() argument
5203 uint16_t lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_config_sfi()
5204 struct bxe_softc *sc = params->sc; in elink_warpcore_config_sfi()
5205 elink_warpcore_clear_regs(phy, params, lane); in elink_warpcore_config_sfi()
5206 if ((params->req_line_speed[ELINK_LINK_CONFIG_IDX(ELINK_INT_PHY)] == in elink_warpcore_config_sfi()
5210 elink_warpcore_set_10G_XFI(phy, params, 0); in elink_warpcore_config_sfi()
5213 elink_warpcore_set_sgmii_speed(phy, params, 1, 0); in elink_warpcore_config_sfi()
5217 static void elink_sfp_e3_set_transmitter(struct elink_params *params, in elink_sfp_e3_set_transmitter() argument
5221 struct bxe_softc *sc = params->sc; in elink_sfp_e3_set_transmitter()
5223 uint8_t port = params->port; in elink_sfp_e3_set_transmitter()
5225 cfg_pin = REG_RD(sc, params->shmem_base + in elink_sfp_e3_set_transmitter()
5239 struct elink_params *params, in elink_warpcore_config_init() argument
5242 struct bxe_softc *sc = params->sc; in elink_warpcore_config_init()
5245 uint16_t lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_config_init()
5246 serdes_net_if = (REG_RD(sc, params->shmem_base + in elink_warpcore_config_init()
5248 port_hw_config[params->port].default_cfg)) & in elink_warpcore_config_init()
5253 elink_set_aer_mmd(params, phy); in elink_warpcore_config_init()
5262 elink_warpcore_clear_regs(phy, params, lane); in elink_warpcore_config_init()
5263 elink_warpcore_set_sgmii_speed(phy, params, 0, 1); in elink_warpcore_config_init()
5268 if (params->loopback_mode != ELINK_LOOPBACK_EXT) in elink_warpcore_config_init()
5269 elink_warpcore_enable_AN_KR(phy, params, vars); in elink_warpcore_config_init()
5272 elink_warpcore_set_10G_KR(phy, params, vars); in elink_warpcore_config_init()
5277 elink_warpcore_clear_regs(phy, params, lane); in elink_warpcore_config_init()
5280 elink_warpcore_set_10G_XFI(phy, params, 1); in elink_warpcore_config_init()
5282 if (ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_warpcore_config_init()
5290 params, in elink_warpcore_config_init()
5302 if ((params->loopback_mode == ELINK_LOOPBACK_NONE) || in elink_warpcore_config_init()
5303 (params->loopback_mode == ELINK_LOOPBACK_EXT)) { in elink_warpcore_config_init()
5304 if (elink_is_sfp_module_plugged(phy, params)) in elink_warpcore_config_init()
5305 elink_sfp_module_detection(phy, params); in elink_warpcore_config_init()
5307 elink_sfp_e3_set_transmitter(params, in elink_warpcore_config_init()
5311 elink_warpcore_config_sfi(phy, params); in elink_warpcore_config_init()
5323 elink_sfp_module_detection(phy, params); in elink_warpcore_config_init()
5326 if (!params->loopback_mode) { in elink_warpcore_config_init()
5327 elink_warpcore_enable_AN_KR(phy, params, vars); in elink_warpcore_config_init()
5330 elink_warpcore_set_20G_force_KR2(phy, params); in elink_warpcore_config_init()
5347 struct elink_params *params) in elink_warpcore_link_reset() argument
5349 struct bxe_softc *sc = params->sc; in elink_warpcore_link_reset()
5351 elink_sfp_e3_set_transmitter(params, phy, 0); in elink_warpcore_link_reset()
5352 elink_set_mdio_emac_per_phy(sc, params); in elink_warpcore_link_reset()
5353 elink_set_aer_mmd(params, phy); in elink_warpcore_link_reset()
5375 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_link_reset()
5397 elink_set_aer_mmd(params, phy); in elink_warpcore_link_reset()
5402 struct elink_params *params) in elink_set_warpcore_loopback() argument
5404 struct bxe_softc *sc = params->sc; in elink_set_warpcore_loopback()
5408 params->loopback_mode, phy->req_line_speed); in elink_set_warpcore_loopback()
5422 lane = elink_get_warpcore_lane(phy, params); in elink_set_warpcore_loopback()
5433 elink_set_aer_mmd(params, phy); in elink_set_warpcore_loopback()
5446 static void elink_sync_link(struct elink_params *params, in elink_sync_link() argument
5449 struct bxe_softc *sc = params->sc; in elink_sync_link()
5552 void elink_link_status_update(struct elink_params *params, in elink_link_status_update() argument
5555 struct bxe_softc *sc = params->sc; in elink_link_status_update()
5556 uint8_t port = params->port; in elink_link_status_update()
5559 set_phy_vars(params, vars); in elink_link_status_update()
5561 vars->link_status = REG_RD(sc, params->shmem_base + in elink_link_status_update()
5566 if (params->loopback_mode != ELINK_LOOPBACK_NONE && in elink_link_status_update()
5567 params->loopback_mode != ELINK_LOOPBACK_EXT) in elink_link_status_update()
5570 if (elink_eee_has_cap(params)) in elink_link_status_update()
5571 vars->eee_status = REG_RD(sc, params->shmem2_base + in elink_link_status_update()
5573 eee_status[params->port])); in elink_link_status_update()
5576 elink_sync_link(params, vars); in elink_link_status_update()
5578 sync_offset = params->shmem_base + in elink_link_status_update()
5583 params->phy[ELINK_INT_PHY].media_type = in elink_link_status_update()
5586 params->phy[ELINK_EXT_PHY1].media_type = in elink_link_status_update()
5589 params->phy[ELINK_EXT_PHY2].media_type = in elink_link_status_update()
5595 sync_offset = params->shmem_base + in elink_link_status_update()
5603 params->feature_config_flags |= in elink_link_status_update()
5606 params->feature_config_flags &= in elink_link_status_update()
5611 link_attr_sync[params->port]); in elink_link_status_update()
5619 static void elink_set_master_ln(struct elink_params *params, in elink_set_master_ln() argument
5622 struct bxe_softc *sc = params->sc; in elink_set_master_ln()
5624 ser_lane = ((params->lane_config & in elink_set_master_ln()
5640 static elink_status_t elink_reset_unicore(struct elink_params *params, in elink_reset_unicore() argument
5644 struct bxe_softc *sc = params->sc; in elink_reset_unicore()
5658 elink_set_serdes_access(sc, params->port); in elink_reset_unicore()
5676 …elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port); // "Warning: PHY was not ini… in elink_reset_unicore()
5684 static void elink_set_swap_lanes(struct elink_params *params, in elink_set_swap_lanes() argument
5687 struct bxe_softc *sc = params->sc; in elink_set_swap_lanes()
5693 rx_lane_swap = ((params->lane_config & in elink_set_swap_lanes()
5696 tx_lane_swap = ((params->lane_config & in elink_set_swap_lanes()
5727 struct elink_params *params) in elink_set_parallel_detection() argument
5729 struct bxe_softc *sc = params->sc; in elink_set_parallel_detection()
5780 struct elink_params *params, in elink_set_autoneg() argument
5784 struct bxe_softc *sc = params->sc; in elink_set_autoneg()
5884 struct elink_params *params, in elink_program_serdes() argument
5887 struct bxe_softc *sc = params->sc; in elink_program_serdes()
5933 struct elink_params *params) in elink_set_brcm_cl37_advertisement() argument
5935 struct bxe_softc *sc = params->sc; in elink_set_brcm_cl37_advertisement()
5953 struct elink_params *params, in elink_set_ieee_aneg_advertisement() argument
5956 struct bxe_softc *sc = params->sc; in elink_set_ieee_aneg_advertisement()
5974 struct elink_params *params, in elink_restart_autoneg() argument
5977 struct bxe_softc *sc = params->sc; in elink_restart_autoneg()
6014 struct elink_params *params, in elink_initialize_sgmii_process() argument
6017 struct bxe_softc *sc = params->sc; in elink_initialize_sgmii_process()
6079 elink_restart_autoneg(phy, params, 0); in elink_initialize_sgmii_process()
6086 struct elink_params *params) in elink_direct_parallel_detect_used() argument
6088 struct bxe_softc *sc = params->sc; in elink_direct_parallel_detect_used()
6102 params->port); in elink_direct_parallel_detect_used()
6113 params->port); in elink_direct_parallel_detect_used()
6120 struct elink_params *params, in elink_update_adv_fc() argument
6127 struct bxe_softc *sc = params->sc; in elink_update_adv_fc()
6167 struct elink_params *params, in elink_flow_ctrl_resolve() argument
6171 struct bxe_softc *sc = params->sc; in elink_flow_ctrl_resolve()
6178 elink_update_adv_fc(phy, params, vars, gp_status); in elink_flow_ctrl_resolve()
6182 vars->flow_ctrl = params->req_fc_auto_adv; in elink_flow_ctrl_resolve()
6185 if (elink_direct_parallel_detect_used(phy, params)) { in elink_flow_ctrl_resolve()
6186 vars->flow_ctrl = params->req_fc_auto_adv; in elink_flow_ctrl_resolve()
6189 elink_update_adv_fc(phy, params, vars, gp_status); in elink_flow_ctrl_resolve()
6195 struct elink_params *params) in elink_check_fallback_to_cl37() argument
6197 struct bxe_softc *sc = params->sc; in elink_check_fallback_to_cl37()
6258 elink_restart_autoneg(phy, params, 0); in elink_check_fallback_to_cl37()
6263 struct elink_params *params, in elink_xgxs_an_resolve() argument
6271 if (elink_direct_parallel_detect_used(phy, params)) in elink_xgxs_an_resolve()
6276 struct elink_params *params, in elink_get_link_speed_duplex() argument
6282 struct bxe_softc *sc = params->sc; in elink_get_link_speed_duplex()
6367 struct elink_params *params, in elink_link_settings_status() argument
6370 struct bxe_softc *sc = params->sc; in elink_link_settings_status()
6387 rc = elink_get_link_speed_duplex(phy, params, vars, link_up, speed_mask, in elink_link_settings_status()
6393 if (ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_link_settings_status()
6395 elink_flow_ctrl_resolve(phy, params, vars, gp_status); in elink_link_settings_status()
6397 elink_xgxs_an_resolve(phy, params, vars, in elink_link_settings_status()
6402 ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_link_settings_status()
6404 elink_check_fallback_to_cl37(phy, params); in elink_link_settings_status()
6409 if (ELINK_SINGLE_MEDIA_DIRECT(params) && in elink_link_settings_status()
6441 struct elink_params *params, in elink_warpcore_read_status() argument
6444 struct bxe_softc *sc = params->sc; in elink_warpcore_read_status()
6448 lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_read_status()
6450 if ((params->loopback_mode) && in elink_warpcore_read_status()
6468 elink_ext_phy_resolve_fc(phy, params, vars); in elink_warpcore_read_status()
6487 if (link_up && ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_warpcore_read_status()
6506 elink_ext_phy_resolve_fc(phy, params, vars); in elink_warpcore_read_status()
6512 ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_warpcore_read_status()
6554 rc = elink_get_link_speed_duplex(phy, params, vars, link_up, gp_speed, in elink_warpcore_read_status()
6566 static void elink_set_gmii_tx_driver(struct elink_params *params) in elink_set_gmii_tx_driver() argument
6568 struct bxe_softc *sc = params->sc; in elink_set_gmii_tx_driver()
6569 struct elink_phy *phy = ¶ms->phy[ELINK_INT_PHY]; in elink_set_gmii_tx_driver()
6605 static elink_status_t elink_emac_program(struct elink_params *params, in elink_emac_program() argument
6608 struct bxe_softc *sc = params->sc; in elink_emac_program()
6609 uint8_t port = params->port; in elink_emac_program()
6648 elink_set_led(params, vars, ELINK_LED_MODE_OPER, vars->line_speed); in elink_emac_program()
6653 struct elink_params *params) in elink_set_preemphasis() argument
6657 struct bxe_softc *sc = params->sc; in elink_set_preemphasis()
6677 struct elink_params *params, in elink_xgxs_config_init() argument
6680 struct bxe_softc *sc = params->sc; in elink_xgxs_config_init()
6681 uint8_t enable_cl73 = (ELINK_SINGLE_MEDIA_DIRECT(params) || in elink_xgxs_config_init()
6682 (params->loopback_mode == ELINK_LOOPBACK_XGXS)); in elink_xgxs_config_init()
6684 if (ELINK_SINGLE_MEDIA_DIRECT(params) && in elink_xgxs_config_init()
6685 (params->feature_config_flags & in elink_xgxs_config_init()
6687 elink_set_preemphasis(phy, params); in elink_xgxs_config_init()
6691 (ELINK_SINGLE_MEDIA_DIRECT(params) && in elink_xgxs_config_init()
6692 params->loopback_mode == ELINK_LOOPBACK_EXT)) { in elink_xgxs_config_init()
6696 elink_set_autoneg(phy, params, vars, 0); in elink_xgxs_config_init()
6699 elink_program_serdes(phy, params, vars); in elink_xgxs_config_init()
6705 elink_set_brcm_cl37_advertisement(phy, params); in elink_xgxs_config_init()
6708 elink_set_ieee_aneg_advertisement(phy, params, in elink_xgxs_config_init()
6712 elink_set_autoneg(phy, params, vars, enable_cl73); in elink_xgxs_config_init()
6715 elink_restart_autoneg(phy, params, enable_cl73); in elink_xgxs_config_init()
6721 elink_initialize_sgmii_process(phy, params, vars); in elink_xgxs_config_init()
6726 struct elink_params *params, in elink_prepare_xgxs() argument
6744 elink_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc); in elink_prepare_xgxs()
6745 elink_set_aer_mmd(params, phy); in elink_prepare_xgxs()
6747 elink_set_master_ln(params, phy); in elink_prepare_xgxs()
6749 rc = elink_reset_unicore(params, phy, 0); in elink_prepare_xgxs()
6754 elink_set_aer_mmd(params, phy); in elink_prepare_xgxs()
6757 elink_set_master_ln(params, phy); in elink_prepare_xgxs()
6758 elink_set_swap_lanes(params, phy); in elink_prepare_xgxs()
6766 struct elink_params *params) in elink_wait_reset_complete() argument
6784 …elink_cb_event_log(sc, ELINK_LOG_ID_PHY_UNINITIALIZED, params->port); // "Warning: PHY was not ini… in elink_wait_reset_complete()
6791 static void elink_link_int_enable(struct elink_params *params) in elink_link_int_enable() argument
6793 uint8_t port = params->port; in elink_link_int_enable()
6795 struct bxe_softc *sc = params->sc; in elink_link_int_enable()
6800 if (!(ELINK_SINGLE_MEDIA_DIRECT(params))) in elink_link_int_enable()
6802 } else if (params->switch_cfg == ELINK_SWITCH_CFG_10G) { in elink_link_int_enable()
6806 if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) && in elink_link_int_enable()
6807 params->phy[ELINK_INT_PHY].type != in elink_link_int_enable()
6816 if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) && in elink_link_int_enable()
6817 params->phy[ELINK_INT_PHY].type != in elink_link_int_enable()
6828 (params->switch_cfg == ELINK_SWITCH_CFG_10G), in elink_link_int_enable()
6873 static void elink_link_int_ack(struct elink_params *params, in elink_link_int_ack() argument
6876 struct bxe_softc *sc = params->sc; in elink_link_int_ack()
6877 uint8_t port = params->port; in elink_link_int_ack()
6892 else if (params->switch_cfg == ELINK_SWITCH_CFG_10G) { in elink_link_int_ack()
6897 ((params->lane_config & in elink_link_int_ack()
6959 elink_status_t elink_get_ext_phy_fw_version(struct elink_params *params, uint8_t *version, in elink_get_ext_phy_fw_version() argument
6967 if (version == NULL || params == NULL) in elink_get_ext_phy_fw_version()
6969 sc = params->sc; in elink_get_ext_phy_fw_version()
6973 spirom_ver = REG_RD(sc, params->phy[ELINK_EXT_PHY1].ver_addr); in elink_get_ext_phy_fw_version()
6975 if (params->phy[ELINK_EXT_PHY1].format_fw_ver) { in elink_get_ext_phy_fw_version()
6976 status |= params->phy[ELINK_EXT_PHY1].format_fw_ver(spirom_ver, in elink_get_ext_phy_fw_version()
6981 if ((params->num_phys == ELINK_MAX_PHYS) && in elink_get_ext_phy_fw_version()
6982 (params->phy[ELINK_EXT_PHY2].ver_addr != 0)) { in elink_get_ext_phy_fw_version()
6983 spirom_ver = REG_RD(sc, params->phy[ELINK_EXT_PHY2].ver_addr); in elink_get_ext_phy_fw_version()
6984 if (params->phy[ELINK_EXT_PHY2].format_fw_ver) { in elink_get_ext_phy_fw_version()
6988 status |= params->phy[ELINK_EXT_PHY2].format_fw_ver( in elink_get_ext_phy_fw_version()
7000 struct elink_params *params) in elink_set_xgxs_loopback() argument
7002 uint8_t port = params->port; in elink_set_xgxs_loopback()
7003 struct bxe_softc *sc = params->sc; in elink_set_xgxs_loopback()
7032 elink_set_aer_mmd(params, phy); in elink_set_xgxs_loopback()
7054 elink_status_t elink_set_led(struct elink_params *params, in elink_set_led() argument
7057 uint8_t port = params->port; in elink_set_led()
7058 uint16_t hw_led_mode = params->hw_led_mode; in elink_set_led()
7063 struct bxe_softc *sc = params->sc; in elink_set_led()
7069 if (params->phy[phy_idx].set_link_led) { in elink_set_led()
7070 params->phy[phy_idx].set_link_led( in elink_set_led()
7071 ¶ms->phy[phy_idx], params, mode); in elink_set_led()
7075 if (params->feature_config_flags & in elink_set_led()
7088 if (params->phy[ELINK_EXT_PHY1].type == in elink_set_led()
7106 if (((params->phy[ELINK_EXT_PHY1].type == in elink_set_led()
7108 (params->phy[ELINK_EXT_PHY1].type == in elink_set_led()
7110 CHIP_IS_E2(sc) && params->num_phys == 2) { in elink_set_led()
7128 } else if (ELINK_SINGLE_MEDIA_DIRECT(params)) { in elink_set_led()
7144 } else if ((params->phy[ELINK_EXT_PHY1].type == in elink_set_led()
7156 uint32_t nig_led_mode = ((params->hw_led_mode << in elink_set_led()
7207 elink_status_t elink_test_link(struct elink_params *params, struct elink_vars *vars, in elink_test_link() argument
7210 struct bxe_softc *sc = params->sc; in elink_test_link()
7214 struct elink_phy *int_phy = ¶ms->phy[ELINK_INT_PHY]; in elink_test_link()
7226 if (params->req_line_speed[ELINK_LINK_CONFIG_IDX(ELINK_INT_PHY)] in elink_test_link()
7236 uint8_t lane = elink_get_warpcore_lane(int_phy, params); in elink_test_link()
7256 if (params->loopback_mode == ELINK_LOOPBACK_XGXS) in elink_test_link()
7259 switch (params->num_phys) { in elink_test_link()
7264 ext_phy_link_up = params->phy[ELINK_EXT_PHY1].read_status( in elink_test_link()
7265 ¶ms->phy[ELINK_EXT_PHY1], in elink_test_link()
7266 params, &temp_vars); in elink_test_link()
7269 for (phy_index = ELINK_EXT_PHY1; phy_index < params->num_phys; in elink_test_link()
7271 serdes_phy_type = ((params->phy[phy_index].media_type == in elink_test_link()
7273 (params->phy[phy_index].media_type == in elink_test_link()
7275 (params->phy[phy_index].media_type == in elink_test_link()
7277 (params->phy[phy_index].media_type == in elink_test_link()
7282 if (params->phy[phy_index].read_status) { in elink_test_link()
7284 params->phy[phy_index].read_status( in elink_test_link()
7285 ¶ms->phy[phy_index], in elink_test_link()
7286 params, &temp_vars); in elink_test_link()
7296 static elink_status_t elink_link_initialize(struct elink_params *params, in elink_link_initialize() argument
7301 struct bxe_softc *sc = params->sc; in elink_link_initialize()
7307 vars->line_speed = params->phy[ELINK_INT_PHY].req_line_speed; in elink_link_initialize()
7314 elink_prepare_xgxs(¶ms->phy[ELINK_INT_PHY], params, vars); in elink_link_initialize()
7316 non_ext_phy = (ELINK_SINGLE_MEDIA_DIRECT(params) || in elink_link_initialize()
7317 (params->loopback_mode == ELINK_LOOPBACK_XGXS)); in elink_link_initialize()
7320 (params->phy[ELINK_EXT_PHY1].flags & ELINK_FLAGS_INIT_XGXS_FIRST) || in elink_link_initialize()
7321 (params->loopback_mode == ELINK_LOOPBACK_EXT_PHY)) { in elink_link_initialize()
7322 struct elink_phy *phy = ¶ms->phy[ELINK_INT_PHY]; in elink_link_initialize()
7326 elink_set_parallel_detection(phy, params); in elink_link_initialize()
7327 if (params->phy[ELINK_INT_PHY].config_init) in elink_link_initialize()
7328 params->phy[ELINK_INT_PHY].config_init(phy, params, vars); in elink_link_initialize()
7334 vars->line_speed = params->phy[ELINK_INT_PHY].req_line_speed; in elink_link_initialize()
7338 if (params->phy[ELINK_INT_PHY].supported & in elink_link_initialize()
7342 for (phy_index = ELINK_EXT_PHY1; phy_index < params->num_phys; in elink_link_initialize()
7349 if (params->phy[phy_index].supported & in elink_link_initialize()
7354 (elink_phy_selection(params) == in elink_link_initialize()
7360 params->phy[phy_index].config_init( in elink_link_initialize()
7361 ¶ms->phy[phy_index], in elink_link_initialize()
7362 params, vars); in elink_link_initialize()
7367 params->port*4, in elink_link_initialize()
7376 struct elink_params *params) in elink_int_link_reset() argument
7379 REG_WR(params->sc, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, in elink_int_link_reset()
7380 (0x1ff << (params->port*16))); in elink_int_link_reset()
7384 struct elink_params *params) in elink_common_ext_link_reset() argument
7386 struct bxe_softc *sc = params->sc; in elink_common_ext_link_reset()
7392 gpio_port = params->port; in elink_common_ext_link_reset()
7402 static elink_status_t elink_update_link_down(struct elink_params *params, in elink_update_link_down() argument
7405 struct bxe_softc *sc = params->sc; in elink_update_link_down()
7406 uint8_t port = params->port; in elink_update_link_down()
7409 elink_set_led(params, vars, ELINK_LED_MODE_OFF, 0); in elink_update_link_down()
7417 elink_update_mng(params, vars->link_status); in elink_update_link_down()
7430 elink_set_bmac_rx(sc, params->chip_id, params->port, 0); in elink_update_link_down()
7434 REG_WR(sc, MISC_REG_CPMU_LP_FW_ENABLE_P0 + (params->port << 2), in elink_update_link_down()
7436 REG_WR(sc, MISC_REG_CPMU_LP_MASK_ENT_P0 + (params->port << 2), in elink_update_link_down()
7441 elink_update_mng_eee(params, vars->eee_status); in elink_update_link_down()
7442 elink_set_xmac_rxtx(params, 0); in elink_update_link_down()
7443 elink_set_umac_rxtx(params, 0); in elink_update_link_down()
7449 static elink_status_t elink_update_link_up(struct elink_params *params, in elink_update_link_up() argument
7453 struct bxe_softc *sc = params->sc; in elink_update_link_up()
7454 uint8_t phy_idx, port = params->port; in elink_update_link_up()
7470 if (elink_xmac_enable(params, vars, 0) == in elink_update_link_up()
7478 elink_umac_enable(params, vars, 0); in elink_update_link_up()
7479 elink_set_led(params, vars, in elink_update_link_up()
7486 (params->port << 2), 1); in elink_update_link_up()
7489 (params->port << 2), 0xfc20); in elink_update_link_up()
7495 if (elink_bmac_enable(params, vars, 0, 1) == in elink_update_link_up()
7503 elink_set_led(params, vars, in elink_update_link_up()
7506 rc = elink_emac_program(params, vars); in elink_update_link_up()
7507 elink_emac_enable(params, vars, 0); in elink_update_link_up()
7513 ELINK_SINGLE_MEDIA_DIRECT(params)) in elink_update_link_up()
7514 elink_set_gmii_tx_driver(params); in elink_update_link_up()
7520 rc |= elink_pbf_update(params, vars->flow_ctrl, in elink_update_link_up()
7527 elink_update_mng(params, vars->link_status); in elink_update_link_up()
7528 elink_update_mng_eee(params, vars->eee_status); in elink_update_link_up()
7531 if (params->phy[phy_idx].flags & ELINK_FLAGS_TX_ERROR_CHECK) { in elink_update_link_up()
7532 elink_check_half_open_conn(params, vars, 0); in elink_update_link_up()
7551 elink_status_t elink_link_update(struct elink_params *params, struct elink_vars *vars) in elink_link_update() argument
7553 struct bxe_softc *sc = params->sc; in elink_link_update()
7555 uint8_t port = params->port; in elink_link_update()
7564 for (phy_index = ELINK_INT_PHY; phy_index < params->num_phys; in elink_link_update()
7578 elink_set_aer_mmd(params, ¶ms->phy[ELINK_INT_PHY]); in elink_link_update()
7606 for (phy_index = ELINK_EXT_PHY1; phy_index < params->num_phys; in elink_link_update()
7608 struct elink_phy *phy = ¶ms->phy[phy_index]; in elink_link_update()
7612 cur_link_up = phy->read_status(phy, params, in elink_link_update()
7627 switch (elink_phy_selection(params)) { in elink_link_update()
7653 params->multi_phy_config); in elink_link_update()
7666 if (params->phy[ELINK_INT_PHY].read_status) in elink_link_update()
7667 params->phy[ELINK_INT_PHY].read_status( in elink_link_update()
7668 ¶ms->phy[ELINK_INT_PHY], in elink_link_update()
7669 params, vars); in elink_link_update()
7688 if (params->phy[ELINK_EXT_PHY2].phy_specific_func) { in elink_link_update()
7691 params->phy[ELINK_EXT_PHY2].phy_specific_func( in elink_link_update()
7692 ¶ms->phy[ELINK_EXT_PHY2], in elink_link_update()
7693 params, ELINK_DISABLE_TX); in elink_link_update()
7699 if (params->phy[active_external_phy].supported & in elink_link_update()
7711 for (phy_index = ELINK_EXT_PHY1; phy_index < params->num_phys; in elink_link_update()
7713 if (params->phy[phy_index].flags & in elink_link_update()
7730 if (!(ELINK_SINGLE_MEDIA_DIRECT(params)) && ext_phy_link_up && in elink_link_update()
7738 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, in elink_link_update()
7747 elink_link_int_ack(params, vars, link_10g_plus); in elink_link_update()
7756 if (!(ELINK_SINGLE_MEDIA_DIRECT(params))) { in elink_link_update()
7760 params->phy[ELINK_EXT_PHY1].flags & in elink_link_update()
7762 if (!(params->phy[ELINK_EXT_PHY1].flags & in elink_link_update()
7771 if (params->phy[ELINK_INT_PHY].config_init) in elink_link_update()
7772 params->phy[ELINK_INT_PHY].config_init( in elink_link_update()
7773 ¶ms->phy[ELINK_INT_PHY], params, in elink_link_update()
7782 ELINK_SINGLE_MEDIA_DIRECT(params)) && in elink_link_update()
7786 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) in elink_link_update()
7792 rc = elink_update_link_up(params, vars, link_10g_plus); in elink_link_update()
7794 rc = elink_update_link_down(params, vars); in elink_link_update()
7797 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_BC_SUPPORTS_AFEX) in elink_link_update()
7860 struct elink_params *params, in elink_8073_resolve_fc() argument
7863 struct bxe_softc *sc = params->sc; in elink_8073_resolve_fc()
7870 if (elink_ext_phy_resolve_fc(phy, params, vars) && in elink_8073_resolve_fc()
8068 static void elink_8073_set_pause_cl37(struct elink_params *params, in elink_8073_set_pause_cl37() argument
8073 struct bxe_softc *sc = params->sc; in elink_8073_set_pause_cl37()
8079 elink_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc); in elink_8073_set_pause_cl37()
8104 struct elink_params *params, in elink_8073_specific_func() argument
8107 struct bxe_softc *sc = params->sc; in elink_8073_specific_func()
8120 struct elink_params *params, in elink_8073_config_init() argument
8123 struct bxe_softc *sc = params->sc; in elink_8073_config_init()
8131 gpio_port = params->port; in elink_8073_config_init()
8139 elink_8073_specific_func(phy, params, ELINK_PHY_INIT); in elink_8073_config_init()
8140 elink_8073_set_pause_cl37(params, phy, vars); in elink_8073_config_init()
8151 if (params->lane_config & PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED) { in elink_8073_config_init()
8166 if (REG_RD(sc, params->shmem_base + in elink_8073_config_init()
8168 port_hw_config[params->port].default_cfg)) & in elink_8073_config_init()
8179 if (params->loopback_mode == ELINK_LOOPBACK_EXT) { in elink_8073_config_init()
8257 elink_ext_phy_set_pause(params, phy, vars); in elink_8073_config_init()
8268 struct elink_params *params, in elink_8073_read_status() argument
8271 struct bxe_softc *sc = params->sc; in elink_8073_read_status()
8352 params->port); in elink_8073_read_status()
8357 params->port); in elink_8073_read_status()
8362 params->port); in elink_8073_read_status()
8366 params->port); in elink_8073_read_status()
8371 if (params->lane_config & in elink_8073_read_status()
8393 elink_8073_resolve_fc(phy, params, vars); in elink_8073_read_status()
8413 struct elink_params *params) in elink_8073_link_reset() argument
8415 struct bxe_softc *sc = params->sc; in elink_8073_link_reset()
8420 gpio_port = params->port; in elink_8073_link_reset()
8432 struct elink_params *params, in elink_8705_config_init() argument
8435 struct bxe_softc *sc = params->sc; in elink_8705_config_init()
8439 MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port); in elink_8705_config_init()
8441 elink_ext_phy_hw_reset(sc, params->port); in elink_8705_config_init()
8443 elink_wait_reset_complete(sc, phy, params); in elink_8705_config_init()
8454 elink_save_spirom_version(sc, params->port, params->shmem_base, 0); in elink_8705_config_init()
8459 struct elink_params *params, in elink_8705_read_status() argument
8464 struct bxe_softc *sc = params->sc; in elink_8705_read_status()
8486 elink_ext_phy_resolve_fc(phy, params, vars); in elink_8705_read_status()
8494 static void elink_set_disable_pmd_transmit(struct elink_params *params, in elink_set_disable_pmd_transmit() argument
8498 struct bxe_softc *sc = params->sc; in elink_set_disable_pmd_transmit()
8503 if (params->feature_config_flags & in elink_set_disable_pmd_transmit()
8517 static uint8_t elink_get_gpio_port(struct elink_params *params) in elink_get_gpio_port() argument
8521 struct bxe_softc *sc = params->sc; in elink_get_gpio_port()
8525 gpio_port = params->port; in elink_get_gpio_port()
8531 static void elink_sfp_e1e2_set_transmitter(struct elink_params *params, in elink_sfp_e1e2_set_transmitter() argument
8536 uint8_t port = params->port; in elink_sfp_e1e2_set_transmitter()
8537 struct bxe_softc *sc = params->sc; in elink_sfp_e1e2_set_transmitter()
8541 tx_en_mode = REG_RD(sc, params->shmem_base + in elink_sfp_e1e2_set_transmitter()
8578 gpio_port = elink_get_gpio_port(params); in elink_sfp_e1e2_set_transmitter()
8588 static void elink_sfp_set_transmitter(struct elink_params *params, in elink_sfp_set_transmitter() argument
8592 struct bxe_softc *sc = params->sc; in elink_sfp_set_transmitter()
8595 elink_sfp_e3_set_transmitter(params, phy, tx_en); in elink_sfp_set_transmitter()
8597 elink_sfp_e1e2_set_transmitter(params, phy, tx_en); in elink_sfp_set_transmitter()
8601 struct elink_params *params, in elink_8726_read_sfp_module_eeprom() argument
8605 struct bxe_softc *sc = params->sc; in elink_8726_read_sfp_module_eeprom()
8667 static void elink_warpcore_power_module(struct elink_params *params, in elink_warpcore_power_module() argument
8671 struct bxe_softc *sc = params->sc; in elink_warpcore_power_module()
8673 pin_cfg = (REG_RD(sc, params->shmem_base + in elink_warpcore_power_module()
8675 dev_info.port_hw_config[params->port].e3_sfp_ctrl)) & in elink_warpcore_power_module()
8689 struct elink_params *params, in elink_warpcore_read_sfp_module_eeprom() argument
8698 struct bxe_softc *sc = params->sc; in elink_warpcore_read_sfp_module_eeprom()
8710 elink_warpcore_power_module(params, 0); in elink_warpcore_read_sfp_module_eeprom()
8713 elink_warpcore_power_module(params, 1); in elink_warpcore_read_sfp_module_eeprom()
8715 rc = elink_bsc_read(params, sc, dev_addr, addr32, 0, byte_cnt, in elink_warpcore_read_sfp_module_eeprom()
8730 struct elink_params *params, in elink_8727_read_sfp_module_eeprom() argument
8734 struct bxe_softc *sc = params->sc; in elink_8727_read_sfp_module_eeprom()
8825 struct elink_params *params, uint8_t dev_addr, in elink_read_sfp_module_eeprom() argument
8829 struct bxe_softc *sc = params->sc; in elink_read_sfp_module_eeprom()
8856 rc = read_func(phy, params, dev_addr, addr, xfer_size, in elink_read_sfp_module_eeprom()
8866 struct elink_params *params, in elink_get_edc_mode() argument
8869 struct bxe_softc *sc = params->sc; in elink_get_edc_mode()
8876 params, in elink_get_edc_mode()
8894 params, in elink_get_edc_mode()
8936 gport = params->port; in elink_get_edc_mode()
8942 (params->port << 1); in elink_get_edc_mode()
8953 if (params->phy[idx].type == phy->type) { in elink_get_edc_mode()
8959 phy->req_line_speed = params->req_line_speed[cfg_idx]; in elink_get_edc_mode()
8967 sync_offset = params->shmem_base + in elink_get_edc_mode()
8969 dev_info.port_hw_config[params->port].media_type); in elink_get_edc_mode()
8973 if (&(params->phy[phy_idx]) == phy) { in elink_get_edc_mode()
8986 params, in elink_get_edc_mode()
9007 struct elink_params *params) in elink_verify_sfp_module() argument
9009 struct bxe_softc *sc = params->sc; in elink_verify_sfp_module()
9015 val = REG_RD(sc, params->shmem_base + in elink_verify_sfp_module()
9017 port_feature_config[params->port].config)); in elink_verify_sfp_module()
9024 if (params->feature_config_flags & in elink_verify_sfp_module()
9028 } else if (params->feature_config_flags & in elink_verify_sfp_module()
9031 if (ELINK_DUAL_MEDIA(params)) { in elink_verify_sfp_module()
9053 params, in elink_verify_sfp_module()
9062 params, in elink_verify_sfp_module()
9071 …elink_cb_event_log(sc, ELINK_LOG_ID_UNQUAL_IO_MODULE, params->port, vendor_name, vendor_pn); // "W… in elink_verify_sfp_module()
9081 struct elink_params *params) in elink_wait_for_sfp_module_initialized() argument
9086 struct bxe_softc *sc = params->sc; in elink_wait_for_sfp_module_initialized()
9095 phy, params, ELINK_I2C_DEV_ADDR_A0, 1, 1, &val, in elink_wait_for_sfp_module_initialized()
9098 rc = elink_read_sfp_module_eeprom(phy, params, in elink_wait_for_sfp_module_initialized()
9109 rc = elink_read_sfp_module_eeprom(phy, params, ELINK_I2C_DEV_ADDR_A0, in elink_wait_for_sfp_module_initialized()
9230 struct elink_params *params, in elink_8727_specific_func() argument
9233 struct bxe_softc *sc = params->sc; in elink_8727_specific_func()
9237 elink_sfp_set_transmitter(params, phy, 0); in elink_8727_specific_func()
9241 elink_sfp_set_transmitter(params, phy, 1); in elink_8727_specific_func()
9275 static void elink_set_e1e2_module_fault_led(struct elink_params *params, in elink_set_e1e2_module_fault_led() argument
9278 struct bxe_softc *sc = params->sc; in elink_set_e1e2_module_fault_led()
9280 uint32_t fault_led_gpio = REG_RD(sc, params->shmem_base + in elink_set_e1e2_module_fault_led()
9282 dev_info.port_hw_config[params->port].sfp_ctrl)) & in elink_set_e1e2_module_fault_led()
9292 uint8_t gpio_port = elink_get_gpio_port(params); in elink_set_e1e2_module_fault_led()
9307 static void elink_set_e3_module_fault_led(struct elink_params *params, in elink_set_e3_module_fault_led() argument
9311 uint8_t port = params->port; in elink_set_e3_module_fault_led()
9312 struct bxe_softc *sc = params->sc; in elink_set_e3_module_fault_led()
9313 pin_cfg = (REG_RD(sc, params->shmem_base + in elink_set_e3_module_fault_led()
9323 static void elink_set_sfp_module_fault_led(struct elink_params *params, in elink_set_sfp_module_fault_led() argument
9326 struct bxe_softc *sc = params->sc; in elink_set_sfp_module_fault_led()
9332 elink_set_e3_module_fault_led(params, gpio_mode); in elink_set_sfp_module_fault_led()
9334 elink_set_e1e2_module_fault_led(params, gpio_mode); in elink_set_sfp_module_fault_led()
9338 struct elink_params *params) in elink_warpcore_hw_reset() argument
9340 struct bxe_softc *sc = params->sc; in elink_warpcore_hw_reset()
9341 elink_warpcore_power_module(params, 0); in elink_warpcore_hw_reset()
9351 static void elink_power_sfp_module(struct elink_params *params, in elink_power_sfp_module() argument
9355 struct bxe_softc *sc = params->sc; in elink_power_sfp_module()
9361 elink_8727_power_module(params->sc, phy, power); in elink_power_sfp_module()
9364 elink_warpcore_power_module(params, power); in elink_power_sfp_module()
9370 static void elink_warpcore_set_limiting_mode(struct elink_params *params, in elink_warpcore_set_limiting_mode() argument
9376 struct bxe_softc *sc = params->sc; in elink_warpcore_set_limiting_mode()
9378 uint8_t lane = elink_get_warpcore_lane(phy, params); in elink_warpcore_set_limiting_mode()
9410 static void elink_set_limiting_mode(struct elink_params *params, in elink_set_limiting_mode() argument
9416 elink_8726_set_limiting_mode(params->sc, phy, edc_mode); in elink_set_limiting_mode()
9420 elink_8727_set_limiting_mode(params->sc, phy, edc_mode); in elink_set_limiting_mode()
9423 elink_warpcore_set_limiting_mode(params, phy, edc_mode); in elink_set_limiting_mode()
9429 struct elink_params *params) in elink_sfp_module_detection() argument
9431 struct bxe_softc *sc = params->sc; in elink_sfp_module_detection()
9435 uint32_t val = REG_RD(sc, params->shmem_base + in elink_sfp_module_detection()
9437 port_feature_config[params->port].config)); in elink_sfp_module_detection()
9439 elink_sfp_set_transmitter(params, phy, 1); in elink_sfp_module_detection()
9441 params->port); in elink_sfp_module_detection()
9443 elink_power_sfp_module(params, phy, 1); in elink_sfp_module_detection()
9444 if (elink_get_edc_mode(phy, params, &edc_mode) != 0) { in elink_sfp_module_detection()
9447 } else if (elink_verify_sfp_module(phy, params) != 0) { in elink_sfp_module_detection()
9452 elink_set_sfp_module_fault_led(params, in elink_sfp_module_detection()
9459 elink_power_sfp_module(params, phy, 0); in elink_sfp_module_detection()
9464 elink_set_sfp_module_fault_led(params, MISC_REGISTERS_GPIO_LOW); in elink_sfp_module_detection()
9470 elink_set_limiting_mode(params, phy, edc_mode); in elink_sfp_module_detection()
9478 elink_sfp_set_transmitter(params, phy, 0); in elink_sfp_module_detection()
9483 void elink_handle_module_detect_int(struct elink_params *params) in elink_handle_module_detect_int() argument
9485 struct bxe_softc *sc = params->sc; in elink_handle_module_detect_int()
9490 phy = ¶ms->phy[ELINK_INT_PHY]; in elink_handle_module_detect_int()
9492 elink_sfp_set_transmitter(params, phy, 1); in elink_handle_module_detect_int()
9494 phy = ¶ms->phy[ELINK_EXT_PHY1]; in elink_handle_module_detect_int()
9496 if (elink_get_mod_abs_int_cfg(sc, params->chip_id, params->shmem_base, in elink_handle_module_detect_int()
9497 params->port, &gpio_num, &gpio_port) == in elink_handle_module_detect_int()
9504 elink_set_sfp_module_fault_led(params, MISC_REGISTERS_GPIO_HIGH); in elink_handle_module_detect_int()
9511 elink_set_mdio_emac_per_phy(sc, params); in elink_handle_module_detect_int()
9512 elink_set_aer_mmd(params, phy); in elink_handle_module_detect_int()
9514 elink_power_sfp_module(params, phy, 1); in elink_handle_module_detect_int()
9518 if (elink_wait_for_sfp_module_initialized(phy, params) == 0) { in elink_handle_module_detect_int()
9519 elink_sfp_module_detection(phy, params); in elink_handle_module_detect_int()
9531 (params->link_flags & in elink_handle_module_detect_int()
9534 elink_warpcore_config_sfi(phy, params); in elink_handle_module_detect_int()
9579 struct elink_params *params, in elink_8706_8726_read_status() argument
9584 struct bxe_softc *sc = params->sc; in elink_8706_8726_read_status()
9620 elink_ext_phy_resolve_fc(phy, params, vars); in elink_8706_8726_read_status()
9641 struct elink_params *params, in elink_8706_config_init() argument
9646 struct bxe_softc *sc = params->sc; in elink_8706_config_init()
9649 MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port); in elink_8706_config_init()
9651 elink_ext_phy_hw_reset(sc, params->port); in elink_8706_config_init()
9653 elink_wait_reset_complete(sc, phy, params); in elink_8706_config_init()
9664 if ((params->feature_config_flags & in elink_8706_config_init()
9723 elink_save_bcm_spirom_ver(sc, phy, params->port); in elink_8706_config_init()
9729 tx_en_mode = REG_RD(sc, params->shmem_base + in elink_8706_config_init()
9731 dev_info.port_hw_config[params->port].sfp_ctrl)) in elink_8706_config_init()
9747 struct elink_params *params, in elink_8706_read_status() argument
9750 return elink_8706_8726_read_status(phy, params, vars); in elink_8706_read_status()
9757 struct elink_params *params) in elink_8726_config_loopback() argument
9759 struct bxe_softc *sc = params->sc; in elink_8726_config_loopback()
9765 struct elink_params *params) in elink_8726_external_rom_boot() argument
9767 struct bxe_softc *sc = params->sc; in elink_8726_external_rom_boot()
9799 elink_save_bcm_spirom_ver(sc, phy, params->port); in elink_8726_external_rom_boot()
9803 struct elink_params *params, in elink_8726_read_status() argument
9806 struct bxe_softc *sc = params->sc; in elink_8726_read_status()
9808 uint8_t link_up = elink_8706_8726_read_status(phy, params, vars); in elink_8726_read_status()
9824 struct elink_params *params, in elink_8726_config_init() argument
9827 struct bxe_softc *sc = params->sc; in elink_8726_config_init()
9831 elink_wait_reset_complete(sc, phy, params); in elink_8726_config_init()
9833 elink_8726_external_rom_boot(phy, params); in elink_8726_config_init()
9840 elink_sfp_module_detection(phy, params); in elink_8726_config_init()
9861 elink_ext_phy_set_pause(params, phy, vars); in elink_8726_config_init()
9887 if ((params->feature_config_flags & in elink_8726_config_init()
9909 struct elink_params *params) in elink_8726_link_reset() argument
9911 struct bxe_softc *sc = params->sc; in elink_8726_link_reset()
9912 ELINK_DEBUG_P1(sc, "elink_8726_link_reset port %d\n", params->port); in elink_8726_link_reset()
9924 struct elink_params *params, uint8_t mode) in elink_8727_set_link_led() argument
9926 struct bxe_softc *sc = params->sc; in elink_8727_set_link_led()
9970 struct elink_params *params) { in elink_8727_hw_reset() argument
9976 struct bxe_softc *sc = params->sc; in elink_8727_hw_reset()
9985 struct elink_params *params) in elink_8727_config_speed() argument
9987 struct bxe_softc *sc = params->sc; in elink_8727_config_speed()
10003 if (ELINK_DUAL_MEDIA(params)) { in elink_8727_config_speed()
10042 struct elink_params *params, in elink_8727_config_init() argument
10047 struct bxe_softc *sc = params->sc; in elink_8727_config_init()
10050 elink_wait_reset_complete(sc, phy, params); in elink_8727_config_init()
10054 elink_8727_specific_func(phy, params, ELINK_PHY_INIT); in elink_8727_config_init()
10071 elink_set_disable_pmd_transmit(params, phy, 0); in elink_8727_config_init()
10081 elink_8727_config_speed(phy, params); in elink_8727_config_init()
10085 if ((params->feature_config_flags & in elink_8727_config_init()
10102 tx_en_mode = REG_RD(sc, params->shmem_base + in elink_8727_config_init()
10104 dev_info.port_hw_config[params->port].sfp_ctrl)) in elink_8727_config_init()
10128 struct elink_params *params) in elink_8727_handle_mod_abs() argument
10130 struct bxe_softc *sc = params->sc; in elink_8727_handle_mod_abs()
10132 uint32_t val = REG_RD(sc, params->shmem_base + in elink_8727_handle_mod_abs()
10134 port_feature_config[params->port]. in elink_8727_handle_mod_abs()
10196 elink_sfp_set_transmitter(params, phy, 0); in elink_8727_handle_mod_abs()
10198 if (elink_wait_for_sfp_module_initialized(phy, params) == 0) in elink_8727_handle_mod_abs()
10199 elink_sfp_module_detection(phy, params); in elink_8727_handle_mod_abs()
10204 elink_8727_config_speed(phy, params); in elink_8727_handle_mod_abs()
10213 struct elink_params *params, in elink_8727_read_status() argument
10217 struct bxe_softc *sc = params->sc; in elink_8727_read_status()
10218 uint8_t link_up = 0, oc_port = params->port; in elink_8727_read_status()
10259 oc_port = SC_PATH(sc) + (params->port << 1); in elink_8727_read_status()
10287 elink_8727_power_module(params->sc, phy, 0); in elink_8727_read_status()
10294 elink_8727_handle_mod_abs(phy, params); in elink_8727_read_status()
10303 elink_sfp_set_transmitter(params, phy, 1); in elink_8727_read_status()
10320 params->port); in elink_8727_read_status()
10325 params->port); in elink_8727_read_status()
10329 params->port); in elink_8727_read_status()
10346 elink_ext_phy_resolve_fc(phy, params, vars); in elink_8727_read_status()
10351 if ((ELINK_DUAL_MEDIA(params)) && in elink_8727_read_status()
10371 struct elink_params *params) in elink_8727_link_reset() argument
10373 struct bxe_softc *sc = params->sc; in elink_8727_link_reset()
10376 elink_set_disable_pmd_transmit(params, phy, 1); in elink_8727_link_reset()
10379 elink_sfp_set_transmitter(params, phy, 0); in elink_8727_link_reset()
10498 struct elink_params *params, in elink_848xx_specific_func() argument
10501 struct bxe_softc *sc = params->sc; in elink_848xx_specific_func()
10507 elink_save_848xx_spirom_version(phy, sc, params->port); in elink_848xx_specific_func()
10513 elink_bits_en(sc, NIG_REG_LATCH_BC_0 + params->port*4, in elink_848xx_specific_func()
10522 struct elink_params *params, in elink_848xx_cmn_config_init() argument
10525 struct bxe_softc *sc = params->sc; in elink_848xx_cmn_config_init()
10528 elink_848xx_specific_func(phy, params, ELINK_PHY_INIT); in elink_848xx_cmn_config_init()
10537 elink_ext_phy_set_pause(params, phy, vars); in elink_848xx_cmn_config_init()
10669 struct elink_params *params, in elink_8481_config_init() argument
10672 struct bxe_softc *sc = params->sc; in elink_8481_config_init()
10675 MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port); in elink_8481_config_init()
10678 elink_ext_phy_hw_reset(sc, params->port); in elink_8481_config_init()
10679 elink_wait_reset_complete(sc, phy, params); in elink_8481_config_init()
10682 return elink_848xx_cmn_config_init(phy, params, vars); in elink_8481_config_init()
10688 struct elink_params *params, uint16_t fw_cmd, in elink_84833_cmd_hdlr() argument
10693 struct bxe_softc *sc = params->sc; in elink_84833_cmd_hdlr()
10744 struct elink_params *params, in elink_84833_pair_swap_cfg() argument
10750 struct bxe_softc *sc = params->sc; in elink_84833_pair_swap_cfg()
10753 pair_swap = REG_RD(sc, params->shmem_base + in elink_84833_pair_swap_cfg()
10755 dev_info.port_hw_config[params->port].xgbt_phy_cfg)) & in elink_84833_pair_swap_cfg()
10764 status = elink_84833_cmd_hdlr(phy, params, in elink_84833_pair_swap_cfg()
10811 struct elink_params *params) in elink_84833_hw_reset_phy() argument
10813 struct bxe_softc *sc = params->sc; in elink_84833_hw_reset_phy()
10815 uint32_t other_shmem_base_addr = REG_RD(sc, params->shmem2_base + in elink_84833_hw_reset_phy()
10829 shmem_base_path[0] = params->shmem_base; in elink_84833_hw_reset_phy()
10833 params->chip_id); in elink_84833_hw_reset_phy()
10844 struct elink_params *params, in elink_8483x_disable_eee() argument
10848 struct bxe_softc *sc = params->sc; in elink_8483x_disable_eee()
10854 rc = elink_84833_cmd_hdlr(phy, params, in elink_8483x_disable_eee()
10861 return elink_eee_disable(phy, params, vars); in elink_8483x_disable_eee()
10865 struct elink_params *params, in elink_8483x_enable_eee() argument
10869 struct bxe_softc *sc = params->sc; in elink_8483x_enable_eee()
10872 rc = elink_84833_cmd_hdlr(phy, params, in elink_8483x_enable_eee()
10879 return elink_eee_advertise(phy, params, vars, SHMEM_EEE_10G_ADV); in elink_8483x_enable_eee()
10884 struct elink_params *params, in elink_848x3_config_init() argument
10887 struct bxe_softc *sc = params->sc; in elink_848x3_config_init()
10899 port = params->port; in elink_848x3_config_init()
10912 elink_wait_reset_complete(sc, phy, params); in elink_848x3_config_init()
10924 elink_set_autoneg(¶ms->phy[ELINK_INT_PHY], params, vars, 0); in elink_848x3_config_init()
10925 elink_program_serdes(¶ms->phy[ELINK_INT_PHY], params, vars); in elink_848x3_config_init()
10945 actual_phy_selection = elink_phy_selection(params); in elink_848x3_config_init()
10965 if (params->phy[ELINK_EXT_PHY2].req_line_speed == ELINK_SPEED_1000) in elink_848x3_config_init()
10971 params->multi_phy_config, val); in elink_848x3_config_init()
10975 elink_84833_pair_swap_cfg(phy, params, vars); in elink_848x3_config_init()
10982 rc = elink_84833_cmd_hdlr(phy, params, in elink_848x3_config_init()
10989 rc = elink_848xx_cmn_config_init(phy, params, vars); in elink_848x3_config_init()
10991 elink_save_848xx_spirom_version(phy, sc, params->port); in elink_848x3_config_init()
10994 uint32_t cms_enable = REG_RD(sc, params->shmem_base + in elink_848x3_config_init()
10996 dev_info.port_hw_config[params->port].default_cfg)) & in elink_848x3_config_init()
11015 elink_eee_has_cap(params)) { in elink_848x3_config_init()
11016 rc = elink_eee_initial_config(params, vars, SHMEM_EEE_10G_ADV); in elink_848x3_config_init()
11019 elink_8483x_disable_eee(phy, params, vars); in elink_848x3_config_init()
11024 (params->eee_mode & ELINK_EEE_MODE_ADV_LPI) && in elink_848x3_config_init()
11025 (elink_eee_calc_timer(params) || in elink_848x3_config_init()
11026 !(params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI))) in elink_848x3_config_init()
11027 rc = elink_8483x_enable_eee(phy, params, vars); in elink_848x3_config_init()
11029 rc = elink_8483x_disable_eee(phy, params, vars); in elink_848x3_config_init()
11050 struct elink_params *params, in elink_848xx_read_status() argument
11053 struct bxe_softc *sc = params->sc; in elink_848xx_read_status()
11102 if (params->feature_config_flags & in elink_848xx_read_status()
11142 elink_ext_phy_resolve_fc(phy, params, vars); in elink_848xx_read_status()
11183 elink_eee_an_resolve(phy, params, vars); in elink_848xx_read_status()
11199 struct elink_params *params) in elink_8481_hw_reset() argument
11201 elink_cb_gpio_write(params->sc, MISC_REGISTERS_GPIO_1, in elink_8481_hw_reset()
11203 elink_cb_gpio_write(params->sc, MISC_REGISTERS_GPIO_1, in elink_8481_hw_reset()
11208 struct elink_params *params) in elink_8481_link_reset() argument
11210 elink_cl45_write(params->sc, phy, in elink_8481_link_reset()
11212 elink_cl45_write(params->sc, phy, in elink_8481_link_reset()
11217 struct elink_params *params) in elink_848x3_link_reset() argument
11219 struct bxe_softc *sc = params->sc; in elink_848x3_link_reset()
11226 port = params->port; in elink_848x3_link_reset()
11244 struct elink_params *params, uint8_t mode) in elink_848xx_set_link_led() argument
11246 struct bxe_softc *sc = params->sc; in elink_848xx_set_link_led()
11253 port = params->port; in elink_848xx_set_link_led()
11260 if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) == in elink_848xx_set_link_led()
11296 if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) == in elink_848xx_set_link_led()
11331 params->port*4) & in elink_848xx_set_link_led()
11333 params->link_flags |= in elink_848xx_set_link_led()
11339 params->port*4, in elink_848xx_set_link_led()
11353 if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) == in elink_848xx_set_link_led()
11399 params->port*4) & in elink_848xx_set_link_led()
11401 params->link_flags |= in elink_848xx_set_link_led()
11407 params->port*4, in elink_848xx_set_link_led()
11422 if ((params->hw_led_mode << SHARED_HW_CFG_LED_MODE_SHIFT) == in elink_848xx_set_link_led()
11467 val = ((params->hw_led_mode << in elink_848xx_set_link_led()
11496 if (params->link_flags & in elink_848xx_set_link_led()
11498 elink_link_int_enable(params); in elink_848xx_set_link_led()
11499 params->link_flags &= in elink_848xx_set_link_led()
11520 struct elink_params *params, in elink_54618se_specific_func() argument
11523 struct bxe_softc *sc = params->sc; in elink_54618se_specific_func()
11549 struct elink_params *params, in elink_54618se_config_init() argument
11552 struct bxe_softc *sc = params->sc; in elink_54618se_config_init()
11563 port = params->port; in elink_54618se_config_init()
11565 cfg_pin = (REG_RD(sc, params->shmem_base + in elink_54618se_config_init()
11580 elink_wait_reset_complete(sc, phy, params); in elink_54618se_config_init()
11586 elink_54618se_specific_func(phy, params, ELINK_PHY_INIT); in elink_54618se_config_init()
11601 elink_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc); in elink_54618se_config_init()
11693 if ((phy->flags & ELINK_FLAGS_EEE) && elink_eee_has_cap(params)) { in elink_54618se_config_init()
11703 rc = elink_eee_initial_config(params, vars, SHMEM_EEE_1G_ADV); in elink_54618se_config_init()
11706 elink_eee_disable(phy, params, vars); in elink_54618se_config_init()
11707 } else if ((params->eee_mode & ELINK_EEE_MODE_ADV_LPI) && in elink_54618se_config_init()
11709 (elink_eee_calc_timer(params) || in elink_54618se_config_init()
11710 !(params->eee_mode & ELINK_EEE_MODE_ENABLE_LPI))) { in elink_54618se_config_init()
11716 elink_eee_advertise(phy, params, vars, in elink_54618se_config_init()
11720 elink_eee_disable(phy, params, vars); in elink_54618se_config_init()
11728 if (params->feature_config_flags & in elink_54618se_config_init()
11756 struct elink_params *params, uint8_t mode) in elink_5461x_set_link_led() argument
11758 struct bxe_softc *sc = params->sc; in elink_5461x_set_link_led()
11792 struct elink_params *params) in elink_54618se_link_reset() argument
11794 struct bxe_softc *sc = params->sc; in elink_54618se_link_reset()
11805 port = params->port; in elink_54618se_link_reset()
11806 cfg_pin = (REG_RD(sc, params->shmem_base + in elink_54618se_link_reset()
11817 struct elink_params *params, in elink_54618se_read_status() argument
11820 struct bxe_softc *sc = params->sc; in elink_54618se_read_status()
11885 elink_ext_phy_resolve_fc(phy, params, vars); in elink_54618se_read_status()
11916 elink_eee_has_cap(params)) in elink_54618se_read_status()
11917 elink_eee_an_resolve(phy, params, vars); in elink_54618se_read_status()
11924 struct elink_params *params) in elink_54618se_config_loopback() argument
11926 struct bxe_softc *sc = params->sc; in elink_54618se_config_loopback()
11928 uint32_t umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0; in elink_54618se_config_loopback()
11955 REG_WR(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port*4, 1); in elink_54618se_config_loopback()
11967 struct elink_params *params) in elink_7101_config_loopback() argument
11969 struct bxe_softc *sc = params->sc; in elink_7101_config_loopback()
11976 struct elink_params *params, in elink_7101_config_init() argument
11980 struct bxe_softc *sc = params->sc; in elink_7101_config_init()
11985 MISC_REGISTERS_GPIO_OUTPUT_HIGH, params->port); in elink_7101_config_init()
11987 elink_ext_phy_hw_reset(sc, params->port); in elink_7101_config_init()
11988 elink_wait_reset_complete(sc, phy, params); in elink_7101_config_init()
11996 elink_ext_phy_set_pause(params, phy, vars); in elink_7101_config_init()
12010 elink_save_spirom_version(sc, params->port, in elink_7101_config_init()
12016 struct elink_params *params, in elink_7101_read_status() argument
12019 struct bxe_softc *sc = params->sc; in elink_7101_read_status()
12045 elink_ext_phy_resolve_fc(phy, params, vars); in elink_7101_read_status()
12094 struct elink_params *params) { in elink_7101_hw_reset() argument
12096 elink_cb_gpio_write(params->sc, MISC_REGISTERS_GPIO_2, in elink_7101_hw_reset()
12097 MISC_REGISTERS_GPIO_OUTPUT_LOW, params->port); in elink_7101_hw_reset()
12099 elink_cb_gpio_write(params->sc, MISC_REGISTERS_GPIO_1, in elink_7101_hw_reset()
12100 MISC_REGISTERS_GPIO_OUTPUT_LOW, params->port); in elink_7101_hw_reset()
12104 struct elink_params *params, uint8_t mode) in elink_7101_set_link_led() argument
12107 struct bxe_softc *sc = params->sc; in elink_7101_set_link_led()
12962 static void elink_phy_def_cfg(struct elink_params *params, in elink_phy_def_cfg() argument
12966 struct bxe_softc *sc = params->sc; in elink_phy_def_cfg()
12970 link_config = REG_RD(sc, params->shmem_base + in elink_phy_def_cfg()
12972 port_feature_config[params->port].link_config2)); in elink_phy_def_cfg()
12973 phy->speed_cap_mask = REG_RD(sc, params->shmem_base + in elink_phy_def_cfg()
12976 port_hw_config[params->port].speed_capability_mask2)); in elink_phy_def_cfg()
12978 link_config = REG_RD(sc, params->shmem_base + in elink_phy_def_cfg()
12980 port_feature_config[params->port].link_config)); in elink_phy_def_cfg()
12981 phy->speed_cap_mask = REG_RD(sc, params->shmem_base + in elink_phy_def_cfg()
12984 port_hw_config[params->port].speed_capability_mask)); in elink_phy_def_cfg()
13035 uint32_t elink_phy_selection(struct elink_params *params) in elink_phy_selection() argument
13040 phy_config_swapped = params->multi_phy_config & in elink_phy_selection()
13043 prio_cfg = params->multi_phy_config & in elink_phy_selection()
13067 elink_status_t elink_phy_probe(struct elink_params *params) in elink_phy_probe() argument
13071 struct bxe_softc *sc = params->sc; in elink_phy_probe()
13073 params->num_phys = 0; in elink_phy_probe()
13079 phy_config_swapped = params->multi_phy_config & in elink_phy_probe()
13094 phy = ¶ms->phy[actual_phy_idx]; in elink_phy_probe()
13095 if (elink_populate_phy(sc, phy_index, params->shmem_base, in elink_phy_probe()
13096 params->shmem2_base, params->port, in elink_phy_probe()
13098 params->num_phys = 0; in elink_phy_probe()
13110 if (params->feature_config_flags & in elink_phy_probe()
13114 if (!(params->feature_config_flags & in elink_phy_probe()
13118 sync_offset = params->shmem_base + in elink_phy_probe()
13120 dev_info.port_hw_config[params->port].media_type); in elink_phy_probe()
13137 elink_phy_def_cfg(params, phy, phy_index); in elink_phy_probe()
13138 params->num_phys++; in elink_phy_probe()
13141 ELINK_DEBUG_P1(sc, "End phy probe. #phys found %x\n", params->num_phys); in elink_phy_probe()
13146 static elink_status_t elink_init_e3_emul_mac(struct elink_params *params, in elink_init_e3_emul_mac() argument
13149 struct bxe_softc *sc = params->sc; in elink_init_e3_emul_mac()
13150 vars->line_speed = params->req_line_speed[0]; in elink_init_e3_emul_mac()
13152 if (params->req_line_speed[0] == ELINK_SPEED_AUTO_NEG) { in elink_init_e3_emul_mac()
13153 if (params->feature_config_flags & in elink_init_e3_emul_mac()
13162 if ((params->feature_config_flags & in elink_init_e3_emul_mac()
13165 " disabled!\n", params->req_line_speed[0]); in elink_init_e3_emul_mac()
13188 if (params->loopback_mode == ELINK_LOOPBACK_UMAC) in elink_init_e3_emul_mac()
13189 elink_umac_enable(params, vars, 1); in elink_init_e3_emul_mac()
13191 elink_umac_enable(params, vars, 0); in elink_init_e3_emul_mac()
13194 if (params->feature_config_flags & in elink_init_e3_emul_mac()
13197 " disabled!\n", params->req_line_speed[0]); in elink_init_e3_emul_mac()
13214 if (params->loopback_mode == ELINK_LOOPBACK_XMAC) in elink_init_e3_emul_mac()
13215 elink_xmac_enable(params, vars, 1); in elink_init_e3_emul_mac()
13217 elink_xmac_enable(params, vars, 0); in elink_init_e3_emul_mac()
13222 static elink_status_t elink_init_emul(struct elink_params *params, in elink_init_emul() argument
13225 struct bxe_softc *sc = params->sc; in elink_init_emul()
13227 if (elink_init_e3_emul_mac(params, vars) != in elink_init_emul()
13231 if (params->feature_config_flags & in elink_init_emul()
13236 if (params->loopback_mode == in elink_init_emul()
13238 elink_emac_enable(params, vars, 1); in elink_init_emul()
13240 elink_emac_enable(params, vars, 0); in elink_init_emul()
13245 if (params->loopback_mode == in elink_init_emul()
13247 elink_bmac_enable(params, vars, 1, 1); in elink_init_emul()
13249 elink_bmac_enable(params, vars, 0, 1); in elink_init_emul()
13257 elink_pbf_update(params, vars->flow_ctrl, in elink_init_emul()
13260 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_emul()
13263 elink_update_mng(params, vars->link_status); in elink_init_emul()
13268 static elink_status_t elink_init_fpga(struct elink_params *params, in elink_init_fpga() argument
13272 struct bxe_softc *sc = params->sc; in elink_init_fpga()
13282 vars->line_speed = params->req_line_speed[0]; in elink_init_fpga()
13300 params->req_line_speed[0]); in elink_init_fpga()
13304 if (params->loopback_mode == ELINK_LOOPBACK_UMAC) in elink_init_fpga()
13305 elink_umac_enable(params, vars, 1); in elink_init_fpga()
13307 elink_umac_enable(params, vars, 0); in elink_init_fpga()
13311 if (params->loopback_mode == ELINK_LOOPBACK_EMAC) in elink_init_fpga()
13312 elink_emac_enable(params, vars, 1); in elink_init_fpga()
13314 elink_emac_enable(params, vars, 0); in elink_init_fpga()
13319 elink_pbf_update(params, vars->flow_ctrl, in elink_init_fpga()
13322 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_fpga()
13325 elink_update_mng(params, vars->link_status); in elink_init_fpga()
13329 static void elink_init_bmac_loopback(struct elink_params *params, in elink_init_bmac_loopback() argument
13332 struct bxe_softc *sc = params->sc; in elink_init_bmac_loopback()
13341 elink_xgxs_deassert(params); in elink_init_bmac_loopback()
13344 elink_bmac_enable(params, vars, 1, 1); in elink_init_bmac_loopback()
13346 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_bmac_loopback()
13349 static void elink_init_emac_loopback(struct elink_params *params, in elink_init_emac_loopback() argument
13352 struct bxe_softc *sc = params->sc; in elink_init_emac_loopback()
13361 elink_xgxs_deassert(params); in elink_init_emac_loopback()
13363 elink_emac_enable(params, vars, 1); in elink_init_emac_loopback()
13364 elink_emac_program(params, vars); in elink_init_emac_loopback()
13365 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_emac_loopback()
13368 static void elink_init_xmac_loopback(struct elink_params *params, in elink_init_xmac_loopback() argument
13371 struct bxe_softc *sc = params->sc; in elink_init_xmac_loopback()
13373 if (!params->req_line_speed[0]) in elink_init_xmac_loopback()
13376 vars->line_speed = params->req_line_speed[0]; in elink_init_xmac_loopback()
13384 elink_set_aer_mmd(params, ¶ms->phy[0]); in elink_init_xmac_loopback()
13385 elink_warpcore_reset_lane(sc, ¶ms->phy[0], 0); in elink_init_xmac_loopback()
13386 params->phy[ELINK_INT_PHY].config_loopback( in elink_init_xmac_loopback()
13387 ¶ms->phy[ELINK_INT_PHY], in elink_init_xmac_loopback()
13388 params); in elink_init_xmac_loopback()
13390 elink_xmac_enable(params, vars, 1); in elink_init_xmac_loopback()
13391 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_xmac_loopback()
13394 static void elink_init_umac_loopback(struct elink_params *params, in elink_init_umac_loopback() argument
13397 struct bxe_softc *sc = params->sc; in elink_init_umac_loopback()
13404 elink_umac_enable(params, vars, 1); in elink_init_umac_loopback()
13406 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_umac_loopback()
13409 static void elink_init_xgxs_loopback(struct elink_params *params, in elink_init_xgxs_loopback() argument
13412 struct bxe_softc *sc = params->sc; in elink_init_xgxs_loopback()
13413 struct elink_phy *int_phy = ¶ms->phy[ELINK_INT_PHY]; in elink_init_xgxs_loopback()
13417 if (params->req_line_speed[0] == ELINK_SPEED_1000) in elink_init_xgxs_loopback()
13419 else if ((params->req_line_speed[0] == ELINK_SPEED_20000) || in elink_init_xgxs_loopback()
13426 elink_xgxs_deassert(params); in elink_init_xgxs_loopback()
13427 elink_link_initialize(params, vars); in elink_init_xgxs_loopback()
13429 if (params->req_line_speed[0] == ELINK_SPEED_1000) { in elink_init_xgxs_loopback()
13431 elink_umac_enable(params, vars, 0); in elink_init_xgxs_loopback()
13433 elink_emac_program(params, vars); in elink_init_xgxs_loopback()
13434 elink_emac_enable(params, vars, 0); in elink_init_xgxs_loopback()
13438 elink_xmac_enable(params, vars, 0); in elink_init_xgxs_loopback()
13440 elink_bmac_enable(params, vars, 0, 1); in elink_init_xgxs_loopback()
13443 if (params->loopback_mode == ELINK_LOOPBACK_XGXS) { in elink_init_xgxs_loopback()
13445 int_phy->config_loopback(int_phy, params); in elink_init_xgxs_loopback()
13450 phy_index < params->num_phys; phy_index++) in elink_init_xgxs_loopback()
13451 if (params->phy[phy_index].config_loopback) in elink_init_xgxs_loopback()
13452 params->phy[phy_index].config_loopback( in elink_init_xgxs_loopback()
13453 ¶ms->phy[phy_index], in elink_init_xgxs_loopback()
13454 params); in elink_init_xgxs_loopback()
13456 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_init_xgxs_loopback()
13458 elink_set_led(params, vars, ELINK_LED_MODE_OPER, vars->line_speed); in elink_init_xgxs_loopback()
13461 void elink_set_rx_filter(struct elink_params *params, uint8_t en) in elink_set_rx_filter() argument
13463 struct bxe_softc *sc = params->sc; in elink_set_rx_filter()
13469 REG_WR(sc, NIG_REG_LLH0_BRB1_DRV_MASK + params->port*4, val); in elink_set_rx_filter()
13472 REG_WR(sc, NIG_REG_LLH0_BRB1_DRV_MASK_MF + params->port*4, in elink_set_rx_filter()
13476 REG_WR(sc, (params->port ? NIG_REG_LLH1_BRB1_NOT_MCP : in elink_set_rx_filter()
13479 static elink_status_t elink_avoid_link_flap(struct elink_params *params, in elink_avoid_link_flap() argument
13484 struct bxe_softc *sc = params->sc; in elink_avoid_link_flap()
13487 elink_link_status_update(params, vars); in elink_avoid_link_flap()
13494 for (phy_idx = ELINK_INT_PHY; phy_idx < params->num_phys; phy_idx++) { in elink_avoid_link_flap()
13495 struct elink_phy *phy = ¶ms->phy[phy_idx]; in elink_avoid_link_flap()
13498 phy->phy_specific_func(phy, params, ELINK_PHY_INIT); in elink_avoid_link_flap()
13503 elink_verify_sfp_module(phy, params); in elink_avoid_link_flap()
13505 lfa_sts = REG_RD(sc, params->lfa_base + in elink_avoid_link_flap()
13517 params->port)); in elink_avoid_link_flap()
13521 params->port)); in elink_avoid_link_flap()
13524 elink_umac_enable(params, vars, 0); in elink_avoid_link_flap()
13526 elink_xmac_enable(params, vars, 0); in elink_avoid_link_flap()
13529 elink_emac_enable(params, vars, 0); in elink_avoid_link_flap()
13531 elink_bmac_enable(params, vars, 0, !dont_clear_stat); in elink_avoid_link_flap()
13542 REG_WR(sc, params->lfa_base + in elink_avoid_link_flap()
13546 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_avoid_link_flap()
13549 elink_link_int_enable(params); in elink_avoid_link_flap()
13553 static void elink_cannot_avoid_link_flap(struct elink_params *params, in elink_cannot_avoid_link_flap() argument
13558 struct bxe_softc *sc = params->sc; in elink_cannot_avoid_link_flap()
13560 elink_link_reset(params, vars, 1); in elink_cannot_avoid_link_flap()
13562 if (!params->lfa_base) in elink_cannot_avoid_link_flap()
13565 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13567 params->req_duplex[0] | (params->req_duplex[1] << 16)); in elink_cannot_avoid_link_flap()
13569 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13571 params->req_flow_ctrl[0] | (params->req_flow_ctrl[1] << 16)); in elink_cannot_avoid_link_flap()
13573 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13575 params->req_line_speed[0] | (params->req_line_speed[1] << 16)); in elink_cannot_avoid_link_flap()
13578 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13581 params->speed_cap_mask[cfg_idx]); in elink_cannot_avoid_link_flap()
13584 tmp_val = REG_RD(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13587 tmp_val |= params->req_fc_auto_adv; in elink_cannot_avoid_link_flap()
13589 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13592 lfa_sts = REG_RD(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13608 REG_WR(sc, params->lfa_base + in elink_cannot_avoid_link_flap()
13613 elink_status_t elink_phy_init(struct elink_params *params, struct elink_vars *vars) in elink_phy_init() argument
13616 struct bxe_softc *sc = params->sc; in elink_phy_init()
13619 params->req_line_speed[0], params->req_flow_ctrl[0]); in elink_phy_init()
13621 params->req_line_speed[1], params->req_flow_ctrl[1]); in elink_phy_init()
13622 ELINK_DEBUG_P1(sc, "req_adv_flow_ctrl 0x%x\n", params->req_fc_auto_adv); in elink_phy_init()
13632 params->link_flags = ELINK_PHY_INITIALIZED; in elink_phy_init()
13634 elink_set_rx_filter(params, 1); in elink_phy_init()
13636 lfa_status = elink_check_lfa(params); in elink_phy_init()
13640 return elink_avoid_link_flap(params, vars); in elink_phy_init()
13645 elink_cannot_avoid_link_flap(params, vars, lfa_status); in elink_phy_init()
13648 elink_bits_dis(sc, NIG_REG_MASK_INTERRUPT_PORT0 + params->port*4, in elink_phy_init()
13654 if (!(params->feature_config_flags & in elink_phy_init()
13658 elink_emac_init(params, vars); in elink_phy_init()
13660 if (params->feature_config_flags & ELINK_FEATURE_CONFIG_PFC_ENABLED) in elink_phy_init()
13663 if ((params->num_phys == 0) && in elink_phy_init()
13668 set_phy_vars(params, vars); in elink_phy_init()
13670 ELINK_DEBUG_P1(sc, "Num of phys on board: %d\n", params->num_phys); in elink_phy_init()
13673 return elink_init_fpga(params, vars); in elink_phy_init()
13678 return elink_init_emul(params, vars); in elink_phy_init()
13681 switch (params->loopback_mode) { in elink_phy_init()
13683 elink_init_bmac_loopback(params, vars); in elink_phy_init()
13686 elink_init_emac_loopback(params, vars); in elink_phy_init()
13689 elink_init_xmac_loopback(params, vars); in elink_phy_init()
13692 elink_init_umac_loopback(params, vars); in elink_phy_init()
13696 elink_init_xgxs_loopback(params, vars); in elink_phy_init()
13700 if (params->switch_cfg == ELINK_SWITCH_CFG_10G) in elink_phy_init()
13701 elink_xgxs_deassert(params); in elink_phy_init()
13703 elink_serdes_deassert(sc, params->port); in elink_phy_init()
13705 elink_link_initialize(params, vars); in elink_phy_init()
13707 elink_link_int_enable(params); in elink_phy_init()
13710 elink_update_mng(params, vars->link_status); in elink_phy_init()
13712 elink_update_mng_eee(params, vars->eee_status); in elink_phy_init()
13716 elink_status_t elink_link_reset(struct elink_params *params, struct elink_vars *vars, in elink_link_reset() argument
13719 struct bxe_softc *sc = params->sc; in elink_link_reset()
13720 uint8_t phy_index, port = params->port, clear_latch_ind = 0; in elink_link_reset()
13724 elink_update_mng(params, vars->link_status); in elink_link_reset()
13727 elink_update_mng_eee(params, vars->eee_status); in elink_link_reset()
13745 if (!(params->feature_config_flags & in elink_link_reset()
13749 elink_set_bmac_rx(sc, params->chip_id, port, 0); in elink_link_reset()
13752 if (!(params->feature_config_flags & in elink_link_reset()
13757 elink_set_xmac_rxtx(params, 0); in elink_link_reset()
13758 elink_set_umac_rxtx(params, 0); in elink_link_reset()
13769 elink_set_mdio_emac_per_phy(sc, params); in elink_link_reset()
13770 elink_set_led(params, vars, ELINK_LED_MODE_OFF, 0); in elink_link_reset()
13773 for (phy_index = ELINK_EXT_PHY1; phy_index < params->num_phys; in elink_link_reset()
13775 if (params->phy[phy_index].link_reset) { in elink_link_reset()
13776 elink_set_aer_mmd(params, in elink_link_reset()
13777 ¶ms->phy[phy_index]); in elink_link_reset()
13778 params->phy[phy_index].link_reset( in elink_link_reset()
13779 ¶ms->phy[phy_index], in elink_link_reset()
13780 params); in elink_link_reset()
13782 if (params->phy[phy_index].flags & in elink_link_reset()
13797 if (params->phy[ELINK_INT_PHY].link_reset) in elink_link_reset()
13798 params->phy[ELINK_INT_PHY].link_reset( in elink_link_reset()
13799 ¶ms->phy[ELINK_INT_PHY], params); in elink_link_reset()
13809 uint32_t xmac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0; in elink_link_reset()
13810 elink_set_xumac_nig(params, 0, 0); in elink_link_reset()
13820 elink_status_t elink_lfa_reset(struct elink_params *params, in elink_lfa_reset() argument
13823 struct bxe_softc *sc = params->sc; in elink_lfa_reset()
13826 params->link_flags &= ~ELINK_PHY_INITIALIZED; in elink_lfa_reset()
13827 if (!params->lfa_base) in elink_lfa_reset()
13828 return elink_link_reset(params, vars, 1); in elink_lfa_reset()
13833 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 1); in elink_lfa_reset()
13840 elink_set_bmac_rx(sc, params->chip_id, params->port, 0); in elink_lfa_reset()
13843 elink_set_xmac_rxtx(params, 0); in elink_lfa_reset()
13844 elink_set_umac_rxtx(params, 0); in elink_lfa_reset()
13852 elink_set_rx_filter(params, 0); in elink_lfa_reset()
13861 elink_set_bmac_rx(sc, params->chip_id, params->port, 1); in elink_lfa_reset()
13864 elink_set_xmac_rxtx(params, 1); in elink_lfa_reset()
13865 elink_set_umac_rxtx(params, 1); in elink_lfa_reset()
13868 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_lfa_reset()
14310 static void elink_check_over_curr(struct elink_params *params, in elink_check_over_curr() argument
14313 struct bxe_softc *sc = params->sc; in elink_check_over_curr()
14315 uint8_t port = params->port; in elink_check_over_curr()
14318 cfg_pin = (REG_RD(sc, params->shmem_base + in elink_check_over_curr()
14330 …elink_cb_event_log(sc, ELINK_LOG_ID_OVER_CURRENT, params->port); //"Error: Power fault on Port %d… in elink_check_over_curr()
14338 elink_warpcore_power_module(params, 0); in elink_check_over_curr()
14345 static uint8_t elink_analyze_link_error(struct elink_params *params, in elink_analyze_link_error() argument
14349 struct bxe_softc *sc = params->sc; in elink_analyze_link_error()
14385 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 1); in elink_analyze_link_error()
14398 REG_WR(sc, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0); in elink_analyze_link_error()
14400 elink_sync_link(params, vars); in elink_analyze_link_error()
14402 elink_set_led(params, vars, led_mode, ELINK_SPEED_10000); in elink_analyze_link_error()
14405 elink_update_mng(params, vars->link_status); in elink_analyze_link_error()
14424 elink_status_t elink_check_half_open_conn(struct elink_params *params, in elink_check_half_open_conn() argument
14428 struct bxe_softc *sc = params->sc; in elink_check_half_open_conn()
14433 (REG_RD(sc, NIG_REG_EGRESS_EMAC0_PORT + params->port*4))) in elink_check_half_open_conn()
14444 mac_base = (params->port) ? GRCBASE_XMAC1 : GRCBASE_XMAC0; in elink_check_half_open_conn()
14454 elink_analyze_link_error(params, vars, lss_status, in elink_check_half_open_conn()
14458 (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << params->port)) { in elink_check_half_open_conn()
14462 mac_base = params->port ? NIG_REG_INGRESS_BMAC1_MEM : in elink_check_half_open_conn()
14473 elink_analyze_link_error(params, vars, lss_status, in elink_check_half_open_conn()
14480 struct elink_params *params, in elink_sfp_tx_fault_detection() argument
14483 struct bxe_softc *sc = params->sc; in elink_sfp_tx_fault_detection()
14485 uint8_t led_change, port = params->port; in elink_sfp_tx_fault_detection()
14488 cfg_pin = (REG_RD(sc, params->shmem_base + offsetof(struct shmem_region, in elink_sfp_tx_fault_detection()
14498 led_change = elink_analyze_link_error(params, vars, value, in elink_sfp_tx_fault_detection()
14518 elink_set_e3_module_fault_led(params, led_mode); in elink_sfp_tx_fault_detection()
14522 static void elink_kr2_recovery(struct elink_params *params, in elink_kr2_recovery() argument
14526 struct bxe_softc *sc = params->sc; in elink_kr2_recovery()
14528 elink_warpcore_enable_AN_KR2(phy, params, vars); in elink_kr2_recovery()
14529 elink_warpcore_restart_AN_KR(phy, params); in elink_kr2_recovery()
14532 static void elink_check_kr2_wa(struct elink_params *params, in elink_check_kr2_wa() argument
14536 struct bxe_softc *sc = params->sc; in elink_check_kr2_wa()
14550 sigdet = elink_warpcore_get_sigdet(phy, params); in elink_check_kr2_wa()
14553 elink_kr2_recovery(params, vars, phy); in elink_check_kr2_wa()
14559 lane = elink_get_warpcore_lane(phy, params); in elink_check_kr2_wa()
14566 elink_set_aer_mmd(params, phy); in elink_check_kr2_wa()
14571 elink_kr2_recovery(params, vars, phy); in elink_check_kr2_wa()
14590 elink_kr2_recovery(params, vars, phy); in elink_check_kr2_wa()
14598 elink_disable_kr2(params, vars, phy); in elink_check_kr2_wa()
14600 elink_warpcore_restart_AN_KR(phy, params); in elink_check_kr2_wa()
14605 void elink_period_func(struct elink_params *params, struct elink_vars *vars) in elink_period_func() argument
14608 struct bxe_softc *sc = params->sc; in elink_period_func()
14610 if (params->phy[phy_idx].flags & ELINK_FLAGS_TX_ERROR_CHECK) { in elink_period_func()
14611 elink_set_aer_mmd(params, ¶ms->phy[phy_idx]); in elink_period_func()
14612 if (elink_check_half_open_conn(params, vars, 1) != in elink_period_func()
14620 struct elink_phy *phy = ¶ms->phy[ELINK_INT_PHY]; in elink_period_func()
14621 elink_set_aer_mmd(params, phy); in elink_period_func()
14624 elink_check_kr2_wa(params, vars, phy); in elink_period_func()
14625 elink_check_over_curr(params, vars); in elink_period_func()
14627 elink_warpcore_config_runtime(phy, params, vars); in elink_period_func()
14629 if ((REG_RD(sc, params->shmem_base + in elink_period_func()
14631 port_hw_config[params->port].default_cfg)) in elink_period_func()
14634 if (elink_is_sfp_module_plugged(phy, params)) { in elink_period_func()
14635 elink_sfp_tx_fault_detection(phy, params, vars); in elink_period_func()
14642 elink_update_mng(params, vars->link_status); in elink_period_func()
14669 void elink_hw_reset_phy(struct elink_params *params) in elink_hw_reset_phy() argument
14672 struct bxe_softc *sc = params->sc; in elink_hw_reset_phy()
14673 elink_update_mng(params, 0); in elink_hw_reset_phy()
14674 elink_bits_dis(sc, NIG_REG_MASK_INTERRUPT_PORT0 + params->port*4, in elink_hw_reset_phy()
14682 if (params->phy[phy_index].hw_reset) { in elink_hw_reset_phy()
14683 params->phy[phy_index].hw_reset( in elink_hw_reset_phy()
14684 ¶ms->phy[phy_index], in elink_hw_reset_phy()
14685 params); in elink_hw_reset_phy()
14686 params->phy[phy_index] = phy_null; in elink_hw_reset_phy()