2 * Copyright (C) 1999 - 2010 Intel Corporation.
3 * Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD.
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.
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.
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.
19 #include <linux/interrupt.h>
20 #include <linux/delay.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>
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. */
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)
68 #define PCH_STATUS_INT 0x8000
69 #define PCH_REC 0x00007f00
70 #define PCH_TEC 0x000000ff
72 #define PCH_TX_OK BIT(3)
73 #define PCH_RX_OK BIT(4)
74 #define PCH_EPASSIV BIT(5)
75 #define PCH_EWARN BIT(6)
76 #define PCH_BUS_OFF BIT(7)
78 /* bit position of certain controller bits. */
79 #define PCH_BIT_BRP_SHIFT 0
80 #define PCH_BIT_SJW_SHIFT 6
81 #define PCH_BIT_TSEG1_SHIFT 8
82 #define PCH_BIT_TSEG2_SHIFT 12
83 #define PCH_BIT_BRPE_BRPE_SHIFT 6
85 #define PCH_MSK_BITT_BRP 0x3f
86 #define PCH_MSK_BRPE_BRPE 0x3c0
87 #define PCH_MSK_CTRL_IE_SIE_EIE 0x07
88 #define PCH_COUNTER_LIMIT 10
90 #define PCH_CAN_CLK 50000000 /* 50MHz */
93 * Define the number of message object.
94 * PCH CAN communications are done via Message RAM.
95 * The Message RAM consists of 32 message objects.
97 #define PCH_RX_OBJ_NUM 26
98 #define PCH_TX_OBJ_NUM 6
99 #define PCH_RX_OBJ_START 1
100 #define PCH_RX_OBJ_END PCH_RX_OBJ_NUM
101 #define PCH_TX_OBJ_START (PCH_RX_OBJ_END + 1)
102 #define PCH_TX_OBJ_END (PCH_RX_OBJ_NUM + PCH_TX_OBJ_NUM)
104 #define PCH_FIFO_THRESH 16
106 /* TxRqst2 show status of MsgObjNo.17~32 */
107 #define PCH_TREQ2_TX_MASK (((1 << PCH_TX_OBJ_NUM) - 1) <<\
108 (PCH_RX_OBJ_END - 16))
134 struct pch_can_if_regs
{
146 struct pch_can_regs
{
155 struct pch_can_if_regs ifregs
[2]; /* [0]=if1 [1]=if2 */
172 struct pch_can_priv
{
175 u32 tx_enable
[PCH_TX_OBJ_END
];
176 u32 rx_enable
[PCH_TX_OBJ_END
];
177 u32 rx_link
[PCH_TX_OBJ_END
];
179 struct net_device
*ndev
;
180 struct pch_can_regs __iomem
*regs
;
181 struct napi_struct napi
;
182 int tx_obj
; /* Point next Tx Obj index */
186 static struct can_bittiming_const pch_can_bittiming_const
= {
187 .name
= KBUILD_MODNAME
,
194 .brp_max
= 1024, /* 6bit + extended 4bit */
198 static DEFINE_PCI_DEVICE_TABLE(pch_pci_tbl
) = {
199 {PCI_VENDOR_ID_INTEL
, 0x8818, PCI_ANY_ID
, PCI_ANY_ID
,},
202 MODULE_DEVICE_TABLE(pci
, pch_pci_tbl
);
204 static inline void pch_can_bit_set(void __iomem
*addr
, u32 mask
)
206 iowrite32(ioread32(addr
) | mask
, addr
);
209 static inline void pch_can_bit_clear(void __iomem
*addr
, u32 mask
)
211 iowrite32(ioread32(addr
) & ~mask
, addr
);
214 static void pch_can_set_run_mode(struct pch_can_priv
*priv
,
215 enum pch_can_mode mode
)
219 pch_can_bit_clear(&priv
->regs
->cont
, PCH_CTRL_INIT
);
223 pch_can_bit_set(&priv
->regs
->cont
, PCH_CTRL_INIT
);
227 netdev_err(priv
->ndev
, "%s -> Invalid Mode.\n", __func__
);
232 static void pch_can_set_optmode(struct pch_can_priv
*priv
)
234 u32 reg_val
= ioread32(&priv
->regs
->opt
);
236 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
237 reg_val
|= PCH_OPT_SILENT
;
239 if (priv
->can
.ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
240 reg_val
|= PCH_OPT_LBACK
;
242 pch_can_bit_set(&priv
->regs
->cont
, PCH_CTRL_OPT
);
243 iowrite32(reg_val
, &priv
->regs
->opt
);
246 static void pch_can_rw_msg_obj(void __iomem
*creq_addr
, u32 num
)
248 int counter
= PCH_COUNTER_LIMIT
;
251 iowrite32(num
, creq_addr
);
253 ifx_creq
= ioread32(creq_addr
) & PCH_IF_CREQ_BUSY
;
260 pr_err("%s:IF1 BUSY Flag is set forever.\n", __func__
);
263 static void pch_can_set_int_enables(struct pch_can_priv
*priv
,
264 enum pch_can_mode interrupt_no
)
266 switch (interrupt_no
) {
267 case PCH_CAN_DISABLE
:
268 pch_can_bit_clear(&priv
->regs
->cont
, PCH_CTRL_IE
);
272 pch_can_bit_set(&priv
->regs
->cont
, PCH_CTRL_IE_SIE_EIE
);
276 pch_can_bit_clear(&priv
->regs
->cont
, PCH_CTRL_IE_SIE_EIE
);
280 netdev_err(priv
->ndev
, "Invalid interrupt number.\n");
285 static void pch_can_set_rxtx(struct pch_can_priv
*priv
, u32 buff_num
,
286 int set
, enum pch_ifreg dir
)
291 ie
= PCH_IF_MCONT_TXIE
;
293 ie
= PCH_IF_MCONT_RXIE
;
295 /* Reading the Msg buffer from Message RAM to IF1/2 registers. */
296 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[dir
].cmask
);
297 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[dir
].creq
, buff_num
);
299 /* Setting the IF1/2MASK1 register to access MsgVal and RxIE bits */
300 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_ARB
| PCH_CMASK_CTRL
,
301 &priv
->regs
->ifregs
[dir
].cmask
);
304 /* Setting the MsgVal and RxIE/TxIE bits */
305 pch_can_bit_set(&priv
->regs
->ifregs
[dir
].mcont
, ie
);
306 pch_can_bit_set(&priv
->regs
->ifregs
[dir
].id2
, PCH_ID_MSGVAL
);
308 /* Clearing the MsgVal and RxIE/TxIE bits */
309 pch_can_bit_clear(&priv
->regs
->ifregs
[dir
].mcont
, ie
);
310 pch_can_bit_clear(&priv
->regs
->ifregs
[dir
].id2
, PCH_ID_MSGVAL
);
313 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[dir
].creq
, buff_num
);
316 static void pch_can_set_rx_all(struct pch_can_priv
*priv
, int set
)
320 /* Traversing to obtain the object configured as receivers. */
321 for (i
= PCH_RX_OBJ_START
; i
<= PCH_RX_OBJ_END
; i
++)
322 pch_can_set_rxtx(priv
, i
, set
, PCH_RX_IFREG
);
325 static void pch_can_set_tx_all(struct pch_can_priv
*priv
, int set
)
329 /* Traversing to obtain the object configured as transmit object. */
330 for (i
= PCH_TX_OBJ_START
; i
<= PCH_TX_OBJ_END
; i
++)
331 pch_can_set_rxtx(priv
, i
, set
, PCH_TX_IFREG
);
334 static u32
pch_can_int_pending(struct pch_can_priv
*priv
)
336 return ioread32(&priv
->regs
->intr
) & 0xffff;
339 static void pch_can_clear_if_buffers(struct pch_can_priv
*priv
)
341 int i
; /* Msg Obj ID (1~32) */
343 for (i
= PCH_RX_OBJ_START
; i
<= PCH_TX_OBJ_END
; i
++) {
344 iowrite32(PCH_CMASK_RX_TX_SET
, &priv
->regs
->ifregs
[0].cmask
);
345 iowrite32(0xffff, &priv
->regs
->ifregs
[0].mask1
);
346 iowrite32(0xffff, &priv
->regs
->ifregs
[0].mask2
);
347 iowrite32(0x0, &priv
->regs
->ifregs
[0].id1
);
348 iowrite32(0x0, &priv
->regs
->ifregs
[0].id2
);
349 iowrite32(0x0, &priv
->regs
->ifregs
[0].mcont
);
350 iowrite32(0x0, &priv
->regs
->ifregs
[0].data
[0]);
351 iowrite32(0x0, &priv
->regs
->ifregs
[0].data
[1]);
352 iowrite32(0x0, &priv
->regs
->ifregs
[0].data
[2]);
353 iowrite32(0x0, &priv
->regs
->ifregs
[0].data
[3]);
354 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_MASK
|
355 PCH_CMASK_ARB
| PCH_CMASK_CTRL
,
356 &priv
->regs
->ifregs
[0].cmask
);
357 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, i
);
361 static void pch_can_config_rx_tx_buffers(struct pch_can_priv
*priv
)
365 for (i
= PCH_RX_OBJ_START
; i
<= PCH_RX_OBJ_END
; i
++) {
366 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[0].cmask
);
367 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, i
);
369 iowrite32(0x0, &priv
->regs
->ifregs
[0].id1
);
370 iowrite32(0x0, &priv
->regs
->ifregs
[0].id2
);
372 pch_can_bit_set(&priv
->regs
->ifregs
[0].mcont
,
375 /* In case FIFO mode, Last EoB of Rx Obj must be 1 */
376 if (i
== PCH_RX_OBJ_END
)
377 pch_can_bit_set(&priv
->regs
->ifregs
[0].mcont
,
380 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mcont
,
383 iowrite32(0, &priv
->regs
->ifregs
[0].mask1
);
384 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mask2
,
385 0x1fff | PCH_MASK2_MDIR_MXTD
);
387 /* Setting CMASK for writing */
388 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_MASK
| PCH_CMASK_ARB
|
389 PCH_CMASK_CTRL
, &priv
->regs
->ifregs
[0].cmask
);
391 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, i
);
394 for (i
= PCH_TX_OBJ_START
; i
<= PCH_TX_OBJ_END
; i
++) {
395 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[1].cmask
);
396 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[1].creq
, i
);
398 /* Resetting DIR bit for reception */
399 iowrite32(0x0, &priv
->regs
->ifregs
[1].id1
);
400 iowrite32(PCH_ID2_DIR
, &priv
->regs
->ifregs
[1].id2
);
402 /* Setting EOB bit for transmitter */
403 iowrite32(PCH_IF_MCONT_EOB
| PCH_IF_MCONT_UMASK
,
404 &priv
->regs
->ifregs
[1].mcont
);
406 iowrite32(0, &priv
->regs
->ifregs
[1].mask1
);
407 pch_can_bit_clear(&priv
->regs
->ifregs
[1].mask2
, 0x1fff);
409 /* Setting CMASK for writing */
410 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_MASK
| PCH_CMASK_ARB
|
411 PCH_CMASK_CTRL
, &priv
->regs
->ifregs
[1].cmask
);
413 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[1].creq
, i
);
417 static void pch_can_init(struct pch_can_priv
*priv
)
419 /* Stopping the Can device. */
420 pch_can_set_run_mode(priv
, PCH_CAN_STOP
);
422 /* Clearing all the message object buffers. */
423 pch_can_clear_if_buffers(priv
);
425 /* Configuring the respective message object as either rx/tx object. */
426 pch_can_config_rx_tx_buffers(priv
);
428 /* Enabling the interrupts. */
429 pch_can_set_int_enables(priv
, PCH_CAN_ALL
);
432 static void pch_can_release(struct pch_can_priv
*priv
)
434 /* Stooping the CAN device. */
435 pch_can_set_run_mode(priv
, PCH_CAN_STOP
);
437 /* Disabling the interrupts. */
438 pch_can_set_int_enables(priv
, PCH_CAN_NONE
);
440 /* Disabling all the receive object. */
441 pch_can_set_rx_all(priv
, 0);
443 /* Disabling all the transmit object. */
444 pch_can_set_tx_all(priv
, 0);
447 /* This function clears interrupt(s) from the CAN device. */
448 static void pch_can_int_clr(struct pch_can_priv
*priv
, u32 mask
)
450 /* Clear interrupt for transmit object */
451 if ((mask
>= PCH_RX_OBJ_START
) && (mask
<= PCH_RX_OBJ_END
)) {
452 /* Setting CMASK for clearing the reception interrupts. */
453 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_CTRL
| PCH_CMASK_ARB
,
454 &priv
->regs
->ifregs
[0].cmask
);
456 /* Clearing the Dir bit. */
457 pch_can_bit_clear(&priv
->regs
->ifregs
[0].id2
, PCH_ID2_DIR
);
459 /* Clearing NewDat & IntPnd */
460 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mcont
,
461 PCH_IF_MCONT_NEWDAT
| PCH_IF_MCONT_INTPND
);
463 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, mask
);
464 } else if ((mask
>= PCH_TX_OBJ_START
) && (mask
<= PCH_TX_OBJ_END
)) {
466 * Setting CMASK for clearing interrupts for frame transmission.
468 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_CTRL
| PCH_CMASK_ARB
,
469 &priv
->regs
->ifregs
[1].cmask
);
471 /* Resetting the ID registers. */
472 pch_can_bit_set(&priv
->regs
->ifregs
[1].id2
,
473 PCH_ID2_DIR
| (0x7ff << 2));
474 iowrite32(0x0, &priv
->regs
->ifregs
[1].id1
);
476 /* Claring NewDat, TxRqst & IntPnd */
477 pch_can_bit_clear(&priv
->regs
->ifregs
[1].mcont
,
478 PCH_IF_MCONT_NEWDAT
| PCH_IF_MCONT_INTPND
|
479 PCH_IF_MCONT_TXRQXT
);
480 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[1].creq
, mask
);
484 static void pch_can_reset(struct pch_can_priv
*priv
)
486 /* write to sw reset register */
487 iowrite32(1, &priv
->regs
->srst
);
488 iowrite32(0, &priv
->regs
->srst
);
491 static void pch_can_error(struct net_device
*ndev
, u32 status
)
494 struct pch_can_priv
*priv
= netdev_priv(ndev
);
495 struct can_frame
*cf
;
497 struct net_device_stats
*stats
= &(priv
->ndev
->stats
);
498 enum can_state state
= priv
->can
.state
;
500 skb
= alloc_can_err_skb(ndev
, &cf
);
504 if (status
& PCH_BUS_OFF
) {
505 pch_can_set_tx_all(priv
, 0);
506 pch_can_set_rx_all(priv
, 0);
507 state
= CAN_STATE_BUS_OFF
;
508 cf
->can_id
|= CAN_ERR_BUSOFF
;
512 errc
= ioread32(&priv
->regs
->errc
);
513 /* Warning interrupt. */
514 if (status
& PCH_EWARN
) {
515 state
= CAN_STATE_ERROR_WARNING
;
516 priv
->can
.can_stats
.error_warning
++;
517 cf
->can_id
|= CAN_ERR_CRTL
;
518 if (((errc
& PCH_REC
) >> 8) > 96)
519 cf
->data
[1] |= CAN_ERR_CRTL_RX_WARNING
;
520 if ((errc
& PCH_TEC
) > 96)
521 cf
->data
[1] |= CAN_ERR_CRTL_TX_WARNING
;
523 "%s -> Error Counter is more than 96.\n", __func__
);
525 /* Error passive interrupt. */
526 if (status
& PCH_EPASSIV
) {
527 priv
->can
.can_stats
.error_passive
++;
528 state
= CAN_STATE_ERROR_PASSIVE
;
529 cf
->can_id
|= CAN_ERR_CRTL
;
530 if (((errc
& PCH_REC
) >> 8) > 127)
531 cf
->data
[1] |= CAN_ERR_CRTL_RX_PASSIVE
;
532 if ((errc
& PCH_TEC
) > 127)
533 cf
->data
[1] |= CAN_ERR_CRTL_TX_PASSIVE
;
535 "%s -> CAN controller is ERROR PASSIVE .\n", __func__
);
538 lec
= status
& PCH_LEC_ALL
;
541 cf
->data
[2] |= CAN_ERR_PROT_STUFF
;
542 priv
->can
.can_stats
.bus_error
++;
546 cf
->data
[2] |= CAN_ERR_PROT_FORM
;
547 priv
->can
.can_stats
.bus_error
++;
551 cf
->can_id
|= CAN_ERR_ACK
;
552 priv
->can
.can_stats
.bus_error
++;
557 cf
->data
[2] |= CAN_ERR_PROT_BIT
;
558 priv
->can
.can_stats
.bus_error
++;
562 cf
->data
[2] |= CAN_ERR_PROT_LOC_CRC_SEQ
|
563 CAN_ERR_PROT_LOC_CRC_DEL
;
564 priv
->can
.can_stats
.bus_error
++;
567 case PCH_LEC_ALL
: /* Written by CPU. No error status */
571 cf
->data
[6] = errc
& PCH_TEC
;
572 cf
->data
[7] = (errc
& PCH_REC
) >> 8;
574 priv
->can
.state
= state
;
575 netif_receive_skb(skb
);
578 stats
->rx_bytes
+= cf
->can_dlc
;
581 static irqreturn_t
pch_can_interrupt(int irq
, void *dev_id
)
583 struct net_device
*ndev
= (struct net_device
*)dev_id
;
584 struct pch_can_priv
*priv
= netdev_priv(ndev
);
586 if (!pch_can_int_pending(priv
))
589 pch_can_set_int_enables(priv
, PCH_CAN_NONE
);
590 napi_schedule(&priv
->napi
);
594 static void pch_fifo_thresh(struct pch_can_priv
*priv
, int obj_id
)
596 if (obj_id
< PCH_FIFO_THRESH
) {
597 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_CTRL
|
598 PCH_CMASK_ARB
, &priv
->regs
->ifregs
[0].cmask
);
600 /* Clearing the Dir bit. */
601 pch_can_bit_clear(&priv
->regs
->ifregs
[0].id2
, PCH_ID2_DIR
);
603 /* Clearing NewDat & IntPnd */
604 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mcont
,
605 PCH_IF_MCONT_INTPND
);
606 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, obj_id
);
607 } else if (obj_id
> PCH_FIFO_THRESH
) {
608 pch_can_int_clr(priv
, obj_id
);
609 } else if (obj_id
== PCH_FIFO_THRESH
) {
611 for (cnt
= 0; cnt
< PCH_FIFO_THRESH
; cnt
++)
612 pch_can_int_clr(priv
, cnt
+ 1);
616 static void pch_can_rx_msg_lost(struct net_device
*ndev
, int obj_id
)
618 struct pch_can_priv
*priv
= netdev_priv(ndev
);
619 struct net_device_stats
*stats
= &(priv
->ndev
->stats
);
621 struct can_frame
*cf
;
623 netdev_dbg(priv
->ndev
, "Msg Obj is overwritten.\n");
624 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mcont
,
625 PCH_IF_MCONT_MSGLOST
);
626 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_CTRL
,
627 &priv
->regs
->ifregs
[0].cmask
);
628 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, obj_id
);
630 skb
= alloc_can_err_skb(ndev
, &cf
);
634 cf
->can_id
|= CAN_ERR_CRTL
;
635 cf
->data
[1] = CAN_ERR_CRTL_RX_OVERFLOW
;
636 stats
->rx_over_errors
++;
639 netif_receive_skb(skb
);
642 static int pch_can_rx_normal(struct net_device
*ndev
, u32 obj_num
, int quota
)
648 struct can_frame
*cf
;
649 struct pch_can_priv
*priv
= netdev_priv(ndev
);
650 struct net_device_stats
*stats
= &(priv
->ndev
->stats
);
656 /* Reading the messsage object from the Message RAM */
657 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[0].cmask
);
658 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, obj_num
);
660 /* Reading the MCONT register. */
661 reg
= ioread32(&priv
->regs
->ifregs
[0].mcont
);
663 if (reg
& PCH_IF_MCONT_EOB
)
666 /* If MsgLost bit set. */
667 if (reg
& PCH_IF_MCONT_MSGLOST
) {
668 pch_can_rx_msg_lost(ndev
, obj_num
);
673 } else if (!(reg
& PCH_IF_MCONT_NEWDAT
)) {
678 skb
= alloc_can_skb(priv
->ndev
, &cf
);
680 netdev_err(ndev
, "alloc_can_skb Failed\n");
684 /* Get Received data */
685 id2
= ioread32(&priv
->regs
->ifregs
[0].id2
);
686 if (id2
& PCH_ID2_XTD
) {
687 id
= (ioread32(&priv
->regs
->ifregs
[0].id1
) & 0xffff);
688 id
|= (((id2
) & 0x1fff) << 16);
689 cf
->can_id
= id
| CAN_EFF_FLAG
;
691 id
= (id2
>> 2) & CAN_SFF_MASK
;
695 if (id2
& PCH_ID2_DIR
)
696 cf
->can_id
|= CAN_RTR_FLAG
;
698 cf
->can_dlc
= get_can_dlc((ioread32(&priv
->regs
->
699 ifregs
[0].mcont
)) & 0xF);
701 for (i
= 0; i
< cf
->can_dlc
; i
+= 2) {
702 data_reg
= ioread16(&priv
->regs
->ifregs
[0].data
[i
/ 2]);
703 cf
->data
[i
] = data_reg
;
704 cf
->data
[i
+ 1] = data_reg
>> 8;
707 netif_receive_skb(skb
);
711 stats
->rx_bytes
+= cf
->can_dlc
;
713 pch_fifo_thresh(priv
, obj_num
);
720 static void pch_can_tx_complete(struct net_device
*ndev
, u32 int_stat
)
722 struct pch_can_priv
*priv
= netdev_priv(ndev
);
723 struct net_device_stats
*stats
= &(priv
->ndev
->stats
);
726 can_get_echo_skb(ndev
, int_stat
- PCH_RX_OBJ_END
- 1);
727 iowrite32(PCH_CMASK_RX_TX_GET
| PCH_CMASK_CLRINTPND
,
728 &priv
->regs
->ifregs
[1].cmask
);
729 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[1].creq
, int_stat
);
730 dlc
= get_can_dlc(ioread32(&priv
->regs
->ifregs
[1].mcont
) &
732 stats
->tx_bytes
+= dlc
;
734 if (int_stat
== PCH_TX_OBJ_END
)
735 netif_wake_queue(ndev
);
738 static int pch_can_poll(struct napi_struct
*napi
, int quota
)
740 struct net_device
*ndev
= napi
->dev
;
741 struct pch_can_priv
*priv
= netdev_priv(ndev
);
744 int quota_save
= quota
;
746 int_stat
= pch_can_int_pending(priv
);
750 if (int_stat
== PCH_STATUS_INT
) {
751 reg_stat
= ioread32(&priv
->regs
->stat
);
753 if ((reg_stat
& (PCH_BUS_OFF
| PCH_LEC_ALL
)) &&
754 ((reg_stat
& PCH_LEC_ALL
) != PCH_LEC_ALL
)) {
755 pch_can_error(ndev
, reg_stat
);
759 if (reg_stat
& (PCH_TX_OK
| PCH_RX_OK
))
760 pch_can_bit_clear(&priv
->regs
->stat
,
761 reg_stat
& (PCH_TX_OK
| PCH_RX_OK
));
763 int_stat
= pch_can_int_pending(priv
);
769 if ((int_stat
>= PCH_RX_OBJ_START
) && (int_stat
<= PCH_RX_OBJ_END
)) {
770 quota
-= pch_can_rx_normal(ndev
, int_stat
, quota
);
771 } else if ((int_stat
>= PCH_TX_OBJ_START
) &&
772 (int_stat
<= PCH_TX_OBJ_END
)) {
773 /* Handle transmission interrupt */
774 pch_can_tx_complete(ndev
, int_stat
);
779 pch_can_set_int_enables(priv
, PCH_CAN_ALL
);
781 return quota_save
- quota
;
784 static int pch_set_bittiming(struct net_device
*ndev
)
786 struct pch_can_priv
*priv
= netdev_priv(ndev
);
787 const struct can_bittiming
*bt
= &priv
->can
.bittiming
;
791 /* Setting the CCE bit for accessing the Can Timing register. */
792 pch_can_bit_set(&priv
->regs
->cont
, PCH_CTRL_CCE
);
794 canbit
= (bt
->brp
- 1) & PCH_MSK_BITT_BRP
;
795 canbit
|= (bt
->sjw
- 1) << PCH_BIT_SJW_SHIFT
;
796 canbit
|= (bt
->phase_seg1
+ bt
->prop_seg
- 1) << PCH_BIT_TSEG1_SHIFT
;
797 canbit
|= (bt
->phase_seg2
- 1) << PCH_BIT_TSEG2_SHIFT
;
798 bepe
= ((bt
->brp
- 1) & PCH_MSK_BRPE_BRPE
) >> PCH_BIT_BRPE_BRPE_SHIFT
;
799 iowrite32(canbit
, &priv
->regs
->bitt
);
800 iowrite32(bepe
, &priv
->regs
->brpe
);
801 pch_can_bit_clear(&priv
->regs
->cont
, PCH_CTRL_CCE
);
806 static void pch_can_start(struct net_device
*ndev
)
808 struct pch_can_priv
*priv
= netdev_priv(ndev
);
810 if (priv
->can
.state
!= CAN_STATE_STOPPED
)
813 pch_set_bittiming(ndev
);
814 pch_can_set_optmode(priv
);
816 pch_can_set_tx_all(priv
, 1);
817 pch_can_set_rx_all(priv
, 1);
819 /* Setting the CAN to run mode. */
820 pch_can_set_run_mode(priv
, PCH_CAN_RUN
);
822 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
827 static int pch_can_do_set_mode(struct net_device
*ndev
, enum can_mode mode
)
834 netif_wake_queue(ndev
);
844 static int pch_can_open(struct net_device
*ndev
)
846 struct pch_can_priv
*priv
= netdev_priv(ndev
);
849 /* Regstering the interrupt. */
850 retval
= request_irq(priv
->dev
->irq
, pch_can_interrupt
, IRQF_SHARED
,
853 netdev_err(ndev
, "request_irq failed.\n");
857 /* Open common can device */
858 retval
= open_candev(ndev
);
860 netdev_err(ndev
, "open_candev() failed %d\n", retval
);
861 goto err_open_candev
;
866 napi_enable(&priv
->napi
);
867 netif_start_queue(ndev
);
872 free_irq(priv
->dev
->irq
, ndev
);
874 pch_can_release(priv
);
879 static int pch_close(struct net_device
*ndev
)
881 struct pch_can_priv
*priv
= netdev_priv(ndev
);
883 netif_stop_queue(ndev
);
884 napi_disable(&priv
->napi
);
885 pch_can_release(priv
);
886 free_irq(priv
->dev
->irq
, ndev
);
888 priv
->can
.state
= CAN_STATE_STOPPED
;
892 static netdev_tx_t
pch_xmit(struct sk_buff
*skb
, struct net_device
*ndev
)
894 struct pch_can_priv
*priv
= netdev_priv(ndev
);
895 struct can_frame
*cf
= (struct can_frame
*)skb
->data
;
900 if (can_dropped_invalid_skb(ndev
, skb
))
903 tx_obj_no
= priv
->tx_obj
;
904 if (priv
->tx_obj
== PCH_TX_OBJ_END
) {
905 if (ioread32(&priv
->regs
->treq2
) & PCH_TREQ2_TX_MASK
)
906 netif_stop_queue(ndev
);
908 priv
->tx_obj
= PCH_TX_OBJ_START
;
913 /* Setting the CMASK register. */
914 pch_can_bit_set(&priv
->regs
->ifregs
[1].cmask
, PCH_CMASK_ALL
);
916 /* If ID extended is set. */
917 if (cf
->can_id
& CAN_EFF_FLAG
) {
918 iowrite32(cf
->can_id
& 0xffff, &priv
->regs
->ifregs
[1].id1
);
919 id2
= ((cf
->can_id
>> 16) & 0x1fff) | PCH_ID2_XTD
;
921 iowrite32(0, &priv
->regs
->ifregs
[1].id1
);
922 id2
= (cf
->can_id
& CAN_SFF_MASK
) << 2;
925 id2
|= PCH_ID_MSGVAL
;
927 /* If remote frame has to be transmitted.. */
928 if (!(cf
->can_id
& CAN_RTR_FLAG
))
931 iowrite32(id2
, &priv
->regs
->ifregs
[1].id2
);
933 /* Copy data to register */
934 for (i
= 0; i
< cf
->can_dlc
; i
+= 2) {
935 iowrite16(cf
->data
[i
] | (cf
->data
[i
+ 1] << 8),
936 &priv
->regs
->ifregs
[1].data
[i
/ 2]);
939 can_put_echo_skb(skb
, ndev
, tx_obj_no
- PCH_RX_OBJ_END
- 1);
941 /* Set the size of the data. Update if2_mcont */
942 iowrite32(cf
->can_dlc
| PCH_IF_MCONT_NEWDAT
| PCH_IF_MCONT_TXRQXT
|
943 PCH_IF_MCONT_TXIE
, &priv
->regs
->ifregs
[1].mcont
);
945 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[1].creq
, tx_obj_no
);
950 static const struct net_device_ops pch_can_netdev_ops
= {
951 .ndo_open
= pch_can_open
,
952 .ndo_stop
= pch_close
,
953 .ndo_start_xmit
= pch_xmit
,
956 static void __devexit
pch_can_remove(struct pci_dev
*pdev
)
958 struct net_device
*ndev
= pci_get_drvdata(pdev
);
959 struct pch_can_priv
*priv
= netdev_priv(ndev
);
961 unregister_candev(priv
->ndev
);
963 pci_disable_msi(priv
->dev
);
964 pci_release_regions(pdev
);
965 pci_disable_device(pdev
);
966 pci_set_drvdata(pdev
, NULL
);
968 pci_iounmap(pdev
, priv
->regs
);
969 free_candev(priv
->ndev
);
973 static void pch_can_set_int_custom(struct pch_can_priv
*priv
)
975 /* Clearing the IE, SIE and EIE bits of Can control register. */
976 pch_can_bit_clear(&priv
->regs
->cont
, PCH_CTRL_IE_SIE_EIE
);
978 /* Appropriately setting them. */
979 pch_can_bit_set(&priv
->regs
->cont
,
980 ((priv
->int_enables
& PCH_MSK_CTRL_IE_SIE_EIE
) << 1));
983 /* This function retrieves interrupt enabled for the CAN device. */
984 static u32
pch_can_get_int_enables(struct pch_can_priv
*priv
)
986 /* Obtaining the status of IE, SIE and EIE interrupt bits. */
987 return (ioread32(&priv
->regs
->cont
) & PCH_CTRL_IE_SIE_EIE
) >> 1;
990 static u32
pch_can_get_rxtx_ir(struct pch_can_priv
*priv
, u32 buff_num
,
996 ie
= PCH_IF_MCONT_RXIE
;
998 ie
= PCH_IF_MCONT_TXIE
;
1000 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[dir
].cmask
);
1001 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[dir
].creq
, buff_num
);
1003 if (((ioread32(&priv
->regs
->ifregs
[dir
].id2
)) & PCH_ID_MSGVAL
) &&
1004 ((ioread32(&priv
->regs
->ifregs
[dir
].mcont
)) & ie
))
1012 static void pch_can_set_rx_buffer_link(struct pch_can_priv
*priv
,
1013 u32 buffer_num
, int set
)
1015 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[0].cmask
);
1016 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, buffer_num
);
1017 iowrite32(PCH_CMASK_RDWR
| PCH_CMASK_CTRL
,
1018 &priv
->regs
->ifregs
[0].cmask
);
1020 pch_can_bit_clear(&priv
->regs
->ifregs
[0].mcont
,
1023 pch_can_bit_set(&priv
->regs
->ifregs
[0].mcont
, PCH_IF_MCONT_EOB
);
1025 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, buffer_num
);
1028 static u32
pch_can_get_rx_buffer_link(struct pch_can_priv
*priv
, u32 buffer_num
)
1032 iowrite32(PCH_CMASK_RX_TX_GET
, &priv
->regs
->ifregs
[0].cmask
);
1033 pch_can_rw_msg_obj(&priv
->regs
->ifregs
[0].creq
, buffer_num
);
1035 if (ioread32(&priv
->regs
->ifregs
[0].mcont
) & PCH_IF_MCONT_EOB
)
1042 static int pch_can_get_buffer_status(struct pch_can_priv
*priv
)
1044 return (ioread32(&priv
->regs
->treq1
) & 0xffff) |
1045 (ioread32(&priv
->regs
->treq2
) << 16);
1048 static int pch_can_suspend(struct pci_dev
*pdev
, pm_message_t state
)
1052 u32 buf_stat
; /* Variable for reading the transmit buffer status. */
1053 int counter
= PCH_COUNTER_LIMIT
;
1055 struct net_device
*dev
= pci_get_drvdata(pdev
);
1056 struct pch_can_priv
*priv
= netdev_priv(dev
);
1058 /* Stop the CAN controller */
1059 pch_can_set_run_mode(priv
, PCH_CAN_STOP
);
1061 /* Indicate that we are aboutto/in suspend */
1062 priv
->can
.state
= CAN_STATE_STOPPED
;
1064 /* Waiting for all transmission to complete. */
1066 buf_stat
= pch_can_get_buffer_status(priv
);
1073 dev_err(&pdev
->dev
, "%s -> Transmission time out.\n", __func__
);
1075 /* Save interrupt configuration and then disable them */
1076 priv
->int_enables
= pch_can_get_int_enables(priv
);
1077 pch_can_set_int_enables(priv
, PCH_CAN_DISABLE
);
1079 /* Save Tx buffer enable state */
1080 for (i
= PCH_TX_OBJ_START
; i
<= PCH_TX_OBJ_END
; i
++)
1081 priv
->tx_enable
[i
- 1] = pch_can_get_rxtx_ir(priv
, i
,
1084 /* Disable all Transmit buffers */
1085 pch_can_set_tx_all(priv
, 0);
1087 /* Save Rx buffer enable state */
1088 for (i
= PCH_RX_OBJ_START
; i
<= PCH_RX_OBJ_END
; i
++) {
1089 priv
->rx_enable
[i
- 1] = pch_can_get_rxtx_ir(priv
, i
,
1091 priv
->rx_link
[i
- 1] = pch_can_get_rx_buffer_link(priv
, i
);
1094 /* Disable all Receive buffers */
1095 pch_can_set_rx_all(priv
, 0);
1096 retval
= pci_save_state(pdev
);
1098 dev_err(&pdev
->dev
, "pci_save_state failed.\n");
1100 pci_enable_wake(pdev
, PCI_D3hot
, 0);
1101 pci_disable_device(pdev
);
1102 pci_set_power_state(pdev
, pci_choose_state(pdev
, state
));
1108 static int pch_can_resume(struct pci_dev
*pdev
)
1112 struct net_device
*dev
= pci_get_drvdata(pdev
);
1113 struct pch_can_priv
*priv
= netdev_priv(dev
);
1115 pci_set_power_state(pdev
, PCI_D0
);
1116 pci_restore_state(pdev
);
1117 retval
= pci_enable_device(pdev
);
1119 dev_err(&pdev
->dev
, "pci_enable_device failed.\n");
1123 pci_enable_wake(pdev
, PCI_D3hot
, 0);
1125 priv
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
1127 /* Disabling all interrupts. */
1128 pch_can_set_int_enables(priv
, PCH_CAN_DISABLE
);
1130 /* Setting the CAN device in Stop Mode. */
1131 pch_can_set_run_mode(priv
, PCH_CAN_STOP
);
1133 /* Configuring the transmit and receive buffers. */
1134 pch_can_config_rx_tx_buffers(priv
);
1136 /* Restore the CAN state */
1137 pch_set_bittiming(dev
);
1140 pch_can_set_optmode(priv
);
1142 /* Enabling the transmit buffer. */
1143 for (i
= PCH_TX_OBJ_START
; i
<= PCH_TX_OBJ_END
; i
++)
1144 pch_can_set_rxtx(priv
, i
, priv
->tx_enable
[i
- 1], PCH_TX_IFREG
);
1146 /* Configuring the receive buffer and enabling them. */
1147 for (i
= PCH_RX_OBJ_START
; i
<= PCH_RX_OBJ_END
; i
++) {
1148 /* Restore buffer link */
1149 pch_can_set_rx_buffer_link(priv
, i
, priv
->rx_link
[i
- 1]);
1151 /* Restore buffer enables */
1152 pch_can_set_rxtx(priv
, i
, priv
->rx_enable
[i
- 1], PCH_RX_IFREG
);
1155 /* Enable CAN Interrupts */
1156 pch_can_set_int_custom(priv
);
1158 /* Restore Run Mode */
1159 pch_can_set_run_mode(priv
, PCH_CAN_RUN
);
1164 #define pch_can_suspend NULL
1165 #define pch_can_resume NULL
1168 static int pch_can_get_berr_counter(const struct net_device
*dev
,
1169 struct can_berr_counter
*bec
)
1171 struct pch_can_priv
*priv
= netdev_priv(dev
);
1172 u32 errc
= ioread32(&priv
->regs
->errc
);
1174 bec
->txerr
= errc
& PCH_TEC
;
1175 bec
->rxerr
= (errc
& PCH_REC
) >> 8;
1180 static int __devinit
pch_can_probe(struct pci_dev
*pdev
,
1181 const struct pci_device_id
*id
)
1183 struct net_device
*ndev
;
1184 struct pch_can_priv
*priv
;
1188 rc
= pci_enable_device(pdev
);
1190 dev_err(&pdev
->dev
, "Failed pci_enable_device %d\n", rc
);
1191 goto probe_exit_endev
;
1194 rc
= pci_request_regions(pdev
, KBUILD_MODNAME
);
1196 dev_err(&pdev
->dev
, "Failed pci_request_regions %d\n", rc
);
1197 goto probe_exit_pcireq
;
1200 addr
= pci_iomap(pdev
, 1, 0);
1203 dev_err(&pdev
->dev
, "Failed pci_iomap\n");
1204 goto probe_exit_ipmap
;
1207 ndev
= alloc_candev(sizeof(struct pch_can_priv
), PCH_TX_OBJ_END
);
1210 dev_err(&pdev
->dev
, "Failed alloc_candev\n");
1211 goto probe_exit_alloc_candev
;
1214 priv
= netdev_priv(ndev
);
1218 priv
->can
.bittiming_const
= &pch_can_bittiming_const
;
1219 priv
->can
.do_set_mode
= pch_can_do_set_mode
;
1220 priv
->can
.do_get_berr_counter
= pch_can_get_berr_counter
;
1221 priv
->can
.ctrlmode_supported
= CAN_CTRLMODE_LISTENONLY
|
1222 CAN_CTRLMODE_LOOPBACK
;
1223 priv
->tx_obj
= PCH_TX_OBJ_START
; /* Point head of Tx Obj */
1225 ndev
->irq
= pdev
->irq
;
1226 ndev
->flags
|= IFF_ECHO
;
1228 pci_set_drvdata(pdev
, ndev
);
1229 SET_NETDEV_DEV(ndev
, &pdev
->dev
);
1230 ndev
->netdev_ops
= &pch_can_netdev_ops
;
1231 priv
->can
.clock
.freq
= PCH_CAN_CLK
; /* Hz */
1233 netif_napi_add(ndev
, &priv
->napi
, pch_can_poll
, PCH_RX_OBJ_END
);
1235 rc
= pci_enable_msi(priv
->dev
);
1237 netdev_err(ndev
, "PCH CAN opened without MSI\n");
1240 netdev_err(ndev
, "PCH CAN opened with MSI\n");
1241 pci_set_master(pdev
);
1245 rc
= register_candev(ndev
);
1247 dev_err(&pdev
->dev
, "Failed register_candev %d\n", rc
);
1248 goto probe_exit_reg_candev
;
1253 probe_exit_reg_candev
:
1255 pci_disable_msi(priv
->dev
);
1257 probe_exit_alloc_candev
:
1258 pci_iounmap(pdev
, addr
);
1260 pci_release_regions(pdev
);
1262 pci_disable_device(pdev
);
1267 static struct pci_driver pch_can_pci_driver
= {
1269 .id_table
= pch_pci_tbl
,
1270 .probe
= pch_can_probe
,
1271 .remove
= __devexit_p(pch_can_remove
),
1272 .suspend
= pch_can_suspend
,
1273 .resume
= pch_can_resume
,
1276 static int __init
pch_can_pci_init(void)
1278 return pci_register_driver(&pch_can_pci_driver
);
1280 module_init(pch_can_pci_init
);
1282 static void __exit
pch_can_pci_exit(void)
1284 pci_unregister_driver(&pch_can_pci_driver
);
1286 module_exit(pch_can_pci_exit
);
1288 MODULE_DESCRIPTION("Intel EG20T PCH CAN(Controller Area Network) Driver");
1289 MODULE_LICENSE("GPL v2");
1290 MODULE_VERSION("0.94");