1 // SPDX-License-Identifier: GPL-2.0
3 // bxcan.c - STM32 Basic Extended CAN controller driver
7 // NOTE: The ST documentation uses the terms master/slave instead of
10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12 #include <linux/bitfield.h>
13 #include <linux/can.h>
14 #include <linux/can/dev.h>
15 #include <linux/can/error.h>
16 #include <linux/can/rx-offload.h>
17 #include <linux/clk.h>
18 #include <linux/ethtool.h>
19 #include <linux/interrupt.h>
21 #include <linux/iopoll.h>
22 #include <linux/kernel.h>
23 #include <linux/mfd/syscon.h>
24 #include <linux/module.h>
26 #include <linux/of_device.h>
27 #include <linux/platform_device.h>
28 #include <linux/regmap.h>
30 #define BXCAN_NAPI_WEIGHT 3
31 #define BXCAN_TIMEOUT_US 10000
33 #define BXCAN_RX_MB_NUM 2
34 #define BXCAN_TX_MB_NUM 3
36 /* Primary control register (MCR) bits */
37 #define BXCAN_MCR_RESET BIT(15)
38 #define BXCAN_MCR_TTCM BIT(7)
39 #define BXCAN_MCR_ABOM BIT(6)
40 #define BXCAN_MCR_AWUM BIT(5)
41 #define BXCAN_MCR_NART BIT(4)
42 #define BXCAN_MCR_RFLM BIT(3)
43 #define BXCAN_MCR_TXFP BIT(2)
44 #define BXCAN_MCR_SLEEP BIT(1)
45 #define BXCAN_MCR_INRQ BIT(0)
47 /* Primary status register (MSR) bits */
48 #define BXCAN_MSR_ERRI BIT(2)
49 #define BXCAN_MSR_SLAK BIT(1)
50 #define BXCAN_MSR_INAK BIT(0)
52 /* Transmit status register (TSR) bits */
53 #define BXCAN_TSR_RQCP2 BIT(16)
54 #define BXCAN_TSR_RQCP1 BIT(8)
55 #define BXCAN_TSR_RQCP0 BIT(0)
57 /* Receive FIFO 0 register (RF0R) bits */
58 #define BXCAN_RF0R_RFOM0 BIT(5)
59 #define BXCAN_RF0R_FMP0_MASK GENMASK(1, 0)
61 /* Interrupt enable register (IER) bits */
62 #define BXCAN_IER_SLKIE BIT(17)
63 #define BXCAN_IER_WKUIE BIT(16)
64 #define BXCAN_IER_ERRIE BIT(15)
65 #define BXCAN_IER_LECIE BIT(11)
66 #define BXCAN_IER_BOFIE BIT(10)
67 #define BXCAN_IER_EPVIE BIT(9)
68 #define BXCAN_IER_EWGIE BIT(8)
69 #define BXCAN_IER_FOVIE1 BIT(6)
70 #define BXCAN_IER_FFIE1 BIT(5)
71 #define BXCAN_IER_FMPIE1 BIT(4)
72 #define BXCAN_IER_FOVIE0 BIT(3)
73 #define BXCAN_IER_FFIE0 BIT(2)
74 #define BXCAN_IER_FMPIE0 BIT(1)
75 #define BXCAN_IER_TMEIE BIT(0)
77 /* Error status register (ESR) bits */
78 #define BXCAN_ESR_REC_MASK GENMASK(31, 24)
79 #define BXCAN_ESR_TEC_MASK GENMASK(23, 16)
80 #define BXCAN_ESR_LEC_MASK GENMASK(6, 4)
81 #define BXCAN_ESR_BOFF BIT(2)
82 #define BXCAN_ESR_EPVF BIT(1)
83 #define BXCAN_ESR_EWGF BIT(0)
85 /* Bit timing register (BTR) bits */
86 #define BXCAN_BTR_SILM BIT(31)
87 #define BXCAN_BTR_LBKM BIT(30)
88 #define BXCAN_BTR_SJW_MASK GENMASK(25, 24)
89 #define BXCAN_BTR_TS2_MASK GENMASK(22, 20)
90 #define BXCAN_BTR_TS1_MASK GENMASK(19, 16)
91 #define BXCAN_BTR_BRP_MASK GENMASK(9, 0)
93 /* TX mailbox identifier register (TIxR, x = 0..2) bits */
94 #define BXCAN_TIxR_STID_MASK GENMASK(31, 21)
95 #define BXCAN_TIxR_EXID_MASK GENMASK(31, 3)
96 #define BXCAN_TIxR_IDE BIT(2)
97 #define BXCAN_TIxR_RTR BIT(1)
98 #define BXCAN_TIxR_TXRQ BIT(0)
100 /* TX mailbox data length and time stamp register (TDTxR, x = 0..2 bits */
101 #define BXCAN_TDTxR_DLC_MASK GENMASK(3, 0)
103 /* RX FIFO mailbox identifier register (RIxR, x = 0..1 */
104 #define BXCAN_RIxR_STID_MASK GENMASK(31, 21)
105 #define BXCAN_RIxR_EXID_MASK GENMASK(31, 3)
106 #define BXCAN_RIxR_IDE BIT(2)
107 #define BXCAN_RIxR_RTR BIT(1)
109 /* RX FIFO mailbox data length and timestamp register (RDTxR, x = 0..1) bits */
110 #define BXCAN_RDTxR_TIME_MASK GENMASK(31, 16)
111 #define BXCAN_RDTxR_DLC_MASK GENMASK(3, 0)
113 #define BXCAN_FMR_REG 0x00
114 #define BXCAN_FM1R_REG 0x04
115 #define BXCAN_FS1R_REG 0x0c
116 #define BXCAN_FFA1R_REG 0x14
117 #define BXCAN_FA1R_REG 0x1c
118 #define BXCAN_FiR1_REG(b) (0x40 + (b) * 8)
119 #define BXCAN_FiR2_REG(b) (0x44 + (b) * 8)
121 #define BXCAN_FILTER_ID(primary) (primary ? 0 : 14)
123 /* Filter primary register (FMR) bits */
124 #define BXCAN_FMR_CANSB_MASK GENMASK(13, 8)
125 #define BXCAN_FMR_FINIT BIT(0)
127 enum bxcan_lec_code {
128 BXCAN_LEC_NO_ERROR = 0,
129 BXCAN_LEC_STUFF_ERROR,
130 BXCAN_LEC_FORM_ERROR,
132 BXCAN_LEC_BIT1_ERROR,
133 BXCAN_LEC_BIT0_ERROR,
138 /* Structure of the message buffer */
140 u32 id; /* can identifier */
141 u32 dlc; /* data length control and timestamp */
142 u32 data[2]; /* data */
145 /* Structure of the hardware registers */
147 u32 mcr; /* 0x00 - primary control */
148 u32 msr; /* 0x04 - primary status */
149 u32 tsr; /* 0x08 - transmit status */
150 u32 rf0r; /* 0x0c - FIFO 0 */
151 u32 rf1r; /* 0x10 - FIFO 1 */
152 u32 ier; /* 0x14 - interrupt enable */
153 u32 esr; /* 0x18 - error status */
154 u32 btr; /* 0x1c - bit timing*/
155 u32 reserved0[88]; /* 0x20 */
156 struct bxcan_mb tx_mb[BXCAN_TX_MB_NUM]; /* 0x180 - tx mailbox */
157 struct bxcan_mb rx_mb[BXCAN_RX_MB_NUM]; /* 0x1b0 - rx mailbox */
162 struct can_rx_offload offload;
164 struct net_device *ndev;
166 struct bxcan_regs __iomem *regs;
172 spinlock_t rmw_lock; /* lock for read-modify-write operations */
173 unsigned int tx_head;
174 unsigned int tx_tail;
178 static const struct can_bittiming_const bxcan_bittiming_const = {
179 .name = KBUILD_MODNAME,
190 static inline void bxcan_rmw(struct bxcan_priv *priv, void __iomem *addr,
196 spin_lock_irqsave(&priv->rmw_lock, flags);
198 val = (old & ~clear) | set;
202 spin_unlock_irqrestore(&priv->rmw_lock, flags);
205 static void bxcan_disable_filters(struct bxcan_priv *priv, bool primary)
207 unsigned int fid = BXCAN_FILTER_ID(primary);
208 u32 fmask = BIT(fid);
210 regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, 0);
213 static void bxcan_enable_filters(struct bxcan_priv *priv, bool primary)
215 unsigned int fid = BXCAN_FILTER_ID(primary);
216 u32 fmask = BIT(fid);
220 * Accept all messages.
221 * Assign filter 0 to CAN1 and filter 14 to CAN2 in identifier
222 * mask mode with 32 bits width.
225 /* Enter filter initialization mode and assing filters to CAN
228 regmap_update_bits(priv->gcan, BXCAN_FMR_REG,
229 BXCAN_FMR_CANSB_MASK | BXCAN_FMR_FINIT,
230 FIELD_PREP(BXCAN_FMR_CANSB_MASK, 14) |
233 /* Deactivate filter */
234 regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, 0);
236 /* Two 32-bit registers in identifier mask mode */
237 regmap_update_bits(priv->gcan, BXCAN_FM1R_REG, fmask, 0);
239 /* Single 32-bit scale configuration */
240 regmap_update_bits(priv->gcan, BXCAN_FS1R_REG, fmask, fmask);
242 /* Assign filter to FIFO 0 */
243 regmap_update_bits(priv->gcan, BXCAN_FFA1R_REG, fmask, 0);
245 /* Accept all messages */
246 regmap_write(priv->gcan, BXCAN_FiR1_REG(fid), 0);
247 regmap_write(priv->gcan, BXCAN_FiR2_REG(fid), 0);
249 /* Activate filter */
250 regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, fmask);
252 /* Exit filter initialization mode */
253 regmap_update_bits(priv->gcan, BXCAN_FMR_REG, BXCAN_FMR_FINIT, 0);
256 static inline u8 bxcan_get_tx_head(const struct bxcan_priv *priv)
258 return priv->tx_head % BXCAN_TX_MB_NUM;
261 static inline u8 bxcan_get_tx_tail(const struct bxcan_priv *priv)
263 return priv->tx_tail % BXCAN_TX_MB_NUM;
266 static inline u8 bxcan_get_tx_free(const struct bxcan_priv *priv)
268 return BXCAN_TX_MB_NUM - (priv->tx_head - priv->tx_tail);
271 static bool bxcan_tx_busy(const struct bxcan_priv *priv)
273 if (bxcan_get_tx_free(priv) > 0)
276 netif_stop_queue(priv->ndev);
278 /* Memory barrier before checking tx_free (head and tail) */
281 if (bxcan_get_tx_free(priv) == 0) {
282 netdev_dbg(priv->ndev,
283 "Stopping tx-queue (tx_head=0x%08x, tx_tail=0x%08x, len=%d).\n",
284 priv->tx_head, priv->tx_tail,
285 priv->tx_head - priv->tx_tail);
290 netif_start_queue(priv->ndev);
295 static int bxcan_chip_softreset(struct bxcan_priv *priv)
297 struct bxcan_regs __iomem *regs = priv->regs;
300 bxcan_rmw(priv, ®s->mcr, 0, BXCAN_MCR_RESET);
301 return readx_poll_timeout(readl, ®s->msr, value,
302 value & BXCAN_MSR_SLAK, BXCAN_TIMEOUT_US,
306 static int bxcan_enter_init_mode(struct bxcan_priv *priv)
308 struct bxcan_regs __iomem *regs = priv->regs;
311 bxcan_rmw(priv, ®s->mcr, 0, BXCAN_MCR_INRQ);
312 return readx_poll_timeout(readl, ®s->msr, value,
313 value & BXCAN_MSR_INAK, BXCAN_TIMEOUT_US,
317 static int bxcan_leave_init_mode(struct bxcan_priv *priv)
319 struct bxcan_regs __iomem *regs = priv->regs;
322 bxcan_rmw(priv, ®s->mcr, BXCAN_MCR_INRQ, 0);
323 return readx_poll_timeout(readl, ®s->msr, value,
324 !(value & BXCAN_MSR_INAK), BXCAN_TIMEOUT_US,
328 static int bxcan_enter_sleep_mode(struct bxcan_priv *priv)
330 struct bxcan_regs __iomem *regs = priv->regs;
333 bxcan_rmw(priv, ®s->mcr, 0, BXCAN_MCR_SLEEP);
334 return readx_poll_timeout(readl, ®s->msr, value,
335 value & BXCAN_MSR_SLAK, BXCAN_TIMEOUT_US,
339 static int bxcan_leave_sleep_mode(struct bxcan_priv *priv)
341 struct bxcan_regs __iomem *regs = priv->regs;
344 bxcan_rmw(priv, ®s->mcr, BXCAN_MCR_SLEEP, 0);
345 return readx_poll_timeout(readl, ®s->msr, value,
346 !(value & BXCAN_MSR_SLAK), BXCAN_TIMEOUT_US,
351 struct bxcan_priv *rx_offload_to_priv(struct can_rx_offload *offload)
353 return container_of(offload, struct bxcan_priv, offload);
356 static struct sk_buff *bxcan_mailbox_read(struct can_rx_offload *offload,
357 unsigned int mbxno, u32 *timestamp,
360 struct bxcan_priv *priv = rx_offload_to_priv(offload);
361 struct bxcan_regs __iomem *regs = priv->regs;
362 struct bxcan_mb __iomem *mb_regs = ®s->rx_mb[0];
363 struct sk_buff *skb = NULL;
364 struct can_frame *cf;
367 rf0r = readl(®s->rf0r);
368 if (unlikely(drop)) {
369 skb = ERR_PTR(-ENOBUFS);
373 if (!(rf0r & BXCAN_RF0R_FMP0_MASK))
376 skb = alloc_can_skb(offload->dev, &cf);
377 if (unlikely(!skb)) {
378 skb = ERR_PTR(-ENOMEM);
382 id = readl(&mb_regs->id);
383 if (id & BXCAN_RIxR_IDE)
384 cf->can_id = FIELD_GET(BXCAN_RIxR_EXID_MASK, id) | CAN_EFF_FLAG;
386 cf->can_id = FIELD_GET(BXCAN_RIxR_STID_MASK, id) & CAN_SFF_MASK;
388 dlc = readl(&mb_regs->dlc);
389 priv->timestamp = FIELD_GET(BXCAN_RDTxR_TIME_MASK, dlc);
390 cf->len = can_cc_dlc2len(FIELD_GET(BXCAN_RDTxR_DLC_MASK, dlc));
392 if (id & BXCAN_RIxR_RTR) {
393 cf->can_id |= CAN_RTR_FLAG;
397 for (i = 0, j = 0; i < cf->len; i += 4, j++)
398 *(u32 *)(cf->data + i) = readl(&mb_regs->data[j]);
402 rf0r |= BXCAN_RF0R_RFOM0;
403 writel(rf0r, ®s->rf0r);
407 static irqreturn_t bxcan_rx_isr(int irq, void *dev_id)
409 struct net_device *ndev = dev_id;
410 struct bxcan_priv *priv = netdev_priv(ndev);
411 struct bxcan_regs __iomem *regs = priv->regs;
414 rf0r = readl(®s->rf0r);
415 if (!(rf0r & BXCAN_RF0R_FMP0_MASK))
418 can_rx_offload_irq_offload_fifo(&priv->offload);
419 can_rx_offload_irq_finish(&priv->offload);
424 static irqreturn_t bxcan_tx_isr(int irq, void *dev_id)
426 struct net_device *ndev = dev_id;
427 struct bxcan_priv *priv = netdev_priv(ndev);
428 struct bxcan_regs __iomem *regs = priv->regs;
429 struct net_device_stats *stats = &ndev->stats;
433 tsr = readl(®s->tsr);
434 if (!(tsr & (BXCAN_TSR_RQCP0 | BXCAN_TSR_RQCP1 | BXCAN_TSR_RQCP2)))
437 while (priv->tx_head - priv->tx_tail > 0) {
438 idx = bxcan_get_tx_tail(priv);
439 rqcp_bit = BXCAN_TSR_RQCP0 << (idx << 3);
440 if (!(tsr & rqcp_bit))
444 stats->tx_bytes += can_get_echo_skb(ndev, idx, NULL);
448 writel(tsr, ®s->tsr);
450 if (bxcan_get_tx_free(priv)) {
451 /* Make sure that anybody stopping the queue after
452 * this sees the new tx_ring->tail.
455 netif_wake_queue(ndev);
461 static void bxcan_handle_state_change(struct net_device *ndev, u32 esr)
463 struct bxcan_priv *priv = netdev_priv(ndev);
464 enum can_state new_state = priv->can.state;
465 struct can_berr_counter bec;
466 enum can_state rx_state, tx_state;
468 struct can_frame *cf;
470 /* Early exit if no error flag is set */
471 if (!(esr & (BXCAN_ESR_EWGF | BXCAN_ESR_EPVF | BXCAN_ESR_BOFF)))
474 bec.txerr = FIELD_GET(BXCAN_ESR_TEC_MASK, esr);
475 bec.rxerr = FIELD_GET(BXCAN_ESR_REC_MASK, esr);
477 if (esr & BXCAN_ESR_BOFF)
478 new_state = CAN_STATE_BUS_OFF;
479 else if (esr & BXCAN_ESR_EPVF)
480 new_state = CAN_STATE_ERROR_PASSIVE;
481 else if (esr & BXCAN_ESR_EWGF)
482 new_state = CAN_STATE_ERROR_WARNING;
484 /* state hasn't changed */
485 if (unlikely(new_state == priv->can.state))
488 skb = alloc_can_err_skb(ndev, &cf);
490 tx_state = bec.txerr >= bec.rxerr ? new_state : 0;
491 rx_state = bec.txerr <= bec.rxerr ? new_state : 0;
492 can_change_state(ndev, cf, tx_state, rx_state);
494 if (new_state == CAN_STATE_BUS_OFF) {
497 cf->can_id |= CAN_ERR_CNT;
498 cf->data[6] = bec.txerr;
499 cf->data[7] = bec.rxerr;
505 err = can_rx_offload_queue_timestamp(&priv->offload, skb,
508 ndev->stats.rx_fifo_errors++;
512 static void bxcan_handle_bus_err(struct net_device *ndev, u32 esr)
514 struct bxcan_priv *priv = netdev_priv(ndev);
515 enum bxcan_lec_code lec_code;
516 struct can_frame *cf;
519 lec_code = FIELD_GET(BXCAN_ESR_LEC_MASK, esr);
521 /* Early exit if no lec update or no error.
522 * No lec update means that no CAN bus event has been detected
523 * since CPU wrote BXCAN_LEC_UNUSED value to status reg.
525 if (lec_code == BXCAN_LEC_UNUSED || lec_code == BXCAN_LEC_NO_ERROR)
528 /* Common for all type of bus errors */
529 priv->can.can_stats.bus_error++;
531 /* Propagate the error condition to the CAN stack */
532 skb = alloc_can_err_skb(ndev, &cf);
534 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
537 case BXCAN_LEC_STUFF_ERROR:
538 netdev_dbg(ndev, "Stuff error\n");
539 ndev->stats.rx_errors++;
541 cf->data[2] |= CAN_ERR_PROT_STUFF;
544 case BXCAN_LEC_FORM_ERROR:
545 netdev_dbg(ndev, "Form error\n");
546 ndev->stats.rx_errors++;
548 cf->data[2] |= CAN_ERR_PROT_FORM;
551 case BXCAN_LEC_ACK_ERROR:
552 netdev_dbg(ndev, "Ack error\n");
553 ndev->stats.tx_errors++;
555 cf->can_id |= CAN_ERR_ACK;
556 cf->data[3] = CAN_ERR_PROT_LOC_ACK;
560 case BXCAN_LEC_BIT1_ERROR:
561 netdev_dbg(ndev, "Bit error (recessive)\n");
562 ndev->stats.tx_errors++;
564 cf->data[2] |= CAN_ERR_PROT_BIT1;
567 case BXCAN_LEC_BIT0_ERROR:
568 netdev_dbg(ndev, "Bit error (dominant)\n");
569 ndev->stats.tx_errors++;
571 cf->data[2] |= CAN_ERR_PROT_BIT0;
574 case BXCAN_LEC_CRC_ERROR:
575 netdev_dbg(ndev, "CRC error\n");
576 ndev->stats.rx_errors++;
578 cf->data[2] |= CAN_ERR_PROT_BIT;
579 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
590 err = can_rx_offload_queue_timestamp(&priv->offload, skb,
593 ndev->stats.rx_fifo_errors++;
597 static irqreturn_t bxcan_state_change_isr(int irq, void *dev_id)
599 struct net_device *ndev = dev_id;
600 struct bxcan_priv *priv = netdev_priv(ndev);
601 struct bxcan_regs __iomem *regs = priv->regs;
604 msr = readl(®s->msr);
605 if (!(msr & BXCAN_MSR_ERRI))
608 esr = readl(®s->esr);
609 bxcan_handle_state_change(ndev, esr);
611 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
612 bxcan_handle_bus_err(ndev, esr);
614 msr |= BXCAN_MSR_ERRI;
615 writel(msr, ®s->msr);
616 can_rx_offload_irq_finish(&priv->offload);
621 static int bxcan_chip_start(struct net_device *ndev)
623 struct bxcan_priv *priv = netdev_priv(ndev);
624 struct bxcan_regs __iomem *regs = priv->regs;
625 struct can_bittiming *bt = &priv->can.bittiming;
629 err = bxcan_chip_softreset(priv);
631 netdev_err(ndev, "failed to reset chip, error %pe\n",
636 err = bxcan_leave_sleep_mode(priv);
638 netdev_err(ndev, "failed to leave sleep mode, error %pe\n",
640 goto failed_leave_sleep;
643 err = bxcan_enter_init_mode(priv);
645 netdev_err(ndev, "failed to enter init mode, error %pe\n",
647 goto failed_enter_init;
652 * select request order priority
653 * enable time triggered mode
654 * bus-off state left on sw request
655 * sleep mode left on sw request
656 * retransmit automatically on error
657 * do not lock RX FIFO on overrun
659 bxcan_rmw(priv, ®s->mcr,
660 BXCAN_MCR_ABOM | BXCAN_MCR_AWUM | BXCAN_MCR_NART |
661 BXCAN_MCR_RFLM, BXCAN_MCR_TTCM | BXCAN_MCR_TXFP);
663 /* Bit timing register settings */
664 set = FIELD_PREP(BXCAN_BTR_BRP_MASK, bt->brp - 1) |
665 FIELD_PREP(BXCAN_BTR_TS1_MASK, bt->phase_seg1 +
667 FIELD_PREP(BXCAN_BTR_TS2_MASK, bt->phase_seg2 - 1) |
668 FIELD_PREP(BXCAN_BTR_SJW_MASK, bt->sjw - 1);
670 /* loopback + silent mode put the controller in test mode,
671 * useful for hot self-test
673 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
674 set |= BXCAN_BTR_LBKM;
676 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
677 set |= BXCAN_BTR_SILM;
679 bxcan_rmw(priv, ®s->btr, BXCAN_BTR_SILM | BXCAN_BTR_LBKM |
680 BXCAN_BTR_BRP_MASK | BXCAN_BTR_TS1_MASK | BXCAN_BTR_TS2_MASK |
681 BXCAN_BTR_SJW_MASK, set);
683 bxcan_enable_filters(priv, priv->primary);
685 /* Clear all internal status */
689 err = bxcan_leave_init_mode(priv);
691 netdev_err(ndev, "failed to leave init mode, error %pe\n",
693 goto failed_leave_init;
696 /* Set a `lec` value so that we can check for updates later */
697 bxcan_rmw(priv, ®s->esr, BXCAN_ESR_LEC_MASK,
698 FIELD_PREP(BXCAN_ESR_LEC_MASK, BXCAN_LEC_UNUSED));
702 * Enable interrupt for:
707 * RX FIFO pending message
710 clr = BXCAN_IER_WKUIE | BXCAN_IER_SLKIE | BXCAN_IER_FOVIE1 |
711 BXCAN_IER_FFIE1 | BXCAN_IER_FMPIE1 | BXCAN_IER_FOVIE0 |
713 set = BXCAN_IER_ERRIE | BXCAN_IER_BOFIE | BXCAN_IER_EPVIE |
714 BXCAN_IER_EWGIE | BXCAN_IER_FMPIE0 | BXCAN_IER_TMEIE;
716 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
717 set |= BXCAN_IER_LECIE;
719 clr |= BXCAN_IER_LECIE;
721 bxcan_rmw(priv, ®s->ier, clr, set);
723 priv->can.state = CAN_STATE_ERROR_ACTIVE;
729 bxcan_chip_softreset(priv);
733 static int bxcan_open(struct net_device *ndev)
735 struct bxcan_priv *priv = netdev_priv(ndev);
738 err = clk_prepare_enable(priv->clk);
740 netdev_err(ndev, "failed to enable clock, error %pe\n",
745 err = open_candev(ndev);
747 netdev_err(ndev, "open_candev() failed, error %pe\n",
749 goto out_disable_clock;
752 can_rx_offload_enable(&priv->offload);
753 err = request_irq(ndev->irq, bxcan_rx_isr, IRQF_SHARED, ndev->name,
756 netdev_err(ndev, "failed to register rx irq(%d), error %pe\n",
757 ndev->irq, ERR_PTR(err));
758 goto out_close_candev;
761 err = request_irq(priv->tx_irq, bxcan_tx_isr, IRQF_SHARED, ndev->name,
764 netdev_err(ndev, "failed to register tx irq(%d), error %pe\n",
765 priv->tx_irq, ERR_PTR(err));
766 goto out_free_rx_irq;
769 err = request_irq(priv->sce_irq, bxcan_state_change_isr, IRQF_SHARED,
772 netdev_err(ndev, "failed to register sce irq(%d), error %pe\n",
773 priv->sce_irq, ERR_PTR(err));
774 goto out_free_tx_irq;
777 err = bxcan_chip_start(ndev);
779 goto out_free_sce_irq;
781 netif_start_queue(ndev);
785 free_irq(priv->sce_irq, ndev);
787 free_irq(priv->tx_irq, ndev);
789 free_irq(ndev->irq, ndev);
791 can_rx_offload_disable(&priv->offload);
794 clk_disable_unprepare(priv->clk);
798 static void bxcan_chip_stop(struct net_device *ndev)
800 struct bxcan_priv *priv = netdev_priv(ndev);
801 struct bxcan_regs __iomem *regs = priv->regs;
803 /* disable all interrupts */
804 bxcan_rmw(priv, ®s->ier, BXCAN_IER_SLKIE | BXCAN_IER_WKUIE |
805 BXCAN_IER_ERRIE | BXCAN_IER_LECIE | BXCAN_IER_BOFIE |
806 BXCAN_IER_EPVIE | BXCAN_IER_EWGIE | BXCAN_IER_FOVIE1 |
807 BXCAN_IER_FFIE1 | BXCAN_IER_FMPIE1 | BXCAN_IER_FOVIE0 |
808 BXCAN_IER_FFIE0 | BXCAN_IER_FMPIE0 | BXCAN_IER_TMEIE, 0);
809 bxcan_disable_filters(priv, priv->primary);
810 bxcan_enter_sleep_mode(priv);
811 priv->can.state = CAN_STATE_STOPPED;
814 static int bxcan_stop(struct net_device *ndev)
816 struct bxcan_priv *priv = netdev_priv(ndev);
818 netif_stop_queue(ndev);
819 bxcan_chip_stop(ndev);
820 free_irq(ndev->irq, ndev);
821 free_irq(priv->tx_irq, ndev);
822 free_irq(priv->sce_irq, ndev);
823 can_rx_offload_disable(&priv->offload);
825 clk_disable_unprepare(priv->clk);
829 static netdev_tx_t bxcan_start_xmit(struct sk_buff *skb,
830 struct net_device *ndev)
832 struct bxcan_priv *priv = netdev_priv(ndev);
833 struct can_frame *cf = (struct can_frame *)skb->data;
834 struct bxcan_regs __iomem *regs = priv->regs;
835 struct bxcan_mb __iomem *mb_regs;
840 if (can_dropped_invalid_skb(ndev, skb))
843 if (bxcan_tx_busy(priv))
844 return NETDEV_TX_BUSY;
846 idx = bxcan_get_tx_head(priv);
848 if (bxcan_get_tx_free(priv) == 0)
849 netif_stop_queue(ndev);
851 mb_regs = ®s->tx_mb[idx];
852 if (cf->can_id & CAN_EFF_FLAG)
853 id = FIELD_PREP(BXCAN_TIxR_EXID_MASK, cf->can_id) |
856 id = FIELD_PREP(BXCAN_TIxR_STID_MASK, cf->can_id);
858 if (cf->can_id & CAN_RTR_FLAG) { /* Remote transmission request */
859 id |= BXCAN_TIxR_RTR;
861 for (i = 0, j = 0; i < cf->len; i += 4, j++)
862 writel(*(u32 *)(cf->data + i), &mb_regs->data[j]);
865 writel(FIELD_PREP(BXCAN_TDTxR_DLC_MASK, cf->len), &mb_regs->dlc);
867 can_put_echo_skb(skb, ndev, idx, 0);
869 /* Start transmission */
870 writel(id | BXCAN_TIxR_TXRQ, &mb_regs->id);
875 static const struct net_device_ops bxcan_netdev_ops = {
876 .ndo_open = bxcan_open,
877 .ndo_stop = bxcan_stop,
878 .ndo_start_xmit = bxcan_start_xmit,
879 .ndo_change_mtu = can_change_mtu,
882 static const struct ethtool_ops bxcan_ethtool_ops = {
883 .get_ts_info = ethtool_op_get_ts_info,
886 static int bxcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
892 err = bxcan_chip_start(ndev);
896 netif_wake_queue(ndev);
906 static int bxcan_get_berr_counter(const struct net_device *ndev,
907 struct can_berr_counter *bec)
909 struct bxcan_priv *priv = netdev_priv(ndev);
910 struct bxcan_regs __iomem *regs = priv->regs;
914 err = clk_prepare_enable(priv->clk);
918 esr = readl(®s->esr);
919 bec->txerr = FIELD_GET(BXCAN_ESR_TEC_MASK, esr);
920 bec->rxerr = FIELD_GET(BXCAN_ESR_REC_MASK, esr);
921 clk_disable_unprepare(priv->clk);
925 static int bxcan_probe(struct platform_device *pdev)
927 struct device_node *np = pdev->dev.of_node;
928 struct device *dev = &pdev->dev;
929 struct net_device *ndev;
930 struct bxcan_priv *priv;
931 struct clk *clk = NULL;
935 int err, rx_irq, tx_irq, sce_irq;
937 regs = devm_platform_ioremap_resource(pdev, 0);
939 dev_err(dev, "failed to get base address\n");
940 return PTR_ERR(regs);
943 gcan = syscon_regmap_lookup_by_phandle(np, "st,gcan");
945 dev_err(dev, "failed to get shared memory base address\n");
946 return PTR_ERR(gcan);
949 primary = of_property_read_bool(np, "st,can-primary");
950 clk = devm_clk_get(dev, NULL);
952 dev_err(dev, "failed to get clock\n");
956 rx_irq = platform_get_irq_byname(pdev, "rx0");
958 dev_err(dev, "failed to get rx0 irq\n");
962 tx_irq = platform_get_irq_byname(pdev, "tx");
964 dev_err(dev, "failed to get tx irq\n");
968 sce_irq = platform_get_irq_byname(pdev, "sce");
970 dev_err(dev, "failed to get sce irq\n");
974 ndev = alloc_candev(sizeof(struct bxcan_priv), BXCAN_TX_MB_NUM);
976 dev_err(dev, "alloc_candev() failed\n");
980 priv = netdev_priv(ndev);
981 platform_set_drvdata(pdev, ndev);
982 SET_NETDEV_DEV(ndev, dev);
983 ndev->netdev_ops = &bxcan_netdev_ops;
984 ndev->ethtool_ops = &bxcan_ethtool_ops;
986 ndev->flags |= IFF_ECHO;
993 priv->tx_irq = tx_irq;
994 priv->sce_irq = sce_irq;
995 priv->primary = primary;
996 priv->can.clock.freq = clk_get_rate(clk);
997 spin_lock_init(&priv->rmw_lock);
1000 priv->can.bittiming_const = &bxcan_bittiming_const;
1001 priv->can.do_set_mode = bxcan_do_set_mode;
1002 priv->can.do_get_berr_counter = bxcan_get_berr_counter;
1003 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
1004 CAN_CTRLMODE_LISTENONLY | CAN_CTRLMODE_BERR_REPORTING;
1006 priv->offload.mailbox_read = bxcan_mailbox_read;
1007 err = can_rx_offload_add_fifo(ndev, &priv->offload, BXCAN_NAPI_WEIGHT);
1009 dev_err(dev, "failed to add FIFO rx_offload\n");
1010 goto out_free_candev;
1013 err = register_candev(ndev);
1015 dev_err(dev, "failed to register netdev\n");
1016 goto out_can_rx_offload_del;
1019 dev_info(dev, "clk: %d Hz, IRQs: %d, %d, %d\n", priv->can.clock.freq,
1020 tx_irq, rx_irq, sce_irq);
1023 out_can_rx_offload_del:
1024 can_rx_offload_del(&priv->offload);
1030 static int bxcan_remove(struct platform_device *pdev)
1032 struct net_device *ndev = platform_get_drvdata(pdev);
1033 struct bxcan_priv *priv = netdev_priv(ndev);
1035 unregister_candev(ndev);
1036 clk_disable_unprepare(priv->clk);
1037 can_rx_offload_del(&priv->offload);
1042 static int __maybe_unused bxcan_suspend(struct device *dev)
1044 struct net_device *ndev = dev_get_drvdata(dev);
1045 struct bxcan_priv *priv = netdev_priv(ndev);
1047 if (!netif_running(ndev))
1050 netif_stop_queue(ndev);
1051 netif_device_detach(ndev);
1053 bxcan_enter_sleep_mode(priv);
1054 priv->can.state = CAN_STATE_SLEEPING;
1055 clk_disable_unprepare(priv->clk);
1059 static int __maybe_unused bxcan_resume(struct device *dev)
1061 struct net_device *ndev = dev_get_drvdata(dev);
1062 struct bxcan_priv *priv = netdev_priv(ndev);
1064 if (!netif_running(ndev))
1067 clk_prepare_enable(priv->clk);
1068 bxcan_leave_sleep_mode(priv);
1069 priv->can.state = CAN_STATE_ERROR_ACTIVE;
1071 netif_device_attach(ndev);
1072 netif_start_queue(ndev);
1076 static SIMPLE_DEV_PM_OPS(bxcan_pm_ops, bxcan_suspend, bxcan_resume);
1078 static const struct of_device_id bxcan_of_match[] = {
1079 {.compatible = "st,stm32f4-bxcan"},
1082 MODULE_DEVICE_TABLE(of, bxcan_of_match);
1084 static struct platform_driver bxcan_driver = {
1086 .name = KBUILD_MODNAME,
1087 .pm = &bxcan_pm_ops,
1088 .of_match_table = bxcan_of_match,
1090 .probe = bxcan_probe,
1091 .remove = bxcan_remove,
1094 module_platform_driver(bxcan_driver);
1097 MODULE_DESCRIPTION("STMicroelectronics Basic Extended CAN controller driver");
1098 MODULE_LICENSE("GPL");