Lines Matching refs:ndev

70 static void write_to_ucd_unit(struct nitrox_device *ndev, u32 ucode_size,
94 nitrox_write_csr(ndev, offset, block_num);
101 nitrox_write_csr(ndev, offset, data);
109 static int nitrox_load_fw(struct nitrox_device *ndev)
123 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name);
125 ret = request_firmware(&fw, fw_name, DEV(ndev));
127 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name);
135 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n",
143 memcpy(&ndev->hw.fw_name[0][0], ucode->version, (VERSION_LEN - 2));
144 ndev->hw.fw_name[0][VERSION_LEN - 1] = '\0';
147 write_to_ucd_unit(ndev, ucode_size, ucode_data, 0);
153 nitrox_write_csr(ndev, offset, (~0ULL));
167 for (i = 0; i < ndev->hw.se_cores; i++) {
169 nitrox_write_csr(ndev, offset, core_2_eid_val.value);
174 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name);
176 ret = request_firmware(&fw, fw_name, DEV(ndev));
178 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name);
186 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n",
194 memcpy(&ndev->hw.fw_name[1][0], ucode->version, (VERSION_LEN - 2));
195 ndev->hw.fw_name[1][VERSION_LEN - 1] = '\0';
198 write_to_ucd_unit(ndev, ucode_size, ucode_data, 2);
205 nitrox_write_csr(ndev, offset, aqm_grp_execmask_lo.value);
208 nitrox_write_csr(ndev, offset, aqm_grp_execmask_hi.value);
222 for (i = 0; i < ndev->hw.ae_cores; i++) {
224 nitrox_write_csr(ndev, offset, core_2_eid_val.value);
232 * @ndev: NITROX device
234 static int nitrox_add_to_devlist(struct nitrox_device *ndev)
239 INIT_LIST_HEAD(&ndev->list);
240 refcount_set(&ndev->refcnt, 1);
244 if (dev == ndev) {
249 ndev->idx = num_devices++;
250 list_add_tail(&ndev->list, &ndevlist);
259 * @ndev: NITROX device
261 static void nitrox_remove_from_devlist(struct nitrox_device *ndev)
264 list_del(&ndev->list);
271 struct nitrox_device *ndev = NULL, *iter;
276 ndev = iter;
281 if (!ndev)
284 refcount_inc(&ndev->refcnt);
287 return ndev;
290 void nitrox_put_device(struct nitrox_device *ndev)
292 if (!ndev)
295 refcount_dec(&ndev->refcnt);
317 static int nitrox_pf_sw_init(struct nitrox_device *ndev)
321 err = nitrox_common_sw_init(ndev);
325 err = nitrox_register_interrupts(ndev);
327 nitrox_common_sw_cleanup(ndev);
332 static void nitrox_pf_sw_cleanup(struct nitrox_device *ndev)
334 nitrox_unregister_interrupts(ndev);
335 nitrox_common_sw_cleanup(ndev);
340 * @ndev: NITROX device
342 static int nitrox_bist_check(struct nitrox_device *ndev)
348 value += nitrox_read_csr(ndev, EMU_BIST_STATUSX(i));
349 value += nitrox_read_csr(ndev, EFL_CORE_BIST_REGX(i));
351 value += nitrox_read_csr(ndev, UCD_BIST_STATUS);
352 value += nitrox_read_csr(ndev, NPS_CORE_BIST_REG);
353 value += nitrox_read_csr(ndev, NPS_CORE_NPC_BIST_REG);
354 value += nitrox_read_csr(ndev, NPS_PKT_SLC_BIST_REG);
355 value += nitrox_read_csr(ndev, NPS_PKT_IN_BIST_REG);
356 value += nitrox_read_csr(ndev, POM_BIST_REG);
357 value += nitrox_read_csr(ndev, BMI_BIST_REG);
358 value += nitrox_read_csr(ndev, EFL_TOP_BIST_STAT);
359 value += nitrox_read_csr(ndev, BMO_BIST_REG);
360 value += nitrox_read_csr(ndev, LBC_BIST_STATUS);
361 value += nitrox_read_csr(ndev, PEM_BIST_STATUSX(0));
367 static int nitrox_pf_hw_init(struct nitrox_device *ndev)
371 err = nitrox_bist_check(ndev);
373 dev_err(&ndev->pdev->dev, "BIST check failed\n");
377 nitrox_get_hwinfo(ndev);
379 nitrox_config_nps_core_unit(ndev);
380 nitrox_config_aqm_unit(ndev);
381 nitrox_config_nps_pkt_unit(ndev);
382 nitrox_config_pom_unit(ndev);
383 nitrox_config_efl_unit(ndev);
385 nitrox_config_bmi_unit(ndev);
386 nitrox_config_bmo_unit(ndev);
388 nitrox_config_lbc_unit(ndev);
389 nitrox_config_rand_unit(ndev);
392 err = nitrox_load_fw(ndev);
396 nitrox_config_emu_unit(ndev);
412 struct nitrox_device *ndev;
444 ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
445 if (!ndev) {
450 pci_set_drvdata(pdev, ndev);
451 ndev->pdev = pdev;
454 nitrox_add_to_devlist(ndev);
456 ndev->hw.vendor_id = pdev->vendor;
457 ndev->hw.device_id = pdev->device;
458 ndev->hw.revision_id = pdev->revision;
460 ndev->timeout = msecs_to_jiffies(CMD_TIMEOUT);
461 ndev->node = dev_to_node(&pdev->dev);
462 if (ndev->node == NUMA_NO_NODE)
463 ndev->node = 0;
465 ndev->bar_addr = ioremap(pci_resource_start(pdev, 0),
467 if (!ndev->bar_addr) {
472 ndev->nr_queues = min_t(u32, MAX_PF_QUEUES, num_online_cpus());
473 ndev->qlen = qlen;
475 err = nitrox_pf_sw_init(ndev);
479 err = nitrox_pf_hw_init(ndev);
483 nitrox_debugfs_init(ndev);
486 atomic64_set(&ndev->stats.posted, 0);
487 atomic64_set(&ndev->stats.completed, 0);
488 atomic64_set(&ndev->stats.dropped, 0);
490 atomic_set(&ndev->state, __NDEV_READY);
501 nitrox_debugfs_exit(ndev);
502 atomic_set(&ndev->state, __NDEV_NOT_READY);
506 nitrox_pf_sw_cleanup(ndev);
508 iounmap(ndev->bar_addr);
510 nitrox_remove_from_devlist(ndev);
511 kfree(ndev);
526 struct nitrox_device *ndev = pci_get_drvdata(pdev);
528 if (!ndev)
531 if (!refcount_dec_and_test(&ndev->refcnt)) {
532 dev_err(DEV(ndev), "Device refcnt not zero (%d)\n",
533 refcount_read(&ndev->refcnt));
537 dev_info(DEV(ndev), "Removing Device %x:%x\n",
538 ndev->hw.vendor_id, ndev->hw.device_id);
540 atomic_set(&ndev->state, __NDEV_NOT_READY);
544 nitrox_remove_from_devlist(ndev);
549 nitrox_debugfs_exit(ndev);
550 nitrox_pf_sw_cleanup(ndev);
552 iounmap(ndev->bar_addr);
553 kfree(ndev);