Lines Matching +full:asym +full:- +full:pause

1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
4 #include "dpaa2-eth.h"
5 #include "dpaa2-mac.h"
31 return -EINVAL; in phy_mode()
90 return (interface != mac->if_mode); in dpaa2_mac_phy_mode_mismatch()
103 if (state->interface != PHY_INTERFACE_MODE_NA && in dpaa2_mac_validate()
104 dpaa2_mac_phy_mode_mismatch(mac, state->interface)) { in dpaa2_mac_validate()
110 phylink_set(mask, Pause); in dpaa2_mac_validate()
113 switch (state->interface) { in dpaa2_mac_validate()
118 if (state->interface == PHY_INTERFACE_MODE_10GBASER) in dpaa2_mac_validate()
138 linkmode_and(state->advertising, state->advertising, mask); in dpaa2_mac_validate()
150 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_config()
153 if (state->an_enabled) in dpaa2_mac_config()
154 dpmac_state->options |= DPMAC_LINK_OPT_AUTONEG; in dpaa2_mac_config()
156 dpmac_state->options &= ~DPMAC_LINK_OPT_AUTONEG; in dpaa2_mac_config()
158 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_config()
159 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_config()
161 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n", in dpaa2_mac_config()
172 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_link_up()
175 dpmac_state->up = 1; in dpaa2_mac_link_up()
177 if (mac->if_link_type == DPMAC_LINK_TYPE_PHY) { in dpaa2_mac_link_up()
181 dpmac_state->rate = speed; in dpaa2_mac_link_up()
184 dpmac_state->options |= DPMAC_LINK_OPT_HALF_DUPLEX; in dpaa2_mac_link_up()
186 dpmac_state->options &= ~DPMAC_LINK_OPT_HALF_DUPLEX; in dpaa2_mac_link_up()
188 /* This is lossy; the firmware really should take the pause in dpaa2_mac_link_up()
189 * enablement status rather than pause/asym pause status. in dpaa2_mac_link_up()
192 dpmac_state->options |= DPMAC_LINK_OPT_PAUSE; in dpaa2_mac_link_up()
194 dpmac_state->options &= ~DPMAC_LINK_OPT_PAUSE; in dpaa2_mac_link_up()
197 dpmac_state->options |= DPMAC_LINK_OPT_ASYM_PAUSE; in dpaa2_mac_link_up()
199 dpmac_state->options &= ~DPMAC_LINK_OPT_ASYM_PAUSE; in dpaa2_mac_link_up()
202 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_link_up()
203 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_link_up()
205 netdev_err(mac->net_dev, "%s: dpmac_set_link_state() = %d\n", in dpaa2_mac_link_up()
214 struct dpmac_link_state *dpmac_state = &mac->state; in dpaa2_mac_link_down()
217 dpmac_state->up = 0; in dpaa2_mac_link_down()
218 err = dpmac_set_link_state(mac->mc_io, 0, in dpaa2_mac_link_down()
219 mac->mc_dev->mc_handle, dpmac_state); in dpaa2_mac_link_down()
221 netdev_err(mac->net_dev, "dpmac_set_link_state() = %d\n", err); in dpaa2_mac_link_down()
239 err = dpmac_open(mc_io, 0, dpmac_dev->obj_desc.id, in dpaa2_mac_is_type_fixed()
263 node = of_parse_phandle(dpmac_node, "pcs-handle", 0); in dpaa2_pcs_create()
266 netdev_warn(mac->net_dev, "pcs-handle node not found\n"); in dpaa2_pcs_create()
271 netdev_err(mac->net_dev, "pcs-handle node not available\n"); in dpaa2_pcs_create()
273 return -ENODEV; in dpaa2_pcs_create()
279 return -EPROBE_DEFER; in dpaa2_pcs_create()
281 mac->pcs = lynx_pcs_create(mdiodev); in dpaa2_pcs_create()
282 if (!mac->pcs) { in dpaa2_pcs_create()
283 netdev_err(mac->net_dev, "lynx_pcs_create() failed\n"); in dpaa2_pcs_create()
284 put_device(&mdiodev->dev); in dpaa2_pcs_create()
285 return -ENOMEM; in dpaa2_pcs_create()
293 struct lynx_pcs *pcs = mac->pcs; in dpaa2_pcs_destroy()
296 struct device *dev = &pcs->mdio->dev; in dpaa2_pcs_destroy()
299 mac->pcs = NULL; in dpaa2_pcs_destroy()
305 struct fsl_mc_device *dpmac_dev = mac->mc_dev; in dpaa2_mac_connect()
306 struct net_device *net_dev = mac->net_dev; in dpaa2_mac_connect()
312 err = dpmac_open(mac->mc_io, 0, dpmac_dev->obj_desc.id, in dpaa2_mac_connect()
313 &dpmac_dev->mc_handle); in dpaa2_mac_connect()
314 if (err || !dpmac_dev->mc_handle) { in dpaa2_mac_connect()
316 return -ENODEV; in dpaa2_mac_connect()
319 err = dpmac_get_attributes(mac->mc_io, 0, dpmac_dev->mc_handle, &attr); in dpaa2_mac_connect()
325 mac->if_link_type = attr.link_type; in dpaa2_mac_connect()
330 err = -ENODEV; in dpaa2_mac_connect()
336 err = -EINVAL; in dpaa2_mac_connect()
339 mac->if_mode = err; in dpaa2_mac_connect()
346 (mac->if_mode == PHY_INTERFACE_MODE_RGMII_ID || in dpaa2_mac_connect()
347 mac->if_mode == PHY_INTERFACE_MODE_RGMII_RXID || in dpaa2_mac_connect()
348 mac->if_mode == PHY_INTERFACE_MODE_RGMII_TXID)) { in dpaa2_mac_connect()
350 err = -EINVAL; in dpaa2_mac_connect()
361 mac->phylink_config.dev = &net_dev->dev; in dpaa2_mac_connect()
362 mac->phylink_config.type = PHYLINK_NETDEV; in dpaa2_mac_connect()
364 phylink = phylink_create(&mac->phylink_config, in dpaa2_mac_connect()
365 of_fwnode_handle(dpmac_node), mac->if_mode, in dpaa2_mac_connect()
371 mac->phylink = phylink; in dpaa2_mac_connect()
373 if (mac->pcs) in dpaa2_mac_connect()
374 phylink_set_pcs(mac->phylink, &mac->pcs->pcs); in dpaa2_mac_connect()
376 err = phylink_of_phy_connect(mac->phylink, dpmac_node, 0); in dpaa2_mac_connect()
387 phylink_destroy(mac->phylink); in dpaa2_mac_connect()
393 dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle); in dpaa2_mac_connect()
399 if (!mac->phylink) in dpaa2_mac_disconnect()
402 phylink_disconnect_phy(mac->phylink); in dpaa2_mac_disconnect()
403 phylink_destroy(mac->phylink); in dpaa2_mac_disconnect()
406 dpmac_close(mac->mc_io, 0, mac->mc_dev->mc_handle); in dpaa2_mac_disconnect()
414 [DPMAC_CNT_ING_UCAST_FRAME] = "[mac] rx u-cast",
415 [DPMAC_CNT_ING_BCAST_FRAME] = "[mac] rx b-cast",
416 [DPMAC_CNT_ING_MCAST_FRAME] = "[mac] rx m-cast",
418 [DPMAC_CNT_ING_FRAME_127] = "[mac] rx 65-127 bytes",
419 [DPMAC_CNT_ING_FRAME_255] = "[mac] rx 128-255 bytes",
420 [DPMAC_CNT_ING_FRAME_511] = "[mac] rx 256-511 bytes",
421 [DPMAC_CNT_ING_FRAME_1023] = "[mac] rx 512-1023 bytes",
422 [DPMAC_CNT_ING_FRAME_1518] = "[mac] rx 1024-1518 bytes",
423 [DPMAC_CNT_ING_FRAME_1519_MAX] = "[mac] rx 1519-max bytes",
428 [DPMAC_CNT_ING_VALID_PAUSE_FRAME] = "[mac] rx pause",
431 [DPMAC_CNT_EGR_UCAST_FRAME] = "[mac] tx u-cast",
432 [DPMAC_CNT_EGR_MCAST_FRAME] = "[mac] tx m-cast",
433 [DPMAC_CNT_EGR_BCAST_FRAME] = "[mac] tx b-cast",
436 [DPMAC_CNT_EGR_VALID_PAUSE_FRAME] = "[mac] tx b-pause",
460 struct fsl_mc_device *dpmac_dev = mac->mc_dev; in dpaa2_mac_get_ethtool_stats()
465 err = dpmac_get_counter(mac->mc_io, 0, dpmac_dev->mc_handle, in dpaa2_mac_get_ethtool_stats()
468 netdev_err_once(mac->net_dev, in dpaa2_mac_get_ethtool_stats()