• Home
  • Raw
  • Download

Lines Matching refs:dev

95 static inline int mei_hbm_write_message(struct mei_device *dev,  in mei_hbm_write_message()  argument
99 return mei_write_message(dev, hdr, sizeof(*hdr), data, hdr->length); in mei_hbm_write_message()
107 void mei_hbm_idle(struct mei_device *dev) in mei_hbm_idle() argument
109 dev->init_clients_timer = 0; in mei_hbm_idle()
110 dev->hbm_state = MEI_HBM_IDLE; in mei_hbm_idle()
118 void mei_hbm_reset(struct mei_device *dev) in mei_hbm_reset() argument
120 mei_me_cl_rm_all(dev); in mei_hbm_reset()
122 mei_hbm_idle(dev); in mei_hbm_reset()
170 static inline int mei_hbm_cl_write(struct mei_device *dev, struct mei_cl *cl, in mei_hbm_cl_write() argument
178 return mei_hbm_write_message(dev, &mei_hdr, buf); in mei_hbm_cl_write()
206 struct mei_cl *mei_hbm_cl_find_by_cmd(struct mei_device *dev, void *buf) in mei_hbm_cl_find_by_cmd() argument
211 list_for_each_entry(cl, &dev->file_list, link) in mei_hbm_cl_find_by_cmd()
225 int mei_hbm_start_wait(struct mei_device *dev) in mei_hbm_start_wait() argument
229 if (dev->hbm_state > MEI_HBM_STARTING) in mei_hbm_start_wait()
232 mutex_unlock(&dev->device_lock); in mei_hbm_start_wait()
233 ret = wait_event_timeout(dev->wait_hbm_start, in mei_hbm_start_wait()
234 dev->hbm_state != MEI_HBM_STARTING, in mei_hbm_start_wait()
236 mutex_lock(&dev->device_lock); in mei_hbm_start_wait()
238 if (ret == 0 && (dev->hbm_state <= MEI_HBM_STARTING)) { in mei_hbm_start_wait()
239 dev->hbm_state = MEI_HBM_IDLE; in mei_hbm_start_wait()
240 dev_err(dev->dev, "waiting for mei start failed\n"); in mei_hbm_start_wait()
253 int mei_hbm_start_req(struct mei_device *dev) in mei_hbm_start_req() argument
259 mei_hbm_reset(dev); in mei_hbm_start_req()
269 dev->hbm_state = MEI_HBM_IDLE; in mei_hbm_start_req()
270 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_start_req()
272 dev_err(dev->dev, "version message write failed: ret = %d\n", in mei_hbm_start_req()
277 dev->hbm_state = MEI_HBM_STARTING; in mei_hbm_start_req()
278 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; in mei_hbm_start_req()
279 mei_schedule_stall_timer(dev); in mei_hbm_start_req()
289 static int mei_hbm_dma_setup_req(struct mei_device *dev) in mei_hbm_dma_setup_req() argument
303 paddr = dev->dr_dscr[i].daddr; in mei_hbm_dma_setup_req()
306 req.dma_dscr[i].size = dev->dr_dscr[i].size; in mei_hbm_dma_setup_req()
309 mei_dma_ring_reset(dev); in mei_hbm_dma_setup_req()
311 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_dma_setup_req()
313 dev_err(dev->dev, "dma setup request write failed: ret = %d.\n", in mei_hbm_dma_setup_req()
318 dev->hbm_state = MEI_HBM_DR_SETUP; in mei_hbm_dma_setup_req()
319 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; in mei_hbm_dma_setup_req()
320 mei_schedule_stall_timer(dev); in mei_hbm_dma_setup_req()
331 static int mei_hbm_capabilities_req(struct mei_device *dev) in mei_hbm_capabilities_req() argument
341 if (dev->hbm_f_vt_supported) in mei_hbm_capabilities_req()
344 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_capabilities_req()
346 dev_err(dev->dev, in mei_hbm_capabilities_req()
351 dev->hbm_state = MEI_HBM_CAP_SETUP; in mei_hbm_capabilities_req()
352 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; in mei_hbm_capabilities_req()
353 mei_schedule_stall_timer(dev); in mei_hbm_capabilities_req()
364 static int mei_hbm_enum_clients_req(struct mei_device *dev) in mei_hbm_enum_clients_req() argument
375 req.flags |= dev->hbm_f_dc_supported ? MEI_HBM_ENUM_F_ALLOW_ADD : 0; in mei_hbm_enum_clients_req()
376 req.flags |= dev->hbm_f_ie_supported ? in mei_hbm_enum_clients_req()
379 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_enum_clients_req()
381 dev_err(dev->dev, "enumeration request write failed: ret = %d.\n", in mei_hbm_enum_clients_req()
385 dev->hbm_state = MEI_HBM_ENUM_CLIENTS; in mei_hbm_enum_clients_req()
386 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; in mei_hbm_enum_clients_req()
387 mei_schedule_stall_timer(dev); in mei_hbm_enum_clients_req()
400 static int mei_hbm_me_cl_add(struct mei_device *dev, in mei_hbm_me_cl_add() argument
406 mei_me_cl_rm_by_uuid(dev, uuid); in mei_hbm_me_cl_add()
418 mei_me_cl_add(dev, me_cl); in mei_hbm_me_cl_add()
432 static int mei_hbm_add_cl_resp(struct mei_device *dev, u8 addr, u8 status) in mei_hbm_add_cl_resp() argument
438 dev_dbg(dev->dev, "adding client response\n"); in mei_hbm_add_cl_resp()
447 ret = mei_hbm_write_message(dev, &mei_hdr, &resp); in mei_hbm_add_cl_resp()
449 dev_err(dev->dev, "add client response write failed: ret = %d\n", in mei_hbm_add_cl_resp()
462 static int mei_hbm_fw_add_cl_req(struct mei_device *dev, in mei_hbm_fw_add_cl_req() argument
471 ret = mei_hbm_me_cl_add(dev, (struct hbm_props_response *)req); in mei_hbm_fw_add_cl_req()
475 if (dev->dev_state == MEI_DEV_ENABLED) in mei_hbm_fw_add_cl_req()
476 schedule_work(&dev->bus_rescan_work); in mei_hbm_fw_add_cl_req()
478 return mei_hbm_add_cl_resp(dev, req->me_addr, status); in mei_hbm_fw_add_cl_req()
490 int mei_hbm_cl_notify_req(struct mei_device *dev, in mei_hbm_cl_notify_req() argument
503 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_cl_notify_req()
505 dev_err(dev->dev, "notify request failed: ret = %d\n", ret); in mei_hbm_cl_notify_req()
534 static void mei_hbm_cl_notify_start_res(struct mei_device *dev, in mei_hbm_cl_notify_start_res() argument
541 cl_dbg(dev, cl, "hbm: notify start response status=%d\n", rs->status); in mei_hbm_cl_notify_start_res()
560 static void mei_hbm_cl_notify_stop_res(struct mei_device *dev, in mei_hbm_cl_notify_stop_res() argument
567 cl_dbg(dev, cl, "hbm: notify stop response status=%d\n", rs->status); in mei_hbm_cl_notify_stop_res()
585 static void mei_hbm_cl_notify(struct mei_device *dev, in mei_hbm_cl_notify() argument
590 cl = mei_hbm_cl_find_by_cmd(dev, cmd); in mei_hbm_cl_notify()
603 static int mei_hbm_prop_req(struct mei_device *dev, unsigned long start_idx) in mei_hbm_prop_req() argument
610 addr = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, start_idx); in mei_hbm_prop_req()
614 dev->hbm_state = MEI_HBM_STARTED; in mei_hbm_prop_req()
615 mei_host_client_init(dev); in mei_hbm_prop_req()
626 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_prop_req()
628 dev_err(dev->dev, "properties request write failed: ret = %d\n", in mei_hbm_prop_req()
633 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; in mei_hbm_prop_req()
634 mei_schedule_stall_timer(dev); in mei_hbm_prop_req()
648 int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) in mei_hbm_pg() argument
654 if (!dev->hbm_f_pg_supported) in mei_hbm_pg()
662 ret = mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_pg()
664 dev_err(dev->dev, "power gate command write failed.\n"); in mei_hbm_pg()
676 static int mei_hbm_stop_req(struct mei_device *dev) in mei_hbm_stop_req() argument
687 return mei_hbm_write_message(dev, &mei_hdr, &req); in mei_hbm_stop_req()
698 int mei_hbm_cl_flow_control_req(struct mei_device *dev, struct mei_cl *cl) in mei_hbm_cl_flow_control_req() argument
702 cl_dbg(dev, cl, "sending flow control\n"); in mei_hbm_cl_flow_control_req()
703 return mei_hbm_cl_write(dev, cl, MEI_FLOW_CONTROL_CMD, in mei_hbm_cl_flow_control_req()
715 static int mei_hbm_add_single_tx_flow_ctrl_creds(struct mei_device *dev, in mei_hbm_add_single_tx_flow_ctrl_creds() argument
721 me_cl = mei_me_cl_by_id(dev, fctrl->me_addr); in mei_hbm_add_single_tx_flow_ctrl_creds()
723 dev_err(dev->dev, "no such me client %d\n", fctrl->me_addr); in mei_hbm_add_single_tx_flow_ctrl_creds()
733 dev_dbg(dev->dev, "recv flow ctrl msg ME %d (single) creds = %d.\n", in mei_hbm_add_single_tx_flow_ctrl_creds()
748 static void mei_hbm_cl_tx_flow_ctrl_creds_res(struct mei_device *dev, in mei_hbm_cl_tx_flow_ctrl_creds_res() argument
755 mei_hbm_add_single_tx_flow_ctrl_creds(dev, fctrl); in mei_hbm_cl_tx_flow_ctrl_creds_res()
759 cl = mei_hbm_cl_find_by_cmd(dev, fctrl); in mei_hbm_cl_tx_flow_ctrl_creds_res()
762 cl_dbg(dev, cl, "flow control creds = %d.\n", in mei_hbm_cl_tx_flow_ctrl_creds_res()
776 int mei_hbm_cl_disconnect_req(struct mei_device *dev, struct mei_cl *cl) in mei_hbm_cl_disconnect_req() argument
780 return mei_hbm_cl_write(dev, cl, CLIENT_DISCONNECT_REQ_CMD, in mei_hbm_cl_disconnect_req()
792 int mei_hbm_cl_disconnect_rsp(struct mei_device *dev, struct mei_cl *cl) in mei_hbm_cl_disconnect_rsp() argument
796 return mei_hbm_cl_write(dev, cl, CLIENT_DISCONNECT_RES_CMD, in mei_hbm_cl_disconnect_rsp()
808 static void mei_hbm_cl_disconnect_res(struct mei_device *dev, struct mei_cl *cl, in mei_hbm_cl_disconnect_res() argument
814 cl_dbg(dev, cl, "hbm: disconnect response status=%d\n", rs->status); in mei_hbm_cl_disconnect_res()
829 int mei_hbm_cl_connect_req(struct mei_device *dev, struct mei_cl *cl) in mei_hbm_cl_connect_req() argument
833 return mei_hbm_cl_write(dev, cl, CLIENT_CONNECT_REQ_CMD, in mei_hbm_cl_connect_req()
845 static void mei_hbm_cl_connect_res(struct mei_device *dev, struct mei_cl *cl, in mei_hbm_cl_connect_res() argument
851 cl_dbg(dev, cl, "hbm: connect response status=%s\n", in mei_hbm_cl_connect_res()
859 mei_me_cl_del(dev, cl->me_cl); in mei_hbm_cl_connect_res()
860 if (dev->dev_state == MEI_DEV_ENABLED) in mei_hbm_cl_connect_res()
861 schedule_work(&dev->bus_rescan_work); in mei_hbm_cl_connect_res()
875 static void mei_hbm_cl_res(struct mei_device *dev, in mei_hbm_cl_res() argument
883 list_for_each_entry_safe(cb, next, &dev->ctrl_rd_list, list) { in mei_hbm_cl_res()
901 mei_hbm_cl_connect_res(dev, cl, rs); in mei_hbm_cl_res()
904 mei_hbm_cl_disconnect_res(dev, cl, rs); in mei_hbm_cl_res()
907 mei_hbm_cl_notify_start_res(dev, cl, rs); in mei_hbm_cl_res()
910 mei_hbm_cl_notify_stop_res(dev, cl, rs); in mei_hbm_cl_res()
930 static int mei_hbm_fw_disconnect_req(struct mei_device *dev, in mei_hbm_fw_disconnect_req() argument
936 cl = mei_hbm_cl_find_by_cmd(dev, disconnect_req); in mei_hbm_fw_disconnect_req()
938 cl_warn(dev, cl, "fw disconnect request received\n"); in mei_hbm_fw_disconnect_req()
957 static int mei_hbm_pg_enter_res(struct mei_device *dev) in mei_hbm_pg_enter_res() argument
959 if (mei_pg_state(dev) != MEI_PG_OFF || in mei_hbm_pg_enter_res()
960 dev->pg_event != MEI_PG_EVENT_WAIT) { in mei_hbm_pg_enter_res()
961 dev_err(dev->dev, "hbm: pg entry response: state mismatch [%s, %d]\n", in mei_hbm_pg_enter_res()
962 mei_pg_state_str(mei_pg_state(dev)), dev->pg_event); in mei_hbm_pg_enter_res()
966 dev->pg_event = MEI_PG_EVENT_RECEIVED; in mei_hbm_pg_enter_res()
967 wake_up(&dev->wait_pg); in mei_hbm_pg_enter_res()
977 void mei_hbm_pg_resume(struct mei_device *dev) in mei_hbm_pg_resume() argument
979 pm_request_resume(dev->dev); in mei_hbm_pg_resume()
990 static int mei_hbm_pg_exit_res(struct mei_device *dev) in mei_hbm_pg_exit_res() argument
992 if (mei_pg_state(dev) != MEI_PG_ON || in mei_hbm_pg_exit_res()
993 (dev->pg_event != MEI_PG_EVENT_WAIT && in mei_hbm_pg_exit_res()
994 dev->pg_event != MEI_PG_EVENT_IDLE)) { in mei_hbm_pg_exit_res()
995 dev_err(dev->dev, "hbm: pg exit response: state mismatch [%s, %d]\n", in mei_hbm_pg_exit_res()
996 mei_pg_state_str(mei_pg_state(dev)), dev->pg_event); in mei_hbm_pg_exit_res()
1000 switch (dev->pg_event) { in mei_hbm_pg_exit_res()
1002 dev->pg_event = MEI_PG_EVENT_RECEIVED; in mei_hbm_pg_exit_res()
1003 wake_up(&dev->wait_pg); in mei_hbm_pg_exit_res()
1011 dev->pg_event = MEI_PG_EVENT_RECEIVED; in mei_hbm_pg_exit_res()
1012 mei_hbm_pg_resume(dev); in mei_hbm_pg_exit_res()
1016 dev->pg_event); in mei_hbm_pg_exit_res()
1029 static void mei_hbm_config_features(struct mei_device *dev) in mei_hbm_config_features() argument
1032 dev->hbm_f_pg_supported = 0; in mei_hbm_config_features()
1033 if (dev->version.major_version > HBM_MAJOR_VERSION_PGI) in mei_hbm_config_features()
1034 dev->hbm_f_pg_supported = 1; in mei_hbm_config_features()
1036 if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && in mei_hbm_config_features()
1037 dev->version.minor_version >= HBM_MINOR_VERSION_PGI) in mei_hbm_config_features()
1038 dev->hbm_f_pg_supported = 1; in mei_hbm_config_features()
1040 dev->hbm_f_dc_supported = 0; in mei_hbm_config_features()
1041 if (dev->version.major_version >= HBM_MAJOR_VERSION_DC) in mei_hbm_config_features()
1042 dev->hbm_f_dc_supported = 1; in mei_hbm_config_features()
1044 dev->hbm_f_ie_supported = 0; in mei_hbm_config_features()
1045 if (dev->version.major_version >= HBM_MAJOR_VERSION_IE) in mei_hbm_config_features()
1046 dev->hbm_f_ie_supported = 1; in mei_hbm_config_features()
1049 dev->hbm_f_dot_supported = 0; in mei_hbm_config_features()
1050 if (dev->version.major_version >= HBM_MAJOR_VERSION_DOT) in mei_hbm_config_features()
1051 dev->hbm_f_dot_supported = 1; in mei_hbm_config_features()
1054 dev->hbm_f_ev_supported = 0; in mei_hbm_config_features()
1055 if (dev->version.major_version >= HBM_MAJOR_VERSION_EV) in mei_hbm_config_features()
1056 dev->hbm_f_ev_supported = 1; in mei_hbm_config_features()
1059 dev->hbm_f_fa_supported = 0; in mei_hbm_config_features()
1060 if (dev->version.major_version >= HBM_MAJOR_VERSION_FA) in mei_hbm_config_features()
1061 dev->hbm_f_fa_supported = 1; in mei_hbm_config_features()
1064 dev->hbm_f_os_supported = 0; in mei_hbm_config_features()
1065 if (dev->version.major_version >= HBM_MAJOR_VERSION_OS) in mei_hbm_config_features()
1066 dev->hbm_f_os_supported = 1; in mei_hbm_config_features()
1069 dev->hbm_f_dr_supported = 0; in mei_hbm_config_features()
1070 if (dev->version.major_version > HBM_MAJOR_VERSION_DR || in mei_hbm_config_features()
1071 (dev->version.major_version == HBM_MAJOR_VERSION_DR && in mei_hbm_config_features()
1072 dev->version.minor_version >= HBM_MINOR_VERSION_DR)) in mei_hbm_config_features()
1073 dev->hbm_f_dr_supported = 1; in mei_hbm_config_features()
1076 dev->hbm_f_vt_supported = 0; in mei_hbm_config_features()
1077 if (dev->version.major_version > HBM_MAJOR_VERSION_VT || in mei_hbm_config_features()
1078 (dev->version.major_version == HBM_MAJOR_VERSION_VT && in mei_hbm_config_features()
1079 dev->version.minor_version >= HBM_MINOR_VERSION_VT)) in mei_hbm_config_features()
1080 dev->hbm_f_vt_supported = 1; in mei_hbm_config_features()
1083 dev->hbm_f_cap_supported = 0; in mei_hbm_config_features()
1084 if (dev->version.major_version > HBM_MAJOR_VERSION_CAP || in mei_hbm_config_features()
1085 (dev->version.major_version == HBM_MAJOR_VERSION_CAP && in mei_hbm_config_features()
1086 dev->version.minor_version >= HBM_MINOR_VERSION_CAP)) in mei_hbm_config_features()
1087 dev->hbm_f_cap_supported = 1; in mei_hbm_config_features()
1097 bool mei_hbm_version_is_supported(struct mei_device *dev) in mei_hbm_version_is_supported() argument
1099 return (dev->version.major_version < HBM_MAJOR_VERSION) || in mei_hbm_version_is_supported()
1100 (dev->version.major_version == HBM_MAJOR_VERSION && in mei_hbm_version_is_supported()
1101 dev->version.minor_version <= HBM_MINOR_VERSION); in mei_hbm_version_is_supported()
1113 int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) in mei_hbm_dispatch() argument
1129 BUG_ON(hdr->length >= sizeof(dev->rd_msg_buf)); in mei_hbm_dispatch()
1130 mei_read_slots(dev, dev->rd_msg_buf, hdr->length); in mei_hbm_dispatch()
1131 mei_msg = (struct mei_bus_message *)dev->rd_msg_buf; in mei_hbm_dispatch()
1137 if (dev->hbm_state == MEI_HBM_IDLE) { in mei_hbm_dispatch()
1138 dev_dbg(dev->dev, "hbm: state is idle ignore spurious messages\n"); in mei_hbm_dispatch()
1144 dev_dbg(dev->dev, "hbm: start: response message received.\n"); in mei_hbm_dispatch()
1146 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1150 dev_dbg(dev->dev, "HBM VERSION: DRIVER=%02d:%02d DEVICE=%02d:%02d\n", in mei_hbm_dispatch()
1156 dev->version.major_version = HBM_MAJOR_VERSION; in mei_hbm_dispatch()
1157 dev->version.minor_version = HBM_MINOR_VERSION; in mei_hbm_dispatch()
1159 dev->version.major_version = in mei_hbm_dispatch()
1161 dev->version.minor_version = in mei_hbm_dispatch()
1165 if (!mei_hbm_version_is_supported(dev)) { in mei_hbm_dispatch()
1166 dev_warn(dev->dev, "hbm: start: version mismatch - stopping the driver.\n"); in mei_hbm_dispatch()
1168 dev->hbm_state = MEI_HBM_STOPPED; in mei_hbm_dispatch()
1169 if (mei_hbm_stop_req(dev)) { in mei_hbm_dispatch()
1170 dev_err(dev->dev, "hbm: start: failed to send stop request\n"); in mei_hbm_dispatch()
1176 mei_hbm_config_features(dev); in mei_hbm_dispatch()
1178 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || in mei_hbm_dispatch()
1179 dev->hbm_state != MEI_HBM_STARTING) { in mei_hbm_dispatch()
1180 dev_err(dev->dev, "hbm: start: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1181 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1185 if (dev->hbm_f_cap_supported) { in mei_hbm_dispatch()
1186 if (mei_hbm_capabilities_req(dev)) in mei_hbm_dispatch()
1188 wake_up(&dev->wait_hbm_start); in mei_hbm_dispatch()
1192 if (dev->hbm_f_dr_supported) { in mei_hbm_dispatch()
1193 if (mei_dmam_ring_alloc(dev)) in mei_hbm_dispatch()
1194 dev_info(dev->dev, "running w/o dma ring\n"); in mei_hbm_dispatch()
1195 if (mei_dma_ring_is_allocated(dev)) { in mei_hbm_dispatch()
1196 if (mei_hbm_dma_setup_req(dev)) in mei_hbm_dispatch()
1199 wake_up(&dev->wait_hbm_start); in mei_hbm_dispatch()
1204 dev->hbm_f_dr_supported = 0; in mei_hbm_dispatch()
1205 mei_dmam_ring_free(dev); in mei_hbm_dispatch()
1207 if (mei_hbm_enum_clients_req(dev)) in mei_hbm_dispatch()
1210 wake_up(&dev->wait_hbm_start); in mei_hbm_dispatch()
1214 dev_dbg(dev->dev, "hbm: capabilities response: message received.\n"); in mei_hbm_dispatch()
1216 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1218 if (dev->hbm_state != MEI_HBM_CAP_SETUP) { in mei_hbm_dispatch()
1219 dev_err(dev->dev, "hbm: capabilities response: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1220 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1226 dev->hbm_f_vt_supported = 0; in mei_hbm_dispatch()
1228 if (dev->hbm_f_dr_supported) { in mei_hbm_dispatch()
1229 if (mei_dmam_ring_alloc(dev)) in mei_hbm_dispatch()
1230 dev_info(dev->dev, "running w/o dma ring\n"); in mei_hbm_dispatch()
1231 if (mei_dma_ring_is_allocated(dev)) { in mei_hbm_dispatch()
1232 if (mei_hbm_dma_setup_req(dev)) in mei_hbm_dispatch()
1238 dev->hbm_f_dr_supported = 0; in mei_hbm_dispatch()
1239 mei_dmam_ring_free(dev); in mei_hbm_dispatch()
1241 if (mei_hbm_enum_clients_req(dev)) in mei_hbm_dispatch()
1246 dev_dbg(dev->dev, "hbm: dma setup response: message received.\n"); in mei_hbm_dispatch()
1248 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1250 if (dev->hbm_state != MEI_HBM_DR_SETUP) { in mei_hbm_dispatch()
1251 dev_err(dev->dev, "hbm: dma setup response: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1252 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1262 dev_dbg(dev->dev, "hbm: dma setup not allowed\n"); in mei_hbm_dispatch()
1264 dev_info(dev->dev, "hbm: dma setup response: failure = %d %s\n", in mei_hbm_dispatch()
1268 dev->hbm_f_dr_supported = 0; in mei_hbm_dispatch()
1269 mei_dmam_ring_free(dev); in mei_hbm_dispatch()
1272 if (mei_hbm_enum_clients_req(dev)) in mei_hbm_dispatch()
1277 dev_dbg(dev->dev, "hbm: client connect response: message received.\n"); in mei_hbm_dispatch()
1278 mei_hbm_cl_res(dev, cl_cmd, MEI_FOP_CONNECT); in mei_hbm_dispatch()
1282 dev_dbg(dev->dev, "hbm: client disconnect response: message received.\n"); in mei_hbm_dispatch()
1283 mei_hbm_cl_res(dev, cl_cmd, MEI_FOP_DISCONNECT); in mei_hbm_dispatch()
1287 dev_dbg(dev->dev, "hbm: client flow control response: message received.\n"); in mei_hbm_dispatch()
1290 mei_hbm_cl_tx_flow_ctrl_creds_res(dev, fctrl); in mei_hbm_dispatch()
1294 dev_dbg(dev->dev, "hbm: power gate isolation entry response received\n"); in mei_hbm_dispatch()
1295 ret = mei_hbm_pg_enter_res(dev); in mei_hbm_dispatch()
1301 dev_dbg(dev->dev, "hbm: power gate isolation exit request received\n"); in mei_hbm_dispatch()
1302 ret = mei_hbm_pg_exit_res(dev); in mei_hbm_dispatch()
1308 dev_dbg(dev->dev, "hbm: properties response: message received.\n"); in mei_hbm_dispatch()
1310 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1312 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || in mei_hbm_dispatch()
1313 dev->hbm_state != MEI_HBM_CLIENT_PROPERTIES) { in mei_hbm_dispatch()
1314 dev_err(dev->dev, "hbm: properties response: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1315 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1322 dev_dbg(dev->dev, "hbm: properties response: %d CLIENT_NOT_FOUND\n", in mei_hbm_dispatch()
1325 dev_err(dev->dev, "hbm: properties response: wrong status = %d %s\n", in mei_hbm_dispatch()
1330 mei_hbm_me_cl_add(dev, props_res); in mei_hbm_dispatch()
1334 if (mei_hbm_prop_req(dev, props_res->me_addr + 1)) in mei_hbm_dispatch()
1340 dev_dbg(dev->dev, "hbm: enumeration response: message received\n"); in mei_hbm_dispatch()
1342 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1345 BUILD_BUG_ON(sizeof(dev->me_clients_map) in mei_hbm_dispatch()
1347 memcpy(dev->me_clients_map, enum_res->valid_addresses, in mei_hbm_dispatch()
1350 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || in mei_hbm_dispatch()
1351 dev->hbm_state != MEI_HBM_ENUM_CLIENTS) { in mei_hbm_dispatch()
1352 dev_err(dev->dev, "hbm: enumeration response: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1353 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1357 dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES; in mei_hbm_dispatch()
1360 if (mei_hbm_prop_req(dev, 0)) in mei_hbm_dispatch()
1366 dev_dbg(dev->dev, "hbm: stop response: message received\n"); in mei_hbm_dispatch()
1368 dev->init_clients_timer = 0; in mei_hbm_dispatch()
1370 if (dev->hbm_state != MEI_HBM_STOPPED) { in mei_hbm_dispatch()
1371 dev_err(dev->dev, "hbm: stop response: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1372 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1376 mei_set_devstate(dev, MEI_DEV_POWER_DOWN); in mei_hbm_dispatch()
1377 dev_info(dev->dev, "hbm: stop response: resetting.\n"); in mei_hbm_dispatch()
1383 dev_dbg(dev->dev, "hbm: disconnect request: message received\n"); in mei_hbm_dispatch()
1386 mei_hbm_fw_disconnect_req(dev, disconnect_req); in mei_hbm_dispatch()
1390 dev_dbg(dev->dev, "hbm: stop request: message received\n"); in mei_hbm_dispatch()
1391 dev->hbm_state = MEI_HBM_STOPPED; in mei_hbm_dispatch()
1392 if (mei_hbm_stop_req(dev)) { in mei_hbm_dispatch()
1393 dev_err(dev->dev, "hbm: stop request: failed to send stop request\n"); in mei_hbm_dispatch()
1399 dev_dbg(dev->dev, "hbm: add client request received\n"); in mei_hbm_dispatch()
1404 if (dev->hbm_state <= MEI_HBM_ENUM_CLIENTS || in mei_hbm_dispatch()
1405 dev->hbm_state >= MEI_HBM_STOPPED) { in mei_hbm_dispatch()
1406 dev_err(dev->dev, "hbm: add client: state mismatch, [%d, %d]\n", in mei_hbm_dispatch()
1407 dev->dev_state, dev->hbm_state); in mei_hbm_dispatch()
1411 ret = mei_hbm_fw_add_cl_req(dev, add_cl_req); in mei_hbm_dispatch()
1413 dev_err(dev->dev, "hbm: add client: failed to send response %d\n", in mei_hbm_dispatch()
1417 dev_dbg(dev->dev, "hbm: add client request processed\n"); in mei_hbm_dispatch()
1421 dev_dbg(dev->dev, "hbm: notify response received\n"); in mei_hbm_dispatch()
1422 mei_hbm_cl_res(dev, cl_cmd, notify_res_to_fop(cl_cmd)); in mei_hbm_dispatch()
1426 dev_dbg(dev->dev, "hbm: notification\n"); in mei_hbm_dispatch()
1427 mei_hbm_cl_notify(dev, cl_cmd); in mei_hbm_dispatch()