pch_can.c revision ee50e135aeb048b90fab662e661c58b67341830b
1/*
2 * Copyright (C) 1999 - 2010 Intel Corporation.
3 * Copyright (C) 2010 LAPIS SEMICONDUCTOR CO., LTD.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
17 */
18
19#include <linux/interrupt.h>
20#include <linux/delay.h>
21#include <linux/io.h>
22#include <linux/module.h>
23#include <linux/sched.h>
24#include <linux/pci.h>
25#include <linux/init.h>
26#include <linux/kernel.h>
27#include <linux/types.h>
28#include <linux/errno.h>
29#include <linux/netdevice.h>
30#include <linux/skbuff.h>
31#include <linux/can.h>
32#include <linux/can/dev.h>
33#include <linux/can/error.h>
34
35#define PCH_CTRL_INIT		BIT(0) /* The INIT bit of CANCONT register. */
36#define PCH_CTRL_IE		BIT(1) /* The IE bit of CAN control register */
37#define PCH_CTRL_IE_SIE_EIE	(BIT(3) | BIT(2) | BIT(1))
38#define PCH_CTRL_CCE		BIT(6)
39#define PCH_CTRL_OPT		BIT(7) /* The OPT bit of CANCONT register. */
40#define PCH_OPT_SILENT		BIT(3) /* The Silent bit of CANOPT reg. */
41#define PCH_OPT_LBACK		BIT(4) /* The LoopBack bit of CANOPT reg. */
42
43#define PCH_CMASK_RX_TX_SET	0x00f3
44#define PCH_CMASK_RX_TX_GET	0x0073
45#define PCH_CMASK_ALL		0xff
46#define PCH_CMASK_NEWDAT	BIT(2)
47#define PCH_CMASK_CLRINTPND	BIT(3)
48#define PCH_CMASK_CTRL		BIT(4)
49#define PCH_CMASK_ARB		BIT(5)
50#define PCH_CMASK_MASK		BIT(6)
51#define PCH_CMASK_RDWR		BIT(7)
52#define PCH_IF_MCONT_NEWDAT	BIT(15)
53#define PCH_IF_MCONT_MSGLOST	BIT(14)
54#define PCH_IF_MCONT_INTPND	BIT(13)
55#define PCH_IF_MCONT_UMASK	BIT(12)
56#define PCH_IF_MCONT_TXIE	BIT(11)
57#define PCH_IF_MCONT_RXIE	BIT(10)
58#define PCH_IF_MCONT_RMTEN	BIT(9)
59#define PCH_IF_MCONT_TXRQXT	BIT(8)
60#define PCH_IF_MCONT_EOB	BIT(7)
61#define PCH_IF_MCONT_DLC	(BIT(0) | BIT(1) | BIT(2) | BIT(3))
62#define PCH_MASK2_MDIR_MXTD	(BIT(14) | BIT(15))
63#define PCH_ID2_DIR		BIT(13)
64#define PCH_ID2_XTD		BIT(14)
65#define PCH_ID_MSGVAL		BIT(15)
66#define PCH_IF_CREQ_BUSY	BIT(15)
67
68#define PCH_STATUS_INT		0x8000
69#define PCH_RP			0x00008000
70#define PCH_REC			0x00007f00
71#define PCH_TEC			0x000000ff
72
73#define PCH_TX_OK		BIT(3)
74#define PCH_RX_OK		BIT(4)
75#define PCH_EPASSIV		BIT(5)
76#define PCH_EWARN		BIT(6)
77#define PCH_BUS_OFF		BIT(7)
78
79/* bit position of certain controller bits. */
80#define PCH_BIT_BRP_SHIFT	0
81#define PCH_BIT_SJW_SHIFT	6
82#define PCH_BIT_TSEG1_SHIFT	8
83#define PCH_BIT_TSEG2_SHIFT	12
84#define PCH_BIT_BRPE_BRPE_SHIFT	6
85
86#define PCH_MSK_BITT_BRP	0x3f
87#define PCH_MSK_BRPE_BRPE	0x3c0
88#define PCH_MSK_CTRL_IE_SIE_EIE	0x07
89#define PCH_COUNTER_LIMIT	10
90
91#define PCH_CAN_CLK		50000000	/* 50MHz */
92
93/*
94 * Define the number of message object.
95 * PCH CAN communications are done via Message RAM.
96 * The Message RAM consists of 32 message objects.
97 */
98#define PCH_RX_OBJ_NUM		26
99#define PCH_TX_OBJ_NUM		6
100#define PCH_RX_OBJ_START	1
101#define PCH_RX_OBJ_END		PCH_RX_OBJ_NUM
102#define PCH_TX_OBJ_START	(PCH_RX_OBJ_END + 1)
103#define PCH_TX_OBJ_END		(PCH_RX_OBJ_NUM + PCH_TX_OBJ_NUM)
104
105#define PCH_FIFO_THRESH		16
106
107/* TxRqst2 show status of MsgObjNo.17~32 */
108#define PCH_TREQ2_TX_MASK	(((1 << PCH_TX_OBJ_NUM) - 1) <<\
109							(PCH_RX_OBJ_END - 16))
110
111enum pch_ifreg {
112	PCH_RX_IFREG,
113	PCH_TX_IFREG,
114};
115
116enum pch_can_err {
117	PCH_STUF_ERR = 1,
118	PCH_FORM_ERR,
119	PCH_ACK_ERR,
120	PCH_BIT1_ERR,
121	PCH_BIT0_ERR,
122	PCH_CRC_ERR,
123	PCH_LEC_ALL,
124};
125
126enum pch_can_mode {
127	PCH_CAN_ENABLE,
128	PCH_CAN_DISABLE,
129	PCH_CAN_ALL,
130	PCH_CAN_NONE,
131	PCH_CAN_STOP,
132	PCH_CAN_RUN,
133};
134
135struct pch_can_if_regs {
136	u32 creq;
137	u32 cmask;
138	u32 mask1;
139	u32 mask2;
140	u32 id1;
141	u32 id2;
142	u32 mcont;
143	u32 data[4];
144	u32 rsv[13];
145};
146
147struct pch_can_regs {
148	u32 cont;
149	u32 stat;
150	u32 errc;
151	u32 bitt;
152	u32 intr;
153	u32 opt;
154	u32 brpe;
155	u32 reserve;
156	struct pch_can_if_regs ifregs[2]; /* [0]=if1  [1]=if2 */
157	u32 reserve1[8];
158	u32 treq1;
159	u32 treq2;
160	u32 reserve2[6];
161	u32 data1;
162	u32 data2;
163	u32 reserve3[6];
164	u32 canipend1;
165	u32 canipend2;
166	u32 reserve4[6];
167	u32 canmval1;
168	u32 canmval2;
169	u32 reserve5[37];
170	u32 srst;
171};
172
173struct pch_can_priv {
174	struct can_priv can;
175	struct pci_dev *dev;
176	u32 tx_enable[PCH_TX_OBJ_END];
177	u32 rx_enable[PCH_TX_OBJ_END];
178	u32 rx_link[PCH_TX_OBJ_END];
179	u32 int_enables;
180	struct net_device *ndev;
181	struct pch_can_regs __iomem *regs;
182	struct napi_struct napi;
183	int tx_obj;	/* Point next Tx Obj index */
184	int use_msi;
185};
186
187static const struct can_bittiming_const pch_can_bittiming_const = {
188	.name = KBUILD_MODNAME,
189	.tseg1_min = 2,
190	.tseg1_max = 16,
191	.tseg2_min = 1,
192	.tseg2_max = 8,
193	.sjw_max = 4,
194	.brp_min = 1,
195	.brp_max = 1024, /* 6bit + extended 4bit */
196	.brp_inc = 1,
197};
198
199static DEFINE_PCI_DEVICE_TABLE(pch_pci_tbl) = {
200	{PCI_VENDOR_ID_INTEL, 0x8818, PCI_ANY_ID, PCI_ANY_ID,},
201	{0,}
202};
203MODULE_DEVICE_TABLE(pci, pch_pci_tbl);
204
205static inline void pch_can_bit_set(void __iomem *addr, u32 mask)
206{
207	iowrite32(ioread32(addr) | mask, addr);
208}
209
210static inline void pch_can_bit_clear(void __iomem *addr, u32 mask)
211{
212	iowrite32(ioread32(addr) & ~mask, addr);
213}
214
215static void pch_can_set_run_mode(struct pch_can_priv *priv,
216				 enum pch_can_mode mode)
217{
218	switch (mode) {
219	case PCH_CAN_RUN:
220		pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_INIT);
221		break;
222
223	case PCH_CAN_STOP:
224		pch_can_bit_set(&priv->regs->cont, PCH_CTRL_INIT);
225		break;
226
227	default:
228		netdev_err(priv->ndev, "%s -> Invalid Mode.\n", __func__);
229		break;
230	}
231}
232
233static void pch_can_set_optmode(struct pch_can_priv *priv)
234{
235	u32 reg_val = ioread32(&priv->regs->opt);
236
237	if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
238		reg_val |= PCH_OPT_SILENT;
239
240	if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
241		reg_val |= PCH_OPT_LBACK;
242
243	pch_can_bit_set(&priv->regs->cont, PCH_CTRL_OPT);
244	iowrite32(reg_val, &priv->regs->opt);
245}
246
247static void pch_can_rw_msg_obj(void __iomem *creq_addr, u32 num)
248{
249	int counter = PCH_COUNTER_LIMIT;
250	u32 ifx_creq;
251
252	iowrite32(num, creq_addr);
253	while (counter) {
254		ifx_creq = ioread32(creq_addr) & PCH_IF_CREQ_BUSY;
255		if (!ifx_creq)
256			break;
257		counter--;
258		udelay(1);
259	}
260	if (!counter)
261		pr_err("%s:IF1 BUSY Flag is set forever.\n", __func__);
262}
263
264static void pch_can_set_int_enables(struct pch_can_priv *priv,
265				    enum pch_can_mode interrupt_no)
266{
267	switch (interrupt_no) {
268	case PCH_CAN_DISABLE:
269		pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE);
270		break;
271
272	case PCH_CAN_ALL:
273		pch_can_bit_set(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
274		break;
275
276	case PCH_CAN_NONE:
277		pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
278		break;
279
280	default:
281		netdev_err(priv->ndev, "Invalid interrupt number.\n");
282		break;
283	}
284}
285
286static void pch_can_set_rxtx(struct pch_can_priv *priv, u32 buff_num,
287			     int set, enum pch_ifreg dir)
288{
289	u32 ie;
290
291	if (dir)
292		ie = PCH_IF_MCONT_TXIE;
293	else
294		ie = PCH_IF_MCONT_RXIE;
295
296	/* Reading the Msg buffer from Message RAM to IF1/2 registers. */
297	iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[dir].cmask);
298	pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
299
300	/* Setting the IF1/2MASK1 register to access MsgVal and RxIE bits */
301	iowrite32(PCH_CMASK_RDWR | PCH_CMASK_ARB | PCH_CMASK_CTRL,
302		  &priv->regs->ifregs[dir].cmask);
303
304	if (set) {
305		/* Setting the MsgVal and RxIE/TxIE bits */
306		pch_can_bit_set(&priv->regs->ifregs[dir].mcont, ie);
307		pch_can_bit_set(&priv->regs->ifregs[dir].id2, PCH_ID_MSGVAL);
308	} else {
309		/* Clearing the MsgVal and RxIE/TxIE bits */
310		pch_can_bit_clear(&priv->regs->ifregs[dir].mcont, ie);
311		pch_can_bit_clear(&priv->regs->ifregs[dir].id2, PCH_ID_MSGVAL);
312	}
313
314	pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
315}
316
317static void pch_can_set_rx_all(struct pch_can_priv *priv, int set)
318{
319	int i;
320
321	/* Traversing to obtain the object configured as receivers. */
322	for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++)
323		pch_can_set_rxtx(priv, i, set, PCH_RX_IFREG);
324}
325
326static void pch_can_set_tx_all(struct pch_can_priv *priv, int set)
327{
328	int i;
329
330	/* Traversing to obtain the object configured as transmit object. */
331	for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
332		pch_can_set_rxtx(priv, i, set, PCH_TX_IFREG);
333}
334
335static u32 pch_can_int_pending(struct pch_can_priv *priv)
336{
337	return ioread32(&priv->regs->intr) & 0xffff;
338}
339
340static void pch_can_clear_if_buffers(struct pch_can_priv *priv)
341{
342	int i; /* Msg Obj ID (1~32) */
343
344	for (i = PCH_RX_OBJ_START; i <= PCH_TX_OBJ_END; i++) {
345		iowrite32(PCH_CMASK_RX_TX_SET, &priv->regs->ifregs[0].cmask);
346		iowrite32(0xffff, &priv->regs->ifregs[0].mask1);
347		iowrite32(0xffff, &priv->regs->ifregs[0].mask2);
348		iowrite32(0x0, &priv->regs->ifregs[0].id1);
349		iowrite32(0x0, &priv->regs->ifregs[0].id2);
350		iowrite32(0x0, &priv->regs->ifregs[0].mcont);
351		iowrite32(0x0, &priv->regs->ifregs[0].data[0]);
352		iowrite32(0x0, &priv->regs->ifregs[0].data[1]);
353		iowrite32(0x0, &priv->regs->ifregs[0].data[2]);
354		iowrite32(0x0, &priv->regs->ifregs[0].data[3]);
355		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK |
356			  PCH_CMASK_ARB | PCH_CMASK_CTRL,
357			  &priv->regs->ifregs[0].cmask);
358		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
359	}
360}
361
362static void pch_can_config_rx_tx_buffers(struct pch_can_priv *priv)
363{
364	int i;
365
366	for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
367		iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
368		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
369
370		iowrite32(0x0, &priv->regs->ifregs[0].id1);
371		iowrite32(0x0, &priv->regs->ifregs[0].id2);
372
373		pch_can_bit_set(&priv->regs->ifregs[0].mcont,
374				PCH_IF_MCONT_UMASK);
375
376		/* In case FIFO mode, Last EoB of Rx Obj must be 1 */
377		if (i == PCH_RX_OBJ_END)
378			pch_can_bit_set(&priv->regs->ifregs[0].mcont,
379					PCH_IF_MCONT_EOB);
380		else
381			pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
382					  PCH_IF_MCONT_EOB);
383
384		iowrite32(0, &priv->regs->ifregs[0].mask1);
385		pch_can_bit_clear(&priv->regs->ifregs[0].mask2,
386				  0x1fff | PCH_MASK2_MDIR_MXTD);
387
388		/* Setting CMASK for writing */
389		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK | PCH_CMASK_ARB |
390			  PCH_CMASK_CTRL, &priv->regs->ifregs[0].cmask);
391
392		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, i);
393	}
394
395	for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++) {
396		iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[1].cmask);
397		pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, i);
398
399		/* Resetting DIR bit for reception */
400		iowrite32(0x0, &priv->regs->ifregs[1].id1);
401		iowrite32(PCH_ID2_DIR, &priv->regs->ifregs[1].id2);
402
403		/* Setting EOB bit for transmitter */
404		iowrite32(PCH_IF_MCONT_EOB | PCH_IF_MCONT_UMASK,
405			  &priv->regs->ifregs[1].mcont);
406
407		iowrite32(0, &priv->regs->ifregs[1].mask1);
408		pch_can_bit_clear(&priv->regs->ifregs[1].mask2, 0x1fff);
409
410		/* Setting CMASK for writing */
411		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_MASK | PCH_CMASK_ARB |
412			  PCH_CMASK_CTRL, &priv->regs->ifregs[1].cmask);
413
414		pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, i);
415	}
416}
417
418static void pch_can_init(struct pch_can_priv *priv)
419{
420	/* Stopping the Can device. */
421	pch_can_set_run_mode(priv, PCH_CAN_STOP);
422
423	/* Clearing all the message object buffers. */
424	pch_can_clear_if_buffers(priv);
425
426	/* Configuring the respective message object as either rx/tx object. */
427	pch_can_config_rx_tx_buffers(priv);
428
429	/* Enabling the interrupts. */
430	pch_can_set_int_enables(priv, PCH_CAN_ALL);
431}
432
433static void pch_can_release(struct pch_can_priv *priv)
434{
435	/* Stooping the CAN device. */
436	pch_can_set_run_mode(priv, PCH_CAN_STOP);
437
438	/* Disabling the interrupts. */
439	pch_can_set_int_enables(priv, PCH_CAN_NONE);
440
441	/* Disabling all the receive object. */
442	pch_can_set_rx_all(priv, 0);
443
444	/* Disabling all the transmit object. */
445	pch_can_set_tx_all(priv, 0);
446}
447
448/* This function clears interrupt(s) from the CAN device. */
449static void pch_can_int_clr(struct pch_can_priv *priv, u32 mask)
450{
451	/* Clear interrupt for transmit object */
452	if ((mask >= PCH_RX_OBJ_START) && (mask <= PCH_RX_OBJ_END)) {
453		/* Setting CMASK for clearing the reception interrupts. */
454		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL | PCH_CMASK_ARB,
455			  &priv->regs->ifregs[0].cmask);
456
457		/* Clearing the Dir bit. */
458		pch_can_bit_clear(&priv->regs->ifregs[0].id2, PCH_ID2_DIR);
459
460		/* Clearing NewDat & IntPnd */
461		pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
462				  PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_INTPND);
463
464		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, mask);
465	} else if ((mask >= PCH_TX_OBJ_START) && (mask <= PCH_TX_OBJ_END)) {
466		/*
467		 * Setting CMASK for clearing interrupts for frame transmission.
468		 */
469		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL | PCH_CMASK_ARB,
470			  &priv->regs->ifregs[1].cmask);
471
472		/* Resetting the ID registers. */
473		pch_can_bit_set(&priv->regs->ifregs[1].id2,
474			       PCH_ID2_DIR | (0x7ff << 2));
475		iowrite32(0x0, &priv->regs->ifregs[1].id1);
476
477		/* Claring NewDat, TxRqst & IntPnd */
478		pch_can_bit_clear(&priv->regs->ifregs[1].mcont,
479				  PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_INTPND |
480				  PCH_IF_MCONT_TXRQXT);
481		pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, mask);
482	}
483}
484
485static void pch_can_reset(struct pch_can_priv *priv)
486{
487	/* write to sw reset register */
488	iowrite32(1, &priv->regs->srst);
489	iowrite32(0, &priv->regs->srst);
490}
491
492static void pch_can_error(struct net_device *ndev, u32 status)
493{
494	struct sk_buff *skb;
495	struct pch_can_priv *priv = netdev_priv(ndev);
496	struct can_frame *cf;
497	u32 errc, lec;
498	struct net_device_stats *stats = &(priv->ndev->stats);
499	enum can_state state = priv->can.state;
500
501	skb = alloc_can_err_skb(ndev, &cf);
502	if (!skb)
503		return;
504
505	if (status & PCH_BUS_OFF) {
506		pch_can_set_tx_all(priv, 0);
507		pch_can_set_rx_all(priv, 0);
508		state = CAN_STATE_BUS_OFF;
509		cf->can_id |= CAN_ERR_BUSOFF;
510		can_bus_off(ndev);
511	}
512
513	errc = ioread32(&priv->regs->errc);
514	/* Warning interrupt. */
515	if (status & PCH_EWARN) {
516		state = CAN_STATE_ERROR_WARNING;
517		priv->can.can_stats.error_warning++;
518		cf->can_id |= CAN_ERR_CRTL;
519		if (((errc & PCH_REC) >> 8) > 96)
520			cf->data[1] |= CAN_ERR_CRTL_RX_WARNING;
521		if ((errc & PCH_TEC) > 96)
522			cf->data[1] |= CAN_ERR_CRTL_TX_WARNING;
523		netdev_dbg(ndev,
524			"%s -> Error Counter is more than 96.\n", __func__);
525	}
526	/* Error passive interrupt. */
527	if (status & PCH_EPASSIV) {
528		priv->can.can_stats.error_passive++;
529		state = CAN_STATE_ERROR_PASSIVE;
530		cf->can_id |= CAN_ERR_CRTL;
531		if (errc & PCH_RP)
532			cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
533		if ((errc & PCH_TEC) > 127)
534			cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
535		netdev_dbg(ndev,
536			"%s -> CAN controller is ERROR PASSIVE .\n", __func__);
537	}
538
539	lec = status & PCH_LEC_ALL;
540	switch (lec) {
541	case PCH_STUF_ERR:
542		cf->data[2] |= CAN_ERR_PROT_STUFF;
543		priv->can.can_stats.bus_error++;
544		stats->rx_errors++;
545		break;
546	case PCH_FORM_ERR:
547		cf->data[2] |= CAN_ERR_PROT_FORM;
548		priv->can.can_stats.bus_error++;
549		stats->rx_errors++;
550		break;
551	case PCH_ACK_ERR:
552		cf->can_id |= CAN_ERR_ACK;
553		priv->can.can_stats.bus_error++;
554		stats->rx_errors++;
555		break;
556	case PCH_BIT1_ERR:
557	case PCH_BIT0_ERR:
558		cf->data[2] |= CAN_ERR_PROT_BIT;
559		priv->can.can_stats.bus_error++;
560		stats->rx_errors++;
561		break;
562	case PCH_CRC_ERR:
563		cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ |
564			       CAN_ERR_PROT_LOC_CRC_DEL;
565		priv->can.can_stats.bus_error++;
566		stats->rx_errors++;
567		break;
568	case PCH_LEC_ALL: /* Written by CPU. No error status */
569		break;
570	}
571
572	cf->data[6] = errc & PCH_TEC;
573	cf->data[7] = (errc & PCH_REC) >> 8;
574
575	priv->can.state = state;
576	netif_receive_skb(skb);
577
578	stats->rx_packets++;
579	stats->rx_bytes += cf->can_dlc;
580}
581
582static irqreturn_t pch_can_interrupt(int irq, void *dev_id)
583{
584	struct net_device *ndev = (struct net_device *)dev_id;
585	struct pch_can_priv *priv = netdev_priv(ndev);
586
587	if (!pch_can_int_pending(priv))
588		return IRQ_NONE;
589
590	pch_can_set_int_enables(priv, PCH_CAN_NONE);
591	napi_schedule(&priv->napi);
592	return IRQ_HANDLED;
593}
594
595static void pch_fifo_thresh(struct pch_can_priv *priv, int obj_id)
596{
597	if (obj_id < PCH_FIFO_THRESH) {
598		iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL |
599			  PCH_CMASK_ARB, &priv->regs->ifregs[0].cmask);
600
601		/* Clearing the Dir bit. */
602		pch_can_bit_clear(&priv->regs->ifregs[0].id2, PCH_ID2_DIR);
603
604		/* Clearing NewDat & IntPnd */
605		pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
606				  PCH_IF_MCONT_INTPND);
607		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_id);
608	} else if (obj_id > PCH_FIFO_THRESH) {
609		pch_can_int_clr(priv, obj_id);
610	} else if (obj_id == PCH_FIFO_THRESH) {
611		int cnt;
612		for (cnt = 0; cnt < PCH_FIFO_THRESH; cnt++)
613			pch_can_int_clr(priv, cnt + 1);
614	}
615}
616
617static void pch_can_rx_msg_lost(struct net_device *ndev, int obj_id)
618{
619	struct pch_can_priv *priv = netdev_priv(ndev);
620	struct net_device_stats *stats = &(priv->ndev->stats);
621	struct sk_buff *skb;
622	struct can_frame *cf;
623
624	netdev_dbg(priv->ndev, "Msg Obj is overwritten.\n");
625	pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
626			  PCH_IF_MCONT_MSGLOST);
627	iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL,
628		  &priv->regs->ifregs[0].cmask);
629	pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_id);
630
631	skb = alloc_can_err_skb(ndev, &cf);
632	if (!skb)
633		return;
634
635	cf->can_id |= CAN_ERR_CRTL;
636	cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
637	stats->rx_over_errors++;
638	stats->rx_errors++;
639
640	netif_receive_skb(skb);
641}
642
643static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
644{
645	u32 reg;
646	canid_t id;
647	int rcv_pkts = 0;
648	struct sk_buff *skb;
649	struct can_frame *cf;
650	struct pch_can_priv *priv = netdev_priv(ndev);
651	struct net_device_stats *stats = &(priv->ndev->stats);
652	int i;
653	u32 id2;
654	u16 data_reg;
655
656	do {
657		/* Reading the message object from the Message RAM */
658		iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
659		pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, obj_num);
660
661		/* Reading the MCONT register. */
662		reg = ioread32(&priv->regs->ifregs[0].mcont);
663
664		if (reg & PCH_IF_MCONT_EOB)
665			break;
666
667		/* If MsgLost bit set. */
668		if (reg & PCH_IF_MCONT_MSGLOST) {
669			pch_can_rx_msg_lost(ndev, obj_num);
670			rcv_pkts++;
671			quota--;
672			obj_num++;
673			continue;
674		} else if (!(reg & PCH_IF_MCONT_NEWDAT)) {
675			obj_num++;
676			continue;
677		}
678
679		skb = alloc_can_skb(priv->ndev, &cf);
680		if (!skb) {
681			netdev_err(ndev, "alloc_can_skb Failed\n");
682			return rcv_pkts;
683		}
684
685		/* Get Received data */
686		id2 = ioread32(&priv->regs->ifregs[0].id2);
687		if (id2 & PCH_ID2_XTD) {
688			id = (ioread32(&priv->regs->ifregs[0].id1) & 0xffff);
689			id |= (((id2) & 0x1fff) << 16);
690			cf->can_id = id | CAN_EFF_FLAG;
691		} else {
692			id = (id2 >> 2) & CAN_SFF_MASK;
693			cf->can_id = id;
694		}
695
696		if (id2 & PCH_ID2_DIR)
697			cf->can_id |= CAN_RTR_FLAG;
698
699		cf->can_dlc = get_can_dlc((ioread32(&priv->regs->
700						    ifregs[0].mcont)) & 0xF);
701
702		for (i = 0; i < cf->can_dlc; i += 2) {
703			data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
704			cf->data[i] = data_reg;
705			cf->data[i + 1] = data_reg >> 8;
706		}
707
708		netif_receive_skb(skb);
709		rcv_pkts++;
710		stats->rx_packets++;
711		quota--;
712		stats->rx_bytes += cf->can_dlc;
713
714		pch_fifo_thresh(priv, obj_num);
715		obj_num++;
716	} while (quota > 0);
717
718	return rcv_pkts;
719}
720
721static void pch_can_tx_complete(struct net_device *ndev, u32 int_stat)
722{
723	struct pch_can_priv *priv = netdev_priv(ndev);
724	struct net_device_stats *stats = &(priv->ndev->stats);
725	u32 dlc;
726
727	can_get_echo_skb(ndev, int_stat - PCH_RX_OBJ_END - 1);
728	iowrite32(PCH_CMASK_RX_TX_GET | PCH_CMASK_CLRINTPND,
729		  &priv->regs->ifregs[1].cmask);
730	pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, int_stat);
731	dlc = get_can_dlc(ioread32(&priv->regs->ifregs[1].mcont) &
732			  PCH_IF_MCONT_DLC);
733	stats->tx_bytes += dlc;
734	stats->tx_packets++;
735	if (int_stat == PCH_TX_OBJ_END)
736		netif_wake_queue(ndev);
737}
738
739static int pch_can_poll(struct napi_struct *napi, int quota)
740{
741	struct net_device *ndev = napi->dev;
742	struct pch_can_priv *priv = netdev_priv(ndev);
743	u32 int_stat;
744	u32 reg_stat;
745	int quota_save = quota;
746
747	int_stat = pch_can_int_pending(priv);
748	if (!int_stat)
749		goto end;
750
751	if (int_stat == PCH_STATUS_INT) {
752		reg_stat = ioread32(&priv->regs->stat);
753
754		if ((reg_stat & (PCH_BUS_OFF | PCH_LEC_ALL)) &&
755		   ((reg_stat & PCH_LEC_ALL) != PCH_LEC_ALL)) {
756			pch_can_error(ndev, reg_stat);
757			quota--;
758		}
759
760		if (reg_stat & (PCH_TX_OK | PCH_RX_OK))
761			pch_can_bit_clear(&priv->regs->stat,
762					  reg_stat & (PCH_TX_OK | PCH_RX_OK));
763
764		int_stat = pch_can_int_pending(priv);
765	}
766
767	if (quota == 0)
768		goto end;
769
770	if ((int_stat >= PCH_RX_OBJ_START) && (int_stat <= PCH_RX_OBJ_END)) {
771		quota -= pch_can_rx_normal(ndev, int_stat, quota);
772	} else if ((int_stat >= PCH_TX_OBJ_START) &&
773		   (int_stat <= PCH_TX_OBJ_END)) {
774		/* Handle transmission interrupt */
775		pch_can_tx_complete(ndev, int_stat);
776	}
777
778end:
779	napi_complete(napi);
780	pch_can_set_int_enables(priv, PCH_CAN_ALL);
781
782	return quota_save - quota;
783}
784
785static int pch_set_bittiming(struct net_device *ndev)
786{
787	struct pch_can_priv *priv = netdev_priv(ndev);
788	const struct can_bittiming *bt = &priv->can.bittiming;
789	u32 canbit;
790	u32 bepe;
791
792	/* Setting the CCE bit for accessing the Can Timing register. */
793	pch_can_bit_set(&priv->regs->cont, PCH_CTRL_CCE);
794
795	canbit = (bt->brp - 1) & PCH_MSK_BITT_BRP;
796	canbit |= (bt->sjw - 1) << PCH_BIT_SJW_SHIFT;
797	canbit |= (bt->phase_seg1 + bt->prop_seg - 1) << PCH_BIT_TSEG1_SHIFT;
798	canbit |= (bt->phase_seg2 - 1) << PCH_BIT_TSEG2_SHIFT;
799	bepe = ((bt->brp - 1) & PCH_MSK_BRPE_BRPE) >> PCH_BIT_BRPE_BRPE_SHIFT;
800	iowrite32(canbit, &priv->regs->bitt);
801	iowrite32(bepe, &priv->regs->brpe);
802	pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_CCE);
803
804	return 0;
805}
806
807static void pch_can_start(struct net_device *ndev)
808{
809	struct pch_can_priv *priv = netdev_priv(ndev);
810
811	if (priv->can.state != CAN_STATE_STOPPED)
812		pch_can_reset(priv);
813
814	pch_set_bittiming(ndev);
815	pch_can_set_optmode(priv);
816
817	pch_can_set_tx_all(priv, 1);
818	pch_can_set_rx_all(priv, 1);
819
820	/* Setting the CAN to run mode. */
821	pch_can_set_run_mode(priv, PCH_CAN_RUN);
822
823	priv->can.state = CAN_STATE_ERROR_ACTIVE;
824
825	return;
826}
827
828static int pch_can_do_set_mode(struct net_device *ndev, enum can_mode mode)
829{
830	int ret = 0;
831
832	switch (mode) {
833	case CAN_MODE_START:
834		pch_can_start(ndev);
835		netif_wake_queue(ndev);
836		break;
837	default:
838		ret = -EOPNOTSUPP;
839		break;
840	}
841
842	return ret;
843}
844
845static int pch_can_open(struct net_device *ndev)
846{
847	struct pch_can_priv *priv = netdev_priv(ndev);
848	int retval;
849
850	/* Regstering the interrupt. */
851	retval = request_irq(priv->dev->irq, pch_can_interrupt, IRQF_SHARED,
852			     ndev->name, ndev);
853	if (retval) {
854		netdev_err(ndev, "request_irq failed.\n");
855		goto req_irq_err;
856	}
857
858	/* Open common can device */
859	retval = open_candev(ndev);
860	if (retval) {
861		netdev_err(ndev, "open_candev() failed %d\n", retval);
862		goto err_open_candev;
863	}
864
865	pch_can_init(priv);
866	pch_can_start(ndev);
867	napi_enable(&priv->napi);
868	netif_start_queue(ndev);
869
870	return 0;
871
872err_open_candev:
873	free_irq(priv->dev->irq, ndev);
874req_irq_err:
875	pch_can_release(priv);
876
877	return retval;
878}
879
880static int pch_close(struct net_device *ndev)
881{
882	struct pch_can_priv *priv = netdev_priv(ndev);
883
884	netif_stop_queue(ndev);
885	napi_disable(&priv->napi);
886	pch_can_release(priv);
887	free_irq(priv->dev->irq, ndev);
888	close_candev(ndev);
889	priv->can.state = CAN_STATE_STOPPED;
890	return 0;
891}
892
893static netdev_tx_t pch_xmit(struct sk_buff *skb, struct net_device *ndev)
894{
895	struct pch_can_priv *priv = netdev_priv(ndev);
896	struct can_frame *cf = (struct can_frame *)skb->data;
897	int tx_obj_no;
898	int i;
899	u32 id2;
900
901	if (can_dropped_invalid_skb(ndev, skb))
902		return NETDEV_TX_OK;
903
904	tx_obj_no = priv->tx_obj;
905	if (priv->tx_obj == PCH_TX_OBJ_END) {
906		if (ioread32(&priv->regs->treq2) & PCH_TREQ2_TX_MASK)
907			netif_stop_queue(ndev);
908
909		priv->tx_obj = PCH_TX_OBJ_START;
910	} else {
911		priv->tx_obj++;
912	}
913
914	/* Setting the CMASK register. */
915	pch_can_bit_set(&priv->regs->ifregs[1].cmask, PCH_CMASK_ALL);
916
917	/* If ID extended is set. */
918	if (cf->can_id & CAN_EFF_FLAG) {
919		iowrite32(cf->can_id & 0xffff, &priv->regs->ifregs[1].id1);
920		id2 = ((cf->can_id >> 16) & 0x1fff) | PCH_ID2_XTD;
921	} else {
922		iowrite32(0, &priv->regs->ifregs[1].id1);
923		id2 = (cf->can_id & CAN_SFF_MASK) << 2;
924	}
925
926	id2 |= PCH_ID_MSGVAL;
927
928	/* If remote frame has to be transmitted.. */
929	if (!(cf->can_id & CAN_RTR_FLAG))
930		id2 |= PCH_ID2_DIR;
931
932	iowrite32(id2, &priv->regs->ifregs[1].id2);
933
934	/* Copy data to register */
935	for (i = 0; i < cf->can_dlc; i += 2) {
936		iowrite16(cf->data[i] | (cf->data[i + 1] << 8),
937			  &priv->regs->ifregs[1].data[i / 2]);
938	}
939
940	can_put_echo_skb(skb, ndev, tx_obj_no - PCH_RX_OBJ_END - 1);
941
942	/* Set the size of the data. Update if2_mcont */
943	iowrite32(cf->can_dlc | PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_TXRQXT |
944		  PCH_IF_MCONT_TXIE, &priv->regs->ifregs[1].mcont);
945
946	pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, tx_obj_no);
947
948	return NETDEV_TX_OK;
949}
950
951static const struct net_device_ops pch_can_netdev_ops = {
952	.ndo_open		= pch_can_open,
953	.ndo_stop		= pch_close,
954	.ndo_start_xmit		= pch_xmit,
955};
956
957static void pch_can_remove(struct pci_dev *pdev)
958{
959	struct net_device *ndev = pci_get_drvdata(pdev);
960	struct pch_can_priv *priv = netdev_priv(ndev);
961
962	unregister_candev(priv->ndev);
963	if (priv->use_msi)
964		pci_disable_msi(priv->dev);
965	pci_release_regions(pdev);
966	pci_disable_device(pdev);
967	pci_set_drvdata(pdev, NULL);
968	pch_can_reset(priv);
969	pci_iounmap(pdev, priv->regs);
970	free_candev(priv->ndev);
971}
972
973#ifdef CONFIG_PM
974static void pch_can_set_int_custom(struct pch_can_priv *priv)
975{
976	/* Clearing the IE, SIE and EIE bits of Can control register. */
977	pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_IE_SIE_EIE);
978
979	/* Appropriately setting them. */
980	pch_can_bit_set(&priv->regs->cont,
981			((priv->int_enables & PCH_MSK_CTRL_IE_SIE_EIE) << 1));
982}
983
984/* This function retrieves interrupt enabled for the CAN device. */
985static u32 pch_can_get_int_enables(struct pch_can_priv *priv)
986{
987	/* Obtaining the status of IE, SIE and EIE interrupt bits. */
988	return (ioread32(&priv->regs->cont) & PCH_CTRL_IE_SIE_EIE) >> 1;
989}
990
991static u32 pch_can_get_rxtx_ir(struct pch_can_priv *priv, u32 buff_num,
992			       enum pch_ifreg dir)
993{
994	u32 ie, enable;
995
996	if (dir)
997		ie = PCH_IF_MCONT_RXIE;
998	else
999		ie = PCH_IF_MCONT_TXIE;
1000
1001	iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[dir].cmask);
1002	pch_can_rw_msg_obj(&priv->regs->ifregs[dir].creq, buff_num);
1003
1004	if (((ioread32(&priv->regs->ifregs[dir].id2)) & PCH_ID_MSGVAL) &&
1005			((ioread32(&priv->regs->ifregs[dir].mcont)) & ie))
1006		enable = 1;
1007	else
1008		enable = 0;
1009
1010	return enable;
1011}
1012
1013static void pch_can_set_rx_buffer_link(struct pch_can_priv *priv,
1014				       u32 buffer_num, int set)
1015{
1016	iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
1017	pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1018	iowrite32(PCH_CMASK_RDWR | PCH_CMASK_CTRL,
1019		  &priv->regs->ifregs[0].cmask);
1020	if (set)
1021		pch_can_bit_clear(&priv->regs->ifregs[0].mcont,
1022				  PCH_IF_MCONT_EOB);
1023	else
1024		pch_can_bit_set(&priv->regs->ifregs[0].mcont, PCH_IF_MCONT_EOB);
1025
1026	pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1027}
1028
1029static u32 pch_can_get_rx_buffer_link(struct pch_can_priv *priv, u32 buffer_num)
1030{
1031	u32 link;
1032
1033	iowrite32(PCH_CMASK_RX_TX_GET, &priv->regs->ifregs[0].cmask);
1034	pch_can_rw_msg_obj(&priv->regs->ifregs[0].creq, buffer_num);
1035
1036	if (ioread32(&priv->regs->ifregs[0].mcont) & PCH_IF_MCONT_EOB)
1037		link = 0;
1038	else
1039		link = 1;
1040	return link;
1041}
1042
1043static int pch_can_get_buffer_status(struct pch_can_priv *priv)
1044{
1045	return (ioread32(&priv->regs->treq1) & 0xffff) |
1046	       (ioread32(&priv->regs->treq2) << 16);
1047}
1048
1049static int pch_can_suspend(struct pci_dev *pdev, pm_message_t state)
1050{
1051	int i;
1052	int retval;
1053	u32 buf_stat;	/* Variable for reading the transmit buffer status. */
1054	int counter = PCH_COUNTER_LIMIT;
1055
1056	struct net_device *dev = pci_get_drvdata(pdev);
1057	struct pch_can_priv *priv = netdev_priv(dev);
1058
1059	/* Stop the CAN controller */
1060	pch_can_set_run_mode(priv, PCH_CAN_STOP);
1061
1062	/* Indicate that we are aboutto/in suspend */
1063	priv->can.state = CAN_STATE_STOPPED;
1064
1065	/* Waiting for all transmission to complete. */
1066	while (counter) {
1067		buf_stat = pch_can_get_buffer_status(priv);
1068		if (!buf_stat)
1069			break;
1070		counter--;
1071		udelay(1);
1072	}
1073	if (!counter)
1074		dev_err(&pdev->dev, "%s -> Transmission time out.\n", __func__);
1075
1076	/* Save interrupt configuration and then disable them */
1077	priv->int_enables = pch_can_get_int_enables(priv);
1078	pch_can_set_int_enables(priv, PCH_CAN_DISABLE);
1079
1080	/* Save Tx buffer enable state */
1081	for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
1082		priv->tx_enable[i - 1] = pch_can_get_rxtx_ir(priv, i,
1083							     PCH_TX_IFREG);
1084
1085	/* Disable all Transmit buffers */
1086	pch_can_set_tx_all(priv, 0);
1087
1088	/* Save Rx buffer enable state */
1089	for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
1090		priv->rx_enable[i - 1] = pch_can_get_rxtx_ir(priv, i,
1091							     PCH_RX_IFREG);
1092		priv->rx_link[i - 1] = pch_can_get_rx_buffer_link(priv, i);
1093	}
1094
1095	/* Disable all Receive buffers */
1096	pch_can_set_rx_all(priv, 0);
1097	retval = pci_save_state(pdev);
1098	if (retval) {
1099		dev_err(&pdev->dev, "pci_save_state failed.\n");
1100	} else {
1101		pci_enable_wake(pdev, PCI_D3hot, 0);
1102		pci_disable_device(pdev);
1103		pci_set_power_state(pdev, pci_choose_state(pdev, state));
1104	}
1105
1106	return retval;
1107}
1108
1109static int pch_can_resume(struct pci_dev *pdev)
1110{
1111	int i;
1112	int retval;
1113	struct net_device *dev = pci_get_drvdata(pdev);
1114	struct pch_can_priv *priv = netdev_priv(dev);
1115
1116	pci_set_power_state(pdev, PCI_D0);
1117	pci_restore_state(pdev);
1118	retval = pci_enable_device(pdev);
1119	if (retval) {
1120		dev_err(&pdev->dev, "pci_enable_device failed.\n");
1121		return retval;
1122	}
1123
1124	pci_enable_wake(pdev, PCI_D3hot, 0);
1125
1126	priv->can.state = CAN_STATE_ERROR_ACTIVE;
1127
1128	/* Disabling all interrupts. */
1129	pch_can_set_int_enables(priv, PCH_CAN_DISABLE);
1130
1131	/* Setting the CAN device in Stop Mode. */
1132	pch_can_set_run_mode(priv, PCH_CAN_STOP);
1133
1134	/* Configuring the transmit and receive buffers. */
1135	pch_can_config_rx_tx_buffers(priv);
1136
1137	/* Restore the CAN state */
1138	pch_set_bittiming(dev);
1139
1140	/* Listen/Active */
1141	pch_can_set_optmode(priv);
1142
1143	/* Enabling the transmit buffer. */
1144	for (i = PCH_TX_OBJ_START; i <= PCH_TX_OBJ_END; i++)
1145		pch_can_set_rxtx(priv, i, priv->tx_enable[i - 1], PCH_TX_IFREG);
1146
1147	/* Configuring the receive buffer and enabling them. */
1148	for (i = PCH_RX_OBJ_START; i <= PCH_RX_OBJ_END; i++) {
1149		/* Restore buffer link */
1150		pch_can_set_rx_buffer_link(priv, i, priv->rx_link[i - 1]);
1151
1152		/* Restore buffer enables */
1153		pch_can_set_rxtx(priv, i, priv->rx_enable[i - 1], PCH_RX_IFREG);
1154	}
1155
1156	/* Enable CAN Interrupts */
1157	pch_can_set_int_custom(priv);
1158
1159	/* Restore Run Mode */
1160	pch_can_set_run_mode(priv, PCH_CAN_RUN);
1161
1162	return retval;
1163}
1164#else
1165#define pch_can_suspend NULL
1166#define pch_can_resume NULL
1167#endif
1168
1169static int pch_can_get_berr_counter(const struct net_device *dev,
1170				    struct can_berr_counter *bec)
1171{
1172	struct pch_can_priv *priv = netdev_priv(dev);
1173	u32 errc = ioread32(&priv->regs->errc);
1174
1175	bec->txerr = errc & PCH_TEC;
1176	bec->rxerr = (errc & PCH_REC) >> 8;
1177
1178	return 0;
1179}
1180
1181static int pch_can_probe(struct pci_dev *pdev,
1182				   const struct pci_device_id *id)
1183{
1184	struct net_device *ndev;
1185	struct pch_can_priv *priv;
1186	int rc;
1187	void __iomem *addr;
1188
1189	rc = pci_enable_device(pdev);
1190	if (rc) {
1191		dev_err(&pdev->dev, "Failed pci_enable_device %d\n", rc);
1192		goto probe_exit_endev;
1193	}
1194
1195	rc = pci_request_regions(pdev, KBUILD_MODNAME);
1196	if (rc) {
1197		dev_err(&pdev->dev, "Failed pci_request_regions %d\n", rc);
1198		goto probe_exit_pcireq;
1199	}
1200
1201	addr = pci_iomap(pdev, 1, 0);
1202	if (!addr) {
1203		rc = -EIO;
1204		dev_err(&pdev->dev, "Failed pci_iomap\n");
1205		goto probe_exit_ipmap;
1206	}
1207
1208	ndev = alloc_candev(sizeof(struct pch_can_priv), PCH_TX_OBJ_END);
1209	if (!ndev) {
1210		rc = -ENOMEM;
1211		dev_err(&pdev->dev, "Failed alloc_candev\n");
1212		goto probe_exit_alloc_candev;
1213	}
1214
1215	priv = netdev_priv(ndev);
1216	priv->ndev = ndev;
1217	priv->regs = addr;
1218	priv->dev = pdev;
1219	priv->can.bittiming_const = &pch_can_bittiming_const;
1220	priv->can.do_set_mode = pch_can_do_set_mode;
1221	priv->can.do_get_berr_counter = pch_can_get_berr_counter;
1222	priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
1223				       CAN_CTRLMODE_LOOPBACK;
1224	priv->tx_obj = PCH_TX_OBJ_START; /* Point head of Tx Obj */
1225
1226	ndev->irq = pdev->irq;
1227	ndev->flags |= IFF_ECHO;
1228
1229	pci_set_drvdata(pdev, ndev);
1230	SET_NETDEV_DEV(ndev, &pdev->dev);
1231	ndev->netdev_ops = &pch_can_netdev_ops;
1232	priv->can.clock.freq = PCH_CAN_CLK; /* Hz */
1233
1234	netif_napi_add(ndev, &priv->napi, pch_can_poll, PCH_RX_OBJ_END);
1235
1236	rc = pci_enable_msi(priv->dev);
1237	if (rc) {
1238		netdev_err(ndev, "PCH CAN opened without MSI\n");
1239		priv->use_msi = 0;
1240	} else {
1241		netdev_err(ndev, "PCH CAN opened with MSI\n");
1242		pci_set_master(pdev);
1243		priv->use_msi = 1;
1244	}
1245
1246	rc = register_candev(ndev);
1247	if (rc) {
1248		dev_err(&pdev->dev, "Failed register_candev %d\n", rc);
1249		goto probe_exit_reg_candev;
1250	}
1251
1252	return 0;
1253
1254probe_exit_reg_candev:
1255	if (priv->use_msi)
1256		pci_disable_msi(priv->dev);
1257	free_candev(ndev);
1258probe_exit_alloc_candev:
1259	pci_iounmap(pdev, addr);
1260probe_exit_ipmap:
1261	pci_release_regions(pdev);
1262probe_exit_pcireq:
1263	pci_disable_device(pdev);
1264probe_exit_endev:
1265	return rc;
1266}
1267
1268static struct pci_driver pch_can_pci_driver = {
1269	.name = "pch_can",
1270	.id_table = pch_pci_tbl,
1271	.probe = pch_can_probe,
1272	.remove = pch_can_remove,
1273	.suspend = pch_can_suspend,
1274	.resume = pch_can_resume,
1275};
1276
1277module_pci_driver(pch_can_pci_driver);
1278
1279MODULE_DESCRIPTION("Intel EG20T PCH CAN(Controller Area Network) Driver");
1280MODULE_LICENSE("GPL v2");
1281MODULE_VERSION("0.94");
1282