Lines Matching +full:reserved +full:- +full:cpu +full:- +full:vectors

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
3 * Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
43 ibdev_err(&dev->ibdev, in unimplemented_aenq_handler()
51 atomic64_inc(&dev->stats.keep_alive_rcvd); in efa_keep_alive()
63 struct pci_dev *pdev = dev->pdev; in efa_release_bars()
74 efa_com_admin_q_comp_intr_handler(&dev->edev); in efa_intr_msix_mgmnt()
75 efa_com_aenq_intr_handler(&dev->edev, data); in efa_intr_msix_mgmnt()
85 irq = &dev->admin_irq; in efa_request_mgmnt_irq()
86 err = request_irq(irq->vector, irq->handler, 0, irq->name, in efa_request_mgmnt_irq()
87 irq->data); in efa_request_mgmnt_irq()
89 dev_err(&dev->pdev->dev, "Failed to request admin irq (%d)\n", in efa_request_mgmnt_irq()
94 dev_dbg(&dev->pdev->dev, "Set affinity hint of mgmnt irq to %*pbl (irq vector: %d)\n", in efa_request_mgmnt_irq()
95 nr_cpumask_bits, &irq->affinity_hint_mask, irq->vector); in efa_request_mgmnt_irq()
96 irq_set_affinity_hint(irq->vector, &irq->affinity_hint_mask); in efa_request_mgmnt_irq()
103 u32 cpu; in efa_setup_mgmnt_irq() local
105 snprintf(dev->admin_irq.name, EFA_IRQNAME_SIZE, in efa_setup_mgmnt_irq()
106 "efa-mgmnt@pci:%s", pci_name(dev->pdev)); in efa_setup_mgmnt_irq()
107 dev->admin_irq.handler = efa_intr_msix_mgmnt; in efa_setup_mgmnt_irq()
108 dev->admin_irq.data = dev; in efa_setup_mgmnt_irq()
109 dev->admin_irq.vector = in efa_setup_mgmnt_irq()
110 pci_irq_vector(dev->pdev, dev->admin_msix_vector_idx); in efa_setup_mgmnt_irq()
111 cpu = cpumask_first(cpu_online_mask); in efa_setup_mgmnt_irq()
112 dev->admin_irq.cpu = cpu; in efa_setup_mgmnt_irq()
113 cpumask_set_cpu(cpu, in efa_setup_mgmnt_irq()
114 &dev->admin_irq.affinity_hint_mask); in efa_setup_mgmnt_irq()
115 dev_info(&dev->pdev->dev, "Setup irq:0x%p vector:%d name:%s\n", in efa_setup_mgmnt_irq()
116 &dev->admin_irq, in efa_setup_mgmnt_irq()
117 dev->admin_irq.vector, in efa_setup_mgmnt_irq()
118 dev->admin_irq.name); in efa_setup_mgmnt_irq()
125 irq = &dev->admin_irq; in efa_free_mgmnt_irq()
126 irq_set_affinity_hint(irq->vector, NULL); in efa_free_mgmnt_irq()
127 free_irq(irq->vector, irq->data); in efa_free_mgmnt_irq()
139 u8 db_bar_idx = dev->dev_attr.db_bar; in efa_request_doorbell_bar()
140 struct pci_dev *pdev = dev->pdev; in efa_request_doorbell_bar()
149 dev_err(&dev->pdev->dev, in efa_request_doorbell_bar()
156 dev->db_bar_addr = pci_resource_start(dev->pdev, db_bar_idx); in efa_request_doorbell_bar()
157 dev->db_bar_len = pci_resource_len(dev->pdev, db_bar_idx); in efa_request_doorbell_bar()
164 if (!(BIT(dev->dev_attr.db_bar) & EFA_BASE_BAR_MASK)) in efa_release_doorbell_bar()
165 efa_release_bars(dev, BIT(dev->dev_attr.db_bar)); in efa_release_doorbell_bar()
171 struct efa_com_dev *edev = &dev->edev; in efa_update_hw_hints()
173 if (hw_hints->mmio_read_timeout) in efa_update_hw_hints()
174 edev->mmio_read.mmio_read_timeout = in efa_update_hw_hints()
175 hw_hints->mmio_read_timeout * 1000; in efa_update_hw_hints()
177 if (hw_hints->poll_interval) in efa_update_hw_hints()
178 edev->aq.poll_interval = hw_hints->poll_interval; in efa_update_hw_hints()
180 if (hw_hints->admin_completion_timeout) in efa_update_hw_hints()
181 edev->aq.completion_timeout = in efa_update_hw_hints()
182 hw_hints->admin_completion_timeout; in efa_update_hw_hints()
187 atomic64_t *s = (atomic64_t *)&dev->stats; in efa_stats_init()
190 for (i = 0; i < sizeof(dev->stats) / sizeof(*s); i++, s++) in efa_stats_init()
202 if (!efa_com_check_supported_feature_id(&dev->edev, in efa_set_host_info()
207 hinf = dma_alloc_coherent(&dev->pdev->dev, bufsz, &hinf_dma, in efa_set_host_info()
212 strlcpy(hinf->os_dist_str, utsname()->release, in efa_set_host_info()
213 min(sizeof(hinf->os_dist_str), sizeof(utsname()->release))); in efa_set_host_info()
214 hinf->os_type = EFA_ADMIN_OS_LINUX; in efa_set_host_info()
215 strlcpy(hinf->kernel_ver_str, utsname()->version, in efa_set_host_info()
216 min(sizeof(hinf->kernel_ver_str), sizeof(utsname()->version))); in efa_set_host_info()
217 hinf->kernel_ver = LINUX_VERSION_CODE; in efa_set_host_info()
218 EFA_SET(&hinf->driver_ver, EFA_ADMIN_HOST_INFO_DRIVER_MAJOR, 0); in efa_set_host_info()
219 EFA_SET(&hinf->driver_ver, EFA_ADMIN_HOST_INFO_DRIVER_MINOR, 0); in efa_set_host_info()
220 EFA_SET(&hinf->driver_ver, EFA_ADMIN_HOST_INFO_DRIVER_SUB_MINOR, 0); in efa_set_host_info()
221 EFA_SET(&hinf->driver_ver, EFA_ADMIN_HOST_INFO_DRIVER_MODULE_TYPE, 0); in efa_set_host_info()
222 EFA_SET(&hinf->bdf, EFA_ADMIN_HOST_INFO_BUS, dev->pdev->bus->number); in efa_set_host_info()
223 EFA_SET(&hinf->bdf, EFA_ADMIN_HOST_INFO_DEVICE, in efa_set_host_info()
224 PCI_SLOT(dev->pdev->devfn)); in efa_set_host_info()
225 EFA_SET(&hinf->bdf, EFA_ADMIN_HOST_INFO_FUNCTION, in efa_set_host_info()
226 PCI_FUNC(dev->pdev->devfn)); in efa_set_host_info()
227 EFA_SET(&hinf->spec_ver, EFA_ADMIN_HOST_INFO_SPEC_MAJOR, in efa_set_host_info()
229 EFA_SET(&hinf->spec_ver, EFA_ADMIN_HOST_INFO_SPEC_MINOR, in efa_set_host_info()
231 EFA_SET(&hinf->flags, EFA_ADMIN_HOST_INFO_INTREE, 1); in efa_set_host_info()
232 EFA_SET(&hinf->flags, EFA_ADMIN_HOST_INFO_GDR, 0); in efa_set_host_info()
234 efa_com_set_feature_ex(&dev->edev, &resp, &cmd, EFA_ADMIN_HOST_INFO, in efa_set_host_info()
237 dma_free_coherent(&dev->pdev->dev, bufsz, hinf, hinf_dma); in efa_set_host_info()
279 struct pci_dev *pdev = dev->pdev; in efa_ib_device_add()
284 err = efa_com_get_device_attr(&dev->edev, &dev->dev_attr); in efa_ib_device_add()
288 dev_dbg(&dev->pdev->dev, "Doorbells bar (%d)\n", dev->dev_attr.db_bar); in efa_ib_device_add()
293 err = efa_com_get_hw_hints(&dev->edev, &hw_hints); in efa_ib_device_add()
300 err = efa_com_set_aenq_config(&dev->edev, EFA_AENQ_ENABLED_GROUPS); in efa_ib_device_add()
306 dev->ibdev.node_type = RDMA_NODE_UNSPECIFIED; in efa_ib_device_add()
307 dev->ibdev.phys_port_cnt = 1; in efa_ib_device_add()
308 dev->ibdev.num_comp_vectors = 1; in efa_ib_device_add()
309 dev->ibdev.dev.parent = &pdev->dev; in efa_ib_device_add()
311 dev->ibdev.uverbs_cmd_mask = in efa_ib_device_add()
329 dev->ibdev.uverbs_ex_cmd_mask = in efa_ib_device_add()
332 ib_set_device_ops(&dev->ibdev, &efa_dev_ops); in efa_ib_device_add()
334 err = ib_register_device(&dev->ibdev, "efa_%d", &pdev->dev); in efa_ib_device_add()
338 ibdev_info(&dev->ibdev, "IB device registered\n"); in efa_ib_device_add()
349 efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_NORMAL); in efa_ib_device_remove()
350 ibdev_info(&dev->ibdev, "Unregister ib device\n"); in efa_ib_device_remove()
351 ib_unregister_device(&dev->ibdev); in efa_ib_device_remove()
357 pci_free_irq_vectors(dev->pdev); in efa_disable_msix()
364 /* Reserve the max msix vectors we might need */ in efa_enable_msix()
366 dev_dbg(&dev->pdev->dev, "Trying to enable MSI-X, vectors %d\n", in efa_enable_msix()
369 dev->admin_msix_vector_idx = EFA_MGMNT_MSIX_VEC_IDX; in efa_enable_msix()
370 irq_num = pci_alloc_irq_vectors(dev->pdev, msix_vecs, in efa_enable_msix()
374 dev_err(&dev->pdev->dev, "Failed to enable MSI-X. irq_num %d\n", in efa_enable_msix()
376 return -ENOSPC; in efa_enable_msix()
380 dev_err(&dev->pdev->dev, in efa_enable_msix()
381 "Allocated %d MSI-X (out of %d requested)\n", in efa_enable_msix()
383 return -ENOSPC; in efa_enable_msix()
410 dev_err(&pdev->dev, "pci_set_dma_mask failed %d\n", err); in efa_device_init()
416 dev_err(&pdev->dev, in efa_device_init()
421 dma_set_max_seg_size(&pdev->dev, UINT_MAX); in efa_device_init()
434 dev_err(&pdev->dev, "pci_enable_device_mem() failed!\n"); in efa_probe_device()
442 dev_err(&pdev->dev, "Device alloc failed\n"); in efa_probe_device()
443 err = -ENOMEM; in efa_probe_device()
448 edev = &dev->edev; in efa_probe_device()
449 edev->efa_dev = dev; in efa_probe_device()
450 edev->dmadev = &pdev->dev; in efa_probe_device()
451 dev->pdev = pdev; in efa_probe_device()
456 dev_err(&pdev->dev, "pci_request_selected_regions failed %d\n", in efa_probe_device()
461 dev->reg_bar_addr = pci_resource_start(pdev, EFA_REG_BAR); in efa_probe_device()
462 dev->reg_bar_len = pci_resource_len(pdev, EFA_REG_BAR); in efa_probe_device()
463 dev->mem_bar_addr = pci_resource_start(pdev, EFA_MEM_BAR); in efa_probe_device()
464 dev->mem_bar_len = pci_resource_len(pdev, EFA_MEM_BAR); in efa_probe_device()
466 edev->reg_bar = devm_ioremap(&pdev->dev, in efa_probe_device()
467 dev->reg_bar_addr, in efa_probe_device()
468 dev->reg_bar_len); in efa_probe_device()
469 if (!edev->reg_bar) { in efa_probe_device()
470 dev_err(&pdev->dev, "Failed to remap register bar\n"); in efa_probe_device()
471 err = -EFAULT; in efa_probe_device()
477 dev_err(&pdev->dev, "Failed to init readless MMIO\n"); in efa_probe_device()
483 dev_err(&pdev->dev, "EFA device init failed\n"); in efa_probe_device()
484 if (err == -ETIME) in efa_probe_device()
485 err = -EPROBE_DEFER; in efa_probe_device()
493 edev->aq.msix_vector_idx = dev->admin_msix_vector_idx; in efa_probe_device()
494 edev->aenq.msix_vector_idx = dev->admin_msix_vector_idx; in efa_probe_device()
513 devm_iounmap(&pdev->dev, edev->reg_bar); in efa_probe_device()
517 ib_dealloc_device(&dev->ibdev); in efa_probe_device()
528 edev = &dev->edev; in efa_remove_device()
533 devm_iounmap(&pdev->dev, edev->reg_bar); in efa_remove_device()
535 ib_dealloc_device(&dev->ibdev); in efa_remove_device()