• Home
  • Raw
  • Download

Lines Matching refs:efx

87 static inline void efx_write_buf_tbl(struct efx_nic *efx, efx_qword_t *value,  in efx_write_buf_tbl()  argument
90 efx_sram_writeq(efx, efx->membase + efx->type->buf_tbl_base, in efx_write_buf_tbl()
101 int efx_farch_test_registers(struct efx_nic *efx, in efx_farch_test_registers() argument
114 efx_reado(efx, &original, address); in efx_farch_test_registers()
125 efx_writeo(efx, &reg, address); in efx_farch_test_registers()
126 efx_reado(efx, &buf, address); in efx_farch_test_registers()
135 efx_writeo(efx, &reg, address); in efx_farch_test_registers()
136 efx_reado(efx, &buf, address); in efx_farch_test_registers()
142 efx_writeo(efx, &original, address); in efx_farch_test_registers()
148 netif_err(efx, hw, efx->net_dev, in efx_farch_test_registers()
171 efx_init_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) in efx_init_special_buffer() argument
184 netif_dbg(efx, probe, efx->net_dev, in efx_init_special_buffer()
191 efx_write_buf_tbl(efx, &buf_desc, index); in efx_init_special_buffer()
197 efx_fini_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) in efx_fini_special_buffer() argument
206 netif_dbg(efx, hw, efx->net_dev, "unmapping special buffers %d-%d\n", in efx_fini_special_buffer()
214 efx_writeo(efx, &buf_tbl_upd, FR_AZ_BUF_TBL_UPD); in efx_fini_special_buffer()
226 static int efx_alloc_special_buffer(struct efx_nic *efx, in efx_alloc_special_buffer() argument
231 struct siena_nic_data *nic_data = efx->nic_data; in efx_alloc_special_buffer()
235 if (efx_nic_alloc_buffer(efx, &buffer->buf, len, GFP_KERNEL)) in efx_alloc_special_buffer()
241 buffer->index = efx->next_buffer_table; in efx_alloc_special_buffer()
242 efx->next_buffer_table += buffer->entries; in efx_alloc_special_buffer()
244 BUG_ON(efx_siena_sriov_enabled(efx) && in efx_alloc_special_buffer()
245 nic_data->vf_buftbl_base < efx->next_buffer_table); in efx_alloc_special_buffer()
248 netif_dbg(efx, probe, efx->net_dev, in efx_alloc_special_buffer()
259 efx_free_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) in efx_free_special_buffer() argument
264 netif_dbg(efx, hw, efx->net_dev, in efx_free_special_buffer()
271 efx_nic_free_buffer(efx, &buffer->buf); in efx_free_special_buffer()
289 efx_writed_page(tx_queue->efx, &reg, in efx_farch_notify_tx_desc()
307 efx_writeo_page(tx_queue->efx, &reg, in efx_farch_push_tx_desc()
372 struct efx_nic *efx = tx_queue->efx; in efx_farch_tx_probe() local
378 return efx_alloc_special_buffer(efx, &tx_queue->txd, in efx_farch_tx_probe()
385 struct efx_nic *efx = tx_queue->efx; in efx_farch_tx_init() local
389 efx_init_special_buffer(efx, &tx_queue->txd); in efx_farch_tx_init()
409 efx_writeo_table(efx, &reg, efx->type->txd_ptr_tbl_base, in efx_farch_tx_init()
417 efx_writeo_table(efx, &reg, FR_BZ_TX_PACE_TBL, tx_queue->queue); in efx_farch_tx_init()
424 struct efx_nic *efx = tx_queue->efx; in efx_farch_flush_tx_queue() local
433 efx_writeo(efx, &tx_flush_descq, FR_AZ_TX_FLUSH_DESCQ); in efx_farch_flush_tx_queue()
438 struct efx_nic *efx = tx_queue->efx; in efx_farch_tx_fini() local
443 efx_writeo_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, in efx_farch_tx_fini()
447 efx_fini_special_buffer(efx, &tx_queue->txd); in efx_farch_tx_fini()
453 efx_free_special_buffer(tx_queue->efx, &tx_queue->txd); in efx_farch_tx_remove()
474 rx_queue->efx->type->rx_buffer_padding, in efx_farch_build_rx_desc()
484 struct efx_nic *efx = rx_queue->efx; in efx_farch_rx_write() local
498 efx_writed_page(efx, &reg, FR_AZ_RX_DESC_UPD_DWORD_P0, in efx_farch_rx_write()
504 struct efx_nic *efx = rx_queue->efx; in efx_farch_rx_probe() local
508 return efx_alloc_special_buffer(efx, &rx_queue->rxd, in efx_farch_rx_probe()
515 struct efx_nic *efx = rx_queue->efx; in efx_farch_rx_init() local
519 jumbo_en = efx->rx_scatter; in efx_farch_rx_init()
521 netif_dbg(efx, hw, efx->net_dev, in efx_farch_rx_init()
529 efx_init_special_buffer(efx, &rx_queue->rxd); in efx_farch_rx_init()
546 efx_writeo_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, in efx_farch_rx_init()
552 struct efx_nic *efx = rx_queue->efx; in efx_farch_flush_rx_queue() local
559 efx_writeo(efx, &rx_flush_descq, FR_AZ_RX_FLUSH_DESCQ); in efx_farch_flush_rx_queue()
565 struct efx_nic *efx = rx_queue->efx; in efx_farch_rx_fini() local
569 efx_writeo_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, in efx_farch_rx_fini()
573 efx_fini_special_buffer(efx, &rx_queue->rxd); in efx_farch_rx_fini()
579 efx_free_special_buffer(rx_queue->efx, &rx_queue->rxd); in efx_farch_rx_remove()
591 static bool efx_farch_flush_wake(struct efx_nic *efx) in efx_farch_flush_wake() argument
596 return (atomic_read(&efx->active_queues) == 0 || in efx_farch_flush_wake()
597 (atomic_read(&efx->rxq_flush_outstanding) < EFX_RX_FLUSH_COUNT in efx_farch_flush_wake()
598 && atomic_read(&efx->rxq_flush_pending) > 0)); in efx_farch_flush_wake()
601 static bool efx_check_tx_flush_complete(struct efx_nic *efx) in efx_check_tx_flush_complete() argument
608 efx_for_each_channel(channel, efx) { in efx_check_tx_flush_complete()
610 efx_reado_table(efx, &txd_ptr_tbl, in efx_check_tx_flush_complete()
616 netif_dbg(efx, hw, efx->net_dev, in efx_check_tx_flush_complete()
625 netif_dbg(efx, hw, efx->net_dev, in efx_check_tx_flush_complete()
645 static int efx_farch_do_flush(struct efx_nic *efx) in efx_farch_do_flush() argument
653 efx_for_each_channel(channel, efx) { in efx_farch_do_flush()
659 atomic_inc(&efx->rxq_flush_pending); in efx_farch_do_flush()
663 while (timeout && atomic_read(&efx->active_queues) > 0) { in efx_farch_do_flush()
668 if (efx_siena_sriov_enabled(efx)) { in efx_farch_do_flush()
669 rc = efx_mcdi_flush_rxqs(efx); in efx_farch_do_flush()
678 efx_for_each_channel(channel, efx) { in efx_farch_do_flush()
680 if (atomic_read(&efx->rxq_flush_outstanding) >= in efx_farch_do_flush()
686 atomic_dec(&efx->rxq_flush_pending); in efx_farch_do_flush()
687 atomic_inc(&efx->rxq_flush_outstanding); in efx_farch_do_flush()
694 timeout = wait_event_timeout(efx->flush_wq, in efx_farch_do_flush()
695 efx_farch_flush_wake(efx), in efx_farch_do_flush()
699 if (atomic_read(&efx->active_queues) && in efx_farch_do_flush()
700 !efx_check_tx_flush_complete(efx)) { in efx_farch_do_flush()
701 netif_err(efx, hw, efx->net_dev, "failed to flush %d queues " in efx_farch_do_flush()
702 "(rx %d+%d)\n", atomic_read(&efx->active_queues), in efx_farch_do_flush()
703 atomic_read(&efx->rxq_flush_outstanding), in efx_farch_do_flush()
704 atomic_read(&efx->rxq_flush_pending)); in efx_farch_do_flush()
707 atomic_set(&efx->active_queues, 0); in efx_farch_do_flush()
708 atomic_set(&efx->rxq_flush_pending, 0); in efx_farch_do_flush()
709 atomic_set(&efx->rxq_flush_outstanding, 0); in efx_farch_do_flush()
715 int efx_farch_fini_dmaq(struct efx_nic *efx) in efx_farch_fini_dmaq() argument
723 if (efx->state != STATE_RECOVERY) { in efx_farch_fini_dmaq()
725 if (efx->pci_dev->is_busmaster) { in efx_farch_fini_dmaq()
726 efx->type->prepare_flush(efx); in efx_farch_fini_dmaq()
727 rc = efx_farch_do_flush(efx); in efx_farch_fini_dmaq()
728 efx->type->finish_flush(efx); in efx_farch_fini_dmaq()
731 efx_for_each_channel(channel, efx) { in efx_farch_fini_dmaq()
756 void efx_farch_finish_flr(struct efx_nic *efx) in efx_farch_finish_flr() argument
758 atomic_set(&efx->rxq_flush_pending, 0); in efx_farch_finish_flr()
759 atomic_set(&efx->rxq_flush_outstanding, 0); in efx_farch_finish_flr()
760 atomic_set(&efx->active_queues, 0); in efx_farch_finish_flr()
779 struct efx_nic *efx = channel->efx; in efx_farch_ev_read_ack() local
787 efx_writed(efx, &reg, in efx_farch_ev_read_ack()
788 efx->type->evq_rptr_tbl_base + in efx_farch_ev_read_ack()
793 void efx_farch_generate_event(struct efx_nic *efx, unsigned int evq, in efx_farch_generate_event() argument
805 efx_writeo(efx, &drv_ev_reg, FR_AZ_DRV_EV); in efx_farch_generate_event()
815 efx_farch_generate_event(channel->efx, channel->channel, &event); in efx_farch_magic_event()
829 struct efx_nic *efx = channel->efx; in efx_farch_handle_tx_event() local
831 if (unlikely(READ_ONCE(efx->reset_pending))) in efx_farch_handle_tx_event()
847 netif_tx_lock(efx->net_dev); in efx_farch_handle_tx_event()
849 netif_tx_unlock(efx->net_dev); in efx_farch_handle_tx_event()
851 efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); in efx_farch_handle_tx_event()
853 netif_err(efx, tx_err, efx->net_dev, in efx_farch_handle_tx_event()
865 struct efx_nic *efx = rx_queue->efx; in efx_farch_handle_rx_not_ok() local
893 else if (!efx->loopback_selftest) { in efx_farch_handle_rx_not_ok()
906 netif_dbg(efx, rx_err, efx->net_dev, in efx_farch_handle_rx_not_ok()
924 if (efx->net_dev->features & NETIF_F_RXALL) in efx_farch_handle_rx_not_ok()
942 struct efx_nic *efx = rx_queue->efx; in efx_farch_handle_rx_bad_index() local
954 netif_info(efx, rx_err, efx->net_dev, in efx_farch_handle_rx_bad_index()
958 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_farch_handle_rx_bad_index()
978 struct efx_nic *efx = channel->efx; in efx_farch_handle_rx_event() local
980 if (unlikely(READ_ONCE(efx->reset_pending))) in efx_farch_handle_rx_event()
1081 efx_farch_handle_tx_flush_done(struct efx_nic *efx, efx_qword_t *event) in efx_farch_handle_tx_flush_done() argument
1088 if (qid < EFX_MAX_TXQ_PER_CHANNEL * (efx->n_tx_channels + efx->n_extra_tx_channels)) { in efx_farch_handle_tx_flush_done()
1089 channel = efx_get_tx_channel(efx, qid / EFX_MAX_TXQ_PER_CHANNEL); in efx_farch_handle_tx_flush_done()
1102 efx_farch_handle_rx_flush_done(struct efx_nic *efx, efx_qword_t *event) in efx_farch_handle_rx_flush_done() argument
1111 if (qid >= efx->n_channels) in efx_farch_handle_rx_flush_done()
1113 channel = efx_get_channel(efx, qid); in efx_farch_handle_rx_flush_done()
1119 netif_info(efx, hw, efx->net_dev, in efx_farch_handle_rx_flush_done()
1122 atomic_inc(&efx->rxq_flush_pending); in efx_farch_handle_rx_flush_done()
1127 atomic_dec(&efx->rxq_flush_outstanding); in efx_farch_handle_rx_flush_done()
1128 if (efx_farch_flush_wake(efx)) in efx_farch_handle_rx_flush_done()
1129 wake_up(&efx->flush_wq); in efx_farch_handle_rx_flush_done()
1135 struct efx_nic *efx = channel->efx; in efx_farch_handle_drain_event() local
1137 WARN_ON(atomic_read(&efx->active_queues) == 0); in efx_farch_handle_drain_event()
1138 atomic_dec(&efx->active_queues); in efx_farch_handle_drain_event()
1139 if (efx_farch_flush_wake(efx)) in efx_farch_handle_drain_event()
1140 wake_up(&efx->flush_wq); in efx_farch_handle_drain_event()
1146 struct efx_nic *efx = channel->efx; in efx_farch_handle_generated_event() local
1167 netif_dbg(efx, hw, efx->net_dev, "channel %d received " in efx_farch_handle_generated_event()
1176 struct efx_nic *efx = channel->efx; in efx_farch_handle_driver_event() local
1185 netif_vdbg(efx, hw, efx->net_dev, "channel %d TXQ %d flushed\n", in efx_farch_handle_driver_event()
1187 efx_farch_handle_tx_flush_done(efx, event); in efx_farch_handle_driver_event()
1189 efx_siena_sriov_tx_flush_done(efx, event); in efx_farch_handle_driver_event()
1193 netif_vdbg(efx, hw, efx->net_dev, "channel %d RXQ %d flushed\n", in efx_farch_handle_driver_event()
1195 efx_farch_handle_rx_flush_done(efx, event); in efx_farch_handle_driver_event()
1197 efx_siena_sriov_rx_flush_done(efx, event); in efx_farch_handle_driver_event()
1201 netif_dbg(efx, hw, efx->net_dev, in efx_farch_handle_driver_event()
1206 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_handle_driver_event()
1210 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_handle_driver_event()
1215 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_handle_driver_event()
1220 netif_err(efx, rx_err, efx->net_dev, in efx_farch_handle_driver_event()
1223 atomic_inc(&efx->rx_reset); in efx_farch_handle_driver_event()
1224 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_farch_handle_driver_event()
1228 netif_err(efx, rx_err, efx->net_dev, in efx_farch_handle_driver_event()
1232 efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); in efx_farch_handle_driver_event()
1236 efx_siena_sriov_desc_fetch_err(efx, ev_sub_data); in efx_farch_handle_driver_event()
1241 netif_err(efx, tx_err, efx->net_dev, in efx_farch_handle_driver_event()
1245 efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); in efx_farch_handle_driver_event()
1249 efx_siena_sriov_desc_fetch_err(efx, ev_sub_data); in efx_farch_handle_driver_event()
1253 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_handle_driver_event()
1263 struct efx_nic *efx = channel->efx; in efx_farch_ev_process() local
1282 netif_vdbg(channel->efx, intr, channel->efx->net_dev, in efx_farch_ev_process()
1317 if (efx->type->handle_global_event && in efx_farch_ev_process()
1318 efx->type->handle_global_event(channel, &event)) in efx_farch_ev_process()
1322 netif_err(channel->efx, hw, channel->efx->net_dev, in efx_farch_ev_process()
1337 struct efx_nic *efx = channel->efx; in efx_farch_ev_probe() local
1341 return efx_alloc_special_buffer(efx, &channel->eventq, in efx_farch_ev_probe()
1348 struct efx_nic *efx = channel->efx; in efx_farch_ev_init() local
1350 netif_dbg(efx, hw, efx->net_dev, in efx_farch_ev_init()
1359 efx_writeo_table(efx, &reg, FR_BZ_TIMER_TBL, channel->channel); in efx_farch_ev_init()
1362 efx_init_special_buffer(efx, &channel->eventq); in efx_farch_ev_init()
1372 efx_writeo_table(efx, &reg, efx->type->evq_ptr_tbl_base, in efx_farch_ev_init()
1381 struct efx_nic *efx = channel->efx; in efx_farch_ev_fini() local
1385 efx_writeo_table(efx, &reg, efx->type->evq_ptr_tbl_base, in efx_farch_ev_fini()
1387 efx_writeo_table(efx, &reg, FR_BZ_TIMER_TBL, channel->channel); in efx_farch_ev_fini()
1390 efx_fini_special_buffer(efx, &channel->eventq); in efx_farch_ev_fini()
1396 efx_free_special_buffer(channel->efx, &channel->eventq); in efx_farch_ev_remove()
1420 static inline void efx_farch_interrupts(struct efx_nic *efx, in efx_farch_interrupts() argument
1426 FRF_AZ_KER_INT_LEVE_SEL, efx->irq_level, in efx_farch_interrupts()
1429 efx_writeo(efx, &int_en_reg_ker, FR_AZ_INT_EN_KER); in efx_farch_interrupts()
1432 void efx_farch_irq_enable_master(struct efx_nic *efx) in efx_farch_irq_enable_master() argument
1434 EFX_ZERO_OWORD(*((efx_oword_t *) efx->irq_status.addr)); in efx_farch_irq_enable_master()
1437 efx_farch_interrupts(efx, true, false); in efx_farch_irq_enable_master()
1440 void efx_farch_irq_disable_master(struct efx_nic *efx) in efx_farch_irq_disable_master() argument
1443 efx_farch_interrupts(efx, false, false); in efx_farch_irq_disable_master()
1450 int efx_farch_irq_test_generate(struct efx_nic *efx) in efx_farch_irq_test_generate() argument
1452 efx_farch_interrupts(efx, true, true); in efx_farch_irq_test_generate()
1459 irqreturn_t efx_farch_fatal_interrupt(struct efx_nic *efx) in efx_farch_fatal_interrupt() argument
1461 efx_oword_t *int_ker = efx->irq_status.addr; in efx_farch_fatal_interrupt()
1465 efx_reado(efx, &fatal_intr, FR_AZ_FATAL_INTR_KER); in efx_farch_fatal_interrupt()
1468 netif_err(efx, hw, efx->net_dev, "SYSTEM ERROR "EFX_OWORD_FMT" status " in efx_farch_fatal_interrupt()
1478 efx_reado(efx, &reg, FR_AZ_MEM_STAT); in efx_farch_fatal_interrupt()
1479 netif_err(efx, hw, efx->net_dev, in efx_farch_fatal_interrupt()
1485 pci_clear_master(efx->pci_dev); in efx_farch_fatal_interrupt()
1486 efx_farch_irq_disable_master(efx); in efx_farch_fatal_interrupt()
1489 if (efx->int_error_count == 0 || in efx_farch_fatal_interrupt()
1490 time_after(jiffies, efx->int_error_expire)) { in efx_farch_fatal_interrupt()
1491 efx->int_error_count = 0; in efx_farch_fatal_interrupt()
1492 efx->int_error_expire = in efx_farch_fatal_interrupt()
1495 if (++efx->int_error_count < EFX_MAX_INT_ERRORS) { in efx_farch_fatal_interrupt()
1496 netif_err(efx, hw, efx->net_dev, in efx_farch_fatal_interrupt()
1498 efx_schedule_reset(efx, RESET_TYPE_INT_ERROR); in efx_farch_fatal_interrupt()
1500 netif_err(efx, hw, efx->net_dev, in efx_farch_fatal_interrupt()
1503 efx_schedule_reset(efx, RESET_TYPE_DISABLE); in efx_farch_fatal_interrupt()
1514 struct efx_nic *efx = dev_id; in efx_farch_legacy_interrupt() local
1515 bool soft_enabled = READ_ONCE(efx->irq_soft_enabled); in efx_farch_legacy_interrupt()
1516 efx_oword_t *int_ker = efx->irq_status.addr; in efx_farch_legacy_interrupt()
1524 efx_readd(efx, &reg, FR_BZ_INT_ISR0); in efx_farch_legacy_interrupt()
1531 if (EFX_DWORD_IS_ALL_ONES(reg) && efx_try_recovery(efx) && in efx_farch_legacy_interrupt()
1532 !efx->eeh_disabled_legacy_irq) { in efx_farch_legacy_interrupt()
1533 disable_irq_nosync(efx->legacy_irq); in efx_farch_legacy_interrupt()
1534 efx->eeh_disabled_legacy_irq = true; in efx_farch_legacy_interrupt()
1538 if (queues & (1U << efx->irq_level) && soft_enabled) { in efx_farch_legacy_interrupt()
1541 return efx_farch_fatal_interrupt(efx); in efx_farch_legacy_interrupt()
1542 efx->last_irq_cpu = raw_smp_processor_id(); in efx_farch_legacy_interrupt()
1546 efx->irq_zero_count = 0; in efx_farch_legacy_interrupt()
1550 efx_for_each_channel(channel, efx) { in efx_farch_legacy_interrupt()
1565 if (efx->irq_zero_count++ == 0) in efx_farch_legacy_interrupt()
1570 efx_for_each_channel(channel, efx) { in efx_farch_legacy_interrupt()
1582 netif_vdbg(efx, intr, efx->net_dev, in efx_farch_legacy_interrupt()
1599 struct efx_nic *efx = context->efx; in efx_farch_msi_interrupt() local
1600 efx_oword_t *int_ker = efx->irq_status.addr; in efx_farch_msi_interrupt()
1603 netif_vdbg(efx, intr, efx->net_dev, in efx_farch_msi_interrupt()
1607 if (!likely(READ_ONCE(efx->irq_soft_enabled))) in efx_farch_msi_interrupt()
1611 if (context->index == efx->irq_level) { in efx_farch_msi_interrupt()
1614 return efx_farch_fatal_interrupt(efx); in efx_farch_msi_interrupt()
1615 efx->last_irq_cpu = raw_smp_processor_id(); in efx_farch_msi_interrupt()
1619 efx_schedule_channel_irq(efx->channel[context->index]); in efx_farch_msi_interrupt()
1627 void efx_farch_rx_push_indir_table(struct efx_nic *efx) in efx_farch_rx_push_indir_table() argument
1632 BUILD_BUG_ON(ARRAY_SIZE(efx->rss_context.rx_indir_table) != in efx_farch_rx_push_indir_table()
1637 efx->rss_context.rx_indir_table[i]); in efx_farch_rx_push_indir_table()
1638 efx_writed(efx, &dword, in efx_farch_rx_push_indir_table()
1644 void efx_farch_rx_pull_indir_table(struct efx_nic *efx) in efx_farch_rx_pull_indir_table() argument
1649 BUILD_BUG_ON(ARRAY_SIZE(efx->rss_context.rx_indir_table) != in efx_farch_rx_pull_indir_table()
1653 efx_readd(efx, &dword, in efx_farch_rx_pull_indir_table()
1656 efx->rss_context.rx_indir_table[i] = EFX_DWORD_FIELD(dword, FRF_BZ_IT_QUEUE); in efx_farch_rx_pull_indir_table()
1669 void efx_farch_dimension_resources(struct efx_nic *efx, unsigned sram_lim_qw) in efx_farch_dimension_resources() argument
1674 struct siena_nic_data *nic_data = efx->nic_data; in efx_farch_dimension_resources()
1677 total_tx_channels = efx->n_tx_channels + efx->n_extra_tx_channels; in efx_farch_dimension_resources()
1681 buftbl_min = ((efx->n_rx_channels * EFX_MAX_DMAQ_SIZE + in efx_farch_dimension_resources()
1683 efx->n_channels * EFX_MAX_EVQ_SIZE) in efx_farch_dimension_resources()
1685 vi_count = max(efx->n_channels, total_tx_channels * EFX_MAX_TXQ_PER_CHANNEL); in efx_farch_dimension_resources()
1688 if (efx->type->sriov_wanted) { in efx_farch_dimension_resources()
1689 if (efx->type->sriov_wanted(efx)) { in efx_farch_dimension_resources()
1702 efx_vf_size(efx)); in efx_farch_dimension_resources()
1704 (1024U - EFX_VI_BASE) >> efx->vi_scale); in efx_farch_dimension_resources()
1706 if (efx->vf_count > vf_limit) { in efx_farch_dimension_resources()
1707 netif_err(efx, probe, efx->net_dev, in efx_farch_dimension_resources()
1709 efx->vf_count, vf_limit); in efx_farch_dimension_resources()
1710 efx->vf_count = vf_limit; in efx_farch_dimension_resources()
1712 vi_count += efx->vf_count * efx_vf_size(efx); in efx_farch_dimension_resources()
1717 efx->tx_dc_base = sram_lim_qw - vi_count * TX_DC_ENTRIES; in efx_farch_dimension_resources()
1718 efx->rx_dc_base = efx->tx_dc_base - vi_count * RX_DC_ENTRIES; in efx_farch_dimension_resources()
1721 u32 efx_farch_fpga_ver(struct efx_nic *efx) in efx_farch_fpga_ver() argument
1724 efx_reado(efx, &altera_build, FR_AZ_ALTERA_BUILD); in efx_farch_fpga_ver()
1728 void efx_farch_init_common(struct efx_nic *efx) in efx_farch_init_common() argument
1733 EFX_POPULATE_OWORD_1(temp, FRF_AZ_SRM_TX_DC_BASE_ADR, efx->tx_dc_base); in efx_farch_init_common()
1734 efx_writeo(efx, &temp, FR_AZ_SRM_TX_DC_CFG); in efx_farch_init_common()
1735 EFX_POPULATE_OWORD_1(temp, FRF_AZ_SRM_RX_DC_BASE_ADR, efx->rx_dc_base); in efx_farch_init_common()
1736 efx_writeo(efx, &temp, FR_AZ_SRM_RX_DC_CFG); in efx_farch_init_common()
1741 efx_writeo(efx, &temp, FR_AZ_TX_DC_CFG); in efx_farch_init_common()
1748 efx_writeo(efx, &temp, FR_AZ_RX_DC_CFG); in efx_farch_init_common()
1750 efx_writeo(efx, &temp, FR_AZ_RX_DC_PF_WM); in efx_farch_init_common()
1755 EFX_INT_MODE_USE_MSI(efx), in efx_farch_init_common()
1756 FRF_AZ_INT_ADR_KER, efx->irq_status.dma_addr); in efx_farch_init_common()
1757 efx_writeo(efx, &temp, FR_AZ_INT_ADR_KER); in efx_farch_init_common()
1759 if (EFX_WORKAROUND_17213(efx) && !EFX_INT_MODE_USE_MSI(efx)) in efx_farch_init_common()
1761 efx->irq_level = 0x1f; in efx_farch_init_common()
1764 efx->irq_level = 0; in efx_farch_init_common()
1778 efx_writeo(efx, &temp, FR_AZ_FATAL_INTR_KER); in efx_farch_init_common()
1783 efx_reado(efx, &temp, FR_AZ_TX_RESERVED); in efx_farch_init_common()
1797 efx_writeo(efx, &temp, FR_AZ_TX_RESERVED); in efx_farch_init_common()
1807 efx_writeo(efx, &temp, FR_BZ_TX_PACE); in efx_farch_init_common()
1885 efx_farch_filter_table_clear_entry(struct efx_nic *efx,
1932 static void efx_farch_filter_push_rx_config(struct efx_nic *efx) in efx_farch_filter_push_rx_config() argument
1934 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_push_rx_config()
1938 efx_reado(efx, &filter_ctl, FR_BZ_RX_FILTER_CTL); in efx_farch_filter_push_rx_config()
2000 efx->rx_scatter); in efx_farch_filter_push_rx_config()
2003 efx_writeo(efx, &filter_ctl, FR_BZ_RX_FILTER_CTL); in efx_farch_filter_push_rx_config()
2006 static void efx_farch_filter_push_tx_limits(struct efx_nic *efx) in efx_farch_filter_push_tx_limits() argument
2008 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_push_tx_limits()
2012 efx_reado(efx, &tx_cfg, FR_AZ_TX_CFG); in efx_farch_filter_push_tx_limits()
2026 efx_writeo(efx, &tx_cfg, FR_AZ_TX_CFG); in efx_farch_filter_push_tx_limits()
2216 efx_farch_filter_init_rx_auto(struct efx_nic *efx, in efx_farch_filter_init_rx_auto() argument
2224 (efx_rss_enabled(efx) ? EFX_FILTER_FLAG_RX_RSS : 0) | in efx_farch_filter_init_rx_auto()
2225 (efx->rx_scatter ? EFX_FILTER_FLAG_RX_SCATTER : 0)); in efx_farch_filter_init_rx_auto()
2368 u32 efx_farch_filter_get_rx_id_limit(struct efx_nic *efx) in efx_farch_filter_get_rx_id_limit() argument
2370 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_get_rx_id_limit()
2384 s32 efx_farch_filter_insert(struct efx_nic *efx, in efx_farch_filter_insert() argument
2388 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_insert()
2408 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_filter_insert()
2505 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_insert()
2510 efx_farch_filter_push_tx_limits(efx); in efx_farch_filter_insert()
2512 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_insert()
2515 efx_writeo(efx, &filter, in efx_farch_filter_insert()
2522 efx_farch_filter_table_clear_entry(efx, table, in efx_farch_filter_insert()
2526 netif_vdbg(efx, hw, efx->net_dev, in efx_farch_filter_insert()
2537 efx_farch_filter_table_clear_entry(struct efx_nic *efx, in efx_farch_filter_table_clear_entry() argument
2550 efx_writeo(efx, &filter, table->offset + table->step * filter_idx); in efx_farch_filter_table_clear_entry()
2561 efx_farch_filter_push_tx_limits(efx); in efx_farch_filter_table_clear_entry()
2563 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_table_clear_entry()
2567 static int efx_farch_filter_remove(struct efx_nic *efx, in efx_farch_filter_remove() argument
2579 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_remove()
2580 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_remove()
2582 efx_farch_filter_table_clear_entry(efx, table, filter_idx); in efx_farch_filter_remove()
2588 int efx_farch_filter_remove_safe(struct efx_nic *efx, in efx_farch_filter_remove_safe() argument
2592 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_remove_safe()
2608 rc = efx_farch_filter_remove(efx, table, filter_idx, priority); in efx_farch_filter_remove_safe()
2614 int efx_farch_filter_get_safe(struct efx_nic *efx, in efx_farch_filter_get_safe() argument
2618 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_get_safe()
2649 efx_farch_filter_table_clear(struct efx_nic *efx, in efx_farch_filter_table_clear() argument
2653 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_table_clear()
2660 efx_farch_filter_remove(efx, table, in efx_farch_filter_table_clear()
2666 int efx_farch_filter_clear_rx(struct efx_nic *efx, in efx_farch_filter_clear_rx() argument
2669 efx_farch_filter_table_clear(efx, EFX_FARCH_FILTER_TABLE_RX_IP, in efx_farch_filter_clear_rx()
2671 efx_farch_filter_table_clear(efx, EFX_FARCH_FILTER_TABLE_RX_MAC, in efx_farch_filter_clear_rx()
2673 efx_farch_filter_table_clear(efx, EFX_FARCH_FILTER_TABLE_RX_DEF, in efx_farch_filter_clear_rx()
2678 u32 efx_farch_filter_count_rx_used(struct efx_nic *efx, in efx_farch_filter_count_rx_used() argument
2681 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_count_rx_used()
2705 s32 efx_farch_filter_get_rx_ids(struct efx_nic *efx, in efx_farch_filter_get_rx_ids() argument
2709 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_get_rx_ids()
2740 void efx_farch_filter_table_restore(struct efx_nic *efx) in efx_farch_filter_table_restore() argument
2742 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_table_restore()
2761 efx_writeo(efx, &filter, in efx_farch_filter_table_restore()
2766 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_table_restore()
2767 efx_farch_filter_push_tx_limits(efx); in efx_farch_filter_table_restore()
2772 void efx_farch_filter_table_remove(struct efx_nic *efx) in efx_farch_filter_table_remove() argument
2774 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_table_remove()
2784 int efx_farch_filter_table_probe(struct efx_nic *efx) in efx_farch_filter_table_probe() argument
2793 efx->filter_state = state; in efx_farch_filter_table_probe()
2842 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_table_probe()
2847 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_table_probe()
2852 efx_farch_filter_table_remove(efx); in efx_farch_filter_table_probe()
2857 void efx_farch_filter_update_rx_scatter(struct efx_nic *efx) in efx_farch_filter_update_rx_scatter() argument
2859 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_update_rx_scatter()
2875 efx->n_rx_channels) in efx_farch_filter_update_rx_scatter()
2878 if (efx->rx_scatter) in efx_farch_filter_update_rx_scatter()
2890 efx_writeo(efx, &filter, in efx_farch_filter_update_rx_scatter()
2895 efx_farch_filter_push_rx_config(efx); in efx_farch_filter_update_rx_scatter()
2902 bool efx_farch_filter_rfs_expire_one(struct efx_nic *efx, u32 flow_id, in efx_farch_filter_rfs_expire_one() argument
2905 struct efx_farch_filter_state *state = efx->filter_state; in efx_farch_filter_rfs_expire_one()
2911 spin_lock_bh(&efx->rps_hash_lock); in efx_farch_filter_rfs_expire_one()
2919 if (!efx->rps_hash_table) { in efx_farch_filter_rfs_expire_one()
2925 rule = efx_rps_hash_find(efx, &spec); in efx_farch_filter_rfs_expire_one()
2935 if (force || rps_may_expire_flow(efx->net_dev, spec.dmaq_id, in efx_farch_filter_rfs_expire_one()
2939 efx_rps_hash_del(efx, &spec); in efx_farch_filter_rfs_expire_one()
2940 efx_farch_filter_table_clear_entry(efx, table, index); in efx_farch_filter_rfs_expire_one()
2945 spin_unlock_bh(&efx->rps_hash_lock); in efx_farch_filter_rfs_expire_one()
2952 void efx_farch_filter_sync_rx_mode(struct efx_nic *efx) in efx_farch_filter_sync_rx_mode() argument
2954 struct net_device *net_dev = efx->net_dev; in efx_farch_filter_sync_rx_mode()
2956 union efx_multicast_hash *mc_hash = &efx->multicast_hash; in efx_farch_filter_sync_rx_mode()
2960 if (!efx_dev_registered(efx)) in efx_farch_filter_sync_rx_mode()
2965 efx->unicast_filter = !(net_dev->flags & IFF_PROMISC); in efx_farch_filter_sync_rx_mode()