Lines Matching defs:efx

27 #define MCDI_PDU(efx)							\
28 (efx_port_num(efx) ? MC_SMEM_P1_PDU_OFST : MC_SMEM_P0_PDU_OFST)
29 #define MCDI_DOORBELL(efx) \
30 (efx_port_num(efx) ? MC_SMEM_P1_DOORBELL_OFST : MC_SMEM_P0_DOORBELL_OFST)
31 #define MCDI_STATUS(efx) \
32 (efx_port_num(efx) ? MC_SMEM_P1_STATUS_OFST : MC_SMEM_P0_STATUS_OFST)
45 static inline struct efx_mcdi_iface *efx_mcdi(struct efx_nic *efx)
48 EFX_BUG_ON_PARANOID(efx_nic_rev(efx) < EFX_REV_SIENA_A0);
49 nic_data = efx->nic_data;
53 void efx_mcdi_init(struct efx_nic *efx)
57 if (efx_nic_rev(efx) < EFX_REV_SIENA_A0)
60 mcdi = efx_mcdi(efx);
66 (void) efx_mcdi_poll_reboot(efx);
69 static void efx_mcdi_copyin(struct efx_nic *efx, unsigned cmd,
72 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
73 unsigned pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
74 unsigned doorbell = FR_CZ_MC_TREG_SMEM + MCDI_DOORBELL(efx);
95 efx_writed(efx, &hdr, pdu);
98 _efx_writed(efx, *((__le32 *)(inbuf + i)), pdu + 4 + i);
104 _efx_writed(efx, (__force __le32) 0x45789abc, doorbell);
107 static void efx_mcdi_copyout(struct efx_nic *efx, u8 *outbuf, size_t outlen)
109 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
110 unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
117 *((__le32 *)(outbuf + i)) = _efx_readd(efx, pdu + 4 + i);
120 static int efx_mcdi_poll(struct efx_nic *efx)
122 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
125 unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
130 rc = -efx_mcdi_poll_reboot(efx);
152 efx_readd(efx, &reg, pdu);
171 netif_err(efx, hw, efx->net_dev, "MC rebooted\n");
174 netif_err(efx, hw, efx->net_dev,
179 efx_readd(efx, &reg, pdu + 4);
211 int efx_mcdi_poll_reboot(struct efx_nic *efx)
213 unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx);
217 if (efx_nic_rev(efx) < EFX_REV_SIENA_A0)
220 efx_readd(efx, &reg, addr);
227 efx_writed(efx, &reg, addr);
246 static int efx_mcdi_await_completion(struct efx_nic *efx)
248 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
265 return efx_mcdi_poll(efx);
294 static void efx_mcdi_ev_cpl(struct efx_nic *efx, unsigned int seqno,
297 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
307 netif_err(efx, hw, efx->net_dev,
325 int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd,
329 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
331 BUG_ON(efx_nic_rev(efx) < EFX_REV_SIENA_A0);
340 efx_mcdi_copyin(efx, cmd, inbuf, inlen);
343 rc = efx_mcdi_poll(efx);
345 rc = efx_mcdi_await_completion(efx);
357 netif_err(efx, hw, efx->net_dev,
373 efx_mcdi_copyout(efx, outbuf,
380 netif_err(efx, hw, efx->net_dev, "MC fatal error %d\n",
382 efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE);
384 netif_dbg(efx, hw, efx->net_dev,
390 efx_mcdi_poll_reboot(efx);
398 void efx_mcdi_mode_poll(struct efx_nic *efx)
402 if (efx_nic_rev(efx) < EFX_REV_SIENA_A0)
405 mcdi = efx_mcdi(efx);
422 void efx_mcdi_mode_event(struct efx_nic *efx)
426 if (efx_nic_rev(efx) < EFX_REV_SIENA_A0)
429 mcdi = efx_mcdi(efx);
446 static void efx_mcdi_ev_death(struct efx_nic *efx, int rc)
448 struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
477 efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE);
481 if (efx_mcdi_poll_reboot(efx))
497 static void efx_mcdi_process_link_change(struct efx_nic *efx, efx_qword_t *ev)
509 /* efx->link_state is only modified by efx_mcdi_phy_get_link(),
513 efx_mcdi_phy_decode_link(efx, &efx->link_state, speed, flags, fcntl);
515 efx_mcdi_phy_check_fcntl(efx, lpa);
517 efx_link_status_changed(efx);
524 struct efx_nic *efx = channel->efx;
530 netif_err(efx, hw, efx->net_dev,
532 efx_mcdi_ev_death(efx, EINTR);
536 netif_info(efx, wol, efx->net_dev, "MCDI PM event.\n");
540 efx_mcdi_ev_cpl(efx,
547 efx_mcdi_process_link_change(efx, event);
550 efx_mcdi_sensor_event(efx, event);
553 netif_info(efx, hw, efx->net_dev,
557 netif_info(efx, hw, efx->net_dev, "MC Reboot\n");
558 efx_mcdi_ev_death(efx, EIO);
564 efx_sriov_flr(efx, MCDI_EVENT_FIELD(*event, FLR_VF));
568 netif_err(efx, hw, efx->net_dev, "Unknown MCDI event 0x%x\n",
580 void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len)
589 rc = efx_mcdi_rpc(efx, MC_CMD_GET_VERSION, NULL, 0,
606 netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
610 int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
622 rc = efx_mcdi_rpc(efx, MC_CMD_DRV_ATTACH, inbuf, sizeof(inbuf),
636 netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
640 int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address,
645 int port_num = efx_port_num(efx);
651 rc = efx_mcdi_rpc(efx, MC_CMD_GET_BOARD_CFG, NULL, 0,
683 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d len=%d\n",
689 int efx_mcdi_log_ctrl(struct efx_nic *efx, bool evq, bool uart, u32 dest_evq)
705 rc = efx_mcdi_rpc(efx, MC_CMD_LOG_CTRL, inbuf, sizeof(inbuf),
713 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
717 int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out)
725 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TYPES, NULL, 0,
738 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
743 int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type,
754 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_INFO, inbuf, sizeof(inbuf),
770 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
774 int efx_mcdi_nvram_update_start(struct efx_nic *efx, unsigned int type)
783 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_START, inbuf, sizeof(inbuf),
791 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
795 int efx_mcdi_nvram_read(struct efx_nic *efx, unsigned int type,
807 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_READ, inbuf, sizeof(inbuf),
816 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
820 int efx_mcdi_nvram_write(struct efx_nic *efx, unsigned int type,
833 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_WRITE, inbuf,
842 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
846 int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type,
858 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_ERASE, inbuf, sizeof(inbuf),
866 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
870 int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type)
879 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_FINISH, inbuf, sizeof(inbuf),
887 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
891 static int efx_mcdi_nvram_test(struct efx_nic *efx, unsigned int type)
899 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TEST, inbuf, sizeof(inbuf),
913 int efx_mcdi_nvram_test_all(struct efx_nic *efx)
919 rc = efx_mcdi_nvram_types(efx, &nvram_types);
926 rc = efx_mcdi_nvram_test(efx, type);
937 netif_err(efx, hw, efx->net_dev, "%s: failed type=%u\n",
940 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
944 static int efx_mcdi_read_assertion(struct efx_nic *efx)
962 rc = efx_mcdi_rpc(efx, MC_CMD_GET_ASSERTS,
984 netif_err(efx, hw, efx->net_dev,
992 netif_err(efx, hw, efx->net_dev, "R%.2d (?): 0x%.8x\n", index,
1000 static void efx_mcdi_exit_assertion(struct efx_nic *efx)
1008 efx_mcdi_rpc(efx, MC_CMD_REBOOT, inbuf, MC_CMD_REBOOT_IN_LEN,
1012 int efx_mcdi_handle_assertion(struct efx_nic *efx)
1016 rc = efx_mcdi_read_assertion(efx);
1020 efx_mcdi_exit_assertion(efx);
1025 void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode)
1038 rc = efx_mcdi_rpc(efx, MC_CMD_SET_ID_LED, inbuf, sizeof(inbuf),
1041 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
1045 int efx_mcdi_reset_port(struct efx_nic *efx)
1047 int rc = efx_mcdi_rpc(efx, MC_CMD_ENTITY_RESET, NULL, 0, NULL, 0, NULL);
1049 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
1054 int efx_mcdi_reset_mc(struct efx_nic *efx)
1061 rc = efx_mcdi_rpc(efx, MC_CMD_REBOOT, inbuf, sizeof(inbuf),
1068 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
1072 static int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type,
1085 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_SET, inbuf, sizeof(inbuf),
1101 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
1108 efx_mcdi_wol_filter_set_magic(struct efx_nic *efx, const u8 *mac, int *id_out)
1110 return efx_mcdi_wol_filter_set(efx, MC_CMD_WOL_TYPE_MAGIC, mac, id_out);
1114 int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out)
1120 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_GET, NULL, 0,
1136 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
1141 int efx_mcdi_wol_filter_remove(struct efx_nic *efx, int id)
1148 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_REMOVE, inbuf, sizeof(inbuf),
1156 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
1160 int efx_mcdi_flush_rxqs(struct efx_nic *efx)
1172 efx_for_each_channel(channel, efx) {
1176 atomic_dec(&efx->rxq_flush_pending);
1183 rc = efx_mcdi_rpc(efx, MC_CMD_FLUSH_RX_QUEUES, (u8 *)qid,
1192 int efx_mcdi_wol_filter_reset(struct efx_nic *efx)
1196 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_RESET, NULL, 0, NULL, 0, NULL);
1203 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);