Lines Matching refs:mac

10 #include "dpaa2-mac.h"
20 static int dpaa2_mac_cmp_ver(struct dpaa2_mac *mac,
23 if (mac->ver_major == ver_major)
24 return mac->ver_minor - ver_minor;
25 return mac->ver_major - ver_major;
28 static void dpaa2_mac_detect_features(struct dpaa2_mac *mac)
30 mac->features = 0;
32 if (dpaa2_mac_cmp_ver(mac, DPMAC_PROTOCOL_CHANGE_VER_MAJOR,
34 mac->features |= DPAA2_MAC_FEATURE_PROTOCOL_CHANGE;
155 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config);
157 return mac->pcs;
163 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config);
164 struct dpmac_link_state *dpmac_state = &mac->state;
173 err = dpmac_set_link_state(mac->mc_io, 0,
174 mac->mc_dev->mc_handle, dpmac_state);
176 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n",
179 if (!mac->serdes_phy)
183 err = dpmac_set_protocol(mac->mc_io, 0, mac->mc_dev->mc_handle,
186 netdev_err(mac->net_dev, "dpmac_set_protocol() = %d\n", err);
188 err = phy_set_mode_ext(mac->serdes_phy, PHY_MODE_ETHERNET, state->interface);
190 netdev_err(mac->net_dev, "phy_set_mode_ext() = %d\n", err);
199 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config);
200 struct dpmac_link_state *dpmac_state = &mac->state;
222 err = dpmac_set_link_state(mac->mc_io, 0,
223 mac->mc_dev->mc_handle, dpmac_state);
225 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n",
233 struct dpaa2_mac *mac = phylink_to_dpaa2_mac(config);
234 struct dpmac_link_state *dpmac_state = &mac->state;
238 err = dpmac_set_link_state(mac->mc_io, 0,
239 mac->mc_dev->mc_handle, dpmac_state);
241 netdev_err(mac->net_dev, "dpmac_set_link_state() = %d\n", err);
251 static int dpaa2_pcs_create(struct dpaa2_mac *mac,
261 netdev_warn(mac->net_dev, "pcs-handle node not found\n");
269 netdev_dbg(mac->net_dev, "missing PCS device\n");
274 netdev_err(mac->net_dev, "pcs-handle node not available\n");
279 netdev_err(mac->net_dev,
284 mac->pcs = pcs;
289 static void dpaa2_pcs_destroy(struct dpaa2_mac *mac)
291 struct phylink_pcs *phylink_pcs = mac->pcs;
295 mac->pcs = NULL;
299 static void dpaa2_mac_set_supported_interfaces(struct dpaa2_mac *mac)
307 __set_bit(mac->if_mode, mac->phylink_config.supported_interfaces);
308 if (mac->pcs) {
309 switch (mac->if_mode) {
313 mac->phylink_config.supported_interfaces);
315 mac->phylink_config.supported_interfaces);
323 if (!mac->serdes_phy)
334 err = phy_validate(mac->serdes_phy, PHY_MODE_ETHERNET, intf, NULL);
338 __set_bit(intf, mac->phylink_config.supported_interfaces);
342 void dpaa2_mac_start(struct dpaa2_mac *mac)
346 if (mac->serdes_phy)
347 phy_power_on(mac->serdes_phy);
349 phylink_start(mac->phylink);
352 void dpaa2_mac_stop(struct dpaa2_mac *mac)
356 phylink_stop(mac->phylink);
358 if (mac->serdes_phy)
359 phy_power_off(mac->serdes_phy);
362 int dpaa2_mac_connect(struct dpaa2_mac *mac)
364 struct net_device *net_dev = mac->net_dev;
370 mac->if_link_type = mac->attr.link_type;
372 dpmac_node = mac->fw_node;
374 netdev_err(net_dev, "No dpmac@%d node found.\n", mac->attr.id);
378 err = dpaa2_mac_get_if_mode(dpmac_node, mac->attr);
381 mac->if_mode = err;
383 if (mac->features & DPAA2_MAC_FEATURE_PROTOCOL_CHANGE &&
384 !phy_interface_mode_is_rgmii(mac->if_mode) &&
395 mac->serdes_phy = serdes_phy;
402 (mac->if_mode == PHY_INTERFACE_MODE_RGMII_ID ||
403 mac->if_mode == PHY_INTERFACE_MODE_RGMII_RXID ||
404 mac->if_mode == PHY_INTERFACE_MODE_RGMII_TXID)) {
409 if ((mac->attr.link_type == DPMAC_LINK_TYPE_PHY &&
410 mac->attr.eth_if != DPMAC_ETH_IF_RGMII) ||
411 mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE) {
412 err = dpaa2_pcs_create(mac, dpmac_node, mac->attr.id);
417 memset(&mac->phylink_config, 0, sizeof(mac->phylink_config));
418 mac->phylink_config.dev = &net_dev->dev;
419 mac->phylink_config.type = PHYLINK_NETDEV;
421 mac->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE |
425 dpaa2_mac_set_supported_interfaces(mac);
427 phylink = phylink_create(&mac->phylink_config,
428 dpmac_node, mac->if_mode,
434 mac->phylink = phylink;
437 err = phylink_fwnode_phy_connect(mac->phylink, dpmac_node, 0);
447 phylink_destroy(mac->phylink);
449 dpaa2_pcs_destroy(mac);
454 void dpaa2_mac_disconnect(struct dpaa2_mac *mac)
457 phylink_disconnect_phy(mac->phylink);
460 phylink_destroy(mac->phylink);
461 dpaa2_pcs_destroy(mac);
462 of_phy_put(mac->serdes_phy);
463 mac->serdes_phy = NULL;
466 int dpaa2_mac_open(struct dpaa2_mac *mac)
468 struct fsl_mc_device *dpmac_dev = mac->mc_dev;
469 struct net_device *net_dev = mac->net_dev;
473 err = dpmac_open(mac->mc_io, 0, dpmac_dev->obj_desc.id,
480 err = dpmac_get_attributes(mac->mc_io, 0, dpmac_dev->mc_handle,
481 &mac->attr);
487 err = dpmac_get_api_version(mac->mc_io, 0, &mac->ver_major, &mac->ver_minor);
493 dpaa2_mac_detect_features(mac);
498 fw_node = dpaa2_mac_get_node(&mac->mc_dev->dev, mac->attr.id);
504 mac->fw_node = fw_node;
505 net_dev->dev.of_node = to_of_node(mac->fw_node);
510 dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle);
514 void dpaa2_mac_close(struct dpaa2_mac *mac)
516 struct fsl_mc_device *dpmac_dev = mac->mc_dev;
518 dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle);
519 if (mac->fw_node)
520 fwnode_handle_put(mac->fw_node);
524 [DPMAC_CNT_ING_ALL_FRAME] = "[mac] rx all frames",
525 [DPMAC_CNT_ING_GOOD_FRAME] = "[mac] rx frames ok",
526 [DPMAC_CNT_ING_ERR_FRAME] = "[mac] rx frame errors",
527 [DPMAC_CNT_ING_FRAME_DISCARD] = "[mac] rx frame discards",
528 [DPMAC_CNT_ING_UCAST_FRAME] = "[mac] rx u-cast",
529 [DPMAC_CNT_ING_BCAST_FRAME] = "[mac] rx b-cast",
530 [DPMAC_CNT_ING_MCAST_FRAME] = "[mac] rx m-cast",
531 [DPMAC_CNT_ING_FRAME_64] = "[mac] rx 64 bytes",
532 [DPMAC_CNT_ING_FRAME_127] = "[mac] rx 65-127 bytes",
533 [DPMAC_CNT_ING_FRAME_255] = "[mac] rx 128-255 bytes",
534 [DPMAC_CNT_ING_FRAME_511] = "[mac] rx 256-511 bytes",
535 [DPMAC_CNT_ING_FRAME_1023] = "[mac] rx 512-1023 bytes",
536 [DPMAC_CNT_ING_FRAME_1518] = "[mac] rx 1024-1518 bytes",
537 [DPMAC_CNT_ING_FRAME_1519_MAX] = "[mac] rx 1519-max bytes",
538 [DPMAC_CNT_ING_FRAG] = "[mac] rx frags",
539 [DPMAC_CNT_ING_JABBER] = "[mac] rx jabber",
540 [DPMAC_CNT_ING_ALIGN_ERR] = "[mac] rx align errors",
541 [DPMAC_CNT_ING_OVERSIZED] = "[mac] rx oversized",
542 [DPMAC_CNT_ING_VALID_PAUSE_FRAME] = "[mac] rx pause",
543 [DPMAC_CNT_ING_BYTE] = "[mac] rx bytes",
544 [DPMAC_CNT_EGR_GOOD_FRAME] = "[mac] tx frames ok",
545 [DPMAC_CNT_EGR_UCAST_FRAME] = "[mac] tx u-cast",
546 [DPMAC_CNT_EGR_MCAST_FRAME] = "[mac] tx m-cast",
547 [DPMAC_CNT_EGR_BCAST_FRAME] = "[mac] tx b-cast",
548 [DPMAC_CNT_EGR_ERR_FRAME] = "[mac] tx frame errors",
549 [DPMAC_CNT_EGR_UNDERSIZED] = "[mac] tx undersized",
550 [DPMAC_CNT_EGR_VALID_PAUSE_FRAME] = "[mac] tx b-pause",
551 [DPMAC_CNT_EGR_BYTE] = "[mac] tx bytes",
572 void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data)
574 struct fsl_mc_device *dpmac_dev = mac->mc_dev;
579 err = dpmac_get_counter(mac->mc_io, 0, dpmac_dev->mc_handle,
582 netdev_err_once(mac->net_dev,