Lines Matching refs:pcie

261 #define KVASER_PCIEFD_GET_BLOCK_ADDR(pcie, block) \
262 ((pcie)->reg_base + (pcie)->driver_data->address_offset->block)
263 #define KVASER_PCIEFD_PCI_IEN_ADDR(pcie) \
264 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_ien))
265 #define KVASER_PCIEFD_PCI_IRQ_ADDR(pcie) \
266 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_irq))
267 #define KVASER_PCIEFD_SERDES_ADDR(pcie) \
268 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), serdes))
269 #define KVASER_PCIEFD_SYSID_ADDR(pcie) \
270 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), sysid))
271 #define KVASER_PCIEFD_LOOPBACK_ADDR(pcie) \
272 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), loopback))
273 #define KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) \
274 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb_fifo))
275 #define KVASER_PCIEFD_SRB_ADDR(pcie) \
276 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb))
277 #define KVASER_PCIEFD_KCAN_CH0_ADDR(pcie) \
278 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch0))
279 #define KVASER_PCIEFD_KCAN_CH1_ADDR(pcie) \
280 (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch1))
281 #define KVASER_PCIEFD_KCAN_CHANNEL_SPAN(pcie) \
282 (KVASER_PCIEFD_KCAN_CH1_ADDR((pcie)) - KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)))
283 #define KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i) \
284 (KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)) + (i) * KVASER_PCIEFD_KCAN_CHANNEL_SPAN((pcie)))
287 static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
289 static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
291 static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
307 void (*kvaser_pciefd_write_dma_map)(struct kvaser_pciefd *pcie,
566 static inline void kvaser_pciefd_set_skb_timestamp(const struct kvaser_pciefd *pcie,
570 ns_to_ktime(div_u64(timestamp * 1000, pcie->freq_to_ticks_div));
952 static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)
956 for (i = 0; i < pcie->nr_channels; i++) {
969 can->reg_base = KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i);
970 can->kv_pcie = pcie;
987 can->can.clock.freq = pcie->freq;
1006 dev_err(&pcie->pci->dev,
1017 SET_NETDEV_DEV(netdev, &pcie->pci->dev);
1023 pcie->can[i] = can;
1030 static int kvaser_pciefd_reg_candev(struct kvaser_pciefd *pcie)
1034 for (i = 0; i < pcie->nr_channels; i++) {
1035 int err = register_candev(pcie->can[i]->can.dev);
1042 unregister_candev(pcie->can[j]->can.dev);
1050 static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
1063 serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x8 * index;
1068 static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
1078 serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x10 * index;
1083 static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
1093 serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x8 * index;
1098 static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
1106 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1108 pcie->dma_data[i] = dmam_alloc_coherent(&pcie->pci->dev,
1113 if (!pcie->dma_data[i] || !dma_addr[i]) {
1114 dev_err(&pcie->pci->dev, "Rx dma_alloc(%u) failure\n",
1118 pcie->driver_data->ops->kvaser_pciefd_write_dma_map(pcie, dma_addr[i], i);
1124 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1128 ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) +
1132 ioread32(KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) + KVASER_PCIEFD_SRB_FIFO_LAST_REG);
1136 srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
1138 dev_err(&pcie->pci->dev, "DMA not idle before enabling\n");
1144 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1149 static int kvaser_pciefd_setup_board(struct kvaser_pciefd *pcie)
1153 version = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_VERSION_REG);
1154 pcie->nr_channels = min(KVASER_PCIEFD_MAX_CAN_CHANNELS,
1157 build = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUILD_REG);
1158 dev_dbg(&pcie->pci->dev, "Version %lu.%lu.%lu\n",
1163 srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
1165 dev_err(&pcie->pci->dev, "Hardware without DMA is not supported\n");
1169 pcie->bus_freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUSFREQ_REG);
1170 pcie->freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_CANFREQ_REG);
1171 pcie->freq_to_ticks_div = pcie->freq / 1000000;
1172 if (pcie->freq_to_ticks_div == 0)
1173 pcie->freq_to_ticks_div = 1;
1175 iowrite32(0, KVASER_PCIEFD_LOOPBACK_ADDR(pcie));
1180 static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
1190 if (ch_id >= pcie->nr_channels)
1193 priv = &pcie->can[ch_id]->can;
1228 kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
1334 static int kvaser_pciefd_handle_error_packet(struct kvaser_pciefd *pcie,
1340 if (ch_id >= pcie->nr_channels)
1343 can = pcie->can[ch_id];
1401 static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie,
1409 if (ch_id >= pcie->nr_channels)
1412 can = pcie->can[ch_id];
1483 static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie,
1490 if (ch_id >= pcie->nr_channels)
1493 can = pcie->can[ch_id];
1513 kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
1530 static int kvaser_pciefd_handle_eflush_packet(struct kvaser_pciefd *pcie,
1536 if (ch_id >= pcie->nr_channels)
1539 can = pcie->can[ch_id];
1547 static int kvaser_pciefd_read_packet(struct kvaser_pciefd *pcie, int *start_pos,
1550 __le32 *buffer = pcie->dma_data[dma_buf];
1576 ret = kvaser_pciefd_handle_data_packet(pcie, p, &buffer[pos]);
1587 ret = kvaser_pciefd_handle_ack_packet(pcie, p);
1591 ret = kvaser_pciefd_handle_status_packet(pcie, p);
1595 ret = kvaser_pciefd_handle_error_packet(pcie, p);
1599 ret = kvaser_pciefd_handle_eflush_packet(pcie, p);
1606 dev_info(&pcie->pci->dev,
1611 dev_err(&pcie->pci->dev, "Unknown packet type 0x%08X\n", type);
1631 static int kvaser_pciefd_read_buffer(struct kvaser_pciefd *pcie, int dma_buf)
1637 res = kvaser_pciefd_read_packet(pcie, &pos, dma_buf);
1643 static void kvaser_pciefd_receive_irq(struct kvaser_pciefd *pcie)
1645 u32 irq = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1648 kvaser_pciefd_read_buffer(pcie, 0);
1651 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1655 kvaser_pciefd_read_buffer(pcie, 1);
1658 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1665 dev_err(&pcie->pci->dev, "DMA IRQ error 0x%08X\n", irq);
1667 iowrite32(irq, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1692 struct kvaser_pciefd *pcie = (struct kvaser_pciefd *)dev;
1693 const struct kvaser_pciefd_irq_mask *irq_mask = pcie->driver_data->irq_mask;
1694 u32 board_irq = ioread32(KVASER_PCIEFD_PCI_IRQ_ADDR(pcie));
1701 kvaser_pciefd_receive_irq(pcie);
1703 for (i = 0; i < pcie->nr_channels; i++) {
1704 if (!pcie->can[i]) {
1705 dev_err(&pcie->pci->dev,
1712 kvaser_pciefd_transmit_irq(pcie->can[i]);
1718 static void kvaser_pciefd_teardown_can_ctrls(struct kvaser_pciefd *pcie)
1722 for (i = 0; i < pcie->nr_channels; i++) {
1723 struct kvaser_pciefd_can *can = pcie->can[i];
1737 struct kvaser_pciefd *pcie;
1741 pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
1742 if (!pcie)
1745 pci_set_drvdata(pdev, pcie);
1746 pcie->pci = pdev;
1747 pcie->driver_data = (const struct kvaser_pciefd_driver_data *)id->driver_data;
1748 irq_mask = pcie->driver_data->irq_mask;
1758 pcie->reg_base = pci_iomap(pdev, 0, 0);
1759 if (!pcie->reg_base) {
1764 err = kvaser_pciefd_setup_board(pcie);
1768 err = kvaser_pciefd_setup_dma(pcie);
1774 err = kvaser_pciefd_setup_can_ctrls(pcie);
1778 err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler,
1779 IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie);
1784 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
1789 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IEN_REG);
1792 irq_en_base = KVASER_PCIEFD_PCI_IEN_ADDR(pcie);
1796 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1798 KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
1800 err = kvaser_pciefd_reg_candev(pcie);
1809 free_irq(pcie->pci->irq, pcie);
1812 kvaser_pciefd_teardown_can_ctrls(pcie);
1813 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1817 pci_iounmap(pdev, pcie->reg_base);
1828 static void kvaser_pciefd_remove_all_ctrls(struct kvaser_pciefd *pcie)
1832 for (i = 0; i < pcie->nr_channels; i++) {
1833 struct kvaser_pciefd_can *can = pcie->can[i];
1847 struct kvaser_pciefd *pcie = pci_get_drvdata(pdev);
1849 kvaser_pciefd_remove_all_ctrls(pcie);
1852 iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
1853 iowrite32(0, KVASER_PCIEFD_PCI_IEN_ADDR(pcie));
1855 free_irq(pcie->pci->irq, pcie);
1857 pci_iounmap(pdev, pcie->reg_base);