2 * CAN bus driver for IFI CANFD controller
4 * Copyright (C) 2016 Marek Vasut <marex@denx.de>
6 * Details about this controller can be found at
7 * http://www.ifi-pld.de/IP/CANFD/canfd.html
9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without any
11 * warranty of any kind, whether express or implied.
14 #include <linux/clk.h>
15 #include <linux/delay.h>
16 #include <linux/interrupt.h>
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/netdevice.h>
22 #include <linux/of_device.h>
23 #include <linux/platform_device.h>
25 #include <linux/can/dev.h>
27 #define IFI_CANFD_STCMD 0x0
28 #define IFI_CANFD_STCMD_HARDRESET 0xDEADCAFD
29 #define IFI_CANFD_STCMD_ENABLE BIT(0)
30 #define IFI_CANFD_STCMD_ERROR_ACTIVE BIT(2)
31 #define IFI_CANFD_STCMD_ERROR_PASSIVE BIT(3)
32 #define IFI_CANFD_STCMD_BUSOFF BIT(4)
33 #define IFI_CANFD_STCMD_BUSMONITOR BIT(16)
34 #define IFI_CANFD_STCMD_LOOPBACK BIT(18)
35 #define IFI_CANFD_STCMD_DISABLE_CANFD BIT(24)
36 #define IFI_CANFD_STCMD_ENABLE_ISO BIT(25)
37 #define IFI_CANFD_STCMD_ENABLE_7_9_8_8_TIMING BIT(26)
38 #define IFI_CANFD_STCMD_NORMAL_MODE ((u32)BIT(31))
40 #define IFI_CANFD_RXSTCMD 0x4
41 #define IFI_CANFD_RXSTCMD_REMOVE_MSG BIT(0)
42 #define IFI_CANFD_RXSTCMD_RESET BIT(7)
43 #define IFI_CANFD_RXSTCMD_EMPTY BIT(8)
44 #define IFI_CANFD_RXSTCMD_OVERFLOW BIT(13)
46 #define IFI_CANFD_TXSTCMD 0x8
47 #define IFI_CANFD_TXSTCMD_ADD_MSG BIT(0)
48 #define IFI_CANFD_TXSTCMD_HIGH_PRIO BIT(1)
49 #define IFI_CANFD_TXSTCMD_RESET BIT(7)
50 #define IFI_CANFD_TXSTCMD_EMPTY BIT(8)
51 #define IFI_CANFD_TXSTCMD_FULL BIT(12)
52 #define IFI_CANFD_TXSTCMD_OVERFLOW BIT(13)
54 #define IFI_CANFD_INTERRUPT 0xc
55 #define IFI_CANFD_INTERRUPT_ERROR_WARNING BIT(1)
56 #define IFI_CANFD_INTERRUPT_ERROR_COUNTER BIT(10)
57 #define IFI_CANFD_INTERRUPT_TXFIFO_EMPTY BIT(16)
58 #define IFI_CANFD_INTERRUPT_TXFIFO_REMOVE BIT(22)
59 #define IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY BIT(24)
60 #define IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER BIT(25)
61 #define IFI_CANFD_INTERRUPT_SET_IRQ ((u32)BIT(31))
63 #define IFI_CANFD_IRQMASK 0x10
64 #define IFI_CANFD_IRQMASK_SET_ERR BIT(7)
65 #define IFI_CANFD_IRQMASK_SET_TS BIT(15)
66 #define IFI_CANFD_IRQMASK_TXFIFO_EMPTY BIT(16)
67 #define IFI_CANFD_IRQMASK_SET_TX BIT(23)
68 #define IFI_CANFD_IRQMASK_RXFIFO_NEMPTY BIT(24)
69 #define IFI_CANFD_IRQMASK_SET_RX ((u32)BIT(31))
71 #define IFI_CANFD_TIME 0x14
72 #define IFI_CANFD_FTIME 0x18
73 #define IFI_CANFD_TIME_TIMEB_OFF 0
74 #define IFI_CANFD_TIME_TIMEA_OFF 8
75 #define IFI_CANFD_TIME_PRESCALE_OFF 16
76 #define IFI_CANFD_TIME_SJW_OFF_7_9_8_8 25
77 #define IFI_CANFD_TIME_SJW_OFF_4_12_6_6 28
78 #define IFI_CANFD_TIME_SET_SJW_4_12_6_6 BIT(6)
79 #define IFI_CANFD_TIME_SET_TIMEB_4_12_6_6 BIT(7)
80 #define IFI_CANFD_TIME_SET_PRESC_4_12_6_6 BIT(14)
81 #define IFI_CANFD_TIME_SET_TIMEA_4_12_6_6 BIT(15)
83 #define IFI_CANFD_TDELAY 0x1c
84 #define IFI_CANFD_TDELAY_DEFAULT 0xb
85 #define IFI_CANFD_TDELAY_MASK 0x3fff
86 #define IFI_CANFD_TDELAY_ABS BIT(14)
87 #define IFI_CANFD_TDELAY_EN BIT(15)
89 #define IFI_CANFD_ERROR 0x20
90 #define IFI_CANFD_ERROR_TX_OFFSET 0
91 #define IFI_CANFD_ERROR_TX_MASK 0xff
92 #define IFI_CANFD_ERROR_RX_OFFSET 16
93 #define IFI_CANFD_ERROR_RX_MASK 0xff
95 #define IFI_CANFD_ERRCNT 0x24
97 #define IFI_CANFD_SUSPEND 0x28
99 #define IFI_CANFD_REPEAT 0x2c
101 #define IFI_CANFD_TRAFFIC 0x30
103 #define IFI_CANFD_TSCONTROL 0x34
105 #define IFI_CANFD_TSC 0x38
107 #define IFI_CANFD_TST 0x3c
109 #define IFI_CANFD_RES1 0x40
111 #define IFI_CANFD_ERROR_CTR 0x44
112 #define IFI_CANFD_ERROR_CTR_UNLOCK_MAGIC 0x21302899
113 #define IFI_CANFD_ERROR_CTR_OVERLOAD_FIRST BIT(0)
114 #define IFI_CANFD_ERROR_CTR_ACK_ERROR_FIRST BIT(1)
115 #define IFI_CANFD_ERROR_CTR_BIT0_ERROR_FIRST BIT(2)
116 #define IFI_CANFD_ERROR_CTR_BIT1_ERROR_FIRST BIT(3)
117 #define IFI_CANFD_ERROR_CTR_STUFF_ERROR_FIRST BIT(4)
118 #define IFI_CANFD_ERROR_CTR_CRC_ERROR_FIRST BIT(5)
119 #define IFI_CANFD_ERROR_CTR_FORM_ERROR_FIRST BIT(6)
120 #define IFI_CANFD_ERROR_CTR_OVERLOAD_ALL BIT(8)
121 #define IFI_CANFD_ERROR_CTR_ACK_ERROR_ALL BIT(9)
122 #define IFI_CANFD_ERROR_CTR_BIT0_ERROR_ALL BIT(10)
123 #define IFI_CANFD_ERROR_CTR_BIT1_ERROR_ALL BIT(11)
124 #define IFI_CANFD_ERROR_CTR_STUFF_ERROR_ALL BIT(12)
125 #define IFI_CANFD_ERROR_CTR_CRC_ERROR_ALL BIT(13)
126 #define IFI_CANFD_ERROR_CTR_FORM_ERROR_ALL BIT(14)
127 #define IFI_CANFD_ERROR_CTR_BITPOSITION_OFFSET 16
128 #define IFI_CANFD_ERROR_CTR_BITPOSITION_MASK 0xff
129 #define IFI_CANFD_ERROR_CTR_ER_RESET BIT(30)
130 #define IFI_CANFD_ERROR_CTR_ER_ENABLE ((u32)BIT(31))
132 #define IFI_CANFD_PAR 0x48
134 #define IFI_CANFD_CANCLOCK 0x4c
136 #define IFI_CANFD_SYSCLOCK 0x50
138 #define IFI_CANFD_VER 0x54
139 #define IFI_CANFD_VER_REV_MASK 0xff
140 #define IFI_CANFD_VER_REV_MIN_SUPPORTED 0x15
142 #define IFI_CANFD_IP_ID 0x58
143 #define IFI_CANFD_IP_ID_VALUE 0xD073CAFD
145 #define IFI_CANFD_TEST 0x5c
147 #define IFI_CANFD_RXFIFO_TS_63_32 0x60
149 #define IFI_CANFD_RXFIFO_TS_31_0 0x64
151 #define IFI_CANFD_RXFIFO_DLC 0x68
152 #define IFI_CANFD_RXFIFO_DLC_DLC_OFFSET 0
153 #define IFI_CANFD_RXFIFO_DLC_DLC_MASK 0xf
154 #define IFI_CANFD_RXFIFO_DLC_RTR BIT(4)
155 #define IFI_CANFD_RXFIFO_DLC_EDL BIT(5)
156 #define IFI_CANFD_RXFIFO_DLC_BRS BIT(6)
157 #define IFI_CANFD_RXFIFO_DLC_ESI BIT(7)
158 #define IFI_CANFD_RXFIFO_DLC_OBJ_OFFSET 8
159 #define IFI_CANFD_RXFIFO_DLC_OBJ_MASK 0x1ff
160 #define IFI_CANFD_RXFIFO_DLC_FNR_OFFSET 24
161 #define IFI_CANFD_RXFIFO_DLC_FNR_MASK 0xff
163 #define IFI_CANFD_RXFIFO_ID 0x6c
164 #define IFI_CANFD_RXFIFO_ID_ID_OFFSET 0
165 #define IFI_CANFD_RXFIFO_ID_ID_STD_MASK CAN_SFF_MASK
166 #define IFI_CANFD_RXFIFO_ID_ID_STD_OFFSET 0
167 #define IFI_CANFD_RXFIFO_ID_ID_STD_WIDTH 10
168 #define IFI_CANFD_RXFIFO_ID_ID_XTD_MASK CAN_EFF_MASK
169 #define IFI_CANFD_RXFIFO_ID_ID_XTD_OFFSET 11
170 #define IFI_CANFD_RXFIFO_ID_ID_XTD_WIDTH 18
171 #define IFI_CANFD_RXFIFO_ID_IDE BIT(29)
173 #define IFI_CANFD_RXFIFO_DATA 0x70 /* 0x70..0xac */
175 #define IFI_CANFD_TXFIFO_SUSPEND_US 0xb0
177 #define IFI_CANFD_TXFIFO_REPEATCOUNT 0xb4
179 #define IFI_CANFD_TXFIFO_DLC 0xb8
180 #define IFI_CANFD_TXFIFO_DLC_DLC_OFFSET 0
181 #define IFI_CANFD_TXFIFO_DLC_DLC_MASK 0xf
182 #define IFI_CANFD_TXFIFO_DLC_RTR BIT(4)
183 #define IFI_CANFD_TXFIFO_DLC_EDL BIT(5)
184 #define IFI_CANFD_TXFIFO_DLC_BRS BIT(6)
185 #define IFI_CANFD_TXFIFO_DLC_FNR_OFFSET 24
186 #define IFI_CANFD_TXFIFO_DLC_FNR_MASK 0xff
188 #define IFI_CANFD_TXFIFO_ID 0xbc
189 #define IFI_CANFD_TXFIFO_ID_ID_OFFSET 0
190 #define IFI_CANFD_TXFIFO_ID_ID_STD_MASK CAN_SFF_MASK
191 #define IFI_CANFD_TXFIFO_ID_ID_STD_OFFSET 0
192 #define IFI_CANFD_TXFIFO_ID_ID_STD_WIDTH 10
193 #define IFI_CANFD_TXFIFO_ID_ID_XTD_MASK CAN_EFF_MASK
194 #define IFI_CANFD_TXFIFO_ID_ID_XTD_OFFSET 11
195 #define IFI_CANFD_TXFIFO_ID_ID_XTD_WIDTH 18
196 #define IFI_CANFD_TXFIFO_ID_IDE BIT(29)
198 #define IFI_CANFD_TXFIFO_DATA 0xc0 /* 0xb0..0xfc */
200 #define IFI_CANFD_FILTER_MASK(n) (0x800 + ((n) * 8) + 0)
201 #define IFI_CANFD_FILTER_MASK_EXT BIT(29)
202 #define IFI_CANFD_FILTER_MASK_EDL BIT(30)
203 #define IFI_CANFD_FILTER_MASK_VALID ((u32)BIT(31))
205 #define IFI_CANFD_FILTER_IDENT(n) (0x800 + ((n) * 8) + 4)
206 #define IFI_CANFD_FILTER_IDENT_IDE BIT(29)
207 #define IFI_CANFD_FILTER_IDENT_CANFD BIT(30)
208 #define IFI_CANFD_FILTER_IDENT_VALID ((u32)BIT(31))
210 /* IFI CANFD private data structure */
211 struct ifi_canfd_priv {
212 struct can_priv can; /* must be the first member */
213 struct napi_struct napi;
214 struct net_device *ndev;
218 static void ifi_canfd_irq_enable(struct net_device *ndev, bool enable)
220 struct ifi_canfd_priv *priv = netdev_priv(ndev);
224 enirq = IFI_CANFD_IRQMASK_TXFIFO_EMPTY |
225 IFI_CANFD_IRQMASK_RXFIFO_NEMPTY;
226 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
227 enirq |= IFI_CANFD_INTERRUPT_ERROR_COUNTER;
230 writel(IFI_CANFD_IRQMASK_SET_ERR |
231 IFI_CANFD_IRQMASK_SET_TS |
232 IFI_CANFD_IRQMASK_SET_TX |
233 IFI_CANFD_IRQMASK_SET_RX | enirq,
234 priv->base + IFI_CANFD_IRQMASK);
237 static void ifi_canfd_read_fifo(struct net_device *ndev)
239 struct net_device_stats *stats = &ndev->stats;
240 struct ifi_canfd_priv *priv = netdev_priv(ndev);
241 struct canfd_frame *cf;
243 const u32 rx_irq_mask = IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY |
244 IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER;
249 rxdlc = readl(priv->base + IFI_CANFD_RXFIFO_DLC);
250 if (rxdlc & IFI_CANFD_RXFIFO_DLC_EDL)
251 skb = alloc_canfd_skb(ndev, &cf);
253 skb = alloc_can_skb(ndev, (struct can_frame **)&cf);
260 dlc = (rxdlc >> IFI_CANFD_RXFIFO_DLC_DLC_OFFSET) &
261 IFI_CANFD_RXFIFO_DLC_DLC_MASK;
262 if (rxdlc & IFI_CANFD_RXFIFO_DLC_EDL)
263 cf->len = can_dlc2len(dlc);
265 cf->len = get_can_dlc(dlc);
267 rxid = readl(priv->base + IFI_CANFD_RXFIFO_ID);
268 id = (rxid >> IFI_CANFD_RXFIFO_ID_ID_OFFSET);
269 if (id & IFI_CANFD_RXFIFO_ID_IDE) {
270 id &= IFI_CANFD_RXFIFO_ID_ID_XTD_MASK;
272 * In case the Extended ID frame is received, the standard
273 * and extended part of the ID are swapped in the register,
274 * so swap them back to obtain the correct ID.
276 id = (id >> IFI_CANFD_RXFIFO_ID_ID_XTD_OFFSET) |
277 ((id & IFI_CANFD_RXFIFO_ID_ID_STD_MASK) <<
278 IFI_CANFD_RXFIFO_ID_ID_XTD_WIDTH);
281 id &= IFI_CANFD_RXFIFO_ID_ID_STD_MASK;
285 if (rxdlc & IFI_CANFD_RXFIFO_DLC_ESI) {
286 cf->flags |= CANFD_ESI;
287 netdev_dbg(ndev, "ESI Error\n");
290 if (!(rxdlc & IFI_CANFD_RXFIFO_DLC_EDL) &&
291 (rxdlc & IFI_CANFD_RXFIFO_DLC_RTR)) {
292 cf->can_id |= CAN_RTR_FLAG;
294 if (rxdlc & IFI_CANFD_RXFIFO_DLC_BRS)
295 cf->flags |= CANFD_BRS;
297 for (i = 0; i < cf->len; i += 4) {
298 *(u32 *)(cf->data + i) =
299 readl(priv->base + IFI_CANFD_RXFIFO_DATA + i);
303 /* Remove the packet from FIFO */
304 writel(IFI_CANFD_RXSTCMD_REMOVE_MSG, priv->base + IFI_CANFD_RXSTCMD);
305 writel(rx_irq_mask, priv->base + IFI_CANFD_INTERRUPT);
308 stats->rx_bytes += cf->len;
310 netif_receive_skb(skb);
313 static int ifi_canfd_do_rx_poll(struct net_device *ndev, int quota)
315 struct ifi_canfd_priv *priv = netdev_priv(ndev);
319 rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
320 if (rxst & IFI_CANFD_RXSTCMD_EMPTY) {
321 netdev_dbg(ndev, "No messages in RX FIFO\n");
326 if (rxst & IFI_CANFD_RXSTCMD_EMPTY)
331 ifi_canfd_read_fifo(ndev);
334 rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
338 can_led_event(ndev, CAN_LED_EVENT_RX);
343 static int ifi_canfd_handle_lost_msg(struct net_device *ndev)
345 struct net_device_stats *stats = &ndev->stats;
347 struct can_frame *frame;
349 netdev_err(ndev, "RX FIFO overflow, message(s) lost.\n");
352 stats->rx_over_errors++;
354 skb = alloc_can_err_skb(ndev, &frame);
358 frame->can_id |= CAN_ERR_CRTL;
359 frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
361 netif_receive_skb(skb);
366 static int ifi_canfd_handle_lec_err(struct net_device *ndev, const u32 errctr)
368 struct ifi_canfd_priv *priv = netdev_priv(ndev);
369 struct net_device_stats *stats = &ndev->stats;
370 struct can_frame *cf;
372 const u32 errmask = IFI_CANFD_ERROR_CTR_OVERLOAD_FIRST |
373 IFI_CANFD_ERROR_CTR_ACK_ERROR_FIRST |
374 IFI_CANFD_ERROR_CTR_BIT0_ERROR_FIRST |
375 IFI_CANFD_ERROR_CTR_BIT1_ERROR_FIRST |
376 IFI_CANFD_ERROR_CTR_STUFF_ERROR_FIRST |
377 IFI_CANFD_ERROR_CTR_CRC_ERROR_FIRST |
378 IFI_CANFD_ERROR_CTR_FORM_ERROR_FIRST;
380 if (!(errctr & errmask)) /* No error happened. */
383 priv->can.can_stats.bus_error++;
386 /* Propagate the error condition to the CAN stack. */
387 skb = alloc_can_err_skb(ndev, &cf);
391 /* Read the error counter register and check for new errors. */
392 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
394 if (errctr & IFI_CANFD_ERROR_CTR_OVERLOAD_FIRST)
395 cf->data[2] |= CAN_ERR_PROT_OVERLOAD;
397 if (errctr & IFI_CANFD_ERROR_CTR_ACK_ERROR_FIRST)
398 cf->data[3] = CAN_ERR_PROT_LOC_ACK;
400 if (errctr & IFI_CANFD_ERROR_CTR_BIT0_ERROR_FIRST)
401 cf->data[2] |= CAN_ERR_PROT_BIT0;
403 if (errctr & IFI_CANFD_ERROR_CTR_BIT1_ERROR_FIRST)
404 cf->data[2] |= CAN_ERR_PROT_BIT1;
406 if (errctr & IFI_CANFD_ERROR_CTR_STUFF_ERROR_FIRST)
407 cf->data[2] |= CAN_ERR_PROT_STUFF;
409 if (errctr & IFI_CANFD_ERROR_CTR_CRC_ERROR_FIRST)
410 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
412 if (errctr & IFI_CANFD_ERROR_CTR_FORM_ERROR_FIRST)
413 cf->data[2] |= CAN_ERR_PROT_FORM;
415 /* Reset the error counter, ack the IRQ and re-enable the counter. */
416 writel(IFI_CANFD_ERROR_CTR_ER_RESET, priv->base + IFI_CANFD_ERROR_CTR);
417 writel(IFI_CANFD_INTERRUPT_ERROR_COUNTER,
418 priv->base + IFI_CANFD_INTERRUPT);
419 writel(IFI_CANFD_ERROR_CTR_ER_ENABLE, priv->base + IFI_CANFD_ERROR_CTR);
422 stats->rx_bytes += cf->can_dlc;
423 netif_receive_skb(skb);
428 static int ifi_canfd_get_berr_counter(const struct net_device *ndev,
429 struct can_berr_counter *bec)
431 struct ifi_canfd_priv *priv = netdev_priv(ndev);
434 err = readl(priv->base + IFI_CANFD_ERROR);
435 bec->rxerr = (err >> IFI_CANFD_ERROR_RX_OFFSET) &
436 IFI_CANFD_ERROR_RX_MASK;
437 bec->txerr = (err >> IFI_CANFD_ERROR_TX_OFFSET) &
438 IFI_CANFD_ERROR_TX_MASK;
443 static int ifi_canfd_handle_state_change(struct net_device *ndev,
444 enum can_state new_state)
446 struct ifi_canfd_priv *priv = netdev_priv(ndev);
447 struct net_device_stats *stats = &ndev->stats;
448 struct can_frame *cf;
450 struct can_berr_counter bec;
453 case CAN_STATE_ERROR_ACTIVE:
454 /* error warning state */
455 priv->can.can_stats.error_warning++;
456 priv->can.state = CAN_STATE_ERROR_WARNING;
458 case CAN_STATE_ERROR_PASSIVE:
459 /* error passive state */
460 priv->can.can_stats.error_passive++;
461 priv->can.state = CAN_STATE_ERROR_PASSIVE;
463 case CAN_STATE_BUS_OFF:
465 priv->can.state = CAN_STATE_BUS_OFF;
466 ifi_canfd_irq_enable(ndev, 0);
467 priv->can.can_stats.bus_off++;
474 /* propagate the error condition to the CAN stack */
475 skb = alloc_can_err_skb(ndev, &cf);
479 ifi_canfd_get_berr_counter(ndev, &bec);
482 case CAN_STATE_ERROR_ACTIVE:
483 /* error warning state */
484 cf->can_id |= CAN_ERR_CRTL;
485 cf->data[1] = (bec.txerr > bec.rxerr) ?
486 CAN_ERR_CRTL_TX_WARNING :
487 CAN_ERR_CRTL_RX_WARNING;
488 cf->data[6] = bec.txerr;
489 cf->data[7] = bec.rxerr;
491 case CAN_STATE_ERROR_PASSIVE:
492 /* error passive state */
493 cf->can_id |= CAN_ERR_CRTL;
494 cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
496 cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
497 cf->data[6] = bec.txerr;
498 cf->data[7] = bec.rxerr;
500 case CAN_STATE_BUS_OFF:
502 cf->can_id |= CAN_ERR_BUSOFF;
509 stats->rx_bytes += cf->can_dlc;
510 netif_receive_skb(skb);
515 static int ifi_canfd_handle_state_errors(struct net_device *ndev, u32 stcmd)
517 struct ifi_canfd_priv *priv = netdev_priv(ndev);
522 * The ErrWarn condition is a little special, since the bit is
523 * located in the INTERRUPT register instead of STCMD register.
525 isr = readl(priv->base + IFI_CANFD_INTERRUPT);
526 if ((isr & IFI_CANFD_INTERRUPT_ERROR_WARNING) &&
527 (priv->can.state != CAN_STATE_ERROR_WARNING)) {
528 /* Clear the interrupt */
529 writel(IFI_CANFD_INTERRUPT_ERROR_WARNING,
530 priv->base + IFI_CANFD_INTERRUPT);
531 netdev_dbg(ndev, "Error, entered warning state\n");
532 work_done += ifi_canfd_handle_state_change(ndev,
533 CAN_STATE_ERROR_WARNING);
536 if ((stcmd & IFI_CANFD_STCMD_ERROR_PASSIVE) &&
537 (priv->can.state != CAN_STATE_ERROR_PASSIVE)) {
538 netdev_dbg(ndev, "Error, entered passive state\n");
539 work_done += ifi_canfd_handle_state_change(ndev,
540 CAN_STATE_ERROR_PASSIVE);
543 if ((stcmd & IFI_CANFD_STCMD_BUSOFF) &&
544 (priv->can.state != CAN_STATE_BUS_OFF)) {
545 netdev_dbg(ndev, "Error, entered bus-off state\n");
546 work_done += ifi_canfd_handle_state_change(ndev,
553 static int ifi_canfd_poll(struct napi_struct *napi, int quota)
555 struct net_device *ndev = napi->dev;
556 struct ifi_canfd_priv *priv = netdev_priv(ndev);
557 const u32 stcmd_state_mask = IFI_CANFD_STCMD_ERROR_PASSIVE |
558 IFI_CANFD_STCMD_BUSOFF;
561 u32 stcmd = readl(priv->base + IFI_CANFD_STCMD);
562 u32 rxstcmd = readl(priv->base + IFI_CANFD_RXSTCMD);
563 u32 errctr = readl(priv->base + IFI_CANFD_ERROR_CTR);
565 /* Handle bus state changes */
566 if ((stcmd & stcmd_state_mask) ||
567 ((stcmd & IFI_CANFD_STCMD_ERROR_ACTIVE) == 0))
568 work_done += ifi_canfd_handle_state_errors(ndev, stcmd);
570 /* Handle lost messages on RX */
571 if (rxstcmd & IFI_CANFD_RXSTCMD_OVERFLOW)
572 work_done += ifi_canfd_handle_lost_msg(ndev);
574 /* Handle lec errors on the bus */
575 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
576 work_done += ifi_canfd_handle_lec_err(ndev, errctr);
578 /* Handle normal messages on RX */
579 if (!(rxstcmd & IFI_CANFD_RXSTCMD_EMPTY))
580 work_done += ifi_canfd_do_rx_poll(ndev, quota - work_done);
582 if (work_done < quota) {
583 napi_complete_done(napi, work_done);
584 ifi_canfd_irq_enable(ndev, 1);
590 static irqreturn_t ifi_canfd_isr(int irq, void *dev_id)
592 struct net_device *ndev = (struct net_device *)dev_id;
593 struct ifi_canfd_priv *priv = netdev_priv(ndev);
594 struct net_device_stats *stats = &ndev->stats;
595 const u32 rx_irq_mask = IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY |
596 IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER |
597 IFI_CANFD_INTERRUPT_ERROR_WARNING |
598 IFI_CANFD_INTERRUPT_ERROR_COUNTER;
599 const u32 tx_irq_mask = IFI_CANFD_INTERRUPT_TXFIFO_EMPTY |
600 IFI_CANFD_INTERRUPT_TXFIFO_REMOVE;
601 const u32 clr_irq_mask = ~((u32)(IFI_CANFD_INTERRUPT_SET_IRQ |
602 IFI_CANFD_INTERRUPT_ERROR_WARNING));
605 isr = readl(priv->base + IFI_CANFD_INTERRUPT);
611 /* Clear all pending interrupts but ErrWarn */
612 writel(clr_irq_mask, priv->base + IFI_CANFD_INTERRUPT);
614 /* RX IRQ or bus warning, start NAPI */
615 if (isr & rx_irq_mask) {
616 ifi_canfd_irq_enable(ndev, 0);
617 napi_schedule(&priv->napi);
621 if (isr & IFI_CANFD_INTERRUPT_TXFIFO_REMOVE) {
622 stats->tx_bytes += can_get_echo_skb(ndev, 0);
624 can_led_event(ndev, CAN_LED_EVENT_TX);
627 if (isr & tx_irq_mask)
628 netif_wake_queue(ndev);
633 static const struct can_bittiming_const ifi_canfd_bittiming_const = {
634 .name = KBUILD_MODNAME,
635 .tseg1_min = 1, /* Time segment 1 = prop_seg + phase_seg1 */
637 .tseg2_min = 2, /* Time segment 2 = phase_seg2 */
645 static void ifi_canfd_set_bittiming(struct net_device *ndev)
647 struct ifi_canfd_priv *priv = netdev_priv(ndev);
648 const struct can_bittiming *bt = &priv->can.bittiming;
649 const struct can_bittiming *dbt = &priv->can.data_bittiming;
650 u16 brp, sjw, tseg1, tseg2, tdc;
652 /* Configure bit timing */
655 tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
656 tseg2 = bt->phase_seg2 - 2;
657 writel((tseg2 << IFI_CANFD_TIME_TIMEB_OFF) |
658 (tseg1 << IFI_CANFD_TIME_TIMEA_OFF) |
659 (brp << IFI_CANFD_TIME_PRESCALE_OFF) |
660 (sjw << IFI_CANFD_TIME_SJW_OFF_7_9_8_8),
661 priv->base + IFI_CANFD_TIME);
663 /* Configure data bit timing */
666 tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
667 tseg2 = dbt->phase_seg2 - 2;
668 writel((tseg2 << IFI_CANFD_TIME_TIMEB_OFF) |
669 (tseg1 << IFI_CANFD_TIME_TIMEA_OFF) |
670 (brp << IFI_CANFD_TIME_PRESCALE_OFF) |
671 (sjw << IFI_CANFD_TIME_SJW_OFF_7_9_8_8),
672 priv->base + IFI_CANFD_FTIME);
674 /* Configure transmitter delay */
675 tdc = dbt->brp * (dbt->prop_seg + dbt->phase_seg1);
676 tdc &= IFI_CANFD_TDELAY_MASK;
677 writel(IFI_CANFD_TDELAY_EN | tdc, priv->base + IFI_CANFD_TDELAY);
680 static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id,
681 const u32 mask, const u32 ident)
683 struct ifi_canfd_priv *priv = netdev_priv(ndev);
685 writel(mask, priv->base + IFI_CANFD_FILTER_MASK(id));
686 writel(ident, priv->base + IFI_CANFD_FILTER_IDENT(id));
689 static void ifi_canfd_set_filters(struct net_device *ndev)
691 /* Receive all CAN frames (standard ID) */
692 ifi_canfd_set_filter(ndev, 0,
693 IFI_CANFD_FILTER_MASK_VALID |
694 IFI_CANFD_FILTER_MASK_EXT,
695 IFI_CANFD_FILTER_IDENT_VALID);
697 /* Receive all CAN frames (extended ID) */
698 ifi_canfd_set_filter(ndev, 1,
699 IFI_CANFD_FILTER_MASK_VALID |
700 IFI_CANFD_FILTER_MASK_EXT,
701 IFI_CANFD_FILTER_IDENT_VALID |
702 IFI_CANFD_FILTER_IDENT_IDE);
704 /* Receive all CANFD frames */
705 ifi_canfd_set_filter(ndev, 2,
706 IFI_CANFD_FILTER_MASK_VALID |
707 IFI_CANFD_FILTER_MASK_EDL |
708 IFI_CANFD_FILTER_MASK_EXT,
709 IFI_CANFD_FILTER_IDENT_VALID |
710 IFI_CANFD_FILTER_IDENT_CANFD |
711 IFI_CANFD_FILTER_IDENT_IDE);
714 static void ifi_canfd_start(struct net_device *ndev)
716 struct ifi_canfd_priv *priv = netdev_priv(ndev);
720 writel(IFI_CANFD_STCMD_HARDRESET, priv->base + IFI_CANFD_STCMD);
721 writel(IFI_CANFD_STCMD_ENABLE_7_9_8_8_TIMING,
722 priv->base + IFI_CANFD_STCMD);
724 ifi_canfd_set_bittiming(ndev);
725 ifi_canfd_set_filters(ndev);
728 writel(IFI_CANFD_RXSTCMD_RESET, priv->base + IFI_CANFD_RXSTCMD);
729 writel(0, priv->base + IFI_CANFD_RXSTCMD);
730 writel(IFI_CANFD_TXSTCMD_RESET, priv->base + IFI_CANFD_TXSTCMD);
731 writel(0, priv->base + IFI_CANFD_TXSTCMD);
733 /* Repeat transmission until successful */
734 writel(0, priv->base + IFI_CANFD_REPEAT);
735 writel(0, priv->base + IFI_CANFD_SUSPEND);
737 /* Clear all pending interrupts */
738 writel((u32)(~IFI_CANFD_INTERRUPT_SET_IRQ),
739 priv->base + IFI_CANFD_INTERRUPT);
741 stcmd = IFI_CANFD_STCMD_ENABLE | IFI_CANFD_STCMD_NORMAL_MODE |
742 IFI_CANFD_STCMD_ENABLE_7_9_8_8_TIMING;
744 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
745 stcmd |= IFI_CANFD_STCMD_BUSMONITOR;
747 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
748 stcmd |= IFI_CANFD_STCMD_LOOPBACK;
750 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) &&
751 !(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO))
752 stcmd |= IFI_CANFD_STCMD_ENABLE_ISO;
754 if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD))
755 stcmd |= IFI_CANFD_STCMD_DISABLE_CANFD;
757 priv->can.state = CAN_STATE_ERROR_ACTIVE;
759 ifi_canfd_irq_enable(ndev, 1);
761 /* Unlock, reset and enable the error counter. */
762 writel(IFI_CANFD_ERROR_CTR_UNLOCK_MAGIC,
763 priv->base + IFI_CANFD_ERROR_CTR);
764 writel(IFI_CANFD_ERROR_CTR_ER_RESET, priv->base + IFI_CANFD_ERROR_CTR);
765 writel(IFI_CANFD_ERROR_CTR_ER_ENABLE, priv->base + IFI_CANFD_ERROR_CTR);
767 /* Enable controller */
768 writel(stcmd, priv->base + IFI_CANFD_STCMD);
771 static void ifi_canfd_stop(struct net_device *ndev)
773 struct ifi_canfd_priv *priv = netdev_priv(ndev);
775 /* Reset and disable the error counter. */
776 writel(IFI_CANFD_ERROR_CTR_ER_RESET, priv->base + IFI_CANFD_ERROR_CTR);
777 writel(0, priv->base + IFI_CANFD_ERROR_CTR);
780 writel(IFI_CANFD_STCMD_HARDRESET, priv->base + IFI_CANFD_STCMD);
782 /* Mask all interrupts */
783 writel(~0, priv->base + IFI_CANFD_IRQMASK);
785 /* Clear all pending interrupts */
786 writel((u32)(~IFI_CANFD_INTERRUPT_SET_IRQ),
787 priv->base + IFI_CANFD_INTERRUPT);
789 /* Set the state as STOPPED */
790 priv->can.state = CAN_STATE_STOPPED;
793 static int ifi_canfd_set_mode(struct net_device *ndev, enum can_mode mode)
797 ifi_canfd_start(ndev);
798 netif_wake_queue(ndev);
807 static int ifi_canfd_open(struct net_device *ndev)
809 struct ifi_canfd_priv *priv = netdev_priv(ndev);
812 ret = open_candev(ndev);
814 netdev_err(ndev, "Failed to open CAN device\n");
818 /* Register interrupt handler */
819 ret = request_irq(ndev->irq, ifi_canfd_isr, IRQF_SHARED,
822 netdev_err(ndev, "Failed to request interrupt\n");
826 ifi_canfd_start(ndev);
828 can_led_event(ndev, CAN_LED_EVENT_OPEN);
829 napi_enable(&priv->napi);
830 netif_start_queue(ndev);
838 static int ifi_canfd_close(struct net_device *ndev)
840 struct ifi_canfd_priv *priv = netdev_priv(ndev);
842 netif_stop_queue(ndev);
843 napi_disable(&priv->napi);
845 ifi_canfd_stop(ndev);
847 free_irq(ndev->irq, ndev);
851 can_led_event(ndev, CAN_LED_EVENT_STOP);
856 static netdev_tx_t ifi_canfd_start_xmit(struct sk_buff *skb,
857 struct net_device *ndev)
859 struct ifi_canfd_priv *priv = netdev_priv(ndev);
860 struct canfd_frame *cf = (struct canfd_frame *)skb->data;
861 u32 txst, txid, txdlc;
864 if (can_dropped_invalid_skb(ndev, skb))
867 /* Check if the TX buffer is full */
868 txst = readl(priv->base + IFI_CANFD_TXSTCMD);
869 if (txst & IFI_CANFD_TXSTCMD_FULL) {
870 netif_stop_queue(ndev);
871 netdev_err(ndev, "BUG! TX FIFO full when queue awake!\n");
872 return NETDEV_TX_BUSY;
875 netif_stop_queue(ndev);
877 if (cf->can_id & CAN_EFF_FLAG) {
878 txid = cf->can_id & CAN_EFF_MASK;
880 * In case the Extended ID frame is transmitted, the
881 * standard and extended part of the ID are swapped
882 * in the register, so swap them back to send the
885 txid = (txid >> IFI_CANFD_TXFIFO_ID_ID_XTD_WIDTH) |
886 ((txid & IFI_CANFD_TXFIFO_ID_ID_XTD_MASK) <<
887 IFI_CANFD_TXFIFO_ID_ID_XTD_OFFSET);
888 txid |= IFI_CANFD_TXFIFO_ID_IDE;
890 txid = cf->can_id & CAN_SFF_MASK;
893 txdlc = can_len2dlc(cf->len);
894 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) && can_is_canfd_skb(skb)) {
895 txdlc |= IFI_CANFD_TXFIFO_DLC_EDL;
896 if (cf->flags & CANFD_BRS)
897 txdlc |= IFI_CANFD_TXFIFO_DLC_BRS;
900 if (cf->can_id & CAN_RTR_FLAG)
901 txdlc |= IFI_CANFD_TXFIFO_DLC_RTR;
903 /* message ram configuration */
904 writel(txid, priv->base + IFI_CANFD_TXFIFO_ID);
905 writel(txdlc, priv->base + IFI_CANFD_TXFIFO_DLC);
907 for (i = 0; i < cf->len; i += 4) {
908 writel(*(u32 *)(cf->data + i),
909 priv->base + IFI_CANFD_TXFIFO_DATA + i);
912 writel(0, priv->base + IFI_CANFD_TXFIFO_REPEATCOUNT);
913 writel(0, priv->base + IFI_CANFD_TXFIFO_SUSPEND_US);
915 can_put_echo_skb(skb, ndev, 0);
917 /* Start the transmission */
918 writel(IFI_CANFD_TXSTCMD_ADD_MSG, priv->base + IFI_CANFD_TXSTCMD);
923 static const struct net_device_ops ifi_canfd_netdev_ops = {
924 .ndo_open = ifi_canfd_open,
925 .ndo_stop = ifi_canfd_close,
926 .ndo_start_xmit = ifi_canfd_start_xmit,
927 .ndo_change_mtu = can_change_mtu,
930 static int ifi_canfd_plat_probe(struct platform_device *pdev)
932 struct device *dev = &pdev->dev;
933 struct net_device *ndev;
934 struct ifi_canfd_priv *priv;
935 struct resource *res;
940 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
941 addr = devm_ioremap_resource(dev, res);
942 irq = platform_get_irq(pdev, 0);
943 if (IS_ERR(addr) || irq < 0)
946 id = readl(addr + IFI_CANFD_IP_ID);
947 if (id != IFI_CANFD_IP_ID_VALUE) {
948 dev_err(dev, "This block is not IFI CANFD, id=%08x\n", id);
952 rev = readl(addr + IFI_CANFD_VER) & IFI_CANFD_VER_REV_MASK;
953 if (rev < IFI_CANFD_VER_REV_MIN_SUPPORTED) {
954 dev_err(dev, "This block is too old (rev %i), minimum supported is rev %i\n",
955 rev, IFI_CANFD_VER_REV_MIN_SUPPORTED);
959 ndev = alloc_candev(sizeof(*priv), 1);
964 ndev->flags |= IFF_ECHO; /* we support local echo */
965 ndev->netdev_ops = &ifi_canfd_netdev_ops;
967 priv = netdev_priv(ndev);
971 netif_napi_add(ndev, &priv->napi, ifi_canfd_poll, 64);
973 priv->can.state = CAN_STATE_STOPPED;
975 priv->can.clock.freq = readl(addr + IFI_CANFD_CANCLOCK);
977 priv->can.bittiming_const = &ifi_canfd_bittiming_const;
978 priv->can.data_bittiming_const = &ifi_canfd_bittiming_const;
979 priv->can.do_set_mode = ifi_canfd_set_mode;
980 priv->can.do_get_berr_counter = ifi_canfd_get_berr_counter;
982 /* IFI CANFD can do both Bosch FD and ISO FD */
983 priv->can.ctrlmode = CAN_CTRLMODE_FD;
985 /* IFI CANFD can do both Bosch FD and ISO FD */
986 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
987 CAN_CTRLMODE_LISTENONLY |
989 CAN_CTRLMODE_FD_NON_ISO |
990 CAN_CTRLMODE_BERR_REPORTING;
992 platform_set_drvdata(pdev, ndev);
993 SET_NETDEV_DEV(ndev, dev);
995 ret = register_candev(ndev);
997 dev_err(dev, "Failed to register (ret=%d)\n", ret);
1001 devm_can_led_init(ndev);
1003 dev_info(dev, "Driver registered: regs=%p, irq=%d, clock=%d\n",
1004 priv->base, ndev->irq, priv->can.clock.freq);
1013 static int ifi_canfd_plat_remove(struct platform_device *pdev)
1015 struct net_device *ndev = platform_get_drvdata(pdev);
1017 unregister_candev(ndev);
1018 platform_set_drvdata(pdev, NULL);
1024 static const struct of_device_id ifi_canfd_of_table[] = {
1025 { .compatible = "ifi,canfd-1.0", .data = NULL },
1028 MODULE_DEVICE_TABLE(of, ifi_canfd_of_table);
1030 static struct platform_driver ifi_canfd_plat_driver = {
1032 .name = KBUILD_MODNAME,
1033 .of_match_table = ifi_canfd_of_table,
1035 .probe = ifi_canfd_plat_probe,
1036 .remove = ifi_canfd_plat_remove,
1039 module_platform_driver(ifi_canfd_plat_driver);
1041 MODULE_AUTHOR("Marek Vasut <marex@denx.de>");
1042 MODULE_LICENSE("GPL v2");
1043 MODULE_DESCRIPTION("CAN bus driver for IFI CANFD controller");