generic: ar8216: move register inititalization into hw_init

SVN-Revision: 30855
This commit is contained in:
Gabor Juhos 2012-03-08 10:21:11 +00:00
parent e3538fa852
commit 291e2dd583

View file

@ -637,6 +637,17 @@ ar8216_hw_apply(struct switch_dev *dev)
return 0; return 0;
} }
static int
ar8216_hw_init(struct ar8216_priv *priv)
{
/* XXX: undocumented magic from atheros, required! */
priv->write(priv, 0x38, 0xc000050e);
ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,
AR8216_GCTRL_MTU, 1518 + 8 + 2);
return 0;
}
static int static int
ar8236_hw_init(struct ar8216_priv *priv) { ar8236_hw_init(struct ar8216_priv *priv) {
static int initialized; static int initialized;
@ -656,6 +667,10 @@ ar8236_hw_init(struct ar8216_priv *priv) {
} }
msleep(1000); msleep(1000);
/* enable jumbo frames */
ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,
AR8316_GCTRL_MTU, 9018 + 8 + 2);
initialized = true; initialized = true;
return 0; return 0;
} }
@ -720,6 +735,13 @@ ar8316_hw_init(struct ar8216_priv *priv) {
msleep(1000); msleep(1000);
} }
/* enable jumbo frames */
ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,
AR8316_GCTRL_MTU, 9018 + 8 + 2);
/* enable cpu port to receive multicast and broadcast frames */
priv->write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
out: out:
priv->initialized = true; priv->initialized = true;
return 0; return 0;
@ -768,23 +790,6 @@ ar8216_reset_switch(struct switch_dev *dev)
for (i = 0; i < AR8216_NUM_PORTS; i++) for (i = 0; i < AR8216_NUM_PORTS; i++)
ar8216_init_port(priv, i); ar8216_init_port(priv, i);
/* XXX: undocumented magic from atheros, required! */
priv->write(priv, 0x38, 0xc000050e);
if (priv->chip == AR8216) {
ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,
AR8216_GCTRL_MTU, 1518 + 8 + 2);
} else if (priv->chip == AR8316 ||
priv->chip == AR8236) {
/* enable jumbo frames */
ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,
AR8316_GCTRL_MTU, 9018 + 8 + 2);
}
if (priv->chip == AR8316) {
/* enable cpu port to receive multicast and broadcast frames */
priv->write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
}
mutex_unlock(&priv->reg_mutex); mutex_unlock(&priv->reg_mutex);
return ar8216_hw_apply(dev); return ar8216_hw_apply(dev);
} }
@ -908,7 +913,9 @@ ar8216_config_init(struct phy_device *pdev)
priv->init = true; priv->init = true;
ret = 0; ret = 0;
if (priv->chip == AR8236) if (priv->chip == AR8216)
ret = ar8216_hw_init(priv);
else if (priv->chip == AR8236)
ret = ar8236_hw_init(priv); ret = ar8236_hw_init(priv);
else if (priv->chip == AR8316) else if (priv->chip == AR8316)
ret = ar8316_hw_init(priv); ret = ar8316_hw_init(priv);