xref: /OK3568_Linux_fs/kernel/drivers/net/can/rockchip/rockchip_canfd.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4  * Rockchip CANFD driver
5  */
6 
7 #include <linux/delay.h>
8 #include <linux/iopoll.h>
9 #include <linux/pinctrl/consumer.h>
10 #include <linux/clk.h>
11 #include <linux/errno.h>
12 #include <linux/init.h>
13 #include <linux/interrupt.h>
14 #include <linux/io.h>
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/netdevice.h>
18 #include <linux/of.h>
19 #include <linux/of_device.h>
20 #include <linux/platform_device.h>
21 #include <linux/skbuff.h>
22 #include <linux/spinlock.h>
23 #include <linux/string.h>
24 #include <linux/types.h>
25 #include <linux/can/dev.h>
26 #include <linux/can/error.h>
27 #include <linux/can/led.h>
28 #include <linux/reset.h>
29 #include <linux/pm_runtime.h>
30 
31 /* registers definition */
32 enum rockchip_canfd_reg {
33 	CAN_MODE = 0x00,
34 	CAN_CMD = 0x04,
35 	CAN_STATE = 0x08,
36 	CAN_INT = 0x0c,
37 	CAN_INT_MASK = 0x10,
38 	CAN_LOSTARB_CODE = 0x28,
39 	CAN_ERR_CODE = 0x2c,
40 	CAN_RX_ERR_CNT = 0x34,
41 	CAN_TX_ERR_CNT = 0x38,
42 	CAN_IDCODE = 0x3c,
43 	CAN_IDMASK = 0x40,
44 	CAN_TX_CHECK_FIC = 0x50,
45 	CAN_NBTP = 0x100,
46 	CAN_DBTP = 0x104,
47 	CAN_TDCR = 0x108,
48 	CAN_TSCC = 0x10c,
49 	CAN_TSCV = 0x110,
50 	CAN_TXEFC = 0x114,
51 	CAN_RXFC = 0x118,
52 	CAN_AFC = 0x11c,
53 	CAN_IDCODE0 = 0x120,
54 	CAN_IDMASK0 = 0x124,
55 	CAN_IDCODE1 = 0x128,
56 	CAN_IDMASK1 = 0x12c,
57 	CAN_IDCODE2 = 0x130,
58 	CAN_IDMASK2 = 0x134,
59 	CAN_IDCODE3 = 0x138,
60 	CAN_IDMASK3 = 0x13c,
61 	CAN_IDCODE4 = 0x140,
62 	CAN_IDMASK4 = 0x144,
63 	CAN_TXFIC = 0x200,
64 	CAN_TXID = 0x204,
65 	CAN_TXDAT0 = 0x208,
66 	CAN_TXDAT1 = 0x20c,
67 	CAN_TXDAT2 = 0x210,
68 	CAN_TXDAT3 = 0x214,
69 	CAN_TXDAT4 = 0x218,
70 	CAN_TXDAT5 = 0x21c,
71 	CAN_TXDAT6 = 0x220,
72 	CAN_TXDAT7 = 0x224,
73 	CAN_TXDAT8 = 0x228,
74 	CAN_TXDAT9 = 0x22c,
75 	CAN_TXDAT10 = 0x230,
76 	CAN_TXDAT11 = 0x234,
77 	CAN_TXDAT12 = 0x238,
78 	CAN_TXDAT13 = 0x23c,
79 	CAN_TXDAT14 = 0x240,
80 	CAN_TXDAT15 = 0x244,
81 	CAN_RXFIC = 0x300,
82 	CAN_RXID = 0x304,
83 	CAN_RXTS = 0x308,
84 	CAN_RXDAT0 = 0x30c,
85 	CAN_RXDAT1 = 0x310,
86 	CAN_RXDAT2 = 0x314,
87 	CAN_RXDAT3 = 0x318,
88 	CAN_RXDAT4 = 0x31c,
89 	CAN_RXDAT5 = 0x320,
90 	CAN_RXDAT6 = 0x324,
91 	CAN_RXDAT7 = 0x328,
92 	CAN_RXDAT8 = 0x32c,
93 	CAN_RXDAT9 = 0x330,
94 	CAN_RXDAT10 = 0x334,
95 	CAN_RXDAT11 = 0x338,
96 	CAN_RXDAT12 = 0x33c,
97 	CAN_RXDAT13 = 0x340,
98 	CAN_RXDAT14 = 0x344,
99 	CAN_RXDAT15 = 0x348,
100 	CAN_RXFRD = 0x400,
101 	CAN_TXEFRD = 0x500,
102 };
103 
104 enum {
105 	ROCKCHIP_CANFD_MODE = 0,
106 	ROCKCHIP_CAN_MODE,
107 	ROCKCHIP_RK3568_CAN_MODE,
108 };
109 
110 #define DATE_LENGTH_12_BYTE	(0x9)
111 #define DATE_LENGTH_16_BYTE	(0xa)
112 #define DATE_LENGTH_20_BYTE	(0xb)
113 #define DATE_LENGTH_24_BYTE	(0xc)
114 #define DATE_LENGTH_32_BYTE	(0xd)
115 #define DATE_LENGTH_48_BYTE	(0xe)
116 #define DATE_LENGTH_64_BYTE	(0xf)
117 
118 #define CAN_TX0_REQ		BIT(0)
119 #define CAN_TX1_REQ		BIT(1)
120 #define CAN_TX_REQ_FULL		((CAN_TX0_REQ) | (CAN_TX1_REQ))
121 
122 #define MODE_FDOE		BIT(15)
123 #define MODE_BRSD		BIT(13)
124 #define MODE_SPACE_RX		BIT(12)
125 #define MODE_AUTO_RETX		BIT(10)
126 #define MODE_RXSORT		BIT(7)
127 #define MODE_TXORDER		BIT(6)
128 #define MODE_RXSTX		BIT(5)
129 #define MODE_LBACK		BIT(4)
130 #define MODE_SILENT		BIT(3)
131 #define MODE_SELF_TEST		BIT(2)
132 #define MODE_SLEEP		BIT(1)
133 #define RESET_MODE		0
134 #define WORK_MODE		BIT(0)
135 
136 #define RX_FINISH_INT		BIT(0)
137 #define TX_FINISH_INT		BIT(1)
138 #define ERR_WARN_INT		BIT(2)
139 #define RX_BUF_OV_INT		BIT(3)
140 #define PASSIVE_ERR_INT		BIT(4)
141 #define TX_LOSTARB_INT		BIT(5)
142 #define BUS_ERR_INT		BIT(6)
143 #define RX_FIFO_FULL_INT	BIT(7)
144 #define RX_FIFO_OV_INT		BIT(8)
145 #define BUS_OFF_INT		BIT(9)
146 #define BUS_OFF_RECOVERY_INT	BIT(10)
147 #define TSC_OV_INT		BIT(11)
148 #define TXE_FIFO_OV_INT		BIT(12)
149 #define TXE_FIFO_FULL_INT	BIT(13)
150 #define WAKEUP_INT		BIT(14)
151 
152 #define ERR_TYPE_MASK		GENMASK(28, 26)
153 #define ERR_TYPE_SHIFT		26
154 #define BIT_ERR			0
155 #define STUFF_ERR		1
156 #define FORM_ERR		2
157 #define ACK_ERR			3
158 #define CRC_ERR			4
159 #define ERR_DIR_RX		BIT(25)
160 #define ERR_LOC_MASK		GENMASK(15, 0)
161 
162 /* Nominal Bit Timing & Prescaler Register (NBTP) */
163 #define NBTP_MODE_3_SAMPLES	BIT(31)
164 #define NBTP_NSJW_SHIFT		24
165 #define NBTP_NSJW_MASK		(0x7f << NBTP_NSJW_SHIFT)
166 #define NBTP_NBRP_SHIFT		16
167 #define NBTP_NBRP_MASK		(0xff << NBTP_NBRP_SHIFT)
168 #define NBTP_NTSEG2_SHIFT	8
169 #define NBTP_NTSEG2_MASK	(0x7f << NBTP_NTSEG2_SHIFT)
170 #define NBTP_NTSEG1_SHIFT	0
171 #define NBTP_NTSEG1_MASK	(0x7f << NBTP_NTSEG1_SHIFT)
172 
173 /* Data Bit Timing & Prescaler Register (DBTP) */
174 #define DBTP_MODE_3_SAMPLES	BIT(21)
175 #define DBTP_DSJW_SHIFT		17
176 #define DBTP_DSJW_MASK		(0xf << DBTP_DSJW_SHIFT)
177 #define DBTP_DBRP_SHIFT		9
178 #define DBTP_DBRP_MASK		(0xff << DBTP_DBRP_SHIFT)
179 #define DBTP_DTSEG2_SHIFT	5
180 #define DBTP_DTSEG2_MASK	(0xf << DBTP_DTSEG2_SHIFT)
181 #define DBTP_DTSEG1_SHIFT	0
182 #define DBTP_DTSEG1_MASK	(0x1f << DBTP_DTSEG1_SHIFT)
183 
184 /* Transmitter Delay Compensation Register (TDCR) */
185 #define TDCR_TDCO_SHIFT		1
186 #define TDCR_TDCO_MASK		(0x3f << TDCR_TDCO_SHIFT)
187 #define TDCR_TDC_ENABLE		BIT(0)
188 
189 #define TX_FD_ENABLE		BIT(5)
190 #define TX_FD_BRS_ENABLE	BIT(4)
191 
192 #define FIFO_ENABLE		BIT(0)
193 #define RX_FIFO_CNT0_SHIFT	4
194 #define RX_FIFO_CNT0_MASK	(0x7 << RX_FIFO_CNT0_SHIFT)
195 #define RX_FIFO_CNT1_SHIFT	5
196 #define RX_FIFO_CNT1_MASK	(0x7 << RX_FIFO_CNT1_SHIFT)
197 
198 #define FORMAT_SHIFT		7
199 #define FORMAT_MASK		(0x1 << FORMAT_SHIFT)
200 #define RTR_SHIFT		6
201 #define RTR_MASK		(0x1 << RTR_SHIFT)
202 #define FDF_SHIFT		5
203 #define FDF_MASK		(0x1 << FDF_SHIFT)
204 #define BRS_SHIFT		4
205 #define BRS_MASK		(0x1 << BRS_SHIFT)
206 #define DLC_SHIFT		0
207 #define DLC_MASK		(0xF << DLC_SHIFT)
208 
209 #define CAN_RF_SIZE		0x48
210 #define CAN_TEF_SIZE		0x8
211 #define CAN_TXEFRD_OFFSET(n)	(CAN_TXEFRD + CAN_TEF_SIZE * (n))
212 #define CAN_RXFRD_OFFSET(n)	(CAN_RXFRD + CAN_RF_SIZE * (n))
213 
214 #define CAN_RX_FILTER_MASK	0x1fffffff
215 
216 #define DRV_NAME	"rockchip_canfd"
217 
218 /* rockchip_canfd private data structure */
219 
220 struct rockchip_canfd {
221 	struct can_priv can;
222 	struct device *dev;
223 	struct clk_bulk_data *clks;
224 	int num_clks;
225 	struct reset_control *reset;
226 	void __iomem *base;
227 	u32 irqstatus;
228 	unsigned long mode;
229 	int rx_fifo_shift;
230 	u32 rx_fifo_mask;
231 	bool txtorx;
232 	u32 tx_invalid[4];
233 	struct delayed_work tx_err_work;
234 };
235 
rockchip_canfd_read(const struct rockchip_canfd * priv,enum rockchip_canfd_reg reg)236 static inline u32 rockchip_canfd_read(const struct rockchip_canfd *priv,
237 				      enum rockchip_canfd_reg reg)
238 {
239 	return readl(priv->base + reg);
240 }
241 
rockchip_canfd_write(const struct rockchip_canfd * priv,enum rockchip_canfd_reg reg,u32 val)242 static inline void rockchip_canfd_write(const struct rockchip_canfd *priv,
243 					enum rockchip_canfd_reg reg, u32 val)
244 {
245 	writel(val, priv->base + reg);
246 }
247 
248 static const struct can_bittiming_const rockchip_canfd_bittiming_const = {
249 	.name = DRV_NAME,
250 	.tseg1_min = 1,
251 	.tseg1_max = 128,
252 	.tseg2_min = 1,
253 	.tseg2_max = 128,
254 	.sjw_max = 128,
255 	.brp_min = 1,
256 	.brp_max = 256,
257 	.brp_inc = 2,
258 };
259 
260 static const struct can_bittiming_const rockchip_canfd_data_bittiming_const = {
261 	.name = DRV_NAME,
262 	.tseg1_min = 1,
263 	.tseg1_max = 32,
264 	.tseg2_min = 1,
265 	.tseg2_max = 16,
266 	.sjw_max = 16,
267 	.brp_min = 1,
268 	.brp_max = 256,
269 	.brp_inc = 2,
270 };
271 
set_reset_mode(struct net_device * ndev)272 static int set_reset_mode(struct net_device *ndev)
273 {
274 	struct rockchip_canfd *rcan = netdev_priv(ndev);
275 
276 	reset_control_assert(rcan->reset);
277 	udelay(2);
278 	reset_control_deassert(rcan->reset);
279 
280 	rockchip_canfd_write(rcan, CAN_MODE, 0);
281 
282 	netdev_dbg(ndev, "%s MODE=0x%08x\n", __func__,
283 		   rockchip_canfd_read(rcan, CAN_MODE));
284 
285 	return 0;
286 }
287 
set_normal_mode(struct net_device * ndev)288 static int set_normal_mode(struct net_device *ndev)
289 {
290 	struct rockchip_canfd *rcan = netdev_priv(ndev);
291 	u32 val;
292 
293 	val = rockchip_canfd_read(rcan, CAN_MODE);
294 	val |= WORK_MODE;
295 	if (rcan->mode >= ROCKCHIP_CAN_MODE && rcan->txtorx)
296 		val |= MODE_RXSTX;
297 	rockchip_canfd_write(rcan, CAN_MODE, val);
298 
299 	netdev_dbg(ndev, "%s MODE=0x%08x\n", __func__,
300 		   rockchip_canfd_read(rcan, CAN_MODE));
301 	return 0;
302 }
303 
304 /* bittiming is called in reset_mode only */
rockchip_canfd_set_bittiming(struct net_device * ndev)305 static int rockchip_canfd_set_bittiming(struct net_device *ndev)
306 {
307 	struct rockchip_canfd *rcan = netdev_priv(ndev);
308 	const struct can_bittiming *bt = &rcan->can.bittiming;
309 	const struct can_bittiming *dbt = &rcan->can.data_bittiming;
310 	u16 brp, sjw, tseg1, tseg2;
311 	u32 reg_btp;
312 
313 	brp = (bt->brp >> 1) - 1;
314 	sjw = bt->sjw - 1;
315 	tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
316 	tseg2 = bt->phase_seg2 - 1;
317 	reg_btp = (brp << NBTP_NBRP_SHIFT) | (sjw << NBTP_NSJW_SHIFT) |
318 		  (tseg1 << NBTP_NTSEG1_SHIFT) |
319 		  (tseg2 << NBTP_NTSEG2_SHIFT);
320 
321 	if (rcan->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
322 		reg_btp |= NBTP_MODE_3_SAMPLES;
323 
324 	rockchip_canfd_write(rcan, CAN_NBTP, reg_btp);
325 
326 	if (rcan->can.ctrlmode & CAN_CTRLMODE_FD) {
327 		reg_btp = 0;
328 		brp = (dbt->brp >> 1) - 1;
329 		sjw = dbt->sjw - 1;
330 		tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
331 		tseg2 = dbt->phase_seg2 - 1;
332 
333 		if (dbt->bitrate > 2200000) {
334 			u32 tdco;
335 
336 			/* Equation based on Bosch's ROCKCHIP_CAN User Manual's
337 			 * Transmitter Delay Compensation Section
338 			 */
339 			tdco = (rcan->can.clock.freq / dbt->bitrate) * 2 / 3;
340 			/* Max valid TDCO value is 63 */
341 			if (tdco > 63)
342 				tdco = 63;
343 
344 			rockchip_canfd_write(rcan, CAN_TDCR,
345 					     (tdco << TDCR_TDCO_SHIFT) |
346 					     TDCR_TDC_ENABLE);
347 		}
348 
349 		reg_btp |= (brp << DBTP_DBRP_SHIFT) |
350 			   (sjw << DBTP_DSJW_SHIFT) |
351 			   (tseg1 << DBTP_DTSEG1_SHIFT) |
352 			   (tseg2 << DBTP_DTSEG2_SHIFT);
353 
354 		if (rcan->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
355 			reg_btp |= DBTP_MODE_3_SAMPLES;
356 
357 		rockchip_canfd_write(rcan, CAN_DBTP, reg_btp);
358 	}
359 
360 	netdev_dbg(ndev, "%s NBTP=0x%08x, DBTP=0x%08x, TDCR=0x%08x\n", __func__,
361 		   rockchip_canfd_read(rcan, CAN_NBTP),
362 		   rockchip_canfd_read(rcan, CAN_DBTP),
363 		   rockchip_canfd_read(rcan, CAN_TDCR));
364 	return 0;
365 }
366 
rockchip_canfd_get_berr_counter(const struct net_device * ndev,struct can_berr_counter * bec)367 static int rockchip_canfd_get_berr_counter(const struct net_device *ndev,
368 					   struct can_berr_counter *bec)
369 {
370 	struct rockchip_canfd *rcan = netdev_priv(ndev);
371 	int err;
372 
373 	err = pm_runtime_get_sync(rcan->dev);
374 	if (err < 0) {
375 		netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n",
376 			   __func__, err);
377 		return err;
378 	}
379 
380 	bec->rxerr = rockchip_canfd_read(rcan, CAN_RX_ERR_CNT);
381 	bec->txerr = rockchip_canfd_read(rcan, CAN_TX_ERR_CNT);
382 
383 	pm_runtime_put(rcan->dev);
384 
385 	netdev_dbg(ndev, "%s RX_ERR_CNT=0x%08x, TX_ERR_CNT=0x%08x\n", __func__,
386 		   rockchip_canfd_read(rcan, CAN_RX_ERR_CNT),
387 		   rockchip_canfd_read(rcan, CAN_TX_ERR_CNT));
388 
389 	return 0;
390 }
391 
rockchip_canfd_start(struct net_device * ndev)392 static int rockchip_canfd_start(struct net_device *ndev)
393 {
394 	struct rockchip_canfd *rcan = netdev_priv(ndev);
395 	u32 val;
396 
397 	/* we need to enter the reset mode */
398 	set_reset_mode(ndev);
399 
400 	rockchip_canfd_write(rcan, CAN_INT_MASK, 0);
401 
402 	/* RECEIVING FILTER, accept all */
403 	rockchip_canfd_write(rcan, CAN_IDCODE, 0);
404 	rockchip_canfd_write(rcan, CAN_IDMASK, CAN_RX_FILTER_MASK);
405 	rockchip_canfd_write(rcan, CAN_IDCODE0, 0);
406 	rockchip_canfd_write(rcan, CAN_IDMASK0, CAN_RX_FILTER_MASK);
407 	rockchip_canfd_write(rcan, CAN_IDCODE1, 0);
408 	rockchip_canfd_write(rcan, CAN_IDMASK1, CAN_RX_FILTER_MASK);
409 	rockchip_canfd_write(rcan, CAN_IDCODE2, 0);
410 	rockchip_canfd_write(rcan, CAN_IDMASK2, CAN_RX_FILTER_MASK);
411 	rockchip_canfd_write(rcan, CAN_IDCODE3, 0);
412 	rockchip_canfd_write(rcan, CAN_IDMASK3, CAN_RX_FILTER_MASK);
413 	rockchip_canfd_write(rcan, CAN_IDCODE4, 0);
414 	rockchip_canfd_write(rcan, CAN_IDMASK4, CAN_RX_FILTER_MASK);
415 
416 	/* set mode */
417 	val = rockchip_canfd_read(rcan, CAN_MODE);
418 
419 	/* rx fifo enable */
420 	rockchip_canfd_write(rcan, CAN_RXFC,
421 			     rockchip_canfd_read(rcan, CAN_RXFC) | FIFO_ENABLE);
422 
423 	/* Mode */
424 	val |= MODE_FDOE;
425 
426 	/* Loopback Mode */
427 	if (rcan->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
428 		val |= MODE_SELF_TEST | MODE_LBACK;
429 
430 	val |= MODE_AUTO_RETX;
431 
432 	rockchip_canfd_write(rcan, CAN_MODE, val);
433 
434 	rockchip_canfd_set_bittiming(ndev);
435 
436 	set_normal_mode(ndev);
437 
438 	rcan->can.state = CAN_STATE_ERROR_ACTIVE;
439 
440 	netdev_dbg(ndev, "%s MODE=0x%08x, INT_MASK=0x%08x\n", __func__,
441 		   rockchip_canfd_read(rcan, CAN_MODE),
442 		   rockchip_canfd_read(rcan, CAN_INT_MASK));
443 
444 	return 0;
445 }
446 
rockchip_canfd_stop(struct net_device * ndev)447 static int rockchip_canfd_stop(struct net_device *ndev)
448 {
449 	struct rockchip_canfd *rcan = netdev_priv(ndev);
450 
451 	rcan->can.state = CAN_STATE_STOPPED;
452 	/* we need to enter reset mode */
453 	set_reset_mode(ndev);
454 
455 	/* disable all interrupts */
456 	rockchip_canfd_write(rcan, CAN_INT_MASK, 0xffff);
457 
458 	netdev_dbg(ndev, "%s MODE=0x%08x, INT_MASK=0x%08x\n", __func__,
459 		   rockchip_canfd_read(rcan, CAN_MODE),
460 		   rockchip_canfd_read(rcan, CAN_INT_MASK));
461 	return 0;
462 }
463 
rockchip_canfd_set_mode(struct net_device * ndev,enum can_mode mode)464 static int rockchip_canfd_set_mode(struct net_device *ndev,
465 				   enum can_mode mode)
466 {
467 	int err;
468 
469 	switch (mode) {
470 	case CAN_MODE_START:
471 		err = rockchip_canfd_start(ndev);
472 		if (err) {
473 			netdev_err(ndev, "starting CAN controller failed!\n");
474 			return err;
475 		}
476 		if (netif_queue_stopped(ndev))
477 			netif_wake_queue(ndev);
478 		break;
479 
480 	default:
481 		return -EOPNOTSUPP;
482 	}
483 
484 	return 0;
485 }
486 
rockchip_canfd_tx_err_delay_work(struct work_struct * work)487 static void rockchip_canfd_tx_err_delay_work(struct work_struct *work)
488 {
489 	struct rockchip_canfd *rcan =
490 		container_of(work, struct rockchip_canfd, tx_err_work.work);
491 	u32 mode, err_code, id;
492 
493 	id = rockchip_canfd_read(rcan, CAN_TXID);
494 	err_code = rockchip_canfd_read(rcan, CAN_ERR_CODE);
495 	if (err_code & 0x1fe0000) {
496 		mode = rockchip_canfd_read(rcan, CAN_MODE);
497 		rockchip_canfd_write(rcan, CAN_MODE, 0);
498 		rockchip_canfd_write(rcan, CAN_MODE, mode);
499 		rockchip_canfd_write(rcan, CAN_CMD, CAN_TX0_REQ);
500 		schedule_delayed_work(&rcan->tx_err_work, 1);
501 	} else if (rcan->txtorx && rcan->mode >= ROCKCHIP_CAN_MODE && id & CAN_EFF_FLAG) {
502 		schedule_delayed_work(&rcan->tx_err_work, 1);
503 	}
504 }
505 
506 /* transmit a CAN message
507  * message layout in the sk_buff should be like this:
508  * xx xx xx xx         ff         ll 00 11 22 33 44 55 66 77
509  * [ can_id ] [flags] [len] [can data (up to 8 bytes]
510  */
rockchip_canfd_start_xmit(struct sk_buff * skb,struct net_device * ndev)511 static int rockchip_canfd_start_xmit(struct sk_buff *skb,
512 				     struct net_device *ndev)
513 {
514 	struct rockchip_canfd *rcan = netdev_priv(ndev);
515 	struct canfd_frame *cf = (struct canfd_frame *)skb->data;
516 	u32 id, dlc;
517 	u32 cmd = CAN_TX0_REQ;
518 	int i;
519 	unsigned long flags;
520 
521 	if (can_dropped_invalid_skb(ndev, skb))
522 		return NETDEV_TX_OK;
523 
524 	netif_stop_queue(ndev);
525 
526 	if (rockchip_canfd_read(rcan, CAN_CMD) & CAN_TX0_REQ)
527 		cmd = CAN_TX1_REQ;
528 
529 	/* Watch carefully on the bit sequence */
530 	if (cf->can_id & CAN_EFF_FLAG) {
531 		/* Extended CAN ID format */
532 		id = cf->can_id & CAN_EFF_MASK;
533 		dlc = can_len2dlc(cf->len) & DLC_MASK;
534 		dlc |= FORMAT_MASK;
535 
536 		/* Extended frames remote TX request */
537 		if (cf->can_id & CAN_RTR_FLAG)
538 			dlc |= RTR_MASK;
539 	} else {
540 		/* Standard CAN ID format */
541 		id = cf->can_id & CAN_SFF_MASK;
542 		dlc = can_len2dlc(cf->len) & DLC_MASK;
543 
544 		/* Standard frames remote TX request */
545 		if (cf->can_id & CAN_RTR_FLAG)
546 			dlc |= RTR_MASK;
547 	}
548 
549 	if ((rcan->can.ctrlmode & CAN_CTRLMODE_FD) && can_is_canfd_skb(skb)) {
550 		dlc |= TX_FD_ENABLE;
551 		if (cf->flags & CANFD_BRS)
552 			dlc |= TX_FD_BRS_ENABLE;
553 	}
554 
555 	if (!rcan->txtorx && rcan->mode >= ROCKCHIP_CAN_MODE && cf->can_id & CAN_EFF_FLAG) {
556 		/* Two frames are sent consecutively.
557 		 * Before the first frame is tx finished,
558 		 * the register of the second frame is configured.
559 		 * Don't be interrupted in the middle.
560 		 */
561 		local_irq_save(flags);
562 		rockchip_canfd_write(rcan, CAN_TXID, rcan->tx_invalid[1]);
563 		rockchip_canfd_write(rcan, CAN_TXFIC, rcan->tx_invalid[0]);
564 		rockchip_canfd_write(rcan, CAN_TXDAT0, rcan->tx_invalid[2]);
565 		rockchip_canfd_write(rcan, CAN_TXDAT1, rcan->tx_invalid[3]);
566 		rockchip_canfd_write(rcan, CAN_CMD, CAN_TX0_REQ);
567 		rockchip_canfd_write(rcan, CAN_TXID, id);
568 		rockchip_canfd_write(rcan, CAN_TXFIC, dlc);
569 		for (i = 0; i < cf->len; i += 4)
570 			rockchip_canfd_write(rcan, CAN_TXDAT0 + i,
571 					     *(u32 *)(cf->data + i));
572 		rockchip_canfd_write(rcan, CAN_CMD, CAN_TX1_REQ);
573 		local_irq_restore(flags);
574 		can_put_echo_skb(skb, ndev, 0);
575 
576 		return NETDEV_TX_OK;
577 	}
578 
579 	rockchip_canfd_write(rcan, CAN_TXID, id);
580 	rockchip_canfd_write(rcan, CAN_TXFIC, dlc);
581 
582 	for (i = 0; i < cf->len; i += 4)
583 		rockchip_canfd_write(rcan, CAN_TXDAT0 + i,
584 				     *(u32 *)(cf->data + i));
585 
586 	rockchip_canfd_write(rcan, CAN_CMD, CAN_TX1_REQ);
587 
588 	if (rcan->txtorx && rcan->mode >= ROCKCHIP_CAN_MODE && cf->can_id & CAN_EFF_FLAG)
589 		schedule_delayed_work(&rcan->tx_err_work, 1);
590 
591 	can_put_echo_skb(skb, ndev, 0);
592 
593 	return NETDEV_TX_OK;
594 }
595 
rockchip_canfd_rx(struct net_device * ndev)596 static int rockchip_canfd_rx(struct net_device *ndev)
597 {
598 	struct rockchip_canfd *rcan = netdev_priv(ndev);
599 	struct net_device_stats *stats = &ndev->stats;
600 	struct canfd_frame *cf;
601 	struct sk_buff *skb;
602 	u32 id_rockchip_canfd, dlc;
603 	int i = 0;
604 	u32 __maybe_unused ts, ret;
605 	u32 data[16] = {0};
606 
607 	dlc = rockchip_canfd_read(rcan, CAN_RXFRD);
608 	id_rockchip_canfd = rockchip_canfd_read(rcan, CAN_RXFRD);
609 	ts = rockchip_canfd_read(rcan, CAN_RXFRD);
610 	for (i = 0; i < 16; i++)
611 		data[i] = rockchip_canfd_read(rcan, CAN_RXFRD);
612 
613 	if (rcan->mode >= ROCKCHIP_CAN_MODE) {
614 		/* may be an empty frame */
615 		if (!dlc && !id_rockchip_canfd)
616 			return 1;
617 
618 		if (rcan->txtorx) {
619 			if (rockchip_canfd_read(rcan, CAN_TX_CHECK_FIC) & FORMAT_MASK) {
620 				ret = rockchip_canfd_read(rcan, CAN_TXID) & CAN_SFF_MASK;
621 				if (id_rockchip_canfd == ret) {
622 					rockchip_canfd_write(rcan, CAN_TX_CHECK_FIC,
623 							     ts | CAN_TX0_REQ);
624 					return 1;
625 				}
626 			}
627 		}
628 	}
629 
630 	/* create zero'ed CAN frame buffer */
631 	if (dlc & FDF_MASK)
632 		skb = alloc_canfd_skb(ndev, &cf);
633 	else
634 		skb = alloc_can_skb(ndev, (struct can_frame **)&cf);
635 	if (!skb) {
636 		stats->rx_dropped++;
637 		return 1;
638 	}
639 
640 	/* Change CAN data length format to socketCAN data format */
641 	if (dlc & FDF_MASK)
642 		cf->len = can_dlc2len(dlc & DLC_MASK);
643 	else
644 		cf->len = get_can_dlc(dlc & DLC_MASK);
645 
646 	/* Change CAN ID format to socketCAN ID format */
647 	if (dlc & FORMAT_MASK) {
648 		/* The received frame is an Extended format frame */
649 		cf->can_id = id_rockchip_canfd;
650 		cf->can_id |= CAN_EFF_FLAG;
651 		if (dlc & RTR_MASK)
652 			cf->can_id |= CAN_RTR_FLAG;
653 	} else {
654 		/* The received frame is a standard format frame */
655 		cf->can_id = id_rockchip_canfd;
656 		if (dlc & RTR_MASK)
657 			cf->can_id |= CAN_RTR_FLAG;
658 	}
659 
660 	if (dlc & BRS_MASK)
661 		cf->flags |= CANFD_BRS;
662 
663 	if (!(cf->can_id & CAN_RTR_FLAG)) {
664 		/* Change CAN data format to socketCAN data format */
665 		for (i = 0; i < cf->len; i += 4)
666 			*(u32 *)(cf->data + i) = data[i / 4];
667 	}
668 
669 	stats->rx_packets++;
670 	stats->rx_bytes += cf->len;
671 	netif_rx(skb);
672 
673 	can_led_event(ndev, CAN_LED_EVENT_RX);
674 
675 	return 1;
676 }
677 
rockchip_canfd_err(struct net_device * ndev,u32 isr)678 static int rockchip_canfd_err(struct net_device *ndev, u32 isr)
679 {
680 	struct rockchip_canfd *rcan = netdev_priv(ndev);
681 	struct net_device_stats *stats = &ndev->stats;
682 	struct can_frame *cf;
683 	struct sk_buff *skb;
684 	unsigned int rxerr, txerr;
685 	u32 sta_reg;
686 
687 	skb = alloc_can_err_skb(ndev, &cf);
688 
689 	rxerr = rockchip_canfd_read(rcan, CAN_RX_ERR_CNT);
690 	txerr = rockchip_canfd_read(rcan, CAN_TX_ERR_CNT);
691 	sta_reg = rockchip_canfd_read(rcan, CAN_STATE);
692 
693 	if (skb) {
694 		cf->data[6] = txerr;
695 		cf->data[7] = rxerr;
696 	}
697 
698 	if (isr & BUS_OFF_INT) {
699 		rcan->can.state = CAN_STATE_BUS_OFF;
700 		rcan->can.can_stats.bus_off++;
701 		cf->can_id |= CAN_ERR_BUSOFF;
702 	} else if (isr & ERR_WARN_INT) {
703 		rcan->can.can_stats.error_warning++;
704 		rcan->can.state = CAN_STATE_ERROR_WARNING;
705 		/* error warning state */
706 		if (likely(skb)) {
707 			cf->can_id |= CAN_ERR_CRTL;
708 			cf->data[1] = (txerr > rxerr) ?
709 				CAN_ERR_CRTL_TX_WARNING :
710 				CAN_ERR_CRTL_RX_WARNING;
711 			cf->data[6] = txerr;
712 			cf->data[7] = rxerr;
713 		}
714 	} else if (isr & PASSIVE_ERR_INT) {
715 		rcan->can.can_stats.error_passive++;
716 		rcan->can.state = CAN_STATE_ERROR_PASSIVE;
717 		/* error passive state */
718 		cf->can_id |= CAN_ERR_CRTL;
719 		cf->data[1] = (txerr > rxerr) ?
720 					CAN_ERR_CRTL_TX_WARNING :
721 					CAN_ERR_CRTL_RX_WARNING;
722 		cf->data[6] = txerr;
723 		cf->data[7] = rxerr;
724 	}
725 
726 	if (rcan->can.state >= CAN_STATE_BUS_OFF ||
727 	    ((sta_reg & 0x20) == 0x20))
728 		can_bus_off(ndev);
729 
730 	stats->rx_packets++;
731 	stats->rx_bytes += cf->can_dlc;
732 	netif_rx(skb);
733 
734 	return 0;
735 }
736 
rockchip_canfd_interrupt(int irq,void * dev_id)737 static irqreturn_t rockchip_canfd_interrupt(int irq, void *dev_id)
738 {
739 	struct net_device *ndev = (struct net_device *)dev_id;
740 	struct rockchip_canfd *rcan = netdev_priv(ndev);
741 	struct net_device_stats *stats = &ndev->stats;
742 	u32 err_int = ERR_WARN_INT | RX_BUF_OV_INT | PASSIVE_ERR_INT |
743 		      TX_LOSTARB_INT | BUS_ERR_INT | BUS_OFF_INT;
744 	u32 isr;
745 	u32 dlc = 0;
746 	u32 quota, work_done = 0;
747 
748 	isr = rockchip_canfd_read(rcan, CAN_INT);
749 	if (isr & TX_FINISH_INT) {
750 		dlc = rockchip_canfd_read(rcan, CAN_TXFIC);
751 		/* transmission complete interrupt */
752 		if (dlc & FDF_MASK)
753 			stats->tx_bytes += can_dlc2len(dlc & DLC_MASK);
754 		else
755 			stats->tx_bytes += (dlc & DLC_MASK);
756 		stats->tx_packets++;
757 		if (rcan->txtorx && rcan->mode >= ROCKCHIP_CAN_MODE && dlc & FORMAT_MASK) {
758 			cancel_delayed_work(&rcan->tx_err_work);
759 			rockchip_canfd_write(rcan, CAN_TX_CHECK_FIC, FORMAT_MASK);
760 			quota = (rockchip_canfd_read(rcan, CAN_RXFC) &
761 				 rcan->rx_fifo_mask) >>
762 				rcan->rx_fifo_shift;
763 			if (quota) {
764 				while (work_done < quota)
765 					work_done += rockchip_canfd_rx(ndev);
766 			}
767 			if (rockchip_canfd_read(rcan, CAN_TX_CHECK_FIC) & CAN_TX0_REQ)
768 				rockchip_canfd_write(rcan, CAN_CMD, CAN_TX1_REQ);
769 			rockchip_canfd_write(rcan, CAN_TX_CHECK_FIC, 0);
770 		}
771 		rockchip_canfd_write(rcan, CAN_CMD, 0);
772 		can_get_echo_skb(ndev, 0);
773 		netif_wake_queue(ndev);
774 		can_led_event(ndev, CAN_LED_EVENT_TX);
775 	}
776 
777 	if (isr & RX_FINISH_INT) {
778 		quota = (rockchip_canfd_read(rcan, CAN_RXFC) & rcan->rx_fifo_mask) >>
779 			rcan->rx_fifo_shift;
780 		if (quota) {
781 			while (work_done < quota)
782 				work_done += rockchip_canfd_rx(ndev);
783 		}
784 	}
785 
786 	if (isr & err_int) {
787 		/* error interrupt */
788 		if (rockchip_canfd_err(ndev, isr))
789 			netdev_err(ndev, "can't allocate buffer - clearing pending interrupts\n");
790 	}
791 
792 	rockchip_canfd_write(rcan, CAN_INT, isr);
793 	return IRQ_HANDLED;
794 }
795 
rockchip_canfd_open(struct net_device * ndev)796 static int rockchip_canfd_open(struct net_device *ndev)
797 {
798 	struct rockchip_canfd *rcan = netdev_priv(ndev);
799 	int err;
800 
801 	/* common open */
802 	err = open_candev(ndev);
803 	if (err)
804 		return err;
805 
806 	err = pm_runtime_get_sync(rcan->dev);
807 	if (err < 0) {
808 		netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n",
809 			   __func__, err);
810 		goto exit;
811 	}
812 
813 	err = rockchip_canfd_start(ndev);
814 	if (err) {
815 		netdev_err(ndev, "could not start CAN peripheral\n");
816 		goto exit_can_start;
817 	}
818 
819 	can_led_event(ndev, CAN_LED_EVENT_OPEN);
820 	netif_start_queue(ndev);
821 
822 	netdev_dbg(ndev, "%s\n", __func__);
823 	return 0;
824 
825 exit_can_start:
826 	pm_runtime_put(rcan->dev);
827 exit:
828 	close_candev(ndev);
829 	return err;
830 }
831 
rockchip_canfd_close(struct net_device * ndev)832 static int rockchip_canfd_close(struct net_device *ndev)
833 {
834 	struct rockchip_canfd *rcan = netdev_priv(ndev);
835 
836 	netif_stop_queue(ndev);
837 	rockchip_canfd_stop(ndev);
838 	close_candev(ndev);
839 	can_led_event(ndev, CAN_LED_EVENT_STOP);
840 	pm_runtime_put(rcan->dev);
841 	cancel_delayed_work_sync(&rcan->tx_err_work);
842 
843 	netdev_dbg(ndev, "%s\n", __func__);
844 	return 0;
845 }
846 
847 static const struct net_device_ops rockchip_canfd_netdev_ops = {
848 	.ndo_open = rockchip_canfd_open,
849 	.ndo_stop = rockchip_canfd_close,
850 	.ndo_start_xmit = rockchip_canfd_start_xmit,
851 	.ndo_change_mtu = can_change_mtu,
852 };
853 
854 /**
855  * rockchip_canfd_suspend - Suspend method for the driver
856  * @dev:	Address of the device structure
857  *
858  * Put the driver into low power mode.
859  * Return: 0 on success and failure value on error
860  */
rockchip_canfd_suspend(struct device * dev)861 static int __maybe_unused rockchip_canfd_suspend(struct device *dev)
862 {
863 	struct net_device *ndev = dev_get_drvdata(dev);
864 
865 	if (netif_running(ndev)) {
866 		netif_stop_queue(ndev);
867 		netif_device_detach(ndev);
868 		rockchip_canfd_stop(ndev);
869 	}
870 
871 	return pm_runtime_force_suspend(dev);
872 }
873 
874 /**
875  * rockchip_canfd_resume - Resume from suspend
876  * @dev:	Address of the device structure
877  *
878  * Resume operation after suspend.
879  * Return: 0 on success and failure value on error
880  */
rockchip_canfd_resume(struct device * dev)881 static int __maybe_unused rockchip_canfd_resume(struct device *dev)
882 {
883 	struct net_device *ndev = dev_get_drvdata(dev);
884 	int ret;
885 
886 	ret = pm_runtime_force_resume(dev);
887 	if (ret) {
888 		dev_err(dev, "pm_runtime_force_resume failed on resume\n");
889 		return ret;
890 	}
891 
892 	if (netif_running(ndev)) {
893 		ret = rockchip_canfd_start(ndev);
894 		if (ret) {
895 			dev_err(dev, "rockchip_canfd_chip_start failed on resume\n");
896 			return ret;
897 		}
898 
899 		netif_device_attach(ndev);
900 		netif_start_queue(ndev);
901 	}
902 
903 	return 0;
904 }
905 
906 /**
907  * rockchip_canfd_runtime_suspend - Runtime suspend method for the driver
908  * @dev:	Address of the device structure
909  *
910  * Put the driver into low power mode.
911  * Return: 0 always
912  */
rockchip_canfd_runtime_suspend(struct device * dev)913 static int __maybe_unused rockchip_canfd_runtime_suspend(struct device *dev)
914 {
915 	struct net_device *ndev = dev_get_drvdata(dev);
916 	struct rockchip_canfd *rcan = netdev_priv(ndev);
917 
918 	clk_bulk_disable_unprepare(rcan->num_clks, rcan->clks);
919 
920 	return 0;
921 }
922 
923 /**
924  * rockchip_canfd_runtime_resume - Runtime resume from suspend
925  * @dev:	Address of the device structure
926  *
927  * Resume operation after suspend.
928  * Return: 0 on success and failure value on error
929  */
rockchip_canfd_runtime_resume(struct device * dev)930 static int __maybe_unused rockchip_canfd_runtime_resume(struct device *dev)
931 {
932 	struct net_device *ndev = dev_get_drvdata(dev);
933 	struct rockchip_canfd *rcan = netdev_priv(ndev);
934 	int ret;
935 
936 	ret = clk_bulk_prepare_enable(rcan->num_clks, rcan->clks);
937 	if (ret) {
938 		dev_err(dev, "Cannot enable clock.\n");
939 		return ret;
940 	}
941 
942 	return 0;
943 }
944 
945 static const struct dev_pm_ops rockchip_canfd_dev_pm_ops = {
946 	SET_SYSTEM_SLEEP_PM_OPS(rockchip_canfd_suspend, rockchip_canfd_resume)
947 	SET_RUNTIME_PM_OPS(rockchip_canfd_runtime_suspend,
948 			   rockchip_canfd_runtime_resume, NULL)
949 };
950 
951 static const struct of_device_id rockchip_canfd_of_match[] = {
952 	{
953 		.compatible = "rockchip,canfd-1.0",
954 		.data = (void *)ROCKCHIP_CANFD_MODE
955 	},
956 	{
957 		.compatible = "rockchip,can-2.0",
958 		.data = (void *)ROCKCHIP_CAN_MODE
959 	},
960 	{
961 		.compatible = "rockchip,rk3568-can-2.0",
962 		.data = (void *)ROCKCHIP_RK3568_CAN_MODE
963 	},
964 	{},
965 };
966 MODULE_DEVICE_TABLE(of, rockchip_canfd_of_match);
967 
rockchip_canfd_probe(struct platform_device * pdev)968 static int rockchip_canfd_probe(struct platform_device *pdev)
969 {
970 	struct net_device *ndev;
971 	struct rockchip_canfd *rcan;
972 	struct resource *res;
973 	void __iomem *addr;
974 	int err, irq;
975 
976 	irq = platform_get_irq(pdev, 0);
977 	if (irq < 0) {
978 		dev_err(&pdev->dev, "could not get a valid irq\n");
979 		return -ENODEV;
980 	}
981 
982 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
983 	addr = devm_ioremap_resource(&pdev->dev, res);
984 	if (IS_ERR(addr))
985 		return -EBUSY;
986 
987 	ndev = alloc_candev(sizeof(struct rockchip_canfd), 1);
988 	if (!ndev) {
989 		dev_err(&pdev->dev, "could not allocate memory for CANFD device\n");
990 		return -ENOMEM;
991 	}
992 	rcan = netdev_priv(ndev);
993 
994 	/* register interrupt handler */
995 	err = devm_request_irq(&pdev->dev, irq, rockchip_canfd_interrupt,
996 			       0, ndev->name, ndev);
997 	if (err) {
998 		dev_err(&pdev->dev, "request_irq err: %d\n", err);
999 		return err;
1000 	}
1001 
1002 	rcan->reset = devm_reset_control_array_get(&pdev->dev, false, false);
1003 	if (IS_ERR(rcan->reset)) {
1004 		if (PTR_ERR(rcan->reset) != -EPROBE_DEFER)
1005 			dev_err(&pdev->dev, "failed to get canfd reset lines\n");
1006 		return PTR_ERR(rcan->reset);
1007 	}
1008 	rcan->num_clks = devm_clk_bulk_get_all(&pdev->dev, &rcan->clks);
1009 	if (rcan->num_clks < 1)
1010 		return -ENODEV;
1011 
1012 	rcan->mode = (unsigned long)of_device_get_match_data(&pdev->dev);
1013 
1014 	rcan->base = addr;
1015 	rcan->can.clock.freq = clk_get_rate(rcan->clks[0].clk);
1016 	rcan->dev = &pdev->dev;
1017 	rcan->can.state = CAN_STATE_STOPPED;
1018 	switch (rcan->mode) {
1019 	case ROCKCHIP_CANFD_MODE:
1020 		rcan->can.bittiming_const = &rockchip_canfd_bittiming_const;
1021 		rcan->can.data_bittiming_const = &rockchip_canfd_data_bittiming_const;
1022 		rcan->can.do_set_mode = rockchip_canfd_set_mode;
1023 		rcan->can.do_get_berr_counter = rockchip_canfd_get_berr_counter;
1024 		rcan->can.do_set_bittiming = rockchip_canfd_set_bittiming;
1025 		rcan->can.do_set_data_bittiming = rockchip_canfd_set_bittiming;
1026 		rcan->can.ctrlmode = CAN_CTRLMODE_FD;
1027 		/* IFI CANFD can do both Bosch FD and ISO FD */
1028 		rcan->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
1029 					       CAN_CTRLMODE_FD;
1030 		rcan->rx_fifo_shift = RX_FIFO_CNT0_SHIFT;
1031 		rcan->rx_fifo_mask = RX_FIFO_CNT0_MASK;
1032 		break;
1033 	case ROCKCHIP_CAN_MODE:
1034 	case ROCKCHIP_RK3568_CAN_MODE:
1035 		rcan->can.bittiming_const = &rockchip_canfd_bittiming_const;
1036 		rcan->can.do_set_mode = rockchip_canfd_set_mode;
1037 		rcan->can.do_get_berr_counter = rockchip_canfd_get_berr_counter;
1038 		rcan->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING |
1039 					       CAN_CTRLMODE_LISTENONLY |
1040 					       CAN_CTRLMODE_LOOPBACK |
1041 					       CAN_CTRLMODE_3_SAMPLES;
1042 		rcan->rx_fifo_shift = RX_FIFO_CNT0_SHIFT;
1043 		rcan->rx_fifo_mask = RX_FIFO_CNT0_MASK;
1044 		break;
1045 	default:
1046 		return -EINVAL;
1047 	}
1048 
1049 	if (rcan->mode == ROCKCHIP_CAN_MODE) {
1050 		rcan->rx_fifo_shift = RX_FIFO_CNT1_SHIFT;
1051 		rcan->rx_fifo_mask = RX_FIFO_CNT1_MASK;
1052 	}
1053 
1054 	if (device_property_read_u32_array(&pdev->dev,
1055 					   "rockchip,tx-invalid-info",
1056 					   rcan->tx_invalid, 4))
1057 		rcan->txtorx = 1;
1058 
1059 	ndev->netdev_ops = &rockchip_canfd_netdev_ops;
1060 	ndev->irq = irq;
1061 	ndev->flags |= IFF_ECHO;
1062 	rcan->can.restart_ms = 1;
1063 
1064 	INIT_DELAYED_WORK(&rcan->tx_err_work, rockchip_canfd_tx_err_delay_work);
1065 
1066 	platform_set_drvdata(pdev, ndev);
1067 	SET_NETDEV_DEV(ndev, &pdev->dev);
1068 
1069 	pm_runtime_enable(&pdev->dev);
1070 	err = pm_runtime_get_sync(&pdev->dev);
1071 	if (err < 0) {
1072 		dev_err(&pdev->dev, "%s: pm_runtime_get failed(%d)\n",
1073 			__func__, err);
1074 		goto err_pmdisable;
1075 	}
1076 
1077 	err = register_candev(ndev);
1078 	if (err) {
1079 		dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
1080 			DRV_NAME, err);
1081 		goto err_disableclks;
1082 	}
1083 
1084 	devm_can_led_init(ndev);
1085 
1086 	return 0;
1087 
1088 err_disableclks:
1089 	pm_runtime_put(&pdev->dev);
1090 err_pmdisable:
1091 	pm_runtime_disable(&pdev->dev);
1092 	free_candev(ndev);
1093 
1094 	return err;
1095 }
1096 
rockchip_canfd_remove(struct platform_device * pdev)1097 static int rockchip_canfd_remove(struct platform_device *pdev)
1098 {
1099 	struct net_device *ndev = platform_get_drvdata(pdev);
1100 
1101 	unregister_netdev(ndev);
1102 	pm_runtime_disable(&pdev->dev);
1103 	free_candev(ndev);
1104 
1105 	return 0;
1106 }
1107 
1108 static struct platform_driver rockchip_canfd_driver = {
1109 	.driver = {
1110 		.name = DRV_NAME,
1111 		.pm = &rockchip_canfd_dev_pm_ops,
1112 		.of_match_table = rockchip_canfd_of_match,
1113 	},
1114 	.probe = rockchip_canfd_probe,
1115 	.remove = rockchip_canfd_remove,
1116 };
1117 module_platform_driver(rockchip_canfd_driver);
1118 
1119 MODULE_AUTHOR("Elaine Zhang <zhangqing@rock-chips.com>");
1120 MODULE_LICENSE("GPL");
1121 MODULE_DESCRIPTION("Rockchip CANFD Drivers");
1122