Lines Matching refs:mac
20 static int dpaa2_mac_cmp_ver(struct dpaa2_mac *mac, in dpaa2_mac_cmp_ver() argument
23 if (mac->ver_major == ver_major) in dpaa2_mac_cmp_ver()
24 return mac->ver_minor - ver_minor; in dpaa2_mac_cmp_ver()
25 return mac->ver_major - ver_major; in dpaa2_mac_cmp_ver()
28 static void dpaa2_mac_detect_features(struct dpaa2_mac *mac) in dpaa2_mac_detect_features() argument
30 mac->features = 0; in dpaa2_mac_detect_features()
32 if (dpaa2_mac_cmp_ver(mac, DPMAC_PROTOCOL_CHANGE_VER_MAJOR, in dpaa2_mac_detect_features()
34 mac->features |= DPAA2_MAC_FEATURE_PROTOCOL_CHANGE; in dpaa2_mac_detect_features()
150 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config); in dpaa2_mac_select_pcs() local
152 return mac->pcs; in dpaa2_mac_select_pcs()
158 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config); in dpaa2_mac_config() local
159 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_config()
167 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_config()
168 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_config()
170 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n", in dpaa2_mac_config()
173 if (!mac->serdes_phy) in dpaa2_mac_config()
177 err = dpmac_set_protocol(mac->mc_io, 0, mac->mc_dev->mc_handle, in dpaa2_mac_config()
180 netdev_err(mac->net_dev, "dpmac_set_protocol() = %d\n", err); in dpaa2_mac_config()
182 err = phy_set_mode_ext(mac->serdes_phy, PHY_MODE_ETHERNET, state->interface); in dpaa2_mac_config()
184 netdev_err(mac->net_dev, "phy_set_mode_ext() = %d\n", err); in dpaa2_mac_config()
193 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config); in dpaa2_mac_link_up() local
194 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_link_up()
216 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_link_up()
217 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_link_up()
219 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n", in dpaa2_mac_link_up()
227 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config); in dpaa2_mac_link_down() local
228 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_link_down()
232 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_link_down()
233 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_link_down()
235 netdev_err(mac->net_dev, "dpmac_set_link_state() = %d\n", err); in dpaa2_mac_link_down()
245 static int dpaa2_pcs_create(struct dpaa2_mac *mac, in dpaa2_pcs_create() argument
255 netdev_warn(mac->net_dev, "pcs-handle node not found\n"); in dpaa2_pcs_create()
260 netdev_err(mac->net_dev, "pcs-handle node not available\n"); in dpaa2_pcs_create()
268 netdev_dbg(mac->net_dev, "missing PCS device\n"); in dpaa2_pcs_create()
272 mac->pcs = lynx_pcs_create(mdiodev); in dpaa2_pcs_create()
273 if (!mac->pcs) { in dpaa2_pcs_create()
274 netdev_err(mac->net_dev, "lynx_pcs_create() failed\n"); in dpaa2_pcs_create()
282 static void dpaa2_pcs_destroy(struct dpaa2_mac *mac) in dpaa2_pcs_destroy() argument
284 struct phylink_pcs *phylink_pcs = mac->pcs; in dpaa2_pcs_destroy()
292 mac->pcs = NULL; in dpaa2_pcs_destroy()
296 static void dpaa2_mac_set_supported_interfaces(struct dpaa2_mac *mac) in dpaa2_mac_set_supported_interfaces() argument
304 __set_bit(mac->if_mode, mac->phylink_config.supported_interfaces); in dpaa2_mac_set_supported_interfaces()
305 if (mac->pcs) { in dpaa2_mac_set_supported_interfaces()
306 switch (mac->if_mode) { in dpaa2_mac_set_supported_interfaces()
310 mac->phylink_config.supported_interfaces); in dpaa2_mac_set_supported_interfaces()
312 mac->phylink_config.supported_interfaces); in dpaa2_mac_set_supported_interfaces()
320 if (!mac->serdes_phy) in dpaa2_mac_set_supported_interfaces()
331 err = phy_validate(mac->serdes_phy, PHY_MODE_ETHERNET, intf, NULL); in dpaa2_mac_set_supported_interfaces()
335 __set_bit(intf, mac->phylink_config.supported_interfaces); in dpaa2_mac_set_supported_interfaces()
339 void dpaa2_mac_start(struct dpaa2_mac *mac) in dpaa2_mac_start() argument
343 if (mac->serdes_phy) in dpaa2_mac_start()
344 phy_power_on(mac->serdes_phy); in dpaa2_mac_start()
346 phylink_start(mac->phylink); in dpaa2_mac_start()
349 void dpaa2_mac_stop(struct dpaa2_mac *mac) in dpaa2_mac_stop() argument
353 phylink_stop(mac->phylink); in dpaa2_mac_stop()
355 if (mac->serdes_phy) in dpaa2_mac_stop()
356 phy_power_off(mac->serdes_phy); in dpaa2_mac_stop()
359 int dpaa2_mac_connect(struct dpaa2_mac *mac) in dpaa2_mac_connect() argument
361 struct net_device *net_dev = mac->net_dev; in dpaa2_mac_connect()
367 mac->if_link_type = mac->attr.link_type; in dpaa2_mac_connect()
369 dpmac_node = mac->fw_node; in dpaa2_mac_connect()
371 netdev_err(net_dev, "No dpmac@%d node found.\n", mac->attr.id); in dpaa2_mac_connect()
375 err = dpaa2_mac_get_if_mode(dpmac_node, mac->attr); in dpaa2_mac_connect()
378 mac->if_mode = err; in dpaa2_mac_connect()
380 if (mac->features & DPAA2_MAC_FEATURE_PROTOCOL_CHANGE && in dpaa2_mac_connect()
381 !phy_interface_mode_is_rgmii(mac->if_mode) && in dpaa2_mac_connect()
392 mac->serdes_phy = serdes_phy; in dpaa2_mac_connect()
399 (mac->if_mode == PHY_INTERFACE_MODE_RGMII_ID || in dpaa2_mac_connect()
400 mac->if_mode == PHY_INTERFACE_MODE_RGMII_RXID || in dpaa2_mac_connect()
401 mac->if_mode == PHY_INTERFACE_MODE_RGMII_TXID)) { in dpaa2_mac_connect()
406 if ((mac->attr.link_type == DPMAC_LINK_TYPE_PHY && in dpaa2_mac_connect()
407 mac->attr.eth_if != DPMAC_ETH_IF_RGMII) || in dpaa2_mac_connect()
408 mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE) { in dpaa2_mac_connect()
409 err = dpaa2_pcs_create(mac, dpmac_node, mac->attr.id); in dpaa2_mac_connect()
414 memset(&mac->phylink_config, 0, sizeof(mac->phylink_config)); in dpaa2_mac_connect()
415 mac->phylink_config.dev = &net_dev->dev; in dpaa2_mac_connect()
416 mac->phylink_config.type = PHYLINK_NETDEV; in dpaa2_mac_connect()
418 mac->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE | in dpaa2_mac_connect()
422 dpaa2_mac_set_supported_interfaces(mac); in dpaa2_mac_connect()
424 phylink = phylink_create(&mac->phylink_config, in dpaa2_mac_connect()
425 dpmac_node, mac->if_mode, in dpaa2_mac_connect()
431 mac->phylink = phylink; in dpaa2_mac_connect()
434 err = phylink_fwnode_phy_connect(mac->phylink, dpmac_node, 0); in dpaa2_mac_connect()
444 phylink_destroy(mac->phylink); in dpaa2_mac_connect()
446 dpaa2_pcs_destroy(mac); in dpaa2_mac_connect()
451 void dpaa2_mac_disconnect(struct dpaa2_mac *mac) in dpaa2_mac_disconnect() argument
454 phylink_disconnect_phy(mac->phylink); in dpaa2_mac_disconnect()
457 phylink_destroy(mac->phylink); in dpaa2_mac_disconnect()
458 dpaa2_pcs_destroy(mac); in dpaa2_mac_disconnect()
459 of_phy_put(mac->serdes_phy); in dpaa2_mac_disconnect()
460 mac->serdes_phy = NULL; in dpaa2_mac_disconnect()
463 int dpaa2_mac_open(struct dpaa2_mac *mac) in dpaa2_mac_open() argument
465 struct fsl_mc_device *dpmac_dev = mac->mc_dev; in dpaa2_mac_open()
466 struct net_device *net_dev = mac->net_dev; in dpaa2_mac_open()
470 err = dpmac_open(mac->mc_io, 0, dpmac_dev->obj_desc.id, in dpaa2_mac_open()
477 err = dpmac_get_attributes(mac->mc_io, 0, dpmac_dev->mc_handle, in dpaa2_mac_open()
478 &mac->attr); in dpaa2_mac_open()
484 err = dpmac_get_api_version(mac->mc_io, 0, &mac->ver_major, &mac->ver_minor); in dpaa2_mac_open()
490 dpaa2_mac_detect_features(mac); in dpaa2_mac_open()
495 fw_node = dpaa2_mac_get_node(&mac->mc_dev->dev, mac->attr.id); in dpaa2_mac_open()
501 mac->fw_node = fw_node; in dpaa2_mac_open()
502 net_dev->dev.of_node = to_of_node(mac->fw_node); in dpaa2_mac_open()
507 dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle); in dpaa2_mac_open()
511 void dpaa2_mac_close(struct dpaa2_mac *mac) in dpaa2_mac_close() argument
513 struct fsl_mc_device *dpmac_dev = mac->mc_dev; in dpaa2_mac_close()
515 dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle); in dpaa2_mac_close()
516 if (mac->fw_node) in dpaa2_mac_close()
517 fwnode_handle_put(mac->fw_node); in dpaa2_mac_close()
569 void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data) in dpaa2_mac_get_ethtool_stats() argument
571 struct fsl_mc_device *dpmac_dev = mac->mc_dev; in dpaa2_mac_get_ethtool_stats()
576 err = dpmac_get_counter(mac->mc_io, 0, dpmac_dev->mc_handle, in dpaa2_mac_get_ethtool_stats()
579 netdev_err_once(mac->net_dev, in dpaa2_mac_get_ethtool_stats()