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_NORMAL_MODE ((u32)BIT(31))
39 #define IFI_CANFD_RXSTCMD 0x4
40 #define IFI_CANFD_RXSTCMD_REMOVE_MSG BIT(0)
41 #define IFI_CANFD_RXSTCMD_RESET BIT(7)
42 #define IFI_CANFD_RXSTCMD_EMPTY BIT(8)
43 #define IFI_CANFD_RXSTCMD_OVERFLOW BIT(13)
45 #define IFI_CANFD_TXSTCMD 0x8
46 #define IFI_CANFD_TXSTCMD_ADD_MSG BIT(0)
47 #define IFI_CANFD_TXSTCMD_HIGH_PRIO BIT(1)
48 #define IFI_CANFD_TXSTCMD_RESET BIT(7)
49 #define IFI_CANFD_TXSTCMD_EMPTY BIT(8)
50 #define IFI_CANFD_TXSTCMD_FULL BIT(12)
51 #define IFI_CANFD_TXSTCMD_OVERFLOW BIT(13)
53 #define IFI_CANFD_INTERRUPT 0xc
54 #define IFI_CANFD_INTERRUPT_ERROR_WARNING ((u32)BIT(1))
55 #define IFI_CANFD_INTERRUPT_TXFIFO_EMPTY BIT(16)
56 #define IFI_CANFD_INTERRUPT_TXFIFO_REMOVE BIT(22)
57 #define IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY BIT(24)
58 #define IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER BIT(25)
59 #define IFI_CANFD_INTERRUPT_SET_IRQ ((u32)BIT(31))
61 #define IFI_CANFD_IRQMASK 0x10
62 #define IFI_CANFD_IRQMASK_SET_ERR BIT(7)
63 #define IFI_CANFD_IRQMASK_SET_TS BIT(15)
64 #define IFI_CANFD_IRQMASK_TXFIFO_EMPTY BIT(16)
65 #define IFI_CANFD_IRQMASK_SET_TX BIT(23)
66 #define IFI_CANFD_IRQMASK_RXFIFO_NEMPTY BIT(24)
67 #define IFI_CANFD_IRQMASK_SET_RX ((u32)BIT(31))
69 #define IFI_CANFD_TIME 0x14
70 #define IFI_CANFD_FTIME 0x18
71 #define IFI_CANFD_TIME_TIMEB_OFF 0
72 #define IFI_CANFD_TIME_TIMEA_OFF 8
73 #define IFI_CANFD_TIME_PRESCALE_OFF 16
74 #define IFI_CANFD_TIME_SJW_OFF_ISO 25
75 #define IFI_CANFD_TIME_SJW_OFF_BOSCH 28
76 #define IFI_CANFD_TIME_SET_SJW_BOSCH BIT(6)
77 #define IFI_CANFD_TIME_SET_TIMEB_BOSCH BIT(7)
78 #define IFI_CANFD_TIME_SET_PRESC_BOSCH BIT(14)
79 #define IFI_CANFD_TIME_SET_TIMEA_BOSCH BIT(15)
81 #define IFI_CANFD_TDELAY 0x1c
83 #define IFI_CANFD_ERROR 0x20
84 #define IFI_CANFD_ERROR_TX_OFFSET 0
85 #define IFI_CANFD_ERROR_TX_MASK 0xff
86 #define IFI_CANFD_ERROR_RX_OFFSET 16
87 #define IFI_CANFD_ERROR_RX_MASK 0xff
89 #define IFI_CANFD_ERRCNT 0x24
91 #define IFI_CANFD_SUSPEND 0x28
93 #define IFI_CANFD_REPEAT 0x2c
95 #define IFI_CANFD_TRAFFIC 0x30
97 #define IFI_CANFD_TSCONTROL 0x34
99 #define IFI_CANFD_TSC 0x38
101 #define IFI_CANFD_TST 0x3c
103 #define IFI_CANFD_RES1 0x40
105 #define IFI_CANFD_RES2 0x44
107 #define IFI_CANFD_PAR 0x48
109 #define IFI_CANFD_CANCLOCK 0x4c
111 #define IFI_CANFD_SYSCLOCK 0x50
113 #define IFI_CANFD_VER 0x54
115 #define IFI_CANFD_IP_ID 0x58
116 #define IFI_CANFD_IP_ID_VALUE 0xD073CAFD
118 #define IFI_CANFD_TEST 0x5c
120 #define IFI_CANFD_RXFIFO_TS_63_32 0x60
122 #define IFI_CANFD_RXFIFO_TS_31_0 0x64
124 #define IFI_CANFD_RXFIFO_DLC 0x68
125 #define IFI_CANFD_RXFIFO_DLC_DLC_OFFSET 0
126 #define IFI_CANFD_RXFIFO_DLC_DLC_MASK 0xf
127 #define IFI_CANFD_RXFIFO_DLC_RTR BIT(4)
128 #define IFI_CANFD_RXFIFO_DLC_EDL BIT(5)
129 #define IFI_CANFD_RXFIFO_DLC_BRS BIT(6)
130 #define IFI_CANFD_RXFIFO_DLC_ESI BIT(7)
131 #define IFI_CANFD_RXFIFO_DLC_OBJ_OFFSET 8
132 #define IFI_CANFD_RXFIFO_DLC_OBJ_MASK 0x1ff
133 #define IFI_CANFD_RXFIFO_DLC_FNR_OFFSET 24
134 #define IFI_CANFD_RXFIFO_DLC_FNR_MASK 0xff
136 #define IFI_CANFD_RXFIFO_ID 0x6c
137 #define IFI_CANFD_RXFIFO_ID_ID_OFFSET 0
138 #define IFI_CANFD_RXFIFO_ID_ID_STD_MASK CAN_SFF_MASK
139 #define IFI_CANFD_RXFIFO_ID_ID_STD_OFFSET 0
140 #define IFI_CANFD_RXFIFO_ID_ID_STD_WIDTH 10
141 #define IFI_CANFD_RXFIFO_ID_ID_XTD_MASK CAN_EFF_MASK
142 #define IFI_CANFD_RXFIFO_ID_ID_XTD_OFFSET 11
143 #define IFI_CANFD_RXFIFO_ID_ID_XTD_WIDTH 18
144 #define IFI_CANFD_RXFIFO_ID_IDE BIT(29)
146 #define IFI_CANFD_RXFIFO_DATA 0x70 /* 0x70..0xac */
148 #define IFI_CANFD_TXFIFO_SUSPEND_US 0xb0
150 #define IFI_CANFD_TXFIFO_REPEATCOUNT 0xb4
152 #define IFI_CANFD_TXFIFO_DLC 0xb8
153 #define IFI_CANFD_TXFIFO_DLC_DLC_OFFSET 0
154 #define IFI_CANFD_TXFIFO_DLC_DLC_MASK 0xf
155 #define IFI_CANFD_TXFIFO_DLC_RTR BIT(4)
156 #define IFI_CANFD_TXFIFO_DLC_EDL BIT(5)
157 #define IFI_CANFD_TXFIFO_DLC_BRS BIT(6)
158 #define IFI_CANFD_TXFIFO_DLC_FNR_OFFSET 24
159 #define IFI_CANFD_TXFIFO_DLC_FNR_MASK 0xff
161 #define IFI_CANFD_TXFIFO_ID 0xbc
162 #define IFI_CANFD_TXFIFO_ID_ID_OFFSET 0
163 #define IFI_CANFD_TXFIFO_ID_ID_STD_MASK CAN_SFF_MASK
164 #define IFI_CANFD_TXFIFO_ID_ID_STD_OFFSET 0
165 #define IFI_CANFD_TXFIFO_ID_ID_STD_WIDTH 10
166 #define IFI_CANFD_TXFIFO_ID_ID_XTD_MASK CAN_EFF_MASK
167 #define IFI_CANFD_TXFIFO_ID_ID_XTD_OFFSET 11
168 #define IFI_CANFD_TXFIFO_ID_ID_XTD_WIDTH 18
169 #define IFI_CANFD_TXFIFO_ID_IDE BIT(29)
171 #define IFI_CANFD_TXFIFO_DATA 0xc0 /* 0xb0..0xfc */
173 #define IFI_CANFD_FILTER_MASK(n) (0x800 + ((n) * 8) + 0)
174 #define IFI_CANFD_FILTER_MASK_EXT BIT(29)
175 #define IFI_CANFD_FILTER_MASK_EDL BIT(30)
176 #define IFI_CANFD_FILTER_MASK_VALID ((u32)BIT(31))
178 #define IFI_CANFD_FILTER_IDENT(n) (0x800 + ((n) * 8) + 4)
179 #define IFI_CANFD_FILTER_IDENT_IDE BIT(29)
180 #define IFI_CANFD_FILTER_IDENT_CANFD BIT(30)
181 #define IFI_CANFD_FILTER_IDENT_VALID ((u32)BIT(31))
183 /* IFI CANFD private data structure */
184 struct ifi_canfd_priv {
185 struct can_priv can; /* must be the first member */
186 struct napi_struct napi;
187 struct net_device *ndev;
191 static void ifi_canfd_irq_enable(struct net_device *ndev, bool enable)
193 struct ifi_canfd_priv *priv = netdev_priv(ndev);
197 enirq = IFI_CANFD_IRQMASK_TXFIFO_EMPTY |
198 IFI_CANFD_IRQMASK_RXFIFO_NEMPTY;
201 writel(IFI_CANFD_IRQMASK_SET_ERR |
202 IFI_CANFD_IRQMASK_SET_TS |
203 IFI_CANFD_IRQMASK_SET_TX |
204 IFI_CANFD_IRQMASK_SET_RX | enirq,
205 priv->base + IFI_CANFD_IRQMASK);
208 static void ifi_canfd_read_fifo(struct net_device *ndev)
210 struct net_device_stats *stats = &ndev->stats;
211 struct ifi_canfd_priv *priv = netdev_priv(ndev);
212 struct canfd_frame *cf;
214 const u32 rx_irq_mask = IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY |
215 IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER;
220 rxdlc = readl(priv->base + IFI_CANFD_RXFIFO_DLC);
221 if (rxdlc & IFI_CANFD_RXFIFO_DLC_EDL)
222 skb = alloc_canfd_skb(ndev, &cf);
224 skb = alloc_can_skb(ndev, (struct can_frame **)&cf);
231 dlc = (rxdlc >> IFI_CANFD_RXFIFO_DLC_DLC_OFFSET) &
232 IFI_CANFD_RXFIFO_DLC_DLC_MASK;
233 if (rxdlc & IFI_CANFD_RXFIFO_DLC_EDL)
234 cf->len = can_dlc2len(dlc);
236 cf->len = get_can_dlc(dlc);
238 rxid = readl(priv->base + IFI_CANFD_RXFIFO_ID);
239 id = (rxid >> IFI_CANFD_RXFIFO_ID_ID_OFFSET);
240 if (id & IFI_CANFD_RXFIFO_ID_IDE) {
241 id &= IFI_CANFD_RXFIFO_ID_ID_XTD_MASK;
243 * In case the Extended ID frame is received, the standard
244 * and extended part of the ID are swapped in the register,
245 * so swap them back to obtain the correct ID.
247 id = (id >> IFI_CANFD_RXFIFO_ID_ID_XTD_OFFSET) |
248 ((id & IFI_CANFD_RXFIFO_ID_ID_STD_MASK) <<
249 IFI_CANFD_RXFIFO_ID_ID_XTD_WIDTH);
252 id &= IFI_CANFD_RXFIFO_ID_ID_STD_MASK;
256 if (rxdlc & IFI_CANFD_RXFIFO_DLC_ESI) {
257 cf->flags |= CANFD_ESI;
258 netdev_dbg(ndev, "ESI Error\n");
261 if (!(rxdlc & IFI_CANFD_RXFIFO_DLC_EDL) &&
262 (rxdlc & IFI_CANFD_RXFIFO_DLC_RTR)) {
263 cf->can_id |= CAN_RTR_FLAG;
265 if (rxdlc & IFI_CANFD_RXFIFO_DLC_BRS)
266 cf->flags |= CANFD_BRS;
268 for (i = 0; i < cf->len; i += 4) {
269 *(u32 *)(cf->data + i) =
270 readl(priv->base + IFI_CANFD_RXFIFO_DATA + i);
274 /* Remove the packet from FIFO */
275 writel(IFI_CANFD_RXSTCMD_REMOVE_MSG, priv->base + IFI_CANFD_RXSTCMD);
276 writel(rx_irq_mask, priv->base + IFI_CANFD_INTERRUPT);
279 stats->rx_bytes += cf->len;
281 netif_receive_skb(skb);
284 static int ifi_canfd_do_rx_poll(struct net_device *ndev, int quota)
286 struct ifi_canfd_priv *priv = netdev_priv(ndev);
290 rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
291 if (rxst & IFI_CANFD_RXSTCMD_EMPTY) {
292 netdev_dbg(ndev, "No messages in RX FIFO\n");
297 if (rxst & IFI_CANFD_RXSTCMD_EMPTY)
302 ifi_canfd_read_fifo(ndev);
305 rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
309 can_led_event(ndev, CAN_LED_EVENT_RX);
314 static int ifi_canfd_handle_lost_msg(struct net_device *ndev)
316 struct net_device_stats *stats = &ndev->stats;
318 struct can_frame *frame;
320 netdev_err(ndev, "RX FIFO overflow, message(s) lost.\n");
323 stats->rx_over_errors++;
325 skb = alloc_can_err_skb(ndev, &frame);
329 frame->can_id |= CAN_ERR_CRTL;
330 frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
332 netif_receive_skb(skb);
337 static int ifi_canfd_get_berr_counter(const struct net_device *ndev,
338 struct can_berr_counter *bec)
340 struct ifi_canfd_priv *priv = netdev_priv(ndev);
343 err = readl(priv->base + IFI_CANFD_ERROR);
344 bec->rxerr = (err >> IFI_CANFD_ERROR_RX_OFFSET) &
345 IFI_CANFD_ERROR_RX_MASK;
346 bec->txerr = (err >> IFI_CANFD_ERROR_TX_OFFSET) &
347 IFI_CANFD_ERROR_TX_MASK;
352 static int ifi_canfd_handle_state_change(struct net_device *ndev,
353 enum can_state new_state)
355 struct ifi_canfd_priv *priv = netdev_priv(ndev);
356 struct net_device_stats *stats = &ndev->stats;
357 struct can_frame *cf;
359 struct can_berr_counter bec;
362 case CAN_STATE_ERROR_ACTIVE:
363 /* error warning state */
364 priv->can.can_stats.error_warning++;
365 priv->can.state = CAN_STATE_ERROR_WARNING;
367 case CAN_STATE_ERROR_PASSIVE:
368 /* error passive state */
369 priv->can.can_stats.error_passive++;
370 priv->can.state = CAN_STATE_ERROR_PASSIVE;
372 case CAN_STATE_BUS_OFF:
374 priv->can.state = CAN_STATE_BUS_OFF;
375 ifi_canfd_irq_enable(ndev, 0);
376 priv->can.can_stats.bus_off++;
383 /* propagate the error condition to the CAN stack */
384 skb = alloc_can_err_skb(ndev, &cf);
388 ifi_canfd_get_berr_counter(ndev, &bec);
391 case CAN_STATE_ERROR_ACTIVE:
392 /* error warning state */
393 cf->can_id |= CAN_ERR_CRTL;
394 cf->data[1] = (bec.txerr > bec.rxerr) ?
395 CAN_ERR_CRTL_TX_WARNING :
396 CAN_ERR_CRTL_RX_WARNING;
397 cf->data[6] = bec.txerr;
398 cf->data[7] = bec.rxerr;
400 case CAN_STATE_ERROR_PASSIVE:
401 /* error passive state */
402 cf->can_id |= CAN_ERR_CRTL;
403 cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
405 cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
406 cf->data[6] = bec.txerr;
407 cf->data[7] = bec.rxerr;
409 case CAN_STATE_BUS_OFF:
411 cf->can_id |= CAN_ERR_BUSOFF;
418 stats->rx_bytes += cf->can_dlc;
419 netif_receive_skb(skb);
424 static int ifi_canfd_handle_state_errors(struct net_device *ndev, u32 stcmd)
426 struct ifi_canfd_priv *priv = netdev_priv(ndev);
431 * The ErrWarn condition is a little special, since the bit is
432 * located in the INTERRUPT register instead of STCMD register.
434 isr = readl(priv->base + IFI_CANFD_INTERRUPT);
435 if ((isr & IFI_CANFD_INTERRUPT_ERROR_WARNING) &&
436 (priv->can.state != CAN_STATE_ERROR_WARNING)) {
437 /* Clear the interrupt */
438 writel(IFI_CANFD_INTERRUPT_ERROR_WARNING,
439 priv->base + IFI_CANFD_INTERRUPT);
440 netdev_dbg(ndev, "Error, entered warning state\n");
441 work_done += ifi_canfd_handle_state_change(ndev,
442 CAN_STATE_ERROR_WARNING);
445 if ((stcmd & IFI_CANFD_STCMD_ERROR_PASSIVE) &&
446 (priv->can.state != CAN_STATE_ERROR_PASSIVE)) {
447 netdev_dbg(ndev, "Error, entered passive state\n");
448 work_done += ifi_canfd_handle_state_change(ndev,
449 CAN_STATE_ERROR_PASSIVE);
452 if ((stcmd & IFI_CANFD_STCMD_BUSOFF) &&
453 (priv->can.state != CAN_STATE_BUS_OFF)) {
454 netdev_dbg(ndev, "Error, entered bus-off state\n");
455 work_done += ifi_canfd_handle_state_change(ndev,
462 static int ifi_canfd_poll(struct napi_struct *napi, int quota)
464 struct net_device *ndev = napi->dev;
465 struct ifi_canfd_priv *priv = netdev_priv(ndev);
466 const u32 stcmd_state_mask = IFI_CANFD_STCMD_ERROR_PASSIVE |
467 IFI_CANFD_STCMD_BUSOFF;
470 u32 stcmd = readl(priv->base + IFI_CANFD_STCMD);
471 u32 rxstcmd = readl(priv->base + IFI_CANFD_STCMD);
473 /* Handle bus state changes */
474 if ((stcmd & stcmd_state_mask) ||
475 ((stcmd & IFI_CANFD_STCMD_ERROR_ACTIVE) == 0))
476 work_done += ifi_canfd_handle_state_errors(ndev, stcmd);
478 /* Handle lost messages on RX */
479 if (rxstcmd & IFI_CANFD_RXSTCMD_OVERFLOW)
480 work_done += ifi_canfd_handle_lost_msg(ndev);
482 /* Handle normal messages on RX */
483 if (!(rxstcmd & IFI_CANFD_RXSTCMD_EMPTY))
484 work_done += ifi_canfd_do_rx_poll(ndev, quota - work_done);
486 if (work_done < quota) {
488 ifi_canfd_irq_enable(ndev, 1);
494 static irqreturn_t ifi_canfd_isr(int irq, void *dev_id)
496 struct net_device *ndev = (struct net_device *)dev_id;
497 struct ifi_canfd_priv *priv = netdev_priv(ndev);
498 struct net_device_stats *stats = &ndev->stats;
499 const u32 rx_irq_mask = IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY |
500 IFI_CANFD_INTERRUPT_RXFIFO_NEMPTY_PER |
501 IFI_CANFD_INTERRUPT_ERROR_WARNING;
502 const u32 tx_irq_mask = IFI_CANFD_INTERRUPT_TXFIFO_EMPTY |
503 IFI_CANFD_INTERRUPT_TXFIFO_REMOVE;
504 const u32 clr_irq_mask = ~(IFI_CANFD_INTERRUPT_SET_IRQ |
505 IFI_CANFD_INTERRUPT_ERROR_WARNING);
508 isr = readl(priv->base + IFI_CANFD_INTERRUPT);
514 /* Clear all pending interrupts but ErrWarn */
515 writel(clr_irq_mask, priv->base + IFI_CANFD_INTERRUPT);
517 /* RX IRQ or bus warning, start NAPI */
518 if (isr & rx_irq_mask) {
519 ifi_canfd_irq_enable(ndev, 0);
520 napi_schedule(&priv->napi);
524 if (isr & tx_irq_mask) {
525 stats->tx_bytes += can_get_echo_skb(ndev, 0);
527 can_led_event(ndev, CAN_LED_EVENT_TX);
528 netif_wake_queue(ndev);
534 static const struct can_bittiming_const ifi_canfd_bittiming_const = {
535 .name = KBUILD_MODNAME,
536 .tseg1_min = 1, /* Time segment 1 = prop_seg + phase_seg1 */
538 .tseg2_min = 2, /* Time segment 2 = phase_seg2 */
546 static const struct can_bittiming_const ifi_canfd_data_bittiming_const = {
547 .name = KBUILD_MODNAME,
548 .tseg1_min = 1, /* Time segment 1 = prop_seg + phase_seg1 */
550 .tseg2_min = 2, /* Time segment 2 = phase_seg2 */
558 static void ifi_canfd_set_bittiming(struct net_device *ndev)
560 struct ifi_canfd_priv *priv = netdev_priv(ndev);
561 const struct can_bittiming *bt = &priv->can.bittiming;
562 const struct can_bittiming *dbt = &priv->can.data_bittiming;
563 u16 brp, sjw, tseg1, tseg2;
567 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) &&
568 !(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)) {
569 time_off = IFI_CANFD_TIME_SJW_OFF_ISO;
571 noniso_arg = IFI_CANFD_TIME_SET_TIMEB_BOSCH |
572 IFI_CANFD_TIME_SET_TIMEA_BOSCH |
573 IFI_CANFD_TIME_SET_PRESC_BOSCH |
574 IFI_CANFD_TIME_SET_SJW_BOSCH;
575 time_off = IFI_CANFD_TIME_SJW_OFF_BOSCH;
578 /* Configure bit timing */
581 tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
582 tseg2 = bt->phase_seg2 - 2;
583 writel((tseg2 << IFI_CANFD_TIME_TIMEB_OFF) |
584 (tseg1 << IFI_CANFD_TIME_TIMEA_OFF) |
585 (brp << IFI_CANFD_TIME_PRESCALE_OFF) |
588 priv->base + IFI_CANFD_TIME);
590 /* Configure data bit timing */
593 tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
594 tseg2 = dbt->phase_seg2 - 2;
595 writel((tseg2 << IFI_CANFD_TIME_TIMEB_OFF) |
596 (tseg1 << IFI_CANFD_TIME_TIMEA_OFF) |
597 (brp << IFI_CANFD_TIME_PRESCALE_OFF) |
600 priv->base + IFI_CANFD_FTIME);
603 static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id,
604 const u32 mask, const u32 ident)
606 struct ifi_canfd_priv *priv = netdev_priv(ndev);
608 writel(mask, priv->base + IFI_CANFD_FILTER_MASK(id));
609 writel(ident, priv->base + IFI_CANFD_FILTER_IDENT(id));
612 static void ifi_canfd_set_filters(struct net_device *ndev)
614 /* Receive all CAN frames (standard ID) */
615 ifi_canfd_set_filter(ndev, 0,
616 IFI_CANFD_FILTER_MASK_VALID |
617 IFI_CANFD_FILTER_MASK_EXT,
618 IFI_CANFD_FILTER_IDENT_VALID);
620 /* Receive all CAN frames (extended ID) */
621 ifi_canfd_set_filter(ndev, 1,
622 IFI_CANFD_FILTER_MASK_VALID |
623 IFI_CANFD_FILTER_MASK_EXT,
624 IFI_CANFD_FILTER_IDENT_VALID |
625 IFI_CANFD_FILTER_IDENT_IDE);
627 /* Receive all CANFD frames */
628 ifi_canfd_set_filter(ndev, 2,
629 IFI_CANFD_FILTER_MASK_VALID |
630 IFI_CANFD_FILTER_MASK_EDL |
631 IFI_CANFD_FILTER_MASK_EXT,
632 IFI_CANFD_FILTER_IDENT_VALID |
633 IFI_CANFD_FILTER_IDENT_CANFD |
634 IFI_CANFD_FILTER_IDENT_IDE);
637 static void ifi_canfd_start(struct net_device *ndev)
639 struct ifi_canfd_priv *priv = netdev_priv(ndev);
643 writel(IFI_CANFD_STCMD_HARDRESET, priv->base + IFI_CANFD_STCMD);
644 writel(0, priv->base + IFI_CANFD_STCMD);
646 ifi_canfd_set_bittiming(ndev);
647 ifi_canfd_set_filters(ndev);
650 writel(IFI_CANFD_RXSTCMD_RESET, priv->base + IFI_CANFD_RXSTCMD);
651 writel(0, priv->base + IFI_CANFD_RXSTCMD);
652 writel(IFI_CANFD_TXSTCMD_RESET, priv->base + IFI_CANFD_TXSTCMD);
653 writel(0, priv->base + IFI_CANFD_TXSTCMD);
655 /* Repeat transmission until successful */
656 writel(0, priv->base + IFI_CANFD_REPEAT);
657 writel(0, priv->base + IFI_CANFD_SUSPEND);
659 /* Clear all pending interrupts */
660 writel((u32)(~IFI_CANFD_INTERRUPT_SET_IRQ),
661 priv->base + IFI_CANFD_INTERRUPT);
663 stcmd = IFI_CANFD_STCMD_ENABLE | IFI_CANFD_STCMD_NORMAL_MODE;
665 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
666 stcmd |= IFI_CANFD_STCMD_BUSMONITOR;
668 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
669 stcmd |= IFI_CANFD_STCMD_LOOPBACK;
671 if (priv->can.ctrlmode & CAN_CTRLMODE_FD)
672 stcmd |= IFI_CANFD_STCMD_ENABLE_ISO;
674 if (!(priv->can.ctrlmode & (CAN_CTRLMODE_FD | CAN_CTRLMODE_FD_NON_ISO)))
675 stcmd |= IFI_CANFD_STCMD_DISABLE_CANFD;
677 priv->can.state = CAN_STATE_ERROR_ACTIVE;
679 ifi_canfd_irq_enable(ndev, 1);
681 /* Enable controller */
682 writel(stcmd, priv->base + IFI_CANFD_STCMD);
685 static void ifi_canfd_stop(struct net_device *ndev)
687 struct ifi_canfd_priv *priv = netdev_priv(ndev);
690 writel(IFI_CANFD_STCMD_HARDRESET, priv->base + IFI_CANFD_STCMD);
692 /* Mask all interrupts */
693 writel(~0, priv->base + IFI_CANFD_IRQMASK);
695 /* Clear all pending interrupts */
696 writel((u32)(~IFI_CANFD_INTERRUPT_SET_IRQ),
697 priv->base + IFI_CANFD_INTERRUPT);
699 /* Set the state as STOPPED */
700 priv->can.state = CAN_STATE_STOPPED;
703 static int ifi_canfd_set_mode(struct net_device *ndev, enum can_mode mode)
707 ifi_canfd_start(ndev);
708 netif_wake_queue(ndev);
717 static int ifi_canfd_open(struct net_device *ndev)
719 struct ifi_canfd_priv *priv = netdev_priv(ndev);
722 ret = open_candev(ndev);
724 netdev_err(ndev, "Failed to open CAN device\n");
728 /* Register interrupt handler */
729 ret = request_irq(ndev->irq, ifi_canfd_isr, IRQF_SHARED,
732 netdev_err(ndev, "Failed to request interrupt\n");
736 ifi_canfd_start(ndev);
738 can_led_event(ndev, CAN_LED_EVENT_OPEN);
739 napi_enable(&priv->napi);
740 netif_start_queue(ndev);
748 static int ifi_canfd_close(struct net_device *ndev)
750 struct ifi_canfd_priv *priv = netdev_priv(ndev);
752 netif_stop_queue(ndev);
753 napi_disable(&priv->napi);
755 ifi_canfd_stop(ndev);
757 free_irq(ndev->irq, ndev);
761 can_led_event(ndev, CAN_LED_EVENT_STOP);
766 static netdev_tx_t ifi_canfd_start_xmit(struct sk_buff *skb,
767 struct net_device *ndev)
769 struct ifi_canfd_priv *priv = netdev_priv(ndev);
770 struct canfd_frame *cf = (struct canfd_frame *)skb->data;
771 u32 txst, txid, txdlc;
774 if (can_dropped_invalid_skb(ndev, skb))
777 /* Check if the TX buffer is full */
778 txst = readl(priv->base + IFI_CANFD_TXSTCMD);
779 if (txst & IFI_CANFD_TXSTCMD_FULL) {
780 netif_stop_queue(ndev);
781 netdev_err(ndev, "BUG! TX FIFO full when queue awake!\n");
782 return NETDEV_TX_BUSY;
785 netif_stop_queue(ndev);
787 if (cf->can_id & CAN_EFF_FLAG) {
788 txid = cf->can_id & CAN_EFF_MASK;
790 * In case the Extended ID frame is transmitted, the
791 * standard and extended part of the ID are swapped
792 * in the register, so swap them back to send the
795 txid = (txid >> IFI_CANFD_TXFIFO_ID_ID_XTD_WIDTH) |
796 ((txid & IFI_CANFD_TXFIFO_ID_ID_XTD_MASK) <<
797 IFI_CANFD_TXFIFO_ID_ID_XTD_OFFSET);
798 txid |= IFI_CANFD_TXFIFO_ID_IDE;
800 txid = cf->can_id & CAN_SFF_MASK;
803 txdlc = can_len2dlc(cf->len);
804 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) && can_is_canfd_skb(skb)) {
805 txdlc |= IFI_CANFD_TXFIFO_DLC_EDL;
806 if (cf->flags & CANFD_BRS)
807 txdlc |= IFI_CANFD_TXFIFO_DLC_BRS;
810 if (cf->can_id & CAN_RTR_FLAG)
811 txdlc |= IFI_CANFD_TXFIFO_DLC_RTR;
813 /* message ram configuration */
814 writel(txid, priv->base + IFI_CANFD_TXFIFO_ID);
815 writel(txdlc, priv->base + IFI_CANFD_TXFIFO_DLC);
817 for (i = 0; i < cf->len; i += 4) {
818 writel(*(u32 *)(cf->data + i),
819 priv->base + IFI_CANFD_TXFIFO_DATA + i);
822 writel(0, priv->base + IFI_CANFD_TXFIFO_REPEATCOUNT);
823 writel(0, priv->base + IFI_CANFD_TXFIFO_SUSPEND_US);
825 can_put_echo_skb(skb, ndev, 0);
827 /* Start the transmission */
828 writel(IFI_CANFD_TXSTCMD_ADD_MSG, priv->base + IFI_CANFD_TXSTCMD);
833 static const struct net_device_ops ifi_canfd_netdev_ops = {
834 .ndo_open = ifi_canfd_open,
835 .ndo_stop = ifi_canfd_close,
836 .ndo_start_xmit = ifi_canfd_start_xmit,
837 .ndo_change_mtu = can_change_mtu,
840 static int ifi_canfd_plat_probe(struct platform_device *pdev)
842 struct device *dev = &pdev->dev;
843 struct net_device *ndev;
844 struct ifi_canfd_priv *priv;
845 struct resource *res;
850 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
851 addr = devm_ioremap_resource(dev, res);
852 irq = platform_get_irq(pdev, 0);
853 if (IS_ERR(addr) || irq < 0)
856 id = readl(addr + IFI_CANFD_IP_ID);
857 if (id != IFI_CANFD_IP_ID_VALUE) {
858 dev_err(dev, "This block is not IFI CANFD, id=%08x\n", id);
862 ndev = alloc_candev(sizeof(*priv), 1);
867 ndev->flags |= IFF_ECHO; /* we support local echo */
868 ndev->netdev_ops = &ifi_canfd_netdev_ops;
870 priv = netdev_priv(ndev);
874 netif_napi_add(ndev, &priv->napi, ifi_canfd_poll, 64);
876 priv->can.state = CAN_STATE_STOPPED;
878 priv->can.clock.freq = readl(addr + IFI_CANFD_CANCLOCK);
880 priv->can.bittiming_const = &ifi_canfd_bittiming_const;
881 priv->can.data_bittiming_const = &ifi_canfd_data_bittiming_const;
882 priv->can.do_set_mode = ifi_canfd_set_mode;
883 priv->can.do_get_berr_counter = ifi_canfd_get_berr_counter;
885 /* IFI CANFD can do both Bosch FD and ISO FD */
886 priv->can.ctrlmode = CAN_CTRLMODE_FD;
888 /* IFI CANFD can do both Bosch FD and ISO FD */
889 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
890 CAN_CTRLMODE_LISTENONLY |
892 CAN_CTRLMODE_FD_NON_ISO;
894 platform_set_drvdata(pdev, ndev);
895 SET_NETDEV_DEV(ndev, dev);
897 ret = register_candev(ndev);
899 dev_err(dev, "Failed to register (ret=%d)\n", ret);
903 devm_can_led_init(ndev);
905 dev_info(dev, "Driver registered: regs=%p, irq=%d, clock=%d\n",
906 priv->base, ndev->irq, priv->can.clock.freq);
915 static int ifi_canfd_plat_remove(struct platform_device *pdev)
917 struct net_device *ndev = platform_get_drvdata(pdev);
919 unregister_candev(ndev);
920 platform_set_drvdata(pdev, NULL);
926 static const struct of_device_id ifi_canfd_of_table[] = {
927 { .compatible = "ifi,canfd-1.0", .data = NULL },
930 MODULE_DEVICE_TABLE(of, ifi_canfd_of_table);
932 static struct platform_driver ifi_canfd_plat_driver = {
934 .name = KBUILD_MODNAME,
935 .of_match_table = ifi_canfd_of_table,
937 .probe = ifi_canfd_plat_probe,
938 .remove = ifi_canfd_plat_remove,
941 module_platform_driver(ifi_canfd_plat_driver);
943 MODULE_AUTHOR("Marek Vasut <marex@denx.de>");
944 MODULE_LICENSE("GPL v2");
945 MODULE_DESCRIPTION("CAN bus driver for IFI CANFD controller");