diff options
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/flexcan.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 76dcbca6c80c..fc0769527e6b 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c | |||
@@ -812,6 +812,7 @@ static int flexcan_chip_start(struct net_device *dev) | |||
812 | struct flexcan_regs __iomem *regs = priv->base; | 812 | struct flexcan_regs __iomem *regs = priv->base; |
813 | int err; | 813 | int err; |
814 | u32 reg_mcr, reg_ctrl; | 814 | u32 reg_mcr, reg_ctrl; |
815 | int i; | ||
815 | 816 | ||
816 | /* enable module */ | 817 | /* enable module */ |
817 | err = flexcan_chip_enable(priv); | 818 | err = flexcan_chip_enable(priv); |
@@ -878,6 +879,12 @@ static int flexcan_chip_start(struct net_device *dev) | |||
878 | netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); | 879 | netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); |
879 | flexcan_write(reg_ctrl, ®s->ctrl); | 880 | flexcan_write(reg_ctrl, ®s->ctrl); |
880 | 881 | ||
882 | /* clear and invalidate all mailboxes first */ | ||
883 | for (i = FLEXCAN_TX_BUF_ID; i < ARRAY_SIZE(regs->cantxfg); i++) { | ||
884 | flexcan_write(FLEXCAN_MB_CODE_RX_INACTIVE, | ||
885 | ®s->cantxfg[i].can_ctrl); | ||
886 | } | ||
887 | |||
881 | /* mark TX mailbox as INACTIVE */ | 888 | /* mark TX mailbox as INACTIVE */ |
882 | flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE, | 889 | flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE, |
883 | ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); | 890 | ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); |