@@ -71,10 +71,12 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
7171#define KVASER_PCIEFD_SYSID_BUILD_REG (KVASER_PCIEFD_SYSID_BASE + 0x14)
7272/* Shared receive buffer registers */
7373#define KVASER_PCIEFD_SRB_BASE 0x1f200
74+ #define KVASER_PCIEFD_SRB_FIFO_LAST_REG (KVASER_PCIEFD_SRB_BASE + 0x1f4)
7475#define KVASER_PCIEFD_SRB_CMD_REG (KVASER_PCIEFD_SRB_BASE + 0x200)
7576#define KVASER_PCIEFD_SRB_IEN_REG (KVASER_PCIEFD_SRB_BASE + 0x204)
7677#define KVASER_PCIEFD_SRB_IRQ_REG (KVASER_PCIEFD_SRB_BASE + 0x20c)
7778#define KVASER_PCIEFD_SRB_STAT_REG (KVASER_PCIEFD_SRB_BASE + 0x210)
79+ #define KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG (KVASER_PCIEFD_SRB_BASE + 0x214)
7880#define KVASER_PCIEFD_SRB_CTRL_REG (KVASER_PCIEFD_SRB_BASE + 0x218)
7981/* EPCS flash controller registers */
8082#define KVASER_PCIEFD_SPI_BASE 0x1fc00
@@ -111,6 +113,9 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
111113/* DMA support */
112114#define KVASER_PCIEFD_SRB_STAT_DMA BIT(24)
113115
116+ /* SRB current packet level */
117+ #define KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK 0xff
118+
114119/* DMA Enable */
115120#define KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE BIT(0)
116121
@@ -526,7 +531,7 @@ static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can)
526531 KVASER_PCIEFD_KCAN_IRQ_TOF | KVASER_PCIEFD_KCAN_IRQ_ABD |
527532 KVASER_PCIEFD_KCAN_IRQ_TAE | KVASER_PCIEFD_KCAN_IRQ_TAL |
528533 KVASER_PCIEFD_KCAN_IRQ_FDIC | KVASER_PCIEFD_KCAN_IRQ_BPP |
529- KVASER_PCIEFD_KCAN_IRQ_TAR | KVASER_PCIEFD_KCAN_IRQ_TFD ;
534+ KVASER_PCIEFD_KCAN_IRQ_TAR ;
530535
531536 iowrite32 (msk , can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
532537
@@ -554,6 +559,8 @@ static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can)
554559
555560 if (can -> can .ctrlmode & CAN_CTRLMODE_LISTENONLY )
556561 mode |= KVASER_PCIEFD_KCAN_MODE_LOM ;
562+ else
563+ mode &= ~KVASER_PCIEFD_KCAN_MODE_LOM ;
557564
558565 mode |= KVASER_PCIEFD_KCAN_MODE_EEN ;
559566 mode |= KVASER_PCIEFD_KCAN_MODE_EPEN ;
@@ -572,7 +579,7 @@ static void kvaser_pciefd_start_controller_flush(struct kvaser_pciefd_can *can)
572579
573580 spin_lock_irqsave (& can -> lock , irq );
574581 iowrite32 (-1 , can -> reg_base + KVASER_PCIEFD_KCAN_IRQ_REG );
575- iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD ,
582+ iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD ,
576583 can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
577584
578585 status = ioread32 (can -> reg_base + KVASER_PCIEFD_KCAN_STAT_REG );
@@ -615,7 +622,7 @@ static int kvaser_pciefd_bus_on(struct kvaser_pciefd_can *can)
615622 iowrite32 (0 , can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
616623 iowrite32 (-1 , can -> reg_base + KVASER_PCIEFD_KCAN_IRQ_REG );
617624
618- iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD ,
625+ iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD ,
619626 can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
620627
621628 mode = ioread32 (can -> reg_base + KVASER_PCIEFD_KCAN_MODE_REG );
@@ -719,6 +726,7 @@ static int kvaser_pciefd_stop(struct net_device *netdev)
719726 iowrite32 (0 , can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
720727 del_timer (& can -> bec_poll_timer );
721728 }
729+ can -> can .state = CAN_STATE_STOPPED ;
722730 close_candev (netdev );
723731
724732 return ret ;
@@ -1007,8 +1015,7 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)
10071015 SET_NETDEV_DEV (netdev , & pcie -> pci -> dev );
10081016
10091017 iowrite32 (-1 , can -> reg_base + KVASER_PCIEFD_KCAN_IRQ_REG );
1010- iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD |
1011- KVASER_PCIEFD_KCAN_IRQ_TFD ,
1018+ iowrite32 (KVASER_PCIEFD_KCAN_IRQ_ABD ,
10121019 can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
10131020
10141021 pcie -> can [i ] = can ;
@@ -1058,6 +1065,7 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
10581065{
10591066 int i ;
10601067 u32 srb_status ;
1068+ u32 srb_packet_count ;
10611069 dma_addr_t dma_addr [KVASER_PCIEFD_DMA_COUNT ];
10621070
10631071 /* Disable the DMA */
@@ -1085,6 +1093,15 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
10851093 KVASER_PCIEFD_SRB_CMD_RDB1 ,
10861094 pcie -> reg_base + KVASER_PCIEFD_SRB_CMD_REG );
10871095
1096+ /* Empty Rx FIFO */
1097+ srb_packet_count = ioread32 (pcie -> reg_base + KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG ) &
1098+ KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK ;
1099+ while (srb_packet_count ) {
1100+ /* Drop current packet in FIFO */
1101+ ioread32 (pcie -> reg_base + KVASER_PCIEFD_SRB_FIFO_LAST_REG );
1102+ srb_packet_count -- ;
1103+ }
1104+
10881105 srb_status = ioread32 (pcie -> reg_base + KVASER_PCIEFD_SRB_STAT_REG );
10891106 if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DI )) {
10901107 dev_err (& pcie -> pci -> dev , "DMA not idle before enabling\n" );
@@ -1425,9 +1442,6 @@ static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie,
14251442 cmd = KVASER_PCIEFD_KCAN_CMD_AT ;
14261443 cmd |= ++ can -> cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT ;
14271444 iowrite32 (cmd , can -> reg_base + KVASER_PCIEFD_KCAN_CMD_REG );
1428-
1429- iowrite32 (KVASER_PCIEFD_KCAN_IRQ_TFD ,
1430- can -> reg_base + KVASER_PCIEFD_KCAN_IEN_REG );
14311445 } else if (p -> header [0 ] & KVASER_PCIEFD_SPACK_IDET &&
14321446 p -> header [0 ] & KVASER_PCIEFD_SPACK_IRM &&
14331447 cmdseq == (p -> header [1 ] & KVASER_PCIEFD_PACKET_SEQ_MSK ) &&
@@ -1714,15 +1728,6 @@ static int kvaser_pciefd_transmit_irq(struct kvaser_pciefd_can *can)
17141728 if (irq & KVASER_PCIEFD_KCAN_IRQ_TOF )
17151729 netdev_err (can -> can .dev , "Tx FIFO overflow\n" );
17161730
1717- if (irq & KVASER_PCIEFD_KCAN_IRQ_TFD ) {
1718- u8 count = ioread32 (can -> reg_base +
1719- KVASER_PCIEFD_KCAN_TX_NPACKETS_REG ) & 0xff ;
1720-
1721- if (count == 0 )
1722- iowrite32 (KVASER_PCIEFD_KCAN_CTRL_EFLUSH ,
1723- can -> reg_base + KVASER_PCIEFD_KCAN_CTRL_REG );
1724- }
1725-
17261731 if (irq & KVASER_PCIEFD_KCAN_IRQ_BPP )
17271732 netdev_err (can -> can .dev ,
17281733 "Fail to change bittiming, when not in reset mode\n" );
@@ -1824,6 +1829,11 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev,
18241829 if (err )
18251830 goto err_teardown_can_ctrls ;
18261831
1832+ err = request_irq (pcie -> pci -> irq , kvaser_pciefd_irq_handler ,
1833+ IRQF_SHARED , KVASER_PCIEFD_DRV_NAME , pcie );
1834+ if (err )
1835+ goto err_teardown_can_ctrls ;
1836+
18271837 iowrite32 (KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1 ,
18281838 pcie -> reg_base + KVASER_PCIEFD_SRB_IRQ_REG );
18291839
@@ -1844,18 +1854,15 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev,
18441854 iowrite32 (KVASER_PCIEFD_SRB_CMD_RDB1 ,
18451855 pcie -> reg_base + KVASER_PCIEFD_SRB_CMD_REG );
18461856
1847- err = request_irq (pcie -> pci -> irq , kvaser_pciefd_irq_handler ,
1848- IRQF_SHARED , KVASER_PCIEFD_DRV_NAME , pcie );
1849- if (err )
1850- goto err_teardown_can_ctrls ;
1851-
18521857 err = kvaser_pciefd_reg_candev (pcie );
18531858 if (err )
18541859 goto err_free_irq ;
18551860
18561861 return 0 ;
18571862
18581863err_free_irq :
1864+ /* Disable PCI interrupts */
1865+ iowrite32 (0 , pcie -> reg_base + KVASER_PCIEFD_IEN_REG );
18591866 free_irq (pcie -> pci -> irq , pcie );
18601867
18611868err_teardown_can_ctrls :
0 commit comments