Lines Matching defs:pcie

254 #define KVASER_PCIEFD_GET_BLOCK_ADDR(pcie, block) \
255 ((pcie)->reg_base + (pcie)->driver_data->address_offset->block)
256 #define KVASER_PCIEFD_PCI_IEN_ADDR(pcie) \
257 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_ien))
258 #define KVASER_PCIEFD_PCI_IRQ_ADDR(pcie) \
259 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_irq))
260 #define KVASER_PCIEFD_SERDES_ADDR(pcie) \
261 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), serdes))
262 #define KVASER_PCIEFD_SYSID_ADDR(pcie) \
263 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), sysid))
264 #define KVASER_PCIEFD_LOOPBACK_ADDR(pcie) \
265 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), loopback))
266 #define KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) \
267 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb_fifo))
268 #define KVASER_PCIEFD_SRB_ADDR(pcie) \
269 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb))
270 #define KVASER_PCIEFD_KCAN_CH0_ADDR(pcie) \
271 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch0))
272 #define KVASER_PCIEFD_KCAN_CH1_ADDR(pcie) \
273 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch1))
274 #define KVASER_PCIEFD_KCAN_CHANNEL_SPAN(pcie) \
275 (KVASER_PCIEFD_KCAN_CH1_ADDR((pcie)) - KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)))
276 #define KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i) \
277 (KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)) + (i) * KVASER_PCIEFD_KCAN_CHANNEL_SPAN((pcie)))
280 static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
282 static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
298 void (*kvaser_pciefd_write_dma_map)(struct kvaser_pciefd *pcie,
521 static inline void kvaser_pciefd_set_skb_timestamp(const struct kvaser_pciefd *pcie,
525 ns_to_ktime(div_u64(timestamp * 1000, pcie->freq_to_ticks_div));
907 static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)
911 for (i = 0; i < pcie->nr_channels; i++) {
924 can->reg_base = KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i);
925 can->kv_pcie = pcie;
942 can->can.clock.freq = pcie->freq;
961 dev_err(&pcie->pci->dev,
972 SET_NETDEV_DEV(netdev, &pcie->pci->dev);
978 pcie->can[i] = can;
985 static int kvaser_pciefd_reg_candev(struct kvaser_pciefd *pcie)
989 for (i = 0; i < pcie->nr_channels; i++) {
990 int err = register_candev(pcie->can[i]->can.dev);
997 unregister_candev(pcie->can[j]->can.dev);
1005 static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
1018 serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x8 * index;
1023 static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
1033 serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x10 * index;
1038 static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
1046 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1048 pcie->dma_data[i] = dmam_alloc_coherent(&pcie->pci->dev,
1053 if (!pcie->dma_data[i] || !dma_addr[i]) {
1054 dev_err(&pcie->pci->dev, "Rx dma_alloc(%u) failure\n",
1058 pcie->driver_data->ops->kvaser_pciefd_write_dma_map(pcie, dma_addr[i], i);
1064 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1068 ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) +
1072 ioread32(KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) + KVASER_PCIEFD_SRB_FIFO_LAST_REG);
1076 srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
1078 dev_err(&pcie->pci->dev, "DMA not idle before enabling\n");
1084 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1089 static int kvaser_pciefd_setup_board(struct kvaser_pciefd *pcie)
1093 version = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_VERSION_REG);
1094 pcie->nr_channels = min(KVASER_PCIEFD_MAX_CAN_CHANNELS,
1097 build = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUILD_REG);
1098 dev_dbg(&pcie->pci->dev, "Version %lu.%lu.%lu\n",
1103 srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
1105 dev_err(&pcie->pci->dev, "Hardware without DMA is not supported\n");
1109 pcie->bus_freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUSFREQ_REG);
1110 pcie->freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_CANFREQ_REG);
1111 pcie->freq_to_ticks_div = pcie->freq / 1000000;
1112 if (pcie->freq_to_ticks_div == 0)
1113 pcie->freq_to_ticks_div = 1;
1115 iowrite32(0, KVASER_PCIEFD_LOOPBACK_ADDR(pcie));
1120 static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
1130 if (ch_id >= pcie->nr_channels)
1133 priv = &pcie->can[ch_id]->can;
1168 kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
1274 static int kvaser_pciefd_handle_error_packet(struct kvaser_pciefd *pcie,
1280 if (ch_id >= pcie->nr_channels)
1283 can = pcie->can[ch_id];
1341 static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie,
1349 if (ch_id >= pcie->nr_channels)
1352 can = pcie->can[ch_id];
1423 static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie,
1430 if (ch_id >= pcie->nr_channels)
1433 can = pcie->can[ch_id];
1453 kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
1470 static int kvaser_pciefd_handle_eflush_packet(struct kvaser_pciefd *pcie,
1476 if (ch_id >= pcie->nr_channels)
1479 can = pcie->can[ch_id];
1487 static int kvaser_pciefd_read_packet(struct kvaser_pciefd *pcie, int *start_pos,
1490 __le32 *buffer = pcie->dma_data[dma_buf];
1516 ret = kvaser_pciefd_handle_data_packet(pcie, p, &buffer[pos]);
1527 ret = kvaser_pciefd_handle_ack_packet(pcie, p);
1531 ret = kvaser_pciefd_handle_status_packet(pcie, p);
1535 ret = kvaser_pciefd_handle_error_packet(pcie, p);
1539 ret = kvaser_pciefd_handle_eflush_packet(pcie, p);
1546 dev_info(&pcie->pci->dev,
1551 dev_err(&pcie->pci->dev, "Unknown packet type 0x%08X\n", type);
1571 static int kvaser_pciefd_read_buffer(struct kvaser_pciefd *pcie, int dma_buf)
1577 res = kvaser_pciefd_read_packet(pcie, &pos, dma_buf);
1583 static void kvaser_pciefd_receive_irq(struct kvaser_pciefd *pcie)
1585 u32 irq = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1588 kvaser_pciefd_read_buffer(pcie, 0);
1591 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1595 kvaser_pciefd_read_buffer(pcie, 1);
1598 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1605 dev_err(&pcie->pci->dev, "DMA IRQ error 0x%08X\n", irq);
1607 iowrite32(irq, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1632 struct kvaser_pciefd *pcie = (struct kvaser_pciefd *)dev;
1633 const struct kvaser_pciefd_irq_mask *irq_mask = pcie->driver_data->irq_mask;
1634 u32 board_irq = ioread32(KVASER_PCIEFD_PCI_IRQ_ADDR(pcie));
1641 kvaser_pciefd_receive_irq(pcie);
1643 for (i = 0; i < pcie->nr_channels; i++) {
1644 if (!pcie->can[i]) {
1645 dev_err(&pcie->pci->dev,
1652 kvaser_pciefd_transmit_irq(pcie->can[i]);
1658 static void kvaser_pciefd_teardown_can_ctrls(struct kvaser_pciefd *pcie)
1662 for (i = 0; i < pcie->nr_channels; i++) {
1663 struct kvaser_pciefd_can *can = pcie->can[i];
1677 struct kvaser_pciefd *pcie;
1681 pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
1682 if (!pcie)
1685 pci_set_drvdata(pdev, pcie);
1686 pcie->pci = pdev;
1687 pcie->driver_data = (const struct kvaser_pciefd_driver_data *)id->driver_data;
1688 irq_mask = pcie->driver_data->irq_mask;
1698 pcie->reg_base = pci_iomap(pdev, 0, 0);
1699 if (!pcie->reg_base) {
1704 err = kvaser_pciefd_setup_board(pcie);
1708 err = kvaser_pciefd_setup_dma(pcie);
1714 err = kvaser_pciefd_setup_can_ctrls(pcie);
1718 err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler,
1719 IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie);
1724 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1729 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IEN_REG);
1732 irq_en_base = KVASER_PCIEFD_PCI_IEN_ADDR(pcie);
1736 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1738 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1740 err = kvaser_pciefd_reg_candev(pcie);
1749 free_irq(pcie->pci->irq, pcie);
1752 kvaser_pciefd_teardown_can_ctrls(pcie);
1753 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1757 pci_iounmap(pdev, pcie->reg_base);
1768 static void kvaser_pciefd_remove_all_ctrls(struct kvaser_pciefd *pcie)
1772 for (i = 0; i < pcie->nr_channels; i++) {
1773 struct kvaser_pciefd_can *can = pcie->can[i];
1787 struct kvaser_pciefd *pcie = pci_get_drvdata(pdev);
1789 kvaser_pciefd_remove_all_ctrls(pcie);
1792 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1793 iowrite32(0, KVASER_PCIEFD_PCI_IEN_ADDR(pcie));
1795 free_irq(pcie->pci->irq, pcie);
1797 pci_iounmap(pdev, pcie->reg_base);