Lines Matching refs:dev
43 struct efa_dev *dev = (struct efa_dev *)data;
45 ibdev_err(&dev->ibdev,
51 struct efa_dev *dev = (struct efa_dev *)data;
53 atomic64_inc(&dev->stats.keep_alive_rcvd);
63 static void efa_release_bars(struct efa_dev *dev, int bars_mask)
65 struct pci_dev *pdev = dev->pdev;
72 static void efa_process_comp_eqe(struct efa_dev *dev, struct efa_admin_eqe *eqe)
78 cq = xa_load(&dev->cqs_xa, cqn);
80 ibdev_err_ratelimited(&dev->ibdev,
91 struct efa_dev *dev = container_of(eeq->edev, struct efa_dev, edev);
95 efa_process_comp_eqe(dev, eqe);
97 ibdev_err_ratelimited(&dev->ibdev,
115 struct efa_dev *dev = data;
117 efa_com_admin_q_comp_intr_handler(&dev->edev);
118 efa_com_aenq_intr_handler(&dev->edev, data);
123 static int efa_request_irq(struct efa_dev *dev, struct efa_irq *irq)
129 dev_err(&dev->pdev->dev, "Failed to request irq %s (%d)\n",
139 static void efa_setup_comp_irq(struct efa_dev *dev, struct efa_eq *eq,
146 pci_name(dev->pdev));
150 eq->irq.irqn = pci_irq_vector(dev->pdev, vector);
154 static void efa_free_irq(struct efa_dev *dev, struct efa_irq *irq)
160 static void efa_setup_mgmnt_irq(struct efa_dev *dev)
164 snprintf(dev->admin_irq.name, EFA_IRQNAME_SIZE,
165 "efa-mgmnt@pci:%s", pci_name(dev->pdev));
166 dev->admin_irq.handler = efa_intr_msix_mgmnt;
167 dev->admin_irq.data = dev;
168 dev->admin_irq.vector = dev->admin_msix_vector_idx;
169 dev->admin_irq.irqn = pci_irq_vector(dev->pdev,
170 dev->admin_msix_vector_idx);
173 &dev->admin_irq.affinity_hint_mask);
174 dev_info(&dev->pdev->dev, "Setup irq:%d name:%s\n",
175 dev->admin_irq.irqn,
176 dev->admin_irq.name);
179 static int efa_set_mgmnt_irq(struct efa_dev *dev)
181 efa_setup_mgmnt_irq(dev);
183 return efa_request_irq(dev, &dev->admin_irq);
186 static int efa_request_doorbell_bar(struct efa_dev *dev)
188 u8 db_bar_idx = dev->dev_attr.db_bar;
189 struct pci_dev *pdev = dev->pdev;
198 dev_err(&dev->pdev->dev,
205 dev->db_bar_addr = pci_resource_start(dev->pdev, db_bar_idx);
206 dev->db_bar_len = pci_resource_len(dev->pdev, db_bar_idx);
211 static void efa_release_doorbell_bar(struct efa_dev *dev)
213 if (!(BIT(dev->dev_attr.db_bar) & EFA_BASE_BAR_MASK))
214 efa_release_bars(dev, BIT(dev->dev_attr.db_bar));
217 static void efa_update_hw_hints(struct efa_dev *dev,
220 struct efa_com_dev *edev = &dev->edev;
234 static void efa_stats_init(struct efa_dev *dev)
236 atomic64_t *s = (atomic64_t *)&dev->stats;
239 for (i = 0; i < sizeof(dev->stats) / sizeof(*s); i++, s++)
243 static void efa_set_host_info(struct efa_dev *dev)
251 if (!efa_com_check_supported_feature_id(&dev->edev,
256 hinf = dma_alloc_coherent(&dev->pdev->dev, bufsz, &hinf_dma,
271 EFA_SET(&hinf->bdf, EFA_ADMIN_HOST_INFO_BUS, dev->pdev->bus->number);
273 PCI_SLOT(dev->pdev->devfn));
275 PCI_FUNC(dev->pdev->devfn));
283 efa_com_set_feature_ex(&dev->edev, &resp, &cmd, EFA_ADMIN_HOST_INFO,
286 dma_free_coherent(&dev->pdev->dev, bufsz, hinf, hinf_dma);
289 static void efa_destroy_eq(struct efa_dev *dev, struct efa_eq *eq)
291 efa_com_eq_destroy(&dev->edev, &eq->eeq);
292 efa_free_irq(dev, &eq->irq);
295 static int efa_create_eq(struct efa_dev *dev, struct efa_eq *eq, u8 msix_vec)
299 efa_setup_comp_irq(dev, eq, msix_vec);
300 err = efa_request_irq(dev, &eq->irq);
304 err = efa_com_eq_init(&dev->edev, &eq->eeq, efa_process_eqe,
305 dev->dev_attr.max_eq_depth, msix_vec);
312 efa_free_irq(dev, &eq->irq);
316 static int efa_create_eqs(struct efa_dev *dev)
318 unsigned int neqs = dev->dev_attr.max_eq;
323 dev->neqs = neqs;
324 dev->eqs = kcalloc(neqs, sizeof(*dev->eqs), GFP_KERNEL);
325 if (!dev->eqs)
329 err = efa_create_eq(dev, &dev->eqs[i],
339 efa_destroy_eq(dev, &dev->eqs[i]);
340 kfree(dev->eqs);
345 static void efa_destroy_eqs(struct efa_dev *dev)
349 for (i = 0; i < dev->neqs; i++)
350 efa_destroy_eq(dev, &dev->eqs[i]);
352 kfree(dev->eqs);
394 static int efa_ib_device_add(struct efa_dev *dev)
397 struct pci_dev *pdev = dev->pdev;
400 efa_stats_init(dev);
402 err = efa_com_get_device_attr(&dev->edev, &dev->dev_attr);
406 dev_dbg(&dev->pdev->dev, "Doorbells bar (%d)\n", dev->dev_attr.db_bar);
407 err = efa_request_doorbell_bar(dev);
411 err = efa_com_get_hw_hints(&dev->edev, &hw_hints);
415 efa_update_hw_hints(dev, &hw_hints);
418 err = efa_com_set_aenq_config(&dev->edev, EFA_AENQ_ENABLED_GROUPS);
422 err = efa_create_eqs(dev);
426 efa_set_host_info(dev);
428 dev->ibdev.node_type = RDMA_NODE_UNSPECIFIED;
429 dev->ibdev.phys_port_cnt = 1;
430 dev->ibdev.num_comp_vectors = dev->neqs ?: 1;
431 dev->ibdev.dev.parent = &pdev->dev;
433 ib_set_device_ops(&dev->ibdev, &efa_dev_ops);
435 err = ib_register_device(&dev->ibdev, "efa_%d", &pdev->dev);
439 ibdev_info(&dev->ibdev, "IB device registered\n");
444 efa_destroy_eqs(dev);
446 efa_release_doorbell_bar(dev);
450 static void efa_ib_device_remove(struct efa_dev *dev)
452 ibdev_info(&dev->ibdev, "Unregister ib device\n");
453 ib_unregister_device(&dev->ibdev);
454 efa_destroy_eqs(dev);
455 efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_NORMAL);
456 efa_release_doorbell_bar(dev);
459 static void efa_disable_msix(struct efa_dev *dev)
461 pci_free_irq_vectors(dev->pdev);
464 static int efa_enable_msix(struct efa_dev *dev)
472 msix_vecs = min_t(int, pci_msix_vec_count(dev->pdev),
474 dev_dbg(&dev->pdev->dev, "Trying to enable MSI-X, vectors %d\n",
477 dev->admin_msix_vector_idx = EFA_MGMNT_MSIX_VEC_IDX;
478 irq_num = pci_alloc_irq_vectors(dev->pdev, msix_vecs,
482 dev_err(&dev->pdev->dev, "Failed to enable MSI-X. irq_num %d\n",
488 efa_disable_msix(dev);
489 dev_err(&dev->pdev->dev,
517 err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(dma_width));
519 dev_err(&pdev->dev, "dma_set_mask_and_coherent failed %d\n", err);
523 dma_set_max_seg_size(&pdev->dev, UINT_MAX);
530 struct efa_dev *dev;
536 dev_err(&pdev->dev, "pci_enable_device_mem() failed!\n");
542 dev = ib_alloc_device(efa_dev, ibdev);
543 if (!dev) {
544 dev_err(&pdev->dev, "Device alloc failed\n");
549 pci_set_drvdata(pdev, dev);
550 edev = &dev->edev;
551 edev->efa_dev = dev;
552 edev->dmadev = &pdev->dev;
553 dev->pdev = pdev;
554 xa_init(&dev->cqs_xa);
559 dev_err(&pdev->dev, "pci_request_selected_regions failed %d\n",
564 dev->reg_bar_addr = pci_resource_start(pdev, EFA_REG_BAR);
565 dev->reg_bar_len = pci_resource_len(pdev, EFA_REG_BAR);
566 dev->mem_bar_addr = pci_resource_start(pdev, EFA_MEM_BAR);
567 dev->mem_bar_len = pci_resource_len(pdev, EFA_MEM_BAR);
569 edev->reg_bar = devm_ioremap(&pdev->dev,
570 dev->reg_bar_addr,
571 dev->reg_bar_len);
573 dev_err(&pdev->dev, "Failed to remap register bar\n");
580 dev_err(&pdev->dev, "Failed to init readless MMIO\n");
586 dev_err(&pdev->dev, "EFA device init failed\n");
592 err = efa_enable_msix(dev);
596 edev->aq.msix_vector_idx = dev->admin_msix_vector_idx;
597 edev->aenq.msix_vector_idx = dev->admin_msix_vector_idx;
599 err = efa_set_mgmnt_irq(dev);
607 return dev;
610 efa_free_irq(dev, &dev->admin_irq);
612 efa_disable_msix(dev);
616 devm_iounmap(&pdev->dev, edev->reg_bar);
618 efa_release_bars(dev, EFA_BASE_BAR_MASK);
620 ib_dealloc_device(&dev->ibdev);
628 struct efa_dev *dev = pci_get_drvdata(pdev);
631 edev = &dev->edev;
633 efa_free_irq(dev, &dev->admin_irq);
634 efa_disable_msix(dev);
636 devm_iounmap(&pdev->dev, edev->reg_bar);
637 efa_release_bars(dev, EFA_BASE_BAR_MASK);
638 xa_destroy(&dev->cqs_xa);
639 ib_dealloc_device(&dev->ibdev);
645 struct efa_dev *dev;
648 dev = efa_probe_device(pdev);
649 if (IS_ERR(dev))
650 return PTR_ERR(dev);
652 err = efa_ib_device_add(dev);
665 struct efa_dev *dev = pci_get_drvdata(pdev);
667 efa_ib_device_remove(dev);