Lines Matching full:oct
139 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num,
159 struct octeon_device *oct = oct_priv->dev; in octeon_droq_bh() local
161 for (q_no = 0; q_no < MAX_OCTEON_OUTPUT_QUEUES(oct); q_no++) { in octeon_droq_bh()
162 if (!(oct->io_qmask.oq & BIT_ULL(q_no))) in octeon_droq_bh()
164 reschedule |= octeon_droq_process_packets(oct, oct->droq[q_no], in octeon_droq_bh()
166 lio_enable_irq(oct->droq[q_no], NULL); in octeon_droq_bh()
168 if (OCTEON_CN23XX_PF(oct) && oct->msix_on) { in octeon_droq_bh()
172 int adjusted_q_no = q_no + oct->sriov_info.pf_srn; in octeon_droq_bh()
175 oct, CN23XX_SLI_OQ_PKT_INT_LEVELS(adjusted_q_no), in octeon_droq_bh()
178 oct, CN23XX_SLI_OQ_PKTS_SENT(adjusted_q_no), 0); in octeon_droq_bh()
186 static int lio_wait_for_oq_pkts(struct octeon_device *oct) in lio_wait_for_oq_pkts() argument
188 struct octeon_device_priv *oct_priv = oct->priv; in lio_wait_for_oq_pkts()
195 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in lio_wait_for_oq_pkts()
196 if (!(oct->io_qmask.oq & BIT_ULL(i))) in lio_wait_for_oq_pkts()
198 pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); in lio_wait_for_oq_pkts()
214 * @oct: Pointer to Octeon device
216 static void force_io_queues_off(struct octeon_device *oct) in force_io_queues_off() argument
218 if ((oct->chip_id == OCTEON_CN66XX) || in force_io_queues_off()
219 (oct->chip_id == OCTEON_CN68XX)) { in force_io_queues_off()
221 octeon_write_csr(oct, CN6XXX_SLI_PKT_INSTR_ENB, 0); in force_io_queues_off()
224 octeon_write_csr(oct, CN6XXX_SLI_PKT_OUT_ENB, 0); in force_io_queues_off()
230 * @oct: Pointer to Octeon device
232 static inline void pcierror_quiesce_device(struct octeon_device *oct) in pcierror_quiesce_device() argument
240 force_io_queues_off(oct); in pcierror_quiesce_device()
245 if (wait_for_pending_requests(oct)) in pcierror_quiesce_device()
246 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in pcierror_quiesce_device()
249 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in pcierror_quiesce_device()
252 if (!(oct->io_qmask.iq & BIT_ULL(i))) in pcierror_quiesce_device()
254 iq = oct->instr_queue[i]; in pcierror_quiesce_device()
262 lio_process_iq_request_list(oct, iq, 0); in pcierror_quiesce_device()
268 lio_process_ordered_list(oct, 1); in pcierror_quiesce_device()
295 * @oct: Pointer to Octeon device
297 static void stop_pci_io(struct octeon_device *oct) in stop_pci_io() argument
300 atomic_set(&oct->status, OCT_DEV_IN_RESET); in stop_pci_io()
302 pci_disable_device(oct->pci_dev); in stop_pci_io()
305 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in stop_pci_io()
307 pcierror_quiesce_device(oct); in stop_pci_io()
310 free_irq(oct->pci_dev->irq, oct); in stop_pci_io()
312 if (oct->flags & LIO_FLAG_MSI_ENABLED) in stop_pci_io()
313 pci_disable_msi(oct->pci_dev); in stop_pci_io()
315 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in stop_pci_io()
316 lio_get_state_string(&oct->status)); in stop_pci_io()
319 cleanup_aer_uncorrect_error_status(oct->pci_dev); in stop_pci_io()
333 struct octeon_device *oct = pci_get_drvdata(pdev); in liquidio_pcie_error_detected() local
337 dev_err(&oct->pci_dev->dev, "Non-correctable non-fatal error reported:\n"); in liquidio_pcie_error_detected()
338 cleanup_aer_uncorrect_error_status(oct->pci_dev); in liquidio_pcie_error_detected()
343 dev_err(&oct->pci_dev->dev, "Non-correctable FATAL reported by PCI AER driver\n"); in liquidio_pcie_error_detected()
344 stop_pci_io(oct); in liquidio_pcie_error_detected()
526 struct octeon_device *oct = lio->oct_dev; in setup_link_status_change_wq() local
531 dev_err(&oct->pci_dev->dev, "unable to create cavium link status wq\n"); in setup_link_status_change_wq()
565 struct octeon_device *oct = lio->oct_dev; in update_link_status() local
567 dev_dbg(&oct->pci_dev->dev, "%s: lio->linfo.link.u64=%llx, ls->u64=%llx\n", in update_link_status()
576 dev_dbg(&oct->pci_dev->dev, "%s: link_up", __func__); in update_link_status()
580 dev_dbg(&oct->pci_dev->dev, "%s: link_off", __func__); in update_link_status()
590 dev_warn(&oct->pci_dev->dev, in update_link_status()
609 struct octeon_device *oct = lio->oct_dev; in lio_sync_octeon_time() local
615 sc = octeon_alloc_soft_command(oct, sizeof(struct lio_time), 16, 0); in lio_sync_octeon_time()
617 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
631 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in lio_sync_octeon_time()
637 ret = octeon_send_soft_command(oct, sc); in lio_sync_octeon_time()
639 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
641 octeon_free_soft_command(oct, sc); in lio_sync_octeon_time()
659 struct octeon_device *oct = lio->oct_dev; in setup_sync_octeon_time_wq() local
664 dev_err(&oct->pci_dev->dev, "Unable to create wq to update octeon time\n"); in setup_sync_octeon_time_wq()
696 static struct octeon_device *get_other_octeon_device(struct octeon_device *oct) in get_other_octeon_device() argument
700 other_oct = lio_get_device(oct->octeon_id + 1); in get_other_octeon_device()
705 oct_busnum = oct->pci_dev->bus->number; in get_other_octeon_device()
711 oct_slot = PCI_SLOT(oct->pci_dev->devfn); in get_other_octeon_device()
722 static void disable_all_vf_links(struct octeon_device *oct) in disable_all_vf_links() argument
727 if (!oct) in disable_all_vf_links()
730 max_vfs = oct->sriov_info.max_vfs; in disable_all_vf_links()
732 for (i = 0; i < oct->ifcount; i++) { in disable_all_vf_links()
733 netdev = oct->props[i].netdev; in disable_all_vf_links()
748 struct octeon_device *oct = param; in liquidio_watchdog() local
764 (u16)octeon_read_csr64(oct, CN23XX_SLI_SCRATCH2); in liquidio_watchdog()
769 WRITE_ONCE(oct->cores_crashed, true); in liquidio_watchdog()
770 other_oct = get_other_octeon_device(oct); in liquidio_watchdog()
783 dev_err(&oct->pci_dev->dev, in liquidio_watchdog()
784 "ERROR: Octeon core %d crashed or got stuck! See oct-fwdump for details.\n", in liquidio_watchdog()
793 disable_all_vf_links(oct); in liquidio_watchdog()
798 vfs_mask1 = READ_ONCE(oct->sriov_info.vf_drv_loaded_mask); in liquidio_watchdog()
913 * @oct: octeon device
915 static void octeon_pci_flr(struct octeon_device *oct) in octeon_pci_flr() argument
919 pci_save_state(oct->pci_dev); in octeon_pci_flr()
921 pci_cfg_access_lock(oct->pci_dev); in octeon_pci_flr()
924 pci_write_config_word(oct->pci_dev, PCI_COMMAND, in octeon_pci_flr()
927 rc = __pci_reset_function_locked(oct->pci_dev); in octeon_pci_flr()
930 dev_err(&oct->pci_dev->dev, "Error %d resetting PCI function %d\n", in octeon_pci_flr()
931 rc, oct->pf_num); in octeon_pci_flr()
933 pci_cfg_access_unlock(oct->pci_dev); in octeon_pci_flr()
935 pci_restore_state(oct->pci_dev); in octeon_pci_flr()
940 * @oct: octeon device
942 static void octeon_destroy_resources(struct octeon_device *oct) in octeon_destroy_resources() argument
946 struct octeon_device_priv *oct_priv = oct->priv; in octeon_destroy_resources()
950 switch (atomic_read(&oct->status)) { in octeon_destroy_resources()
955 atomic_set(&oct->status, OCT_DEV_IN_RESET); in octeon_destroy_resources()
957 oct->app_mode = CVM_DRV_INVALID_APP; in octeon_destroy_resources()
958 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in octeon_destroy_resources()
959 lio_get_state_string(&oct->status)); in octeon_destroy_resources()
968 octeon_remove_consoles(oct); in octeon_destroy_resources()
972 if (lio_wait_for_instr_fetch(oct)) in octeon_destroy_resources()
973 dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); in octeon_destroy_resources()
975 if (wait_for_pending_requests(oct)) in octeon_destroy_resources()
976 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in octeon_destroy_resources()
982 oct->fn_list.disable_io_queues(oct); in octeon_destroy_resources()
984 if (lio_wait_for_oq_pkts(oct)) in octeon_destroy_resources()
985 dev_err(&oct->pci_dev->dev, "OQ had pending packets\n"); in octeon_destroy_resources()
990 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
993 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
995 iq = oct->instr_queue[i]; in octeon_destroy_resources()
1003 lio_process_iq_request_list(oct, iq, 0); in octeon_destroy_resources()
1008 lio_process_ordered_list(oct, 1); in octeon_destroy_resources()
1009 octeon_free_sc_done_list(oct); in octeon_destroy_resources()
1010 octeon_free_sc_zombie_list(oct); in octeon_destroy_resources()
1015 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in octeon_destroy_resources()
1017 if (oct->msix_on) { in octeon_destroy_resources()
1018 msix_entries = (struct msix_entry *)oct->msix_entries; in octeon_destroy_resources()
1019 for (i = 0; i < oct->num_msix_irqs - 1; i++) { in octeon_destroy_resources()
1020 if (oct->ioq_vector[i].vector) { in octeon_destroy_resources()
1026 &oct->ioq_vector[i]); in octeon_destroy_resources()
1027 oct->ioq_vector[i].vector = 0; in octeon_destroy_resources()
1030 /* non-iov vector's argument is oct struct */ in octeon_destroy_resources()
1031 free_irq(msix_entries[i].vector, oct); in octeon_destroy_resources()
1033 pci_disable_msix(oct->pci_dev); in octeon_destroy_resources()
1034 kfree(oct->msix_entries); in octeon_destroy_resources()
1035 oct->msix_entries = NULL; in octeon_destroy_resources()
1038 free_irq(oct->pci_dev->irq, oct); in octeon_destroy_resources()
1040 if (oct->flags & LIO_FLAG_MSI_ENABLED) in octeon_destroy_resources()
1041 pci_disable_msi(oct->pci_dev); in octeon_destroy_resources()
1044 kfree(oct->irq_name_storage); in octeon_destroy_resources()
1045 oct->irq_name_storage = NULL; in octeon_destroy_resources()
1049 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1050 octeon_free_ioq_vector(oct); in octeon_destroy_resources()
1054 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1055 oct->fn_list.free_mbox(oct); in octeon_destroy_resources()
1062 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in octeon_destroy_resources()
1063 if (!(oct->io_qmask.oq & BIT_ULL(i))) in octeon_destroy_resources()
1065 octeon_delete_droq(oct, i); in octeon_destroy_resources()
1073 handshake[oct->octeon_id].init_ok = 0; in octeon_destroy_resources()
1074 complete(&handshake[oct->octeon_id].init); in octeon_destroy_resources()
1075 handshake[oct->octeon_id].started_ok = 0; in octeon_destroy_resources()
1076 complete(&handshake[oct->octeon_id].started); in octeon_destroy_resources()
1082 octeon_delete_response_list(oct); in octeon_destroy_resources()
1086 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
1087 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
1089 octeon_delete_instr_queue(oct, i); in octeon_destroy_resources()
1092 if (oct->sriov_info.sriov_enabled) in octeon_destroy_resources()
1093 pci_disable_sriov(oct->pci_dev); in octeon_destroy_resources()
1097 octeon_free_sc_buffer_pool(oct); in octeon_destroy_resources()
1101 octeon_delete_dispatch_list(oct); in octeon_destroy_resources()
1102 cancel_delayed_work_sync(&oct->nic_poll_work.work); in octeon_destroy_resources()
1106 refcount = octeon_deregister_device(oct); in octeon_destroy_resources()
1114 if (atomic_read(oct->adapter_fw_state) == FW_IS_PRELOADED) in octeon_destroy_resources()
1115 octeon_pci_flr(oct); in octeon_destroy_resources()
1116 else if (OCTEON_CN6XXX(oct) || !refcount) in octeon_destroy_resources()
1117 oct->fn_list.soft_reset(oct); in octeon_destroy_resources()
1119 octeon_unmap_pci_barx(oct, 0); in octeon_destroy_resources()
1120 octeon_unmap_pci_barx(oct, 1); in octeon_destroy_resources()
1125 pci_disable_device(oct->pci_dev); in octeon_destroy_resources()
1131 } /* end switch (oct->status) */ in octeon_destroy_resources()
1145 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in send_rx_ctrl_cmd() local
1148 if (oct->props[lio->ifidx].rx_on == start_stop) in send_rx_ctrl_cmd()
1152 octeon_alloc_soft_command(oct, OCTNET_CMD_SIZE, in send_rx_ctrl_cmd()
1170 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in send_rx_ctrl_cmd()
1176 retval = octeon_send_soft_command(oct, sc); in send_rx_ctrl_cmd()
1179 octeon_free_soft_command(oct, sc); in send_rx_ctrl_cmd()
1184 retval = wait_for_sc_completion_timeout(oct, sc, 0); in send_rx_ctrl_cmd()
1188 oct->props[lio->ifidx].rx_on = start_stop; in send_rx_ctrl_cmd()
1197 * @oct: octeon device
1203 static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) in liquidio_destroy_nic_device() argument
1205 struct net_device *netdev = oct->props[ifidx].netdev; in liquidio_destroy_nic_device()
1206 struct octeon_device_priv *oct_priv = oct->priv; in liquidio_destroy_nic_device()
1211 dev_err(&oct->pci_dev->dev, "%s No netdevice ptr for index %d\n", in liquidio_destroy_nic_device()
1218 dev_dbg(&oct->pci_dev->dev, "NIC device cleanup\n"); in liquidio_destroy_nic_device()
1223 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_destroy_nic_device()
1227 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_destroy_nic_device()
1229 if (OCTEON_CN23XX_PF(oct)) in liquidio_destroy_nic_device()
1230 oct->droq[0]->ops.poll_mode = 0; in liquidio_destroy_nic_device()
1251 oct->props[ifidx].gmxport = -1; in liquidio_destroy_nic_device()
1253 oct->props[ifidx].netdev = NULL; in liquidio_destroy_nic_device()
1258 * @oct: octeon device
1260 static int liquidio_stop_nic_module(struct octeon_device *oct) in liquidio_stop_nic_module() argument
1265 dev_dbg(&oct->pci_dev->dev, "Stopping network interfaces\n"); in liquidio_stop_nic_module()
1266 device_lock(&oct->pci_dev->dev); in liquidio_stop_nic_module()
1267 if (oct->devlink) { in liquidio_stop_nic_module()
1268 devlink_unregister(oct->devlink); in liquidio_stop_nic_module()
1269 devlink_free(oct->devlink); in liquidio_stop_nic_module()
1270 oct->devlink = NULL; in liquidio_stop_nic_module()
1272 device_unlock(&oct->pci_dev->dev); in liquidio_stop_nic_module()
1274 if (!oct->ifcount) { in liquidio_stop_nic_module()
1275 dev_err(&oct->pci_dev->dev, "Init for Octeon was not completed\n"); in liquidio_stop_nic_module()
1279 spin_lock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1280 oct->cmd_resp_state = OCT_DRV_OFFLINE; in liquidio_stop_nic_module()
1281 spin_unlock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1283 lio_vf_rep_destroy(oct); in liquidio_stop_nic_module()
1285 for (i = 0; i < oct->ifcount; i++) { in liquidio_stop_nic_module()
1286 lio = GET_LIO(oct->props[i].netdev); in liquidio_stop_nic_module()
1287 for (j = 0; j < oct->num_oqs; j++) in liquidio_stop_nic_module()
1288 octeon_unregister_droq_ops(oct, in liquidio_stop_nic_module()
1292 for (i = 0; i < oct->ifcount; i++) in liquidio_stop_nic_module()
1293 liquidio_destroy_nic_device(oct, i); in liquidio_stop_nic_module()
1295 dev_dbg(&oct->pci_dev->dev, "Network interfaces stopped\n"); in liquidio_stop_nic_module()
1334 * @oct: octeon device
1336 static int octeon_chip_specific_setup(struct octeon_device *oct) in octeon_chip_specific_setup() argument
1341 pci_read_config_dword(oct->pci_dev, 0, &dev_id); in octeon_chip_specific_setup()
1342 pci_read_config_dword(oct->pci_dev, 8, &rev_id); in octeon_chip_specific_setup()
1343 oct->rev_id = rev_id & 0xff; in octeon_chip_specific_setup()
1347 oct->chip_id = OCTEON_CN68XX; in octeon_chip_specific_setup()
1348 ret = lio_setup_cn68xx_octeon_device(oct); in octeon_chip_specific_setup()
1352 oct->chip_id = OCTEON_CN66XX; in octeon_chip_specific_setup()
1353 ret = lio_setup_cn66xx_octeon_device(oct); in octeon_chip_specific_setup()
1357 oct->chip_id = OCTEON_CN23XX_PF_VID; in octeon_chip_specific_setup()
1358 ret = setup_cn23xx_octeon_pf_device(oct); in octeon_chip_specific_setup()
1363 pci_sriov_set_totalvfs(oct->pci_dev, in octeon_chip_specific_setup()
1364 oct->sriov_info.max_vfs); in octeon_chip_specific_setup()
1369 dev_err(&oct->pci_dev->dev, "Unknown device found (dev_id: %x)\n", in octeon_chip_specific_setup()
1378 * @oct: octeon device
1380 static int octeon_pci_os_setup(struct octeon_device *oct) in octeon_pci_os_setup() argument
1383 if (pci_enable_device(oct->pci_dev)) { in octeon_pci_os_setup()
1384 dev_err(&oct->pci_dev->dev, "pci_enable_device failed\n"); in octeon_pci_os_setup()
1388 if (dma_set_mask_and_coherent(&oct->pci_dev->dev, DMA_BIT_MASK(64))) { in octeon_pci_os_setup()
1389 dev_err(&oct->pci_dev->dev, "Unexpected DMA device capability\n"); in octeon_pci_os_setup()
1390 pci_disable_device(oct->pci_dev); in octeon_pci_os_setup()
1395 pci_set_master(oct->pci_dev); in octeon_pci_os_setup()
1514 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_adjfine() local
1530 do_div(delta, oct->coproc_clock_rate); in liquidio_ptp_adjfine()
1533 comp = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfine()
1538 lio_pci_writeq(oct, comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfine()
1572 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_gettime() local
1575 ns = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_gettime()
1595 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_settime() local
1600 lio_pci_writeq(oct, ns, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_settime()
1628 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in oct_ptp_open() local
1648 &oct->pci_dev->dev); in oct_ptp_open()
1656 * @oct: octeon device
1658 static void liquidio_ptp_init(struct octeon_device *oct) in liquidio_ptp_init() argument
1663 do_div(clock_comp, oct->coproc_clock_rate); in liquidio_ptp_init()
1664 lio_pci_writeq(oct, clock_comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_init()
1667 cfg = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1668 lio_pci_writeq(oct, cfg | 0x01, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1673 * @oct: octeon device
1677 static int load_firmware(struct octeon_device *oct) in load_firmware() argument
1692 octeon_get_conf(oct)->card_name, tmp_fw_type, in load_firmware()
1695 ret = request_firmware(&fw, fw_name, &oct->pci_dev->dev); in load_firmware()
1697 dev_err(&oct->pci_dev->dev, "Request firmware failed. Could not find file %s.\n", in load_firmware()
1703 ret = octeon_download_firmware(oct, fw->data, fw->size); in load_firmware()
1734 struct octeon_device *oct = lio->oct_dev; in setup_tx_poll_fn() local
1739 dev_err(&oct->pci_dev->dev, "unable to create cavium txq status wq\n"); in setup_tx_poll_fn()
1767 struct octeon_device *oct = lio->oct_dev; in liquidio_open() local
1768 struct octeon_device_priv *oct_priv = oct->priv; in liquidio_open()
1772 if (oct->props[lio->ifidx].napi_enabled == 0) { in liquidio_open()
1778 oct->props[lio->ifidx].napi_enabled = 1; in liquidio_open()
1780 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1781 oct->droq[0]->ops.poll_mode = 1; in liquidio_open()
1784 if (oct->ptp_enable) in liquidio_open()
1789 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) { in liquidio_open()
1813 dev_info(&oct->pci_dev->dev, "%s interface is opened\n", in liquidio_open()
1819 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) in liquidio_open()
1827 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_open()
1831 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_open()
1833 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1834 oct->droq[0]->ops.poll_mode = 0; in liquidio_open()
1847 struct octeon_device *oct = lio->oct_dev; in liquidio_stop() local
1848 struct octeon_device_priv *oct_priv = oct->priv; in liquidio_stop()
1871 if (OCTEON_CN23XX_PF(oct)) { in liquidio_stop()
1872 if (!oct->msix_on) in liquidio_stop()
1886 if (lio_wait_for_clean_oq(oct)) in liquidio_stop()
1890 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_stop()
1894 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_stop()
1896 if (OCTEON_CN23XX_PF(oct)) in liquidio_stop()
1897 oct->droq[0]->ops.poll_mode = 0; in liquidio_stop()
1902 dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name); in liquidio_stop()
1947 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mcast_list() local
1983 dev_err(&oct->pci_dev->dev, "DEVFLAGS change failed in core (ret: 0x%x)\n", in liquidio_set_mcast_list()
1997 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mac() local
2019 dev_err(&oct->pci_dev->dev, "MAC Address change failed\n"); in liquidio_set_mac()
2024 dev_err(&oct->pci_dev->dev, in liquidio_set_mac()
2041 struct octeon_device *oct; in liquidio_get_stats64() local
2047 oct = lio->oct_dev; in liquidio_get_stats64()
2052 for (i = 0; i < oct->num_iqs; i++) { in liquidio_get_stats64()
2054 iq_stats = &oct->instr_queue[iq_no]->stats; in liquidio_get_stats64()
2068 for (i = 0; i < oct->num_oqs; i++) { in liquidio_get_stats64()
2070 oq_stats = &oct->droq[oq_no]->stats; in liquidio_get_stats64()
2083 lstats->multicast = oct->link_stats.fromwire.fw_total_mcast; in liquidio_get_stats64()
2084 lstats->collisions = oct->link_stats.fromhost.total_collisions; in liquidio_get_stats64()
2087 lstats->rx_length_errors = oct->link_stats.fromwire.l2_err; in liquidio_get_stats64()
2089 lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err; in liquidio_get_stats64()
2091 lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err; in liquidio_get_stats64()
2093 lstats->rx_fifo_errors = oct->link_stats.fromwire.fifo_err; in liquidio_get_stats64()
2099 lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko; in liquidio_get_stats64()
2100 lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link; in liquidio_get_stats64()
2101 lstats->tx_fifo_errors = oct->link_stats.fromhost.fifo_err; in liquidio_get_stats64()
2184 * @oct: octeon device
2188 static void handle_timestamp(struct octeon_device *oct, in handle_timestamp() argument
2201 oct = lio->oct_dev; in handle_timestamp()
2205 dev_err(&oct->pci_dev->dev, "Tx timestamp instruction failed. Status: %llx\n", in handle_timestamp()
2223 octeon_free_soft_command(oct, sc); in handle_timestamp()
2229 * @oct: octeon device
2234 static inline int send_nic_timestamp_pkt(struct octeon_device *oct, in send_nic_timestamp_pkt() argument
2247 sc = octeon_alloc_soft_command_resp(oct, &ndata->cmd, in send_nic_timestamp_pkt()
2252 dev_err(&oct->pci_dev->dev, "No memory for timestamped data packet\n"); in send_nic_timestamp_pkt()
2265 if (OCTEON_CN23XX_PF(oct)) in send_nic_timestamp_pkt()
2274 retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd, in send_nic_timestamp_pkt()
2278 dev_err(&oct->pci_dev->dev, "timestamp data packet failed status: %x\n", in send_nic_timestamp_pkt()
2280 octeon_free_soft_command(oct, sc); in send_nic_timestamp_pkt()
2302 struct octeon_device *oct; in liquidio_xmit() local
2313 oct = lio->oct_dev; in liquidio_xmit()
2315 q_idx = skb_iq(oct, skb); in liquidio_xmit()
2319 stats = &oct->instr_queue[iq_no]->stats; in liquidio_xmit()
2348 if (octnet_iq_is_full(oct, ndata.q_no)) { in liquidio_xmit()
2380 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2383 dptr = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2387 if (dma_mapping_error(&oct->pci_dev->dev, dptr)) { in liquidio_xmit()
2388 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n", in liquidio_xmit()
2394 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2419 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2423 g->sg[0].ptr[0] = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2427 if (dma_mapping_error(&oct->pci_dev->dev, g->sg[0].ptr[0])) { in liquidio_xmit()
2428 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 2\n", in liquidio_xmit()
2441 skb_frag_dma_map(&oct->pci_dev->dev, in liquidio_xmit()
2445 if (dma_mapping_error(&oct->pci_dev->dev, in liquidio_xmit()
2447 dma_unmap_single(&oct->pci_dev->dev, in liquidio_xmit()
2453 dma_unmap_page(&oct->pci_dev->dev, in liquidio_xmit()
2458 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 3\n", in liquidio_xmit()
2470 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2480 if (OCTEON_CN23XX_PF(oct)) { in liquidio_xmit()
2503 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); in liquidio_xmit()
2505 status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more); in liquidio_xmit()
2529 dma_unmap_single(&oct->pci_dev->dev, dptr, in liquidio_xmit()
2532 octeon_ring_doorbell_locked(oct, iq_no); in liquidio_xmit()
2561 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_add_vid() local
2576 dev_err(&oct->pci_dev->dev, "Add VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_add_vid()
2590 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_kill_vid() local
2605 dev_err(&oct->pci_dev->dev, "Del VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_kill_vid()
2624 struct octeon_device *oct = lio->oct_dev; in liquidio_set_rxcsum_command() local
2639 dev_err(&oct->pci_dev->dev, in liquidio_set_rxcsum_command()
2661 struct octeon_device *oct = lio->oct_dev; in liquidio_vxlan_port_command() local
2677 dev_err(&oct->pci_dev->dev, in liquidio_vxlan_port_command()
2809 struct octeon_device *oct = lio->oct_dev; in __liquidio_set_vf_mac() local
2816 if (vfidx < 0 || vfidx >= oct->sriov_info.max_vfs) in __liquidio_set_vf_mac()
2837 oct->sriov_info.vf_macaddr[vfidx] = nctrl.udd[0]; in __liquidio_set_vf_mac()
2839 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in __liquidio_set_vf_mac()
2849 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_mac() local
2852 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_mac()
2857 cn23xx_tell_vf_its_macaddr_changed(oct, vfidx, mac); in liquidio_set_vf_mac()
2866 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_spoofchk() local
2870 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SPOOFCHK_CAP)) { in liquidio_set_vf_spoofchk()
2876 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_spoofchk()
2882 if (oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2886 if (!oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2902 retval = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_spoofchk()
2911 oct->sriov_info.vf_spoofchk[vfidx] = enable; in liquidio_set_vf_spoofchk()
2922 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_vlan() local
2927 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_vlan()
2941 if (oct->sriov_info.vf_vlantci[vfidx] == vlantci) in liquidio_set_vf_vlan()
2958 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_vlan()
2965 oct->sriov_info.vf_vlantci[vfidx] = vlantci; in liquidio_set_vf_vlan()
2974 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_config() local
2977 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_config()
2983 macaddr = 2 + (u8 *)&oct->sriov_info.vf_macaddr[vfidx]; in liquidio_get_vf_config()
2985 ivi->vlan = oct->sriov_info.vf_vlantci[vfidx] & VLAN_VID_MASK; in liquidio_get_vf_config()
2986 ivi->qos = oct->sriov_info.vf_vlantci[vfidx] >> VLAN_PRIO_SHIFT; in liquidio_get_vf_config()
2987 if (oct->sriov_info.trusted_vf.active && in liquidio_get_vf_config()
2988 oct->sriov_info.trusted_vf.id == vfidx) in liquidio_get_vf_config()
2992 ivi->linkstate = oct->sriov_info.vf_linkstate[vfidx]; in liquidio_get_vf_config()
2993 ivi->spoofchk = oct->sriov_info.vf_spoofchk[vfidx]; in liquidio_get_vf_config()
3002 struct octeon_device *oct = lio->oct_dev; in liquidio_send_vf_trust_cmd() local
3006 sc = octeon_alloc_soft_command(oct, 0, 16, 0); in liquidio_send_vf_trust_cmd()
3013 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in liquidio_send_vf_trust_cmd()
3020 retval = octeon_send_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3022 octeon_free_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3026 retval = wait_for_sc_completion_timeout(oct, sc, 0); in liquidio_send_vf_trust_cmd()
3040 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_trust() local
3042 if (strcmp(oct->fw_info.liquidio_firmware_version, "1.7.1") < 0) { in liquidio_set_vf_trust()
3047 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_trust()
3055 if (oct->sriov_info.trusted_vf.active && in liquidio_set_vf_trust()
3056 oct->sriov_info.trusted_vf.id == vfidx) in liquidio_set_vf_trust()
3059 if (oct->sriov_info.trusted_vf.active) { in liquidio_set_vf_trust()
3066 if (!oct->sriov_info.trusted_vf.active) in liquidio_set_vf_trust()
3072 oct->sriov_info.trusted_vf.id = vfidx; in liquidio_set_vf_trust()
3073 oct->sriov_info.trusted_vf.active = true; in liquidio_set_vf_trust()
3075 oct->sriov_info.trusted_vf.active = false; in liquidio_set_vf_trust()
3092 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_link_state() local
3096 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_link_state()
3099 if (oct->sriov_info.vf_linkstate[vfidx] == linkstate) in liquidio_set_vf_link_state()
3111 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_link_state()
3114 oct->sriov_info.vf_linkstate[vfidx] = linkstate; in liquidio_set_vf_link_state()
3125 struct octeon_device *oct; in liquidio_eswitch_mode_get() local
3128 oct = priv->oct; in liquidio_eswitch_mode_get()
3130 *mode = oct->eswitch_mode; in liquidio_eswitch_mode_get()
3140 struct octeon_device *oct; in liquidio_eswitch_mode_set() local
3144 oct = priv->oct; in liquidio_eswitch_mode_set()
3146 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP)) in liquidio_eswitch_mode_set()
3149 if (oct->eswitch_mode == mode) in liquidio_eswitch_mode_set()
3154 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3155 ret = lio_vf_rep_create(oct); in liquidio_eswitch_mode_set()
3159 lio_vf_rep_destroy(oct); in liquidio_eswitch_mode_set()
3160 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3180 struct octeon_device *oct = lio->oct_dev; in liquidio_get_port_parent_id() local
3182 if (oct->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV) in liquidio_get_port_parent_id()
3195 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_stats() local
3199 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_stats()
3203 ret = cn23xx_get_vf_stats(oct, vfidx, &stats); in liquidio_get_vf_stats()
3292 struct octeon_device *oct = (struct octeon_device *)buf; in lio_nic_info() local
3299 dev_err(&oct->pci_dev->dev, "Malformed NIC_INFO, len=%d, ifidx=%d\n", in lio_nic_info()
3310 for (i = 0; i < oct->ifcount; i++) { in lio_nic_info()
3311 if (oct->props[i].gmxport == gmxport) { in lio_nic_info()
3312 update_link_status(oct->props[i].netdev, ls); in lio_nic_info()
3765 lio_devlink->oct = octeon_dev; in setup_nic_devices()
3788 static int octeon_enable_sriov(struct octeon_device *oct) in octeon_enable_sriov() argument
3790 unsigned int num_vfs_alloced = oct->sriov_info.num_vfs_alloced; in octeon_enable_sriov()
3795 if (OCTEON_CN23XX_PF(oct) && num_vfs_alloced) { in octeon_enable_sriov()
3796 err = pci_enable_sriov(oct->pci_dev, in octeon_enable_sriov()
3797 oct->sriov_info.num_vfs_alloced); in octeon_enable_sriov()
3799 dev_err(&oct->pci_dev->dev, in octeon_enable_sriov()
3802 oct->sriov_info.num_vfs_alloced = 0; in octeon_enable_sriov()
3805 oct->sriov_info.sriov_enabled = 1; in octeon_enable_sriov()
3815 (vfdev->physfn == oct->pci_dev)) { in octeon_enable_sriov()
3816 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = in octeon_enable_sriov()
3818 u += oct->sriov_info.rings_per_vf; in octeon_enable_sriov()
3828 static int lio_pci_sriov_disable(struct octeon_device *oct) in lio_pci_sriov_disable() argument
3832 if (pci_vfs_assigned(oct->pci_dev)) { in lio_pci_sriov_disable()
3833 dev_err(&oct->pci_dev->dev, "VFs are still assigned to VMs.\n"); in lio_pci_sriov_disable()
3837 pci_disable_sriov(oct->pci_dev); in lio_pci_sriov_disable()
3841 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = NULL; in lio_pci_sriov_disable()
3842 u += oct->sriov_info.rings_per_vf; in lio_pci_sriov_disable()
3845 oct->sriov_info.num_vfs_alloced = 0; in lio_pci_sriov_disable()
3846 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d disabled VFs\n", in lio_pci_sriov_disable()
3847 oct->pf_num); in lio_pci_sriov_disable()
3854 struct octeon_device *oct = pci_get_drvdata(dev); in liquidio_enable_sriov() local
3857 if ((num_vfs == oct->sriov_info.num_vfs_alloced) && in liquidio_enable_sriov()
3858 (oct->sriov_info.sriov_enabled)) { in liquidio_enable_sriov()
3859 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d already enabled num_vfs:%d\n", in liquidio_enable_sriov()
3860 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3865 lio_vf_rep_destroy(oct); in liquidio_enable_sriov()
3866 ret = lio_pci_sriov_disable(oct); in liquidio_enable_sriov()
3867 } else if (num_vfs > oct->sriov_info.max_vfs) { in liquidio_enable_sriov()
3868 dev_err(&oct->pci_dev->dev, in liquidio_enable_sriov()
3870 oct->sriov_info.max_vfs, num_vfs); in liquidio_enable_sriov()
3873 oct->sriov_info.num_vfs_alloced = num_vfs; in liquidio_enable_sriov()
3874 ret = octeon_enable_sriov(oct); in liquidio_enable_sriov()
3875 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d num_vfs:%d\n", in liquidio_enable_sriov()
3876 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3877 ret = lio_vf_rep_create(oct); in liquidio_enable_sriov()
3879 dev_info(&oct->pci_dev->dev, in liquidio_enable_sriov()
3889 * @oct: octeon device
3894 static int liquidio_init_nic_module(struct octeon_device *oct) in liquidio_init_nic_module() argument
3897 int num_nic_ports = CFG_GET_NUM_NIC_PORTS(octeon_get_conf(oct)); in liquidio_init_nic_module()
3899 dev_dbg(&oct->pci_dev->dev, "Initializing network interfaces\n"); in liquidio_init_nic_module()
3905 oct->ifcount = num_nic_ports; in liquidio_init_nic_module()
3907 memset(oct->props, 0, sizeof(struct octdev_props) * num_nic_ports); in liquidio_init_nic_module()
3910 oct->props[i].gmxport = -1; in liquidio_init_nic_module()
3912 retval = setup_nic_devices(oct); in liquidio_init_nic_module()
3914 dev_err(&oct->pci_dev->dev, "Setup NIC devices failed\n"); in liquidio_init_nic_module()
3921 if (!oct->octeon_id && in liquidio_init_nic_module()
3922 oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP) { in liquidio_init_nic_module()
3925 liquidio_stop_nic_module(oct); in liquidio_init_nic_module()
3930 liquidio_ptp_init(oct); in liquidio_init_nic_module()
3932 dev_dbg(&oct->pci_dev->dev, "Network interfaces ready\n"); in liquidio_init_nic_module()
3938 oct->ifcount = 0; in liquidio_init_nic_module()
3951 struct octeon_device *oct; in nic_starter() local
3954 oct = (struct octeon_device *)wk->ctxptr; in nic_starter()
3956 if (atomic_read(&oct->status) == OCT_DEV_RUNNING) in nic_starter()
3964 if (atomic_read(&oct->status) != OCT_DEV_CORE_OK) { in nic_starter()
3965 schedule_delayed_work(&oct->nic_poll_work.work, in nic_starter()
3970 atomic_set(&oct->status, OCT_DEV_RUNNING); in nic_starter()
3972 if (oct->app_mode && oct->app_mode == CVM_DRV_NIC_APP) { in nic_starter()
3973 dev_dbg(&oct->pci_dev->dev, "Starting NIC module\n"); in nic_starter()
3975 if (liquidio_init_nic_module(oct)) in nic_starter()
3976 dev_err(&oct->pci_dev->dev, "NIC initialization failed\n"); in nic_starter()
3978 handshake[oct->octeon_id].started_ok = 1; in nic_starter()
3980 dev_err(&oct->pci_dev->dev, in nic_starter()
3982 oct->app_mode); in nic_starter()
3985 complete(&handshake[oct->octeon_id].started); in nic_starter()
3991 struct octeon_device *oct = (struct octeon_device *)buf; in octeon_recv_vf_drv_notice() local
4005 cores_crashed = READ_ONCE(oct->cores_crashed); in octeon_recv_vf_drv_notice()
4008 if (!(oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx))) { in octeon_recv_vf_drv_notice()
4009 oct->sriov_info.vf_drv_loaded_mask |= BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4010 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4016 if (oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx)) { in octeon_recv_vf_drv_notice()
4017 oct->sriov_info.vf_drv_loaded_mask &= ~BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4018 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4026 oct->sriov_info.vf_macaddr[vf_idx] = data[1]; in octeon_recv_vf_drv_notice()
4027 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4320 * @oct: octeon device
4331 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num, in octeon_dbg_console_print() argument
4335 dev_info(&oct->pci_dev->dev, "%u: %s%s\n", console_num, prefix, in octeon_dbg_console_print()
4338 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, prefix); in octeon_dbg_console_print()
4340 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, suffix); in octeon_dbg_console_print()