net: fec: add set_promisc function
Enabling promiscuous mode is necessary if FEC is the master of a DSA switch driver where each port has their own MAC address. Signed-off-by: Tim Harvey <tharvey@gateworks.com> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
This commit is contained in:
committed by
Stefano Babic
parent
631f3afbef
commit
87550a814e
@@ -458,6 +458,9 @@ static void fec_reg_setup(struct fec_priv *fec)
|
||||
else if (fec->xcv_type == RMII)
|
||||
rcntrl |= FEC_RCNTRL_RMII;
|
||||
|
||||
if (fec->promisc)
|
||||
rcntrl |= 0x8;
|
||||
|
||||
writel(rcntrl, &fec->eth->r_cntrl);
|
||||
}
|
||||
|
||||
@@ -1278,6 +1281,15 @@ static int fecmxc_read_rom_hwaddr(struct udevice *dev)
|
||||
return fec_get_hwaddr(priv->dev_id, pdata->enetaddr);
|
||||
}
|
||||
|
||||
static int fecmxc_set_promisc(struct udevice *dev, bool enable)
|
||||
{
|
||||
struct fec_priv *priv = dev_get_priv(dev);
|
||||
|
||||
priv->promisc = enable;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fecmxc_free_pkt(struct udevice *dev, uchar *packet, int length)
|
||||
{
|
||||
if (packet)
|
||||
@@ -1294,6 +1306,7 @@ static const struct eth_ops fecmxc_ops = {
|
||||
.stop = fecmxc_halt,
|
||||
.write_hwaddr = fecmxc_set_hwaddr,
|
||||
.read_rom_hwaddr = fecmxc_read_rom_hwaddr,
|
||||
.set_promisc = fecmxc_set_promisc,
|
||||
};
|
||||
|
||||
static int device_get_phy_addr(struct fec_priv *priv, struct udevice *dev)
|
||||
|
||||
@@ -272,6 +272,7 @@ struct fec_priv {
|
||||
struct clk clk_ref;
|
||||
struct clk clk_ptp;
|
||||
u32 clk_rate;
|
||||
char promisc;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user