35 #include <linux/module.h>
37 #include <linux/errno.h>
38 #include <linux/pci.h>
54 #ifdef CONFIG_INFINIBAND_MTHCA_DEBUG
56 int mthca_debug_level = 0;
74 static int tune_pci = 0;
76 MODULE_PARM_DESC(tune_pci,
"increase PCI burst from the default set by BIOS if nonzero");
80 #define MTHCA_DEFAULT_NUM_QP (1 << 16)
81 #define MTHCA_DEFAULT_RDB_PER_QP (1 << 2)
82 #define MTHCA_DEFAULT_NUM_CQ (1 << 16)
83 #define MTHCA_DEFAULT_NUM_MCG (1 << 13)
84 #define MTHCA_DEFAULT_NUM_MPT (1 << 17)
85 #define MTHCA_DEFAULT_NUM_MTT (1 << 20)
86 #define MTHCA_DEFAULT_NUM_UDAV (1 << 15)
87 #define MTHCA_DEFAULT_NUM_RESERVED_MTTS (1 << 18)
88 #define MTHCA_DEFAULT_NUM_UARC_SIZE (1 << 18)
116 "maximum number of memory protection table entries per HCA");
120 "maximum number of memory translation table segments per HCA");
127 "number of memory translation table segments reserved for FMR");
131 MODULE_PARM_DESC(log_mtts_per_seg,
"Log2 number of MTT entries per segment (1-5)");
134 DRV_NAME ": Mellanox InfiniBand HCA driver v"
137 static int mthca_tune_pci(
struct mthca_dev *mdev)
145 mthca_err(mdev,
"Couldn't set PCI-X max read count, "
150 mthca_info(mdev,
"No PCI-X capability, not setting RBC.\n");
152 if (pci_is_pcie(mdev->
pdev)) {
154 mthca_err(mdev,
"Couldn't write PCI Express read request, "
159 mthca_info(mdev,
"No PCI Express capability, "
160 "not setting Max Read Request Size.\n");
169 mdev->
limits.mtt_seg_size = (1 << log_mtts_per_seg) * 8;
172 mthca_err(mdev,
"QUERY_DEV_LIM command returned %d"
173 ", aborting.\n", err);
177 mthca_err(mdev,
"HCA minimum page size of %d bigger than "
178 "kernel PAGE_SIZE of %ld, aborting.\n",
183 mthca_err(mdev,
"HCA has %d ports, but we only support %d, "
190 mthca_err(mdev,
"HCA reported UAR size of 0x%x bigger than "
191 "PCI resource 2 size of 0x%llx, aborting.\n",
211 (mthca_is_memfree(mdev) ?
247 mdev->
limits.stat_rate_support = 0xf;
249 mdev->
limits.stat_rate_support = 0x3;
281 if (mthca_is_memfree(mdev))
288 static int mthca_init_tavor(
struct mthca_dev *mdev)
298 mthca_err(mdev,
"SYS_EN command returned %d, aborting.\n", err);
304 mthca_err(mdev,
"QUERY_FW command returned %d,"
305 " aborting.\n", err);
310 mthca_err(mdev,
"QUERY_DDR command returned %d, aborting.\n", err);
316 mthca_err(mdev,
"QUERY_DEV_LIM command returned %d, aborting.\n", err);
334 mthca_err(mdev,
"INIT_HCA command returned %d, aborting.\n", err);
346 static int mthca_load_fw(
struct mthca_dev *mdev)
356 mthca_err(mdev,
"Couldn't allocate FW area, aborting.\n");
362 mthca_err(mdev,
"MAP_FA command returned %d, aborting.\n", err);
367 mthca_err(mdev,
"RUN_FW command returned %d, aborting.\n", err);
381 static int mthca_init_icm(
struct mthca_dev *mdev,
391 mthca_err(mdev,
"SET_ICM_SIZE command returned %d, aborting.\n", err);
395 mthca_dbg(mdev,
"%lld KB of HCA context requires %lld KB aux memory.\n",
396 (
unsigned long long) icm_size >> 10,
397 (
unsigned long long) aux_pages << 2);
402 mthca_err(mdev,
"Couldn't allocate aux memory, aborting.\n");
408 mthca_err(mdev,
"MAP_ICM_AUX returned %d, aborting.\n", err);
414 mthca_err(mdev,
"Failed to map EQ context memory, aborting.\n");
423 mdev->
limits.mtt_seg_size,
424 mdev->
limits.num_mtt_segs,
425 mdev->
limits.reserved_mtts,
428 mthca_err(mdev,
"Failed to map MTT context memory, aborting.\n");
436 mdev->
limits.reserved_mrws,
439 mthca_err(mdev,
"Failed to map MPT context memory, aborting.\n");
447 mdev->
limits.reserved_qps,
450 mthca_err(mdev,
"Failed to map QP context memory, aborting.\n");
458 mdev->
limits.reserved_qps,
461 mthca_err(mdev,
"Failed to map EQP context memory, aborting.\n");
472 mthca_err(mdev,
"Failed to map RDB context memory, aborting\n");
480 mdev->
limits.reserved_cqs,
483 mthca_err(mdev,
"Failed to map CQ context memory, aborting.\n");
493 mdev->
limits.reserved_srqs,
496 mthca_err(mdev,
"Failed to map SRQ context memory, "
516 mthca_err(mdev,
"Failed to map MCG context memory, aborting.\n");
557 static void mthca_free_icms(
struct mthca_dev *mdev)
575 static int mthca_init_arbel(
struct mthca_dev *mdev)
585 mthca_err(mdev,
"QUERY_FW command failed %d, aborting.\n", err);
591 mthca_dbg(mdev,
"No HCA-attached memory (running in MemFree mode)\n");
594 mthca_err(mdev,
"ENABLE_LAM returned %d, aborting.\n", err);
598 err = mthca_load_fw(mdev);
600 mthca_err(mdev,
"Loading FW returned %d, aborting.\n", err);
606 mthca_err(mdev,
"QUERY_DEV_LIM returned %d, aborting.\n", err);
622 err = mthca_init_icm(mdev, &dev_lim, &init_hca, icm_size);
628 mthca_err(mdev,
"INIT_HCA command returned %d, aborting.\n", err);
635 mthca_free_icms(mdev);
648 static void mthca_close_hca(
struct mthca_dev *mdev)
652 if (mthca_is_memfree(mdev)) {
653 mthca_free_icms(mdev);
664 static int mthca_init_hca(
struct mthca_dev *mdev)
669 if (mthca_is_memfree(mdev))
670 err = mthca_init_arbel(mdev);
672 err = mthca_init_tavor(mdev);
679 mthca_err(mdev,
"QUERY_ADAPTER command returned %d, aborting.\n", err);
684 if (!mthca_is_memfree(mdev))
691 mthca_close_hca(mdev);
704 "user access region table, aborting.\n");
710 mthca_err(dev,
"Failed to allocate driver access region, "
712 goto err_uar_table_free;
717 mthca_err(dev,
"Couldn't map kernel access region, "
726 "protection domain table, aborting.\n");
733 "memory region table, aborting.\n");
734 goto err_pd_table_free;
739 mthca_err(dev,
"Failed to create driver PD, "
741 goto err_mr_table_free;
747 "event queue table, aborting.\n");
753 mthca_err(dev,
"Failed to switch to event-driven "
754 "firmware commands, aborting.\n");
755 goto err_eq_table_free;
761 mthca_warn(dev,
"NOP command failed to generate interrupt "
764 mthca_warn(dev,
"Trying again with MSI-X disabled.\n");
766 mthca_err(dev,
"NOP command failed to generate interrupt "
767 "(IRQ %d), aborting.\n",
769 mthca_err(dev,
"BIOS or ACPI interrupt routing problem?\n");
775 mthca_dbg(dev,
"NOP command IRQ test passed\n");
780 "completion queue table, aborting.\n");
787 "shared receive queue table, aborting.\n");
788 goto err_cq_table_free;
794 "queue pair table, aborting.\n");
795 goto err_srq_table_free;
801 "address vector table, aborting.\n");
802 goto err_qp_table_free;
808 "multicast group table, aborting.\n");
809 goto err_av_table_free;
852 static int mthca_enable_msi_x(
struct mthca_dev *mdev)
864 mthca_info(mdev,
"Only %d MSI-X vectors available, "
865 "not using MSI-X\n", err);
884 #define MTHCA_FW_VER(major, minor, subminor) \
885 (((u64) (major) << 32) | ((u64) (minor) << 16) | (u64) (subminor))
890 } mthca_hca_table[] = {
904 static int __mthca_init_one(
struct pci_dev *pdev,
int hca_type)
915 dev_err(&pdev->
dev,
"Cannot enable PCI device, "
926 dev_err(&pdev->
dev,
"Missing DCS, aborting.\n");
928 goto err_disable_pdev;
931 dev_err(&pdev->
dev,
"Missing UAR, aborting.\n");
933 goto err_disable_pdev;
940 dev_err(&pdev->
dev,
"Cannot obtain PCI resources, "
942 goto err_disable_pdev;
949 dev_warn(&pdev->
dev,
"Warning: couldn't set 64-bit PCI DMA mask.\n");
952 dev_err(&pdev->
dev,
"Can't set PCI DMA mask, aborting.\n");
956 err = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(64));
958 dev_warn(&pdev->
dev,
"Warning: couldn't set 64-bit "
959 "consistent PCI DMA mask.\n");
960 err = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(32));
962 dev_err(&pdev->
dev,
"Can't set consistent PCI DMA mask, "
969 dma_set_max_seg_size(&pdev->
dev, 1024 * 1024 * 1024);
973 dev_err(&pdev->
dev,
"Device struct alloc failed, "
992 mthca_err(mdev,
"Failed to reset HCA, aborting.\n");
997 mthca_err(mdev,
"Failed to init command interface, aborting.\n");
1001 err = mthca_tune_pci(mdev);
1005 err = mthca_init_hca(mdev);
1009 if (mdev->
fw_ver < mthca_hca_table[hca_type].latest_fw) {
1010 mthca_warn(mdev,
"HCA FW version %d.%d.%03d is old (%d.%d.%03d is current).\n",
1011 (
int) (mdev->
fw_ver >> 32), (
int) (mdev->
fw_ver >> 16) & 0xffff,
1012 (
int) (mdev->
fw_ver & 0xffff),
1013 (
int) (mthca_hca_table[hca_type].latest_fw >> 32),
1014 (
int) (mthca_hca_table[hca_type].latest_fw >> 16) & 0xffff,
1015 (
int) (mthca_hca_table[hca_type].latest_fw & 0xffff));
1016 mthca_warn(mdev,
"If you have problems, try updating your HCA FW.\n");
1019 if (
msi_x && !mthca_enable_msi_x(mdev))
1022 err = mthca_setup_hca(mdev);
1028 err = mthca_setup_hca(mdev);
1040 goto err_unregister;
1042 pci_set_drvdata(pdev, mdev);
1071 mthca_close_hca(mdev);
1084 pci_set_drvdata(pdev,
NULL);
1088 static void __mthca_remove_one(
struct pci_dev *pdev)
1090 struct mthca_dev *mdev = pci_get_drvdata(pdev);
1097 for (p = 1; p <= mdev->
limits.num_ports; ++
p)
1116 mthca_close_hca(mdev);
1125 pci_set_drvdata(pdev,
NULL);
1134 mdev = pci_get_drvdata(pdev);
1138 __mthca_remove_one(pdev);
1139 return __mthca_init_one(pdev, hca_type);
1168 __mthca_remove_one(pdev);
1174 .driver_data =
TAVOR },
1176 .driver_data =
TAVOR },
1186 .driver_data =
SINAI },
1188 .driver_data =
SINAI },
1190 .driver_data =
SINAI },
1192 .driver_data =
SINAI },
1200 .id_table = mthca_pci_table,
1201 .probe = mthca_init_one,
1205 static void __init __mthca_check_profile_val(
const char *
name,
int *pval,
1209 int old_pval = *pval;
1212 *pval = pval_default;
1216 if (old_pval != *pval) {
1223 #define mthca_check_profile_val(name, default) \
1224 __mthca_check_profile_val(#name, &hca_profile.name, default)
1226 static void __init mthca_validate_profile(
void)
1247 if ((log_mtts_per_seg < 1) || (log_mtts_per_seg > 5)) {
1254 static int __init mthca_init(
void)
1258 mthca_validate_profile();
1264 ret = pci_register_driver(&mthca_driver);
1273 static void __exit mthca_cleanup(
void)