generic: ar8216: add init_port field to ar8xxx_chip
SVN-Revision: 31000
This commit is contained in:
parent
006b3b846e
commit
d964410cbc
1 changed files with 22 additions and 4 deletions
|
@ -40,8 +40,10 @@ struct ar8216_priv;
|
||||||
|
|
||||||
struct ar8xxx_chip {
|
struct ar8xxx_chip {
|
||||||
int (*hw_init)(struct ar8216_priv *priv);
|
int (*hw_init)(struct ar8216_priv *priv);
|
||||||
|
void (*init_port)(struct ar8216_priv *priv, int port);
|
||||||
void (*setup_port)(struct ar8216_priv *priv, int port, u32 egress,
|
void (*setup_port)(struct ar8216_priv *priv, int port, u32 egress,
|
||||||
u32 ingress, u32 members, u32 pvid);
|
u32 ingress, u32 members, u32 pvid);
|
||||||
|
int (*atu_flush)(struct ar8216_priv *priv);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ar8216_priv {
|
struct ar8216_priv {
|
||||||
|
@ -480,6 +482,18 @@ ar8216_vtu_op(struct ar8216_priv *priv, u32 op, u32 val)
|
||||||
priv->write(priv, AR8216_REG_VTU, op);
|
priv->write(priv, AR8216_REG_VTU, op);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ar8216_atu_flush(struct ar8216_priv *priv)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0);
|
||||||
|
if (!ret)
|
||||||
|
priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ar8216_setup_port(struct ar8216_priv *priv, int port, u32 egress, u32 ingress,
|
ar8216_setup_port(struct ar8216_priv *priv, int port, u32 egress, u32 ingress,
|
||||||
u32 members, u32 pvid)
|
u32 members, u32 pvid)
|
||||||
|
@ -743,17 +757,23 @@ ar8216_init_port(struct ar8216_priv *priv, int port)
|
||||||
|
|
||||||
static const struct ar8xxx_chip ar8216_chip = {
|
static const struct ar8xxx_chip ar8216_chip = {
|
||||||
.hw_init = ar8216_hw_init,
|
.hw_init = ar8216_hw_init,
|
||||||
|
.init_port = ar8216_init_port,
|
||||||
.setup_port = ar8216_setup_port,
|
.setup_port = ar8216_setup_port,
|
||||||
|
.atu_flush = ar8216_atu_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ar8xxx_chip ar8236_chip = {
|
static const struct ar8xxx_chip ar8236_chip = {
|
||||||
.hw_init = ar8236_hw_init,
|
.hw_init = ar8236_hw_init,
|
||||||
|
.init_port = ar8216_init_port,
|
||||||
.setup_port = ar8236_setup_port,
|
.setup_port = ar8236_setup_port,
|
||||||
|
.atu_flush = ar8216_atu_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ar8xxx_chip ar8316_chip = {
|
static const struct ar8xxx_chip ar8316_chip = {
|
||||||
.hw_init = ar8316_hw_init,
|
.hw_init = ar8316_hw_init,
|
||||||
|
.init_port = ar8216_init_port,
|
||||||
.setup_port = ar8216_setup_port,
|
.setup_port = ar8216_setup_port,
|
||||||
|
.atu_flush = ar8216_atu_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -771,7 +791,7 @@ ar8216_reset_switch(struct switch_dev *dev)
|
||||||
|
|
||||||
/* Configure all ports */
|
/* Configure all ports */
|
||||||
for (i = 0; i < AR8216_NUM_PORTS; i++)
|
for (i = 0; i < AR8216_NUM_PORTS; i++)
|
||||||
ar8216_init_port(priv, i);
|
priv->chip->init_port(priv, i);
|
||||||
|
|
||||||
ar8216_init_globals(priv);
|
ar8216_init_globals(priv);
|
||||||
mutex_unlock(&priv->reg_mutex);
|
mutex_unlock(&priv->reg_mutex);
|
||||||
|
@ -1012,9 +1032,7 @@ ar8216_read_status(struct phy_device *phydev)
|
||||||
|
|
||||||
/* flush the address translation unit */
|
/* flush the address translation unit */
|
||||||
mutex_lock(&priv->reg_mutex);
|
mutex_lock(&priv->reg_mutex);
|
||||||
ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0);
|
ret = priv->chip->atu_flush(priv);
|
||||||
if (!ret)
|
|
||||||
priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH);
|
|
||||||
mutex_unlock(&priv->reg_mutex);
|
mutex_unlock(&priv->reg_mutex);
|
||||||
|
|
||||||
phydev->state = PHY_RUNNING;
|
phydev->state = PHY_RUNNING;
|
||||||
|
|
Loading…
Reference in a new issue