|
@@ -812,6 +812,7 @@ static int flexcan_chip_start(struct net_device *dev)
|
|
|
struct flexcan_regs __iomem *regs = priv->base;
|
|
|
int err;
|
|
|
u32 reg_mcr, reg_ctrl;
|
|
|
+ int i;
|
|
|
|
|
|
/* enable module */
|
|
|
err = flexcan_chip_enable(priv);
|
|
@@ -878,6 +879,12 @@ static int flexcan_chip_start(struct net_device *dev)
|
|
|
netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);
|
|
|
flexcan_write(reg_ctrl, ®s->ctrl);
|
|
|
|
|
|
+ /* clear and invalidate all mailboxes first */
|
|
|
+ for (i = FLEXCAN_TX_BUF_ID; i < ARRAY_SIZE(regs->cantxfg); i++) {
|
|
|
+ flexcan_write(FLEXCAN_MB_CODE_RX_INACTIVE,
|
|
|
+ ®s->cantxfg[i].can_ctrl);
|
|
|
+ }
|
|
|
+
|
|
|
/* mark TX mailbox as INACTIVE */
|
|
|
flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
|
|
|
®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
|