linux/drivers/net/can/kvaser_pciefd.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
   2/* Copyright (C) 2018 KVASER AB, Sweden. All rights reserved.
   3 * Parts of this driver are based on the following:
   4 *  - Kvaser linux pciefd driver (version 5.25)
   5 *  - PEAK linux canfd driver
   6 *  - Altera Avalon EPCS flash controller driver
   7 */
   8
   9#include <linux/kernel.h>
  10#include <linux/module.h>
  11#include <linux/device.h>
  12#include <linux/pci.h>
  13#include <linux/can/dev.h>
  14#include <linux/timer.h>
  15#include <linux/netdevice.h>
  16#include <linux/crc32.h>
  17#include <linux/iopoll.h>
  18
  19MODULE_LICENSE("Dual BSD/GPL");
  20MODULE_AUTHOR("Kvaser AB <support@kvaser.com>");
  21MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
  22
  23#define KVASER_PCIEFD_DRV_NAME "kvaser_pciefd"
  24
  25#define KVASER_PCIEFD_WAIT_TIMEOUT msecs_to_jiffies(1000)
  26#define KVASER_PCIEFD_BEC_POLL_FREQ (jiffies + msecs_to_jiffies(200))
  27#define KVASER_PCIEFD_MAX_ERR_REP 256
  28#define KVASER_PCIEFD_CAN_TX_MAX_COUNT 17
  29#define KVASER_PCIEFD_MAX_CAN_CHANNELS 4
  30#define KVASER_PCIEFD_DMA_COUNT 2
  31
  32#define KVASER_PCIEFD_DMA_SIZE (4 * 1024)
  33#define KVASER_PCIEFD_64BIT_DMA_BIT BIT(0)
  34
  35#define KVASER_PCIEFD_VENDOR 0x1a07
  36#define KVASER_PCIEFD_4HS_ID 0x0d
  37#define KVASER_PCIEFD_2HS_ID 0x0e
  38#define KVASER_PCIEFD_HS_ID 0x0f
  39#define KVASER_PCIEFD_MINIPCIE_HS_ID 0x10
  40#define KVASER_PCIEFD_MINIPCIE_2HS_ID 0x11
  41
  42/* PCIe IRQ registers */
  43#define KVASER_PCIEFD_IRQ_REG 0x40
  44#define KVASER_PCIEFD_IEN_REG 0x50
  45/* DMA map */
  46#define KVASER_PCIEFD_DMA_MAP_BASE 0x1000
  47/* Kvaser KCAN CAN controller registers */
  48#define KVASER_PCIEFD_KCAN0_BASE 0x10000
  49#define KVASER_PCIEFD_KCAN_BASE_OFFSET 0x1000
  50#define KVASER_PCIEFD_KCAN_FIFO_REG 0x100
  51#define KVASER_PCIEFD_KCAN_FIFO_LAST_REG 0x180
  52#define KVASER_PCIEFD_KCAN_CTRL_REG 0x2c0
  53#define KVASER_PCIEFD_KCAN_CMD_REG 0x400
  54#define KVASER_PCIEFD_KCAN_IEN_REG 0x408
  55#define KVASER_PCIEFD_KCAN_IRQ_REG 0x410
  56#define KVASER_PCIEFD_KCAN_TX_NPACKETS_REG 0x414
  57#define KVASER_PCIEFD_KCAN_STAT_REG 0x418
  58#define KVASER_PCIEFD_KCAN_MODE_REG 0x41c
  59#define KVASER_PCIEFD_KCAN_BTRN_REG 0x420
  60#define KVASER_PCIEFD_KCAN_BUS_LOAD_REG 0x424
  61#define KVASER_PCIEFD_KCAN_BTRD_REG 0x428
  62#define KVASER_PCIEFD_KCAN_PWM_REG 0x430
  63/* Loopback control register */
  64#define KVASER_PCIEFD_LOOP_REG 0x1f000
  65/* System identification and information registers */
  66#define KVASER_PCIEFD_SYSID_BASE 0x1f020
  67#define KVASER_PCIEFD_SYSID_VERSION_REG (KVASER_PCIEFD_SYSID_BASE + 0x8)
  68#define KVASER_PCIEFD_SYSID_CANFREQ_REG (KVASER_PCIEFD_SYSID_BASE + 0xc)
  69#define KVASER_PCIEFD_SYSID_BUSFREQ_REG (KVASER_PCIEFD_SYSID_BASE + 0x10)
  70#define KVASER_PCIEFD_SYSID_BUILD_REG (KVASER_PCIEFD_SYSID_BASE + 0x14)
  71/* Shared receive buffer registers */
  72#define KVASER_PCIEFD_SRB_BASE 0x1f200
  73#define KVASER_PCIEFD_SRB_CMD_REG (KVASER_PCIEFD_SRB_BASE + 0x200)
  74#define KVASER_PCIEFD_SRB_IEN_REG (KVASER_PCIEFD_SRB_BASE + 0x204)
  75#define KVASER_PCIEFD_SRB_IRQ_REG (KVASER_PCIEFD_SRB_BASE + 0x20c)
  76#define KVASER_PCIEFD_SRB_STAT_REG (KVASER_PCIEFD_SRB_BASE + 0x210)
  77#define KVASER_PCIEFD_SRB_CTRL_REG (KVASER_PCIEFD_SRB_BASE + 0x218)
  78/* EPCS flash controller registers */
  79#define KVASER_PCIEFD_SPI_BASE 0x1fc00
  80#define KVASER_PCIEFD_SPI_RX_REG KVASER_PCIEFD_SPI_BASE
  81#define KVASER_PCIEFD_SPI_TX_REG (KVASER_PCIEFD_SPI_BASE + 0x4)
  82#define KVASER_PCIEFD_SPI_STATUS_REG (KVASER_PCIEFD_SPI_BASE + 0x8)
  83#define KVASER_PCIEFD_SPI_CTRL_REG (KVASER_PCIEFD_SPI_BASE + 0xc)
  84#define KVASER_PCIEFD_SPI_SSEL_REG (KVASER_PCIEFD_SPI_BASE + 0x14)
  85
  86#define KVASER_PCIEFD_IRQ_ALL_MSK 0x1f
  87#define KVASER_PCIEFD_IRQ_SRB BIT(4)
  88
  89#define KVASER_PCIEFD_SYSID_NRCHAN_SHIFT 24
  90#define KVASER_PCIEFD_SYSID_MAJOR_VER_SHIFT 16
  91#define KVASER_PCIEFD_SYSID_BUILD_VER_SHIFT 1
  92
  93/* Reset DMA buffer 0, 1 and FIFO offset */
  94#define KVASER_PCIEFD_SRB_CMD_RDB0 BIT(4)
  95#define KVASER_PCIEFD_SRB_CMD_RDB1 BIT(5)
  96#define KVASER_PCIEFD_SRB_CMD_FOR BIT(0)
  97
  98/* DMA packet done, buffer 0 and 1 */
  99#define KVASER_PCIEFD_SRB_IRQ_DPD0 BIT(8)
 100#define KVASER_PCIEFD_SRB_IRQ_DPD1 BIT(9)
 101/* DMA overflow, buffer 0 and 1 */
 102#define KVASER_PCIEFD_SRB_IRQ_DOF0 BIT(10)
 103#define KVASER_PCIEFD_SRB_IRQ_DOF1 BIT(11)
 104/* DMA underflow, buffer 0 and 1 */
 105#define KVASER_PCIEFD_SRB_IRQ_DUF0 BIT(12)
 106#define KVASER_PCIEFD_SRB_IRQ_DUF1 BIT(13)
 107
 108/* DMA idle */
 109#define KVASER_PCIEFD_SRB_STAT_DI BIT(15)
 110/* DMA support */
 111#define KVASER_PCIEFD_SRB_STAT_DMA BIT(24)
 112
 113/* DMA Enable */
 114#define KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE BIT(0)
 115
 116/* EPCS flash controller definitions */
 117#define KVASER_PCIEFD_CFG_IMG_SZ (64 * 1024)
 118#define KVASER_PCIEFD_CFG_IMG_OFFSET (31 * 65536L)
 119#define KVASER_PCIEFD_CFG_MAX_PARAMS 256
 120#define KVASER_PCIEFD_CFG_MAGIC 0xcafef00d
 121#define KVASER_PCIEFD_CFG_PARAM_MAX_SZ 24
 122#define KVASER_PCIEFD_CFG_SYS_VER 1
 123#define KVASER_PCIEFD_CFG_PARAM_NR_CHAN 130
 124#define KVASER_PCIEFD_SPI_TMT BIT(5)
 125#define KVASER_PCIEFD_SPI_TRDY BIT(6)
 126#define KVASER_PCIEFD_SPI_RRDY BIT(7)
 127#define KVASER_PCIEFD_FLASH_ID_EPCS16 0x14
 128/* Commands for controlling the onboard flash */
 129#define KVASER_PCIEFD_FLASH_RES_CMD 0xab
 130#define KVASER_PCIEFD_FLASH_READ_CMD 0x3
 131#define KVASER_PCIEFD_FLASH_STATUS_CMD 0x5
 132
 133/* Kvaser KCAN definitions */
 134#define KVASER_PCIEFD_KCAN_CTRL_EFLUSH (4 << 29)
 135#define KVASER_PCIEFD_KCAN_CTRL_EFRAME (5 << 29)
 136
 137#define KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT 16
 138/* Request status packet */
 139#define KVASER_PCIEFD_KCAN_CMD_SRQ BIT(0)
 140/* Abort, flush and reset */
 141#define KVASER_PCIEFD_KCAN_CMD_AT BIT(1)
 142
 143/* Tx FIFO unaligned read */
 144#define KVASER_PCIEFD_KCAN_IRQ_TAR BIT(0)
 145/* Tx FIFO unaligned end */
 146#define KVASER_PCIEFD_KCAN_IRQ_TAE BIT(1)
 147/* Bus parameter protection error */
 148#define KVASER_PCIEFD_KCAN_IRQ_BPP BIT(2)
 149/* FDF bit when controller is in classic mode */
 150#define KVASER_PCIEFD_KCAN_IRQ_FDIC BIT(3)
 151/* Rx FIFO overflow */
 152#define KVASER_PCIEFD_KCAN_IRQ_ROF BIT(5)
 153/* Abort done */
 154#define KVASER_PCIEFD_KCAN_IRQ_ABD BIT(13)
 155/* Tx buffer flush done */
 156#define KVASER_PCIEFD_KCAN_IRQ_TFD BIT(14)
 157/* Tx FIFO overflow */
 158#define KVASER_PCIEFD_KCAN_IRQ_TOF BIT(15)
 159/* Tx FIFO empty */
 160#define KVASER_PCIEFD_KCAN_IRQ_TE BIT(16)
 161/* Transmitter unaligned */
 162#define KVASER_PCIEFD_KCAN_IRQ_TAL BIT(17)
 163
 164#define KVASER_PCIEFD_KCAN_TX_NPACKETS_MAX_SHIFT 16
 165
 166#define KVASER_PCIEFD_KCAN_STAT_SEQNO_SHIFT 24
 167/* Abort request */
 168#define KVASER_PCIEFD_KCAN_STAT_AR BIT(7)
 169/* Idle state. Controller in reset mode and no abort or flush pending */
 170#define KVASER_PCIEFD_KCAN_STAT_IDLE BIT(10)
 171/* Bus off */
 172#define KVASER_PCIEFD_KCAN_STAT_BOFF BIT(11)
 173/* Reset mode request */
 174#define KVASER_PCIEFD_KCAN_STAT_RMR BIT(14)
 175/* Controller in reset mode */
 176#define KVASER_PCIEFD_KCAN_STAT_IRM BIT(15)
 177/* Controller got one-shot capability */
 178#define KVASER_PCIEFD_KCAN_STAT_CAP BIT(16)
 179/* Controller got CAN FD capability */
 180#define KVASER_PCIEFD_KCAN_STAT_FD BIT(19)
 181#define KVASER_PCIEFD_KCAN_STAT_BUS_OFF_MSK (KVASER_PCIEFD_KCAN_STAT_AR | \
 182        KVASER_PCIEFD_KCAN_STAT_BOFF | KVASER_PCIEFD_KCAN_STAT_RMR | \
 183        KVASER_PCIEFD_KCAN_STAT_IRM)
 184
 185/* Reset mode */
 186#define KVASER_PCIEFD_KCAN_MODE_RM BIT(8)
 187/* Listen only mode */
 188#define KVASER_PCIEFD_KCAN_MODE_LOM BIT(9)
 189/* Error packet enable */
 190#define KVASER_PCIEFD_KCAN_MODE_EPEN BIT(12)
 191/* CAN FD non-ISO */
 192#define KVASER_PCIEFD_KCAN_MODE_NIFDEN BIT(15)
 193/* Acknowledgment packet type */
 194#define KVASER_PCIEFD_KCAN_MODE_APT BIT(20)
 195/* Active error flag enable. Clear to force error passive */
 196#define KVASER_PCIEFD_KCAN_MODE_EEN BIT(23)
 197/* Classic CAN mode */
 198#define KVASER_PCIEFD_KCAN_MODE_CCM BIT(31)
 199
 200#define KVASER_PCIEFD_KCAN_BTRN_SJW_SHIFT 13
 201#define KVASER_PCIEFD_KCAN_BTRN_TSEG1_SHIFT 17
 202#define KVASER_PCIEFD_KCAN_BTRN_TSEG2_SHIFT 26
 203
 204#define KVASER_PCIEFD_KCAN_PWM_TOP_SHIFT 16
 205
 206/* Kvaser KCAN packet types */
 207#define KVASER_PCIEFD_PACK_TYPE_DATA 0
 208#define KVASER_PCIEFD_PACK_TYPE_ACK 1
 209#define KVASER_PCIEFD_PACK_TYPE_TXRQ 2
 210#define KVASER_PCIEFD_PACK_TYPE_ERROR 3
 211#define KVASER_PCIEFD_PACK_TYPE_EFLUSH_ACK 4
 212#define KVASER_PCIEFD_PACK_TYPE_EFRAME_ACK 5
 213#define KVASER_PCIEFD_PACK_TYPE_ACK_DATA 6
 214#define KVASER_PCIEFD_PACK_TYPE_STATUS 8
 215#define KVASER_PCIEFD_PACK_TYPE_BUS_LOAD 9
 216
 217/* Kvaser KCAN packet common definitions */
 218#define KVASER_PCIEFD_PACKET_SEQ_MSK 0xff
 219#define KVASER_PCIEFD_PACKET_CHID_SHIFT 25
 220#define KVASER_PCIEFD_PACKET_TYPE_SHIFT 28
 221
 222/* Kvaser KCAN TDATA and RDATA first word */
 223#define KVASER_PCIEFD_RPACKET_IDE BIT(30)
 224#define KVASER_PCIEFD_RPACKET_RTR BIT(29)
 225/* Kvaser KCAN TDATA and RDATA second word */
 226#define KVASER_PCIEFD_RPACKET_ESI BIT(13)
 227#define KVASER_PCIEFD_RPACKET_BRS BIT(14)
 228#define KVASER_PCIEFD_RPACKET_FDF BIT(15)
 229#define KVASER_PCIEFD_RPACKET_DLC_SHIFT 8
 230/* Kvaser KCAN TDATA second word */
 231#define KVASER_PCIEFD_TPACKET_SMS BIT(16)
 232#define KVASER_PCIEFD_TPACKET_AREQ BIT(31)
 233
 234/* Kvaser KCAN APACKET */
 235#define KVASER_PCIEFD_APACKET_FLU BIT(8)
 236#define KVASER_PCIEFD_APACKET_CT BIT(9)
 237#define KVASER_PCIEFD_APACKET_ABL BIT(10)
 238#define KVASER_PCIEFD_APACKET_NACK BIT(11)
 239
 240/* Kvaser KCAN SPACK first word */
 241#define KVASER_PCIEFD_SPACK_RXERR_SHIFT 8
 242#define KVASER_PCIEFD_SPACK_BOFF BIT(16)
 243#define KVASER_PCIEFD_SPACK_IDET BIT(20)
 244#define KVASER_PCIEFD_SPACK_IRM BIT(21)
 245#define KVASER_PCIEFD_SPACK_RMCD BIT(22)
 246/* Kvaser KCAN SPACK second word */
 247#define KVASER_PCIEFD_SPACK_AUTO BIT(21)
 248#define KVASER_PCIEFD_SPACK_EWLR BIT(23)
 249#define KVASER_PCIEFD_SPACK_EPLR BIT(24)
 250
 251/* Kvaser KCAN_EPACK second word */
 252#define KVASER_PCIEFD_EPACK_DIR_TX BIT(0)
 253
 254struct kvaser_pciefd;
 255
 256struct kvaser_pciefd_can {
 257        struct can_priv can;
 258        struct kvaser_pciefd *kv_pcie;
 259        void __iomem *reg_base;
 260        struct can_berr_counter bec;
 261        u8 cmd_seq;
 262        int err_rep_cnt;
 263        int echo_idx;
 264        spinlock_t lock; /* Locks sensitive registers (e.g. MODE) */
 265        spinlock_t echo_lock; /* Locks the message echo buffer */
 266        struct timer_list bec_poll_timer;
 267        struct completion start_comp, flush_comp;
 268};
 269
 270struct kvaser_pciefd {
 271        struct pci_dev *pci;
 272        void __iomem *reg_base;
 273        struct kvaser_pciefd_can *can[KVASER_PCIEFD_MAX_CAN_CHANNELS];
 274        void *dma_data[KVASER_PCIEFD_DMA_COUNT];
 275        u8 nr_channels;
 276        u32 bus_freq;
 277        u32 freq;
 278        u32 freq_to_ticks_div;
 279};
 280
 281struct kvaser_pciefd_rx_packet {
 282        u32 header[2];
 283        u64 timestamp;
 284};
 285
 286struct kvaser_pciefd_tx_packet {
 287        u32 header[2];
 288        u8 data[64];
 289};
 290
 291static const struct can_bittiming_const kvaser_pciefd_bittiming_const = {
 292        .name = KVASER_PCIEFD_DRV_NAME,
 293        .tseg1_min = 1,
 294        .tseg1_max = 512,
 295        .tseg2_min = 1,
 296        .tseg2_max = 32,
 297        .sjw_max = 16,
 298        .brp_min = 1,
 299        .brp_max = 8192,
 300        .brp_inc = 1,
 301};
 302
 303struct kvaser_pciefd_cfg_param {
 304        __le32 magic;
 305        __le32 nr;
 306        __le32 len;
 307        u8 data[KVASER_PCIEFD_CFG_PARAM_MAX_SZ];
 308};
 309
 310struct kvaser_pciefd_cfg_img {
 311        __le32 version;
 312        __le32 magic;
 313        __le32 crc;
 314        struct kvaser_pciefd_cfg_param params[KVASER_PCIEFD_CFG_MAX_PARAMS];
 315};
 316
 317static struct pci_device_id kvaser_pciefd_id_table[] = {
 318        { PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_4HS_ID), },
 319        { PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_2HS_ID), },
 320        { PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_HS_ID), },
 321        { PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_HS_ID), },
 322        { PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_2HS_ID), },
 323        { 0,},
 324};
 325MODULE_DEVICE_TABLE(pci, kvaser_pciefd_id_table);
 326
 327/* Onboard flash memory functions */
 328static int kvaser_pciefd_spi_wait_loop(struct kvaser_pciefd *pcie, int msk)
 329{
 330        u32 res;
 331        int ret;
 332
 333        ret = readl_poll_timeout(pcie->reg_base + KVASER_PCIEFD_SPI_STATUS_REG,
 334                                 res, res & msk, 0, 10);
 335
 336        return ret;
 337}
 338
 339static int kvaser_pciefd_spi_cmd(struct kvaser_pciefd *pcie, const u8 *tx,
 340                                 u32 tx_len, u8 *rx, u32 rx_len)
 341{
 342        int c;
 343
 344        iowrite32(BIT(0), pcie->reg_base + KVASER_PCIEFD_SPI_SSEL_REG);
 345        iowrite32(BIT(10), pcie->reg_base + KVASER_PCIEFD_SPI_CTRL_REG);
 346        ioread32(pcie->reg_base + KVASER_PCIEFD_SPI_RX_REG);
 347
 348        c = tx_len;
 349        while (c--) {
 350                if (kvaser_pciefd_spi_wait_loop(pcie, KVASER_PCIEFD_SPI_TRDY))
 351                        return -EIO;
 352
 353                iowrite32(*tx++, pcie->reg_base + KVASER_PCIEFD_SPI_TX_REG);
 354
 355                if (kvaser_pciefd_spi_wait_loop(pcie, KVASER_PCIEFD_SPI_RRDY))
 356                        return -EIO;
 357
 358                ioread32(pcie->reg_base + KVASER_PCIEFD_SPI_RX_REG);
 359        }
 360
 361        c = rx_len;
 362        while (c-- > 0) {
 363                if (kvaser_pciefd_spi_wait_loop(pcie, KVASER_PCIEFD_SPI_TRDY))
 364                        return -EIO;
 365
 366                iowrite32(0, pcie->reg_base + KVASER_PCIEFD_SPI_TX_REG);
 367
 368                if (kvaser_pciefd_spi_wait_loop(pcie, KVASER_PCIEFD_SPI_RRDY))
 369                        return -EIO;
 370
 371                *rx++ = ioread32(pcie->reg_base + KVASER_PCIEFD_SPI_RX_REG);
 372        }
 373
 374        if (kvaser_pciefd_spi_wait_loop(pcie, KVASER_PCIEFD_SPI_TMT))
 375                return -EIO;
 376
 377        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_SPI_CTRL_REG);
 378
 379        if (c != -1) {
 380                dev_err(&pcie->pci->dev, "Flash SPI transfer failed\n");
 381                return -EIO;
 382        }
 383
 384        return 0;
 385}
 386
 387static int kvaser_pciefd_cfg_read_and_verify(struct kvaser_pciefd *pcie,
 388                                             struct kvaser_pciefd_cfg_img *img)
 389{
 390        int offset = KVASER_PCIEFD_CFG_IMG_OFFSET;
 391        int res, crc;
 392        u8 *crc_buff;
 393
 394        u8 cmd[] = {
 395                KVASER_PCIEFD_FLASH_READ_CMD,
 396                (u8)((offset >> 16) & 0xff),
 397                (u8)((offset >> 8) & 0xff),
 398                (u8)(offset & 0xff)
 399        };
 400
 401        res = kvaser_pciefd_spi_cmd(pcie, cmd, ARRAY_SIZE(cmd), (u8 *)img,
 402                                    KVASER_PCIEFD_CFG_IMG_SZ);
 403        if (res)
 404                return res;
 405
 406        crc_buff = (u8 *)img->params;
 407
 408        if (le32_to_cpu(img->version) != KVASER_PCIEFD_CFG_SYS_VER) {
 409                dev_err(&pcie->pci->dev,
 410                        "Config flash corrupted, version number is wrong\n");
 411                return -ENODEV;
 412        }
 413
 414        if (le32_to_cpu(img->magic) != KVASER_PCIEFD_CFG_MAGIC) {
 415                dev_err(&pcie->pci->dev,
 416                        "Config flash corrupted, magic number is wrong\n");
 417                return -ENODEV;
 418        }
 419
 420        crc = ~crc32_be(0xffffffff, crc_buff, sizeof(img->params));
 421        if (le32_to_cpu(img->crc) != crc) {
 422                dev_err(&pcie->pci->dev,
 423                        "Stored CRC does not match flash image contents\n");
 424                return -EIO;
 425        }
 426
 427        return 0;
 428}
 429
 430static void kvaser_pciefd_cfg_read_params(struct kvaser_pciefd *pcie,
 431                                          struct kvaser_pciefd_cfg_img *img)
 432{
 433        struct kvaser_pciefd_cfg_param *param;
 434
 435        param = &img->params[KVASER_PCIEFD_CFG_PARAM_NR_CHAN];
 436        memcpy(&pcie->nr_channels, param->data, le32_to_cpu(param->len));
 437}
 438
 439static int kvaser_pciefd_read_cfg(struct kvaser_pciefd *pcie)
 440{
 441        int res;
 442        struct kvaser_pciefd_cfg_img *img;
 443
 444        /* Read electronic signature */
 445        u8 cmd[] = {KVASER_PCIEFD_FLASH_RES_CMD, 0, 0, 0};
 446
 447        res = kvaser_pciefd_spi_cmd(pcie, cmd, ARRAY_SIZE(cmd), cmd, 1);
 448        if (res)
 449                return -EIO;
 450
 451        img = kmalloc(KVASER_PCIEFD_CFG_IMG_SZ, GFP_KERNEL);
 452        if (!img)
 453                return -ENOMEM;
 454
 455        if (cmd[0] != KVASER_PCIEFD_FLASH_ID_EPCS16) {
 456                dev_err(&pcie->pci->dev,
 457                        "Flash id is 0x%x instead of expected EPCS16 (0x%x)\n",
 458                        cmd[0], KVASER_PCIEFD_FLASH_ID_EPCS16);
 459
 460                res = -ENODEV;
 461                goto image_free;
 462        }
 463
 464        cmd[0] = KVASER_PCIEFD_FLASH_STATUS_CMD;
 465        res = kvaser_pciefd_spi_cmd(pcie, cmd, 1, cmd, 1);
 466        if (res) {
 467                goto image_free;
 468        } else if (cmd[0] & 1) {
 469                res = -EIO;
 470                /* No write is ever done, the WIP should never be set */
 471                dev_err(&pcie->pci->dev, "Unexpected WIP bit set in flash\n");
 472                goto image_free;
 473        }
 474
 475        res = kvaser_pciefd_cfg_read_and_verify(pcie, img);
 476        if (res) {
 477                res = -EIO;
 478                goto image_free;
 479        }
 480
 481        kvaser_pciefd_cfg_read_params(pcie, img);
 482
 483image_free:
 484        kfree(img);
 485        return res;
 486}
 487
 488static void kvaser_pciefd_request_status(struct kvaser_pciefd_can *can)
 489{
 490        u32 cmd;
 491
 492        cmd = KVASER_PCIEFD_KCAN_CMD_SRQ;
 493        cmd |= ++can->cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT;
 494        iowrite32(cmd, can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG);
 495}
 496
 497static void kvaser_pciefd_enable_err_gen(struct kvaser_pciefd_can *can)
 498{
 499        u32 mode;
 500        unsigned long irq;
 501
 502        spin_lock_irqsave(&can->lock, irq);
 503        mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 504        if (!(mode & KVASER_PCIEFD_KCAN_MODE_EPEN)) {
 505                mode |= KVASER_PCIEFD_KCAN_MODE_EPEN;
 506                iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 507        }
 508        spin_unlock_irqrestore(&can->lock, irq);
 509}
 510
 511static void kvaser_pciefd_disable_err_gen(struct kvaser_pciefd_can *can)
 512{
 513        u32 mode;
 514        unsigned long irq;
 515
 516        spin_lock_irqsave(&can->lock, irq);
 517        mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 518        mode &= ~KVASER_PCIEFD_KCAN_MODE_EPEN;
 519        iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 520        spin_unlock_irqrestore(&can->lock, irq);
 521}
 522
 523static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can)
 524{
 525        u32 msk;
 526
 527        msk = KVASER_PCIEFD_KCAN_IRQ_TE | KVASER_PCIEFD_KCAN_IRQ_ROF |
 528              KVASER_PCIEFD_KCAN_IRQ_TOF | KVASER_PCIEFD_KCAN_IRQ_ABD |
 529              KVASER_PCIEFD_KCAN_IRQ_TAE | KVASER_PCIEFD_KCAN_IRQ_TAL |
 530              KVASER_PCIEFD_KCAN_IRQ_FDIC | KVASER_PCIEFD_KCAN_IRQ_BPP |
 531              KVASER_PCIEFD_KCAN_IRQ_TAR | KVASER_PCIEFD_KCAN_IRQ_TFD;
 532
 533        iowrite32(msk, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 534
 535        return 0;
 536}
 537
 538static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can)
 539{
 540        u32 mode;
 541        unsigned long irq;
 542
 543        spin_lock_irqsave(&can->lock, irq);
 544
 545        mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 546        if (can->can.ctrlmode & CAN_CTRLMODE_FD) {
 547                mode &= ~KVASER_PCIEFD_KCAN_MODE_CCM;
 548                if (can->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
 549                        mode |= KVASER_PCIEFD_KCAN_MODE_NIFDEN;
 550                else
 551                        mode &= ~KVASER_PCIEFD_KCAN_MODE_NIFDEN;
 552        } else {
 553                mode |= KVASER_PCIEFD_KCAN_MODE_CCM;
 554                mode &= ~KVASER_PCIEFD_KCAN_MODE_NIFDEN;
 555        }
 556
 557        if (can->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
 558                mode |= KVASER_PCIEFD_KCAN_MODE_LOM;
 559
 560        mode |= KVASER_PCIEFD_KCAN_MODE_EEN;
 561        mode |= KVASER_PCIEFD_KCAN_MODE_EPEN;
 562        /* Use ACK packet type */
 563        mode &= ~KVASER_PCIEFD_KCAN_MODE_APT;
 564        mode &= ~KVASER_PCIEFD_KCAN_MODE_RM;
 565        iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 566
 567        spin_unlock_irqrestore(&can->lock, irq);
 568}
 569
 570static void kvaser_pciefd_start_controller_flush(struct kvaser_pciefd_can *can)
 571{
 572        u32 status;
 573        unsigned long irq;
 574
 575        spin_lock_irqsave(&can->lock, irq);
 576        iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
 577        iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD,
 578                  can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 579
 580        status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
 581        if (status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
 582                u32 cmd;
 583
 584                /* If controller is already idle, run abort, flush and reset */
 585                cmd = KVASER_PCIEFD_KCAN_CMD_AT;
 586                cmd |= ++can->cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT;
 587                iowrite32(cmd, can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG);
 588        } else if (!(status & KVASER_PCIEFD_KCAN_STAT_RMR)) {
 589                u32 mode;
 590
 591                /* Put controller in reset mode */
 592                mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 593                mode |= KVASER_PCIEFD_KCAN_MODE_RM;
 594                iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 595        }
 596
 597        spin_unlock_irqrestore(&can->lock, irq);
 598}
 599
 600static int kvaser_pciefd_bus_on(struct kvaser_pciefd_can *can)
 601{
 602        u32 mode;
 603        unsigned long irq;
 604
 605        del_timer(&can->bec_poll_timer);
 606
 607        if (!completion_done(&can->flush_comp))
 608                kvaser_pciefd_start_controller_flush(can);
 609
 610        if (!wait_for_completion_timeout(&can->flush_comp,
 611                                         KVASER_PCIEFD_WAIT_TIMEOUT)) {
 612                netdev_err(can->can.dev, "Timeout during bus on flush\n");
 613                return -ETIMEDOUT;
 614        }
 615
 616        spin_lock_irqsave(&can->lock, irq);
 617        iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 618        iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
 619
 620        iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD,
 621                  can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 622
 623        mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 624        mode &= ~KVASER_PCIEFD_KCAN_MODE_RM;
 625        iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 626        spin_unlock_irqrestore(&can->lock, irq);
 627
 628        if (!wait_for_completion_timeout(&can->start_comp,
 629                                         KVASER_PCIEFD_WAIT_TIMEOUT)) {
 630                netdev_err(can->can.dev, "Timeout during bus on reset\n");
 631                return -ETIMEDOUT;
 632        }
 633        /* Reset interrupt handling */
 634        iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 635        iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
 636
 637        kvaser_pciefd_set_tx_irq(can);
 638        kvaser_pciefd_setup_controller(can);
 639
 640        can->can.state = CAN_STATE_ERROR_ACTIVE;
 641        netif_wake_queue(can->can.dev);
 642        can->bec.txerr = 0;
 643        can->bec.rxerr = 0;
 644        can->err_rep_cnt = 0;
 645
 646        return 0;
 647}
 648
 649static void kvaser_pciefd_pwm_stop(struct kvaser_pciefd_can *can)
 650{
 651        u8 top;
 652        u32 pwm_ctrl;
 653        unsigned long irq;
 654
 655        spin_lock_irqsave(&can->lock, irq);
 656        pwm_ctrl = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
 657        top = (pwm_ctrl >> KVASER_PCIEFD_KCAN_PWM_TOP_SHIFT) & 0xff;
 658
 659        /* Set duty cycle to zero */
 660        pwm_ctrl |= top;
 661        iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
 662        spin_unlock_irqrestore(&can->lock, irq);
 663}
 664
 665static void kvaser_pciefd_pwm_start(struct kvaser_pciefd_can *can)
 666{
 667        int top, trigger;
 668        u32 pwm_ctrl;
 669        unsigned long irq;
 670
 671        kvaser_pciefd_pwm_stop(can);
 672        spin_lock_irqsave(&can->lock, irq);
 673
 674        /* Set frequency to 500 KHz*/
 675        top = can->kv_pcie->bus_freq / (2 * 500000) - 1;
 676
 677        pwm_ctrl = top & 0xff;
 678        pwm_ctrl |= (top & 0xff) << KVASER_PCIEFD_KCAN_PWM_TOP_SHIFT;
 679        iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
 680
 681        /* Set duty cycle to 95 */
 682        trigger = (100 * top - 95 * (top + 1) + 50) / 100;
 683        pwm_ctrl = trigger & 0xff;
 684        pwm_ctrl |= (top & 0xff) << KVASER_PCIEFD_KCAN_PWM_TOP_SHIFT;
 685        iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
 686        spin_unlock_irqrestore(&can->lock, irq);
 687}
 688
 689static int kvaser_pciefd_open(struct net_device *netdev)
 690{
 691        int err;
 692        struct kvaser_pciefd_can *can = netdev_priv(netdev);
 693
 694        err = open_candev(netdev);
 695        if (err)
 696                return err;
 697
 698        err = kvaser_pciefd_bus_on(can);
 699        if (err) {
 700                close_candev(netdev);
 701                return err;
 702        }
 703
 704        return 0;
 705}
 706
 707static int kvaser_pciefd_stop(struct net_device *netdev)
 708{
 709        struct kvaser_pciefd_can *can = netdev_priv(netdev);
 710        int ret = 0;
 711
 712        /* Don't interrupt ongoing flush */
 713        if (!completion_done(&can->flush_comp))
 714                kvaser_pciefd_start_controller_flush(can);
 715
 716        if (!wait_for_completion_timeout(&can->flush_comp,
 717                                         KVASER_PCIEFD_WAIT_TIMEOUT)) {
 718                netdev_err(can->can.dev, "Timeout during stop\n");
 719                ret = -ETIMEDOUT;
 720        } else {
 721                iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
 722                del_timer(&can->bec_poll_timer);
 723        }
 724        close_candev(netdev);
 725
 726        return ret;
 727}
 728
 729static int kvaser_pciefd_prepare_tx_packet(struct kvaser_pciefd_tx_packet *p,
 730                                           struct kvaser_pciefd_can *can,
 731                                           struct sk_buff *skb)
 732{
 733        struct canfd_frame *cf = (struct canfd_frame *)skb->data;
 734        int packet_size;
 735        int seq = can->echo_idx;
 736
 737        memset(p, 0, sizeof(*p));
 738
 739        if (can->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
 740                p->header[1] |= KVASER_PCIEFD_TPACKET_SMS;
 741
 742        if (cf->can_id & CAN_RTR_FLAG)
 743                p->header[0] |= KVASER_PCIEFD_RPACKET_RTR;
 744
 745        if (cf->can_id & CAN_EFF_FLAG)
 746                p->header[0] |= KVASER_PCIEFD_RPACKET_IDE;
 747
 748        p->header[0] |= cf->can_id & CAN_EFF_MASK;
 749        p->header[1] |= can_fd_len2dlc(cf->len) << KVASER_PCIEFD_RPACKET_DLC_SHIFT;
 750        p->header[1] |= KVASER_PCIEFD_TPACKET_AREQ;
 751
 752        if (can_is_canfd_skb(skb)) {
 753                p->header[1] |= KVASER_PCIEFD_RPACKET_FDF;
 754                if (cf->flags & CANFD_BRS)
 755                        p->header[1] |= KVASER_PCIEFD_RPACKET_BRS;
 756                if (cf->flags & CANFD_ESI)
 757                        p->header[1] |= KVASER_PCIEFD_RPACKET_ESI;
 758        }
 759
 760        p->header[1] |= seq & KVASER_PCIEFD_PACKET_SEQ_MSK;
 761
 762        packet_size = cf->len;
 763        memcpy(p->data, cf->data, packet_size);
 764
 765        return DIV_ROUND_UP(packet_size, 4);
 766}
 767
 768static netdev_tx_t kvaser_pciefd_start_xmit(struct sk_buff *skb,
 769                                            struct net_device *netdev)
 770{
 771        struct kvaser_pciefd_can *can = netdev_priv(netdev);
 772        unsigned long irq_flags;
 773        struct kvaser_pciefd_tx_packet packet;
 774        int nwords;
 775        u8 count;
 776
 777        if (can_dropped_invalid_skb(netdev, skb))
 778                return NETDEV_TX_OK;
 779
 780        nwords = kvaser_pciefd_prepare_tx_packet(&packet, can, skb);
 781
 782        spin_lock_irqsave(&can->echo_lock, irq_flags);
 783
 784        /* Prepare and save echo skb in internal slot */
 785        can_put_echo_skb(skb, netdev, can->echo_idx, 0);
 786
 787        /* Move echo index to the next slot */
 788        can->echo_idx = (can->echo_idx + 1) % can->can.echo_skb_max;
 789
 790        /* Write header to fifo */
 791        iowrite32(packet.header[0],
 792                  can->reg_base + KVASER_PCIEFD_KCAN_FIFO_REG);
 793        iowrite32(packet.header[1],
 794                  can->reg_base + KVASER_PCIEFD_KCAN_FIFO_REG);
 795
 796        if (nwords) {
 797                u32 data_last = ((u32 *)packet.data)[nwords - 1];
 798
 799                /* Write data to fifo, except last word */
 800                iowrite32_rep(can->reg_base +
 801                              KVASER_PCIEFD_KCAN_FIFO_REG, packet.data,
 802                              nwords - 1);
 803                /* Write last word to end of fifo */
 804                __raw_writel(data_last, can->reg_base +
 805                             KVASER_PCIEFD_KCAN_FIFO_LAST_REG);
 806        } else {
 807                /* Complete write to fifo */
 808                __raw_writel(0, can->reg_base +
 809                             KVASER_PCIEFD_KCAN_FIFO_LAST_REG);
 810        }
 811
 812        count = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_TX_NPACKETS_REG);
 813        /* No room for a new message, stop the queue until at least one
 814         * successful transmit
 815         */
 816        if (count >= KVASER_PCIEFD_CAN_TX_MAX_COUNT ||
 817            can->can.echo_skb[can->echo_idx])
 818                netif_stop_queue(netdev);
 819
 820        spin_unlock_irqrestore(&can->echo_lock, irq_flags);
 821
 822        return NETDEV_TX_OK;
 823}
 824
 825static int kvaser_pciefd_set_bittiming(struct kvaser_pciefd_can *can, bool data)
 826{
 827        u32 mode, test, btrn;
 828        unsigned long irq_flags;
 829        int ret;
 830        struct can_bittiming *bt;
 831
 832        if (data)
 833                bt = &can->can.data_bittiming;
 834        else
 835                bt = &can->can.bittiming;
 836
 837        btrn = ((bt->phase_seg2 - 1) & 0x1f) <<
 838               KVASER_PCIEFD_KCAN_BTRN_TSEG2_SHIFT |
 839               (((bt->prop_seg + bt->phase_seg1) - 1) & 0x1ff) <<
 840               KVASER_PCIEFD_KCAN_BTRN_TSEG1_SHIFT |
 841               ((bt->sjw - 1) & 0xf) << KVASER_PCIEFD_KCAN_BTRN_SJW_SHIFT |
 842               ((bt->brp - 1) & 0x1fff);
 843
 844        spin_lock_irqsave(&can->lock, irq_flags);
 845        mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 846
 847        /* Put the circuit in reset mode */
 848        iowrite32(mode | KVASER_PCIEFD_KCAN_MODE_RM,
 849                  can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 850
 851        /* Can only set bittiming if in reset mode */
 852        ret = readl_poll_timeout(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG,
 853                                 test, test & KVASER_PCIEFD_KCAN_MODE_RM,
 854                                 0, 10);
 855
 856        if (ret) {
 857                spin_unlock_irqrestore(&can->lock, irq_flags);
 858                return -EBUSY;
 859        }
 860
 861        if (data)
 862                iowrite32(btrn, can->reg_base + KVASER_PCIEFD_KCAN_BTRD_REG);
 863        else
 864                iowrite32(btrn, can->reg_base + KVASER_PCIEFD_KCAN_BTRN_REG);
 865
 866        /* Restore previous reset mode status */
 867        iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
 868
 869        spin_unlock_irqrestore(&can->lock, irq_flags);
 870        return 0;
 871}
 872
 873static int kvaser_pciefd_set_nominal_bittiming(struct net_device *ndev)
 874{
 875        return kvaser_pciefd_set_bittiming(netdev_priv(ndev), false);
 876}
 877
 878static int kvaser_pciefd_set_data_bittiming(struct net_device *ndev)
 879{
 880        return kvaser_pciefd_set_bittiming(netdev_priv(ndev), true);
 881}
 882
 883static int kvaser_pciefd_set_mode(struct net_device *ndev, enum can_mode mode)
 884{
 885        struct kvaser_pciefd_can *can = netdev_priv(ndev);
 886        int ret = 0;
 887
 888        switch (mode) {
 889        case CAN_MODE_START:
 890                if (!can->can.restart_ms)
 891                        ret = kvaser_pciefd_bus_on(can);
 892                break;
 893        default:
 894                return -EOPNOTSUPP;
 895        }
 896
 897        return ret;
 898}
 899
 900static int kvaser_pciefd_get_berr_counter(const struct net_device *ndev,
 901                                          struct can_berr_counter *bec)
 902{
 903        struct kvaser_pciefd_can *can = netdev_priv(ndev);
 904
 905        bec->rxerr = can->bec.rxerr;
 906        bec->txerr = can->bec.txerr;
 907        return 0;
 908}
 909
 910static void kvaser_pciefd_bec_poll_timer(struct timer_list *data)
 911{
 912        struct kvaser_pciefd_can *can = from_timer(can, data, bec_poll_timer);
 913
 914        kvaser_pciefd_enable_err_gen(can);
 915        kvaser_pciefd_request_status(can);
 916        can->err_rep_cnt = 0;
 917}
 918
 919static const struct net_device_ops kvaser_pciefd_netdev_ops = {
 920        .ndo_open = kvaser_pciefd_open,
 921        .ndo_stop = kvaser_pciefd_stop,
 922        .ndo_start_xmit = kvaser_pciefd_start_xmit,
 923        .ndo_change_mtu = can_change_mtu,
 924};
 925
 926static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)
 927{
 928        int i;
 929
 930        for (i = 0; i < pcie->nr_channels; i++) {
 931                struct net_device *netdev;
 932                struct kvaser_pciefd_can *can;
 933                u32 status, tx_npackets;
 934
 935                netdev = alloc_candev(sizeof(struct kvaser_pciefd_can),
 936                                      KVASER_PCIEFD_CAN_TX_MAX_COUNT);
 937                if (!netdev)
 938                        return -ENOMEM;
 939
 940                can = netdev_priv(netdev);
 941                netdev->netdev_ops = &kvaser_pciefd_netdev_ops;
 942                can->reg_base = pcie->reg_base + KVASER_PCIEFD_KCAN0_BASE +
 943                                i * KVASER_PCIEFD_KCAN_BASE_OFFSET;
 944
 945                can->kv_pcie = pcie;
 946                can->cmd_seq = 0;
 947                can->err_rep_cnt = 0;
 948                can->bec.txerr = 0;
 949                can->bec.rxerr = 0;
 950
 951                init_completion(&can->start_comp);
 952                init_completion(&can->flush_comp);
 953                timer_setup(&can->bec_poll_timer, kvaser_pciefd_bec_poll_timer,
 954                            0);
 955
 956                /* Disable Bus load reporting */
 957                iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_BUS_LOAD_REG);
 958
 959                tx_npackets = ioread32(can->reg_base +
 960                                       KVASER_PCIEFD_KCAN_TX_NPACKETS_REG);
 961                if (((tx_npackets >> KVASER_PCIEFD_KCAN_TX_NPACKETS_MAX_SHIFT) &
 962                      0xff) < KVASER_PCIEFD_CAN_TX_MAX_COUNT) {
 963                        dev_err(&pcie->pci->dev,
 964                                "Max Tx count is smaller than expected\n");
 965
 966                        free_candev(netdev);
 967                        return -ENODEV;
 968                }
 969
 970                can->can.clock.freq = pcie->freq;
 971                can->can.echo_skb_max = KVASER_PCIEFD_CAN_TX_MAX_COUNT;
 972                can->echo_idx = 0;
 973                spin_lock_init(&can->echo_lock);
 974                spin_lock_init(&can->lock);
 975                can->can.bittiming_const = &kvaser_pciefd_bittiming_const;
 976                can->can.data_bittiming_const = &kvaser_pciefd_bittiming_const;
 977
 978                can->can.do_set_bittiming = kvaser_pciefd_set_nominal_bittiming;
 979                can->can.do_set_data_bittiming =
 980                        kvaser_pciefd_set_data_bittiming;
 981
 982                can->can.do_set_mode = kvaser_pciefd_set_mode;
 983                can->can.do_get_berr_counter = kvaser_pciefd_get_berr_counter;
 984
 985                can->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
 986                                              CAN_CTRLMODE_FD |
 987                                              CAN_CTRLMODE_FD_NON_ISO;
 988
 989                status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
 990                if (!(status & KVASER_PCIEFD_KCAN_STAT_FD)) {
 991                        dev_err(&pcie->pci->dev,
 992                                "CAN FD not supported as expected %d\n", i);
 993
 994                        free_candev(netdev);
 995                        return -ENODEV;
 996                }
 997
 998                if (status & KVASER_PCIEFD_KCAN_STAT_CAP)
 999                        can->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
1000
1001                netdev->flags |= IFF_ECHO;
1002
1003                SET_NETDEV_DEV(netdev, &pcie->pci->dev);
1004
1005                iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
1006                iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD |
1007                          KVASER_PCIEFD_KCAN_IRQ_TFD,
1008                          can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
1009
1010                pcie->can[i] = can;
1011                kvaser_pciefd_pwm_start(can);
1012        }
1013
1014        return 0;
1015}
1016
1017static int kvaser_pciefd_reg_candev(struct kvaser_pciefd *pcie)
1018{
1019        int i;
1020
1021        for (i = 0; i < pcie->nr_channels; i++) {
1022                int err = register_candev(pcie->can[i]->can.dev);
1023
1024                if (err) {
1025                        int j;
1026
1027                        /* Unregister all successfully registered devices. */
1028                        for (j = 0; j < i; j++)
1029                                unregister_candev(pcie->can[j]->can.dev);
1030                        return err;
1031                }
1032        }
1033
1034        return 0;
1035}
1036
1037static void kvaser_pciefd_write_dma_map(struct kvaser_pciefd *pcie,
1038                                        dma_addr_t addr, int offset)
1039{
1040        u32 word1, word2;
1041
1042#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1043        word1 = addr | KVASER_PCIEFD_64BIT_DMA_BIT;
1044        word2 = addr >> 32;
1045#else
1046        word1 = addr;
1047        word2 = 0;
1048#endif
1049        iowrite32(word1, pcie->reg_base + offset);
1050        iowrite32(word2, pcie->reg_base + offset + 4);
1051}
1052
1053static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
1054{
1055        int i;
1056        u32 srb_status;
1057        dma_addr_t dma_addr[KVASER_PCIEFD_DMA_COUNT];
1058
1059        /* Disable the DMA */
1060        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_SRB_CTRL_REG);
1061        for (i = 0; i < KVASER_PCIEFD_DMA_COUNT; i++) {
1062                unsigned int offset = KVASER_PCIEFD_DMA_MAP_BASE + 8 * i;
1063
1064                pcie->dma_data[i] =
1065                        dmam_alloc_coherent(&pcie->pci->dev,
1066                                            KVASER_PCIEFD_DMA_SIZE,
1067                                            &dma_addr[i],
1068                                            GFP_KERNEL);
1069
1070                if (!pcie->dma_data[i] || !dma_addr[i]) {
1071                        dev_err(&pcie->pci->dev, "Rx dma_alloc(%u) failure\n",
1072                                KVASER_PCIEFD_DMA_SIZE);
1073                        return -ENOMEM;
1074                }
1075
1076                kvaser_pciefd_write_dma_map(pcie, dma_addr[i], offset);
1077        }
1078
1079        /* Reset Rx FIFO, and both DMA buffers */
1080        iowrite32(KVASER_PCIEFD_SRB_CMD_FOR | KVASER_PCIEFD_SRB_CMD_RDB0 |
1081                  KVASER_PCIEFD_SRB_CMD_RDB1,
1082                  pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG);
1083
1084        srb_status = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_STAT_REG);
1085        if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DI)) {
1086                dev_err(&pcie->pci->dev, "DMA not idle before enabling\n");
1087                return -EIO;
1088        }
1089
1090        /* Enable the DMA */
1091        iowrite32(KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE,
1092                  pcie->reg_base + KVASER_PCIEFD_SRB_CTRL_REG);
1093
1094        return 0;
1095}
1096
1097static int kvaser_pciefd_setup_board(struct kvaser_pciefd *pcie)
1098{
1099        u32 sysid, srb_status, build;
1100        u8 sysid_nr_chan;
1101        int ret;
1102
1103        ret = kvaser_pciefd_read_cfg(pcie);
1104        if (ret)
1105                return ret;
1106
1107        sysid = ioread32(pcie->reg_base + KVASER_PCIEFD_SYSID_VERSION_REG);
1108        sysid_nr_chan = (sysid >> KVASER_PCIEFD_SYSID_NRCHAN_SHIFT) & 0xff;
1109        if (pcie->nr_channels != sysid_nr_chan) {
1110                dev_err(&pcie->pci->dev,
1111                        "Number of channels does not match: %u vs %u\n",
1112                        pcie->nr_channels,
1113                        sysid_nr_chan);
1114                return -ENODEV;
1115        }
1116
1117        if (pcie->nr_channels > KVASER_PCIEFD_MAX_CAN_CHANNELS)
1118                pcie->nr_channels = KVASER_PCIEFD_MAX_CAN_CHANNELS;
1119
1120        build = ioread32(pcie->reg_base + KVASER_PCIEFD_SYSID_BUILD_REG);
1121        dev_dbg(&pcie->pci->dev, "Version %u.%u.%u\n",
1122                (sysid >> KVASER_PCIEFD_SYSID_MAJOR_VER_SHIFT) & 0xff,
1123                sysid & 0xff,
1124                (build >> KVASER_PCIEFD_SYSID_BUILD_VER_SHIFT) & 0x7fff);
1125
1126        srb_status = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_STAT_REG);
1127        if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DMA)) {
1128                dev_err(&pcie->pci->dev,
1129                        "Hardware without DMA is not supported\n");
1130                return -ENODEV;
1131        }
1132
1133        pcie->bus_freq = ioread32(pcie->reg_base +
1134                                  KVASER_PCIEFD_SYSID_BUSFREQ_REG);
1135        pcie->freq = ioread32(pcie->reg_base + KVASER_PCIEFD_SYSID_CANFREQ_REG);
1136        pcie->freq_to_ticks_div = pcie->freq / 1000000;
1137        if (pcie->freq_to_ticks_div == 0)
1138                pcie->freq_to_ticks_div = 1;
1139
1140        /* Turn off all loopback functionality */
1141        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_LOOP_REG);
1142        return ret;
1143}
1144
1145static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
1146                                            struct kvaser_pciefd_rx_packet *p,
1147                                            __le32 *data)
1148{
1149        struct sk_buff *skb;
1150        struct canfd_frame *cf;
1151        struct can_priv *priv;
1152        struct net_device_stats *stats;
1153        struct skb_shared_hwtstamps *shhwtstamps;
1154        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1155
1156        if (ch_id >= pcie->nr_channels)
1157                return -EIO;
1158
1159        priv = &pcie->can[ch_id]->can;
1160        stats = &priv->dev->stats;
1161
1162        if (p->header[1] & KVASER_PCIEFD_RPACKET_FDF) {
1163                skb = alloc_canfd_skb(priv->dev, &cf);
1164                if (!skb) {
1165                        stats->rx_dropped++;
1166                        return -ENOMEM;
1167                }
1168
1169                if (p->header[1] & KVASER_PCIEFD_RPACKET_BRS)
1170                        cf->flags |= CANFD_BRS;
1171
1172                if (p->header[1] & KVASER_PCIEFD_RPACKET_ESI)
1173                        cf->flags |= CANFD_ESI;
1174        } else {
1175                skb = alloc_can_skb(priv->dev, (struct can_frame **)&cf);
1176                if (!skb) {
1177                        stats->rx_dropped++;
1178                        return -ENOMEM;
1179                }
1180        }
1181
1182        cf->can_id = p->header[0] & CAN_EFF_MASK;
1183        if (p->header[0] & KVASER_PCIEFD_RPACKET_IDE)
1184                cf->can_id |= CAN_EFF_FLAG;
1185
1186        cf->len = can_fd_dlc2len(p->header[1] >> KVASER_PCIEFD_RPACKET_DLC_SHIFT);
1187
1188        if (p->header[0] & KVASER_PCIEFD_RPACKET_RTR) {
1189                cf->can_id |= CAN_RTR_FLAG;
1190        } else {
1191                memcpy(cf->data, data, cf->len);
1192
1193                stats->rx_bytes += cf->len;
1194        }
1195        stats->rx_packets++;
1196
1197        shhwtstamps = skb_hwtstamps(skb);
1198
1199        shhwtstamps->hwtstamp =
1200                ns_to_ktime(div_u64(p->timestamp * 1000,
1201                                    pcie->freq_to_ticks_div));
1202
1203        return netif_rx(skb);
1204}
1205
1206static void kvaser_pciefd_change_state(struct kvaser_pciefd_can *can,
1207                                       struct can_frame *cf,
1208                                       enum can_state new_state,
1209                                       enum can_state tx_state,
1210                                       enum can_state rx_state)
1211{
1212        can_change_state(can->can.dev, cf, tx_state, rx_state);
1213
1214        if (new_state == CAN_STATE_BUS_OFF) {
1215                struct net_device *ndev = can->can.dev;
1216                unsigned long irq_flags;
1217
1218                spin_lock_irqsave(&can->lock, irq_flags);
1219                netif_stop_queue(can->can.dev);
1220                spin_unlock_irqrestore(&can->lock, irq_flags);
1221
1222                /* Prevent CAN controller from auto recover from bus off */
1223                if (!can->can.restart_ms) {
1224                        kvaser_pciefd_start_controller_flush(can);
1225                        can_bus_off(ndev);
1226                }
1227        }
1228}
1229
1230static void kvaser_pciefd_packet_to_state(struct kvaser_pciefd_rx_packet *p,
1231                                          struct can_berr_counter *bec,
1232                                          enum can_state *new_state,
1233                                          enum can_state *tx_state,
1234                                          enum can_state *rx_state)
1235{
1236        if (p->header[0] & KVASER_PCIEFD_SPACK_BOFF ||
1237            p->header[0] & KVASER_PCIEFD_SPACK_IRM)
1238                *new_state = CAN_STATE_BUS_OFF;
1239        else if (bec->txerr >= 255 ||  bec->rxerr >= 255)
1240                *new_state = CAN_STATE_BUS_OFF;
1241        else if (p->header[1] & KVASER_PCIEFD_SPACK_EPLR)
1242                *new_state = CAN_STATE_ERROR_PASSIVE;
1243        else if (bec->txerr >= 128 || bec->rxerr >= 128)
1244                *new_state = CAN_STATE_ERROR_PASSIVE;
1245        else if (p->header[1] & KVASER_PCIEFD_SPACK_EWLR)
1246                *new_state = CAN_STATE_ERROR_WARNING;
1247        else if (bec->txerr >= 96 || bec->rxerr >= 96)
1248                *new_state = CAN_STATE_ERROR_WARNING;
1249        else
1250                *new_state = CAN_STATE_ERROR_ACTIVE;
1251
1252        *tx_state = bec->txerr >= bec->rxerr ? *new_state : 0;
1253        *rx_state = bec->txerr <= bec->rxerr ? *new_state : 0;
1254}
1255
1256static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
1257                                        struct kvaser_pciefd_rx_packet *p)
1258{
1259        struct can_berr_counter bec;
1260        enum can_state old_state, new_state, tx_state, rx_state;
1261        struct net_device *ndev = can->can.dev;
1262        struct sk_buff *skb;
1263        struct can_frame *cf = NULL;
1264        struct skb_shared_hwtstamps *shhwtstamps;
1265        struct net_device_stats *stats = &ndev->stats;
1266
1267        old_state = can->can.state;
1268
1269        bec.txerr = p->header[0] & 0xff;
1270        bec.rxerr = (p->header[0] >> KVASER_PCIEFD_SPACK_RXERR_SHIFT) & 0xff;
1271
1272        kvaser_pciefd_packet_to_state(p, &bec, &new_state, &tx_state,
1273                                      &rx_state);
1274
1275        skb = alloc_can_err_skb(ndev, &cf);
1276
1277        if (new_state != old_state) {
1278                kvaser_pciefd_change_state(can, cf, new_state, tx_state,
1279                                           rx_state);
1280
1281                if (old_state == CAN_STATE_BUS_OFF &&
1282                    new_state == CAN_STATE_ERROR_ACTIVE &&
1283                    can->can.restart_ms) {
1284                        can->can.can_stats.restarts++;
1285                        if (skb)
1286                                cf->can_id |= CAN_ERR_RESTARTED;
1287                }
1288        }
1289
1290        can->err_rep_cnt++;
1291        can->can.can_stats.bus_error++;
1292        if (p->header[1] & KVASER_PCIEFD_EPACK_DIR_TX)
1293                stats->tx_errors++;
1294        else
1295                stats->rx_errors++;
1296
1297        can->bec.txerr = bec.txerr;
1298        can->bec.rxerr = bec.rxerr;
1299
1300        if (!skb) {
1301                stats->rx_dropped++;
1302                return -ENOMEM;
1303        }
1304
1305        shhwtstamps = skb_hwtstamps(skb);
1306        shhwtstamps->hwtstamp =
1307                ns_to_ktime(div_u64(p->timestamp * 1000,
1308                                    can->kv_pcie->freq_to_ticks_div));
1309        cf->can_id |= CAN_ERR_BUSERROR;
1310
1311        cf->data[6] = bec.txerr;
1312        cf->data[7] = bec.rxerr;
1313
1314        netif_rx(skb);
1315        return 0;
1316}
1317
1318static int kvaser_pciefd_handle_error_packet(struct kvaser_pciefd *pcie,
1319                                             struct kvaser_pciefd_rx_packet *p)
1320{
1321        struct kvaser_pciefd_can *can;
1322        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1323
1324        if (ch_id >= pcie->nr_channels)
1325                return -EIO;
1326
1327        can = pcie->can[ch_id];
1328
1329        kvaser_pciefd_rx_error_frame(can, p);
1330        if (can->err_rep_cnt >= KVASER_PCIEFD_MAX_ERR_REP)
1331                /* Do not report more errors, until bec_poll_timer expires */
1332                kvaser_pciefd_disable_err_gen(can);
1333        /* Start polling the error counters */
1334        mod_timer(&can->bec_poll_timer, KVASER_PCIEFD_BEC_POLL_FREQ);
1335        return 0;
1336}
1337
1338static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can,
1339                                            struct kvaser_pciefd_rx_packet *p)
1340{
1341        struct can_berr_counter bec;
1342        enum can_state old_state, new_state, tx_state, rx_state;
1343
1344        old_state = can->can.state;
1345
1346        bec.txerr = p->header[0] & 0xff;
1347        bec.rxerr = (p->header[0] >> KVASER_PCIEFD_SPACK_RXERR_SHIFT) & 0xff;
1348
1349        kvaser_pciefd_packet_to_state(p, &bec, &new_state, &tx_state,
1350                                      &rx_state);
1351
1352        if (new_state != old_state) {
1353                struct net_device *ndev = can->can.dev;
1354                struct sk_buff *skb;
1355                struct can_frame *cf;
1356                struct skb_shared_hwtstamps *shhwtstamps;
1357
1358                skb = alloc_can_err_skb(ndev, &cf);
1359                if (!skb) {
1360                        struct net_device_stats *stats = &ndev->stats;
1361
1362                        stats->rx_dropped++;
1363                        return -ENOMEM;
1364                }
1365
1366                kvaser_pciefd_change_state(can, cf, new_state, tx_state,
1367                                           rx_state);
1368
1369                if (old_state == CAN_STATE_BUS_OFF &&
1370                    new_state == CAN_STATE_ERROR_ACTIVE &&
1371                    can->can.restart_ms) {
1372                        can->can.can_stats.restarts++;
1373                        cf->can_id |= CAN_ERR_RESTARTED;
1374                }
1375
1376                shhwtstamps = skb_hwtstamps(skb);
1377                shhwtstamps->hwtstamp =
1378                        ns_to_ktime(div_u64(p->timestamp * 1000,
1379                                            can->kv_pcie->freq_to_ticks_div));
1380
1381                cf->data[6] = bec.txerr;
1382                cf->data[7] = bec.rxerr;
1383
1384                netif_rx(skb);
1385        }
1386        can->bec.txerr = bec.txerr;
1387        can->bec.rxerr = bec.rxerr;
1388        /* Check if we need to poll the error counters */
1389        if (bec.txerr || bec.rxerr)
1390                mod_timer(&can->bec_poll_timer, KVASER_PCIEFD_BEC_POLL_FREQ);
1391
1392        return 0;
1393}
1394
1395static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie,
1396                                              struct kvaser_pciefd_rx_packet *p)
1397{
1398        struct kvaser_pciefd_can *can;
1399        u8 cmdseq;
1400        u32 status;
1401        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1402
1403        if (ch_id >= pcie->nr_channels)
1404                return -EIO;
1405
1406        can = pcie->can[ch_id];
1407
1408        status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
1409        cmdseq = (status >> KVASER_PCIEFD_KCAN_STAT_SEQNO_SHIFT) & 0xff;
1410
1411        /* Reset done, start abort and flush */
1412        if (p->header[0] & KVASER_PCIEFD_SPACK_IRM &&
1413            p->header[0] & KVASER_PCIEFD_SPACK_RMCD &&
1414            p->header[1] & KVASER_PCIEFD_SPACK_AUTO &&
1415            cmdseq == (p->header[1] & KVASER_PCIEFD_PACKET_SEQ_MSK) &&
1416            status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
1417                u32 cmd;
1418
1419                iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD,
1420                          can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
1421                cmd = KVASER_PCIEFD_KCAN_CMD_AT;
1422                cmd |= ++can->cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT;
1423                iowrite32(cmd, can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG);
1424
1425                iowrite32(KVASER_PCIEFD_KCAN_IRQ_TFD,
1426                          can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
1427        } else if (p->header[0] & KVASER_PCIEFD_SPACK_IDET &&
1428                   p->header[0] & KVASER_PCIEFD_SPACK_IRM &&
1429                   cmdseq == (p->header[1] & KVASER_PCIEFD_PACKET_SEQ_MSK) &&
1430                   status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
1431                /* Reset detected, send end of flush if no packet are in FIFO */
1432                u8 count = ioread32(can->reg_base +
1433                                    KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff;
1434
1435                if (!count)
1436                        iowrite32(KVASER_PCIEFD_KCAN_CTRL_EFLUSH,
1437                                  can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG);
1438        } else if (!(p->header[1] & KVASER_PCIEFD_SPACK_AUTO) &&
1439                   cmdseq == (p->header[1] & KVASER_PCIEFD_PACKET_SEQ_MSK)) {
1440                /* Response to status request received */
1441                kvaser_pciefd_handle_status_resp(can, p);
1442                if (can->can.state != CAN_STATE_BUS_OFF &&
1443                    can->can.state != CAN_STATE_ERROR_ACTIVE) {
1444                        mod_timer(&can->bec_poll_timer,
1445                                  KVASER_PCIEFD_BEC_POLL_FREQ);
1446                }
1447        } else if (p->header[0] & KVASER_PCIEFD_SPACK_RMCD &&
1448                   !(status & KVASER_PCIEFD_KCAN_STAT_BUS_OFF_MSK)) {
1449                /* Reset to bus on detected */
1450                if (!completion_done(&can->start_comp))
1451                        complete(&can->start_comp);
1452        }
1453
1454        return 0;
1455}
1456
1457static int kvaser_pciefd_handle_eack_packet(struct kvaser_pciefd *pcie,
1458                                            struct kvaser_pciefd_rx_packet *p)
1459{
1460        struct kvaser_pciefd_can *can;
1461        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1462
1463        if (ch_id >= pcie->nr_channels)
1464                return -EIO;
1465
1466        can = pcie->can[ch_id];
1467
1468        /* If this is the last flushed packet, send end of flush */
1469        if (p->header[0] & KVASER_PCIEFD_APACKET_FLU) {
1470                u8 count = ioread32(can->reg_base +
1471                                    KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff;
1472
1473                if (count == 0)
1474                        iowrite32(KVASER_PCIEFD_KCAN_CTRL_EFLUSH,
1475                                  can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG);
1476        } else {
1477                int echo_idx = p->header[0] & KVASER_PCIEFD_PACKET_SEQ_MSK;
1478                int dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL);
1479                struct net_device_stats *stats = &can->can.dev->stats;
1480
1481                stats->tx_bytes += dlc;
1482                stats->tx_packets++;
1483
1484                if (netif_queue_stopped(can->can.dev))
1485                        netif_wake_queue(can->can.dev);
1486        }
1487
1488        return 0;
1489}
1490
1491static void kvaser_pciefd_handle_nack_packet(struct kvaser_pciefd_can *can,
1492                                             struct kvaser_pciefd_rx_packet *p)
1493{
1494        struct sk_buff *skb;
1495        struct net_device_stats *stats = &can->can.dev->stats;
1496        struct can_frame *cf;
1497
1498        skb = alloc_can_err_skb(can->can.dev, &cf);
1499
1500        stats->tx_errors++;
1501        if (p->header[0] & KVASER_PCIEFD_APACKET_ABL) {
1502                if (skb)
1503                        cf->can_id |= CAN_ERR_LOSTARB;
1504                can->can.can_stats.arbitration_lost++;
1505        } else if (skb) {
1506                cf->can_id |= CAN_ERR_ACK;
1507        }
1508
1509        if (skb) {
1510                cf->can_id |= CAN_ERR_BUSERROR;
1511                netif_rx(skb);
1512        } else {
1513                stats->rx_dropped++;
1514                netdev_warn(can->can.dev, "No memory left for err_skb\n");
1515        }
1516}
1517
1518static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie,
1519                                           struct kvaser_pciefd_rx_packet *p)
1520{
1521        struct kvaser_pciefd_can *can;
1522        bool one_shot_fail = false;
1523        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1524
1525        if (ch_id >= pcie->nr_channels)
1526                return -EIO;
1527
1528        can = pcie->can[ch_id];
1529        /* Ignore control packet ACK */
1530        if (p->header[0] & KVASER_PCIEFD_APACKET_CT)
1531                return 0;
1532
1533        if (p->header[0] & KVASER_PCIEFD_APACKET_NACK) {
1534                kvaser_pciefd_handle_nack_packet(can, p);
1535                one_shot_fail = true;
1536        }
1537
1538        if (p->header[0] & KVASER_PCIEFD_APACKET_FLU) {
1539                netdev_dbg(can->can.dev, "Packet was flushed\n");
1540        } else {
1541                int echo_idx = p->header[0] & KVASER_PCIEFD_PACKET_SEQ_MSK;
1542                int dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL);
1543                u8 count = ioread32(can->reg_base +
1544                                    KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff;
1545
1546                if (count < KVASER_PCIEFD_CAN_TX_MAX_COUNT &&
1547                    netif_queue_stopped(can->can.dev))
1548                        netif_wake_queue(can->can.dev);
1549
1550                if (!one_shot_fail) {
1551                        struct net_device_stats *stats = &can->can.dev->stats;
1552
1553                        stats->tx_bytes += dlc;
1554                        stats->tx_packets++;
1555                }
1556        }
1557
1558        return 0;
1559}
1560
1561static int kvaser_pciefd_handle_eflush_packet(struct kvaser_pciefd *pcie,
1562                                              struct kvaser_pciefd_rx_packet *p)
1563{
1564        struct kvaser_pciefd_can *can;
1565        u8 ch_id = (p->header[1] >> KVASER_PCIEFD_PACKET_CHID_SHIFT) & 0x7;
1566
1567        if (ch_id >= pcie->nr_channels)
1568                return -EIO;
1569
1570        can = pcie->can[ch_id];
1571
1572        if (!completion_done(&can->flush_comp))
1573                complete(&can->flush_comp);
1574
1575        return 0;
1576}
1577
1578static int kvaser_pciefd_read_packet(struct kvaser_pciefd *pcie, int *start_pos,
1579                                     int dma_buf)
1580{
1581        __le32 *buffer = pcie->dma_data[dma_buf];
1582        __le64 timestamp;
1583        struct kvaser_pciefd_rx_packet packet;
1584        struct kvaser_pciefd_rx_packet *p = &packet;
1585        u8 type;
1586        int pos = *start_pos;
1587        int size;
1588        int ret = 0;
1589
1590        size = le32_to_cpu(buffer[pos++]);
1591        if (!size) {
1592                *start_pos = 0;
1593                return 0;
1594        }
1595
1596        p->header[0] = le32_to_cpu(buffer[pos++]);
1597        p->header[1] = le32_to_cpu(buffer[pos++]);
1598
1599        /* Read 64-bit timestamp */
1600        memcpy(&timestamp, &buffer[pos], sizeof(__le64));
1601        pos += 2;
1602        p->timestamp = le64_to_cpu(timestamp);
1603
1604        type = (p->header[1] >> KVASER_PCIEFD_PACKET_TYPE_SHIFT) & 0xf;
1605        switch (type) {
1606        case KVASER_PCIEFD_PACK_TYPE_DATA:
1607                ret = kvaser_pciefd_handle_data_packet(pcie, p, &buffer[pos]);
1608                if (!(p->header[0] & KVASER_PCIEFD_RPACKET_RTR)) {
1609                        u8 data_len;
1610
1611                        data_len = can_fd_dlc2len(p->header[1] >>
1612                                               KVASER_PCIEFD_RPACKET_DLC_SHIFT);
1613                        pos += DIV_ROUND_UP(data_len, 4);
1614                }
1615                break;
1616
1617        case KVASER_PCIEFD_PACK_TYPE_ACK:
1618                ret = kvaser_pciefd_handle_ack_packet(pcie, p);
1619                break;
1620
1621        case KVASER_PCIEFD_PACK_TYPE_STATUS:
1622                ret = kvaser_pciefd_handle_status_packet(pcie, p);
1623                break;
1624
1625        case KVASER_PCIEFD_PACK_TYPE_ERROR:
1626                ret = kvaser_pciefd_handle_error_packet(pcie, p);
1627                break;
1628
1629        case KVASER_PCIEFD_PACK_TYPE_EFRAME_ACK:
1630                ret = kvaser_pciefd_handle_eack_packet(pcie, p);
1631                break;
1632
1633        case KVASER_PCIEFD_PACK_TYPE_EFLUSH_ACK:
1634                ret = kvaser_pciefd_handle_eflush_packet(pcie, p);
1635                break;
1636
1637        case KVASER_PCIEFD_PACK_TYPE_ACK_DATA:
1638        case KVASER_PCIEFD_PACK_TYPE_BUS_LOAD:
1639        case KVASER_PCIEFD_PACK_TYPE_TXRQ:
1640                dev_info(&pcie->pci->dev,
1641                         "Received unexpected packet type 0x%08X\n", type);
1642                break;
1643
1644        default:
1645                dev_err(&pcie->pci->dev, "Unknown packet type 0x%08X\n", type);
1646                ret = -EIO;
1647                break;
1648        }
1649
1650        if (ret)
1651                return ret;
1652
1653        /* Position does not point to the end of the package,
1654         * corrupted packet size?
1655         */
1656        if ((*start_pos + size) != pos)
1657                return -EIO;
1658
1659        /* Point to the next packet header, if any */
1660        *start_pos = pos;
1661
1662        return ret;
1663}
1664
1665static int kvaser_pciefd_read_buffer(struct kvaser_pciefd *pcie, int dma_buf)
1666{
1667        int pos = 0;
1668        int res = 0;
1669
1670        do {
1671                res = kvaser_pciefd_read_packet(pcie, &pos, dma_buf);
1672        } while (!res && pos > 0 && pos < KVASER_PCIEFD_DMA_SIZE);
1673
1674        return res;
1675}
1676
1677static int kvaser_pciefd_receive_irq(struct kvaser_pciefd *pcie)
1678{
1679        u32 irq;
1680
1681        irq = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_IRQ_REG);
1682        if (irq & KVASER_PCIEFD_SRB_IRQ_DPD0) {
1683                kvaser_pciefd_read_buffer(pcie, 0);
1684                /* Reset DMA buffer 0 */
1685                iowrite32(KVASER_PCIEFD_SRB_CMD_RDB0,
1686                          pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG);
1687        }
1688
1689        if (irq & KVASER_PCIEFD_SRB_IRQ_DPD1) {
1690                kvaser_pciefd_read_buffer(pcie, 1);
1691                /* Reset DMA buffer 1 */
1692                iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1,
1693                          pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG);
1694        }
1695
1696        if (irq & KVASER_PCIEFD_SRB_IRQ_DOF0 ||
1697            irq & KVASER_PCIEFD_SRB_IRQ_DOF1 ||
1698            irq & KVASER_PCIEFD_SRB_IRQ_DUF0 ||
1699            irq & KVASER_PCIEFD_SRB_IRQ_DUF1)
1700                dev_err(&pcie->pci->dev, "DMA IRQ error 0x%08X\n", irq);
1701
1702        iowrite32(irq, pcie->reg_base + KVASER_PCIEFD_SRB_IRQ_REG);
1703        return 0;
1704}
1705
1706static int kvaser_pciefd_transmit_irq(struct kvaser_pciefd_can *can)
1707{
1708        u32 irq = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
1709
1710        if (irq & KVASER_PCIEFD_KCAN_IRQ_TOF)
1711                netdev_err(can->can.dev, "Tx FIFO overflow\n");
1712
1713        if (irq & KVASER_PCIEFD_KCAN_IRQ_TFD) {
1714                u8 count = ioread32(can->reg_base +
1715                                    KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff;
1716
1717                if (count == 0)
1718                        iowrite32(KVASER_PCIEFD_KCAN_CTRL_EFLUSH,
1719                                  can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG);
1720        }
1721
1722        if (irq & KVASER_PCIEFD_KCAN_IRQ_BPP)
1723                netdev_err(can->can.dev,
1724                           "Fail to change bittiming, when not in reset mode\n");
1725
1726        if (irq & KVASER_PCIEFD_KCAN_IRQ_FDIC)
1727                netdev_err(can->can.dev, "CAN FD frame in CAN mode\n");
1728
1729        if (irq & KVASER_PCIEFD_KCAN_IRQ_ROF)
1730                netdev_err(can->can.dev, "Rx FIFO overflow\n");
1731
1732        iowrite32(irq, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
1733        return 0;
1734}
1735
1736static irqreturn_t kvaser_pciefd_irq_handler(int irq, void *dev)
1737{
1738        struct kvaser_pciefd *pcie = (struct kvaser_pciefd *)dev;
1739        u32 board_irq;
1740        int i;
1741
1742        board_irq = ioread32(pcie->reg_base + KVASER_PCIEFD_IRQ_REG);
1743
1744        if (!(board_irq & KVASER_PCIEFD_IRQ_ALL_MSK))
1745                return IRQ_NONE;
1746
1747        if (board_irq & KVASER_PCIEFD_IRQ_SRB)
1748                kvaser_pciefd_receive_irq(pcie);
1749
1750        for (i = 0; i < pcie->nr_channels; i++) {
1751                if (!pcie->can[i]) {
1752                        dev_err(&pcie->pci->dev,
1753                                "IRQ mask points to unallocated controller\n");
1754                        break;
1755                }
1756
1757                /* Check that mask matches channel (i) IRQ mask */
1758                if (board_irq & (1 << i))
1759                        kvaser_pciefd_transmit_irq(pcie->can[i]);
1760        }
1761
1762        iowrite32(board_irq, pcie->reg_base + KVASER_PCIEFD_IRQ_REG);
1763        return IRQ_HANDLED;
1764}
1765
1766static void kvaser_pciefd_teardown_can_ctrls(struct kvaser_pciefd *pcie)
1767{
1768        int i;
1769        struct kvaser_pciefd_can *can;
1770
1771        for (i = 0; i < pcie->nr_channels; i++) {
1772                can = pcie->can[i];
1773                if (can) {
1774                        iowrite32(0,
1775                                  can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
1776                        kvaser_pciefd_pwm_stop(can);
1777                        free_candev(can->can.dev);
1778                }
1779        }
1780}
1781
1782static int kvaser_pciefd_probe(struct pci_dev *pdev,
1783                               const struct pci_device_id *id)
1784{
1785        int err;
1786        struct kvaser_pciefd *pcie;
1787
1788        pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
1789        if (!pcie)
1790                return -ENOMEM;
1791
1792        pci_set_drvdata(pdev, pcie);
1793        pcie->pci = pdev;
1794
1795        err = pci_enable_device(pdev);
1796        if (err)
1797                return err;
1798
1799        err = pci_request_regions(pdev, KVASER_PCIEFD_DRV_NAME);
1800        if (err)
1801                goto err_disable_pci;
1802
1803        pcie->reg_base = pci_iomap(pdev, 0, 0);
1804        if (!pcie->reg_base) {
1805                err = -ENOMEM;
1806                goto err_release_regions;
1807        }
1808
1809        err = kvaser_pciefd_setup_board(pcie);
1810        if (err)
1811                goto err_pci_iounmap;
1812
1813        err = kvaser_pciefd_setup_dma(pcie);
1814        if (err)
1815                goto err_pci_iounmap;
1816
1817        pci_set_master(pdev);
1818
1819        err = kvaser_pciefd_setup_can_ctrls(pcie);
1820        if (err)
1821                goto err_teardown_can_ctrls;
1822
1823        iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1,
1824                  pcie->reg_base + KVASER_PCIEFD_SRB_IRQ_REG);
1825
1826        iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1 |
1827                  KVASER_PCIEFD_SRB_IRQ_DOF0 | KVASER_PCIEFD_SRB_IRQ_DOF1 |
1828                  KVASER_PCIEFD_SRB_IRQ_DUF0 | KVASER_PCIEFD_SRB_IRQ_DUF1,
1829                  pcie->reg_base + KVASER_PCIEFD_SRB_IEN_REG);
1830
1831        /* Reset IRQ handling, expected to be off before */
1832        iowrite32(KVASER_PCIEFD_IRQ_ALL_MSK,
1833                  pcie->reg_base + KVASER_PCIEFD_IRQ_REG);
1834        iowrite32(KVASER_PCIEFD_IRQ_ALL_MSK,
1835                  pcie->reg_base + KVASER_PCIEFD_IEN_REG);
1836
1837        /* Ready the DMA buffers */
1838        iowrite32(KVASER_PCIEFD_SRB_CMD_RDB0,
1839                  pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG);
1840        iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1,
1841                  pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG);
1842
1843        err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler,
1844                          IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie);
1845        if (err)
1846                goto err_teardown_can_ctrls;
1847
1848        err = kvaser_pciefd_reg_candev(pcie);
1849        if (err)
1850                goto err_free_irq;
1851
1852        return 0;
1853
1854err_free_irq:
1855        free_irq(pcie->pci->irq, pcie);
1856
1857err_teardown_can_ctrls:
1858        kvaser_pciefd_teardown_can_ctrls(pcie);
1859        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_SRB_CTRL_REG);
1860        pci_clear_master(pdev);
1861
1862err_pci_iounmap:
1863        pci_iounmap(pdev, pcie->reg_base);
1864
1865err_release_regions:
1866        pci_release_regions(pdev);
1867
1868err_disable_pci:
1869        pci_disable_device(pdev);
1870
1871        return err;
1872}
1873
1874static void kvaser_pciefd_remove_all_ctrls(struct kvaser_pciefd *pcie)
1875{
1876        struct kvaser_pciefd_can *can;
1877        int i;
1878
1879        for (i = 0; i < pcie->nr_channels; i++) {
1880                can = pcie->can[i];
1881                if (can) {
1882                        iowrite32(0,
1883                                  can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
1884                        unregister_candev(can->can.dev);
1885                        del_timer(&can->bec_poll_timer);
1886                        kvaser_pciefd_pwm_stop(can);
1887                        free_candev(can->can.dev);
1888                }
1889        }
1890}
1891
1892static void kvaser_pciefd_remove(struct pci_dev *pdev)
1893{
1894        struct kvaser_pciefd *pcie = pci_get_drvdata(pdev);
1895
1896        kvaser_pciefd_remove_all_ctrls(pcie);
1897
1898        /* Turn off IRQ generation */
1899        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_SRB_CTRL_REG);
1900        iowrite32(KVASER_PCIEFD_IRQ_ALL_MSK,
1901                  pcie->reg_base + KVASER_PCIEFD_IRQ_REG);
1902        iowrite32(0, pcie->reg_base + KVASER_PCIEFD_IEN_REG);
1903
1904        free_irq(pcie->pci->irq, pcie);
1905
1906        pci_clear_master(pdev);
1907        pci_iounmap(pdev, pcie->reg_base);
1908        pci_release_regions(pdev);
1909        pci_disable_device(pdev);
1910}
1911
1912static struct pci_driver kvaser_pciefd = {
1913        .name = KVASER_PCIEFD_DRV_NAME,
1914        .id_table = kvaser_pciefd_id_table,
1915        .probe = kvaser_pciefd_probe,
1916        .remove = kvaser_pciefd_remove,
1917};
1918
1919module_pci_driver(kvaser_pciefd)
1920