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
This commit is contained in:
parent
53c0c6054f
commit
6dfea16ab9
2 changed files with 19 additions and 1 deletions
|
@ -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…
Reference in a new issue