]> rtime.felk.cvut.cz Git - fpga/zynq/canbench-sw.git/blob - petalinux/components/modules/xilinx_can/xilinx_can.c
xilinx_can: hwtstamp fixes, it works (almost)
[fpga/zynq/canbench-sw.git] / petalinux / components / modules / xilinx_can / xilinx_can.c
1 /* Xilinx CAN device driver
2  *
3  * Copyright (C) 2012 - 2014 Xilinx, Inc.
4  * Copyright (C) 2009 PetaLogix. All rights reserved.
5  *
6  * Description:
7  * This driver is developed for Axi CAN IP and for Zynq CANPS Controller.
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  */
18
19 #include <linux/clk.h>
20 #include <linux/errno.h>
21 #include <linux/init.h>
22 #include <linux/interrupt.h>
23 #include <linux/io.h>
24 #include <linux/kernel.h>
25 #include <linux/module.h>
26 #include <linux/netdevice.h>
27 #include <linux/of.h>
28 #include <linux/platform_device.h>
29 #include <linux/skbuff.h>
30 #include <linux/string.h>
31 #include <linux/types.h>
32 #include <linux/can/dev.h>
33 #include <linux/can/error.h>
34 #include <linux/can/led.h>
35 #include <linux/ktime.h>
36 #include <linux/net_tstamp.h>
37
38 #define DRIVER_NAME     "xilinx_can"
39
40 /* CAN registers set */
41 enum xcan_reg {
42         XCAN_SRR_OFFSET         = 0x00, /* Software reset */
43         XCAN_MSR_OFFSET         = 0x04, /* Mode select */
44         XCAN_BRPR_OFFSET        = 0x08, /* Baud rate prescaler */
45         XCAN_BTR_OFFSET         = 0x0C, /* Bit timing */
46         XCAN_ECR_OFFSET         = 0x10, /* Error counter */
47         XCAN_ESR_OFFSET         = 0x14, /* Error status */
48         XCAN_SR_OFFSET          = 0x18, /* Status */
49         XCAN_ISR_OFFSET         = 0x1C, /* Interrupt status */
50         XCAN_IER_OFFSET         = 0x20, /* Interrupt enable */
51         XCAN_ICR_OFFSET         = 0x24, /* Interrupt clear */
52         XCAN_TXFIFO_ID_OFFSET   = 0x30,/* TX FIFO ID */
53         XCAN_TXFIFO_DLC_OFFSET  = 0x34, /* TX FIFO DLC */
54         XCAN_TXFIFO_DW1_OFFSET  = 0x38, /* TX FIFO Data Word 1 */
55         XCAN_TXFIFO_DW2_OFFSET  = 0x3C, /* TX FIFO Data Word 2 */
56         XCAN_RXFIFO_ID_OFFSET   = 0x50, /* RX FIFO ID */
57         XCAN_RXFIFO_DLC_OFFSET  = 0x54, /* RX FIFO DLC */
58         XCAN_RXFIFO_DW1_OFFSET  = 0x58, /* RX FIFO Data Word 1 */
59         XCAN_RXFIFO_DW2_OFFSET  = 0x5C, /* RX FIFO Data Word 2 */
60 };
61
62 /* CAN register bit masks - XCAN_<REG>_<BIT>_MASK */
63 #define XCAN_SRR_CEN_MASK               0x00000002 /* CAN enable */
64 #define XCAN_SRR_RESET_MASK             0x00000001 /* Soft Reset the CAN core */
65 #define XCAN_MSR_LBACK_MASK             0x00000002 /* Loop back mode select */
66 #define XCAN_MSR_SLEEP_MASK             0x00000001 /* Sleep mode select */
67 #define XCAN_BRPR_BRP_MASK              0x000000FF /* Baud rate prescaler */
68 #define XCAN_BTR_SJW_MASK               0x00000180 /* Synchronous jump width */
69 #define XCAN_BTR_TS2_MASK               0x00000070 /* Time segment 2 */
70 #define XCAN_BTR_TS1_MASK               0x0000000F /* Time segment 1 */
71 #define XCAN_ECR_REC_MASK               0x0000FF00 /* Receive error counter */
72 #define XCAN_ECR_TEC_MASK               0x000000FF /* Transmit error counter */
73 #define XCAN_ESR_ACKER_MASK             0x00000010 /* ACK error */
74 #define XCAN_ESR_BERR_MASK              0x00000008 /* Bit error */
75 #define XCAN_ESR_STER_MASK              0x00000004 /* Stuff error */
76 #define XCAN_ESR_FMER_MASK              0x00000002 /* Form error */
77 #define XCAN_ESR_CRCER_MASK             0x00000001 /* CRC error */
78 #define XCAN_SR_TXFLL_MASK              0x00000400 /* TX FIFO is full */
79 #define XCAN_SR_ESTAT_MASK              0x00000180 /* Error status */
80 #define XCAN_SR_ERRWRN_MASK             0x00000040 /* Error warning */
81 #define XCAN_SR_NORMAL_MASK             0x00000008 /* Normal mode */
82 #define XCAN_SR_LBACK_MASK              0x00000002 /* Loop back mode */
83 #define XCAN_SR_CONFIG_MASK             0x00000001 /* Configuration mode */
84 #define XCAN_IXR_TXFEMP_MASK            0x00004000 /* TX FIFO Empty */
85 #define XCAN_IXR_WKUP_MASK              0x00000800 /* Wake up interrupt */
86 #define XCAN_IXR_SLP_MASK               0x00000400 /* Sleep interrupt */
87 #define XCAN_IXR_BSOFF_MASK             0x00000200 /* Bus off interrupt */
88 #define XCAN_IXR_ERROR_MASK             0x00000100 /* Error interrupt */
89 #define XCAN_IXR_RXNEMP_MASK            0x00000080 /* RX FIFO NotEmpty intr */
90 #define XCAN_IXR_RXOFLW_MASK            0x00000040 /* RX FIFO Overflow intr */
91 #define XCAN_IXR_RXOK_MASK              0x00000010 /* Message received intr */
92 #define XCAN_IXR_TXFLL_MASK             0x00000004 /* Tx FIFO Full intr */
93 #define XCAN_IXR_TXOK_MASK              0x00000002 /* TX successful intr */
94 #define XCAN_IXR_ARBLST_MASK            0x00000001 /* Arbitration lost intr */
95 #define XCAN_IDR_ID1_MASK               0xFFE00000 /* Standard msg identifier */
96 #define XCAN_IDR_SRR_MASK               0x00100000 /* Substitute remote TXreq */
97 #define XCAN_IDR_IDE_MASK               0x00080000 /* Identifier extension */
98 #define XCAN_IDR_ID2_MASK               0x0007FFFE /* Extended message ident */
99 #define XCAN_IDR_RTR_MASK               0x00000001 /* Remote TX request */
100 #define XCAN_DLCR_DLC_MASK              0xF0000000 /* Data length code */
101
102 #define XCAN_INTR_ALL           (XCAN_IXR_TXOK_MASK | XCAN_IXR_BSOFF_MASK |\
103                                  XCAN_IXR_WKUP_MASK | XCAN_IXR_SLP_MASK | \
104                                  XCAN_IXR_RXNEMP_MASK | XCAN_IXR_ERROR_MASK | \
105                                  XCAN_IXR_ARBLST_MASK | XCAN_IXR_RXOK_MASK)
106
107 /* CAN register bit shift - XCAN_<REG>_<BIT>_SHIFT */
108 #define XCAN_BTR_SJW_SHIFT              7  /* Synchronous jump width */
109 #define XCAN_BTR_TS2_SHIFT              4  /* Time segment 2 */
110 #define XCAN_IDR_ID1_SHIFT              21 /* Standard Messg Identifier */
111 #define XCAN_IDR_ID2_SHIFT              1  /* Extended Message Identifier */
112 #define XCAN_DLCR_DLC_SHIFT             28 /* Data length code */
113 #define XCAN_ESR_REC_SHIFT              8  /* Rx Error Count */
114
115 /* CAN frame length constants */
116 #define XCAN_FRAME_MAX_DATA_LEN         8
117 #define XCAN_TIMEOUT                    (1 * HZ)
118
119 struct xcan_timepoint {
120         ktime_t ktime;
121         u16 ts;
122 };
123
124 /**
125  * struct xcan_priv - This definition define CAN driver instance
126  * @can:                        CAN private data structure.
127  * @tx_head:                    Tx CAN packets ready to send on the queue
128  * @tx_tail:                    Tx CAN packets successfully sended on the queue
129  * @tx_max:                     Maximum number packets the driver can send
130  * @napi:                       NAPI structure
131  * @read_reg:                   For reading data from CAN registers
132  * @write_reg:                  For writing data to CAN registers
133  * @dev:                        Network device data structure
134  * @reg_base:                   Ioremapped address to registers
135  * @irq_flags:                  For request_irq()
136  * @bus_clk:                    Pointer to struct clk
137  * @can_clk:                    Pointer to struct clk
138  * @ref_timepoint:              Reference timepoint for synchronizing ktime with HW ticks
139  */
140 struct xcan_priv {
141         struct can_priv can;
142         unsigned int tx_head;
143         unsigned int tx_tail;
144         unsigned int tx_max;
145         struct napi_struct napi;
146         u32 (*read_reg)(const struct xcan_priv *priv, enum xcan_reg reg);
147         void (*write_reg)(const struct xcan_priv *priv, enum xcan_reg reg,
148                         u32 val);
149         struct net_device *dev;
150         void __iomem *reg_base;
151         unsigned long irq_flags;
152         struct clk *bus_clk;
153         struct clk *can_clk;
154         struct xcan_timepoint ref_timepoint;
155 };
156
157 /* CAN Bittiming constants as per Xilinx CAN specs */
158 static const struct can_bittiming_const xcan_bittiming_const = {
159         .name = DRIVER_NAME,
160         .tseg1_min = 1,
161         .tseg1_max = 16,
162         .tseg2_min = 1,
163         .tseg2_max = 8,
164         .sjw_max = 4,
165         .brp_min = 1,
166         .brp_max = 256,
167         .brp_inc = 1,
168 };
169
170 /**
171  * xcan_write_reg_le - Write a value to the device register little endian
172  * @priv:       Driver private data structure
173  * @reg:        Register offset
174  * @val:        Value to write at the Register offset
175  *
176  * Write data to the paricular CAN register
177  */
178 static void xcan_write_reg_le(const struct xcan_priv *priv, enum xcan_reg reg,
179                         u32 val)
180 {
181         iowrite32(val, priv->reg_base + reg);
182 }
183
184 /**
185  * xcan_read_reg_le - Read a value from the device register little endian
186  * @priv:       Driver private data structure
187  * @reg:        Register offset
188  *
189  * Read data from the particular CAN register
190  * Return: value read from the CAN register
191  */
192 static u32 xcan_read_reg_le(const struct xcan_priv *priv, enum xcan_reg reg)
193 {
194         return ioread32(priv->reg_base + reg);
195 }
196
197 /**
198  * xcan_write_reg_be - Write a value to the device register big endian
199  * @priv:       Driver private data structure
200  * @reg:        Register offset
201  * @val:        Value to write at the Register offset
202  *
203  * Write data to the paricular CAN register
204  */
205 static void xcan_write_reg_be(const struct xcan_priv *priv, enum xcan_reg reg,
206                         u32 val)
207 {
208         iowrite32be(val, priv->reg_base + reg);
209 }
210
211 /**
212  * xcan_read_reg_be - Read a value from the device register big endian
213  * @priv:       Driver private data structure
214  * @reg:        Register offset
215  *
216  * Read data from the particular CAN register
217  * Return: value read from the CAN register
218  */
219 static u32 xcan_read_reg_be(const struct xcan_priv *priv, enum xcan_reg reg)
220 {
221         return ioread32be(priv->reg_base + reg);
222 }
223
224 /**
225  * set_reset_mode - Resets the CAN device mode
226  * @ndev:       Pointer to net_device structure
227  *
228  * This is the driver reset mode routine.The driver
229  * enters into configuration mode.
230  *
231  * Return: 0 on success and failure value on error
232  */
233 static int set_reset_mode(struct net_device *ndev)
234 {
235         struct xcan_priv *priv = netdev_priv(ndev);
236         unsigned long timeout;
237
238         priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
239
240         timeout = jiffies + XCAN_TIMEOUT;
241         while (!(priv->read_reg(priv, XCAN_SR_OFFSET) & XCAN_SR_CONFIG_MASK)) {
242                 if (time_after(jiffies, timeout)) {
243                         netdev_warn(ndev, "timed out for config mode\n");
244                         return -ETIMEDOUT;
245                 }
246                 usleep_range(500, 10000);
247         }
248
249         return 0;
250 }
251
252 /**
253  * xcan_set_bittiming - CAN set bit timing routine
254  * @ndev:       Pointer to net_device structure
255  *
256  * This is the driver set bittiming  routine.
257  * Return: 0 on success and failure value on error
258  */
259 static int xcan_set_bittiming(struct net_device *ndev)
260 {
261         struct xcan_priv *priv = netdev_priv(ndev);
262         struct can_bittiming *bt = &priv->can.bittiming;
263         u32 btr0, btr1;
264         u32 is_config_mode;
265
266         /* Check whether Xilinx CAN is in configuration mode.
267          * It cannot set bit timing if Xilinx CAN is not in configuration mode.
268          */
269         is_config_mode = priv->read_reg(priv, XCAN_SR_OFFSET) &
270                                 XCAN_SR_CONFIG_MASK;
271         if (!is_config_mode) {
272                 netdev_alert(ndev,
273                      "BUG! Cannot set bittiming - CAN is not in config mode\n");
274                 return -EPERM;
275         }
276
277         /* Setting Baud Rate prescalar value in BRPR Register */
278         btr0 = (bt->brp - 1);
279
280         /* Setting Time Segment 1 in BTR Register */
281         btr1 = (bt->prop_seg + bt->phase_seg1 - 1);
282
283         /* Setting Time Segment 2 in BTR Register */
284         btr1 |= (bt->phase_seg2 - 1) << XCAN_BTR_TS2_SHIFT;
285
286         /* Setting Synchronous jump width in BTR Register */
287         btr1 |= (bt->sjw - 1) << XCAN_BTR_SJW_SHIFT;
288
289         priv->write_reg(priv, XCAN_BRPR_OFFSET, btr0);
290         priv->write_reg(priv, XCAN_BTR_OFFSET, btr1);
291
292         netdev_dbg(ndev, "BRPR=0x%08x, BTR=0x%08x\n",
293                         priv->read_reg(priv, XCAN_BRPR_OFFSET),
294                         priv->read_reg(priv, XCAN_BTR_OFFSET));
295
296         return 0;
297 }
298
299 /**
300  * xcan_chip_start - This the drivers start routine
301  * @ndev:       Pointer to net_device structure
302  *
303  * This is the drivers start routine.
304  * Based on the State of the CAN device it puts
305  * the CAN device into a proper mode.
306  *
307  * Return: 0 on success and failure value on error
308  */
309 static int xcan_chip_start(struct net_device *ndev)
310 {
311         struct xcan_priv *priv = netdev_priv(ndev);
312         u32 reg_msr, reg_sr_mask;
313         int err;
314         unsigned long timeout;
315
316         /* Check if it is in reset mode */
317         err = set_reset_mode(ndev);
318         if (err < 0)
319                 return err;
320
321         err = xcan_set_bittiming(ndev);
322         if (err < 0)
323                 return err;
324
325         /* Enable interrupts */
326         priv->write_reg(priv, XCAN_IER_OFFSET, XCAN_INTR_ALL);
327
328         /* Check whether it is loopback mode or normal mode  */
329         if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
330                 reg_msr = XCAN_MSR_LBACK_MASK;
331                 reg_sr_mask = XCAN_SR_LBACK_MASK;
332         } else {
333                 reg_msr = 0x0;
334                 reg_sr_mask = XCAN_SR_NORMAL_MASK;
335         }
336
337         priv->write_reg(priv, XCAN_MSR_OFFSET, reg_msr);
338         priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_CEN_MASK);
339
340         timeout = jiffies + XCAN_TIMEOUT;
341         while (!(priv->read_reg(priv, XCAN_SR_OFFSET) & reg_sr_mask)) {
342                 if (time_after(jiffies, timeout)) {
343                         netdev_warn(ndev,
344                                 "timed out for correct mode\n");
345                         return -ETIMEDOUT;
346                 }
347         }
348         netdev_dbg(ndev, "status:#x%08x\n",
349                         priv->read_reg(priv, XCAN_SR_OFFSET));
350
351         priv->can.state = CAN_STATE_ERROR_ACTIVE;
352         return 0;
353 }
354
355 /**
356  * xcan_do_set_mode - This sets the mode of the driver
357  * @ndev:       Pointer to net_device structure
358  * @mode:       Tells the mode of the driver
359  *
360  * This check the drivers state and calls the
361  * the corresponding modes to set.
362  *
363  * Return: 0 on success and failure value on error
364  */
365 static int xcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
366 {
367         int ret;
368
369         switch (mode) {
370         case CAN_MODE_START:
371                 ret = xcan_chip_start(ndev);
372                 if (ret < 0) {
373                         netdev_err(ndev, "xcan_chip_start failed!\n");
374                         return ret;
375                 }
376                 netif_wake_queue(ndev);
377                 break;
378         default:
379                 ret = -EOPNOTSUPP;
380                 break;
381         }
382
383         return ret;
384 }
385
386 /**
387  * xcan_start_xmit - Starts the transmission
388  * @skb:        sk_buff pointer that contains data to be Txed
389  * @ndev:       Pointer to net_device structure
390  *
391  * This function is invoked from upper layers to initiate transmission. This
392  * function uses the next available free txbuff and populates their fields to
393  * start the transmission.
394  *
395  * Return: 0 on success and failure value on error
396  */
397 static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
398 {
399         struct xcan_priv *priv = netdev_priv(ndev);
400         struct net_device_stats *stats = &ndev->stats;
401         struct can_frame *cf = (struct can_frame *)skb->data;
402         u32 id, dlc, data[2] = {0, 0};
403
404         if (can_dropped_invalid_skb(ndev, skb))
405                 return NETDEV_TX_OK;
406
407         /* Check if the TX buffer is full */
408         if (unlikely(priv->read_reg(priv, XCAN_SR_OFFSET) &
409                         XCAN_SR_TXFLL_MASK)) {
410                 netif_stop_queue(ndev);
411                 netdev_err(ndev, "BUG!, TX FIFO full when queue awake!\n");
412                 return NETDEV_TX_BUSY;
413         }
414
415         /* Watch carefully on the bit sequence */
416         if (cf->can_id & CAN_EFF_FLAG) {
417                 /* Extended CAN ID format */
418                 id = ((cf->can_id & CAN_EFF_MASK) << XCAN_IDR_ID2_SHIFT) &
419                         XCAN_IDR_ID2_MASK;
420                 id |= (((cf->can_id & CAN_EFF_MASK) >>
421                         (CAN_EFF_ID_BITS-CAN_SFF_ID_BITS)) <<
422                         XCAN_IDR_ID1_SHIFT) & XCAN_IDR_ID1_MASK;
423
424                 /* The substibute remote TX request bit should be "1"
425                  * for extended frames as in the Xilinx CAN datasheet
426                  */
427                 id |= XCAN_IDR_IDE_MASK | XCAN_IDR_SRR_MASK;
428
429                 if (cf->can_id & CAN_RTR_FLAG)
430                         /* Extended frames remote TX request */
431                         id |= XCAN_IDR_RTR_MASK;
432         } else {
433                 /* Standard CAN ID format */
434                 id = ((cf->can_id & CAN_SFF_MASK) << XCAN_IDR_ID1_SHIFT) &
435                         XCAN_IDR_ID1_MASK;
436
437                 if (cf->can_id & CAN_RTR_FLAG)
438                         /* Standard frames remote TX request */
439                         id |= XCAN_IDR_SRR_MASK;
440         }
441
442         dlc = cf->can_dlc << XCAN_DLCR_DLC_SHIFT;
443
444         if (cf->can_dlc > 0)
445                 data[0] = be32_to_cpup((__be32 *)(cf->data + 0));
446         if (cf->can_dlc > 4)
447                 data[1] = be32_to_cpup((__be32 *)(cf->data + 4));
448
449         can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max);
450         priv->tx_head++;
451
452         /* Write the Frame to Xilinx CAN TX FIFO */
453         priv->write_reg(priv, XCAN_TXFIFO_ID_OFFSET, id);
454         /* If the CAN frame is RTR frame this write triggers tranmission */
455         priv->write_reg(priv, XCAN_TXFIFO_DLC_OFFSET, dlc);
456         if (!(cf->can_id & CAN_RTR_FLAG)) {
457                 priv->write_reg(priv, XCAN_TXFIFO_DW1_OFFSET, data[0]);
458                 /* If the CAN frame is Standard/Extended frame this
459                  * write triggers tranmission
460                  */
461                 priv->write_reg(priv, XCAN_TXFIFO_DW2_OFFSET, data[1]);
462                 stats->tx_bytes += cf->can_dlc;
463         }
464
465         /* Check if the TX buffer is full */
466         if ((priv->tx_head - priv->tx_tail) == priv->tx_max)
467                 netif_stop_queue(ndev);
468
469         return NETDEV_TX_OK;
470 }
471
472 /*
473         time reference:
474         - keep (ktime_t, hwts) pair as a reference
475         - on incoming packet
476                 now_time = get_ktime()
477                 assume now_time >= frame_time >= ref_time
478                 to_ns = (ts) -> ts*1e9 / bitrate
479                 rollover_ktime = to_ns(65536)
480                 tsdelta = (frame_ts - ref_ts) & 0xFFFF
481                 if now_ktime - ref_ktime < rollover_time
482                         frame_ktime = ref_time + to_ns(tsdelta)
483                 else
484                         nrollovers = floor((now_ktime - ref_ktime)/rollover_ktime)
485                         frame_ktime = ref_ktime + nrollovers * rollover_ktime + to_ns(tsdelta)
486                         if frame_ktime > now_ktime
487                                 frame_ktime -= rollover_ktime
488                 set reference point (ref_ktime, ref_ts) = (frame_ktime, frame_ts) ??? cummulative loss of precision ? meybe not
489 */
490
491 static ktime_t xcan_timestamp2ktime(struct xcan_priv *priv, u16 ts, struct net_device *netdev)
492 {
493         u32 bitrate = priv->can.bittiming.bitrate; // TODO: I once saw a function for this ...
494         struct xcan_timepoint *ref = &priv->ref_timepoint;
495         ktime_t now_ktime = ktime_get();
496         ktime_t frame_ktime;
497         int corr = 0;
498
499         if (ktime_equal(ref->ktime, ns_to_ktime(0))) {
500                 netdev_dbg(netdev, "TS: settings reference %hu = %llu; bitrate = %u", ts, ktime_to_ns(now_ktime), bitrate);
501                 ref->ktime = now_ktime;
502                 ref->ts = ts;
503                 frame_ktime = now_ktime;
504         } else {
505                 u16 tsdelta = (ts - ref->ts) & 0xFFFF;
506 #define TS2NS(ts) ({ u64 tmp = (ts) * (u64)1000000000; do_div(tmp, bitrate); tmp; })
507                 s64 rollover_ns = TS2NS(65536);
508                 ktime_t nowdelta = ktime_sub(now_ktime, ref->ktime);
509                 u32 nrollovers = ktime_divns(nowdelta, rollover_ns);
510                 
511                 //netdev_dbg(netdev, "TS: rollover_ns = %lld, tsdelta = %hu, nowdelta = %llu, nrollovers = %u",
512                 //           rollover_ns, tsdelta, ktime_to_ns(nowdelta), nrollovers);
513                 frame_ktime = ktime_add_ns(ref->ktime, nrollovers * rollover_ns + TS2NS(tsdelta));
514                 if (ktime_after(frame_ktime, now_ktime)) {
515                         frame_ktime = ktime_sub_ns(frame_ktime, rollover_ns);
516                         corr = 1;
517                 }
518                 netdev_dbg(netdev, "TS: now_ktime - frame_ktime = %lld%s", ktime_to_ns(ktime_sub(now_ktime, frame_ktime)), corr ? ", corr" : "");
519 #undef TS2NS
520         }
521         return frame_ktime;
522 }
523
524 static u16 xcan_get_timestamp(u32 dlc)
525 {
526         // TODO: endianity conversion?
527         return dlc & 0xFFFF;
528 }
529
530
531 /**
532  * xcan_rx -  Is called from CAN isr to complete the received
533  *              frame  processing
534  * @ndev:       Pointer to net_device structure
535  *
536  * This function is invoked from the CAN isr(poll) to process the Rx frames. It
537  * does minimal processing and invokes "netif_receive_skb" to complete further
538  * processing.
539  * Return: 1 on success and 0 on failure.
540  */
541 static int xcan_rx(struct net_device *ndev)
542 {
543         struct xcan_priv *priv = netdev_priv(ndev);
544         struct net_device_stats *stats = &ndev->stats;
545         struct can_frame *cf;
546         struct sk_buff *skb;
547         struct skb_shared_hwtstamps *hwts;
548         u32 id_xcan, dlc_reg, dlc, rawts, data[2] = {0, 0};
549         ktime_t ts;
550
551         skb = alloc_can_skb(ndev, &cf);
552         if (unlikely(!skb)) {
553                 stats->rx_dropped++;
554                 return 0;
555         }
556
557         /* Read a frame from Xilinx zynq CANPS */
558         id_xcan = priv->read_reg(priv, XCAN_RXFIFO_ID_OFFSET);
559         dlc_reg = priv->read_reg(priv, XCAN_RXFIFO_DLC_OFFSET);
560         dlc = dlc_reg >> XCAN_DLCR_DLC_SHIFT;
561
562         /* Change Xilinx CAN data length format to socketCAN data format */
563         cf->can_dlc = get_can_dlc(dlc);
564
565         /* Capture HW timestamp. TODO: only if requested? */
566         hwts = skb_hwtstamps(skb);
567         memset(hwts, 0, sizeof(*hwts));
568         rawts = le32_to_cpu(xcan_get_timestamp(dlc_reg));
569         ts = xcan_timestamp2ktime(priv, rawts, ndev);
570         hwts->hwtstamp = ts;
571         netdev_dbg(ndev, "Frame timestamp: dlc 0x%08x, raw 0x%04hx = %hu, transformed %lld ns",
572                            dlc_reg, rawts, rawts, ktime_to_ns(ts));
573
574         /* Change Xilinx CAN ID format to socketCAN ID format */
575         if (id_xcan & XCAN_IDR_IDE_MASK) {
576                 /* The received frame is an Extended format frame */
577                 cf->can_id = (id_xcan & XCAN_IDR_ID1_MASK) >> 3;
578                 cf->can_id |= (id_xcan & XCAN_IDR_ID2_MASK) >>
579                                 XCAN_IDR_ID2_SHIFT;
580                 cf->can_id |= CAN_EFF_FLAG;
581                 if (id_xcan & XCAN_IDR_RTR_MASK)
582                         cf->can_id |= CAN_RTR_FLAG;
583         } else {
584                 /* The received frame is a standard format frame */
585                 cf->can_id = (id_xcan & XCAN_IDR_ID1_MASK) >>
586                                 XCAN_IDR_ID1_SHIFT;
587                 if (id_xcan & XCAN_IDR_SRR_MASK)
588                         cf->can_id |= CAN_RTR_FLAG;
589         }
590
591         /* DW1/DW2 must always be read to remove message from RXFIFO */
592         data[0] = priv->read_reg(priv, XCAN_RXFIFO_DW1_OFFSET);
593         data[1] = priv->read_reg(priv, XCAN_RXFIFO_DW2_OFFSET);
594
595         if (!(cf->can_id & CAN_RTR_FLAG)) {
596                 /* Change Xilinx CAN data format to socketCAN data format */
597                 if (cf->can_dlc > 0)
598                         *(__be32 *)(cf->data) = cpu_to_be32(data[0]);
599                 if (cf->can_dlc > 4)
600                         *(__be32 *)(cf->data + 4) = cpu_to_be32(data[1]);
601         }
602
603         stats->rx_bytes += cf->can_dlc;
604         stats->rx_packets++;
605         netif_receive_skb(skb);
606
607         return 1;
608 }
609
610 /**
611  * xcan_err_interrupt - error frame Isr
612  * @ndev:       net_device pointer
613  * @isr:        interrupt status register value
614  *
615  * This is the CAN error interrupt and it will
616  * check the the type of error and forward the error
617  * frame to upper layers.
618  */
619 static void xcan_err_interrupt(struct net_device *ndev, u32 isr)
620 {
621         struct xcan_priv *priv = netdev_priv(ndev);
622         struct net_device_stats *stats = &ndev->stats;
623         struct can_frame *cf;
624         struct sk_buff *skb;
625         u32 err_status, status, txerr = 0, rxerr = 0;
626
627         skb = alloc_can_err_skb(ndev, &cf);
628
629         err_status = priv->read_reg(priv, XCAN_ESR_OFFSET);
630         priv->write_reg(priv, XCAN_ESR_OFFSET, err_status);
631         txerr = priv->read_reg(priv, XCAN_ECR_OFFSET) & XCAN_ECR_TEC_MASK;
632         rxerr = ((priv->read_reg(priv, XCAN_ECR_OFFSET) &
633                         XCAN_ECR_REC_MASK) >> XCAN_ESR_REC_SHIFT);
634         status = priv->read_reg(priv, XCAN_SR_OFFSET);
635
636         if (isr & XCAN_IXR_BSOFF_MASK) {
637                 priv->can.state = CAN_STATE_BUS_OFF;
638                 priv->can.can_stats.bus_off++;
639                 /* Leave device in Config Mode in bus-off state */
640                 priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
641                 can_bus_off(ndev);
642                 if (skb)
643                         cf->can_id |= CAN_ERR_BUSOFF;
644         } else if ((status & XCAN_SR_ESTAT_MASK) == XCAN_SR_ESTAT_MASK) {
645                 priv->can.state = CAN_STATE_ERROR_PASSIVE;
646                 priv->can.can_stats.error_passive++;
647                 if (skb) {
648                         cf->can_id |= CAN_ERR_CRTL;
649                         cf->data[1] = (rxerr > 127) ?
650                                         CAN_ERR_CRTL_RX_PASSIVE :
651                                         CAN_ERR_CRTL_TX_PASSIVE;
652                         cf->data[6] = txerr;
653                         cf->data[7] = rxerr;
654                 }
655         } else if (status & XCAN_SR_ERRWRN_MASK) {
656                 priv->can.state = CAN_STATE_ERROR_WARNING;
657                 priv->can.can_stats.error_warning++;
658                 if (skb) {
659                         cf->can_id |= CAN_ERR_CRTL;
660                         cf->data[1] |= (txerr > rxerr) ?
661                                         CAN_ERR_CRTL_TX_WARNING :
662                                         CAN_ERR_CRTL_RX_WARNING;
663                         cf->data[6] = txerr;
664                         cf->data[7] = rxerr;
665                 }
666         }
667
668         /* Check for Arbitration lost interrupt */
669         if (isr & XCAN_IXR_ARBLST_MASK) {
670                 priv->can.can_stats.arbitration_lost++;
671                 if (skb) {
672                         cf->can_id |= CAN_ERR_LOSTARB;
673                         cf->data[0] = CAN_ERR_LOSTARB_UNSPEC;
674                 }
675         }
676
677         /* Check for RX FIFO Overflow interrupt */
678         if (isr & XCAN_IXR_RXOFLW_MASK) {
679                 stats->rx_over_errors++;
680                 stats->rx_errors++;
681                 priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
682                 if (skb) {
683                         cf->can_id |= CAN_ERR_CRTL;
684                         cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
685                 }
686         }
687
688         /* Check for error interrupt */
689         if (isr & XCAN_IXR_ERROR_MASK) {
690                 if (skb)
691                         cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
692
693                 /* Check for Ack error interrupt */
694                 if (err_status & XCAN_ESR_ACKER_MASK) {
695                         stats->tx_errors++;
696                         if (skb) {
697                                 cf->can_id |= CAN_ERR_ACK;
698                                 cf->data[3] = CAN_ERR_PROT_LOC_ACK;
699                         }
700                 }
701
702                 /* Check for Bit error interrupt */
703                 if (err_status & XCAN_ESR_BERR_MASK) {
704                         stats->tx_errors++;
705                         if (skb) {
706                                 cf->can_id |= CAN_ERR_PROT;
707                                 cf->data[2] = CAN_ERR_PROT_BIT;
708                         }
709                 }
710
711                 /* Check for Stuff error interrupt */
712                 if (err_status & XCAN_ESR_STER_MASK) {
713                         stats->rx_errors++;
714                         if (skb) {
715                                 cf->can_id |= CAN_ERR_PROT;
716                                 cf->data[2] = CAN_ERR_PROT_STUFF;
717                         }
718                 }
719
720                 /* Check for Form error interrupt */
721                 if (err_status & XCAN_ESR_FMER_MASK) {
722                         stats->rx_errors++;
723                         if (skb) {
724                                 cf->can_id |= CAN_ERR_PROT;
725                                 cf->data[2] = CAN_ERR_PROT_FORM;
726                         }
727                 }
728
729                 /* Check for CRC error interrupt */
730                 if (err_status & XCAN_ESR_CRCER_MASK) {
731                         stats->rx_errors++;
732                         if (skb) {
733                                 cf->can_id |= CAN_ERR_PROT;
734                                 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
735                         }
736                 }
737                         priv->can.can_stats.bus_error++;
738         }
739
740         if (skb) {
741                 stats->rx_packets++;
742                 stats->rx_bytes += cf->can_dlc;
743                 netif_rx(skb);
744         }
745
746         netdev_dbg(ndev, "%s: error status register:0x%x\n",
747                         __func__, priv->read_reg(priv, XCAN_ESR_OFFSET));
748 }
749
750 /**
751  * xcan_state_interrupt - It will check the state of the CAN device
752  * @ndev:       net_device pointer
753  * @isr:        interrupt status register value
754  *
755  * This will checks the state of the CAN device
756  * and puts the device into appropriate state.
757  */
758 static void xcan_state_interrupt(struct net_device *ndev, u32 isr)
759 {
760         struct xcan_priv *priv = netdev_priv(ndev);
761
762         /* Check for Sleep interrupt if set put CAN device in sleep state */
763         if (isr & XCAN_IXR_SLP_MASK)
764                 priv->can.state = CAN_STATE_SLEEPING;
765
766         /* Check for Wake up interrupt if set put CAN device in Active state */
767         if (isr & XCAN_IXR_WKUP_MASK)
768                 priv->can.state = CAN_STATE_ERROR_ACTIVE;
769 }
770
771 /**
772  * xcan_rx_poll - Poll routine for rx packets (NAPI)
773  * @napi:       napi structure pointer
774  * @quota:      Max number of rx packets to be processed.
775  *
776  * This is the poll routine for rx part.
777  * It will process the packets maximux quota value.
778  *
779  * Return: number of packets received
780  */
781 static int xcan_rx_poll(struct napi_struct *napi, int quota)
782 {
783         struct net_device *ndev = napi->dev;
784         struct xcan_priv *priv = netdev_priv(ndev);
785         u32 isr, ier;
786         int work_done = 0;
787
788         isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
789         while ((isr & XCAN_IXR_RXNEMP_MASK) && (work_done < quota)) {
790                 if (isr & XCAN_IXR_RXOK_MASK) {
791                         priv->write_reg(priv, XCAN_ICR_OFFSET,
792                                 XCAN_IXR_RXOK_MASK);
793                         work_done += xcan_rx(ndev);
794                 } else {
795                         priv->write_reg(priv, XCAN_ICR_OFFSET,
796                                 XCAN_IXR_RXNEMP_MASK);
797                         break;
798                 }
799                 priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_RXNEMP_MASK);
800                 isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
801         }
802
803         if (work_done)
804                 can_led_event(ndev, CAN_LED_EVENT_RX);
805
806         if (work_done < quota) {
807                 napi_complete(napi);
808                 ier = priv->read_reg(priv, XCAN_IER_OFFSET);
809                 ier |= (XCAN_IXR_RXOK_MASK | XCAN_IXR_RXNEMP_MASK);
810                 priv->write_reg(priv, XCAN_IER_OFFSET, ier);
811         }
812         return work_done;
813 }
814
815 /**
816  * xcan_tx_interrupt - Tx Done Isr
817  * @ndev:       net_device pointer
818  * @isr:        Interrupt status register value
819  */
820 static void xcan_tx_interrupt(struct net_device *ndev, u32 isr)
821 {
822         struct xcan_priv *priv = netdev_priv(ndev);
823         struct net_device_stats *stats = &ndev->stats;
824
825         while ((priv->tx_head - priv->tx_tail > 0) &&
826                         (isr & XCAN_IXR_TXOK_MASK)) {
827                 priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_TXOK_MASK);
828                 can_get_echo_skb(ndev, priv->tx_tail %
829                                         priv->tx_max);
830                 priv->tx_tail++;
831                 stats->tx_packets++;
832                 isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
833         }
834         can_led_event(ndev, CAN_LED_EVENT_TX);
835         netif_wake_queue(ndev);
836 }
837
838 /**
839  * xcan_interrupt - CAN Isr
840  * @irq:        irq number
841  * @dev_id:     device id poniter
842  *
843  * This is the xilinx CAN Isr. It checks for the type of interrupt
844  * and invokes the corresponding ISR.
845  *
846  * Return:
847  * IRQ_NONE - If CAN device is in sleep mode, IRQ_HANDLED otherwise
848  */
849 static irqreturn_t xcan_interrupt(int irq, void *dev_id)
850 {
851         struct net_device *ndev = (struct net_device *)dev_id;
852         struct xcan_priv *priv = netdev_priv(ndev);
853         u32 isr, ier;
854
855         /* Get the interrupt status from Xilinx CAN */
856         isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
857         if (!isr)
858                 return IRQ_NONE;
859
860         /* Check for the type of interrupt and Processing it */
861         if (isr & (XCAN_IXR_SLP_MASK | XCAN_IXR_WKUP_MASK)) {
862                 priv->write_reg(priv, XCAN_ICR_OFFSET, (XCAN_IXR_SLP_MASK |
863                                 XCAN_IXR_WKUP_MASK));
864                 xcan_state_interrupt(ndev, isr);
865         }
866
867         /* Check for Tx interrupt and Processing it */
868         if (isr & XCAN_IXR_TXOK_MASK)
869                 xcan_tx_interrupt(ndev, isr);
870
871         /* Check for the type of error interrupt and Processing it */
872         if (isr & (XCAN_IXR_ERROR_MASK | XCAN_IXR_RXOFLW_MASK |
873                         XCAN_IXR_BSOFF_MASK | XCAN_IXR_ARBLST_MASK)) {
874                 priv->write_reg(priv, XCAN_ICR_OFFSET, (XCAN_IXR_ERROR_MASK |
875                                 XCAN_IXR_RXOFLW_MASK | XCAN_IXR_BSOFF_MASK |
876                                 XCAN_IXR_ARBLST_MASK));
877                 xcan_err_interrupt(ndev, isr);
878         }
879
880         /* Check for the type of receive interrupt and Processing it */
881         if (isr & (XCAN_IXR_RXNEMP_MASK | XCAN_IXR_RXOK_MASK)) {
882                 ier = priv->read_reg(priv, XCAN_IER_OFFSET);
883                 ier &= ~(XCAN_IXR_RXNEMP_MASK | XCAN_IXR_RXOK_MASK);
884                 priv->write_reg(priv, XCAN_IER_OFFSET, ier);
885                 napi_schedule(&priv->napi);
886         }
887         return IRQ_HANDLED;
888 }
889
890 /**
891  * xcan_chip_stop - Driver stop routine
892  * @ndev:       Pointer to net_device structure
893  *
894  * This is the drivers stop routine. It will disable the
895  * interrupts and put the device into configuration mode.
896  */
897 static void xcan_chip_stop(struct net_device *ndev)
898 {
899         struct xcan_priv *priv = netdev_priv(ndev);
900         u32 ier;
901
902         /* Disable interrupts and leave the can in configuration mode */
903         ier = priv->read_reg(priv, XCAN_IER_OFFSET);
904         ier &= ~XCAN_INTR_ALL;
905         priv->write_reg(priv, XCAN_IER_OFFSET, ier);
906         priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
907         priv->can.state = CAN_STATE_STOPPED;
908 }
909
910 /**
911  * xcan_open - Driver open routine
912  * @ndev:       Pointer to net_device structure
913  *
914  * This is the driver open routine.
915  * Return: 0 on success and failure value on error
916  */
917 static int xcan_open(struct net_device *ndev)
918 {
919         struct xcan_priv *priv = netdev_priv(ndev);
920         int ret;
921
922         ret = request_irq(ndev->irq, xcan_interrupt, priv->irq_flags,
923                         ndev->name, ndev);
924         if (ret < 0) {
925                 netdev_err(ndev, "irq allocation for CAN failed\n");
926                 goto err;
927         }
928
929         ret = clk_prepare_enable(priv->can_clk);
930         if (ret) {
931                 netdev_err(ndev, "unable to enable device clock\n");
932                 goto err_irq;
933         }
934
935         ret = clk_prepare_enable(priv->bus_clk);
936         if (ret) {
937                 netdev_err(ndev, "unable to enable bus clock\n");
938                 goto err_can_clk;
939         }
940
941         /* Set chip into reset mode */
942         ret = set_reset_mode(ndev);
943         if (ret < 0) {
944                 netdev_err(ndev, "mode resetting failed!\n");
945                 goto err_bus_clk;
946         }
947
948         /* Common open */
949         ret = open_candev(ndev);
950         if (ret)
951                 goto err_bus_clk;
952
953         ret = xcan_chip_start(ndev);
954         if (ret < 0) {
955                 netdev_err(ndev, "xcan_chip_start failed!\n");
956                 goto err_candev;
957         }
958
959         can_led_event(ndev, CAN_LED_EVENT_OPEN);
960         napi_enable(&priv->napi);
961         netif_start_queue(ndev);
962
963         return 0;
964
965 err_candev:
966         close_candev(ndev);
967 err_bus_clk:
968         clk_disable_unprepare(priv->bus_clk);
969 err_can_clk:
970         clk_disable_unprepare(priv->can_clk);
971 err_irq:
972         free_irq(ndev->irq, ndev);
973 err:
974         return ret;
975 }
976
977 /**
978  * xcan_close - Driver close routine
979  * @ndev:       Pointer to net_device structure
980  *
981  * Return: 0 always
982  */
983 static int xcan_close(struct net_device *ndev)
984 {
985         struct xcan_priv *priv = netdev_priv(ndev);
986
987         netif_stop_queue(ndev);
988         napi_disable(&priv->napi);
989         xcan_chip_stop(ndev);
990         clk_disable_unprepare(priv->bus_clk);
991         clk_disable_unprepare(priv->can_clk);
992         free_irq(ndev->irq, ndev);
993         close_candev(ndev);
994
995         can_led_event(ndev, CAN_LED_EVENT_STOP);
996
997         return 0;
998 }
999
1000 /**
1001  * xcan_get_berr_counter - error counter routine
1002  * @ndev:       Pointer to net_device structure
1003  * @bec:        Pointer to can_berr_counter structure
1004  *
1005  * This is the driver error counter routine.
1006  * Return: 0 on success and failure value on error
1007  */
1008 static int xcan_get_berr_counter(const struct net_device *ndev,
1009                                         struct can_berr_counter *bec)
1010 {
1011         struct xcan_priv *priv = netdev_priv(ndev);
1012         int ret;
1013
1014         ret = clk_prepare_enable(priv->can_clk);
1015         if (ret)
1016                 goto err;
1017
1018         ret = clk_prepare_enable(priv->bus_clk);
1019         if (ret)
1020                 goto err_clk;
1021
1022         bec->txerr = priv->read_reg(priv, XCAN_ECR_OFFSET) & XCAN_ECR_TEC_MASK;
1023         bec->rxerr = ((priv->read_reg(priv, XCAN_ECR_OFFSET) &
1024                         XCAN_ECR_REC_MASK) >> XCAN_ESR_REC_SHIFT);
1025
1026         clk_disable_unprepare(priv->bus_clk);
1027         clk_disable_unprepare(priv->can_clk);
1028
1029         return 0;
1030
1031 err_clk:
1032         clk_disable_unprepare(priv->can_clk);
1033 err:
1034         return ret;
1035 }
1036
1037 static int xcan_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
1038 {
1039         //struct xcan_priv *priv = netdev_priv(dev);
1040         struct hwtstamp_config cfg;
1041
1042         if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
1043                 return -EFAULT;
1044
1045         /* reserved for future extensions */
1046         if (cfg.flags)
1047                 return -EINVAL;
1048
1049         if (cfg.tx_type != HWTSTAMP_TX_OFF)
1050                 return -ERANGE;
1051
1052         switch (cfg.rx_filter) {
1053         case HWTSTAMP_FILTER_NONE:
1054                 //priv->rx_enable = 0;
1055                 break;
1056         case HWTSTAMP_FILTER_ALL:
1057         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
1058         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
1059         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
1060         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
1061         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
1062         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
1063         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
1064         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
1065         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
1066         case HWTSTAMP_FILTER_PTP_V2_EVENT:
1067         case HWTSTAMP_FILTER_PTP_V2_SYNC:
1068         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
1069                 //priv->rx_enable = 1;
1070                 cfg.rx_filter = HWTSTAMP_FILTER_ALL;
1071                 break;
1072         default:
1073                 return -ERANGE;
1074         }
1075
1076         return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
1077 }
1078
1079 static int xcan_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
1080 {
1081         //struct xcan_priv *priv = netdev_priv(dev);
1082         struct hwtstamp_config cfg;
1083
1084         cfg.flags = 0;
1085         cfg.tx_type = HWTSTAMP_TX_OFF;
1086         cfg.rx_filter = //(xcan->rx_enable ?
1087                          HWTSTAMP_FILTER_ALL;// : HWTSTAMP_FILTER_NONE);
1088
1089         return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
1090 }
1091
1092 static int xcan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1093 {
1094         switch(cmd)
1095         {
1096         case SIOCSHWTSTAMP:
1097                 return xcan_hwtstamp_set(dev, ifr);
1098         case SIOCGHWTSTAMP:
1099                 return xcan_hwtstamp_get(dev, ifr);
1100         default:
1101                 return -EOPNOTSUPP;
1102         }
1103 }
1104
1105 static const struct net_device_ops xcan_netdev_ops = {
1106         .ndo_open       = xcan_open,
1107         .ndo_stop       = xcan_close,
1108         .ndo_start_xmit = xcan_start_xmit,
1109         .ndo_change_mtu = can_change_mtu,
1110         .ndo_do_ioctl = xcan_ioctl,
1111 };
1112
1113 /**
1114  * xcan_suspend - Suspend method for the driver
1115  * @dev:        Address of the platform_device structure
1116  *
1117  * Put the driver into low power mode.
1118  * Return: 0 always
1119  */
1120 static int __maybe_unused xcan_suspend(struct device *dev)
1121 {
1122         struct platform_device *pdev = dev_get_drvdata(dev);
1123         struct net_device *ndev = platform_get_drvdata(pdev);
1124         struct xcan_priv *priv = netdev_priv(ndev);
1125
1126         if (netif_running(ndev)) {
1127                 netif_stop_queue(ndev);
1128                 netif_device_detach(ndev);
1129         }
1130
1131         priv->write_reg(priv, XCAN_MSR_OFFSET, XCAN_MSR_SLEEP_MASK);
1132         priv->can.state = CAN_STATE_SLEEPING;
1133
1134         clk_disable(priv->bus_clk);
1135         clk_disable(priv->can_clk);
1136
1137         return 0;
1138 }
1139
1140 /**
1141  * xcan_resume - Resume from suspend
1142  * @dev:        Address of the platformdevice structure
1143  *
1144  * Resume operation after suspend.
1145  * Return: 0 on success and failure value on error
1146  */
1147 static int __maybe_unused xcan_resume(struct device *dev)
1148 {
1149         struct platform_device *pdev = dev_get_drvdata(dev);
1150         struct net_device *ndev = platform_get_drvdata(pdev);
1151         struct xcan_priv *priv = netdev_priv(ndev);
1152         int ret;
1153
1154         ret = clk_enable(priv->bus_clk);
1155         if (ret) {
1156                 dev_err(dev, "Cannot enable clock.\n");
1157                 return ret;
1158         }
1159         ret = clk_enable(priv->can_clk);
1160         if (ret) {
1161                 dev_err(dev, "Cannot enable clock.\n");
1162                 clk_disable_unprepare(priv->bus_clk);
1163                 return ret;
1164         }
1165
1166         priv->write_reg(priv, XCAN_MSR_OFFSET, 0);
1167         priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_CEN_MASK);
1168         priv->can.state = CAN_STATE_ERROR_ACTIVE;
1169
1170         if (netif_running(ndev)) {
1171                 netif_device_attach(ndev);
1172                 netif_start_queue(ndev);
1173         }
1174
1175         return 0;
1176 }
1177
1178 static SIMPLE_DEV_PM_OPS(xcan_dev_pm_ops, xcan_suspend, xcan_resume);
1179
1180 /**
1181  * xcan_probe - Platform registration call
1182  * @pdev:       Handle to the platform device structure
1183  *
1184  * This function does all the memory allocation and registration for the CAN
1185  * device.
1186  *
1187  * Return: 0 on success and failure value on error
1188  */
1189 static int xcan_probe(struct platform_device *pdev)
1190 {
1191         struct resource *res; /* IO mem resources */
1192         struct net_device *ndev;
1193         struct xcan_priv *priv;
1194         void __iomem *addr;
1195         int ret, rx_max, tx_max;
1196
1197         /* Get the virtual base address for the device */
1198         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1199         addr = devm_ioremap_resource(&pdev->dev, res);
1200         if (IS_ERR(addr)) {
1201                 ret = PTR_ERR(addr);
1202                 goto err;
1203         }
1204
1205         ret = of_property_read_u32(pdev->dev.of_node, "tx-fifo-depth", &tx_max);
1206         if (ret < 0)
1207                 goto err;
1208
1209         ret = of_property_read_u32(pdev->dev.of_node, "rx-fifo-depth", &rx_max);
1210         if (ret < 0)
1211                 goto err;
1212
1213         /* Create a CAN device instance */
1214         ndev = alloc_candev(sizeof(struct xcan_priv), tx_max);
1215         if (!ndev)
1216                 return -ENOMEM;
1217
1218         priv = netdev_priv(ndev);
1219         priv->dev = ndev;
1220         priv->can.bittiming_const = &xcan_bittiming_const;
1221         priv->can.do_set_mode = xcan_do_set_mode;
1222         priv->can.do_get_berr_counter = xcan_get_berr_counter;
1223         priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
1224                                         CAN_CTRLMODE_BERR_REPORTING;
1225         priv->reg_base = addr;
1226         priv->tx_max = tx_max;
1227
1228         /* Get IRQ for the device */
1229         ndev->irq = platform_get_irq(pdev, 0);
1230         ndev->flags |= IFF_ECHO;        /* We support local echo */
1231
1232         platform_set_drvdata(pdev, ndev);
1233         SET_NETDEV_DEV(ndev, &pdev->dev);
1234         ndev->netdev_ops = &xcan_netdev_ops;
1235
1236         /* Getting the CAN can_clk info */
1237         priv->can_clk = devm_clk_get(&pdev->dev, "can_clk");
1238         if (IS_ERR(priv->can_clk)) {
1239                 dev_err(&pdev->dev, "Device clock not found.\n");
1240                 ret = PTR_ERR(priv->can_clk);
1241                 goto err_free;
1242         }
1243         /* Check for type of CAN device */
1244         if (of_device_is_compatible(pdev->dev.of_node,
1245                                     "xlnx,zynq-can-1.0")) {
1246                 priv->bus_clk = devm_clk_get(&pdev->dev, "pclk");
1247                 if (IS_ERR(priv->bus_clk)) {
1248                         dev_err(&pdev->dev, "bus clock not found\n");
1249                         ret = PTR_ERR(priv->bus_clk);
1250                         goto err_free;
1251                 }
1252         } else {
1253                 priv->bus_clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
1254                 if (IS_ERR(priv->bus_clk)) {
1255                         dev_err(&pdev->dev, "bus clock not found\n");
1256                         ret = PTR_ERR(priv->bus_clk);
1257                         goto err_free;
1258                 }
1259         }
1260
1261         ret = clk_prepare_enable(priv->can_clk);
1262         if (ret) {
1263                 dev_err(&pdev->dev, "unable to enable device clock\n");
1264                 goto err_free;
1265         }
1266
1267         ret = clk_prepare_enable(priv->bus_clk);
1268         if (ret) {
1269                 dev_err(&pdev->dev, "unable to enable bus clock\n");
1270                 goto err_unprepare_disable_dev;
1271         }
1272
1273         priv->write_reg = xcan_write_reg_le;
1274         priv->read_reg = xcan_read_reg_le;
1275
1276         if (priv->read_reg(priv, XCAN_SR_OFFSET) != XCAN_SR_CONFIG_MASK) {
1277                 priv->write_reg = xcan_write_reg_be;
1278                 priv->read_reg = xcan_read_reg_be;
1279         }
1280
1281         priv->can.clock.freq = clk_get_rate(priv->can_clk);
1282
1283         netif_napi_add(ndev, &priv->napi, xcan_rx_poll, rx_max);
1284
1285         ret = register_candev(ndev);
1286         if (ret) {
1287                 dev_err(&pdev->dev, "fail to register failed (err=%d)\n", ret);
1288                 goto err_unprepare_disable_busclk;
1289         }
1290
1291         devm_can_led_init(ndev);
1292         clk_disable_unprepare(priv->bus_clk);
1293         clk_disable_unprepare(priv->can_clk);
1294         netdev_dbg(ndev, "reg_base=0x%p irq=%d clock=%d, tx fifo depth:%d\n",
1295                         priv->reg_base, ndev->irq, priv->can.clock.freq,
1296                         priv->tx_max);
1297
1298         return 0;
1299
1300 err_unprepare_disable_busclk:
1301         clk_disable_unprepare(priv->bus_clk);
1302 err_unprepare_disable_dev:
1303         clk_disable_unprepare(priv->can_clk);
1304 err_free:
1305         free_candev(ndev);
1306 err:
1307         return ret;
1308 }
1309
1310 /**
1311  * xcan_remove - Unregister the device after releasing the resources
1312  * @pdev:       Handle to the platform device structure
1313  *
1314  * This function frees all the resources allocated to the device.
1315  * Return: 0 always
1316  */
1317 static int xcan_remove(struct platform_device *pdev)
1318 {
1319         struct net_device *ndev = platform_get_drvdata(pdev);
1320         struct xcan_priv *priv = netdev_priv(ndev);
1321
1322         if (set_reset_mode(ndev) < 0)
1323                 netdev_err(ndev, "mode resetting failed!\n");
1324
1325         unregister_candev(ndev);
1326         netif_napi_del(&priv->napi);
1327         free_candev(ndev);
1328
1329         return 0;
1330 }
1331
1332 /* Match table for OF platform binding */
1333 static const struct of_device_id xcan_of_match[] = {
1334         { .compatible = "xlnx,zynq-can-1.0", },
1335         { .compatible = "xlnx,axi-can-1.00.a", },
1336         { /* end of list */ },
1337 };
1338 MODULE_DEVICE_TABLE(of, xcan_of_match);
1339
1340 static struct platform_driver xcan_driver = {
1341         .probe = xcan_probe,
1342         .remove = xcan_remove,
1343         .driver = {
1344                 .name = DRIVER_NAME,
1345                 .pm = &xcan_dev_pm_ops,
1346                 .of_match_table = xcan_of_match,
1347         },
1348 };
1349
1350 module_platform_driver(xcan_driver);
1351
1352 MODULE_LICENSE("GPL");
1353 MODULE_AUTHOR("Xilinx Inc");
1354 MODULE_DESCRIPTION("Xilinx CAN interface");