summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/fec_mxc.c13
-rw-r--r--drivers/net/fec_mxc.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index 77680491d0..db2cdaf684 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -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)
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index 5ccde9193b..62b55ef395 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -272,6 +272,7 @@ struct fec_priv {
struct clk clk_ref;
struct clk clk_ptp;
u32 clk_rate;
+ char promisc;
};
/**