ar71xx: reinitialize global switch settings after reset on ar7240

SVN-Revision: 27705
This commit is contained in:
Felix Fietkau 2011-07-20 14:39:47 +00:00
parent ca473833c4
commit c7173a211d

View file

@ -418,28 +418,6 @@ static void ar7240sw_disable_port(struct ar7240sw *as, unsigned port)
AR7240_PORT_CTRL_STATE_DISABLED); AR7240_PORT_CTRL_STATE_DISABLED);
} }
static int ar7240sw_reset(struct ar7240sw *as)
{
struct mii_bus *mii = as->mii_bus;
int ret;
int i;
/* Set all ports to disabled state. */
for (i = 0; i < AR7240_NUM_PORTS; i++)
ar7240sw_disable_port(as, i);
/* Wait for transmit queues to drain. */
msleep(2);
/* Reset the switch. */
ar7240sw_reg_write(mii, AR7240_REG_MASK_CTRL,
AR7240_MASK_CTRL_SOFT_RESET);
ret = ar7240sw_reg_wait(mii, AR7240_REG_MASK_CTRL,
AR7240_MASK_CTRL_SOFT_RESET, 0, 1000);
return ret;
}
static void ar7240sw_setup(struct ar7240sw *as) static void ar7240sw_setup(struct ar7240sw *as)
{ {
struct mii_bus *mii = as->mii_bus; struct mii_bus *mii = as->mii_bus;
@ -471,6 +449,30 @@ static void ar7240sw_setup(struct ar7240sw *as)
ar7240sw_reg_rmw(mii, AR7240_REG_SERVICE_TAG, AR7240_SERVICE_TAG_M, 0); ar7240sw_reg_rmw(mii, AR7240_REG_SERVICE_TAG, AR7240_SERVICE_TAG_M, 0);
} }
static int ar7240sw_reset(struct ar7240sw *as)
{
struct mii_bus *mii = as->mii_bus;
int ret;
int i;
/* Set all ports to disabled state. */
for (i = 0; i < AR7240_NUM_PORTS; i++)
ar7240sw_disable_port(as, i);
/* Wait for transmit queues to drain. */
msleep(2);
/* Reset the switch. */
ar7240sw_reg_write(mii, AR7240_REG_MASK_CTRL,
AR7240_MASK_CTRL_SOFT_RESET);
ret = ar7240sw_reg_wait(mii, AR7240_REG_MASK_CTRL,
AR7240_MASK_CTRL_SOFT_RESET, 0, 1000);
ar7240sw_setup(as);
return ret;
}
static void ar7240sw_setup_port(struct ar7240sw *as, unsigned port, u8 portmask) static void ar7240sw_setup_port(struct ar7240sw *as, unsigned port, u8 portmask)
{ {
struct mii_bus *mii = as->mii_bus; struct mii_bus *mii = as->mii_bus;
@ -867,7 +869,6 @@ void ag71xx_ar7240_start(struct ag71xx *ag)
struct ar7240sw *as = ag->phy_priv; struct ar7240sw *as = ag->phy_priv;
ar7240sw_reset(as); ar7240sw_reset(as);
ar7240sw_setup(as);
ag->speed = SPEED_1000; ag->speed = SPEED_1000;
ag->duplex = 1; ag->duplex = 1;