• Home
  • Raw
  • Download

Lines Matching refs:efx

31 static void siena_init_wol(struct efx_nic *efx);
36 struct efx_nic *efx = channel->efx; in siena_push_irq_moderation() local
42 ticks = efx_usecs_to_ticks(efx, channel->irq_moderation_us); in siena_push_irq_moderation()
54 efx_writed_page_locked(channel->efx, &timer_cmd, FR_BZ_TIMER_COMMAND_P0, in siena_push_irq_moderation()
58 void siena_prepare_flush(struct efx_nic *efx) in siena_prepare_flush() argument
60 if (efx->fc_disable++ == 0) in siena_prepare_flush()
61 efx_mcdi_set_mac(efx); in siena_prepare_flush()
64 void siena_finish_flush(struct efx_nic *efx) in siena_finish_flush() argument
66 if (--efx->fc_disable == 0) in siena_finish_flush()
67 efx_mcdi_set_mac(efx); in siena_finish_flush()
99 static int siena_test_chip(struct efx_nic *efx, struct efx_self_tests *tests) in siena_test_chip() argument
104 efx_reset_down(efx, reset_method); in siena_test_chip()
109 rc = efx_mcdi_reset(efx, reset_method); in siena_test_chip()
114 efx_farch_test_registers(efx, siena_register_tests, in siena_test_chip()
118 rc = efx_mcdi_reset(efx, reset_method); in siena_test_chip()
120 rc2 = efx_reset_up(efx, reset_method, rc == 0); in siena_test_chip()
131 static void siena_ptp_write_host_time(struct efx_nic *efx, u32 host_time) in siena_ptp_write_host_time() argument
133 _efx_writed(efx, cpu_to_le32(host_time), in siena_ptp_write_host_time()
137 static int siena_ptp_set_ts_config(struct efx_nic *efx, in siena_ptp_set_ts_config() argument
145 return efx_ptp_change_mode(efx, in siena_ptp_set_ts_config()
147 efx_ptp_get_mode(efx)); in siena_ptp_set_ts_config()
152 return efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V1); in siena_ptp_set_ts_config()
157 rc = efx_ptp_change_mode(efx, true, in siena_ptp_set_ts_config()
165 rc = efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V2); in siena_ptp_set_ts_config()
211 static void siena_monitor(struct efx_nic *efx) in siena_monitor() argument
213 struct eeh_dev *eehdev = pci_dev_to_eeh_dev(efx->pci_dev); in siena_monitor()
219 static int siena_probe_nvconfig(struct efx_nic *efx) in siena_probe_nvconfig() argument
224 rc = efx_mcdi_get_board_cfg(efx, efx->net_dev->perm_addr, NULL, &caps); in siena_probe_nvconfig()
226 efx->timer_quantum_ns = in siena_probe_nvconfig()
229 efx->timer_max_ns = efx->type->timer_period_max * in siena_probe_nvconfig()
230 efx->timer_quantum_ns; in siena_probe_nvconfig()
235 static int siena_dimension_resources(struct efx_nic *efx) in siena_dimension_resources() argument
241 efx_farch_dimension_resources(efx, FR_CZ_BUF_FULL_TBL_ROWS / 2); in siena_dimension_resources()
248 static unsigned int siena_mem_bar(struct efx_nic *efx) in siena_mem_bar() argument
253 static unsigned int siena_mem_map_size(struct efx_nic *efx) in siena_mem_map_size() argument
259 static int siena_probe_nic(struct efx_nic *efx) in siena_probe_nic() argument
269 nic_data->efx = efx; in siena_probe_nic()
270 efx->nic_data = nic_data; in siena_probe_nic()
272 if (efx_farch_fpga_ver(efx) != 0) { in siena_probe_nic()
273 netif_err(efx, probe, efx->net_dev, in siena_probe_nic()
279 efx->max_channels = EFX_MAX_CHANNELS; in siena_probe_nic()
280 efx->max_vis = EFX_MAX_CHANNELS; in siena_probe_nic()
281 efx->max_tx_channels = EFX_MAX_CHANNELS; in siena_probe_nic()
282 efx->tx_queues_per_channel = 4; in siena_probe_nic()
284 efx_reado(efx, &reg, FR_AZ_CS_DEBUG); in siena_probe_nic()
285 efx->port_num = EFX_OWORD_FIELD(reg, FRF_CZ_CS_PORT_NUM) - 1; in siena_probe_nic()
287 rc = efx_mcdi_init(efx); in siena_probe_nic()
292 rc = efx_mcdi_reset(efx, RESET_TYPE_ALL); in siena_probe_nic()
294 netif_err(efx, probe, efx->net_dev, "failed to reset NIC\n"); in siena_probe_nic()
298 siena_init_wol(efx); in siena_probe_nic()
301 rc = efx_nic_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t), in siena_probe_nic()
305 BUG_ON(efx->irq_status.dma_addr & 0x0f); in siena_probe_nic()
307 netif_dbg(efx, probe, efx->net_dev, in siena_probe_nic()
309 (unsigned long long)efx->irq_status.dma_addr, in siena_probe_nic()
310 efx->irq_status.addr, in siena_probe_nic()
311 (unsigned long long)virt_to_phys(efx->irq_status.addr)); in siena_probe_nic()
314 rc = siena_probe_nvconfig(efx); in siena_probe_nic()
316 netif_err(efx, probe, efx->net_dev, in siena_probe_nic()
318 efx->phy_type = PHY_TYPE_NONE; in siena_probe_nic()
319 efx->mdio.prtad = MDIO_PRTAD_NONE; in siena_probe_nic()
324 rc = efx_mcdi_mon_probe(efx); in siena_probe_nic()
329 efx_siena_sriov_probe(efx); in siena_probe_nic()
331 efx_ptp_defer_probe_with_channel(efx); in siena_probe_nic()
336 efx_nic_free_buffer(efx, &efx->irq_status); in siena_probe_nic()
339 efx_mcdi_detach(efx); in siena_probe_nic()
340 efx_mcdi_fini(efx); in siena_probe_nic()
342 kfree(efx->nic_data); in siena_probe_nic()
346 static int siena_rx_pull_rss_config(struct efx_nic *efx) in siena_rx_pull_rss_config() argument
354 efx_reado(efx, &temp, FR_CZ_RX_RSS_IPV6_REG1); in siena_rx_pull_rss_config()
355 memcpy(efx->rss_context.rx_hash_key, &temp, sizeof(temp)); in siena_rx_pull_rss_config()
356 efx_reado(efx, &temp, FR_CZ_RX_RSS_IPV6_REG2); in siena_rx_pull_rss_config()
357 memcpy(efx->rss_context.rx_hash_key + sizeof(temp), &temp, sizeof(temp)); in siena_rx_pull_rss_config()
358 efx_reado(efx, &temp, FR_CZ_RX_RSS_IPV6_REG3); in siena_rx_pull_rss_config()
359 memcpy(efx->rss_context.rx_hash_key + 2 * sizeof(temp), &temp, in siena_rx_pull_rss_config()
361 efx_farch_rx_pull_indir_table(efx); in siena_rx_pull_rss_config()
365 static int siena_rx_push_rss_config(struct efx_nic *efx, bool user, in siena_rx_push_rss_config() argument
372 memcpy(efx->rss_context.rx_hash_key, key, sizeof(temp)); in siena_rx_push_rss_config()
373 memcpy(&temp, efx->rss_context.rx_hash_key, sizeof(temp)); in siena_rx_push_rss_config()
374 efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY); in siena_rx_push_rss_config()
377 BUILD_BUG_ON(sizeof(efx->rss_context.rx_hash_key) < in siena_rx_push_rss_config()
380 memcpy(&temp, efx->rss_context.rx_hash_key, sizeof(temp)); in siena_rx_push_rss_config()
381 efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG1); in siena_rx_push_rss_config()
382 memcpy(&temp, efx->rss_context.rx_hash_key + sizeof(temp), sizeof(temp)); in siena_rx_push_rss_config()
383 efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG2); in siena_rx_push_rss_config()
386 memcpy(&temp, efx->rss_context.rx_hash_key + 2 * sizeof(temp), in siena_rx_push_rss_config()
388 efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG3); in siena_rx_push_rss_config()
390 memcpy(efx->rss_context.rx_indir_table, rx_indir_table, in siena_rx_push_rss_config()
391 sizeof(efx->rss_context.rx_indir_table)); in siena_rx_push_rss_config()
392 efx_farch_rx_push_indir_table(efx); in siena_rx_push_rss_config()
401 static int siena_init_nic(struct efx_nic *efx) in siena_init_nic() argument
407 rc = efx_mcdi_handle_assertion(efx); in siena_init_nic()
412 efx_reado(efx, &temp, FR_AZ_TX_RESERVED); in siena_init_nic()
414 efx_writeo(efx, &temp, FR_AZ_TX_RESERVED); in siena_init_nic()
419 efx_reado(efx, &temp, FR_AZ_TX_CFG); in siena_init_nic()
422 efx_writeo(efx, &temp, FR_AZ_TX_CFG); in siena_init_nic()
424 efx_reado(efx, &temp, FR_AZ_RX_CFG); in siena_init_nic()
435 efx_writeo(efx, &temp, FR_AZ_RX_CFG); in siena_init_nic()
437 siena_rx_push_rss_config(efx, false, efx->rss_context.rx_indir_table, NULL); in siena_init_nic()
438 efx->rss_context.context_id = 0; /* indicates RSS is active */ in siena_init_nic()
441 rc = efx_mcdi_log_ctrl(efx, true, false, 0); in siena_init_nic()
447 efx_writeo(efx, &temp, FR_BZ_DP_CTRL); in siena_init_nic()
450 efx_writeo(efx, &temp, FR_CZ_USR_EV_CFG); in siena_init_nic()
452 efx_farch_init_common(efx); in siena_init_nic()
456 static void siena_remove_nic(struct efx_nic *efx) in siena_remove_nic() argument
458 efx_mcdi_mon_remove(efx); in siena_remove_nic()
460 efx_nic_free_buffer(efx, &efx->irq_status); in siena_remove_nic()
462 efx_mcdi_reset(efx, RESET_TYPE_ALL); in siena_remove_nic()
464 efx_mcdi_detach(efx); in siena_remove_nic()
465 efx_mcdi_fini(efx); in siena_remove_nic()
468 kfree(efx->nic_data); in siena_remove_nic()
469 efx->nic_data = NULL; in siena_remove_nic()
545 static size_t siena_describe_nic_stats(struct efx_nic *efx, u8 *names) in siena_describe_nic_stats() argument
551 static int siena_try_update_nic_stats(struct efx_nic *efx) in siena_try_update_nic_stats() argument
553 struct siena_nic_data *nic_data = efx->nic_data; in siena_try_update_nic_stats()
558 dma_stats = efx->stats_buffer.addr; in siena_try_update_nic_stats()
560 generation_end = dma_stats[efx->num_mac_stats - 1]; in siena_try_update_nic_stats()
565 stats, efx->stats_buffer.addr, false); in siena_try_update_nic_stats()
572 efx_nic_fix_nodesc_drop_stat(efx, in siena_try_update_nic_stats()
585 efx_update_sw_stats(efx, stats); in siena_try_update_nic_stats()
589 static size_t siena_update_nic_stats(struct efx_nic *efx, u64 *full_stats, in siena_update_nic_stats() argument
592 struct siena_nic_data *nic_data = efx->nic_data; in siena_update_nic_stats()
599 if (siena_try_update_nic_stats(efx) == 0) in siena_update_nic_stats()
637 static int siena_mac_reconfigure(struct efx_nic *efx, bool mtu_only __always_unused) in siena_mac_reconfigure() argument
644 sizeof(efx->multicast_hash)); in siena_mac_reconfigure()
646 efx_farch_filter_sync_rx_mode(efx); in siena_mac_reconfigure()
648 WARN_ON(!mutex_is_locked(&efx->mac_lock)); in siena_mac_reconfigure()
650 rc = efx_mcdi_set_mac(efx); in siena_mac_reconfigure()
655 efx->multicast_hash.byte, sizeof(efx->multicast_hash)); in siena_mac_reconfigure()
656 return efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH, in siena_mac_reconfigure()
667 static void siena_get_wol(struct efx_nic *efx, struct ethtool_wolinfo *wol) in siena_get_wol() argument
669 struct siena_nic_data *nic_data = efx->nic_data; in siena_get_wol()
680 static int siena_set_wol(struct efx_nic *efx, u32 type) in siena_set_wol() argument
682 struct siena_nic_data *nic_data = efx->nic_data; in siena_set_wol()
690 efx_mcdi_wol_filter_remove(efx, in siena_set_wol()
692 rc = efx_mcdi_wol_filter_set_magic(efx, efx->net_dev->dev_addr, in siena_set_wol()
697 pci_wake_from_d3(efx->pci_dev, true); in siena_set_wol()
699 rc = efx_mcdi_wol_filter_reset(efx); in siena_set_wol()
701 pci_wake_from_d3(efx->pci_dev, false); in siena_set_wol()
708 netif_err(efx, hw, efx->net_dev, "%s failed: type=%d rc=%d\n", in siena_set_wol()
714 static void siena_init_wol(struct efx_nic *efx) in siena_init_wol() argument
716 struct siena_nic_data *nic_data = efx->nic_data; in siena_init_wol()
719 rc = efx_mcdi_wol_filter_get_magic(efx, &nic_data->wol_filter_id); in siena_init_wol()
724 efx_mcdi_wol_filter_reset(efx); in siena_init_wol()
727 pci_wake_from_d3(efx->pci_dev, true); in siena_init_wol()
738 #define MCDI_PDU(efx) \ argument
739 (efx_port_num(efx) ? MC_SMEM_P1_PDU_OFST : MC_SMEM_P0_PDU_OFST)
740 #define MCDI_DOORBELL(efx) \ argument
741 (efx_port_num(efx) ? MC_SMEM_P1_DOORBELL_OFST : MC_SMEM_P0_DOORBELL_OFST)
742 #define MCDI_STATUS(efx) \ argument
743 (efx_port_num(efx) ? MC_SMEM_P1_STATUS_OFST : MC_SMEM_P0_STATUS_OFST)
745 static void siena_mcdi_request(struct efx_nic *efx, in siena_mcdi_request() argument
749 unsigned pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); in siena_mcdi_request()
750 unsigned doorbell = FR_CZ_MC_TREG_SMEM + MCDI_DOORBELL(efx); in siena_mcdi_request()
756 efx_writed(efx, hdr, pdu); in siena_mcdi_request()
759 efx_writed(efx, &sdu[i], pdu + hdr_len + 4 * i); in siena_mcdi_request()
765 _efx_writed(efx, (__force __le32) 0x45789abc, doorbell); in siena_mcdi_request()
768 static bool siena_mcdi_poll_response(struct efx_nic *efx) in siena_mcdi_poll_response() argument
770 unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); in siena_mcdi_poll_response()
773 efx_readd(efx, &hdr, pdu); in siena_mcdi_poll_response()
783 static void siena_mcdi_read_response(struct efx_nic *efx, efx_dword_t *outbuf, in siena_mcdi_read_response() argument
786 unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); in siena_mcdi_read_response()
791 efx_readd(efx, &outbuf[i], pdu + offset + 4 * i); in siena_mcdi_read_response()
794 static int siena_mcdi_poll_reboot(struct efx_nic *efx) in siena_mcdi_poll_reboot() argument
796 struct siena_nic_data *nic_data = efx->nic_data; in siena_mcdi_poll_reboot()
797 unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx); in siena_mcdi_poll_reboot()
801 efx_readd(efx, &reg, addr); in siena_mcdi_poll_reboot()
808 efx_writed(efx, &reg, addr); in siena_mcdi_poll_reboot()
852 static int siena_mtd_probe_partition(struct efx_nic *efx, in siena_mtd_probe_partition() argument
867 if (info->port != efx_port_num(efx)) in siena_mtd_probe_partition()
870 rc = efx_mcdi_nvram_info(efx, type, &size, &erase_size, &protected); in siena_mtd_probe_partition()
888 static int siena_mtd_get_fw_subtypes(struct efx_nic *efx, in siena_mtd_get_fw_subtypes() argument
897 rc = efx_mcdi_get_board_cfg(efx, NULL, fw_subtype_list, NULL); in siena_mtd_get_fw_subtypes()
907 static int siena_mtd_probe(struct efx_nic *efx) in siena_mtd_probe() argument
917 rc = efx_mcdi_nvram_types(efx, &nvram_types); in siena_mtd_probe()
930 rc = siena_mtd_probe_partition(efx, &parts[n_parts], in siena_mtd_probe()
941 rc = siena_mtd_get_fw_subtypes(efx, parts, n_parts); in siena_mtd_probe()
945 rc = efx_mtd_add(efx, &parts[0].common, n_parts, sizeof(*parts)); in siena_mtd_probe()
954 static unsigned int siena_check_caps(const struct efx_nic *efx, in siena_check_caps() argument