1 // SPDX-License-Identifier: GPL-2.0
3 // flexcan.c - FLEXCAN CAN controller driver
5 // Copyright (c) 2005-2006 Varma Electronics Oy
6 // Copyright (c) 2009 Sascha Hauer, Pengutronix
7 // Copyright (c) 2010-2017 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de>
8 // Copyright (c) 2014 David Jander, Protonic Holland
10 // Based on code originally by Andrey Volkov <avolkov@varma-el.com>
12 #include <dt-bindings/firmware/imx/rsrc.h>
13 #include <linux/bitfield.h>
14 #include <linux/can.h>
15 #include <linux/can/dev.h>
16 #include <linux/can/error.h>
17 #include <linux/clk.h>
18 #include <linux/delay.h>
19 #include <linux/firmware/imx/sci.h>
20 #include <linux/interrupt.h>
22 #include <linux/mfd/syscon.h>
23 #include <linux/module.h>
24 #include <linux/netdevice.h>
26 #include <linux/pinctrl/consumer.h>
27 #include <linux/platform_device.h>
28 #include <linux/can/platform/flexcan.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/property.h>
31 #include <linux/regmap.h>
32 #include <linux/regulator/consumer.h>
36 #define DRV_NAME "flexcan"
38 /* 8 for RX fifo and 2 error handling */
39 #define FLEXCAN_NAPI_WEIGHT (8 + 2)
41 /* FLEXCAN module configuration register (CANMCR) bits */
42 #define FLEXCAN_MCR_MDIS BIT(31)
43 #define FLEXCAN_MCR_FRZ BIT(30)
44 #define FLEXCAN_MCR_FEN BIT(29)
45 #define FLEXCAN_MCR_HALT BIT(28)
46 #define FLEXCAN_MCR_NOT_RDY BIT(27)
47 #define FLEXCAN_MCR_WAK_MSK BIT(26)
48 #define FLEXCAN_MCR_SOFTRST BIT(25)
49 #define FLEXCAN_MCR_FRZ_ACK BIT(24)
50 #define FLEXCAN_MCR_SUPV BIT(23)
51 #define FLEXCAN_MCR_SLF_WAK BIT(22)
52 #define FLEXCAN_MCR_WRN_EN BIT(21)
53 #define FLEXCAN_MCR_LPM_ACK BIT(20)
54 #define FLEXCAN_MCR_WAK_SRC BIT(19)
55 #define FLEXCAN_MCR_DOZE BIT(18)
56 #define FLEXCAN_MCR_SRX_DIS BIT(17)
57 #define FLEXCAN_MCR_IRMQ BIT(16)
58 #define FLEXCAN_MCR_LPRIO_EN BIT(13)
59 #define FLEXCAN_MCR_AEN BIT(12)
60 #define FLEXCAN_MCR_FDEN BIT(11)
61 /* MCR_MAXMB: maximum used MBs is MAXMB + 1 */
62 #define FLEXCAN_MCR_MAXMB(x) ((x) & 0x7f)
63 #define FLEXCAN_MCR_IDAM_A (0x0 << 8)
64 #define FLEXCAN_MCR_IDAM_B (0x1 << 8)
65 #define FLEXCAN_MCR_IDAM_C (0x2 << 8)
66 #define FLEXCAN_MCR_IDAM_D (0x3 << 8)
68 /* FLEXCAN control register (CANCTRL) bits */
69 #define FLEXCAN_CTRL_PRESDIV(x) (((x) & 0xff) << 24)
70 #define FLEXCAN_CTRL_RJW(x) (((x) & 0x03) << 22)
71 #define FLEXCAN_CTRL_PSEG1(x) (((x) & 0x07) << 19)
72 #define FLEXCAN_CTRL_PSEG2(x) (((x) & 0x07) << 16)
73 #define FLEXCAN_CTRL_BOFF_MSK BIT(15)
74 #define FLEXCAN_CTRL_ERR_MSK BIT(14)
75 #define FLEXCAN_CTRL_CLK_SRC BIT(13)
76 #define FLEXCAN_CTRL_LPB BIT(12)
77 #define FLEXCAN_CTRL_TWRN_MSK BIT(11)
78 #define FLEXCAN_CTRL_RWRN_MSK BIT(10)
79 #define FLEXCAN_CTRL_SMP BIT(7)
80 #define FLEXCAN_CTRL_BOFF_REC BIT(6)
81 #define FLEXCAN_CTRL_TSYN BIT(5)
82 #define FLEXCAN_CTRL_LBUF BIT(4)
83 #define FLEXCAN_CTRL_LOM BIT(3)
84 #define FLEXCAN_CTRL_PROPSEG(x) ((x) & 0x07)
85 #define FLEXCAN_CTRL_ERR_BUS (FLEXCAN_CTRL_ERR_MSK)
86 #define FLEXCAN_CTRL_ERR_STATE \
87 (FLEXCAN_CTRL_TWRN_MSK | FLEXCAN_CTRL_RWRN_MSK | \
88 FLEXCAN_CTRL_BOFF_MSK)
89 #define FLEXCAN_CTRL_ERR_ALL \
90 (FLEXCAN_CTRL_ERR_BUS | FLEXCAN_CTRL_ERR_STATE)
92 /* FLEXCAN control register 2 (CTRL2) bits */
93 #define FLEXCAN_CTRL2_ECRWRE BIT(29)
94 #define FLEXCAN_CTRL2_WRMFRZ BIT(28)
95 #define FLEXCAN_CTRL2_RFFN(x) (((x) & 0x0f) << 24)
96 #define FLEXCAN_CTRL2_TASD(x) (((x) & 0x1f) << 19)
97 #define FLEXCAN_CTRL2_MRP BIT(18)
98 #define FLEXCAN_CTRL2_RRS BIT(17)
99 #define FLEXCAN_CTRL2_EACEN BIT(16)
100 #define FLEXCAN_CTRL2_ISOCANFDEN BIT(12)
102 /* FLEXCAN memory error control register (MECR) bits */
103 #define FLEXCAN_MECR_ECRWRDIS BIT(31)
104 #define FLEXCAN_MECR_HANCEI_MSK BIT(19)
105 #define FLEXCAN_MECR_FANCEI_MSK BIT(18)
106 #define FLEXCAN_MECR_CEI_MSK BIT(16)
107 #define FLEXCAN_MECR_HAERRIE BIT(15)
108 #define FLEXCAN_MECR_FAERRIE BIT(14)
109 #define FLEXCAN_MECR_EXTERRIE BIT(13)
110 #define FLEXCAN_MECR_RERRDIS BIT(9)
111 #define FLEXCAN_MECR_ECCDIS BIT(8)
112 #define FLEXCAN_MECR_NCEFAFRZ BIT(7)
114 /* FLEXCAN error and status register (ESR) bits */
115 #define FLEXCAN_ESR_TWRN_INT BIT(17)
116 #define FLEXCAN_ESR_RWRN_INT BIT(16)
117 #define FLEXCAN_ESR_BIT1_ERR BIT(15)
118 #define FLEXCAN_ESR_BIT0_ERR BIT(14)
119 #define FLEXCAN_ESR_ACK_ERR BIT(13)
120 #define FLEXCAN_ESR_CRC_ERR BIT(12)
121 #define FLEXCAN_ESR_FRM_ERR BIT(11)
122 #define FLEXCAN_ESR_STF_ERR BIT(10)
123 #define FLEXCAN_ESR_TX_WRN BIT(9)
124 #define FLEXCAN_ESR_RX_WRN BIT(8)
125 #define FLEXCAN_ESR_IDLE BIT(7)
126 #define FLEXCAN_ESR_TXRX BIT(6)
127 #define FLEXCAN_EST_FLT_CONF_SHIFT (4)
128 #define FLEXCAN_ESR_FLT_CONF_MASK (0x3 << FLEXCAN_EST_FLT_CONF_SHIFT)
129 #define FLEXCAN_ESR_FLT_CONF_ACTIVE (0x0 << FLEXCAN_EST_FLT_CONF_SHIFT)
130 #define FLEXCAN_ESR_FLT_CONF_PASSIVE (0x1 << FLEXCAN_EST_FLT_CONF_SHIFT)
131 #define FLEXCAN_ESR_BOFF_INT BIT(2)
132 #define FLEXCAN_ESR_ERR_INT BIT(1)
133 #define FLEXCAN_ESR_WAK_INT BIT(0)
134 #define FLEXCAN_ESR_ERR_BUS \
135 (FLEXCAN_ESR_BIT1_ERR | FLEXCAN_ESR_BIT0_ERR | \
136 FLEXCAN_ESR_ACK_ERR | FLEXCAN_ESR_CRC_ERR | \
137 FLEXCAN_ESR_FRM_ERR | FLEXCAN_ESR_STF_ERR)
138 #define FLEXCAN_ESR_ERR_STATE \
139 (FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | FLEXCAN_ESR_BOFF_INT)
140 #define FLEXCAN_ESR_ERR_ALL \
141 (FLEXCAN_ESR_ERR_BUS | FLEXCAN_ESR_ERR_STATE)
142 #define FLEXCAN_ESR_ALL_INT \
143 (FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | \
144 FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT)
146 /* FLEXCAN Bit Timing register (CBT) bits */
147 #define FLEXCAN_CBT_BTF BIT(31)
148 #define FLEXCAN_CBT_EPRESDIV_MASK GENMASK(30, 21)
149 #define FLEXCAN_CBT_ERJW_MASK GENMASK(20, 16)
150 #define FLEXCAN_CBT_EPROPSEG_MASK GENMASK(15, 10)
151 #define FLEXCAN_CBT_EPSEG1_MASK GENMASK(9, 5)
152 #define FLEXCAN_CBT_EPSEG2_MASK GENMASK(4, 0)
154 /* FLEXCAN FD control register (FDCTRL) bits */
155 #define FLEXCAN_FDCTRL_FDRATE BIT(31)
156 #define FLEXCAN_FDCTRL_MBDSR1 GENMASK(20, 19)
157 #define FLEXCAN_FDCTRL_MBDSR0 GENMASK(17, 16)
158 #define FLEXCAN_FDCTRL_MBDSR_8 0x0
159 #define FLEXCAN_FDCTRL_MBDSR_12 0x1
160 #define FLEXCAN_FDCTRL_MBDSR_32 0x2
161 #define FLEXCAN_FDCTRL_MBDSR_64 0x3
162 #define FLEXCAN_FDCTRL_TDCEN BIT(15)
163 #define FLEXCAN_FDCTRL_TDCFAIL BIT(14)
164 #define FLEXCAN_FDCTRL_TDCOFF GENMASK(12, 8)
165 #define FLEXCAN_FDCTRL_TDCVAL GENMASK(5, 0)
167 /* FLEXCAN FD Bit Timing register (FDCBT) bits */
168 #define FLEXCAN_FDCBT_FPRESDIV_MASK GENMASK(29, 20)
169 #define FLEXCAN_FDCBT_FRJW_MASK GENMASK(18, 16)
170 #define FLEXCAN_FDCBT_FPROPSEG_MASK GENMASK(14, 10)
171 #define FLEXCAN_FDCBT_FPSEG1_MASK GENMASK(7, 5)
172 #define FLEXCAN_FDCBT_FPSEG2_MASK GENMASK(2, 0)
174 /* FLEXCAN interrupt flag register (IFLAG) bits */
175 /* Errata ERR005829 step7: Reserve first valid MB */
176 #define FLEXCAN_TX_MB_RESERVED_RX_FIFO 8
177 #define FLEXCAN_TX_MB_RESERVED_RX_MAILBOX 0
178 #define FLEXCAN_RX_MB_RX_MAILBOX_FIRST (FLEXCAN_TX_MB_RESERVED_RX_MAILBOX + 1)
179 #define FLEXCAN_IFLAG_MB(x) BIT_ULL(x)
180 #define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7)
181 #define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6)
182 #define FLEXCAN_IFLAG_RX_FIFO_AVAILABLE BIT(5)
184 /* FLEXCAN message buffers */
185 #define FLEXCAN_MB_CODE_MASK (0xf << 24)
186 #define FLEXCAN_MB_CODE_RX_BUSY_BIT (0x1 << 24)
187 #define FLEXCAN_MB_CODE_RX_INACTIVE (0x0 << 24)
188 #define FLEXCAN_MB_CODE_RX_EMPTY (0x4 << 24)
189 #define FLEXCAN_MB_CODE_RX_FULL (0x2 << 24)
190 #define FLEXCAN_MB_CODE_RX_OVERRUN (0x6 << 24)
191 #define FLEXCAN_MB_CODE_RX_RANSWER (0xa << 24)
193 #define FLEXCAN_MB_CODE_TX_INACTIVE (0x8 << 24)
194 #define FLEXCAN_MB_CODE_TX_ABORT (0x9 << 24)
195 #define FLEXCAN_MB_CODE_TX_DATA (0xc << 24)
196 #define FLEXCAN_MB_CODE_TX_TANSWER (0xe << 24)
198 #define FLEXCAN_MB_CNT_EDL BIT(31)
199 #define FLEXCAN_MB_CNT_BRS BIT(30)
200 #define FLEXCAN_MB_CNT_ESI BIT(29)
201 #define FLEXCAN_MB_CNT_SRR BIT(22)
202 #define FLEXCAN_MB_CNT_IDE BIT(21)
203 #define FLEXCAN_MB_CNT_RTR BIT(20)
204 #define FLEXCAN_MB_CNT_LENGTH(x) (((x) & 0xf) << 16)
205 #define FLEXCAN_MB_CNT_TIMESTAMP(x) ((x) & 0xffff)
207 #define FLEXCAN_TIMEOUT_US (250)
209 /* Structure of the message buffer */
216 /* Structure of the hardware registers */
217 struct flexcan_regs
{
219 u32 ctrl
; /* 0x04 - Not affected by Soft Reset */
220 u32 timer
; /* 0x08 */
222 u32 rxgmask
; /* 0x10 - Not affected by Soft Reset */
223 u32 rx14mask
; /* 0x14 - Not affected by Soft Reset */
224 u32 rx15mask
; /* 0x18 - Not affected by Soft Reset */
227 u32 imask2
; /* 0x24 */
228 u32 imask1
; /* 0x28 */
229 u32 iflag2
; /* 0x2c */
230 u32 iflag1
; /* 0x30 */
232 u32 gfwr_mx28
; /* MX28, MX53 */
233 u32 ctrl2
; /* MX6, VF610 - Not affected by Soft Reset */
236 u32 imeur
; /* 0x3c */
239 u32 rxfgmask
; /* 0x48 */
240 u32 rxfir
; /* 0x4c - Not affected by Soft Reset */
241 u32 cbt
; /* 0x50 - Not affected by Soft Reset */
242 u32 _reserved2
; /* 0x54 */
245 u32 _reserved3
[8]; /* 0x60 */
247 u8 mb
[2][512]; /* 0x80 - Not affected by Soft Reset */
250 * 0x080...0x08f 0 RX message buffer
251 * 0x090...0x0df 1-5 reserved
252 * 0x0e0...0x0ff 6-7 8 entry ID table
253 * (mx25, mx28, mx35, mx53)
254 * 0x0e0...0x2df 6-7..37 8..128 entry ID table
255 * size conf'ed via ctrl2::RFFN
258 u32 _reserved4
[256]; /* 0x480 */
259 u32 rximr
[64]; /* 0x880 - Not affected by Soft Reset */
260 u32 _reserved5
[24]; /* 0x980 */
261 u32 gfwr_mx6
; /* 0x9e0 - MX6 */
262 u32 _reserved6
[39]; /* 0x9e4 */
263 u32 _rxfir
[6]; /* 0xa80 */
264 u32 _reserved8
[2]; /* 0xa98 */
265 u32 _rxmgmask
; /* 0xaa0 */
266 u32 _rxfgmask
; /* 0xaa4 */
267 u32 _rx14mask
; /* 0xaa8 */
268 u32 _rx15mask
; /* 0xaac */
269 u32 tx_smb
[4]; /* 0xab0 */
270 u32 rx_smb0
[4]; /* 0xac0 */
271 u32 rx_smb1
[4]; /* 0xad0 */
273 u32 mecr
; /* 0xae0 */
274 u32 erriar
; /* 0xae4 */
275 u32 erridpr
; /* 0xae8 */
276 u32 errippr
; /* 0xaec */
277 u32 rerrar
; /* 0xaf0 */
278 u32 rerrdr
; /* 0xaf4 */
279 u32 rerrsynr
; /* 0xaf8 */
280 u32 errsr
; /* 0xafc */
281 u32 _reserved7
[64]; /* 0xb00 */
282 u32 fdctrl
; /* 0xc00 - Not affected by Soft Reset */
283 u32 fdcbt
; /* 0xc04 - Not affected by Soft Reset */
284 u32 fdcrc
; /* 0xc08 */
285 u32 _reserved9
[199]; /* 0xc0c */
286 struct_group(init_fd
,
287 u32 tx_smb_fd
[18]; /* 0xf28 */
288 u32 rx_smb0_fd
[18]; /* 0xf70 */
289 u32 rx_smb1_fd
[18]; /* 0xfb8 */
293 static_assert(sizeof(struct flexcan_regs
) == 0x4 * 18 + 0xfb8);
295 static const struct flexcan_devtype_data fsl_mcf5441x_devtype_data
= {
296 .quirks
= FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
297 FLEXCAN_QUIRK_NR_IRQ_3
| FLEXCAN_QUIRK_NR_MB_16
|
298 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
299 FLEXCAN_QUIRK_SUPPORT_RX_FIFO
,
302 static const struct flexcan_devtype_data fsl_p1010_devtype_data
= {
303 .quirks
= FLEXCAN_QUIRK_BROKEN_WERR_STATE
|
304 FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
305 FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN
|
306 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
307 FLEXCAN_QUIRK_SUPPORT_RX_FIFO
,
310 static const struct flexcan_devtype_data fsl_imx25_devtype_data
= {
311 .quirks
= FLEXCAN_QUIRK_BROKEN_WERR_STATE
|
312 FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
313 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
314 FLEXCAN_QUIRK_SUPPORT_RX_FIFO
,
317 static const struct flexcan_devtype_data fsl_imx28_devtype_data
= {
318 .quirks
= FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
319 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
320 FLEXCAN_QUIRK_SUPPORT_RX_FIFO
,
323 static const struct flexcan_devtype_data fsl_imx6q_devtype_data
= {
324 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
325 FLEXCAN_QUIRK_USE_RX_MAILBOX
| FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
326 FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
|
327 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
328 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
331 static const struct flexcan_devtype_data fsl_imx8qm_devtype_data
= {
332 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
333 FLEXCAN_QUIRK_USE_RX_MAILBOX
| FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
334 FLEXCAN_QUIRK_SUPPORT_FD
| FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW
|
335 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
336 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
339 static struct flexcan_devtype_data fsl_imx8mp_devtype_data
= {
340 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
341 FLEXCAN_QUIRK_DISABLE_MECR
| FLEXCAN_QUIRK_USE_RX_MAILBOX
|
342 FLEXCAN_QUIRK_BROKEN_PERR_STATE
| FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
|
343 FLEXCAN_QUIRK_SUPPORT_FD
| FLEXCAN_QUIRK_SUPPORT_ECC
|
344 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
345 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
348 static struct flexcan_devtype_data fsl_imx93_devtype_data
= {
349 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
350 FLEXCAN_QUIRK_DISABLE_MECR
| FLEXCAN_QUIRK_USE_RX_MAILBOX
|
351 FLEXCAN_QUIRK_BROKEN_PERR_STATE
| FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
|
352 FLEXCAN_QUIRK_SUPPORT_FD
| FLEXCAN_QUIRK_SUPPORT_ECC
|
353 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
354 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
357 static const struct flexcan_devtype_data fsl_imx95_devtype_data
= {
358 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
359 FLEXCAN_QUIRK_DISABLE_MECR
| FLEXCAN_QUIRK_USE_RX_MAILBOX
|
360 FLEXCAN_QUIRK_BROKEN_PERR_STATE
| FLEXCAN_QUIRK_SUPPORT_FD
|
361 FLEXCAN_QUIRK_SUPPORT_ECC
| FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
362 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
| FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI
,
365 static const struct flexcan_devtype_data fsl_vf610_devtype_data
= {
366 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
367 FLEXCAN_QUIRK_DISABLE_MECR
| FLEXCAN_QUIRK_USE_RX_MAILBOX
|
368 FLEXCAN_QUIRK_BROKEN_PERR_STATE
| FLEXCAN_QUIRK_SUPPORT_ECC
|
369 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
370 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
373 static const struct flexcan_devtype_data fsl_ls1021a_r2_devtype_data
= {
374 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
375 FLEXCAN_QUIRK_BROKEN_PERR_STATE
| FLEXCAN_QUIRK_USE_RX_MAILBOX
|
376 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
377 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
380 static const struct flexcan_devtype_data fsl_lx2160a_r1_devtype_data
= {
381 .quirks
= FLEXCAN_QUIRK_DISABLE_RXFG
| FLEXCAN_QUIRK_ENABLE_EACEN_RRS
|
382 FLEXCAN_QUIRK_DISABLE_MECR
| FLEXCAN_QUIRK_BROKEN_PERR_STATE
|
383 FLEXCAN_QUIRK_USE_RX_MAILBOX
| FLEXCAN_QUIRK_SUPPORT_FD
|
384 FLEXCAN_QUIRK_SUPPORT_ECC
|
385 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
386 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
,
389 static const struct can_bittiming_const flexcan_bittiming_const
= {
401 static const struct can_bittiming_const flexcan_fd_bittiming_const
= {
413 static const struct can_bittiming_const flexcan_fd_data_bittiming_const
= {
425 /* FlexCAN module is essentially modelled as a little-endian IP in most
426 * SoCs, i.e the registers as well as the message buffer areas are
427 * implemented in a little-endian fashion.
429 * However there are some SoCs (e.g. LS1021A) which implement the FlexCAN
430 * module in a big-endian fashion (i.e the registers as well as the
431 * message buffer areas are implemented in a big-endian way).
433 * In addition, the FlexCAN module can be found on SoCs having ARM or
434 * PPC cores. So, we need to abstract off the register read/write
435 * functions, ensuring that these cater to all the combinations of module
436 * endianness and underlying CPU endianness.
438 static inline u32
flexcan_read_be(void __iomem
*addr
)
440 return ioread32be(addr
);
443 static inline void flexcan_write_be(u32 val
, void __iomem
*addr
)
445 iowrite32be(val
, addr
);
448 static inline u32
flexcan_read_le(void __iomem
*addr
)
450 return ioread32(addr
);
453 static inline void flexcan_write_le(u32 val
, void __iomem
*addr
)
455 iowrite32(val
, addr
);
458 static struct flexcan_mb __iomem
*flexcan_get_mb(const struct flexcan_priv
*priv
,
464 if (WARN_ON(mb_index
>= priv
->mb_count
))
467 bank_size
= sizeof(priv
->regs
->mb
[0]) / priv
->mb_size
;
469 bank
= mb_index
>= bank_size
;
471 mb_index
-= bank_size
;
473 return (struct flexcan_mb __iomem
*)
474 (&priv
->regs
->mb
[bank
][priv
->mb_size
* mb_index
]);
477 static int flexcan_low_power_enter_ack(struct flexcan_priv
*priv
)
479 struct flexcan_regs __iomem
*regs
= priv
->regs
;
480 unsigned int timeout
= FLEXCAN_TIMEOUT_US
/ 10;
482 while (timeout
-- && !(priv
->read(®s
->mcr
) & FLEXCAN_MCR_LPM_ACK
))
485 if (!(priv
->read(®s
->mcr
) & FLEXCAN_MCR_LPM_ACK
))
491 static int flexcan_low_power_exit_ack(struct flexcan_priv
*priv
)
493 struct flexcan_regs __iomem
*regs
= priv
->regs
;
494 unsigned int timeout
= FLEXCAN_TIMEOUT_US
/ 10;
496 while (timeout
-- && (priv
->read(®s
->mcr
) & FLEXCAN_MCR_LPM_ACK
))
499 if (priv
->read(®s
->mcr
) & FLEXCAN_MCR_LPM_ACK
)
505 static void flexcan_enable_wakeup_irq(struct flexcan_priv
*priv
, bool enable
)
507 struct flexcan_regs __iomem
*regs
= priv
->regs
;
510 reg_mcr
= priv
->read(®s
->mcr
);
513 reg_mcr
|= FLEXCAN_MCR_WAK_MSK
;
515 reg_mcr
&= ~FLEXCAN_MCR_WAK_MSK
;
517 priv
->write(reg_mcr
, ®s
->mcr
);
520 static int flexcan_stop_mode_enable_scfw(struct flexcan_priv
*priv
, bool enabled
)
522 u8 idx
= priv
->scu_idx
;
525 rsrc_id
= IMX_SC_R_CAN(idx
);
532 /* stop mode request via scu firmware */
533 return imx_sc_misc_set_control(priv
->sc_ipc_handle
, rsrc_id
,
534 IMX_SC_C_IPG_STOP
, val
);
537 static inline int flexcan_enter_stop_mode(struct flexcan_priv
*priv
)
539 struct flexcan_regs __iomem
*regs
= priv
->regs
;
543 reg_mcr
= priv
->read(®s
->mcr
);
544 reg_mcr
|= FLEXCAN_MCR_SLF_WAK
;
545 priv
->write(reg_mcr
, ®s
->mcr
);
547 /* enable stop request */
548 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW
) {
549 ret
= flexcan_stop_mode_enable_scfw(priv
, true);
552 } else if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
) {
553 regmap_update_bits(priv
->stm
.gpr
, priv
->stm
.req_gpr
,
554 1 << priv
->stm
.req_bit
, 1 << priv
->stm
.req_bit
);
555 } else if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI
) {
556 /* For the SCMI mode, driver do nothing, ATF will send request to
557 * SM(system manager, M33 core) through SCMI protocol after linux
558 * suspend. Once SM get this request, it will send IPG_STOP signal
559 * to Flex_CAN, let CAN in STOP mode.
564 return flexcan_low_power_enter_ack(priv
);
567 static inline int flexcan_exit_stop_mode(struct flexcan_priv
*priv
)
569 struct flexcan_regs __iomem
*regs
= priv
->regs
;
573 /* Remove stop request, for FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI,
574 * do nothing here, because ATF already send request to SM before
575 * linux resume. Once SM get this request, it will deassert the
576 * IPG_STOP signal to Flex_CAN.
578 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW
) {
579 ret
= flexcan_stop_mode_enable_scfw(priv
, false);
582 } else if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
) {
583 regmap_update_bits(priv
->stm
.gpr
, priv
->stm
.req_gpr
,
584 1 << priv
->stm
.req_bit
, 0);
587 reg_mcr
= priv
->read(®s
->mcr
);
588 reg_mcr
&= ~FLEXCAN_MCR_SLF_WAK
;
589 priv
->write(reg_mcr
, ®s
->mcr
);
591 return flexcan_low_power_exit_ack(priv
);
594 static inline void flexcan_error_irq_enable(const struct flexcan_priv
*priv
)
596 struct flexcan_regs __iomem
*regs
= priv
->regs
;
597 u32 reg_ctrl
= (priv
->reg_ctrl_default
| FLEXCAN_CTRL_ERR_MSK
);
599 priv
->write(reg_ctrl
, ®s
->ctrl
);
602 static inline void flexcan_error_irq_disable(const struct flexcan_priv
*priv
)
604 struct flexcan_regs __iomem
*regs
= priv
->regs
;
605 u32 reg_ctrl
= (priv
->reg_ctrl_default
& ~FLEXCAN_CTRL_ERR_MSK
);
607 priv
->write(reg_ctrl
, ®s
->ctrl
);
610 static int flexcan_clks_enable(const struct flexcan_priv
*priv
)
615 err
= clk_prepare_enable(priv
->clk_ipg
);
621 err
= clk_prepare_enable(priv
->clk_per
);
623 clk_disable_unprepare(priv
->clk_ipg
);
629 static void flexcan_clks_disable(const struct flexcan_priv
*priv
)
631 clk_disable_unprepare(priv
->clk_per
);
632 clk_disable_unprepare(priv
->clk_ipg
);
635 static inline int flexcan_transceiver_enable(const struct flexcan_priv
*priv
)
637 if (!priv
->reg_xceiver
)
640 return regulator_enable(priv
->reg_xceiver
);
643 static inline int flexcan_transceiver_disable(const struct flexcan_priv
*priv
)
645 if (!priv
->reg_xceiver
)
648 return regulator_disable(priv
->reg_xceiver
);
651 static int flexcan_chip_enable(struct flexcan_priv
*priv
)
653 struct flexcan_regs __iomem
*regs
= priv
->regs
;
656 reg
= priv
->read(®s
->mcr
);
657 reg
&= ~FLEXCAN_MCR_MDIS
;
658 priv
->write(reg
, ®s
->mcr
);
660 return flexcan_low_power_exit_ack(priv
);
663 static int flexcan_chip_disable(struct flexcan_priv
*priv
)
665 struct flexcan_regs __iomem
*regs
= priv
->regs
;
668 reg
= priv
->read(®s
->mcr
);
669 reg
|= FLEXCAN_MCR_MDIS
;
670 priv
->write(reg
, ®s
->mcr
);
672 return flexcan_low_power_enter_ack(priv
);
675 static int flexcan_chip_freeze(struct flexcan_priv
*priv
)
677 struct flexcan_regs __iomem
*regs
= priv
->regs
;
678 unsigned int timeout
;
679 u32 bitrate
= priv
->can
.bittiming
.bitrate
;
683 timeout
= 1000 * 1000 * 10 / bitrate
;
685 timeout
= FLEXCAN_TIMEOUT_US
/ 10;
687 reg
= priv
->read(®s
->mcr
);
688 reg
|= FLEXCAN_MCR_FRZ
| FLEXCAN_MCR_HALT
;
689 priv
->write(reg
, ®s
->mcr
);
691 while (timeout
-- && !(priv
->read(®s
->mcr
) & FLEXCAN_MCR_FRZ_ACK
))
694 if (!(priv
->read(®s
->mcr
) & FLEXCAN_MCR_FRZ_ACK
))
700 static int flexcan_chip_unfreeze(struct flexcan_priv
*priv
)
702 struct flexcan_regs __iomem
*regs
= priv
->regs
;
703 unsigned int timeout
= FLEXCAN_TIMEOUT_US
/ 10;
706 reg
= priv
->read(®s
->mcr
);
707 reg
&= ~FLEXCAN_MCR_HALT
;
708 priv
->write(reg
, ®s
->mcr
);
710 while (timeout
-- && (priv
->read(®s
->mcr
) & FLEXCAN_MCR_FRZ_ACK
))
713 if (priv
->read(®s
->mcr
) & FLEXCAN_MCR_FRZ_ACK
)
719 static int flexcan_chip_softreset(struct flexcan_priv
*priv
)
721 struct flexcan_regs __iomem
*regs
= priv
->regs
;
722 unsigned int timeout
= FLEXCAN_TIMEOUT_US
/ 10;
724 priv
->write(FLEXCAN_MCR_SOFTRST
, ®s
->mcr
);
725 while (timeout
-- && (priv
->read(®s
->mcr
) & FLEXCAN_MCR_SOFTRST
))
728 if (priv
->read(®s
->mcr
) & FLEXCAN_MCR_SOFTRST
)
734 static int __flexcan_get_berr_counter(const struct net_device
*dev
,
735 struct can_berr_counter
*bec
)
737 const struct flexcan_priv
*priv
= netdev_priv(dev
);
738 struct flexcan_regs __iomem
*regs
= priv
->regs
;
739 u32 reg
= priv
->read(®s
->ecr
);
741 bec
->txerr
= (reg
>> 0) & 0xff;
742 bec
->rxerr
= (reg
>> 8) & 0xff;
747 static int flexcan_get_berr_counter(const struct net_device
*dev
,
748 struct can_berr_counter
*bec
)
750 const struct flexcan_priv
*priv
= netdev_priv(dev
);
753 err
= pm_runtime_resume_and_get(priv
->dev
);
757 err
= __flexcan_get_berr_counter(dev
, bec
);
759 pm_runtime_put(priv
->dev
);
764 static netdev_tx_t
flexcan_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
766 const struct flexcan_priv
*priv
= netdev_priv(dev
);
767 struct canfd_frame
*cfd
= (struct canfd_frame
*)skb
->data
;
770 u32 ctrl
= FLEXCAN_MB_CODE_TX_DATA
| ((can_fd_len2dlc(cfd
->len
)) << 16);
773 if (can_dev_dropped_skb(dev
, skb
))
776 netif_stop_queue(dev
);
778 if (cfd
->can_id
& CAN_EFF_FLAG
) {
779 can_id
= cfd
->can_id
& CAN_EFF_MASK
;
780 ctrl
|= FLEXCAN_MB_CNT_IDE
| FLEXCAN_MB_CNT_SRR
;
782 can_id
= (cfd
->can_id
& CAN_SFF_MASK
) << 18;
785 if (cfd
->can_id
& CAN_RTR_FLAG
)
786 ctrl
|= FLEXCAN_MB_CNT_RTR
;
788 if (can_is_canfd_skb(skb
)) {
789 ctrl
|= FLEXCAN_MB_CNT_EDL
;
791 if (cfd
->flags
& CANFD_BRS
)
792 ctrl
|= FLEXCAN_MB_CNT_BRS
;
795 for (i
= 0; i
< cfd
->len
; i
+= sizeof(u32
)) {
796 data
= be32_to_cpup((__be32
*)&cfd
->data
[i
]);
797 priv
->write(data
, &priv
->tx_mb
->data
[i
/ sizeof(u32
)]);
800 can_put_echo_skb(skb
, dev
, 0, 0);
802 priv
->write(can_id
, &priv
->tx_mb
->can_id
);
803 priv
->write(ctrl
, &priv
->tx_mb
->can_ctrl
);
805 /* Errata ERR005829 step8:
806 * Write twice INACTIVE(0x8) code to first MB.
808 priv
->write(FLEXCAN_MB_CODE_TX_INACTIVE
,
809 &priv
->tx_mb_reserved
->can_ctrl
);
810 priv
->write(FLEXCAN_MB_CODE_TX_INACTIVE
,
811 &priv
->tx_mb_reserved
->can_ctrl
);
816 static void flexcan_irq_bus_err(struct net_device
*dev
, u32 reg_esr
)
818 struct flexcan_priv
*priv
= netdev_priv(dev
);
819 struct flexcan_regs __iomem
*regs
= priv
->regs
;
821 struct can_frame
*cf
;
822 bool rx_errors
= false, tx_errors
= false;
826 timestamp
= priv
->read(®s
->timer
) << 16;
828 skb
= alloc_can_err_skb(dev
, &cf
);
832 cf
->can_id
|= CAN_ERR_PROT
| CAN_ERR_BUSERROR
;
834 if (reg_esr
& FLEXCAN_ESR_BIT1_ERR
) {
835 netdev_dbg(dev
, "BIT1_ERR irq\n");
836 cf
->data
[2] |= CAN_ERR_PROT_BIT1
;
839 if (reg_esr
& FLEXCAN_ESR_BIT0_ERR
) {
840 netdev_dbg(dev
, "BIT0_ERR irq\n");
841 cf
->data
[2] |= CAN_ERR_PROT_BIT0
;
844 if (reg_esr
& FLEXCAN_ESR_ACK_ERR
) {
845 netdev_dbg(dev
, "ACK_ERR irq\n");
846 cf
->can_id
|= CAN_ERR_ACK
;
847 cf
->data
[3] = CAN_ERR_PROT_LOC_ACK
;
850 if (reg_esr
& FLEXCAN_ESR_CRC_ERR
) {
851 netdev_dbg(dev
, "CRC_ERR irq\n");
852 cf
->data
[2] |= CAN_ERR_PROT_BIT
;
853 cf
->data
[3] = CAN_ERR_PROT_LOC_CRC_SEQ
;
856 if (reg_esr
& FLEXCAN_ESR_FRM_ERR
) {
857 netdev_dbg(dev
, "FRM_ERR irq\n");
858 cf
->data
[2] |= CAN_ERR_PROT_FORM
;
861 if (reg_esr
& FLEXCAN_ESR_STF_ERR
) {
862 netdev_dbg(dev
, "STF_ERR irq\n");
863 cf
->data
[2] |= CAN_ERR_PROT_STUFF
;
867 priv
->can
.can_stats
.bus_error
++;
869 dev
->stats
.rx_errors
++;
871 dev
->stats
.tx_errors
++;
873 err
= can_rx_offload_queue_timestamp(&priv
->offload
, skb
, timestamp
);
875 dev
->stats
.rx_fifo_errors
++;
878 static void flexcan_irq_state(struct net_device
*dev
, u32 reg_esr
)
880 struct flexcan_priv
*priv
= netdev_priv(dev
);
881 struct flexcan_regs __iomem
*regs
= priv
->regs
;
883 struct can_frame
*cf
;
884 enum can_state new_state
, rx_state
, tx_state
;
886 struct can_berr_counter bec
;
890 flt
= reg_esr
& FLEXCAN_ESR_FLT_CONF_MASK
;
891 if (likely(flt
== FLEXCAN_ESR_FLT_CONF_ACTIVE
)) {
892 tx_state
= unlikely(reg_esr
& FLEXCAN_ESR_TX_WRN
) ?
893 CAN_STATE_ERROR_WARNING
: CAN_STATE_ERROR_ACTIVE
;
894 rx_state
= unlikely(reg_esr
& FLEXCAN_ESR_RX_WRN
) ?
895 CAN_STATE_ERROR_WARNING
: CAN_STATE_ERROR_ACTIVE
;
896 new_state
= max(tx_state
, rx_state
);
898 __flexcan_get_berr_counter(dev
, &bec
);
899 new_state
= flt
== FLEXCAN_ESR_FLT_CONF_PASSIVE
?
900 CAN_STATE_ERROR_PASSIVE
: CAN_STATE_BUS_OFF
;
901 rx_state
= bec
.rxerr
>= bec
.txerr
? new_state
: 0;
902 tx_state
= bec
.rxerr
<= bec
.txerr
? new_state
: 0;
905 /* state hasn't changed */
906 if (likely(new_state
== priv
->can
.state
))
909 timestamp
= priv
->read(®s
->timer
) << 16;
911 skb
= alloc_can_err_skb(dev
, &cf
);
915 can_change_state(dev
, cf
, tx_state
, rx_state
);
917 if (unlikely(new_state
== CAN_STATE_BUS_OFF
))
920 err
= can_rx_offload_queue_timestamp(&priv
->offload
, skb
, timestamp
);
922 dev
->stats
.rx_fifo_errors
++;
925 static inline u64
flexcan_read64_mask(struct flexcan_priv
*priv
, void __iomem
*addr
, u64 mask
)
929 if (upper_32_bits(mask
))
930 reg
= (u64
)priv
->read(addr
- 4) << 32;
931 if (lower_32_bits(mask
))
932 reg
|= priv
->read(addr
);
937 static inline void flexcan_write64(struct flexcan_priv
*priv
, u64 val
, void __iomem
*addr
)
939 if (upper_32_bits(val
))
940 priv
->write(upper_32_bits(val
), addr
- 4);
941 if (lower_32_bits(val
))
942 priv
->write(lower_32_bits(val
), addr
);
945 static inline u64
flexcan_read_reg_iflag_rx(struct flexcan_priv
*priv
)
947 return flexcan_read64_mask(priv
, &priv
->regs
->iflag1
, priv
->rx_mask
);
950 static inline u64
flexcan_read_reg_iflag_tx(struct flexcan_priv
*priv
)
952 return flexcan_read64_mask(priv
, &priv
->regs
->iflag1
, priv
->tx_mask
);
955 static inline struct flexcan_priv
*rx_offload_to_priv(struct can_rx_offload
*offload
)
957 return container_of(offload
, struct flexcan_priv
, offload
);
960 static struct sk_buff
*flexcan_mailbox_read(struct can_rx_offload
*offload
,
961 unsigned int n
, u32
*timestamp
,
964 struct flexcan_priv
*priv
= rx_offload_to_priv(offload
);
965 struct flexcan_regs __iomem
*regs
= priv
->regs
;
966 struct flexcan_mb __iomem
*mb
;
968 struct canfd_frame
*cfd
;
969 u32 reg_ctrl
, reg_id
, reg_iflag1
;
972 mb
= flexcan_get_mb(priv
, n
);
974 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
) {
978 reg_ctrl
= priv
->read(&mb
->can_ctrl
);
979 } while (reg_ctrl
& FLEXCAN_MB_CODE_RX_BUSY_BIT
);
981 /* is this MB empty? */
982 code
= reg_ctrl
& FLEXCAN_MB_CODE_MASK
;
983 if ((code
!= FLEXCAN_MB_CODE_RX_FULL
) &&
984 (code
!= FLEXCAN_MB_CODE_RX_OVERRUN
))
987 if (code
== FLEXCAN_MB_CODE_RX_OVERRUN
) {
988 /* This MB was overrun, we lost data */
989 offload
->dev
->stats
.rx_over_errors
++;
990 offload
->dev
->stats
.rx_errors
++;
993 reg_iflag1
= priv
->read(®s
->iflag1
);
994 if (!(reg_iflag1
& FLEXCAN_IFLAG_RX_FIFO_AVAILABLE
))
997 reg_ctrl
= priv
->read(&mb
->can_ctrl
);
1000 if (unlikely(drop
)) {
1001 skb
= ERR_PTR(-ENOBUFS
);
1005 if (reg_ctrl
& FLEXCAN_MB_CNT_EDL
)
1006 skb
= alloc_canfd_skb(offload
->dev
, &cfd
);
1008 skb
= alloc_can_skb(offload
->dev
, (struct can_frame
**)&cfd
);
1009 if (unlikely(!skb
)) {
1010 skb
= ERR_PTR(-ENOMEM
);
1014 /* increase timstamp to full 32 bit */
1015 *timestamp
= reg_ctrl
<< 16;
1017 reg_id
= priv
->read(&mb
->can_id
);
1018 if (reg_ctrl
& FLEXCAN_MB_CNT_IDE
)
1019 cfd
->can_id
= ((reg_id
>> 0) & CAN_EFF_MASK
) | CAN_EFF_FLAG
;
1021 cfd
->can_id
= (reg_id
>> 18) & CAN_SFF_MASK
;
1023 if (reg_ctrl
& FLEXCAN_MB_CNT_EDL
) {
1024 cfd
->len
= can_fd_dlc2len((reg_ctrl
>> 16) & 0xf);
1026 if (reg_ctrl
& FLEXCAN_MB_CNT_BRS
)
1027 cfd
->flags
|= CANFD_BRS
;
1029 cfd
->len
= can_cc_dlc2len((reg_ctrl
>> 16) & 0xf);
1031 if (reg_ctrl
& FLEXCAN_MB_CNT_RTR
)
1032 cfd
->can_id
|= CAN_RTR_FLAG
;
1035 if (reg_ctrl
& FLEXCAN_MB_CNT_ESI
)
1036 cfd
->flags
|= CANFD_ESI
;
1038 for (i
= 0; i
< cfd
->len
; i
+= sizeof(u32
)) {
1039 __be32 data
= cpu_to_be32(priv
->read(&mb
->data
[i
/ sizeof(u32
)]));
1040 *(__be32
*)(cfd
->data
+ i
) = data
;
1044 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
)
1045 flexcan_write64(priv
, FLEXCAN_IFLAG_MB(n
), ®s
->iflag1
);
1047 priv
->write(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE
, ®s
->iflag1
);
1049 /* Read the Free Running Timer. It is optional but recommended
1050 * to unlock Mailbox as soon as possible and make it available
1053 priv
->read(®s
->timer
);
1058 static irqreturn_t
flexcan_irq(int irq
, void *dev_id
)
1060 struct net_device
*dev
= dev_id
;
1061 struct net_device_stats
*stats
= &dev
->stats
;
1062 struct flexcan_priv
*priv
= netdev_priv(dev
);
1063 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1064 irqreturn_t handled
= IRQ_NONE
;
1067 enum can_state last_state
= priv
->can
.state
;
1069 /* reception interrupt */
1070 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
) {
1074 while ((reg_iflag_rx
= flexcan_read_reg_iflag_rx(priv
))) {
1075 handled
= IRQ_HANDLED
;
1076 ret
= can_rx_offload_irq_offload_timestamp(&priv
->offload
,
1084 reg_iflag1
= priv
->read(®s
->iflag1
);
1085 if (reg_iflag1
& FLEXCAN_IFLAG_RX_FIFO_AVAILABLE
) {
1086 handled
= IRQ_HANDLED
;
1087 can_rx_offload_irq_offload_fifo(&priv
->offload
);
1090 /* FIFO overflow interrupt */
1091 if (reg_iflag1
& FLEXCAN_IFLAG_RX_FIFO_OVERFLOW
) {
1092 handled
= IRQ_HANDLED
;
1093 priv
->write(FLEXCAN_IFLAG_RX_FIFO_OVERFLOW
,
1095 dev
->stats
.rx_over_errors
++;
1096 dev
->stats
.rx_errors
++;
1100 reg_iflag_tx
= flexcan_read_reg_iflag_tx(priv
);
1102 /* transmission complete interrupt */
1103 if (reg_iflag_tx
& priv
->tx_mask
) {
1104 u32 reg_ctrl
= priv
->read(&priv
->tx_mb
->can_ctrl
);
1106 handled
= IRQ_HANDLED
;
1108 can_rx_offload_get_echo_skb_queue_timestamp(&priv
->offload
, 0,
1109 reg_ctrl
<< 16, NULL
);
1110 stats
->tx_packets
++;
1112 /* after sending a RTR frame MB is in RX mode */
1113 priv
->write(FLEXCAN_MB_CODE_TX_INACTIVE
,
1114 &priv
->tx_mb
->can_ctrl
);
1115 flexcan_write64(priv
, priv
->tx_mask
, ®s
->iflag1
);
1116 netif_wake_queue(dev
);
1119 reg_esr
= priv
->read(®s
->esr
);
1121 /* ACK all bus error, state change and wake IRQ sources */
1122 if (reg_esr
& (FLEXCAN_ESR_ALL_INT
| FLEXCAN_ESR_WAK_INT
)) {
1123 handled
= IRQ_HANDLED
;
1124 priv
->write(reg_esr
& (FLEXCAN_ESR_ALL_INT
| FLEXCAN_ESR_WAK_INT
), ®s
->esr
);
1127 /* state change interrupt or broken error state quirk fix is enabled */
1128 if ((reg_esr
& FLEXCAN_ESR_ERR_STATE
) ||
1129 (priv
->devtype_data
.quirks
& (FLEXCAN_QUIRK_BROKEN_WERR_STATE
|
1130 FLEXCAN_QUIRK_BROKEN_PERR_STATE
)))
1131 flexcan_irq_state(dev
, reg_esr
);
1133 /* bus error IRQ - handle if bus error reporting is activated */
1134 if ((reg_esr
& FLEXCAN_ESR_ERR_BUS
) &&
1135 (priv
->can
.ctrlmode
& CAN_CTRLMODE_BERR_REPORTING
))
1136 flexcan_irq_bus_err(dev
, reg_esr
);
1138 /* availability of error interrupt among state transitions in case
1139 * bus error reporting is de-activated and
1140 * FLEXCAN_QUIRK_BROKEN_PERR_STATE is enabled:
1141 * +--------------------------------------------------------------+
1142 * | +----------------------------------------------+ [stopped / |
1143 * | | | sleeping] -+
1144 * +-+-> active <-> warning <-> passive -> bus off -+
1145 * ___________^^^^^^^^^^^^_______________________________
1146 * disabled(1) enabled disabled
1148 * (1): enabled if FLEXCAN_QUIRK_BROKEN_WERR_STATE is enabled
1150 if ((last_state
!= priv
->can
.state
) &&
1151 (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_BROKEN_PERR_STATE
) &&
1152 !(priv
->can
.ctrlmode
& CAN_CTRLMODE_BERR_REPORTING
)) {
1153 switch (priv
->can
.state
) {
1154 case CAN_STATE_ERROR_ACTIVE
:
1155 if (priv
->devtype_data
.quirks
&
1156 FLEXCAN_QUIRK_BROKEN_WERR_STATE
)
1157 flexcan_error_irq_enable(priv
);
1159 flexcan_error_irq_disable(priv
);
1162 case CAN_STATE_ERROR_WARNING
:
1163 flexcan_error_irq_enable(priv
);
1166 case CAN_STATE_ERROR_PASSIVE
:
1167 case CAN_STATE_BUS_OFF
:
1168 flexcan_error_irq_disable(priv
);
1177 can_rx_offload_irq_finish(&priv
->offload
);
1182 static void flexcan_set_bittiming_ctrl(const struct net_device
*dev
)
1184 const struct flexcan_priv
*priv
= netdev_priv(dev
);
1185 const struct can_bittiming
*bt
= &priv
->can
.bittiming
;
1186 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1189 reg
= priv
->read(®s
->ctrl
);
1190 reg
&= ~(FLEXCAN_CTRL_PRESDIV(0xff) |
1191 FLEXCAN_CTRL_RJW(0x3) |
1192 FLEXCAN_CTRL_PSEG1(0x7) |
1193 FLEXCAN_CTRL_PSEG2(0x7) |
1194 FLEXCAN_CTRL_PROPSEG(0x7));
1196 reg
|= FLEXCAN_CTRL_PRESDIV(bt
->brp
- 1) |
1197 FLEXCAN_CTRL_PSEG1(bt
->phase_seg1
- 1) |
1198 FLEXCAN_CTRL_PSEG2(bt
->phase_seg2
- 1) |
1199 FLEXCAN_CTRL_RJW(bt
->sjw
- 1) |
1200 FLEXCAN_CTRL_PROPSEG(bt
->prop_seg
- 1);
1202 netdev_dbg(dev
, "writing ctrl=0x%08x\n", reg
);
1203 priv
->write(reg
, ®s
->ctrl
);
1205 /* print chip status */
1206 netdev_dbg(dev
, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__
,
1207 priv
->read(®s
->mcr
), priv
->read(®s
->ctrl
));
1210 static void flexcan_set_bittiming_cbt(const struct net_device
*dev
)
1212 struct flexcan_priv
*priv
= netdev_priv(dev
);
1213 struct can_bittiming
*bt
= &priv
->can
.bittiming
;
1214 struct can_bittiming
*dbt
= &priv
->can
.data_bittiming
;
1215 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1216 u32 reg_cbt
, reg_fdctrl
;
1219 /* CBT[EPSEG1] is 5 bit long and CBT[EPROPSEG] is 6 bit
1220 * long. The can_calc_bittiming() tries to divide the tseg1
1221 * equally between phase_seg1 and prop_seg, which may not fit
1222 * in CBT register. Therefore, if phase_seg1 is more than
1223 * possible value, increase prop_seg and decrease phase_seg1.
1225 if (bt
->phase_seg1
> 0x20) {
1226 bt
->prop_seg
+= (bt
->phase_seg1
- 0x20);
1227 bt
->phase_seg1
= 0x20;
1230 reg_cbt
= FLEXCAN_CBT_BTF
|
1231 FIELD_PREP(FLEXCAN_CBT_EPRESDIV_MASK
, bt
->brp
- 1) |
1232 FIELD_PREP(FLEXCAN_CBT_ERJW_MASK
, bt
->sjw
- 1) |
1233 FIELD_PREP(FLEXCAN_CBT_EPROPSEG_MASK
, bt
->prop_seg
- 1) |
1234 FIELD_PREP(FLEXCAN_CBT_EPSEG1_MASK
, bt
->phase_seg1
- 1) |
1235 FIELD_PREP(FLEXCAN_CBT_EPSEG2_MASK
, bt
->phase_seg2
- 1);
1237 netdev_dbg(dev
, "writing cbt=0x%08x\n", reg_cbt
);
1238 priv
->write(reg_cbt
, ®s
->cbt
);
1240 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
) {
1241 u32 reg_fdcbt
, reg_ctrl2
;
1243 if (bt
->brp
!= dbt
->brp
)
1244 netdev_warn(dev
, "Data brp=%d and brp=%d don't match, this may result in a phase error. Consider using different bitrate and/or data bitrate.\n",
1248 /* FDCBT[FPSEG1] is 3 bit long and FDCBT[FPROPSEG] is
1249 * 5 bit long. The can_calc_bittiming tries to divide
1250 * the tseg1 equally between phase_seg1 and prop_seg,
1251 * which may not fit in FDCBT register. Therefore, if
1252 * phase_seg1 is more than possible value, increase
1253 * prop_seg and decrease phase_seg1
1255 if (dbt
->phase_seg1
> 0x8) {
1256 dbt
->prop_seg
+= (dbt
->phase_seg1
- 0x8);
1257 dbt
->phase_seg1
= 0x8;
1260 reg_fdcbt
= priv
->read(®s
->fdcbt
);
1261 reg_fdcbt
&= ~(FIELD_PREP(FLEXCAN_FDCBT_FPRESDIV_MASK
, 0x3ff) |
1262 FIELD_PREP(FLEXCAN_FDCBT_FRJW_MASK
, 0x7) |
1263 FIELD_PREP(FLEXCAN_FDCBT_FPROPSEG_MASK
, 0x1f) |
1264 FIELD_PREP(FLEXCAN_FDCBT_FPSEG1_MASK
, 0x7) |
1265 FIELD_PREP(FLEXCAN_FDCBT_FPSEG2_MASK
, 0x7));
1267 reg_fdcbt
|= FIELD_PREP(FLEXCAN_FDCBT_FPRESDIV_MASK
, dbt
->brp
- 1) |
1268 FIELD_PREP(FLEXCAN_FDCBT_FRJW_MASK
, dbt
->sjw
- 1) |
1269 FIELD_PREP(FLEXCAN_FDCBT_FPROPSEG_MASK
, dbt
->prop_seg
) |
1270 FIELD_PREP(FLEXCAN_FDCBT_FPSEG1_MASK
, dbt
->phase_seg1
- 1) |
1271 FIELD_PREP(FLEXCAN_FDCBT_FPSEG2_MASK
, dbt
->phase_seg2
- 1);
1273 netdev_dbg(dev
, "writing fdcbt=0x%08x\n", reg_fdcbt
);
1274 priv
->write(reg_fdcbt
, ®s
->fdcbt
);
1277 reg_ctrl2
= priv
->read(®s
->ctrl2
);
1278 reg_ctrl2
&= ~FLEXCAN_CTRL2_ISOCANFDEN
;
1279 if (!(priv
->can
.ctrlmode
& CAN_CTRLMODE_FD_NON_ISO
))
1280 reg_ctrl2
|= FLEXCAN_CTRL2_ISOCANFDEN
;
1282 netdev_dbg(dev
, "writing ctrl2=0x%08x\n", reg_ctrl2
);
1283 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1287 reg_fdctrl
= priv
->read(®s
->fdctrl
);
1288 reg_fdctrl
&= ~(FLEXCAN_FDCTRL_FDRATE
|
1289 FIELD_PREP(FLEXCAN_FDCTRL_TDCOFF
, 0x1f));
1291 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
) {
1292 reg_fdctrl
|= FLEXCAN_FDCTRL_FDRATE
;
1294 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LOOPBACK
) {
1295 /* TDC must be disabled for Loop Back mode */
1296 reg_fdctrl
&= ~FLEXCAN_FDCTRL_TDCEN
;
1298 reg_fdctrl
|= FLEXCAN_FDCTRL_TDCEN
|
1299 FIELD_PREP(FLEXCAN_FDCTRL_TDCOFF
,
1300 ((dbt
->phase_seg1
- 1) +
1301 dbt
->prop_seg
+ 2) *
1302 ((dbt
->brp
- 1 ) + 1));
1306 netdev_dbg(dev
, "writing fdctrl=0x%08x\n", reg_fdctrl
);
1307 priv
->write(reg_fdctrl
, ®s
->fdctrl
);
1309 netdev_dbg(dev
, "%s: mcr=0x%08x ctrl=0x%08x ctrl2=0x%08x fdctrl=0x%08x cbt=0x%08x fdcbt=0x%08x\n",
1311 priv
->read(®s
->mcr
), priv
->read(®s
->ctrl
),
1312 priv
->read(®s
->ctrl2
), priv
->read(®s
->fdctrl
),
1313 priv
->read(®s
->cbt
), priv
->read(®s
->fdcbt
));
1316 static void flexcan_set_bittiming(struct net_device
*dev
)
1318 const struct flexcan_priv
*priv
= netdev_priv(dev
);
1319 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1322 reg
= priv
->read(®s
->ctrl
);
1323 reg
&= ~(FLEXCAN_CTRL_LPB
| FLEXCAN_CTRL_SMP
|
1326 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
1327 reg
|= FLEXCAN_CTRL_LPB
;
1328 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
1329 reg
|= FLEXCAN_CTRL_LOM
;
1330 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_3_SAMPLES
)
1331 reg
|= FLEXCAN_CTRL_SMP
;
1333 netdev_dbg(dev
, "writing ctrl=0x%08x\n", reg
);
1334 priv
->write(reg
, ®s
->ctrl
);
1336 if (priv
->can
.ctrlmode_supported
& CAN_CTRLMODE_FD
)
1337 return flexcan_set_bittiming_cbt(dev
);
1339 return flexcan_set_bittiming_ctrl(dev
);
1342 static void flexcan_ram_init(struct net_device
*dev
)
1344 struct flexcan_priv
*priv
= netdev_priv(dev
);
1345 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1348 /* 11.8.3.13 Detection and correction of memory errors:
1349 * CTRL2[WRMFRZ] grants write access to all memory positions
1350 * that require initialization, ranging from 0x080 to 0xADF
1351 * and from 0xF28 to 0xFFF when the CAN FD feature is enabled.
1352 * The RXMGMASK, RX14MASK, RX15MASK, and RXFGMASK registers
1353 * need to be initialized as well. MCR[RFEN] must not be set
1354 * during memory initialization.
1356 reg_ctrl2
= priv
->read(®s
->ctrl2
);
1357 reg_ctrl2
|= FLEXCAN_CTRL2_WRMFRZ
;
1358 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1360 memset_io(®s
->init
, 0, sizeof(regs
->init
));
1362 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
)
1363 memset_io(®s
->init_fd
, 0, sizeof(regs
->init_fd
));
1365 reg_ctrl2
&= ~FLEXCAN_CTRL2_WRMFRZ
;
1366 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1369 static int flexcan_rx_offload_setup(struct net_device
*dev
)
1371 struct flexcan_priv
*priv
= netdev_priv(dev
);
1374 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
)
1375 priv
->mb_size
= sizeof(struct flexcan_mb
) + CANFD_MAX_DLEN
;
1377 priv
->mb_size
= sizeof(struct flexcan_mb
) + CAN_MAX_DLEN
;
1379 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_NR_MB_16
)
1380 priv
->mb_count
= 16;
1382 priv
->mb_count
= (sizeof(priv
->regs
->mb
[0]) / priv
->mb_size
) +
1383 (sizeof(priv
->regs
->mb
[1]) / priv
->mb_size
);
1385 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
)
1386 priv
->tx_mb_reserved
=
1387 flexcan_get_mb(priv
, FLEXCAN_TX_MB_RESERVED_RX_MAILBOX
);
1389 priv
->tx_mb_reserved
=
1390 flexcan_get_mb(priv
, FLEXCAN_TX_MB_RESERVED_RX_FIFO
);
1391 priv
->tx_mb_idx
= priv
->mb_count
- 1;
1392 priv
->tx_mb
= flexcan_get_mb(priv
, priv
->tx_mb_idx
);
1393 priv
->tx_mask
= FLEXCAN_IFLAG_MB(priv
->tx_mb_idx
);
1395 priv
->offload
.mailbox_read
= flexcan_mailbox_read
;
1397 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
) {
1398 priv
->offload
.mb_first
= FLEXCAN_RX_MB_RX_MAILBOX_FIRST
;
1399 priv
->offload
.mb_last
= priv
->mb_count
- 2;
1401 priv
->rx_mask
= GENMASK_ULL(priv
->offload
.mb_last
,
1402 priv
->offload
.mb_first
);
1403 err
= can_rx_offload_add_timestamp(dev
, &priv
->offload
);
1405 priv
->rx_mask
= FLEXCAN_IFLAG_RX_FIFO_OVERFLOW
|
1406 FLEXCAN_IFLAG_RX_FIFO_AVAILABLE
;
1407 err
= can_rx_offload_add_fifo(dev
, &priv
->offload
,
1408 FLEXCAN_NAPI_WEIGHT
);
1414 static void flexcan_chip_interrupts_enable(const struct net_device
*dev
)
1416 const struct flexcan_priv
*priv
= netdev_priv(dev
);
1417 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1420 disable_irq(dev
->irq
);
1421 priv
->write(priv
->reg_ctrl_default
, ®s
->ctrl
);
1422 reg_imask
= priv
->rx_mask
| priv
->tx_mask
;
1423 priv
->write(upper_32_bits(reg_imask
), ®s
->imask2
);
1424 priv
->write(lower_32_bits(reg_imask
), ®s
->imask1
);
1425 enable_irq(dev
->irq
);
1428 static void flexcan_chip_interrupts_disable(const struct net_device
*dev
)
1430 const struct flexcan_priv
*priv
= netdev_priv(dev
);
1431 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1433 priv
->write(0, ®s
->imask2
);
1434 priv
->write(0, ®s
->imask1
);
1435 priv
->write(priv
->reg_ctrl_default
& ~FLEXCAN_CTRL_ERR_ALL
,
1439 /* flexcan_chip_start
1441 * this functions is entered with clocks enabled
1444 static int flexcan_chip_start(struct net_device
*dev
)
1446 struct flexcan_priv
*priv
= netdev_priv(dev
);
1447 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1448 u32 reg_mcr
, reg_ctrl
, reg_ctrl2
, reg_mecr
;
1450 struct flexcan_mb __iomem
*mb
;
1453 err
= flexcan_chip_enable(priv
);
1458 err
= flexcan_chip_softreset(priv
);
1460 goto out_chip_disable
;
1462 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SUPPORT_ECC
)
1463 flexcan_ram_init(dev
);
1465 flexcan_set_bittiming(dev
);
1467 /* set freeze, halt */
1468 err
= flexcan_chip_freeze(priv
);
1470 goto out_chip_disable
;
1474 * only supervisor access
1475 * enable warning int
1476 * enable individual RX masking
1478 * set max mailbox number
1480 reg_mcr
= priv
->read(®s
->mcr
);
1481 reg_mcr
&= ~FLEXCAN_MCR_MAXMB(0xff);
1482 reg_mcr
|= FLEXCAN_MCR_SUPV
| FLEXCAN_MCR_WRN_EN
| FLEXCAN_MCR_IRMQ
|
1483 FLEXCAN_MCR_IDAM_C
| FLEXCAN_MCR_MAXMB(priv
->tx_mb_idx
);
1488 * - disable for mailbox mode
1489 * - enable for FIFO mode
1491 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
)
1492 reg_mcr
&= ~FLEXCAN_MCR_FEN
;
1494 reg_mcr
|= FLEXCAN_MCR_FEN
;
1498 * NOTE: In loopback mode, the CAN_MCR[SRXDIS] cannot be
1499 * asserted because this will impede the self reception
1500 * of a transmitted message. This is not documented in
1501 * earlier versions of flexcan block guide.
1504 * - enable Self Reception for loopback mode
1505 * (by clearing "Self Reception Disable" bit)
1506 * - disable for normal operation
1508 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
1509 reg_mcr
&= ~FLEXCAN_MCR_SRX_DIS
;
1511 reg_mcr
|= FLEXCAN_MCR_SRX_DIS
;
1514 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
)
1515 reg_mcr
|= FLEXCAN_MCR_FDEN
;
1517 reg_mcr
&= ~FLEXCAN_MCR_FDEN
;
1519 netdev_dbg(dev
, "%s: writing mcr=0x%08x", __func__
, reg_mcr
);
1520 priv
->write(reg_mcr
, ®s
->mcr
);
1524 * disable timer sync feature
1526 * disable auto busoff recovery
1527 * transmit lowest buffer first
1529 * enable tx and rx warning interrupt
1530 * enable bus off interrupt
1531 * (== FLEXCAN_CTRL_ERR_STATE)
1533 reg_ctrl
= priv
->read(®s
->ctrl
);
1534 reg_ctrl
&= ~FLEXCAN_CTRL_TSYN
;
1535 reg_ctrl
|= FLEXCAN_CTRL_BOFF_REC
| FLEXCAN_CTRL_LBUF
|
1536 FLEXCAN_CTRL_ERR_STATE
;
1538 /* enable the "error interrupt" (FLEXCAN_CTRL_ERR_MSK),
1539 * on most Flexcan cores, too. Otherwise we don't get
1540 * any error warning or passive interrupts.
1542 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_BROKEN_WERR_STATE
||
1543 priv
->can
.ctrlmode
& CAN_CTRLMODE_BERR_REPORTING
)
1544 reg_ctrl
|= FLEXCAN_CTRL_ERR_MSK
;
1546 reg_ctrl
&= ~FLEXCAN_CTRL_ERR_MSK
;
1548 /* save for later use */
1549 priv
->reg_ctrl_default
= reg_ctrl
;
1550 /* leave interrupts disabled for now */
1551 reg_ctrl
&= ~FLEXCAN_CTRL_ERR_ALL
;
1552 netdev_dbg(dev
, "%s: writing ctrl=0x%08x", __func__
, reg_ctrl
);
1553 priv
->write(reg_ctrl
, ®s
->ctrl
);
1555 if ((priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_ENABLE_EACEN_RRS
)) {
1556 reg_ctrl2
= priv
->read(®s
->ctrl2
);
1557 reg_ctrl2
|= FLEXCAN_CTRL2_EACEN
| FLEXCAN_CTRL2_RRS
;
1558 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1561 if (priv
->can
.ctrlmode_supported
& CAN_CTRLMODE_FD
) {
1564 reg_fdctrl
= priv
->read(®s
->fdctrl
);
1565 reg_fdctrl
&= ~(FIELD_PREP(FLEXCAN_FDCTRL_MBDSR1
, 0x3) |
1566 FIELD_PREP(FLEXCAN_FDCTRL_MBDSR0
, 0x3));
1568 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
) {
1570 FIELD_PREP(FLEXCAN_FDCTRL_MBDSR1
,
1571 FLEXCAN_FDCTRL_MBDSR_64
) |
1572 FIELD_PREP(FLEXCAN_FDCTRL_MBDSR0
,
1573 FLEXCAN_FDCTRL_MBDSR_64
);
1576 FIELD_PREP(FLEXCAN_FDCTRL_MBDSR1
,
1577 FLEXCAN_FDCTRL_MBDSR_8
) |
1578 FIELD_PREP(FLEXCAN_FDCTRL_MBDSR0
,
1579 FLEXCAN_FDCTRL_MBDSR_8
);
1582 netdev_dbg(dev
, "%s: writing fdctrl=0x%08x",
1583 __func__
, reg_fdctrl
);
1584 priv
->write(reg_fdctrl
, ®s
->fdctrl
);
1587 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_USE_RX_MAILBOX
) {
1588 for (i
= priv
->offload
.mb_first
; i
<= priv
->offload
.mb_last
; i
++) {
1589 mb
= flexcan_get_mb(priv
, i
);
1590 priv
->write(FLEXCAN_MB_CODE_RX_EMPTY
,
1594 /* clear and invalidate unused mailboxes first */
1595 for (i
= FLEXCAN_TX_MB_RESERVED_RX_FIFO
; i
< priv
->mb_count
; i
++) {
1596 mb
= flexcan_get_mb(priv
, i
);
1597 priv
->write(FLEXCAN_MB_CODE_RX_INACTIVE
,
1602 /* Errata ERR005829: mark first TX mailbox as INACTIVE */
1603 priv
->write(FLEXCAN_MB_CODE_TX_INACTIVE
,
1604 &priv
->tx_mb_reserved
->can_ctrl
);
1606 /* mark TX mailbox as INACTIVE */
1607 priv
->write(FLEXCAN_MB_CODE_TX_INACTIVE
,
1608 &priv
->tx_mb
->can_ctrl
);
1610 /* acceptance mask/acceptance code (accept everything) */
1611 priv
->write(0x0, ®s
->rxgmask
);
1612 priv
->write(0x0, ®s
->rx14mask
);
1613 priv
->write(0x0, ®s
->rx15mask
);
1615 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_DISABLE_RXFG
)
1616 priv
->write(0x0, ®s
->rxfgmask
);
1618 /* clear acceptance filters */
1619 for (i
= 0; i
< priv
->mb_count
; i
++)
1620 priv
->write(0, ®s
->rximr
[i
]);
1622 /* On Vybrid, disable non-correctable errors interrupt and
1623 * freeze mode. It still can correct the correctable errors
1624 * when HW supports ECC.
1626 * This also works around errata e5295 which generates false
1627 * positive memory errors and put the device in freeze mode.
1629 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_DISABLE_MECR
) {
1630 /* Follow the protocol as described in "Detection
1631 * and Correction of Memory Errors" to write to
1632 * MECR register (step 1 - 5)
1634 * 1. By default, CTRL2[ECRWRE] = 0, MECR[ECRWRDIS] = 1
1635 * 2. set CTRL2[ECRWRE]
1637 reg_ctrl2
= priv
->read(®s
->ctrl2
);
1638 reg_ctrl2
|= FLEXCAN_CTRL2_ECRWRE
;
1639 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1641 /* 3. clear MECR[ECRWRDIS] */
1642 reg_mecr
= priv
->read(®s
->mecr
);
1643 reg_mecr
&= ~FLEXCAN_MECR_ECRWRDIS
;
1644 priv
->write(reg_mecr
, ®s
->mecr
);
1646 /* 4. all writes to MECR must keep MECR[ECRWRDIS] cleared */
1647 reg_mecr
&= ~(FLEXCAN_MECR_NCEFAFRZ
| FLEXCAN_MECR_HANCEI_MSK
|
1648 FLEXCAN_MECR_FANCEI_MSK
);
1649 priv
->write(reg_mecr
, ®s
->mecr
);
1651 /* 5. after configuration done, lock MECR by either
1652 * setting MECR[ECRWRDIS] or clearing CTRL2[ECRWRE]
1654 reg_mecr
|= FLEXCAN_MECR_ECRWRDIS
;
1655 priv
->write(reg_mecr
, ®s
->mecr
);
1657 reg_ctrl2
&= ~FLEXCAN_CTRL2_ECRWRE
;
1658 priv
->write(reg_ctrl2
, ®s
->ctrl2
);
1661 /* synchronize with the can bus */
1662 err
= flexcan_chip_unfreeze(priv
);
1664 goto out_chip_disable
;
1666 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
1668 /* print chip status */
1669 netdev_dbg(dev
, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__
,
1670 priv
->read(®s
->mcr
), priv
->read(®s
->ctrl
));
1675 flexcan_chip_disable(priv
);
1679 /* __flexcan_chip_stop
1681 * this function is entered with clocks enabled
1683 static int __flexcan_chip_stop(struct net_device
*dev
, bool disable_on_error
)
1685 struct flexcan_priv
*priv
= netdev_priv(dev
);
1688 /* freeze + disable module */
1689 err
= flexcan_chip_freeze(priv
);
1690 if (err
&& !disable_on_error
)
1692 err
= flexcan_chip_disable(priv
);
1693 if (err
&& !disable_on_error
)
1694 goto out_chip_unfreeze
;
1696 priv
->can
.state
= CAN_STATE_STOPPED
;
1701 flexcan_chip_unfreeze(priv
);
1706 static inline int flexcan_chip_stop_disable_on_error(struct net_device
*dev
)
1708 return __flexcan_chip_stop(dev
, true);
1711 static inline int flexcan_chip_stop(struct net_device
*dev
)
1713 return __flexcan_chip_stop(dev
, false);
1716 static int flexcan_open(struct net_device
*dev
)
1718 struct flexcan_priv
*priv
= netdev_priv(dev
);
1721 if ((priv
->can
.ctrlmode
& CAN_CTRLMODE_3_SAMPLES
) &&
1722 (priv
->can
.ctrlmode
& CAN_CTRLMODE_FD
)) {
1723 netdev_err(dev
, "Three Samples mode and CAN-FD mode can't be used together\n");
1727 err
= pm_runtime_resume_and_get(priv
->dev
);
1731 err
= open_candev(dev
);
1733 goto out_runtime_put
;
1735 err
= flexcan_transceiver_enable(priv
);
1739 err
= flexcan_rx_offload_setup(dev
);
1741 goto out_transceiver_disable
;
1743 err
= flexcan_chip_start(dev
);
1745 goto out_can_rx_offload_del
;
1747 can_rx_offload_enable(&priv
->offload
);
1749 err
= request_irq(dev
->irq
, flexcan_irq
, IRQF_SHARED
, dev
->name
, dev
);
1751 goto out_can_rx_offload_disable
;
1753 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_NR_IRQ_3
) {
1754 err
= request_irq(priv
->irq_boff
,
1755 flexcan_irq
, IRQF_SHARED
, dev
->name
, dev
);
1759 err
= request_irq(priv
->irq_err
,
1760 flexcan_irq
, IRQF_SHARED
, dev
->name
, dev
);
1762 goto out_free_irq_boff
;
1765 flexcan_chip_interrupts_enable(dev
);
1767 netif_start_queue(dev
);
1772 free_irq(priv
->irq_boff
, dev
);
1774 free_irq(dev
->irq
, dev
);
1775 out_can_rx_offload_disable
:
1776 can_rx_offload_disable(&priv
->offload
);
1777 flexcan_chip_stop(dev
);
1778 out_can_rx_offload_del
:
1779 can_rx_offload_del(&priv
->offload
);
1780 out_transceiver_disable
:
1781 flexcan_transceiver_disable(priv
);
1785 pm_runtime_put(priv
->dev
);
1790 static int flexcan_close(struct net_device
*dev
)
1792 struct flexcan_priv
*priv
= netdev_priv(dev
);
1794 netif_stop_queue(dev
);
1795 flexcan_chip_interrupts_disable(dev
);
1797 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_NR_IRQ_3
) {
1798 free_irq(priv
->irq_err
, dev
);
1799 free_irq(priv
->irq_boff
, dev
);
1802 free_irq(dev
->irq
, dev
);
1803 can_rx_offload_disable(&priv
->offload
);
1804 flexcan_chip_stop_disable_on_error(dev
);
1806 can_rx_offload_del(&priv
->offload
);
1807 flexcan_transceiver_disable(priv
);
1810 pm_runtime_put(priv
->dev
);
1815 static int flexcan_set_mode(struct net_device
*dev
, enum can_mode mode
)
1820 case CAN_MODE_START
:
1821 err
= flexcan_chip_start(dev
);
1825 flexcan_chip_interrupts_enable(dev
);
1827 netif_wake_queue(dev
);
1837 static const struct net_device_ops flexcan_netdev_ops
= {
1838 .ndo_open
= flexcan_open
,
1839 .ndo_stop
= flexcan_close
,
1840 .ndo_start_xmit
= flexcan_start_xmit
,
1841 .ndo_change_mtu
= can_change_mtu
,
1844 static int register_flexcandev(struct net_device
*dev
)
1846 struct flexcan_priv
*priv
= netdev_priv(dev
);
1847 struct flexcan_regs __iomem
*regs
= priv
->regs
;
1850 err
= flexcan_clks_enable(priv
);
1854 /* select "bus clock", chip must be disabled */
1855 err
= flexcan_chip_disable(priv
);
1857 goto out_clks_disable
;
1859 reg
= priv
->read(®s
->ctrl
);
1861 reg
|= FLEXCAN_CTRL_CLK_SRC
;
1863 reg
&= ~FLEXCAN_CTRL_CLK_SRC
;
1864 priv
->write(reg
, ®s
->ctrl
);
1866 err
= flexcan_chip_enable(priv
);
1868 goto out_chip_disable
;
1870 /* set freeze, halt */
1871 err
= flexcan_chip_freeze(priv
);
1873 goto out_chip_disable
;
1875 /* activate FIFO, restrict register access */
1876 reg
= priv
->read(®s
->mcr
);
1877 reg
|= FLEXCAN_MCR_FEN
| FLEXCAN_MCR_SUPV
;
1878 priv
->write(reg
, ®s
->mcr
);
1880 /* Currently we only support newer versions of this core
1881 * featuring a RX hardware FIFO (although this driver doesn't
1882 * make use of it on some cores). Older cores, found on some
1883 * Coldfire derivates are not tested.
1885 reg
= priv
->read(®s
->mcr
);
1886 if (!(reg
& FLEXCAN_MCR_FEN
)) {
1887 netdev_err(dev
, "Could not enable RX FIFO, unsupported core\n");
1889 goto out_chip_disable
;
1892 err
= register_candev(dev
);
1894 goto out_chip_disable
;
1896 /* Disable core and let pm_runtime_put() disable the clocks.
1897 * If CONFIG_PM is not enabled, the clocks will stay powered.
1899 flexcan_chip_disable(priv
);
1900 pm_runtime_put(priv
->dev
);
1905 flexcan_chip_disable(priv
);
1907 flexcan_clks_disable(priv
);
1911 static void unregister_flexcandev(struct net_device
*dev
)
1913 unregister_candev(dev
);
1916 static int flexcan_setup_stop_mode_gpr(struct platform_device
*pdev
)
1918 struct net_device
*dev
= platform_get_drvdata(pdev
);
1919 struct device_node
*np
= pdev
->dev
.of_node
;
1920 struct device_node
*gpr_np
;
1921 struct flexcan_priv
*priv
;
1929 /* stop mode property format is:
1930 * <&gpr req_gpr req_bit>.
1932 ret
= of_property_read_u32_array(np
, "fsl,stop-mode", out_val
,
1933 ARRAY_SIZE(out_val
));
1935 dev_dbg(&pdev
->dev
, "no stop-mode property\n");
1940 gpr_np
= of_find_node_by_phandle(phandle
);
1942 dev_dbg(&pdev
->dev
, "could not find gpr node by phandle\n");
1946 priv
= netdev_priv(dev
);
1947 priv
->stm
.gpr
= syscon_node_to_regmap(gpr_np
);
1948 if (IS_ERR(priv
->stm
.gpr
)) {
1949 dev_dbg(&pdev
->dev
, "could not find gpr regmap\n");
1950 ret
= PTR_ERR(priv
->stm
.gpr
);
1954 priv
->stm
.req_gpr
= out_val
[1];
1955 priv
->stm
.req_bit
= out_val
[2];
1958 "gpr %s req_gpr=0x02%x req_bit=%u\n",
1959 gpr_np
->full_name
, priv
->stm
.req_gpr
, priv
->stm
.req_bit
);
1964 of_node_put(gpr_np
);
1968 static int flexcan_setup_stop_mode_scfw(struct platform_device
*pdev
)
1970 struct net_device
*dev
= platform_get_drvdata(pdev
);
1971 struct flexcan_priv
*priv
;
1975 ret
= of_property_read_u8(pdev
->dev
.of_node
, "fsl,scu-index", &scu_idx
);
1977 dev_dbg(&pdev
->dev
, "failed to get scu index\n");
1981 priv
= netdev_priv(dev
);
1982 priv
->scu_idx
= scu_idx
;
1984 /* this function could be deferred probe, return -EPROBE_DEFER */
1985 return imx_scu_get_handle(&priv
->sc_ipc_handle
);
1988 /* flexcan_setup_stop_mode - Setup stop mode for wakeup
1990 * Return: = 0 setup stop mode successfully or doesn't support this feature
1991 * < 0 fail to setup stop mode (could be deferred probe)
1993 static int flexcan_setup_stop_mode(struct platform_device
*pdev
)
1995 struct net_device
*dev
= platform_get_drvdata(pdev
);
1996 struct flexcan_priv
*priv
;
1999 priv
= netdev_priv(dev
);
2001 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW
)
2002 ret
= flexcan_setup_stop_mode_scfw(pdev
);
2003 else if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
)
2004 ret
= flexcan_setup_stop_mode_gpr(pdev
);
2005 else if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI
)
2006 /* ATF will handle all STOP_IPG related work */
2009 /* return 0 directly if doesn't support stop mode feature */
2012 /* If ret is -EINVAL, this means SoC claim to support stop mode, but
2013 * dts file lack the stop mode property definition. For this case,
2014 * directly return 0, this will skip the wakeup capable setting and
2015 * will not block the driver probe.
2022 device_set_wakeup_capable(&pdev
->dev
, true);
2024 if (of_property_read_bool(pdev
->dev
.of_node
, "wakeup-source"))
2025 device_set_wakeup_enable(&pdev
->dev
, true);
2030 static const struct of_device_id flexcan_of_match
[] = {
2031 { .compatible
= "fsl,imx8qm-flexcan", .data
= &fsl_imx8qm_devtype_data
, },
2032 { .compatible
= "fsl,imx8mp-flexcan", .data
= &fsl_imx8mp_devtype_data
, },
2033 { .compatible
= "fsl,imx93-flexcan", .data
= &fsl_imx93_devtype_data
, },
2034 { .compatible
= "fsl,imx95-flexcan", .data
= &fsl_imx95_devtype_data
, },
2035 { .compatible
= "fsl,imx6q-flexcan", .data
= &fsl_imx6q_devtype_data
, },
2036 { .compatible
= "fsl,imx28-flexcan", .data
= &fsl_imx28_devtype_data
, },
2037 { .compatible
= "fsl,imx53-flexcan", .data
= &fsl_imx25_devtype_data
, },
2038 { .compatible
= "fsl,imx35-flexcan", .data
= &fsl_imx25_devtype_data
, },
2039 { .compatible
= "fsl,imx25-flexcan", .data
= &fsl_imx25_devtype_data
, },
2040 { .compatible
= "fsl,p1010-flexcan", .data
= &fsl_p1010_devtype_data
, },
2041 { .compatible
= "fsl,vf610-flexcan", .data
= &fsl_vf610_devtype_data
, },
2042 { .compatible
= "fsl,ls1021ar2-flexcan", .data
= &fsl_ls1021a_r2_devtype_data
, },
2043 { .compatible
= "fsl,lx2160ar1-flexcan", .data
= &fsl_lx2160a_r1_devtype_data
, },
2046 MODULE_DEVICE_TABLE(of
, flexcan_of_match
);
2048 static const struct platform_device_id flexcan_id_table
[] = {
2050 .name
= "flexcan-mcf5441x",
2051 .driver_data
= (kernel_ulong_t
)&fsl_mcf5441x_devtype_data
,
2056 MODULE_DEVICE_TABLE(platform
, flexcan_id_table
);
2058 static int flexcan_probe(struct platform_device
*pdev
)
2060 const struct flexcan_devtype_data
*devtype_data
;
2061 struct net_device
*dev
;
2062 struct flexcan_priv
*priv
;
2063 struct regulator
*reg_xceiver
;
2064 struct clk
*clk_ipg
= NULL
, *clk_per
= NULL
;
2065 struct flexcan_regs __iomem
*regs
;
2066 struct flexcan_platform_data
*pdata
;
2071 reg_xceiver
= devm_regulator_get_optional(&pdev
->dev
, "xceiver");
2072 if (PTR_ERR(reg_xceiver
) == -EPROBE_DEFER
)
2073 return -EPROBE_DEFER
;
2074 else if (PTR_ERR(reg_xceiver
) == -ENODEV
)
2076 else if (IS_ERR(reg_xceiver
))
2077 return PTR_ERR(reg_xceiver
);
2079 if (pdev
->dev
.of_node
) {
2080 of_property_read_u32(pdev
->dev
.of_node
,
2081 "clock-frequency", &clock_freq
);
2082 of_property_read_u8(pdev
->dev
.of_node
,
2083 "fsl,clk-source", &clk_src
);
2085 pdata
= dev_get_platdata(&pdev
->dev
);
2087 clock_freq
= pdata
->clock_frequency
;
2088 clk_src
= pdata
->clk_src
;
2093 clk_ipg
= devm_clk_get(&pdev
->dev
, "ipg");
2094 if (IS_ERR(clk_ipg
)) {
2095 dev_err(&pdev
->dev
, "no ipg clock defined\n");
2096 return PTR_ERR(clk_ipg
);
2099 clk_per
= devm_clk_get(&pdev
->dev
, "per");
2100 if (IS_ERR(clk_per
)) {
2101 dev_err(&pdev
->dev
, "no per clock defined\n");
2102 return PTR_ERR(clk_per
);
2104 clock_freq
= clk_get_rate(clk_per
);
2107 irq
= platform_get_irq(pdev
, 0);
2111 regs
= devm_platform_ioremap_resource(pdev
, 0);
2113 return PTR_ERR(regs
);
2115 devtype_data
= device_get_match_data(&pdev
->dev
);
2117 if ((devtype_data
->quirks
& FLEXCAN_QUIRK_SUPPORT_FD
) &&
2118 !((devtype_data
->quirks
&
2119 (FLEXCAN_QUIRK_USE_RX_MAILBOX
|
2120 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
2121 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
|
2122 FLEXCAN_QUIRK_SUPPORT_RX_FIFO
)) ==
2123 (FLEXCAN_QUIRK_USE_RX_MAILBOX
|
2124 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
2125 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
))) {
2126 dev_err(&pdev
->dev
, "CAN-FD mode doesn't work in RX-FIFO mode!\n");
2130 if ((devtype_data
->quirks
&
2131 (FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX
|
2132 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
)) ==
2133 FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR
) {
2135 "Quirks (0x%08x) inconsistent: RX_MAILBOX_RX supported but not RX_MAILBOX\n",
2136 devtype_data
->quirks
);
2140 dev
= alloc_candev(sizeof(struct flexcan_priv
), 1);
2144 platform_set_drvdata(pdev
, dev
);
2145 SET_NETDEV_DEV(dev
, &pdev
->dev
);
2147 dev
->netdev_ops
= &flexcan_netdev_ops
;
2148 dev
->ethtool_ops
= &flexcan_ethtool_ops
;
2150 dev
->flags
|= IFF_ECHO
;
2152 priv
= netdev_priv(dev
);
2153 priv
->devtype_data
= *devtype_data
;
2155 if (of_property_read_bool(pdev
->dev
.of_node
, "big-endian") ||
2156 priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN
) {
2157 priv
->read
= flexcan_read_be
;
2158 priv
->write
= flexcan_write_be
;
2160 priv
->read
= flexcan_read_le
;
2161 priv
->write
= flexcan_write_le
;
2164 priv
->dev
= &pdev
->dev
;
2165 priv
->can
.clock
.freq
= clock_freq
;
2166 priv
->can
.do_set_mode
= flexcan_set_mode
;
2167 priv
->can
.do_get_berr_counter
= flexcan_get_berr_counter
;
2168 priv
->can
.ctrlmode_supported
= CAN_CTRLMODE_LOOPBACK
|
2169 CAN_CTRLMODE_LISTENONLY
| CAN_CTRLMODE_3_SAMPLES
|
2170 CAN_CTRLMODE_BERR_REPORTING
;
2172 priv
->clk_ipg
= clk_ipg
;
2173 priv
->clk_per
= clk_per
;
2174 priv
->clk_src
= clk_src
;
2175 priv
->reg_xceiver
= reg_xceiver
;
2177 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_NR_IRQ_3
) {
2178 priv
->irq_boff
= platform_get_irq(pdev
, 1);
2179 if (priv
->irq_boff
< 0) {
2180 err
= priv
->irq_boff
;
2181 goto failed_platform_get_irq
;
2183 priv
->irq_err
= platform_get_irq(pdev
, 2);
2184 if (priv
->irq_err
< 0) {
2185 err
= priv
->irq_err
;
2186 goto failed_platform_get_irq
;
2190 if (priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SUPPORT_FD
) {
2191 priv
->can
.ctrlmode_supported
|= CAN_CTRLMODE_FD
|
2192 CAN_CTRLMODE_FD_NON_ISO
;
2193 priv
->can
.bittiming_const
= &flexcan_fd_bittiming_const
;
2194 priv
->can
.data_bittiming_const
=
2195 &flexcan_fd_data_bittiming_const
;
2197 priv
->can
.bittiming_const
= &flexcan_bittiming_const
;
2200 pm_runtime_get_noresume(&pdev
->dev
);
2201 pm_runtime_set_active(&pdev
->dev
);
2202 pm_runtime_enable(&pdev
->dev
);
2204 err
= register_flexcandev(dev
);
2206 dev_err(&pdev
->dev
, "registering netdev failed\n");
2207 goto failed_register
;
2210 err
= flexcan_setup_stop_mode(pdev
);
2212 dev_err_probe(&pdev
->dev
, err
, "setup stop mode failed\n");
2213 goto failed_setup_stop_mode
;
2216 of_can_transceiver(dev
);
2220 failed_setup_stop_mode
:
2221 unregister_flexcandev(dev
);
2223 pm_runtime_put_noidle(&pdev
->dev
);
2224 pm_runtime_disable(&pdev
->dev
);
2225 failed_platform_get_irq
:
2230 static void flexcan_remove(struct platform_device
*pdev
)
2232 struct net_device
*dev
= platform_get_drvdata(pdev
);
2234 device_set_wakeup_enable(&pdev
->dev
, false);
2235 device_set_wakeup_capable(&pdev
->dev
, false);
2236 unregister_flexcandev(dev
);
2237 pm_runtime_disable(&pdev
->dev
);
2241 static int __maybe_unused
flexcan_suspend(struct device
*device
)
2243 struct net_device
*dev
= dev_get_drvdata(device
);
2244 struct flexcan_priv
*priv
= netdev_priv(dev
);
2247 if (netif_running(dev
)) {
2248 /* if wakeup is enabled, enter stop mode
2249 * else enter disabled mode.
2251 if (device_may_wakeup(device
)) {
2252 enable_irq_wake(dev
->irq
);
2253 err
= flexcan_enter_stop_mode(priv
);
2257 err
= flexcan_chip_stop(dev
);
2261 flexcan_chip_interrupts_disable(dev
);
2263 err
= pinctrl_pm_select_sleep_state(device
);
2267 netif_stop_queue(dev
);
2268 netif_device_detach(dev
);
2270 priv
->can
.state
= CAN_STATE_SLEEPING
;
2275 static int __maybe_unused
flexcan_resume(struct device
*device
)
2277 struct net_device
*dev
= dev_get_drvdata(device
);
2278 struct flexcan_priv
*priv
= netdev_priv(dev
);
2281 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
2282 if (netif_running(dev
)) {
2283 netif_device_attach(dev
);
2284 netif_start_queue(dev
);
2285 if (device_may_wakeup(device
)) {
2286 disable_irq_wake(dev
->irq
);
2287 err
= flexcan_exit_stop_mode(priv
);
2291 err
= pinctrl_pm_select_default_state(device
);
2295 err
= flexcan_chip_start(dev
);
2299 flexcan_chip_interrupts_enable(dev
);
2306 static int __maybe_unused
flexcan_runtime_suspend(struct device
*device
)
2308 struct net_device
*dev
= dev_get_drvdata(device
);
2309 struct flexcan_priv
*priv
= netdev_priv(dev
);
2311 flexcan_clks_disable(priv
);
2316 static int __maybe_unused
flexcan_runtime_resume(struct device
*device
)
2318 struct net_device
*dev
= dev_get_drvdata(device
);
2319 struct flexcan_priv
*priv
= netdev_priv(dev
);
2321 return flexcan_clks_enable(priv
);
2324 static int __maybe_unused
flexcan_noirq_suspend(struct device
*device
)
2326 struct net_device
*dev
= dev_get_drvdata(device
);
2327 struct flexcan_priv
*priv
= netdev_priv(dev
);
2329 if (netif_running(dev
)) {
2332 if (device_may_wakeup(device
))
2333 flexcan_enable_wakeup_irq(priv
, true);
2335 /* For FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI, it need ATF to send
2336 * to SM through SCMI protocol, SM will assert the IPG_STOP
2337 * signal. But all this works need the CAN clocks keep on.
2338 * After the CAN module get the IPG_STOP mode, and switch to
2339 * STOP mode, whether still keep the CAN clocks on or gate them
2340 * off depend on the Hardware design.
2342 if (!(device_may_wakeup(device
) &&
2343 priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI
)) {
2344 err
= pm_runtime_force_suspend(device
);
2353 static int __maybe_unused
flexcan_noirq_resume(struct device
*device
)
2355 struct net_device
*dev
= dev_get_drvdata(device
);
2356 struct flexcan_priv
*priv
= netdev_priv(dev
);
2358 if (netif_running(dev
)) {
2361 if (!(device_may_wakeup(device
) &&
2362 priv
->devtype_data
.quirks
& FLEXCAN_QUIRK_SETUP_STOP_MODE_SCMI
)) {
2363 err
= pm_runtime_force_resume(device
);
2368 if (device_may_wakeup(device
))
2369 flexcan_enable_wakeup_irq(priv
, false);
2375 static const struct dev_pm_ops flexcan_pm_ops
= {
2376 SET_SYSTEM_SLEEP_PM_OPS(flexcan_suspend
, flexcan_resume
)
2377 SET_RUNTIME_PM_OPS(flexcan_runtime_suspend
, flexcan_runtime_resume
, NULL
)
2378 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(flexcan_noirq_suspend
, flexcan_noirq_resume
)
2381 static struct platform_driver flexcan_driver
= {
2384 .pm
= &flexcan_pm_ops
,
2385 .of_match_table
= flexcan_of_match
,
2387 .probe
= flexcan_probe
,
2388 .remove
= flexcan_remove
,
2389 .id_table
= flexcan_id_table
,
2392 module_platform_driver(flexcan_driver
);
2394 MODULE_AUTHOR("Sascha Hauer <kernel@pengutronix.de>, "
2395 "Marc Kleine-Budde <kernel@pengutronix.de>");
2396 MODULE_LICENSE("GPL v2");
2397 MODULE_DESCRIPTION("CAN port driver for flexcan based chip");