Lines Matching refs:ndev

71 static void write_to_ucd_unit(struct nitrox_device *ndev, u32 ucode_size,  in write_to_ucd_unit()  argument
95 nitrox_write_csr(ndev, offset, block_num); in write_to_ucd_unit()
102 nitrox_write_csr(ndev, offset, data); in write_to_ucd_unit()
110 static int nitrox_load_fw(struct nitrox_device *ndev) in nitrox_load_fw() argument
124 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name); in nitrox_load_fw()
126 ret = request_firmware(&fw, fw_name, DEV(ndev)); in nitrox_load_fw()
128 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name); in nitrox_load_fw()
136 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n", in nitrox_load_fw()
144 memcpy(&ndev->hw.fw_name[0][0], ucode->version, (VERSION_LEN - 2)); in nitrox_load_fw()
145 ndev->hw.fw_name[0][VERSION_LEN - 1] = '\0'; in nitrox_load_fw()
148 write_to_ucd_unit(ndev, ucode_size, ucode_data, 0); in nitrox_load_fw()
154 nitrox_write_csr(ndev, offset, (~0ULL)); in nitrox_load_fw()
168 for (i = 0; i < ndev->hw.se_cores; i++) { in nitrox_load_fw()
170 nitrox_write_csr(ndev, offset, core_2_eid_val.value); in nitrox_load_fw()
175 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name); in nitrox_load_fw()
177 ret = request_firmware(&fw, fw_name, DEV(ndev)); in nitrox_load_fw()
179 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name); in nitrox_load_fw()
187 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n", in nitrox_load_fw()
195 memcpy(&ndev->hw.fw_name[1][0], ucode->version, (VERSION_LEN - 2)); in nitrox_load_fw()
196 ndev->hw.fw_name[1][VERSION_LEN - 1] = '\0'; in nitrox_load_fw()
199 write_to_ucd_unit(ndev, ucode_size, ucode_data, 2); in nitrox_load_fw()
206 nitrox_write_csr(ndev, offset, aqm_grp_execmask_lo.value); in nitrox_load_fw()
209 nitrox_write_csr(ndev, offset, aqm_grp_execmask_hi.value); in nitrox_load_fw()
223 for (i = 0; i < ndev->hw.ae_cores; i++) { in nitrox_load_fw()
225 nitrox_write_csr(ndev, offset, core_2_eid_val.value); in nitrox_load_fw()
235 static int nitrox_add_to_devlist(struct nitrox_device *ndev) in nitrox_add_to_devlist() argument
240 INIT_LIST_HEAD(&ndev->list); in nitrox_add_to_devlist()
241 refcount_set(&ndev->refcnt, 1); in nitrox_add_to_devlist()
245 if (dev == ndev) { in nitrox_add_to_devlist()
250 ndev->idx = num_devices++; in nitrox_add_to_devlist()
251 list_add_tail(&ndev->list, &ndevlist); in nitrox_add_to_devlist()
262 static void nitrox_remove_from_devlist(struct nitrox_device *ndev) in nitrox_remove_from_devlist() argument
265 list_del(&ndev->list); in nitrox_remove_from_devlist()
272 struct nitrox_device *ndev = NULL, *iter; in nitrox_get_first_device() local
277 ndev = iter; in nitrox_get_first_device()
282 if (!ndev) in nitrox_get_first_device()
285 refcount_inc(&ndev->refcnt); in nitrox_get_first_device()
288 return ndev; in nitrox_get_first_device()
291 void nitrox_put_device(struct nitrox_device *ndev) in nitrox_put_device() argument
293 if (!ndev) in nitrox_put_device()
296 refcount_dec(&ndev->refcnt); in nitrox_put_device()
318 static int nitrox_pf_sw_init(struct nitrox_device *ndev) in nitrox_pf_sw_init() argument
322 err = nitrox_common_sw_init(ndev); in nitrox_pf_sw_init()
326 err = nitrox_register_interrupts(ndev); in nitrox_pf_sw_init()
328 nitrox_common_sw_cleanup(ndev); in nitrox_pf_sw_init()
333 static void nitrox_pf_sw_cleanup(struct nitrox_device *ndev) in nitrox_pf_sw_cleanup() argument
335 nitrox_unregister_interrupts(ndev); in nitrox_pf_sw_cleanup()
336 nitrox_common_sw_cleanup(ndev); in nitrox_pf_sw_cleanup()
343 static int nitrox_bist_check(struct nitrox_device *ndev) in nitrox_bist_check() argument
349 value += nitrox_read_csr(ndev, EMU_BIST_STATUSX(i)); in nitrox_bist_check()
350 value += nitrox_read_csr(ndev, EFL_CORE_BIST_REGX(i)); in nitrox_bist_check()
352 value += nitrox_read_csr(ndev, UCD_BIST_STATUS); in nitrox_bist_check()
353 value += nitrox_read_csr(ndev, NPS_CORE_BIST_REG); in nitrox_bist_check()
354 value += nitrox_read_csr(ndev, NPS_CORE_NPC_BIST_REG); in nitrox_bist_check()
355 value += nitrox_read_csr(ndev, NPS_PKT_SLC_BIST_REG); in nitrox_bist_check()
356 value += nitrox_read_csr(ndev, NPS_PKT_IN_BIST_REG); in nitrox_bist_check()
357 value += nitrox_read_csr(ndev, POM_BIST_REG); in nitrox_bist_check()
358 value += nitrox_read_csr(ndev, BMI_BIST_REG); in nitrox_bist_check()
359 value += nitrox_read_csr(ndev, EFL_TOP_BIST_STAT); in nitrox_bist_check()
360 value += nitrox_read_csr(ndev, BMO_BIST_REG); in nitrox_bist_check()
361 value += nitrox_read_csr(ndev, LBC_BIST_STATUS); in nitrox_bist_check()
362 value += nitrox_read_csr(ndev, PEM_BIST_STATUSX(0)); in nitrox_bist_check()
368 static int nitrox_pf_hw_init(struct nitrox_device *ndev) in nitrox_pf_hw_init() argument
372 err = nitrox_bist_check(ndev); in nitrox_pf_hw_init()
374 dev_err(&ndev->pdev->dev, "BIST check failed\n"); in nitrox_pf_hw_init()
378 nitrox_get_hwinfo(ndev); in nitrox_pf_hw_init()
380 nitrox_config_nps_core_unit(ndev); in nitrox_pf_hw_init()
381 nitrox_config_aqm_unit(ndev); in nitrox_pf_hw_init()
382 nitrox_config_nps_pkt_unit(ndev); in nitrox_pf_hw_init()
383 nitrox_config_pom_unit(ndev); in nitrox_pf_hw_init()
384 nitrox_config_efl_unit(ndev); in nitrox_pf_hw_init()
386 nitrox_config_bmi_unit(ndev); in nitrox_pf_hw_init()
387 nitrox_config_bmo_unit(ndev); in nitrox_pf_hw_init()
389 nitrox_config_lbc_unit(ndev); in nitrox_pf_hw_init()
390 nitrox_config_rand_unit(ndev); in nitrox_pf_hw_init()
393 err = nitrox_load_fw(ndev); in nitrox_pf_hw_init()
397 nitrox_config_emu_unit(ndev); in nitrox_pf_hw_init()
413 struct nitrox_device *ndev; in nitrox_probe() local
445 ndev = kzalloc(sizeof(*ndev), GFP_KERNEL); in nitrox_probe()
446 if (!ndev) { in nitrox_probe()
451 pci_set_drvdata(pdev, ndev); in nitrox_probe()
452 ndev->pdev = pdev; in nitrox_probe()
455 nitrox_add_to_devlist(ndev); in nitrox_probe()
457 ndev->hw.vendor_id = pdev->vendor; in nitrox_probe()
458 ndev->hw.device_id = pdev->device; in nitrox_probe()
459 ndev->hw.revision_id = pdev->revision; in nitrox_probe()
461 ndev->timeout = msecs_to_jiffies(CMD_TIMEOUT); in nitrox_probe()
462 ndev->node = dev_to_node(&pdev->dev); in nitrox_probe()
463 if (ndev->node == NUMA_NO_NODE) in nitrox_probe()
464 ndev->node = 0; in nitrox_probe()
466 ndev->bar_addr = ioremap(pci_resource_start(pdev, 0), in nitrox_probe()
468 if (!ndev->bar_addr) { in nitrox_probe()
473 ndev->nr_queues = min_t(u32, MAX_PF_QUEUES, num_online_cpus()); in nitrox_probe()
474 ndev->qlen = qlen; in nitrox_probe()
476 err = nitrox_pf_sw_init(ndev); in nitrox_probe()
480 err = nitrox_pf_hw_init(ndev); in nitrox_probe()
484 nitrox_debugfs_init(ndev); in nitrox_probe()
487 atomic64_set(&ndev->stats.posted, 0); in nitrox_probe()
488 atomic64_set(&ndev->stats.completed, 0); in nitrox_probe()
489 atomic64_set(&ndev->stats.dropped, 0); in nitrox_probe()
491 atomic_set(&ndev->state, __NDEV_READY); in nitrox_probe()
502 nitrox_debugfs_exit(ndev); in nitrox_probe()
503 atomic_set(&ndev->state, __NDEV_NOT_READY); in nitrox_probe()
507 nitrox_pf_sw_cleanup(ndev); in nitrox_probe()
509 iounmap(ndev->bar_addr); in nitrox_probe()
511 nitrox_remove_from_devlist(ndev); in nitrox_probe()
512 kfree(ndev); in nitrox_probe()
527 struct nitrox_device *ndev = pci_get_drvdata(pdev); in nitrox_remove() local
529 if (!ndev) in nitrox_remove()
532 if (!refcount_dec_and_test(&ndev->refcnt)) { in nitrox_remove()
533 dev_err(DEV(ndev), "Device refcnt not zero (%d)\n", in nitrox_remove()
534 refcount_read(&ndev->refcnt)); in nitrox_remove()
538 dev_info(DEV(ndev), "Removing Device %x:%x\n", in nitrox_remove()
539 ndev->hw.vendor_id, ndev->hw.device_id); in nitrox_remove()
541 atomic_set(&ndev->state, __NDEV_NOT_READY); in nitrox_remove()
545 nitrox_remove_from_devlist(ndev); in nitrox_remove()
550 nitrox_debugfs_exit(ndev); in nitrox_remove()
551 nitrox_pf_sw_cleanup(ndev); in nitrox_remove()
553 iounmap(ndev->bar_addr); in nitrox_remove()
554 kfree(ndev); in nitrox_remove()