Author: nbd
Date: 2015-01-18 01:54:06 +0100 (Sun, 18 Jan 2015)
New Revision: 44023

Modified:
   trunk/target/linux/generic/files/drivers/net/phy/ar8327.c
   trunk/target/linux/generic/files/drivers/net/phy/ar8327.h
Log:
ar8216: display flow control info in swconfig get_link in case of 
autonegatiation too

The swconfig get_link attribute (at least) on AR8327/AR8337 doesn't
consider the autonegotiated flow control.
AR8327/AR8337 provide the info about autonegotiated rx/tx flow control
in bits 10 and 11 of the port status register.
Use these values to display info about autonegotiated rx/tx flow
control as part of the get_link attribute.

Successfully tested on TL-WDR4900 (AR8327 rev.4) and
TL-WDR4300 (AR8327 rev.2).

Signed-off-by: Heiner Kallweit <[email protected]>

Modified: trunk/target/linux/generic/files/drivers/net/phy/ar8327.c
===================================================================
--- trunk/target/linux/generic/files/drivers/net/phy/ar8327.c   2015-01-18 
00:53:59 UTC (rev 44022)
+++ trunk/target/linux/generic/files/drivers/net/phy/ar8327.c   2015-01-18 
00:54:06 UTC (rev 44023)
@@ -710,7 +710,23 @@
 static u32
 ar8327_read_port_status(struct ar8xxx_priv *priv, int port)
 {
-       return ar8xxx_read(priv, AR8327_REG_PORT_STATUS(port));
+       u32 t;
+
+       t = ar8xxx_read(priv, AR8327_REG_PORT_STATUS(port));
+       /* map the flow control autoneg result bits to the flow control bits
+        * used in forced mode to allow ar8216_read_port_link detect
+        * flow control properly if autoneg is used
+        */
+       if (t & AR8216_PORT_STATUS_LINK_UP &&
+           t & AR8216_PORT_STATUS_LINK_AUTO) {
+               t &= ~(AR8216_PORT_STATUS_TXFLOW | AR8216_PORT_STATUS_RXFLOW);
+               if (t & AR8327_PORT_STATUS_TXFLOW_AUTO)
+                       t |= AR8216_PORT_STATUS_TXFLOW;
+               if (t & AR8327_PORT_STATUS_RXFLOW_AUTO)
+                       t |= AR8216_PORT_STATUS_RXFLOW;
+       }
+
+       return t;
 }
 
 static u32

Modified: trunk/target/linux/generic/files/drivers/net/phy/ar8327.h
===================================================================
--- trunk/target/linux/generic/files/drivers/net/phy/ar8327.h   2015-01-18 
00:53:59 UTC (rev 44022)
+++ trunk/target/linux/generic/files/drivers/net/phy/ar8327.h   2015-01-18 
00:54:06 UTC (rev 44023)
@@ -84,6 +84,8 @@
 #define   AR8327_MAX_FRAME_SIZE_MTU            BITS(0, 14)
 
 #define AR8327_REG_PORT_STATUS(_i)             (0x07c + (_i) * 4)
+#define   AR8327_PORT_STATUS_TXFLOW_AUTO       BIT(10)
+#define   AR8327_PORT_STATUS_RXFLOW_AUTO       BIT(11)
 
 #define AR8327_REG_HEADER_CTRL                 0x098
 #define AR8327_REG_PORT_HEADER(_i)             (0x09c + (_i) * 4)
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to