Lines Matching defs:ipc_imem

16 int ipc_imem_sys_wwan_open(struct iosm_imem *ipc_imem, int if_id)
18 dev_dbg(ipc_imem->dev, "%s if id: %d",
19 ipc_imem_phase_get_string(ipc_imem->phase), if_id);
22 if (ipc_imem_phase_update(ipc_imem) != IPC_P_RUN) {
23 dev_err(ipc_imem->dev, "net:%d : refused phase %s", if_id,
24 ipc_imem_phase_get_string(ipc_imem->phase));
28 return ipc_mux_open_session(ipc_imem->mux, if_id);
32 void ipc_imem_sys_wwan_close(struct iosm_imem *ipc_imem, int if_id,
35 if (ipc_imem->mux && if_id >= IP_MUX_SESSION_START &&
37 ipc_mux_close_session(ipc_imem->mux, if_id);
41 static int ipc_imem_tq_cdev_write(struct iosm_imem *ipc_imem, int arg,
44 ipc_imem_ul_send(ipc_imem);
50 static int ipc_imem_call_cdev_write(struct iosm_imem *ipc_imem)
52 return ipc_task_queue_send_task(ipc_imem, ipc_imem_tq_cdev_write, 0,
57 int ipc_imem_sys_wwan_transmit(struct iosm_imem *ipc_imem,
62 if (!ipc_imem || channel_id < 0)
66 if (ipc_imem->phase != IPC_P_RUN) {
67 dev_dbg(ipc_imem->dev, "phase %s transmit",
68 ipc_imem_phase_get_string(ipc_imem->phase));
74 ret = ipc_mux_ul_trigger_encode(ipc_imem->mux, if_id, skb);
80 int ipc_imem_wwan_channel_init(struct iosm_imem *ipc_imem,
85 ipc_imem->cp_version = ipc_mmio_get_cp_version(ipc_imem->mmio);
88 if (ipc_imem->cp_version == -1) {
89 dev_err(ipc_imem->dev, "invalid CP version");
93 ipc_chnl_cfg_get(&chnl_cfg, ipc_imem->nr_of_channels);
95 if (ipc_imem->mmio->mux_protocol == MUX_AGGREGATION &&
96 ipc_imem->nr_of_channels == IPC_MEM_IP_CHL_ID_0) {
102 ipc_imem_channel_init(ipc_imem, IPC_CTYPE_WWAN, chnl_cfg,
106 ipc_imem->wwan = ipc_wwan_init(ipc_imem, ipc_imem->dev);
107 if (!ipc_imem->wwan) {
108 dev_err(ipc_imem->dev,
117 static int ipc_imem_map_skb_to_dma(struct iosm_imem *ipc_imem,
120 struct iosm_pcie *ipc_pcie = ipc_imem->pcie;
143 static bool ipc_imem_is_channel_active(struct iosm_imem *ipc_imem,
149 phase = ipc_imem->phase;
163 dev_err(ipc_imem->dev,
173 dev_err(ipc_imem->dev, "ch[%d]: confused phase %d",
179 dev_err(ipc_imem->dev, "ch[%d]: confused channel state %d",
193 * @ipc_imem: Imem instance.
196 void ipc_imem_sys_port_close(struct iosm_imem *ipc_imem,
203 curr_phase = ipc_imem->phase;
209 dev_err(ipc_imem->dev,
216 dev_err(ipc_imem->dev, "ch[%d]: invalid channel state %d",
225 ipc_imem->app_notify_ul_pend = 1;
231 (&ipc_imem->ul_pend_sem,
234 dev_dbg(ipc_imem->dev,
241 ipc_imem->app_notify_ul_pend = 0;
247 ipc_protocol_get_head_tail_index(ipc_imem->ipc_protocol,
251 ipc_imem->app_notify_dl_pend = 1;
257 (&ipc_imem->dl_pend_sem,
260 dev_dbg(ipc_imem->dev,
267 ipc_imem->app_notify_dl_pend = 0;
278 ipc_imem_pipe_close(ipc_imem, &channel->ul_pipe);
279 ipc_imem_pipe_close(ipc_imem, &channel->dl_pipe);
285 struct ipc_mem_channel *ipc_imem_sys_port_open(struct iosm_imem *ipc_imem,
292 if (ipc_imem_phase_update(ipc_imem) != IPC_P_RUN) {
293 dev_err(ipc_imem->dev, "PORT open refused, phase %s",
294 ipc_imem_phase_get_string(ipc_imem->phase));
298 ch_id = ipc_imem_channel_alloc(ipc_imem, chl_id, IPC_CTYPE_CTRL);
301 dev_err(ipc_imem->dev, "reservation of an PORT chnl id failed");
305 channel = ipc_imem_channel_open(ipc_imem, ch_id, hp_id);
308 dev_err(ipc_imem->dev, "PORT channel id open failed");
319 struct iosm_imem *ipc_imem = ipc_cdev->ipc_imem;
322 if (!ipc_imem_is_channel_active(ipc_imem, channel) ||
323 ipc_imem->phase == IPC_P_OFF_REQ)
326 ret = ipc_imem_map_skb_to_dma(ipc_imem, skb);
334 ret = ipc_imem_call_cdev_write(ipc_imem);
346 struct ipc_mem_channel *ipc_imem_sys_devlink_open(struct iosm_imem *ipc_imem)
352 phase = ipc_imem_phase_update(ipc_imem);
357 channel_id = ipc_imem_channel_alloc(ipc_imem,
362 dev_err(ipc_imem->dev,
367 ipc_imem->ipc_devlink->devlink_sio.channel_id = channel_id;
368 channel = &ipc_imem->channels[channel_id];
371 if (ipc_imem_devlink_trigger_chip_info(ipc_imem)) {
372 dev_err(ipc_imem->dev, "Enqueue of chip info failed");
381 ipc_imem->cp_version = ipc_mmio_get_cp_version(ipc_imem->mmio);
382 if (ipc_imem->cp_version == -1) {
383 dev_err(ipc_imem->dev, "invalid CP version");
387 channel_id = ipc_imem->ipc_devlink->devlink_sio.channel_id;
388 return ipc_imem_channel_open(ipc_imem, channel_id,
393 dev_err(ipc_imem->dev, "SIO open refused, phase %d", phase);
402 struct iosm_imem *ipc_imem = ipc_devlink->pcie->imem;
409 channel = ipc_imem->ipc_devlink->devlink_sio.channel;
412 exec_stage = ipc_mmio_get_exec_stage(ipc_imem->mmio);
425 (&ipc_imem->ul_pend_sem,
428 dev_dbg(ipc_imem->dev,
436 ipc_protocol_get_head_tail_index(ipc_imem->ipc_protocol,
441 (&ipc_imem->dl_pend_sem,
444 dev_dbg(ipc_imem->dev,
460 ipc_imem_pipe_cleanup(ipc_imem, &channel->ul_pipe);
461 ipc_imem_pipe_cleanup(ipc_imem, &channel->dl_pipe);
462 ipc_imem->nr_of_channels--;
473 static int ipc_imem_sys_psi_transfer(struct iosm_imem *ipc_imem,
483 ret = ipc_pcie_addr_map(ipc_imem->pcie, buf, count, &mapping,
491 ipc_mmio_set_psi_addr_and_size(ipc_imem->mmio, mapping, count);
492 ipc_doorbell_fire(ipc_imem->pcie, 0, IPC_MEM_EXEC_STAGE_BOOT);
499 dev_err(ipc_imem->dev, "Failed PSI transfer to CP, Error-%d",
504 if (ipc_imem->rom_exit_code != IMEM_ROM_EXIT_OPEN_EXT &&
505 ipc_imem->rom_exit_code != IMEM_ROM_EXIT_CERT_EXT) {
506 ret = (-1) * ((int)ipc_imem->rom_exit_code);
510 dev_dbg(ipc_imem->dev, "PSI image successfully downloaded");
517 exec_stage = ipc_mmio_get_exec_stage(ipc_imem->mmio);
529 ipc_imem->phase = IPC_P_PSI;
532 dev_dbg(ipc_imem->dev, "execution_stage[%X] eq. PSI", exec_stage);
537 ipc_imem_ipc_init_check(ipc_imem);
542 dev_err(ipc_imem->dev,
547 if (ipc_mmio_get_ipc_state(ipc_imem->mmio) !=
549 dev_err(ipc_imem->dev,
552 ipc_imem_phase_get_string(ipc_imem->phase),
553 ipc_mmio_get_ipc_state(ipc_imem->mmio));
559 if (!ipc_imem_sys_devlink_open(ipc_imem)) {
560 dev_err(ipc_imem->dev, "can't open flash_channel");
566 ipc_pcie_addr_unmap(ipc_imem->pcie, count, mapping, DMA_TO_DEVICE);
574 struct iosm_imem *ipc_imem = ipc_devlink->pcie->imem;
580 channel = ipc_imem->ipc_devlink->devlink_sio.channel;
585 if (ipc_imem->phase == IPC_P_ROM) {
586 ret = ipc_imem_sys_psi_transfer(ipc_imem, channel, buf, count);
591 ipc_imem_msg_send_feature_set(ipc_imem,
613 if (!ipc_imem_call_cdev_write(ipc_imem)) {
617 dev_err(ipc_imem->dev,