|
@@ -62,7 +62,7 @@
|
|
|
#define FLEXCAN_MCR_BCC BIT(16)
|
|
|
#define FLEXCAN_MCR_LPRIO_EN BIT(13)
|
|
|
#define FLEXCAN_MCR_AEN BIT(12)
|
|
|
-#define FLEXCAN_MCR_MAXMB(x) ((x) & 0xf)
|
|
|
+#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f)
|
|
|
#define FLEXCAN_MCR_IDAM_A (0 << 8)
|
|
|
#define FLEXCAN_MCR_IDAM_B (1 << 8)
|
|
|
#define FLEXCAN_MCR_IDAM_C (2 << 8)
|
|
@@ -735,9 +735,11 @@ static int flexcan_chip_start(struct net_device *dev)
|
|
|
*
|
|
|
*/
|
|
|
reg_mcr = flexcan_read(®s->mcr);
|
|
|
+ reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff);
|
|
|
reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT |
|
|
|
FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN |
|
|
|
- FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS;
|
|
|
+ FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS |
|
|
|
+ FLEXCAN_MCR_MAXMB(FLEXCAN_TX_BUF_ID);
|
|
|
netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr);
|
|
|
flexcan_write(reg_mcr, ®s->mcr);
|
|
|
|
|
@@ -771,6 +773,10 @@ 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);
|
|
|
|
|
|
+ /* Abort any pending TX, mark Mailbox as INACTIVE */
|
|
|
+ flexcan_write(FLEXCAN_MB_CNT_CODE(0x4),
|
|
|
+ ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
|
|
|
+
|
|
|
/* acceptance mask/acceptance code (accept everything) */
|
|
|
flexcan_write(0x0, ®s->rxgmask);
|
|
|
flexcan_write(0x0, ®s->rx14mask);
|