Lines Matching refs:oct
145 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num,
165 struct octeon_device *oct = oct_priv->dev; in octeon_droq_bh() local
167 for (q_no = 0; q_no < MAX_OCTEON_OUTPUT_QUEUES(oct); q_no++) { in octeon_droq_bh()
168 if (!(oct->io_qmask.oq & BIT_ULL(q_no))) in octeon_droq_bh()
170 reschedule |= octeon_droq_process_packets(oct, oct->droq[q_no], in octeon_droq_bh()
172 lio_enable_irq(oct->droq[q_no], NULL); in octeon_droq_bh()
174 if (OCTEON_CN23XX_PF(oct) && oct->msix_on) { in octeon_droq_bh()
178 int adjusted_q_no = q_no + oct->sriov_info.pf_srn; in octeon_droq_bh()
181 oct, CN23XX_SLI_OQ_PKT_INT_LEVELS(adjusted_q_no), in octeon_droq_bh()
184 oct, CN23XX_SLI_OQ_PKTS_SENT(adjusted_q_no), 0); in octeon_droq_bh()
192 static int lio_wait_for_oq_pkts(struct octeon_device *oct) in lio_wait_for_oq_pkts() argument
195 (struct octeon_device_priv *)oct->priv; in lio_wait_for_oq_pkts()
202 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in lio_wait_for_oq_pkts()
203 if (!(oct->io_qmask.oq & BIT_ULL(i))) in lio_wait_for_oq_pkts()
205 pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); in lio_wait_for_oq_pkts()
223 static void force_io_queues_off(struct octeon_device *oct) in force_io_queues_off() argument
225 if ((oct->chip_id == OCTEON_CN66XX) || in force_io_queues_off()
226 (oct->chip_id == OCTEON_CN68XX)) { in force_io_queues_off()
228 octeon_write_csr(oct, CN6XXX_SLI_PKT_INSTR_ENB, 0); in force_io_queues_off()
231 octeon_write_csr(oct, CN6XXX_SLI_PKT_OUT_ENB, 0); in force_io_queues_off()
239 static inline void pcierror_quiesce_device(struct octeon_device *oct) in pcierror_quiesce_device() argument
247 force_io_queues_off(oct); in pcierror_quiesce_device()
252 if (wait_for_pending_requests(oct)) in pcierror_quiesce_device()
253 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in pcierror_quiesce_device()
256 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in pcierror_quiesce_device()
259 if (!(oct->io_qmask.iq & BIT_ULL(i))) in pcierror_quiesce_device()
261 iq = oct->instr_queue[i]; in pcierror_quiesce_device()
269 lio_process_iq_request_list(oct, iq, 0); in pcierror_quiesce_device()
275 lio_process_ordered_list(oct, 1); in pcierror_quiesce_device()
304 static void stop_pci_io(struct octeon_device *oct) in stop_pci_io() argument
307 atomic_set(&oct->status, OCT_DEV_IN_RESET); in stop_pci_io()
309 pci_disable_device(oct->pci_dev); in stop_pci_io()
312 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in stop_pci_io()
314 pcierror_quiesce_device(oct); in stop_pci_io()
317 free_irq(oct->pci_dev->irq, oct); in stop_pci_io()
319 if (oct->flags & LIO_FLAG_MSI_ENABLED) in stop_pci_io()
320 pci_disable_msi(oct->pci_dev); in stop_pci_io()
322 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in stop_pci_io()
323 lio_get_state_string(&oct->status)); in stop_pci_io()
326 cleanup_aer_uncorrect_error_status(oct->pci_dev); in stop_pci_io()
340 struct octeon_device *oct = pci_get_drvdata(pdev); in liquidio_pcie_error_detected() local
344 dev_err(&oct->pci_dev->dev, "Non-correctable non-fatal error reported:\n"); in liquidio_pcie_error_detected()
345 cleanup_aer_uncorrect_error_status(oct->pci_dev); in liquidio_pcie_error_detected()
350 dev_err(&oct->pci_dev->dev, "Non-correctable FATAL reported by PCI AER driver\n"); in liquidio_pcie_error_detected()
351 stop_pci_io(oct); in liquidio_pcie_error_detected()
533 struct octeon_device *oct = lio->oct_dev; in setup_link_status_change_wq() local
538 dev_err(&oct->pci_dev->dev, "unable to create cavium link status wq\n"); in setup_link_status_change_wq()
572 struct octeon_device *oct = lio->oct_dev; in update_link_status() local
574 dev_dbg(&oct->pci_dev->dev, "%s: lio->linfo.link.u64=%llx, ls->u64=%llx\n", in update_link_status()
583 dev_dbg(&oct->pci_dev->dev, "%s: link_up", __func__); in update_link_status()
587 dev_dbg(&oct->pci_dev->dev, "%s: link_off", __func__); in update_link_status()
597 dev_warn(&oct->pci_dev->dev, in update_link_status()
616 struct octeon_device *oct = lio->oct_dev; in lio_sync_octeon_time() local
622 sc = octeon_alloc_soft_command(oct, sizeof(struct lio_time), 16, 0); in lio_sync_octeon_time()
624 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
638 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in lio_sync_octeon_time()
644 ret = octeon_send_soft_command(oct, sc); in lio_sync_octeon_time()
646 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
648 octeon_free_soft_command(oct, sc); in lio_sync_octeon_time()
666 struct octeon_device *oct = lio->oct_dev; in setup_sync_octeon_time_wq() local
671 dev_err(&oct->pci_dev->dev, "Unable to create wq to update octeon time\n"); in setup_sync_octeon_time_wq()
703 static struct octeon_device *get_other_octeon_device(struct octeon_device *oct) in get_other_octeon_device() argument
707 other_oct = lio_get_device(oct->octeon_id + 1); in get_other_octeon_device()
712 oct_busnum = oct->pci_dev->bus->number; in get_other_octeon_device()
718 oct_slot = PCI_SLOT(oct->pci_dev->devfn); in get_other_octeon_device()
729 static void disable_all_vf_links(struct octeon_device *oct) in disable_all_vf_links() argument
734 if (!oct) in disable_all_vf_links()
737 max_vfs = oct->sriov_info.max_vfs; in disable_all_vf_links()
739 for (i = 0; i < oct->ifcount; i++) { in disable_all_vf_links()
740 netdev = oct->props[i].netdev; in disable_all_vf_links()
755 struct octeon_device *oct = param; in liquidio_watchdog() local
771 (u16)octeon_read_csr64(oct, CN23XX_SLI_SCRATCH2); in liquidio_watchdog()
776 WRITE_ONCE(oct->cores_crashed, true); in liquidio_watchdog()
777 other_oct = get_other_octeon_device(oct); in liquidio_watchdog()
790 dev_err(&oct->pci_dev->dev, in liquidio_watchdog()
800 disable_all_vf_links(oct); in liquidio_watchdog()
805 vfs_mask1 = READ_ONCE(oct->sriov_info.vf_drv_loaded_mask); in liquidio_watchdog()
922 static void octeon_pci_flr(struct octeon_device *oct) in octeon_pci_flr() argument
926 pci_save_state(oct->pci_dev); in octeon_pci_flr()
928 pci_cfg_access_lock(oct->pci_dev); in octeon_pci_flr()
931 pci_write_config_word(oct->pci_dev, PCI_COMMAND, in octeon_pci_flr()
934 rc = __pci_reset_function_locked(oct->pci_dev); in octeon_pci_flr()
937 dev_err(&oct->pci_dev->dev, "Error %d resetting PCI function %d\n", in octeon_pci_flr()
938 rc, oct->pf_num); in octeon_pci_flr()
940 pci_cfg_access_unlock(oct->pci_dev); in octeon_pci_flr()
942 pci_restore_state(oct->pci_dev); in octeon_pci_flr()
949 static void octeon_destroy_resources(struct octeon_device *oct) in octeon_destroy_resources() argument
954 (struct octeon_device_priv *)oct->priv; in octeon_destroy_resources()
958 switch (atomic_read(&oct->status)) { in octeon_destroy_resources()
963 atomic_set(&oct->status, OCT_DEV_IN_RESET); in octeon_destroy_resources()
965 oct->app_mode = CVM_DRV_INVALID_APP; in octeon_destroy_resources()
966 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in octeon_destroy_resources()
967 lio_get_state_string(&oct->status)); in octeon_destroy_resources()
976 octeon_remove_consoles(oct); in octeon_destroy_resources()
980 if (lio_wait_for_instr_fetch(oct)) in octeon_destroy_resources()
981 dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); in octeon_destroy_resources()
983 if (wait_for_pending_requests(oct)) in octeon_destroy_resources()
984 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in octeon_destroy_resources()
990 oct->fn_list.disable_io_queues(oct); in octeon_destroy_resources()
992 if (lio_wait_for_oq_pkts(oct)) in octeon_destroy_resources()
993 dev_err(&oct->pci_dev->dev, "OQ had pending packets\n"); in octeon_destroy_resources()
998 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
1001 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
1003 iq = oct->instr_queue[i]; in octeon_destroy_resources()
1011 lio_process_iq_request_list(oct, iq, 0); in octeon_destroy_resources()
1016 lio_process_ordered_list(oct, 1); in octeon_destroy_resources()
1017 octeon_free_sc_done_list(oct); in octeon_destroy_resources()
1018 octeon_free_sc_zombie_list(oct); in octeon_destroy_resources()
1023 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in octeon_destroy_resources()
1025 if (oct->msix_on) { in octeon_destroy_resources()
1026 msix_entries = (struct msix_entry *)oct->msix_entries; in octeon_destroy_resources()
1027 for (i = 0; i < oct->num_msix_irqs - 1; i++) { in octeon_destroy_resources()
1028 if (oct->ioq_vector[i].vector) { in octeon_destroy_resources()
1034 &oct->ioq_vector[i]); in octeon_destroy_resources()
1035 oct->ioq_vector[i].vector = 0; in octeon_destroy_resources()
1039 free_irq(msix_entries[i].vector, oct); in octeon_destroy_resources()
1041 pci_disable_msix(oct->pci_dev); in octeon_destroy_resources()
1042 kfree(oct->msix_entries); in octeon_destroy_resources()
1043 oct->msix_entries = NULL; in octeon_destroy_resources()
1046 free_irq(oct->pci_dev->irq, oct); in octeon_destroy_resources()
1048 if (oct->flags & LIO_FLAG_MSI_ENABLED) in octeon_destroy_resources()
1049 pci_disable_msi(oct->pci_dev); in octeon_destroy_resources()
1052 kfree(oct->irq_name_storage); in octeon_destroy_resources()
1053 oct->irq_name_storage = NULL; in octeon_destroy_resources()
1057 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1058 octeon_free_ioq_vector(oct); in octeon_destroy_resources()
1062 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1063 oct->fn_list.free_mbox(oct); in octeon_destroy_resources()
1070 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in octeon_destroy_resources()
1071 if (!(oct->io_qmask.oq & BIT_ULL(i))) in octeon_destroy_resources()
1073 octeon_delete_droq(oct, i); in octeon_destroy_resources()
1081 handshake[oct->octeon_id].init_ok = 0; in octeon_destroy_resources()
1082 complete(&handshake[oct->octeon_id].init); in octeon_destroy_resources()
1083 handshake[oct->octeon_id].started_ok = 0; in octeon_destroy_resources()
1084 complete(&handshake[oct->octeon_id].started); in octeon_destroy_resources()
1090 octeon_delete_response_list(oct); in octeon_destroy_resources()
1094 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
1095 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
1097 octeon_delete_instr_queue(oct, i); in octeon_destroy_resources()
1100 if (oct->sriov_info.sriov_enabled) in octeon_destroy_resources()
1101 pci_disable_sriov(oct->pci_dev); in octeon_destroy_resources()
1105 octeon_free_sc_buffer_pool(oct); in octeon_destroy_resources()
1109 octeon_delete_dispatch_list(oct); in octeon_destroy_resources()
1110 cancel_delayed_work_sync(&oct->nic_poll_work.work); in octeon_destroy_resources()
1114 refcount = octeon_deregister_device(oct); in octeon_destroy_resources()
1122 if (atomic_read(oct->adapter_fw_state) == FW_IS_PRELOADED) in octeon_destroy_resources()
1123 octeon_pci_flr(oct); in octeon_destroy_resources()
1124 else if (OCTEON_CN6XXX(oct) || !refcount) in octeon_destroy_resources()
1125 oct->fn_list.soft_reset(oct); in octeon_destroy_resources()
1127 octeon_unmap_pci_barx(oct, 0); in octeon_destroy_resources()
1128 octeon_unmap_pci_barx(oct, 1); in octeon_destroy_resources()
1132 pci_clear_master(oct->pci_dev); in octeon_destroy_resources()
1134 pci_disable_device(oct->pci_dev); in octeon_destroy_resources()
1154 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in send_rx_ctrl_cmd() local
1157 if (oct->props[lio->ifidx].rx_on == start_stop) in send_rx_ctrl_cmd()
1161 octeon_alloc_soft_command(oct, OCTNET_CMD_SIZE, in send_rx_ctrl_cmd()
1179 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in send_rx_ctrl_cmd()
1185 retval = octeon_send_soft_command(oct, sc); in send_rx_ctrl_cmd()
1188 octeon_free_soft_command(oct, sc); in send_rx_ctrl_cmd()
1193 retval = wait_for_sc_completion_timeout(oct, sc, 0); in send_rx_ctrl_cmd()
1197 oct->props[lio->ifidx].rx_on = start_stop; in send_rx_ctrl_cmd()
1212 static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) in liquidio_destroy_nic_device() argument
1214 struct net_device *netdev = oct->props[ifidx].netdev; in liquidio_destroy_nic_device()
1216 (struct octeon_device_priv *)oct->priv; in liquidio_destroy_nic_device()
1221 dev_err(&oct->pci_dev->dev, "%s No netdevice ptr for index %d\n", in liquidio_destroy_nic_device()
1228 dev_dbg(&oct->pci_dev->dev, "NIC device cleanup\n"); in liquidio_destroy_nic_device()
1233 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_destroy_nic_device()
1237 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_destroy_nic_device()
1239 if (OCTEON_CN23XX_PF(oct)) in liquidio_destroy_nic_device()
1240 oct->droq[0]->ops.poll_mode = 0; in liquidio_destroy_nic_device()
1261 oct->props[ifidx].gmxport = -1; in liquidio_destroy_nic_device()
1263 oct->props[ifidx].netdev = NULL; in liquidio_destroy_nic_device()
1270 static int liquidio_stop_nic_module(struct octeon_device *oct) in liquidio_stop_nic_module() argument
1275 dev_dbg(&oct->pci_dev->dev, "Stopping network interfaces\n"); in liquidio_stop_nic_module()
1276 device_lock(&oct->pci_dev->dev); in liquidio_stop_nic_module()
1277 if (oct->devlink) { in liquidio_stop_nic_module()
1278 devlink_unregister(oct->devlink); in liquidio_stop_nic_module()
1279 devlink_free(oct->devlink); in liquidio_stop_nic_module()
1280 oct->devlink = NULL; in liquidio_stop_nic_module()
1282 device_unlock(&oct->pci_dev->dev); in liquidio_stop_nic_module()
1284 if (!oct->ifcount) { in liquidio_stop_nic_module()
1285 dev_err(&oct->pci_dev->dev, "Init for Octeon was not completed\n"); in liquidio_stop_nic_module()
1289 spin_lock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1290 oct->cmd_resp_state = OCT_DRV_OFFLINE; in liquidio_stop_nic_module()
1291 spin_unlock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1293 lio_vf_rep_destroy(oct); in liquidio_stop_nic_module()
1295 for (i = 0; i < oct->ifcount; i++) { in liquidio_stop_nic_module()
1296 lio = GET_LIO(oct->props[i].netdev); in liquidio_stop_nic_module()
1297 for (j = 0; j < oct->num_oqs; j++) in liquidio_stop_nic_module()
1298 octeon_unregister_droq_ops(oct, in liquidio_stop_nic_module()
1302 for (i = 0; i < oct->ifcount; i++) in liquidio_stop_nic_module()
1303 liquidio_destroy_nic_device(oct, i); in liquidio_stop_nic_module()
1305 dev_dbg(&oct->pci_dev->dev, "Network interfaces stopped\n"); in liquidio_stop_nic_module()
1346 static int octeon_chip_specific_setup(struct octeon_device *oct) in octeon_chip_specific_setup() argument
1351 pci_read_config_dword(oct->pci_dev, 0, &dev_id); in octeon_chip_specific_setup()
1352 pci_read_config_dword(oct->pci_dev, 8, &rev_id); in octeon_chip_specific_setup()
1353 oct->rev_id = rev_id & 0xff; in octeon_chip_specific_setup()
1357 oct->chip_id = OCTEON_CN68XX; in octeon_chip_specific_setup()
1358 ret = lio_setup_cn68xx_octeon_device(oct); in octeon_chip_specific_setup()
1362 oct->chip_id = OCTEON_CN66XX; in octeon_chip_specific_setup()
1363 ret = lio_setup_cn66xx_octeon_device(oct); in octeon_chip_specific_setup()
1367 oct->chip_id = OCTEON_CN23XX_PF_VID; in octeon_chip_specific_setup()
1368 ret = setup_cn23xx_octeon_pf_device(oct); in octeon_chip_specific_setup()
1373 pci_sriov_set_totalvfs(oct->pci_dev, in octeon_chip_specific_setup()
1374 oct->sriov_info.max_vfs); in octeon_chip_specific_setup()
1379 dev_err(&oct->pci_dev->dev, "Unknown device found (dev_id: %x)\n", in octeon_chip_specific_setup()
1390 static int octeon_pci_os_setup(struct octeon_device *oct) in octeon_pci_os_setup() argument
1393 if (pci_enable_device(oct->pci_dev)) { in octeon_pci_os_setup()
1394 dev_err(&oct->pci_dev->dev, "pci_enable_device failed\n"); in octeon_pci_os_setup()
1398 if (dma_set_mask_and_coherent(&oct->pci_dev->dev, DMA_BIT_MASK(64))) { in octeon_pci_os_setup()
1399 dev_err(&oct->pci_dev->dev, "Unexpected DMA device capability\n"); in octeon_pci_os_setup()
1400 pci_disable_device(oct->pci_dev); in octeon_pci_os_setup()
1405 pci_set_master(oct->pci_dev); in octeon_pci_os_setup()
1524 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_adjfine() local
1540 do_div(delta, oct->coproc_clock_rate); in liquidio_ptp_adjfine()
1543 comp = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfine()
1548 lio_pci_writeq(oct, comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfine()
1582 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_gettime() local
1585 ns = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_gettime()
1605 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_settime() local
1610 lio_pci_writeq(oct, ns, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_settime()
1638 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in oct_ptp_open() local
1658 &oct->pci_dev->dev); in oct_ptp_open()
1668 static void liquidio_ptp_init(struct octeon_device *oct) in liquidio_ptp_init() argument
1673 do_div(clock_comp, oct->coproc_clock_rate); in liquidio_ptp_init()
1674 lio_pci_writeq(oct, clock_comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_init()
1677 cfg = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1678 lio_pci_writeq(oct, cfg | 0x01, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1687 static int load_firmware(struct octeon_device *oct) in load_firmware() argument
1702 octeon_get_conf(oct)->card_name, tmp_fw_type, in load_firmware()
1705 ret = request_firmware(&fw, fw_name, &oct->pci_dev->dev); in load_firmware()
1707 dev_err(&oct->pci_dev->dev, "Request firmware failed. Could not find file %s.\n", in load_firmware()
1713 ret = octeon_download_firmware(oct, fw->data, fw->size); in load_firmware()
1744 struct octeon_device *oct = lio->oct_dev; in setup_tx_poll_fn() local
1749 dev_err(&oct->pci_dev->dev, "unable to create cavium txq status wq\n"); in setup_tx_poll_fn()
1777 struct octeon_device *oct = lio->oct_dev; in liquidio_open() local
1779 (struct octeon_device_priv *)oct->priv; in liquidio_open()
1783 if (oct->props[lio->ifidx].napi_enabled == 0) { in liquidio_open()
1789 oct->props[lio->ifidx].napi_enabled = 1; in liquidio_open()
1791 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1792 oct->droq[0]->ops.poll_mode = 1; in liquidio_open()
1795 if (oct->ptp_enable) in liquidio_open()
1800 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) { in liquidio_open()
1824 dev_info(&oct->pci_dev->dev, "%s interface is opened\n", in liquidio_open()
1830 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) in liquidio_open()
1838 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_open()
1842 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_open()
1844 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1845 oct->droq[0]->ops.poll_mode = 0; in liquidio_open()
1858 struct octeon_device *oct = lio->oct_dev; in liquidio_stop() local
1860 (struct octeon_device_priv *)oct->priv; in liquidio_stop()
1883 if (OCTEON_CN23XX_PF(oct)) { in liquidio_stop()
1884 if (!oct->msix_on) in liquidio_stop()
1898 if (lio_wait_for_clean_oq(oct)) in liquidio_stop()
1902 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_stop()
1906 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_stop()
1908 if (OCTEON_CN23XX_PF(oct)) in liquidio_stop()
1909 oct->droq[0]->ops.poll_mode = 0; in liquidio_stop()
1914 dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name); in liquidio_stop()
1959 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mcast_list() local
1995 dev_err(&oct->pci_dev->dev, "DEVFLAGS change failed in core (ret: 0x%x)\n", in liquidio_set_mcast_list()
2009 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mac() local
2031 dev_err(&oct->pci_dev->dev, "MAC Address change failed\n"); in liquidio_set_mac()
2036 dev_err(&oct->pci_dev->dev, in liquidio_set_mac()
2053 struct octeon_device *oct; in liquidio_get_stats64() local
2059 oct = lio->oct_dev; in liquidio_get_stats64()
2064 for (i = 0; i < oct->num_iqs; i++) { in liquidio_get_stats64()
2066 iq_stats = &oct->instr_queue[iq_no]->stats; in liquidio_get_stats64()
2080 for (i = 0; i < oct->num_oqs; i++) { in liquidio_get_stats64()
2082 oq_stats = &oct->droq[oq_no]->stats; in liquidio_get_stats64()
2095 lstats->multicast = oct->link_stats.fromwire.fw_total_mcast; in liquidio_get_stats64()
2096 lstats->collisions = oct->link_stats.fromhost.total_collisions; in liquidio_get_stats64()
2099 lstats->rx_length_errors = oct->link_stats.fromwire.l2_err; in liquidio_get_stats64()
2101 lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err; in liquidio_get_stats64()
2103 lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err; in liquidio_get_stats64()
2105 lstats->rx_fifo_errors = oct->link_stats.fromwire.fifo_err; in liquidio_get_stats64()
2111 lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko; in liquidio_get_stats64()
2112 lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link; in liquidio_get_stats64()
2113 lstats->tx_fifo_errors = oct->link_stats.fromhost.fifo_err; in liquidio_get_stats64()
2200 static void handle_timestamp(struct octeon_device *oct, in handle_timestamp() argument
2213 oct = lio->oct_dev; in handle_timestamp()
2217 dev_err(&oct->pci_dev->dev, "Tx timestamp instruction failed. Status: %llx\n", in handle_timestamp()
2235 octeon_free_soft_command(oct, sc); in handle_timestamp()
2246 static inline int send_nic_timestamp_pkt(struct octeon_device *oct, in send_nic_timestamp_pkt() argument
2259 sc = octeon_alloc_soft_command_resp(oct, &ndata->cmd, in send_nic_timestamp_pkt()
2264 dev_err(&oct->pci_dev->dev, "No memory for timestamped data packet\n"); in send_nic_timestamp_pkt()
2277 if (OCTEON_CN23XX_PF(oct)) in send_nic_timestamp_pkt()
2286 retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd, in send_nic_timestamp_pkt()
2290 dev_err(&oct->pci_dev->dev, "timestamp data packet failed status: %x\n", in send_nic_timestamp_pkt()
2292 octeon_free_soft_command(oct, sc); in send_nic_timestamp_pkt()
2314 struct octeon_device *oct; in liquidio_xmit() local
2325 oct = lio->oct_dev; in liquidio_xmit()
2327 q_idx = skb_iq(oct, skb); in liquidio_xmit()
2331 stats = &oct->instr_queue[iq_no]->stats; in liquidio_xmit()
2360 if (octnet_iq_is_full(oct, ndata.q_no)) { in liquidio_xmit()
2392 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2395 dptr = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2399 if (dma_mapping_error(&oct->pci_dev->dev, dptr)) { in liquidio_xmit()
2400 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n", in liquidio_xmit()
2406 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2431 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2435 g->sg[0].ptr[0] = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2439 if (dma_mapping_error(&oct->pci_dev->dev, g->sg[0].ptr[0])) { in liquidio_xmit()
2440 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 2\n", in liquidio_xmit()
2453 skb_frag_dma_map(&oct->pci_dev->dev, in liquidio_xmit()
2457 if (dma_mapping_error(&oct->pci_dev->dev, in liquidio_xmit()
2459 dma_unmap_single(&oct->pci_dev->dev, in liquidio_xmit()
2465 dma_unmap_page(&oct->pci_dev->dev, in liquidio_xmit()
2470 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 3\n", in liquidio_xmit()
2482 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2492 if (OCTEON_CN23XX_PF(oct)) { in liquidio_xmit()
2515 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); in liquidio_xmit()
2517 status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more); in liquidio_xmit()
2541 dma_unmap_single(&oct->pci_dev->dev, dptr, in liquidio_xmit()
2544 octeon_ring_doorbell_locked(oct, iq_no); in liquidio_xmit()
2573 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_add_vid() local
2588 dev_err(&oct->pci_dev->dev, "Add VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_add_vid()
2602 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_kill_vid() local
2617 dev_err(&oct->pci_dev->dev, "Del VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_kill_vid()
2636 struct octeon_device *oct = lio->oct_dev; in liquidio_set_rxcsum_command() local
2651 dev_err(&oct->pci_dev->dev, in liquidio_set_rxcsum_command()
2673 struct octeon_device *oct = lio->oct_dev; in liquidio_vxlan_port_command() local
2689 dev_err(&oct->pci_dev->dev, in liquidio_vxlan_port_command()
2821 struct octeon_device *oct = lio->oct_dev; in __liquidio_set_vf_mac() local
2828 if (vfidx < 0 || vfidx >= oct->sriov_info.max_vfs) in __liquidio_set_vf_mac()
2849 oct->sriov_info.vf_macaddr[vfidx] = nctrl.udd[0]; in __liquidio_set_vf_mac()
2851 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in __liquidio_set_vf_mac()
2861 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_mac() local
2864 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_mac()
2869 cn23xx_tell_vf_its_macaddr_changed(oct, vfidx, mac); in liquidio_set_vf_mac()
2878 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_spoofchk() local
2882 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SPOOFCHK_CAP)) { in liquidio_set_vf_spoofchk()
2888 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_spoofchk()
2894 if (oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2898 if (!oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2914 retval = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_spoofchk()
2923 oct->sriov_info.vf_spoofchk[vfidx] = enable; in liquidio_set_vf_spoofchk()
2934 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_vlan() local
2939 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_vlan()
2953 if (oct->sriov_info.vf_vlantci[vfidx] == vlantci) in liquidio_set_vf_vlan()
2970 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_vlan()
2977 oct->sriov_info.vf_vlantci[vfidx] = vlantci; in liquidio_set_vf_vlan()
2986 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_config() local
2989 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_config()
2995 macaddr = 2 + (u8 *)&oct->sriov_info.vf_macaddr[vfidx]; in liquidio_get_vf_config()
2997 ivi->vlan = oct->sriov_info.vf_vlantci[vfidx] & VLAN_VID_MASK; in liquidio_get_vf_config()
2998 ivi->qos = oct->sriov_info.vf_vlantci[vfidx] >> VLAN_PRIO_SHIFT; in liquidio_get_vf_config()
2999 if (oct->sriov_info.trusted_vf.active && in liquidio_get_vf_config()
3000 oct->sriov_info.trusted_vf.id == vfidx) in liquidio_get_vf_config()
3004 ivi->linkstate = oct->sriov_info.vf_linkstate[vfidx]; in liquidio_get_vf_config()
3005 ivi->spoofchk = oct->sriov_info.vf_spoofchk[vfidx]; in liquidio_get_vf_config()
3014 struct octeon_device *oct = lio->oct_dev; in liquidio_send_vf_trust_cmd() local
3018 sc = octeon_alloc_soft_command(oct, 0, 16, 0); in liquidio_send_vf_trust_cmd()
3025 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in liquidio_send_vf_trust_cmd()
3032 retval = octeon_send_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3034 octeon_free_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3038 retval = wait_for_sc_completion_timeout(oct, sc, 0); in liquidio_send_vf_trust_cmd()
3052 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_trust() local
3054 if (strcmp(oct->fw_info.liquidio_firmware_version, "1.7.1") < 0) { in liquidio_set_vf_trust()
3059 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_trust()
3067 if (oct->sriov_info.trusted_vf.active && in liquidio_set_vf_trust()
3068 oct->sriov_info.trusted_vf.id == vfidx) in liquidio_set_vf_trust()
3071 if (oct->sriov_info.trusted_vf.active) { in liquidio_set_vf_trust()
3078 if (!oct->sriov_info.trusted_vf.active) in liquidio_set_vf_trust()
3084 oct->sriov_info.trusted_vf.id = vfidx; in liquidio_set_vf_trust()
3085 oct->sriov_info.trusted_vf.active = true; in liquidio_set_vf_trust()
3087 oct->sriov_info.trusted_vf.active = false; in liquidio_set_vf_trust()
3104 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_link_state() local
3108 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_link_state()
3111 if (oct->sriov_info.vf_linkstate[vfidx] == linkstate) in liquidio_set_vf_link_state()
3123 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_link_state()
3126 oct->sriov_info.vf_linkstate[vfidx] = linkstate; in liquidio_set_vf_link_state()
3137 struct octeon_device *oct; in liquidio_eswitch_mode_get() local
3140 oct = priv->oct; in liquidio_eswitch_mode_get()
3142 *mode = oct->eswitch_mode; in liquidio_eswitch_mode_get()
3152 struct octeon_device *oct; in liquidio_eswitch_mode_set() local
3156 oct = priv->oct; in liquidio_eswitch_mode_set()
3158 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP)) in liquidio_eswitch_mode_set()
3161 if (oct->eswitch_mode == mode) in liquidio_eswitch_mode_set()
3166 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3167 ret = lio_vf_rep_create(oct); in liquidio_eswitch_mode_set()
3171 lio_vf_rep_destroy(oct); in liquidio_eswitch_mode_set()
3172 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3192 struct octeon_device *oct = lio->oct_dev; in liquidio_get_port_parent_id() local
3194 if (oct->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV) in liquidio_get_port_parent_id()
3207 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_stats() local
3211 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_stats()
3215 ret = cn23xx_get_vf_stats(oct, vfidx, &stats); in liquidio_get_vf_stats()
3304 struct octeon_device *oct = (struct octeon_device *)buf; in lio_nic_info() local
3311 dev_err(&oct->pci_dev->dev, "Malformed NIC_INFO, len=%d, ifidx=%d\n", in lio_nic_info()
3322 for (i = 0; i < oct->ifcount; i++) { in lio_nic_info()
3323 if (oct->props[i].gmxport == gmxport) { in lio_nic_info()
3324 update_link_status(oct->props[i].netdev, ls); in lio_nic_info()
3777 lio_devlink->oct = octeon_dev; in setup_nic_devices()
3800 static int octeon_enable_sriov(struct octeon_device *oct) in octeon_enable_sriov() argument
3802 unsigned int num_vfs_alloced = oct->sriov_info.num_vfs_alloced; in octeon_enable_sriov()
3807 if (OCTEON_CN23XX_PF(oct) && num_vfs_alloced) { in octeon_enable_sriov()
3808 err = pci_enable_sriov(oct->pci_dev, in octeon_enable_sriov()
3809 oct->sriov_info.num_vfs_alloced); in octeon_enable_sriov()
3811 dev_err(&oct->pci_dev->dev, in octeon_enable_sriov()
3814 oct->sriov_info.num_vfs_alloced = 0; in octeon_enable_sriov()
3817 oct->sriov_info.sriov_enabled = 1; in octeon_enable_sriov()
3827 (vfdev->physfn == oct->pci_dev)) { in octeon_enable_sriov()
3828 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = in octeon_enable_sriov()
3830 u += oct->sriov_info.rings_per_vf; in octeon_enable_sriov()
3840 static int lio_pci_sriov_disable(struct octeon_device *oct) in lio_pci_sriov_disable() argument
3844 if (pci_vfs_assigned(oct->pci_dev)) { in lio_pci_sriov_disable()
3845 dev_err(&oct->pci_dev->dev, "VFs are still assigned to VMs.\n"); in lio_pci_sriov_disable()
3849 pci_disable_sriov(oct->pci_dev); in lio_pci_sriov_disable()
3853 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = NULL; in lio_pci_sriov_disable()
3854 u += oct->sriov_info.rings_per_vf; in lio_pci_sriov_disable()
3857 oct->sriov_info.num_vfs_alloced = 0; in lio_pci_sriov_disable()
3858 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d disabled VFs\n", in lio_pci_sriov_disable()
3859 oct->pf_num); in lio_pci_sriov_disable()
3866 struct octeon_device *oct = pci_get_drvdata(dev); in liquidio_enable_sriov() local
3869 if ((num_vfs == oct->sriov_info.num_vfs_alloced) && in liquidio_enable_sriov()
3870 (oct->sriov_info.sriov_enabled)) { in liquidio_enable_sriov()
3871 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d already enabled num_vfs:%d\n", in liquidio_enable_sriov()
3872 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3877 lio_vf_rep_destroy(oct); in liquidio_enable_sriov()
3878 ret = lio_pci_sriov_disable(oct); in liquidio_enable_sriov()
3879 } else if (num_vfs > oct->sriov_info.max_vfs) { in liquidio_enable_sriov()
3880 dev_err(&oct->pci_dev->dev, in liquidio_enable_sriov()
3882 oct->sriov_info.max_vfs, num_vfs); in liquidio_enable_sriov()
3885 oct->sriov_info.num_vfs_alloced = num_vfs; in liquidio_enable_sriov()
3886 ret = octeon_enable_sriov(oct); in liquidio_enable_sriov()
3887 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d num_vfs:%d\n", in liquidio_enable_sriov()
3888 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3889 ret = lio_vf_rep_create(oct); in liquidio_enable_sriov()
3891 dev_info(&oct->pci_dev->dev, in liquidio_enable_sriov()
3906 static int liquidio_init_nic_module(struct octeon_device *oct) in liquidio_init_nic_module() argument
3909 int num_nic_ports = CFG_GET_NUM_NIC_PORTS(octeon_get_conf(oct)); in liquidio_init_nic_module()
3911 dev_dbg(&oct->pci_dev->dev, "Initializing network interfaces\n"); in liquidio_init_nic_module()
3917 oct->ifcount = num_nic_ports; in liquidio_init_nic_module()
3919 memset(oct->props, 0, sizeof(struct octdev_props) * num_nic_ports); in liquidio_init_nic_module()
3922 oct->props[i].gmxport = -1; in liquidio_init_nic_module()
3924 retval = setup_nic_devices(oct); in liquidio_init_nic_module()
3926 dev_err(&oct->pci_dev->dev, "Setup NIC devices failed\n"); in liquidio_init_nic_module()
3933 if (!oct->octeon_id && in liquidio_init_nic_module()
3934 oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP) { in liquidio_init_nic_module()
3937 liquidio_stop_nic_module(oct); in liquidio_init_nic_module()
3942 liquidio_ptp_init(oct); in liquidio_init_nic_module()
3944 dev_dbg(&oct->pci_dev->dev, "Network interfaces ready\n"); in liquidio_init_nic_module()
3950 oct->ifcount = 0; in liquidio_init_nic_module()
3963 struct octeon_device *oct; in nic_starter() local
3966 oct = (struct octeon_device *)wk->ctxptr; in nic_starter()
3968 if (atomic_read(&oct->status) == OCT_DEV_RUNNING) in nic_starter()
3976 if (atomic_read(&oct->status) != OCT_DEV_CORE_OK) { in nic_starter()
3977 schedule_delayed_work(&oct->nic_poll_work.work, in nic_starter()
3982 atomic_set(&oct->status, OCT_DEV_RUNNING); in nic_starter()
3984 if (oct->app_mode && oct->app_mode == CVM_DRV_NIC_APP) { in nic_starter()
3985 dev_dbg(&oct->pci_dev->dev, "Starting NIC module\n"); in nic_starter()
3987 if (liquidio_init_nic_module(oct)) in nic_starter()
3988 dev_err(&oct->pci_dev->dev, "NIC initialization failed\n"); in nic_starter()
3990 handshake[oct->octeon_id].started_ok = 1; in nic_starter()
3992 dev_err(&oct->pci_dev->dev, in nic_starter()
3994 oct->app_mode); in nic_starter()
3997 complete(&handshake[oct->octeon_id].started); in nic_starter()
4003 struct octeon_device *oct = (struct octeon_device *)buf; in octeon_recv_vf_drv_notice() local
4017 cores_crashed = READ_ONCE(oct->cores_crashed); in octeon_recv_vf_drv_notice()
4020 if (!(oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx))) { in octeon_recv_vf_drv_notice()
4021 oct->sriov_info.vf_drv_loaded_mask |= BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4022 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4028 if (oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx)) { in octeon_recv_vf_drv_notice()
4029 oct->sriov_info.vf_drv_loaded_mask &= ~BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4030 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4038 oct->sriov_info.vf_macaddr[vf_idx] = data[1]; in octeon_recv_vf_drv_notice()
4039 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4344 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num, in octeon_dbg_console_print() argument
4348 dev_info(&oct->pci_dev->dev, "%u: %s%s\n", console_num, prefix, in octeon_dbg_console_print()
4351 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, prefix); in octeon_dbg_console_print()
4353 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, suffix); in octeon_dbg_console_print()