1 // SPDX-License-Identifier: GPL-2.0
3 // bxcan.c - STM32 Basic Extended CAN controller driver
5 // Copyright (c) 2022 Dario Binacchi <dario.binacchi@amarulasolutions.com>
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/platform_device.h>
27 #include <linux/regmap.h>
29 #define BXCAN_NAPI_WEIGHT 3
30 #define BXCAN_TIMEOUT_US 10000
32 #define BXCAN_RX_MB_NUM 2
33 #define BXCAN_TX_MB_NUM 3
35 /* Primary control register (MCR) bits */
36 #define BXCAN_MCR_RESET BIT(15)
37 #define BXCAN_MCR_TTCM BIT(7)
38 #define BXCAN_MCR_ABOM BIT(6)
39 #define BXCAN_MCR_AWUM BIT(5)
40 #define BXCAN_MCR_NART BIT(4)
41 #define BXCAN_MCR_RFLM BIT(3)
42 #define BXCAN_MCR_TXFP BIT(2)
43 #define BXCAN_MCR_SLEEP BIT(1)
44 #define BXCAN_MCR_INRQ BIT(0)
46 /* Primary status register (MSR) bits */
47 #define BXCAN_MSR_ERRI BIT(2)
48 #define BXCAN_MSR_SLAK BIT(1)
49 #define BXCAN_MSR_INAK BIT(0)
51 /* Transmit status register (TSR) bits */
52 #define BXCAN_TSR_RQCP2 BIT(16)
53 #define BXCAN_TSR_RQCP1 BIT(8)
54 #define BXCAN_TSR_RQCP0 BIT(0)
56 /* Receive FIFO 0 register (RF0R) bits */
57 #define BXCAN_RF0R_RFOM0 BIT(5)
58 #define BXCAN_RF0R_FMP0_MASK GENMASK(1, 0)
60 /* Interrupt enable register (IER) bits */
61 #define BXCAN_IER_SLKIE BIT(17)
62 #define BXCAN_IER_WKUIE BIT(16)
63 #define BXCAN_IER_ERRIE BIT(15)
64 #define BXCAN_IER_LECIE BIT(11)
65 #define BXCAN_IER_BOFIE BIT(10)
66 #define BXCAN_IER_EPVIE BIT(9)
67 #define BXCAN_IER_EWGIE BIT(8)
68 #define BXCAN_IER_FOVIE1 BIT(6)
69 #define BXCAN_IER_FFIE1 BIT(5)
70 #define BXCAN_IER_FMPIE1 BIT(4)
71 #define BXCAN_IER_FOVIE0 BIT(3)
72 #define BXCAN_IER_FFIE0 BIT(2)
73 #define BXCAN_IER_FMPIE0 BIT(1)
74 #define BXCAN_IER_TMEIE BIT(0)
76 /* Error status register (ESR) bits */
77 #define BXCAN_ESR_REC_MASK GENMASK(31, 24)
78 #define BXCAN_ESR_TEC_MASK GENMASK(23, 16)
79 #define BXCAN_ESR_LEC_MASK GENMASK(6, 4)
80 #define BXCAN_ESR_BOFF BIT(2)
81 #define BXCAN_ESR_EPVF BIT(1)
82 #define BXCAN_ESR_EWGF BIT(0)
84 /* Bit timing register (BTR) bits */
85 #define BXCAN_BTR_SILM BIT(31)
86 #define BXCAN_BTR_LBKM BIT(30)
87 #define BXCAN_BTR_SJW_MASK GENMASK(25, 24)
88 #define BXCAN_BTR_TS2_MASK GENMASK(22, 20)
89 #define BXCAN_BTR_TS1_MASK GENMASK(19, 16)
90 #define BXCAN_BTR_BRP_MASK GENMASK(9, 0)
92 /* TX mailbox identifier register (TIxR, x = 0..2) bits */
93 #define BXCAN_TIxR_STID_MASK GENMASK(31, 21)
94 #define BXCAN_TIxR_EXID_MASK GENMASK(31, 3)
95 #define BXCAN_TIxR_IDE BIT(2)
96 #define BXCAN_TIxR_RTR BIT(1)
97 #define BXCAN_TIxR_TXRQ BIT(0)
99 /* TX mailbox data length and time stamp register (TDTxR, x = 0..2 bits */
100 #define BXCAN_TDTxR_DLC_MASK GENMASK(3, 0)
102 /* RX FIFO mailbox identifier register (RIxR, x = 0..1 */
103 #define BXCAN_RIxR_STID_MASK GENMASK(31, 21)
104 #define BXCAN_RIxR_EXID_MASK GENMASK(31, 3)
105 #define BXCAN_RIxR_IDE BIT(2)
106 #define BXCAN_RIxR_RTR BIT(1)
108 /* RX FIFO mailbox data length and timestamp register (RDTxR, x = 0..1) bits */
109 #define BXCAN_RDTxR_TIME_MASK GENMASK(31, 16)
110 #define BXCAN_RDTxR_DLC_MASK GENMASK(3, 0)
112 #define BXCAN_FMR_REG 0x00
113 #define BXCAN_FM1R_REG 0x04
114 #define BXCAN_FS1R_REG 0x0c
115 #define BXCAN_FFA1R_REG 0x14
116 #define BXCAN_FA1R_REG 0x1c
117 #define BXCAN_FiR1_REG(b) (0x40 + (b) * 8)
118 #define BXCAN_FiR2_REG(b) (0x44 + (b) * 8)
120 #define BXCAN_FILTER_ID(cfg) ((cfg) == BXCAN_CFG_DUAL_SECONDARY ? 14 : 0)
122 /* Filter primary register (FMR) bits */
123 #define BXCAN_FMR_CANSB_MASK GENMASK(13, 8)
124 #define BXCAN_FMR_FINIT BIT(0)
126 enum bxcan_lec_code
{
127 BXCAN_LEC_NO_ERROR
= 0,
128 BXCAN_LEC_STUFF_ERROR
,
129 BXCAN_LEC_FORM_ERROR
,
131 BXCAN_LEC_BIT1_ERROR
,
132 BXCAN_LEC_BIT0_ERROR
,
138 BXCAN_CFG_SINGLE
= 0,
139 BXCAN_CFG_DUAL_PRIMARY
,
140 BXCAN_CFG_DUAL_SECONDARY
143 /* Structure of the message buffer */
145 u32 id
; /* can identifier */
146 u32 dlc
; /* data length control and timestamp */
147 u32 data
[2]; /* data */
150 /* Structure of the hardware registers */
152 u32 mcr
; /* 0x00 - primary control */
153 u32 msr
; /* 0x04 - primary status */
154 u32 tsr
; /* 0x08 - transmit status */
155 u32 rf0r
; /* 0x0c - FIFO 0 */
156 u32 rf1r
; /* 0x10 - FIFO 1 */
157 u32 ier
; /* 0x14 - interrupt enable */
158 u32 esr
; /* 0x18 - error status */
159 u32 btr
; /* 0x1c - bit timing*/
160 u32 reserved0
[88]; /* 0x20 */
161 struct bxcan_mb tx_mb
[BXCAN_TX_MB_NUM
]; /* 0x180 - tx mailbox */
162 struct bxcan_mb rx_mb
[BXCAN_RX_MB_NUM
]; /* 0x1b0 - rx mailbox */
167 struct can_rx_offload offload
;
169 struct net_device
*ndev
;
171 struct bxcan_regs __iomem
*regs
;
177 spinlock_t rmw_lock
; /* lock for read-modify-write operations */
178 unsigned int tx_head
;
179 unsigned int tx_tail
;
183 static const struct can_bittiming_const bxcan_bittiming_const
= {
184 .name
= KBUILD_MODNAME
,
195 static inline void bxcan_rmw(struct bxcan_priv
*priv
, void __iomem
*addr
,
201 spin_lock_irqsave(&priv
->rmw_lock
, flags
);
203 val
= (old
& ~clear
) | set
;
207 spin_unlock_irqrestore(&priv
->rmw_lock
, flags
);
210 static void bxcan_disable_filters(struct bxcan_priv
*priv
, enum bxcan_cfg cfg
)
212 unsigned int fid
= BXCAN_FILTER_ID(cfg
);
213 u32 fmask
= BIT(fid
);
215 regmap_update_bits(priv
->gcan
, BXCAN_FA1R_REG
, fmask
, 0);
218 static void bxcan_enable_filters(struct bxcan_priv
*priv
, enum bxcan_cfg cfg
)
220 unsigned int fid
= BXCAN_FILTER_ID(cfg
);
221 u32 fmask
= BIT(fid
);
225 * Accept all messages.
226 * Assign filter 0 to CAN1 and filter 14 to CAN2 in identifier
227 * mask mode with 32 bits width.
230 /* Enter filter initialization mode and assing filters to CAN
233 regmap_update_bits(priv
->gcan
, BXCAN_FMR_REG
,
234 BXCAN_FMR_CANSB_MASK
| BXCAN_FMR_FINIT
,
235 FIELD_PREP(BXCAN_FMR_CANSB_MASK
, 14) |
238 /* Deactivate filter */
239 regmap_update_bits(priv
->gcan
, BXCAN_FA1R_REG
, fmask
, 0);
241 /* Two 32-bit registers in identifier mask mode */
242 regmap_update_bits(priv
->gcan
, BXCAN_FM1R_REG
, fmask
, 0);
244 /* Single 32-bit scale configuration */
245 regmap_update_bits(priv
->gcan
, BXCAN_FS1R_REG
, fmask
, fmask
);
247 /* Assign filter to FIFO 0 */
248 regmap_update_bits(priv
->gcan
, BXCAN_FFA1R_REG
, fmask
, 0);
250 /* Accept all messages */
251 regmap_write(priv
->gcan
, BXCAN_FiR1_REG(fid
), 0);
252 regmap_write(priv
->gcan
, BXCAN_FiR2_REG(fid
), 0);
254 /* Activate filter */
255 regmap_update_bits(priv
->gcan
, BXCAN_FA1R_REG
, fmask
, fmask
);
257 /* Exit filter initialization mode */
258 regmap_update_bits(priv
->gcan
, BXCAN_FMR_REG
, BXCAN_FMR_FINIT
, 0);
261 static inline u8
bxcan_get_tx_head(const struct bxcan_priv
*priv
)
263 return priv
->tx_head
% BXCAN_TX_MB_NUM
;
266 static inline u8
bxcan_get_tx_tail(const struct bxcan_priv
*priv
)
268 return priv
->tx_tail
% BXCAN_TX_MB_NUM
;
271 static inline u8
bxcan_get_tx_free(const struct bxcan_priv
*priv
)
273 return BXCAN_TX_MB_NUM
- (priv
->tx_head
- priv
->tx_tail
);
276 static bool bxcan_tx_busy(const struct bxcan_priv
*priv
)
278 if (bxcan_get_tx_free(priv
) > 0)
281 netif_stop_queue(priv
->ndev
);
283 /* Memory barrier before checking tx_free (head and tail) */
286 if (bxcan_get_tx_free(priv
) == 0) {
287 netdev_dbg(priv
->ndev
,
288 "Stopping tx-queue (tx_head=0x%08x, tx_tail=0x%08x, len=%d).\n",
289 priv
->tx_head
, priv
->tx_tail
,
290 priv
->tx_head
- priv
->tx_tail
);
295 netif_start_queue(priv
->ndev
);
300 static int bxcan_chip_softreset(struct bxcan_priv
*priv
)
302 struct bxcan_regs __iomem
*regs
= priv
->regs
;
305 bxcan_rmw(priv
, ®s
->mcr
, 0, BXCAN_MCR_RESET
);
306 return readx_poll_timeout(readl
, ®s
->msr
, value
,
307 value
& BXCAN_MSR_SLAK
, BXCAN_TIMEOUT_US
,
311 static int bxcan_enter_init_mode(struct bxcan_priv
*priv
)
313 struct bxcan_regs __iomem
*regs
= priv
->regs
;
316 bxcan_rmw(priv
, ®s
->mcr
, 0, BXCAN_MCR_INRQ
);
317 return readx_poll_timeout(readl
, ®s
->msr
, value
,
318 value
& BXCAN_MSR_INAK
, BXCAN_TIMEOUT_US
,
322 static int bxcan_leave_init_mode(struct bxcan_priv
*priv
)
324 struct bxcan_regs __iomem
*regs
= priv
->regs
;
327 bxcan_rmw(priv
, ®s
->mcr
, BXCAN_MCR_INRQ
, 0);
328 return readx_poll_timeout(readl
, ®s
->msr
, value
,
329 !(value
& BXCAN_MSR_INAK
), BXCAN_TIMEOUT_US
,
333 static int bxcan_enter_sleep_mode(struct bxcan_priv
*priv
)
335 struct bxcan_regs __iomem
*regs
= priv
->regs
;
338 bxcan_rmw(priv
, ®s
->mcr
, 0, BXCAN_MCR_SLEEP
);
339 return readx_poll_timeout(readl
, ®s
->msr
, value
,
340 value
& BXCAN_MSR_SLAK
, BXCAN_TIMEOUT_US
,
344 static int bxcan_leave_sleep_mode(struct bxcan_priv
*priv
)
346 struct bxcan_regs __iomem
*regs
= priv
->regs
;
349 bxcan_rmw(priv
, ®s
->mcr
, BXCAN_MCR_SLEEP
, 0);
350 return readx_poll_timeout(readl
, ®s
->msr
, value
,
351 !(value
& BXCAN_MSR_SLAK
), BXCAN_TIMEOUT_US
,
356 struct bxcan_priv
*rx_offload_to_priv(struct can_rx_offload
*offload
)
358 return container_of(offload
, struct bxcan_priv
, offload
);
361 static struct sk_buff
*bxcan_mailbox_read(struct can_rx_offload
*offload
,
362 unsigned int mbxno
, u32
*timestamp
,
365 struct bxcan_priv
*priv
= rx_offload_to_priv(offload
);
366 struct bxcan_regs __iomem
*regs
= priv
->regs
;
367 struct bxcan_mb __iomem
*mb_regs
= ®s
->rx_mb
[0];
368 struct sk_buff
*skb
= NULL
;
369 struct can_frame
*cf
;
372 rf0r
= readl(®s
->rf0r
);
373 if (unlikely(drop
)) {
374 skb
= ERR_PTR(-ENOBUFS
);
378 if (!(rf0r
& BXCAN_RF0R_FMP0_MASK
))
381 skb
= alloc_can_skb(offload
->dev
, &cf
);
382 if (unlikely(!skb
)) {
383 skb
= ERR_PTR(-ENOMEM
);
387 id
= readl(&mb_regs
->id
);
388 if (id
& BXCAN_RIxR_IDE
)
389 cf
->can_id
= FIELD_GET(BXCAN_RIxR_EXID_MASK
, id
) | CAN_EFF_FLAG
;
391 cf
->can_id
= FIELD_GET(BXCAN_RIxR_STID_MASK
, id
) & CAN_SFF_MASK
;
393 dlc
= readl(&mb_regs
->dlc
);
394 priv
->timestamp
= FIELD_GET(BXCAN_RDTxR_TIME_MASK
, dlc
);
395 cf
->len
= can_cc_dlc2len(FIELD_GET(BXCAN_RDTxR_DLC_MASK
, dlc
));
397 if (id
& BXCAN_RIxR_RTR
) {
398 cf
->can_id
|= CAN_RTR_FLAG
;
402 for (i
= 0, j
= 0; i
< cf
->len
; i
+= 4, j
++)
403 *(u32
*)(cf
->data
+ i
) = readl(&mb_regs
->data
[j
]);
407 rf0r
|= BXCAN_RF0R_RFOM0
;
408 writel(rf0r
, ®s
->rf0r
);
412 static irqreturn_t
bxcan_rx_isr(int irq
, void *dev_id
)
414 struct net_device
*ndev
= dev_id
;
415 struct bxcan_priv
*priv
= netdev_priv(ndev
);
416 struct bxcan_regs __iomem
*regs
= priv
->regs
;
419 rf0r
= readl(®s
->rf0r
);
420 if (!(rf0r
& BXCAN_RF0R_FMP0_MASK
))
423 can_rx_offload_irq_offload_fifo(&priv
->offload
);
424 can_rx_offload_irq_finish(&priv
->offload
);
429 static irqreturn_t
bxcan_tx_isr(int irq
, void *dev_id
)
431 struct net_device
*ndev
= dev_id
;
432 struct bxcan_priv
*priv
= netdev_priv(ndev
);
433 struct bxcan_regs __iomem
*regs
= priv
->regs
;
434 struct net_device_stats
*stats
= &ndev
->stats
;
438 tsr
= readl(®s
->tsr
);
439 if (!(tsr
& (BXCAN_TSR_RQCP0
| BXCAN_TSR_RQCP1
| BXCAN_TSR_RQCP2
)))
442 while (priv
->tx_head
- priv
->tx_tail
> 0) {
443 idx
= bxcan_get_tx_tail(priv
);
444 rqcp_bit
= BXCAN_TSR_RQCP0
<< (idx
<< 3);
445 if (!(tsr
& rqcp_bit
))
449 stats
->tx_bytes
+= can_get_echo_skb(ndev
, idx
, NULL
);
453 writel(tsr
, ®s
->tsr
);
455 if (bxcan_get_tx_free(priv
)) {
456 /* Make sure that anybody stopping the queue after
457 * this sees the new tx_ring->tail.
460 netif_wake_queue(ndev
);
466 static void bxcan_handle_state_change(struct net_device
*ndev
, u32 esr
)
468 struct bxcan_priv
*priv
= netdev_priv(ndev
);
469 enum can_state new_state
= priv
->can
.state
;
470 struct can_berr_counter bec
;
471 enum can_state rx_state
, tx_state
;
473 struct can_frame
*cf
;
475 /* Early exit if no error flag is set */
476 if (!(esr
& (BXCAN_ESR_EWGF
| BXCAN_ESR_EPVF
| BXCAN_ESR_BOFF
)))
479 bec
.txerr
= FIELD_GET(BXCAN_ESR_TEC_MASK
, esr
);
480 bec
.rxerr
= FIELD_GET(BXCAN_ESR_REC_MASK
, esr
);
482 if (esr
& BXCAN_ESR_BOFF
)
483 new_state
= CAN_STATE_BUS_OFF
;
484 else if (esr
& BXCAN_ESR_EPVF
)
485 new_state
= CAN_STATE_ERROR_PASSIVE
;
486 else if (esr
& BXCAN_ESR_EWGF
)
487 new_state
= CAN_STATE_ERROR_WARNING
;
489 /* state hasn't changed */
490 if (unlikely(new_state
== priv
->can
.state
))
493 skb
= alloc_can_err_skb(ndev
, &cf
);
495 tx_state
= bec
.txerr
>= bec
.rxerr
? new_state
: 0;
496 rx_state
= bec
.txerr
<= bec
.rxerr
? new_state
: 0;
497 can_change_state(ndev
, cf
, tx_state
, rx_state
);
499 if (new_state
== CAN_STATE_BUS_OFF
) {
502 cf
->can_id
|= CAN_ERR_CNT
;
503 cf
->data
[6] = bec
.txerr
;
504 cf
->data
[7] = bec
.rxerr
;
510 err
= can_rx_offload_queue_timestamp(&priv
->offload
, skb
,
513 ndev
->stats
.rx_fifo_errors
++;
517 static void bxcan_handle_bus_err(struct net_device
*ndev
, u32 esr
)
519 struct bxcan_priv
*priv
= netdev_priv(ndev
);
520 enum bxcan_lec_code lec_code
;
521 struct can_frame
*cf
;
524 lec_code
= FIELD_GET(BXCAN_ESR_LEC_MASK
, esr
);
526 /* Early exit if no lec update or no error.
527 * No lec update means that no CAN bus event has been detected
528 * since CPU wrote BXCAN_LEC_UNUSED value to status reg.
530 if (lec_code
== BXCAN_LEC_UNUSED
|| lec_code
== BXCAN_LEC_NO_ERROR
)
533 /* Common for all type of bus errors */
534 priv
->can
.can_stats
.bus_error
++;
536 /* Propagate the error condition to the CAN stack */
537 skb
= alloc_can_err_skb(ndev
, &cf
);
539 cf
->can_id
|= CAN_ERR_PROT
| CAN_ERR_BUSERROR
;
542 case BXCAN_LEC_STUFF_ERROR
:
543 netdev_dbg(ndev
, "Stuff error\n");
544 ndev
->stats
.rx_errors
++;
546 cf
->data
[2] |= CAN_ERR_PROT_STUFF
;
549 case BXCAN_LEC_FORM_ERROR
:
550 netdev_dbg(ndev
, "Form error\n");
551 ndev
->stats
.rx_errors
++;
553 cf
->data
[2] |= CAN_ERR_PROT_FORM
;
556 case BXCAN_LEC_ACK_ERROR
:
557 netdev_dbg(ndev
, "Ack error\n");
558 ndev
->stats
.tx_errors
++;
560 cf
->can_id
|= CAN_ERR_ACK
;
561 cf
->data
[3] = CAN_ERR_PROT_LOC_ACK
;
565 case BXCAN_LEC_BIT1_ERROR
:
566 netdev_dbg(ndev
, "Bit error (recessive)\n");
567 ndev
->stats
.tx_errors
++;
569 cf
->data
[2] |= CAN_ERR_PROT_BIT1
;
572 case BXCAN_LEC_BIT0_ERROR
:
573 netdev_dbg(ndev
, "Bit error (dominant)\n");
574 ndev
->stats
.tx_errors
++;
576 cf
->data
[2] |= CAN_ERR_PROT_BIT0
;
579 case BXCAN_LEC_CRC_ERROR
:
580 netdev_dbg(ndev
, "CRC error\n");
581 ndev
->stats
.rx_errors
++;
583 cf
->data
[2] |= CAN_ERR_PROT_BIT
;
584 cf
->data
[3] = CAN_ERR_PROT_LOC_CRC_SEQ
;
595 err
= can_rx_offload_queue_timestamp(&priv
->offload
, skb
,
598 ndev
->stats
.rx_fifo_errors
++;
602 static irqreturn_t
bxcan_state_change_isr(int irq
, void *dev_id
)
604 struct net_device
*ndev
= dev_id
;
605 struct bxcan_priv
*priv
= netdev_priv(ndev
);
606 struct bxcan_regs __iomem
*regs
= priv
->regs
;
609 msr
= readl(®s
->msr
);
610 if (!(msr
& BXCAN_MSR_ERRI
))
613 esr
= readl(®s
->esr
);
614 bxcan_handle_state_change(ndev
, esr
);
616 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_BERR_REPORTING
)
617 bxcan_handle_bus_err(ndev
, esr
);
619 msr
|= BXCAN_MSR_ERRI
;
620 writel(msr
, ®s
->msr
);
621 can_rx_offload_irq_finish(&priv
->offload
);
626 static int bxcan_chip_start(struct net_device
*ndev
)
628 struct bxcan_priv
*priv
= netdev_priv(ndev
);
629 struct bxcan_regs __iomem
*regs
= priv
->regs
;
630 struct can_bittiming
*bt
= &priv
->can
.bittiming
;
634 err
= bxcan_chip_softreset(priv
);
636 netdev_err(ndev
, "failed to reset chip, error %pe\n",
641 err
= bxcan_leave_sleep_mode(priv
);
643 netdev_err(ndev
, "failed to leave sleep mode, error %pe\n",
645 goto failed_leave_sleep
;
648 err
= bxcan_enter_init_mode(priv
);
650 netdev_err(ndev
, "failed to enter init mode, error %pe\n",
652 goto failed_enter_init
;
657 * select request order priority
658 * enable time triggered mode
659 * bus-off state left on sw request
660 * sleep mode left on sw request
661 * retransmit automatically on error
662 * do not lock RX FIFO on overrun
664 bxcan_rmw(priv
, ®s
->mcr
,
665 BXCAN_MCR_ABOM
| BXCAN_MCR_AWUM
| BXCAN_MCR_NART
|
666 BXCAN_MCR_RFLM
, BXCAN_MCR_TTCM
| BXCAN_MCR_TXFP
);
668 /* Bit timing register settings */
669 set
= FIELD_PREP(BXCAN_BTR_BRP_MASK
, bt
->brp
- 1) |
670 FIELD_PREP(BXCAN_BTR_TS1_MASK
, bt
->phase_seg1
+
672 FIELD_PREP(BXCAN_BTR_TS2_MASK
, bt
->phase_seg2
- 1) |
673 FIELD_PREP(BXCAN_BTR_SJW_MASK
, bt
->sjw
- 1);
675 /* loopback + silent mode put the controller in test mode,
676 * useful for hot self-test
678 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
679 set
|= BXCAN_BTR_LBKM
;
681 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
682 set
|= BXCAN_BTR_SILM
;
684 bxcan_rmw(priv
, ®s
->btr
, BXCAN_BTR_SILM
| BXCAN_BTR_LBKM
|
685 BXCAN_BTR_BRP_MASK
| BXCAN_BTR_TS1_MASK
| BXCAN_BTR_TS2_MASK
|
686 BXCAN_BTR_SJW_MASK
, set
);
688 bxcan_enable_filters(priv
, priv
->cfg
);
690 /* Clear all internal status */
694 err
= bxcan_leave_init_mode(priv
);
696 netdev_err(ndev
, "failed to leave init mode, error %pe\n",
698 goto failed_leave_init
;
701 /* Set a `lec` value so that we can check for updates later */
702 bxcan_rmw(priv
, ®s
->esr
, BXCAN_ESR_LEC_MASK
,
703 FIELD_PREP(BXCAN_ESR_LEC_MASK
, BXCAN_LEC_UNUSED
));
707 * Enable interrupt for:
712 * RX FIFO pending message
715 clr
= BXCAN_IER_WKUIE
| BXCAN_IER_SLKIE
| BXCAN_IER_FOVIE1
|
716 BXCAN_IER_FFIE1
| BXCAN_IER_FMPIE1
| BXCAN_IER_FOVIE0
|
718 set
= BXCAN_IER_ERRIE
| BXCAN_IER_BOFIE
| BXCAN_IER_EPVIE
|
719 BXCAN_IER_EWGIE
| BXCAN_IER_FMPIE0
| BXCAN_IER_TMEIE
;
721 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_BERR_REPORTING
)
722 set
|= BXCAN_IER_LECIE
;
724 clr
|= BXCAN_IER_LECIE
;
726 bxcan_rmw(priv
, ®s
->ier
, clr
, set
);
728 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
734 bxcan_chip_softreset(priv
);
738 static int bxcan_open(struct net_device
*ndev
)
740 struct bxcan_priv
*priv
= netdev_priv(ndev
);
743 err
= clk_prepare_enable(priv
->clk
);
745 netdev_err(ndev
, "failed to enable clock, error %pe\n",
750 err
= open_candev(ndev
);
752 netdev_err(ndev
, "open_candev() failed, error %pe\n",
754 goto out_disable_clock
;
757 can_rx_offload_enable(&priv
->offload
);
758 err
= request_irq(ndev
->irq
, bxcan_rx_isr
, IRQF_SHARED
, ndev
->name
,
761 netdev_err(ndev
, "failed to register rx irq(%d), error %pe\n",
762 ndev
->irq
, ERR_PTR(err
));
763 goto out_close_candev
;
766 err
= request_irq(priv
->tx_irq
, bxcan_tx_isr
, IRQF_SHARED
, ndev
->name
,
769 netdev_err(ndev
, "failed to register tx irq(%d), error %pe\n",
770 priv
->tx_irq
, ERR_PTR(err
));
771 goto out_free_rx_irq
;
774 err
= request_irq(priv
->sce_irq
, bxcan_state_change_isr
, IRQF_SHARED
,
777 netdev_err(ndev
, "failed to register sce irq(%d), error %pe\n",
778 priv
->sce_irq
, ERR_PTR(err
));
779 goto out_free_tx_irq
;
782 err
= bxcan_chip_start(ndev
);
784 goto out_free_sce_irq
;
786 netif_start_queue(ndev
);
790 free_irq(priv
->sce_irq
, ndev
);
792 free_irq(priv
->tx_irq
, ndev
);
794 free_irq(ndev
->irq
, ndev
);
796 can_rx_offload_disable(&priv
->offload
);
799 clk_disable_unprepare(priv
->clk
);
803 static void bxcan_chip_stop(struct net_device
*ndev
)
805 struct bxcan_priv
*priv
= netdev_priv(ndev
);
806 struct bxcan_regs __iomem
*regs
= priv
->regs
;
808 /* disable all interrupts */
809 bxcan_rmw(priv
, ®s
->ier
, BXCAN_IER_SLKIE
| BXCAN_IER_WKUIE
|
810 BXCAN_IER_ERRIE
| BXCAN_IER_LECIE
| BXCAN_IER_BOFIE
|
811 BXCAN_IER_EPVIE
| BXCAN_IER_EWGIE
| BXCAN_IER_FOVIE1
|
812 BXCAN_IER_FFIE1
| BXCAN_IER_FMPIE1
| BXCAN_IER_FOVIE0
|
813 BXCAN_IER_FFIE0
| BXCAN_IER_FMPIE0
| BXCAN_IER_TMEIE
, 0);
814 bxcan_disable_filters(priv
, priv
->cfg
);
815 bxcan_enter_sleep_mode(priv
);
816 priv
->can
.state
= CAN_STATE_STOPPED
;
819 static int bxcan_stop(struct net_device
*ndev
)
821 struct bxcan_priv
*priv
= netdev_priv(ndev
);
823 netif_stop_queue(ndev
);
824 bxcan_chip_stop(ndev
);
825 free_irq(ndev
->irq
, ndev
);
826 free_irq(priv
->tx_irq
, ndev
);
827 free_irq(priv
->sce_irq
, ndev
);
828 can_rx_offload_disable(&priv
->offload
);
830 clk_disable_unprepare(priv
->clk
);
834 static netdev_tx_t
bxcan_start_xmit(struct sk_buff
*skb
,
835 struct net_device
*ndev
)
837 struct bxcan_priv
*priv
= netdev_priv(ndev
);
838 struct can_frame
*cf
= (struct can_frame
*)skb
->data
;
839 struct bxcan_regs __iomem
*regs
= priv
->regs
;
840 struct bxcan_mb __iomem
*mb_regs
;
845 if (can_dropped_invalid_skb(ndev
, skb
))
848 if (bxcan_tx_busy(priv
))
849 return NETDEV_TX_BUSY
;
851 idx
= bxcan_get_tx_head(priv
);
853 if (bxcan_get_tx_free(priv
) == 0)
854 netif_stop_queue(ndev
);
856 mb_regs
= ®s
->tx_mb
[idx
];
857 if (cf
->can_id
& CAN_EFF_FLAG
)
858 id
= FIELD_PREP(BXCAN_TIxR_EXID_MASK
, cf
->can_id
) |
861 id
= FIELD_PREP(BXCAN_TIxR_STID_MASK
, cf
->can_id
);
863 if (cf
->can_id
& CAN_RTR_FLAG
) { /* Remote transmission request */
864 id
|= BXCAN_TIxR_RTR
;
866 for (i
= 0, j
= 0; i
< cf
->len
; i
+= 4, j
++)
867 writel(*(u32
*)(cf
->data
+ i
), &mb_regs
->data
[j
]);
870 writel(FIELD_PREP(BXCAN_TDTxR_DLC_MASK
, cf
->len
), &mb_regs
->dlc
);
872 can_put_echo_skb(skb
, ndev
, idx
, 0);
874 /* Start transmission */
875 writel(id
| BXCAN_TIxR_TXRQ
, &mb_regs
->id
);
880 static const struct net_device_ops bxcan_netdev_ops
= {
881 .ndo_open
= bxcan_open
,
882 .ndo_stop
= bxcan_stop
,
883 .ndo_start_xmit
= bxcan_start_xmit
,
884 .ndo_change_mtu
= can_change_mtu
,
887 static const struct ethtool_ops bxcan_ethtool_ops
= {
888 .get_ts_info
= ethtool_op_get_ts_info
,
891 static int bxcan_do_set_mode(struct net_device
*ndev
, enum can_mode mode
)
897 err
= bxcan_chip_start(ndev
);
901 netif_wake_queue(ndev
);
911 static int bxcan_get_berr_counter(const struct net_device
*ndev
,
912 struct can_berr_counter
*bec
)
914 struct bxcan_priv
*priv
= netdev_priv(ndev
);
915 struct bxcan_regs __iomem
*regs
= priv
->regs
;
919 err
= clk_prepare_enable(priv
->clk
);
923 esr
= readl(®s
->esr
);
924 bec
->txerr
= FIELD_GET(BXCAN_ESR_TEC_MASK
, esr
);
925 bec
->rxerr
= FIELD_GET(BXCAN_ESR_REC_MASK
, esr
);
926 clk_disable_unprepare(priv
->clk
);
930 static int bxcan_probe(struct platform_device
*pdev
)
932 struct device_node
*np
= pdev
->dev
.of_node
;
933 struct device
*dev
= &pdev
->dev
;
934 struct net_device
*ndev
;
935 struct bxcan_priv
*priv
;
936 struct clk
*clk
= NULL
;
940 int err
, rx_irq
, tx_irq
, sce_irq
;
942 regs
= devm_platform_ioremap_resource(pdev
, 0);
944 dev_err(dev
, "failed to get base address\n");
945 return PTR_ERR(regs
);
948 gcan
= syscon_regmap_lookup_by_phandle(np
, "st,gcan");
950 dev_err(dev
, "failed to get shared memory base address\n");
951 return PTR_ERR(gcan
);
954 if (of_property_read_bool(np
, "st,can-primary"))
955 cfg
= BXCAN_CFG_DUAL_PRIMARY
;
956 else if (of_property_read_bool(np
, "st,can-secondary"))
957 cfg
= BXCAN_CFG_DUAL_SECONDARY
;
959 cfg
= BXCAN_CFG_SINGLE
;
961 clk
= devm_clk_get(dev
, NULL
);
963 dev_err(dev
, "failed to get clock\n");
967 rx_irq
= platform_get_irq_byname(pdev
, "rx0");
971 tx_irq
= platform_get_irq_byname(pdev
, "tx");
975 sce_irq
= platform_get_irq_byname(pdev
, "sce");
979 ndev
= alloc_candev(sizeof(struct bxcan_priv
), BXCAN_TX_MB_NUM
);
981 dev_err(dev
, "alloc_candev() failed\n");
985 priv
= netdev_priv(ndev
);
986 platform_set_drvdata(pdev
, ndev
);
987 SET_NETDEV_DEV(ndev
, dev
);
988 ndev
->netdev_ops
= &bxcan_netdev_ops
;
989 ndev
->ethtool_ops
= &bxcan_ethtool_ops
;
991 ndev
->flags
|= IFF_ECHO
;
998 priv
->tx_irq
= tx_irq
;
999 priv
->sce_irq
= sce_irq
;
1001 priv
->can
.clock
.freq
= clk_get_rate(clk
);
1002 spin_lock_init(&priv
->rmw_lock
);
1005 priv
->can
.bittiming_const
= &bxcan_bittiming_const
;
1006 priv
->can
.do_set_mode
= bxcan_do_set_mode
;
1007 priv
->can
.do_get_berr_counter
= bxcan_get_berr_counter
;
1008 priv
->can
.ctrlmode_supported
= CAN_CTRLMODE_LOOPBACK
|
1009 CAN_CTRLMODE_LISTENONLY
| CAN_CTRLMODE_BERR_REPORTING
;
1011 priv
->offload
.mailbox_read
= bxcan_mailbox_read
;
1012 err
= can_rx_offload_add_fifo(ndev
, &priv
->offload
, BXCAN_NAPI_WEIGHT
);
1014 dev_err(dev
, "failed to add FIFO rx_offload\n");
1015 goto out_free_candev
;
1018 err
= register_candev(ndev
);
1020 dev_err(dev
, "failed to register netdev\n");
1021 goto out_can_rx_offload_del
;
1024 dev_info(dev
, "clk: %d Hz, IRQs: %d, %d, %d\n", priv
->can
.clock
.freq
,
1025 tx_irq
, rx_irq
, sce_irq
);
1028 out_can_rx_offload_del
:
1029 can_rx_offload_del(&priv
->offload
);
1035 static void bxcan_remove(struct platform_device
*pdev
)
1037 struct net_device
*ndev
= platform_get_drvdata(pdev
);
1038 struct bxcan_priv
*priv
= netdev_priv(ndev
);
1040 unregister_candev(ndev
);
1041 clk_disable_unprepare(priv
->clk
);
1042 can_rx_offload_del(&priv
->offload
);
1046 static int __maybe_unused
bxcan_suspend(struct device
*dev
)
1048 struct net_device
*ndev
= dev_get_drvdata(dev
);
1049 struct bxcan_priv
*priv
= netdev_priv(ndev
);
1051 if (!netif_running(ndev
))
1054 netif_stop_queue(ndev
);
1055 netif_device_detach(ndev
);
1057 bxcan_enter_sleep_mode(priv
);
1058 priv
->can
.state
= CAN_STATE_SLEEPING
;
1059 clk_disable_unprepare(priv
->clk
);
1063 static int __maybe_unused
bxcan_resume(struct device
*dev
)
1065 struct net_device
*ndev
= dev_get_drvdata(dev
);
1066 struct bxcan_priv
*priv
= netdev_priv(ndev
);
1068 if (!netif_running(ndev
))
1071 clk_prepare_enable(priv
->clk
);
1072 bxcan_leave_sleep_mode(priv
);
1073 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
1075 netif_device_attach(ndev
);
1076 netif_start_queue(ndev
);
1080 static SIMPLE_DEV_PM_OPS(bxcan_pm_ops
, bxcan_suspend
, bxcan_resume
);
1082 static const struct of_device_id bxcan_of_match
[] = {
1083 {.compatible
= "st,stm32f4-bxcan"},
1086 MODULE_DEVICE_TABLE(of
, bxcan_of_match
);
1088 static struct platform_driver bxcan_driver
= {
1090 .name
= KBUILD_MODNAME
,
1091 .pm
= &bxcan_pm_ops
,
1092 .of_match_table
= bxcan_of_match
,
1094 .probe
= bxcan_probe
,
1095 .remove
= bxcan_remove
,
1098 module_platform_driver(bxcan_driver
);
1100 MODULE_AUTHOR("Dario Binacchi <dario.binacchi@amarulasolutions.com>");
1101 MODULE_DESCRIPTION("STMicroelectronics Basic Extended CAN controller driver");
1102 MODULE_LICENSE("GPL");