summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/dpa/mac.c
diff options
context:
space:
mode:
authorCristian Bercaru <cristian.bercaru@freescale.com>2014-07-23 11:12:25 (GMT)
committerMadalin Bucur <madalin.bucur@freescale.com>2014-10-08 13:20:00 (GMT)
commit4e96b2079d2b6570fc622f2123d800d6b6113777 (patch)
treeda2d17a47fdaa283eb7acf05d56b6188908dbaa5 /drivers/net/ethernet/freescale/dpa/mac.c
parent8f0464965a63eb46dd4e1f827b8b996226e70602 (diff)
downloadlinux-fsl-qoriq-4e96b2079d2b6570fc622f2123d800d6b6113777.tar.xz
dpaa_eth: add required and active PAUSE frame settings
Because the pause frame settings of a MAC device are forced to false when the link goes half-duplex and cannot be restored if autonegotiation is disabled, this patch introduces 2 sets of settings: requested and active. Requested settings are introduced by the users, via user-space programs such as ethtool, whereas active settings reflect whether FMan truly enables/disables PAUSE frames on TX/RX. Requested settings can only be changed by the user. Active settings can be changed by events such as auto-negotiation or a change in link duplexity and are derived from requested settings. Signed-off-by: Cristian Bercaru <cristian.bercaru@freescale.com> Change-Id: I5ea563614b28d6ba1827b571097861d39ff8751a Reviewed-on: http://git.am.freescale.net:8181/15553 Reviewed-by: Madalin-Cristian Bucur <madalin.bucur@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/dpa/mac.c')
-rw-r--r--drivers/net/ethernet/freescale/dpa/mac.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/mac.c b/drivers/net/ethernet/freescale/dpa/mac.c
index 2c349ac..69b4b6c 100644
--- a/drivers/net/ethernet/freescale/dpa/mac.c
+++ b/drivers/net/ethernet/freescale/dpa/mac.c
@@ -364,19 +364,11 @@ static int __cold mac_probe(struct platform_device *_of_dev)
/* by intializing the values to false, force FMD to enable PAUSE frames
* on RX and TX
*/
- mac_dev->rx_pause = mac_dev->tx_pause = false;
- /* does not ignore PAUSE frames */
- _errno = set_mac_rx_pause(mac_dev, true);
- if (unlikely(_errno < 0)) {
- dev_err(dev, "set_mac_rx_pause() = %d\n", _errno);
- return _errno;
- }
- /* transmits PAUSE frames when congested */
- _errno = set_mac_tx_pause(mac_dev, true);
- if (unlikely(_errno < 0)) {
- dev_err(dev, "set_mac_tx_pause() = %d\n", _errno);
- return _errno;
- }
+ mac_dev->rx_pause_req = mac_dev->tx_pause_req = true;
+ mac_dev->rx_pause_active = mac_dev->tx_pause_active = false;
+ _errno = set_mac_active_pause(mac_dev, true, true);
+ if (unlikely(_errno < 0))
+ dev_err(dev, "set_mac_active_pause() = %d\n", _errno);
dev_info(dev,
"FMan MAC address: %02hx:%02hx:%02hx:%02hx:%02hx:%02hx\n",