• Home
  • Raw
  • Download

Lines Matching refs:oct

150 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num,
170 struct octeon_device *oct = oct_priv->dev; in octeon_droq_bh() local
172 for (q_no = 0; q_no < MAX_OCTEON_OUTPUT_QUEUES(oct); q_no++) { in octeon_droq_bh()
173 if (!(oct->io_qmask.oq & BIT_ULL(q_no))) in octeon_droq_bh()
175 reschedule |= octeon_droq_process_packets(oct, oct->droq[q_no], in octeon_droq_bh()
177 lio_enable_irq(oct->droq[q_no], NULL); in octeon_droq_bh()
179 if (OCTEON_CN23XX_PF(oct) && oct->msix_on) { in octeon_droq_bh()
183 int adjusted_q_no = q_no + oct->sriov_info.pf_srn; in octeon_droq_bh()
186 oct, CN23XX_SLI_OQ_PKT_INT_LEVELS(adjusted_q_no), in octeon_droq_bh()
189 oct, CN23XX_SLI_OQ_PKTS_SENT(adjusted_q_no), 0); in octeon_droq_bh()
197 static int lio_wait_for_oq_pkts(struct octeon_device *oct) in lio_wait_for_oq_pkts() argument
200 (struct octeon_device_priv *)oct->priv; in lio_wait_for_oq_pkts()
207 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in lio_wait_for_oq_pkts()
208 if (!(oct->io_qmask.oq & BIT_ULL(i))) in lio_wait_for_oq_pkts()
210 pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); in lio_wait_for_oq_pkts()
228 static void force_io_queues_off(struct octeon_device *oct) in force_io_queues_off() argument
230 if ((oct->chip_id == OCTEON_CN66XX) || in force_io_queues_off()
231 (oct->chip_id == OCTEON_CN68XX)) { in force_io_queues_off()
233 octeon_write_csr(oct, CN6XXX_SLI_PKT_INSTR_ENB, 0); in force_io_queues_off()
236 octeon_write_csr(oct, CN6XXX_SLI_PKT_OUT_ENB, 0); in force_io_queues_off()
244 static inline void pcierror_quiesce_device(struct octeon_device *oct) in pcierror_quiesce_device() argument
252 force_io_queues_off(oct); in pcierror_quiesce_device()
257 if (wait_for_pending_requests(oct)) in pcierror_quiesce_device()
258 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in pcierror_quiesce_device()
261 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in pcierror_quiesce_device()
264 if (!(oct->io_qmask.iq & BIT_ULL(i))) in pcierror_quiesce_device()
266 iq = oct->instr_queue[i]; in pcierror_quiesce_device()
274 lio_process_iq_request_list(oct, iq, 0); in pcierror_quiesce_device()
280 lio_process_ordered_list(oct, 1); in pcierror_quiesce_device()
309 static void stop_pci_io(struct octeon_device *oct) in stop_pci_io() argument
312 atomic_set(&oct->status, OCT_DEV_IN_RESET); in stop_pci_io()
314 pci_disable_device(oct->pci_dev); in stop_pci_io()
317 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in stop_pci_io()
319 pcierror_quiesce_device(oct); in stop_pci_io()
322 free_irq(oct->pci_dev->irq, oct); in stop_pci_io()
324 if (oct->flags & LIO_FLAG_MSI_ENABLED) in stop_pci_io()
325 pci_disable_msi(oct->pci_dev); in stop_pci_io()
327 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in stop_pci_io()
328 lio_get_state_string(&oct->status)); in stop_pci_io()
331 cleanup_aer_uncorrect_error_status(oct->pci_dev); in stop_pci_io()
345 struct octeon_device *oct = pci_get_drvdata(pdev); in liquidio_pcie_error_detected() local
349 dev_err(&oct->pci_dev->dev, "Non-correctable non-fatal error reported:\n"); in liquidio_pcie_error_detected()
350 cleanup_aer_uncorrect_error_status(oct->pci_dev); in liquidio_pcie_error_detected()
355 dev_err(&oct->pci_dev->dev, "Non-correctable FATAL reported by PCI AER driver\n"); in liquidio_pcie_error_detected()
356 stop_pci_io(oct); in liquidio_pcie_error_detected()
538 struct octeon_device *oct = lio->oct_dev; in setup_link_status_change_wq() local
543 dev_err(&oct->pci_dev->dev, "unable to create cavium link status wq\n"); in setup_link_status_change_wq()
577 struct octeon_device *oct = lio->oct_dev; in update_link_status() local
579 dev_dbg(&oct->pci_dev->dev, "%s: lio->linfo.link.u64=%llx, ls->u64=%llx\n", in update_link_status()
588 dev_dbg(&oct->pci_dev->dev, "%s: link_up", __func__); in update_link_status()
592 dev_dbg(&oct->pci_dev->dev, "%s: link_off", __func__); in update_link_status()
602 dev_warn(&oct->pci_dev->dev, in update_link_status()
621 struct octeon_device *oct = lio->oct_dev; in lio_sync_octeon_time() local
627 sc = octeon_alloc_soft_command(oct, sizeof(struct lio_time), 16, 0); in lio_sync_octeon_time()
629 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
643 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in lio_sync_octeon_time()
649 ret = octeon_send_soft_command(oct, sc); in lio_sync_octeon_time()
651 dev_err(&oct->pci_dev->dev, in lio_sync_octeon_time()
653 octeon_free_soft_command(oct, sc); in lio_sync_octeon_time()
671 struct octeon_device *oct = lio->oct_dev; in setup_sync_octeon_time_wq() local
676 dev_err(&oct->pci_dev->dev, "Unable to create wq to update octeon time\n"); in setup_sync_octeon_time_wq()
708 static struct octeon_device *get_other_octeon_device(struct octeon_device *oct) in get_other_octeon_device() argument
712 other_oct = lio_get_device(oct->octeon_id + 1); in get_other_octeon_device()
717 oct_busnum = oct->pci_dev->bus->number; in get_other_octeon_device()
723 oct_slot = PCI_SLOT(oct->pci_dev->devfn); in get_other_octeon_device()
734 static void disable_all_vf_links(struct octeon_device *oct) in disable_all_vf_links() argument
739 if (!oct) in disable_all_vf_links()
742 max_vfs = oct->sriov_info.max_vfs; in disable_all_vf_links()
744 for (i = 0; i < oct->ifcount; i++) { in disable_all_vf_links()
745 netdev = oct->props[i].netdev; in disable_all_vf_links()
760 struct octeon_device *oct = param; in liquidio_watchdog() local
776 (u16)octeon_read_csr64(oct, CN23XX_SLI_SCRATCH2); in liquidio_watchdog()
781 WRITE_ONCE(oct->cores_crashed, true); in liquidio_watchdog()
782 other_oct = get_other_octeon_device(oct); in liquidio_watchdog()
795 dev_err(&oct->pci_dev->dev, in liquidio_watchdog()
805 disable_all_vf_links(oct); in liquidio_watchdog()
810 vfs_mask1 = READ_ONCE(oct->sriov_info.vf_drv_loaded_mask); in liquidio_watchdog()
928 static void octeon_pci_flr(struct octeon_device *oct) in octeon_pci_flr() argument
932 pci_save_state(oct->pci_dev); in octeon_pci_flr()
934 pci_cfg_access_lock(oct->pci_dev); in octeon_pci_flr()
937 pci_write_config_word(oct->pci_dev, PCI_COMMAND, in octeon_pci_flr()
940 rc = __pci_reset_function_locked(oct->pci_dev); in octeon_pci_flr()
943 dev_err(&oct->pci_dev->dev, "Error %d resetting PCI function %d\n", in octeon_pci_flr()
944 rc, oct->pf_num); in octeon_pci_flr()
946 pci_cfg_access_unlock(oct->pci_dev); in octeon_pci_flr()
948 pci_restore_state(oct->pci_dev); in octeon_pci_flr()
955 static void octeon_destroy_resources(struct octeon_device *oct) in octeon_destroy_resources() argument
960 (struct octeon_device_priv *)oct->priv; in octeon_destroy_resources()
964 switch (atomic_read(&oct->status)) { in octeon_destroy_resources()
969 atomic_set(&oct->status, OCT_DEV_IN_RESET); in octeon_destroy_resources()
971 oct->app_mode = CVM_DRV_INVALID_APP; in octeon_destroy_resources()
972 dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", in octeon_destroy_resources()
973 lio_get_state_string(&oct->status)); in octeon_destroy_resources()
982 octeon_remove_consoles(oct); in octeon_destroy_resources()
986 if (lio_wait_for_instr_fetch(oct)) in octeon_destroy_resources()
987 dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); in octeon_destroy_resources()
989 if (wait_for_pending_requests(oct)) in octeon_destroy_resources()
990 dev_err(&oct->pci_dev->dev, "There were pending requests\n"); in octeon_destroy_resources()
996 oct->fn_list.disable_io_queues(oct); in octeon_destroy_resources()
998 if (lio_wait_for_oq_pkts(oct)) in octeon_destroy_resources()
999 dev_err(&oct->pci_dev->dev, "OQ had pending packets\n"); in octeon_destroy_resources()
1004 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
1007 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
1009 iq = oct->instr_queue[i]; in octeon_destroy_resources()
1017 lio_process_iq_request_list(oct, iq, 0); in octeon_destroy_resources()
1022 lio_process_ordered_list(oct, 1); in octeon_destroy_resources()
1023 octeon_free_sc_done_list(oct); in octeon_destroy_resources()
1024 octeon_free_sc_zombie_list(oct); in octeon_destroy_resources()
1029 oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); in octeon_destroy_resources()
1031 if (oct->msix_on) { in octeon_destroy_resources()
1032 msix_entries = (struct msix_entry *)oct->msix_entries; in octeon_destroy_resources()
1033 for (i = 0; i < oct->num_msix_irqs - 1; i++) { in octeon_destroy_resources()
1034 if (oct->ioq_vector[i].vector) { in octeon_destroy_resources()
1040 &oct->ioq_vector[i]); in octeon_destroy_resources()
1041 oct->ioq_vector[i].vector = 0; in octeon_destroy_resources()
1045 free_irq(msix_entries[i].vector, oct); in octeon_destroy_resources()
1047 pci_disable_msix(oct->pci_dev); in octeon_destroy_resources()
1048 kfree(oct->msix_entries); in octeon_destroy_resources()
1049 oct->msix_entries = NULL; in octeon_destroy_resources()
1052 free_irq(oct->pci_dev->irq, oct); in octeon_destroy_resources()
1054 if (oct->flags & LIO_FLAG_MSI_ENABLED) in octeon_destroy_resources()
1055 pci_disable_msi(oct->pci_dev); in octeon_destroy_resources()
1058 kfree(oct->irq_name_storage); in octeon_destroy_resources()
1059 oct->irq_name_storage = NULL; in octeon_destroy_resources()
1063 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1064 octeon_free_ioq_vector(oct); in octeon_destroy_resources()
1068 if (OCTEON_CN23XX_PF(oct)) in octeon_destroy_resources()
1069 oct->fn_list.free_mbox(oct); in octeon_destroy_resources()
1076 for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { in octeon_destroy_resources()
1077 if (!(oct->io_qmask.oq & BIT_ULL(i))) in octeon_destroy_resources()
1079 octeon_delete_droq(oct, i); in octeon_destroy_resources()
1087 handshake[oct->octeon_id].init_ok = 0; in octeon_destroy_resources()
1088 complete(&handshake[oct->octeon_id].init); in octeon_destroy_resources()
1089 handshake[oct->octeon_id].started_ok = 0; in octeon_destroy_resources()
1090 complete(&handshake[oct->octeon_id].started); in octeon_destroy_resources()
1096 octeon_delete_response_list(oct); in octeon_destroy_resources()
1100 for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { in octeon_destroy_resources()
1101 if (!(oct->io_qmask.iq & BIT_ULL(i))) in octeon_destroy_resources()
1103 octeon_delete_instr_queue(oct, i); in octeon_destroy_resources()
1106 if (oct->sriov_info.sriov_enabled) in octeon_destroy_resources()
1107 pci_disable_sriov(oct->pci_dev); in octeon_destroy_resources()
1111 octeon_free_sc_buffer_pool(oct); in octeon_destroy_resources()
1115 octeon_delete_dispatch_list(oct); in octeon_destroy_resources()
1116 cancel_delayed_work_sync(&oct->nic_poll_work.work); in octeon_destroy_resources()
1120 refcount = octeon_deregister_device(oct); in octeon_destroy_resources()
1128 if (atomic_read(oct->adapter_fw_state) == FW_IS_PRELOADED) in octeon_destroy_resources()
1129 octeon_pci_flr(oct); in octeon_destroy_resources()
1130 else if (OCTEON_CN6XXX(oct) || !refcount) in octeon_destroy_resources()
1131 oct->fn_list.soft_reset(oct); in octeon_destroy_resources()
1133 octeon_unmap_pci_barx(oct, 0); in octeon_destroy_resources()
1134 octeon_unmap_pci_barx(oct, 1); in octeon_destroy_resources()
1138 pci_clear_master(oct->pci_dev); in octeon_destroy_resources()
1140 pci_disable_device(oct->pci_dev); in octeon_destroy_resources()
1160 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in send_rx_ctrl_cmd() local
1163 if (oct->props[lio->ifidx].rx_on == start_stop) in send_rx_ctrl_cmd()
1167 octeon_alloc_soft_command(oct, OCTNET_CMD_SIZE, in send_rx_ctrl_cmd()
1185 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in send_rx_ctrl_cmd()
1191 retval = octeon_send_soft_command(oct, sc); in send_rx_ctrl_cmd()
1194 octeon_free_soft_command(oct, sc); in send_rx_ctrl_cmd()
1199 retval = wait_for_sc_completion_timeout(oct, sc, 0); in send_rx_ctrl_cmd()
1203 oct->props[lio->ifidx].rx_on = start_stop; in send_rx_ctrl_cmd()
1218 static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) in liquidio_destroy_nic_device() argument
1220 struct net_device *netdev = oct->props[ifidx].netdev; in liquidio_destroy_nic_device()
1222 (struct octeon_device_priv *)oct->priv; in liquidio_destroy_nic_device()
1227 dev_err(&oct->pci_dev->dev, "%s No netdevice ptr for index %d\n", in liquidio_destroy_nic_device()
1234 dev_dbg(&oct->pci_dev->dev, "NIC device cleanup\n"); in liquidio_destroy_nic_device()
1239 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_destroy_nic_device()
1243 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_destroy_nic_device()
1245 if (OCTEON_CN23XX_PF(oct)) in liquidio_destroy_nic_device()
1246 oct->droq[0]->ops.poll_mode = 0; in liquidio_destroy_nic_device()
1267 oct->props[ifidx].gmxport = -1; in liquidio_destroy_nic_device()
1269 oct->props[ifidx].netdev = NULL; in liquidio_destroy_nic_device()
1276 static int liquidio_stop_nic_module(struct octeon_device *oct) in liquidio_stop_nic_module() argument
1281 dev_dbg(&oct->pci_dev->dev, "Stopping network interfaces\n"); in liquidio_stop_nic_module()
1282 if (!oct->ifcount) { in liquidio_stop_nic_module()
1283 dev_err(&oct->pci_dev->dev, "Init for Octeon was not completed\n"); in liquidio_stop_nic_module()
1287 spin_lock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1288 oct->cmd_resp_state = OCT_DRV_OFFLINE; in liquidio_stop_nic_module()
1289 spin_unlock_bh(&oct->cmd_resp_wqlock); in liquidio_stop_nic_module()
1291 lio_vf_rep_destroy(oct); in liquidio_stop_nic_module()
1293 for (i = 0; i < oct->ifcount; i++) { in liquidio_stop_nic_module()
1294 lio = GET_LIO(oct->props[i].netdev); in liquidio_stop_nic_module()
1295 for (j = 0; j < oct->num_oqs; j++) in liquidio_stop_nic_module()
1296 octeon_unregister_droq_ops(oct, in liquidio_stop_nic_module()
1300 for (i = 0; i < oct->ifcount; i++) in liquidio_stop_nic_module()
1301 liquidio_destroy_nic_device(oct, i); in liquidio_stop_nic_module()
1303 if (oct->devlink) { in liquidio_stop_nic_module()
1304 devlink_unregister(oct->devlink); in liquidio_stop_nic_module()
1305 devlink_free(oct->devlink); in liquidio_stop_nic_module()
1306 oct->devlink = NULL; in liquidio_stop_nic_module()
1309 dev_dbg(&oct->pci_dev->dev, "Network interfaces stopped\n"); in liquidio_stop_nic_module()
1350 static int octeon_chip_specific_setup(struct octeon_device *oct) in octeon_chip_specific_setup() argument
1355 pci_read_config_dword(oct->pci_dev, 0, &dev_id); in octeon_chip_specific_setup()
1356 pci_read_config_dword(oct->pci_dev, 8, &rev_id); in octeon_chip_specific_setup()
1357 oct->rev_id = rev_id & 0xff; in octeon_chip_specific_setup()
1361 oct->chip_id = OCTEON_CN68XX; in octeon_chip_specific_setup()
1362 ret = lio_setup_cn68xx_octeon_device(oct); in octeon_chip_specific_setup()
1366 oct->chip_id = OCTEON_CN66XX; in octeon_chip_specific_setup()
1367 ret = lio_setup_cn66xx_octeon_device(oct); in octeon_chip_specific_setup()
1371 oct->chip_id = OCTEON_CN23XX_PF_VID; in octeon_chip_specific_setup()
1372 ret = setup_cn23xx_octeon_pf_device(oct); in octeon_chip_specific_setup()
1377 pci_sriov_set_totalvfs(oct->pci_dev, in octeon_chip_specific_setup()
1378 oct->sriov_info.max_vfs); in octeon_chip_specific_setup()
1383 dev_err(&oct->pci_dev->dev, "Unknown device found (dev_id: %x)\n", in octeon_chip_specific_setup()
1394 static int octeon_pci_os_setup(struct octeon_device *oct) in octeon_pci_os_setup() argument
1397 if (pci_enable_device(oct->pci_dev)) { in octeon_pci_os_setup()
1398 dev_err(&oct->pci_dev->dev, "pci_enable_device failed\n"); in octeon_pci_os_setup()
1402 if (dma_set_mask_and_coherent(&oct->pci_dev->dev, DMA_BIT_MASK(64))) { in octeon_pci_os_setup()
1403 dev_err(&oct->pci_dev->dev, "Unexpected DMA device capability\n"); in octeon_pci_os_setup()
1404 pci_disable_device(oct->pci_dev); in octeon_pci_os_setup()
1409 pci_set_master(oct->pci_dev); in octeon_pci_os_setup()
1526 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_adjfreq() local
1541 do_div(delta, oct->coproc_clock_rate); in liquidio_ptp_adjfreq()
1544 comp = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfreq()
1549 lio_pci_writeq(oct, comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_adjfreq()
1583 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_gettime() local
1586 ns = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_gettime()
1606 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in liquidio_ptp_settime() local
1611 lio_pci_writeq(oct, ns, CN6XXX_MIO_PTP_CLOCK_HI); in liquidio_ptp_settime()
1639 struct octeon_device *oct = (struct octeon_device *)lio->oct_dev; in oct_ptp_open() local
1659 &oct->pci_dev->dev); in oct_ptp_open()
1669 static void liquidio_ptp_init(struct octeon_device *oct) in liquidio_ptp_init() argument
1674 do_div(clock_comp, oct->coproc_clock_rate); in liquidio_ptp_init()
1675 lio_pci_writeq(oct, clock_comp, CN6XXX_MIO_PTP_CLOCK_COMP); in liquidio_ptp_init()
1678 cfg = lio_pci_readq(oct, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1679 lio_pci_writeq(oct, cfg | 0x01, CN6XXX_MIO_PTP_CLOCK_CFG); in liquidio_ptp_init()
1688 static int load_firmware(struct octeon_device *oct) in load_firmware() argument
1703 octeon_get_conf(oct)->card_name, tmp_fw_type, in load_firmware()
1706 ret = request_firmware(&fw, fw_name, &oct->pci_dev->dev); in load_firmware()
1708 dev_err(&oct->pci_dev->dev, "Request firmware failed. Could not find file %s.\n", in load_firmware()
1714 ret = octeon_download_firmware(oct, fw->data, fw->size); in load_firmware()
1745 struct octeon_device *oct = lio->oct_dev; in setup_tx_poll_fn() local
1750 dev_err(&oct->pci_dev->dev, "unable to create cavium txq status wq\n"); in setup_tx_poll_fn()
1778 struct octeon_device *oct = lio->oct_dev; in liquidio_open() local
1780 (struct octeon_device_priv *)oct->priv; in liquidio_open()
1784 if (oct->props[lio->ifidx].napi_enabled == 0) { in liquidio_open()
1790 oct->props[lio->ifidx].napi_enabled = 1; in liquidio_open()
1792 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1793 oct->droq[0]->ops.poll_mode = 1; in liquidio_open()
1796 if (oct->ptp_enable) in liquidio_open()
1801 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) { in liquidio_open()
1825 dev_info(&oct->pci_dev->dev, "%s interface is opened\n", in liquidio_open()
1831 if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) in liquidio_open()
1839 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_open()
1843 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_open()
1845 if (OCTEON_CN23XX_PF(oct)) in liquidio_open()
1846 oct->droq[0]->ops.poll_mode = 0; in liquidio_open()
1859 struct octeon_device *oct = lio->oct_dev; in liquidio_stop() local
1861 (struct octeon_device_priv *)oct->priv; in liquidio_stop()
1884 if (OCTEON_CN23XX_PF(oct)) { in liquidio_stop()
1885 if (!oct->msix_on) in liquidio_stop()
1899 if (lio_wait_for_clean_oq(oct)) in liquidio_stop()
1903 if (oct->props[lio->ifidx].napi_enabled == 1) { in liquidio_stop()
1907 oct->props[lio->ifidx].napi_enabled = 0; in liquidio_stop()
1909 if (OCTEON_CN23XX_PF(oct)) in liquidio_stop()
1910 oct->droq[0]->ops.poll_mode = 0; in liquidio_stop()
1915 dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name); in liquidio_stop()
1960 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mcast_list() local
1996 dev_err(&oct->pci_dev->dev, "DEVFLAGS change failed in core (ret: 0x%x)\n", in liquidio_set_mcast_list()
2010 struct octeon_device *oct = lio->oct_dev; in liquidio_set_mac() local
2032 dev_err(&oct->pci_dev->dev, "MAC Address change failed\n"); in liquidio_set_mac()
2037 dev_err(&oct->pci_dev->dev, in liquidio_set_mac()
2054 struct octeon_device *oct; in liquidio_get_stats64() local
2060 oct = lio->oct_dev; in liquidio_get_stats64()
2065 for (i = 0; i < oct->num_iqs; i++) { in liquidio_get_stats64()
2067 iq_stats = &oct->instr_queue[iq_no]->stats; in liquidio_get_stats64()
2081 for (i = 0; i < oct->num_oqs; i++) { in liquidio_get_stats64()
2083 oq_stats = &oct->droq[oq_no]->stats; in liquidio_get_stats64()
2096 lstats->multicast = oct->link_stats.fromwire.fw_total_mcast; in liquidio_get_stats64()
2097 lstats->collisions = oct->link_stats.fromhost.total_collisions; in liquidio_get_stats64()
2100 lstats->rx_length_errors = oct->link_stats.fromwire.l2_err; in liquidio_get_stats64()
2102 lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err; in liquidio_get_stats64()
2104 lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err; in liquidio_get_stats64()
2106 lstats->rx_fifo_errors = oct->link_stats.fromwire.fifo_err; in liquidio_get_stats64()
2112 lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko; in liquidio_get_stats64()
2113 lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link; in liquidio_get_stats64()
2114 lstats->tx_fifo_errors = oct->link_stats.fromhost.fifo_err; in liquidio_get_stats64()
2204 static void handle_timestamp(struct octeon_device *oct, in handle_timestamp() argument
2217 oct = lio->oct_dev; in handle_timestamp()
2221 dev_err(&oct->pci_dev->dev, "Tx timestamp instruction failed. Status: %llx\n", in handle_timestamp()
2239 octeon_free_soft_command(oct, sc); in handle_timestamp()
2250 static inline int send_nic_timestamp_pkt(struct octeon_device *oct, in send_nic_timestamp_pkt() argument
2263 sc = octeon_alloc_soft_command_resp(oct, &ndata->cmd, in send_nic_timestamp_pkt()
2268 dev_err(&oct->pci_dev->dev, "No memory for timestamped data packet\n"); in send_nic_timestamp_pkt()
2281 if (OCTEON_CN23XX_PF(oct)) in send_nic_timestamp_pkt()
2290 retval = octeon_send_command(oct, sc->iq_no, ring_doorbell, &sc->cmd, in send_nic_timestamp_pkt()
2294 dev_err(&oct->pci_dev->dev, "timestamp data packet failed status: %x\n", in send_nic_timestamp_pkt()
2296 octeon_free_soft_command(oct, sc); in send_nic_timestamp_pkt()
2318 struct octeon_device *oct; in liquidio_xmit() local
2329 oct = lio->oct_dev; in liquidio_xmit()
2331 q_idx = skb_iq(oct, skb); in liquidio_xmit()
2335 stats = &oct->instr_queue[iq_no]->stats; in liquidio_xmit()
2364 if (octnet_iq_is_full(oct, ndata.q_no)) { in liquidio_xmit()
2396 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2399 dptr = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2403 if (dma_mapping_error(&oct->pci_dev->dev, dptr)) { in liquidio_xmit()
2404 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n", in liquidio_xmit()
2410 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2435 octnet_prepare_pci_cmd(oct, &ndata.cmd, &cmdsetup, tag); in liquidio_xmit()
2439 g->sg[0].ptr[0] = dma_map_single(&oct->pci_dev->dev, in liquidio_xmit()
2443 if (dma_mapping_error(&oct->pci_dev->dev, g->sg[0].ptr[0])) { in liquidio_xmit()
2444 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 2\n", in liquidio_xmit()
2457 skb_frag_dma_map(&oct->pci_dev->dev, in liquidio_xmit()
2461 if (dma_mapping_error(&oct->pci_dev->dev, in liquidio_xmit()
2463 dma_unmap_single(&oct->pci_dev->dev, in liquidio_xmit()
2469 dma_unmap_page(&oct->pci_dev->dev, in liquidio_xmit()
2474 dev_err(&oct->pci_dev->dev, "%s DMA mapping error 3\n", in liquidio_xmit()
2486 if (OCTEON_CN23XX_PF(oct)) in liquidio_xmit()
2496 if (OCTEON_CN23XX_PF(oct)) { in liquidio_xmit()
2519 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); in liquidio_xmit()
2521 status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more); in liquidio_xmit()
2545 dma_unmap_single(&oct->pci_dev->dev, dptr, in liquidio_xmit()
2548 octeon_ring_doorbell_locked(oct, iq_no); in liquidio_xmit()
2577 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_add_vid() local
2592 dev_err(&oct->pci_dev->dev, "Add VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_add_vid()
2606 struct octeon_device *oct = lio->oct_dev; in liquidio_vlan_rx_kill_vid() local
2621 dev_err(&oct->pci_dev->dev, "Del VLAN filter failed in core (ret: 0x%x)\n", in liquidio_vlan_rx_kill_vid()
2640 struct octeon_device *oct = lio->oct_dev; in liquidio_set_rxcsum_command() local
2655 dev_err(&oct->pci_dev->dev, in liquidio_set_rxcsum_command()
2677 struct octeon_device *oct = lio->oct_dev; in liquidio_vxlan_port_command() local
2693 dev_err(&oct->pci_dev->dev, in liquidio_vxlan_port_command()
2825 struct octeon_device *oct = lio->oct_dev; in __liquidio_set_vf_mac() local
2832 if (vfidx < 0 || vfidx >= oct->sriov_info.max_vfs) in __liquidio_set_vf_mac()
2853 oct->sriov_info.vf_macaddr[vfidx] = nctrl.udd[0]; in __liquidio_set_vf_mac()
2855 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in __liquidio_set_vf_mac()
2865 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_mac() local
2868 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_mac()
2873 cn23xx_tell_vf_its_macaddr_changed(oct, vfidx, mac); in liquidio_set_vf_mac()
2882 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_spoofchk() local
2886 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SPOOFCHK_CAP)) { in liquidio_set_vf_spoofchk()
2892 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_spoofchk()
2898 if (oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2902 if (!oct->sriov_info.vf_spoofchk[vfidx]) in liquidio_set_vf_spoofchk()
2918 retval = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_spoofchk()
2927 oct->sriov_info.vf_spoofchk[vfidx] = enable; in liquidio_set_vf_spoofchk()
2938 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_vlan() local
2943 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_vlan()
2957 if (oct->sriov_info.vf_vlantci[vfidx] == vlantci) in liquidio_set_vf_vlan()
2974 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_vlan()
2981 oct->sriov_info.vf_vlantci[vfidx] = vlantci; in liquidio_set_vf_vlan()
2990 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_config() local
2993 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_config()
2999 macaddr = 2 + (u8 *)&oct->sriov_info.vf_macaddr[vfidx]; in liquidio_get_vf_config()
3001 ivi->vlan = oct->sriov_info.vf_vlantci[vfidx] & VLAN_VID_MASK; in liquidio_get_vf_config()
3002 ivi->qos = oct->sriov_info.vf_vlantci[vfidx] >> VLAN_PRIO_SHIFT; in liquidio_get_vf_config()
3003 if (oct->sriov_info.trusted_vf.active && in liquidio_get_vf_config()
3004 oct->sriov_info.trusted_vf.id == vfidx) in liquidio_get_vf_config()
3008 ivi->linkstate = oct->sriov_info.vf_linkstate[vfidx]; in liquidio_get_vf_config()
3009 ivi->spoofchk = oct->sriov_info.vf_spoofchk[vfidx]; in liquidio_get_vf_config()
3018 struct octeon_device *oct = lio->oct_dev; in liquidio_send_vf_trust_cmd() local
3022 sc = octeon_alloc_soft_command(oct, 0, 16, 0); in liquidio_send_vf_trust_cmd()
3029 octeon_prepare_soft_command(oct, sc, OPCODE_NIC, in liquidio_send_vf_trust_cmd()
3036 retval = octeon_send_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3038 octeon_free_soft_command(oct, sc); in liquidio_send_vf_trust_cmd()
3042 retval = wait_for_sc_completion_timeout(oct, sc, 0); in liquidio_send_vf_trust_cmd()
3056 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_trust() local
3058 if (strcmp(oct->fw_info.liquidio_firmware_version, "1.7.1") < 0) { in liquidio_set_vf_trust()
3063 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { in liquidio_set_vf_trust()
3071 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()
3075 if (oct->sriov_info.trusted_vf.active) { in liquidio_set_vf_trust()
3082 if (!oct->sriov_info.trusted_vf.active) in liquidio_set_vf_trust()
3088 oct->sriov_info.trusted_vf.id = vfidx; in liquidio_set_vf_trust()
3089 oct->sriov_info.trusted_vf.active = true; in liquidio_set_vf_trust()
3091 oct->sriov_info.trusted_vf.active = false; in liquidio_set_vf_trust()
3108 struct octeon_device *oct = lio->oct_dev; in liquidio_set_vf_link_state() local
3112 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_set_vf_link_state()
3115 if (oct->sriov_info.vf_linkstate[vfidx] == linkstate) in liquidio_set_vf_link_state()
3127 ret = octnet_send_nic_ctrl_pkt(oct, &nctrl); in liquidio_set_vf_link_state()
3130 oct->sriov_info.vf_linkstate[vfidx] = linkstate; in liquidio_set_vf_link_state()
3141 struct octeon_device *oct; in liquidio_eswitch_mode_get() local
3144 oct = priv->oct; in liquidio_eswitch_mode_get()
3146 *mode = oct->eswitch_mode; in liquidio_eswitch_mode_get()
3156 struct octeon_device *oct; in liquidio_eswitch_mode_set() local
3160 oct = priv->oct; in liquidio_eswitch_mode_set()
3162 if (!(oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP)) in liquidio_eswitch_mode_set()
3165 if (oct->eswitch_mode == mode) in liquidio_eswitch_mode_set()
3170 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3171 ret = lio_vf_rep_create(oct); in liquidio_eswitch_mode_set()
3175 lio_vf_rep_destroy(oct); in liquidio_eswitch_mode_set()
3176 oct->eswitch_mode = mode; in liquidio_eswitch_mode_set()
3196 struct octeon_device *oct = lio->oct_dev; in liquidio_get_port_parent_id() local
3198 if (oct->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV) in liquidio_get_port_parent_id()
3211 struct octeon_device *oct = lio->oct_dev; in liquidio_get_vf_stats() local
3215 if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) in liquidio_get_vf_stats()
3219 ret = cn23xx_get_vf_stats(oct, vfidx, &stats); in liquidio_get_vf_stats()
3308 struct octeon_device *oct = (struct octeon_device *)buf; in lio_nic_info() local
3315 dev_err(&oct->pci_dev->dev, "Malformed NIC_INFO, len=%d, ifidx=%d\n", in lio_nic_info()
3326 for (i = 0; i < oct->ifcount; i++) { in lio_nic_info()
3327 if (oct->props[i].gmxport == gmxport) { in lio_nic_info()
3328 update_link_status(oct->props[i].netdev, ls); in lio_nic_info()
3779 lio_devlink->oct = octeon_dev; in setup_nic_devices()
3807 static int octeon_enable_sriov(struct octeon_device *oct) in octeon_enable_sriov() argument
3809 unsigned int num_vfs_alloced = oct->sriov_info.num_vfs_alloced; in octeon_enable_sriov()
3814 if (OCTEON_CN23XX_PF(oct) && num_vfs_alloced) { in octeon_enable_sriov()
3815 err = pci_enable_sriov(oct->pci_dev, in octeon_enable_sriov()
3816 oct->sriov_info.num_vfs_alloced); in octeon_enable_sriov()
3818 dev_err(&oct->pci_dev->dev, in octeon_enable_sriov()
3821 oct->sriov_info.num_vfs_alloced = 0; in octeon_enable_sriov()
3824 oct->sriov_info.sriov_enabled = 1; in octeon_enable_sriov()
3834 (vfdev->physfn == oct->pci_dev)) { in octeon_enable_sriov()
3835 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = in octeon_enable_sriov()
3837 u += oct->sriov_info.rings_per_vf; in octeon_enable_sriov()
3847 static int lio_pci_sriov_disable(struct octeon_device *oct) in lio_pci_sriov_disable() argument
3851 if (pci_vfs_assigned(oct->pci_dev)) { in lio_pci_sriov_disable()
3852 dev_err(&oct->pci_dev->dev, "VFs are still assigned to VMs.\n"); in lio_pci_sriov_disable()
3856 pci_disable_sriov(oct->pci_dev); in lio_pci_sriov_disable()
3860 oct->sriov_info.dpiring_to_vfpcidev_lut[u] = NULL; in lio_pci_sriov_disable()
3861 u += oct->sriov_info.rings_per_vf; in lio_pci_sriov_disable()
3864 oct->sriov_info.num_vfs_alloced = 0; in lio_pci_sriov_disable()
3865 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d disabled VFs\n", in lio_pci_sriov_disable()
3866 oct->pf_num); in lio_pci_sriov_disable()
3873 struct octeon_device *oct = pci_get_drvdata(dev); in liquidio_enable_sriov() local
3876 if ((num_vfs == oct->sriov_info.num_vfs_alloced) && in liquidio_enable_sriov()
3877 (oct->sriov_info.sriov_enabled)) { in liquidio_enable_sriov()
3878 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d already enabled num_vfs:%d\n", in liquidio_enable_sriov()
3879 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3884 lio_vf_rep_destroy(oct); in liquidio_enable_sriov()
3885 ret = lio_pci_sriov_disable(oct); in liquidio_enable_sriov()
3886 } else if (num_vfs > oct->sriov_info.max_vfs) { in liquidio_enable_sriov()
3887 dev_err(&oct->pci_dev->dev, in liquidio_enable_sriov()
3889 oct->sriov_info.max_vfs, num_vfs); in liquidio_enable_sriov()
3892 oct->sriov_info.num_vfs_alloced = num_vfs; in liquidio_enable_sriov()
3893 ret = octeon_enable_sriov(oct); in liquidio_enable_sriov()
3894 dev_info(&oct->pci_dev->dev, "oct->pf_num:%d num_vfs:%d\n", in liquidio_enable_sriov()
3895 oct->pf_num, num_vfs); in liquidio_enable_sriov()
3896 ret = lio_vf_rep_create(oct); in liquidio_enable_sriov()
3898 dev_info(&oct->pci_dev->dev, in liquidio_enable_sriov()
3913 static int liquidio_init_nic_module(struct octeon_device *oct) in liquidio_init_nic_module() argument
3916 int num_nic_ports = CFG_GET_NUM_NIC_PORTS(octeon_get_conf(oct)); in liquidio_init_nic_module()
3918 dev_dbg(&oct->pci_dev->dev, "Initializing network interfaces\n"); in liquidio_init_nic_module()
3924 oct->ifcount = num_nic_ports; in liquidio_init_nic_module()
3926 memset(oct->props, 0, sizeof(struct octdev_props) * num_nic_ports); in liquidio_init_nic_module()
3929 oct->props[i].gmxport = -1; in liquidio_init_nic_module()
3931 retval = setup_nic_devices(oct); in liquidio_init_nic_module()
3933 dev_err(&oct->pci_dev->dev, "Setup NIC devices failed\n"); in liquidio_init_nic_module()
3940 if (!oct->octeon_id && in liquidio_init_nic_module()
3941 oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP) { in liquidio_init_nic_module()
3944 liquidio_stop_nic_module(oct); in liquidio_init_nic_module()
3949 liquidio_ptp_init(oct); in liquidio_init_nic_module()
3951 dev_dbg(&oct->pci_dev->dev, "Network interfaces ready\n"); in liquidio_init_nic_module()
3957 oct->ifcount = 0; in liquidio_init_nic_module()
3970 struct octeon_device *oct; in nic_starter() local
3973 oct = (struct octeon_device *)wk->ctxptr; in nic_starter()
3975 if (atomic_read(&oct->status) == OCT_DEV_RUNNING) in nic_starter()
3983 if (atomic_read(&oct->status) != OCT_DEV_CORE_OK) { in nic_starter()
3984 schedule_delayed_work(&oct->nic_poll_work.work, in nic_starter()
3989 atomic_set(&oct->status, OCT_DEV_RUNNING); in nic_starter()
3991 if (oct->app_mode && oct->app_mode == CVM_DRV_NIC_APP) { in nic_starter()
3992 dev_dbg(&oct->pci_dev->dev, "Starting NIC module\n"); in nic_starter()
3994 if (liquidio_init_nic_module(oct)) in nic_starter()
3995 dev_err(&oct->pci_dev->dev, "NIC initialization failed\n"); in nic_starter()
3997 handshake[oct->octeon_id].started_ok = 1; in nic_starter()
3999 dev_err(&oct->pci_dev->dev, in nic_starter()
4001 oct->app_mode); in nic_starter()
4004 complete(&handshake[oct->octeon_id].started); in nic_starter()
4010 struct octeon_device *oct = (struct octeon_device *)buf; in octeon_recv_vf_drv_notice() local
4024 cores_crashed = READ_ONCE(oct->cores_crashed); in octeon_recv_vf_drv_notice()
4027 if (!(oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx))) { in octeon_recv_vf_drv_notice()
4028 oct->sriov_info.vf_drv_loaded_mask |= BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4029 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4035 if (oct->sriov_info.vf_drv_loaded_mask & BIT_ULL(vf_idx)) { in octeon_recv_vf_drv_notice()
4036 oct->sriov_info.vf_drv_loaded_mask &= ~BIT_ULL(vf_idx); in octeon_recv_vf_drv_notice()
4037 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4045 oct->sriov_info.vf_macaddr[vf_idx] = data[1]; in octeon_recv_vf_drv_notice()
4046 dev_info(&oct->pci_dev->dev, in octeon_recv_vf_drv_notice()
4351 static int octeon_dbg_console_print(struct octeon_device *oct, u32 console_num, in octeon_dbg_console_print() argument
4355 dev_info(&oct->pci_dev->dev, "%u: %s%s\n", console_num, prefix, in octeon_dbg_console_print()
4358 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, prefix); in octeon_dbg_console_print()
4360 dev_info(&oct->pci_dev->dev, "%u: %s\n", console_num, suffix); in octeon_dbg_console_print()