generic: ar8216: move port initialization into a separate function
SVN-Revision: 30848
This commit is contained in:
parent
0097cf7161
commit
52a89cd95c
1 changed files with 29 additions and 22 deletions
|
@ -718,6 +718,32 @@ out:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ar8216_init_port(struct ar8216_priv *priv, int port)
|
||||
{
|
||||
/* Enable port learning and tx */
|
||||
priv->write(priv, AR8216_REG_PORT_CTRL(port),
|
||||
AR8216_PORT_CTRL_LEARN |
|
||||
(4 << AR8216_PORT_CTRL_STATE_S));
|
||||
|
||||
priv->write(priv, AR8216_REG_PORT_VLAN(port), 0);
|
||||
|
||||
if (port == AR8216_PORT_CPU) {
|
||||
priv->write(priv, AR8216_REG_PORT_STATUS(port),
|
||||
AR8216_PORT_STATUS_LINK_UP |
|
||||
((priv->chip == AR8316) ?
|
||||
AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
|
||||
AR8216_PORT_STATUS_TXMAC |
|
||||
AR8216_PORT_STATUS_RXMAC |
|
||||
((priv->chip == AR8316) ? AR8216_PORT_STATUS_RXFLOW : 0) |
|
||||
((priv->chip == AR8316) ? AR8216_PORT_STATUS_TXFLOW : 0) |
|
||||
AR8216_PORT_STATUS_DUPLEX);
|
||||
} else {
|
||||
priv->write(priv, AR8216_REG_PORT_STATUS(port),
|
||||
AR8216_PORT_STATUS_LINK_AUTO);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
ar8216_reset_switch(struct switch_dev *dev)
|
||||
{
|
||||
|
@ -730,30 +756,11 @@ ar8216_reset_switch(struct switch_dev *dev)
|
|||
for (i = 0; i < AR8X16_MAX_VLANS; i++) {
|
||||
priv->vlan_id[i] = i;
|
||||
}
|
||||
for (i = 0; i < AR8216_NUM_PORTS; i++) {
|
||||
/* Enable port learning and tx */
|
||||
priv->write(priv, AR8216_REG_PORT_CTRL(i),
|
||||
AR8216_PORT_CTRL_LEARN |
|
||||
(4 << AR8216_PORT_CTRL_STATE_S));
|
||||
|
||||
priv->write(priv, AR8216_REG_PORT_VLAN(i), 0);
|
||||
/* Configure all ports */
|
||||
for (i = 0; i < AR8216_NUM_PORTS; i++)
|
||||
ar8216_init_port(priv, i);
|
||||
|
||||
/* Configure all PHYs */
|
||||
if (i == AR8216_PORT_CPU) {
|
||||
priv->write(priv, AR8216_REG_PORT_STATUS(i),
|
||||
AR8216_PORT_STATUS_LINK_UP |
|
||||
((priv->chip == AR8316) ?
|
||||
AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
|
||||
AR8216_PORT_STATUS_TXMAC |
|
||||
AR8216_PORT_STATUS_RXMAC |
|
||||
((priv->chip == AR8316) ? AR8216_PORT_STATUS_RXFLOW : 0) |
|
||||
((priv->chip == AR8316) ? AR8216_PORT_STATUS_TXFLOW : 0) |
|
||||
AR8216_PORT_STATUS_DUPLEX);
|
||||
} else {
|
||||
priv->write(priv, AR8216_REG_PORT_STATUS(i),
|
||||
AR8216_PORT_STATUS_LINK_AUTO);
|
||||
}
|
||||
}
|
||||
/* XXX: undocumented magic from atheros, required! */
|
||||
priv->write(priv, 0x38, 0xc000050e);
|
||||
|
||||
|
|
Loading…
Reference in a new issue