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 <hkallweit1@gmail.com>

SVN-Revision: 44023
master
Felix Fietkau 10 years ago
parent 53c0c6054f
commit 6dfea16ab9
  1. 18
      target/linux/generic/files/drivers/net/phy/ar8327.c
  2. 2
      target/linux/generic/files/drivers/net/phy/ar8327.h

@ -710,7 +710,23 @@ ar8327_init_port(struct ar8xxx_priv *priv, int port)
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

@ -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)

Loading…
Cancel
Save