sc_ipc 27 drivers/firmware/imx/imx-scu.c struct imx_sc_ipc *sc_ipc; sc_ipc 116 drivers/firmware/imx/imx-scu.c struct imx_sc_ipc *sc_ipc = sc_chan->sc_ipc; sc_ipc 121 drivers/firmware/imx/imx-scu.c if (!sc_ipc->msg) { sc_ipc 122 drivers/firmware/imx/imx-scu.c dev_warn(sc_ipc->dev, "unexpected rx idx %d 0x%08x, ignore!\n", sc_ipc 127 drivers/firmware/imx/imx-scu.c if (sc_ipc->fast_ipc) { sc_ipc 129 drivers/firmware/imx/imx-scu.c sc_ipc->rx_size = hdr->size; sc_ipc 130 drivers/firmware/imx/imx-scu.c sc_ipc->msg[0] = *data++; sc_ipc 132 drivers/firmware/imx/imx-scu.c for (i = 1; i < sc_ipc->rx_size; i++) sc_ipc 133 drivers/firmware/imx/imx-scu.c sc_ipc->msg[i] = *data++; sc_ipc 135 drivers/firmware/imx/imx-scu.c complete(&sc_ipc->done); sc_ipc 142 drivers/firmware/imx/imx-scu.c sc_ipc->rx_size = hdr->size; sc_ipc 143 drivers/firmware/imx/imx-scu.c dev_dbg(sc_ipc->dev, "msg rx size %u\n", sc_ipc->rx_size); sc_ipc 144 drivers/firmware/imx/imx-scu.c if (sc_ipc->rx_size > 4) sc_ipc 145 drivers/firmware/imx/imx-scu.c dev_warn(sc_ipc->dev, "RPC does not support receiving over 4 words: %u\n", sc_ipc 146 drivers/firmware/imx/imx-scu.c sc_ipc->rx_size); sc_ipc 149 drivers/firmware/imx/imx-scu.c sc_ipc->msg[sc_chan->idx] = *data; sc_ipc 150 drivers/firmware/imx/imx-scu.c sc_ipc->count++; sc_ipc 152 drivers/firmware/imx/imx-scu.c dev_dbg(sc_ipc->dev, "mu %u msg %u 0x%x\n", sc_chan->idx, sc_ipc 153 drivers/firmware/imx/imx-scu.c sc_ipc->count, *data); sc_ipc 155 drivers/firmware/imx/imx-scu.c if ((sc_ipc->rx_size != 0) && (sc_ipc->count == sc_ipc->rx_size)) sc_ipc 156 drivers/firmware/imx/imx-scu.c complete(&sc_ipc->done); sc_ipc 159 drivers/firmware/imx/imx-scu.c static int imx_scu_ipc_write(struct imx_sc_ipc *sc_ipc, void *msg) sc_ipc 172 drivers/firmware/imx/imx-scu.c dev_dbg(sc_ipc->dev, "RPC SVC %u FUNC %u SIZE %u\n", hdr.svc, sc_ipc 175 drivers/firmware/imx/imx-scu.c size = sc_ipc->fast_ipc ? 1 : hdr.size; sc_ipc 177 drivers/firmware/imx/imx-scu.c sc_chan = &sc_ipc->chans[i % 4]; sc_ipc 188 drivers/firmware/imx/imx-scu.c if (!sc_ipc->fast_ipc) { sc_ipc 204 drivers/firmware/imx/imx-scu.c int imx_scu_call_rpc(struct imx_sc_ipc *sc_ipc, void *msg, bool have_resp) sc_ipc 209 drivers/firmware/imx/imx-scu.c if (WARN_ON(!sc_ipc || !msg)) sc_ipc 212 drivers/firmware/imx/imx-scu.c mutex_lock(&sc_ipc->lock); sc_ipc 213 drivers/firmware/imx/imx-scu.c reinit_completion(&sc_ipc->done); sc_ipc 216 drivers/firmware/imx/imx-scu.c sc_ipc->msg = msg; sc_ipc 217 drivers/firmware/imx/imx-scu.c sc_ipc->count = 0; sc_ipc 218 drivers/firmware/imx/imx-scu.c ret = imx_scu_ipc_write(sc_ipc, msg); sc_ipc 220 drivers/firmware/imx/imx-scu.c dev_err(sc_ipc->dev, "RPC send msg failed: %d\n", ret); sc_ipc 225 drivers/firmware/imx/imx-scu.c if (!wait_for_completion_timeout(&sc_ipc->done, sc_ipc 227 drivers/firmware/imx/imx-scu.c dev_err(sc_ipc->dev, "RPC send msg timeout\n"); sc_ipc 228 drivers/firmware/imx/imx-scu.c mutex_unlock(&sc_ipc->lock); sc_ipc 238 drivers/firmware/imx/imx-scu.c sc_ipc->msg = NULL; sc_ipc 239 drivers/firmware/imx/imx-scu.c mutex_unlock(&sc_ipc->lock); sc_ipc 241 drivers/firmware/imx/imx-scu.c dev_dbg(sc_ipc->dev, "RPC SVC done\n"); sc_ipc 250 drivers/firmware/imx/imx-scu.c struct imx_sc_ipc *sc_ipc; sc_ipc 259 drivers/firmware/imx/imx-scu.c sc_ipc = devm_kzalloc(dev, sizeof(*sc_ipc), GFP_KERNEL); sc_ipc 260 drivers/firmware/imx/imx-scu.c if (!sc_ipc) sc_ipc 268 drivers/firmware/imx/imx-scu.c sc_ipc->fast_ipc = of_device_is_compatible(args.np, "fsl,imx8-mu-scu"); sc_ipc 270 drivers/firmware/imx/imx-scu.c num_channel = sc_ipc->fast_ipc ? 2 : SCU_MU_CHAN_NUM; sc_ipc 281 drivers/firmware/imx/imx-scu.c sc_chan = &sc_ipc->chans[i]; sc_ipc 288 drivers/firmware/imx/imx-scu.c if (!sc_ipc->fast_ipc) { sc_ipc 295 drivers/firmware/imx/imx-scu.c sc_chan->sc_ipc = sc_ipc; sc_ipc 311 drivers/firmware/imx/imx-scu.c sc_ipc->dev = dev; sc_ipc 312 drivers/firmware/imx/imx-scu.c mutex_init(&sc_ipc->lock); sc_ipc 313 drivers/firmware/imx/imx-scu.c init_completion(&sc_ipc->done); sc_ipc 315 drivers/firmware/imx/imx-scu.c imx_sc_ipc_handle = sc_ipc; sc_ipc 51 sound/soc/sof/imx/imx8.c struct imx_sc_ipc *sc_ipc; sc_ipc 146 sound/soc/sof/imx/imx8.c ret = imx_sc_misc_set_control(dsp_priv->sc_ipc, IMX_SC_R_DSP, sc_ipc 153 sound/soc/sof/imx/imx8.c ret = imx_sc_misc_set_control(dsp_priv->sc_ipc, IMX_SC_R_DSP, sc_ipc 160 sound/soc/sof/imx/imx8.c ret = imx_sc_misc_set_control(dsp_priv->sc_ipc, IMX_SC_R_DSP, sc_ipc 168 sound/soc/sof/imx/imx8.c ret = imx_sc_misc_set_control(dsp_priv->sc_ipc, IMX_SC_R_DSP, sc_ipc 175 sound/soc/sof/imx/imx8.c imx_sc_pm_cpu_start(dsp_priv->sc_ipc, IMX_SC_R_DSP, true, sc_ipc 237 sound/soc/sof/imx/imx8.c ret = imx_scu_get_handle(&priv->sc_ipc);