Lines Matching refs:ndev

80 static void write_to_ucd_unit(struct nitrox_device *ndev, u32 ucode_size,
104 nitrox_write_csr(ndev, offset, block_num);
111 nitrox_write_csr(ndev, offset, data);
119 static int nitrox_load_fw(struct nitrox_device *ndev)
133 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name);
135 ret = request_firmware(&fw, fw_name, DEV(ndev));
137 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name);
145 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n",
153 memcpy(&ndev->hw.fw_name[0][0], ucode->version, (VERSION_LEN - 2));
154 ndev->hw.fw_name[0][VERSION_LEN - 1] = '\0';
157 write_to_ucd_unit(ndev, ucode_size, ucode_data, 0);
163 nitrox_write_csr(ndev, offset, (~0ULL));
177 for (i = 0; i < ndev->hw.se_cores; i++) {
179 nitrox_write_csr(ndev, offset, core_2_eid_val.value);
184 dev_info(DEV(ndev), "Loading firmware \"%s\"\n", fw_name);
186 ret = request_firmware(&fw, fw_name, DEV(ndev));
188 dev_err(DEV(ndev), "failed to get firmware %s\n", fw_name);
196 dev_err(DEV(ndev), "Invalid ucode size: %u for firmware %s\n",
204 memcpy(&ndev->hw.fw_name[1][0], ucode->version, (VERSION_LEN - 2));
205 ndev->hw.fw_name[1][VERSION_LEN - 1] = '\0';
208 write_to_ucd_unit(ndev, ucode_size, ucode_data, 2);
215 nitrox_write_csr(ndev, offset, aqm_grp_execmask_lo.value);
218 nitrox_write_csr(ndev, offset, aqm_grp_execmask_hi.value);
232 for (i = 0; i < ndev->hw.ae_cores; i++) {
234 nitrox_write_csr(ndev, offset, core_2_eid_val.value);
242 * @ndev: NITROX device
244 static int nitrox_add_to_devlist(struct nitrox_device *ndev)
249 INIT_LIST_HEAD(&ndev->list);
250 refcount_set(&ndev->refcnt, 1);
254 if (dev == ndev) {
259 ndev->idx = num_devices++;
260 list_add_tail(&ndev->list, &ndevlist);
269 * @ndev: NITROX device
271 static void nitrox_remove_from_devlist(struct nitrox_device *ndev)
274 list_del(&ndev->list);
281 struct nitrox_device *ndev;
284 list_for_each_entry(ndev, &ndevlist, list) {
285 if (nitrox_ready(ndev))
289 if (&ndev->list == &ndevlist)
292 refcount_inc(&ndev->refcnt);
295 return ndev;
298 void nitrox_put_device(struct nitrox_device *ndev)
300 if (!ndev)
303 refcount_dec(&ndev->refcnt);
327 static int nitrox_pf_sw_init(struct nitrox_device *ndev)
331 err = nitrox_common_sw_init(ndev);
335 err = nitrox_register_interrupts(ndev);
337 nitrox_common_sw_cleanup(ndev);
342 static void nitrox_pf_sw_cleanup(struct nitrox_device *ndev)
344 nitrox_unregister_interrupts(ndev);
345 nitrox_common_sw_cleanup(ndev);
350 * @ndev: NITROX device
352 static int nitrox_bist_check(struct nitrox_device *ndev)
358 value += nitrox_read_csr(ndev, EMU_BIST_STATUSX(i));
359 value += nitrox_read_csr(ndev, EFL_CORE_BIST_REGX(i));
361 value += nitrox_read_csr(ndev, UCD_BIST_STATUS);
362 value += nitrox_read_csr(ndev, NPS_CORE_BIST_REG);
363 value += nitrox_read_csr(ndev, NPS_CORE_NPC_BIST_REG);
364 value += nitrox_read_csr(ndev, NPS_PKT_SLC_BIST_REG);
365 value += nitrox_read_csr(ndev, NPS_PKT_IN_BIST_REG);
366 value += nitrox_read_csr(ndev, POM_BIST_REG);
367 value += nitrox_read_csr(ndev, BMI_BIST_REG);
368 value += nitrox_read_csr(ndev, EFL_TOP_BIST_STAT);
369 value += nitrox_read_csr(ndev, BMO_BIST_REG);
370 value += nitrox_read_csr(ndev, LBC_BIST_STATUS);
371 value += nitrox_read_csr(ndev, PEM_BIST_STATUSX(0));
377 static int nitrox_pf_hw_init(struct nitrox_device *ndev)
381 err = nitrox_bist_check(ndev);
383 dev_err(&ndev->pdev->dev, "BIST check failed\n");
387 nitrox_get_hwinfo(ndev);
389 nitrox_config_nps_core_unit(ndev);
390 nitrox_config_aqm_unit(ndev);
391 nitrox_config_nps_pkt_unit(ndev);
392 nitrox_config_pom_unit(ndev);
393 nitrox_config_efl_unit(ndev);
395 nitrox_config_bmi_unit(ndev);
396 nitrox_config_bmo_unit(ndev);
398 nitrox_config_lbc_unit(ndev);
399 nitrox_config_rand_unit(ndev);
402 err = nitrox_load_fw(ndev);
406 nitrox_config_emu_unit(ndev);
422 struct nitrox_device *ndev;
458 ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
459 if (!ndev) {
464 pci_set_drvdata(pdev, ndev);
465 ndev->pdev = pdev;
468 nitrox_add_to_devlist(ndev);
470 ndev->hw.vendor_id = pdev->vendor;
471 ndev->hw.device_id = pdev->device;
472 ndev->hw.revision_id = pdev->revision;
474 ndev->timeout = msecs_to_jiffies(CMD_TIMEOUT);
475 ndev->node = dev_to_node(&pdev->dev);
476 if (ndev->node == NUMA_NO_NODE)
477 ndev->node = 0;
479 ndev->bar_addr = ioremap(pci_resource_start(pdev, 0),
481 if (!ndev->bar_addr) {
486 ndev->nr_queues = min_t(u32, MAX_PF_QUEUES, num_online_cpus());
487 ndev->qlen = qlen;
489 err = nitrox_pf_sw_init(ndev);
493 err = nitrox_pf_hw_init(ndev);
497 nitrox_debugfs_init(ndev);
500 atomic64_set(&ndev->stats.posted, 0);
501 atomic64_set(&ndev->stats.completed, 0);
502 atomic64_set(&ndev->stats.dropped, 0);
504 atomic_set(&ndev->state, __NDEV_READY);
515 nitrox_debugfs_exit(ndev);
516 atomic_set(&ndev->state, __NDEV_NOT_READY);
520 nitrox_pf_sw_cleanup(ndev);
522 nitrox_remove_from_devlist(ndev);
523 kfree(ndev);
537 struct nitrox_device *ndev = pci_get_drvdata(pdev);
539 if (!ndev)
542 if (!refcount_dec_and_test(&ndev->refcnt)) {
543 dev_err(DEV(ndev), "Device refcnt not zero (%d)\n",
544 refcount_read(&ndev->refcnt));
548 dev_info(DEV(ndev), "Removing Device %x:%x\n",
549 ndev->hw.vendor_id, ndev->hw.device_id);
551 atomic_set(&ndev->state, __NDEV_NOT_READY);
555 nitrox_remove_from_devlist(ndev);
562 nitrox_debugfs_exit(ndev);
563 nitrox_pf_sw_cleanup(ndev);
565 iounmap(ndev->bar_addr);
566 kfree(ndev);