Lines Matching defs:scp

19  * @scp:	mtk_scp structure
28 int scp_ipi_register(struct mtk_scp *scp,
33 if (!scp)
39 scp_ipi_lock(scp, id);
40 scp->ipi_desc[id].handler = handler;
41 scp->ipi_desc[id].priv = priv;
42 scp_ipi_unlock(scp, id);
51 * @scp: mtk_scp structure
56 void scp_ipi_unregister(struct mtk_scp *scp, u32 id)
58 if (!scp)
64 scp_ipi_lock(scp, id);
65 scp->ipi_desc[id].handler = NULL;
66 scp->ipi_desc[id].priv = NULL;
67 scp_ipi_unlock(scp, id);
110 * @scp: mtk_scp structure
115 void scp_ipi_lock(struct mtk_scp *scp, u32 id)
119 mutex_lock(&scp->ipi_desc[id].lock);
126 * @scp: mtk_scp structure
131 void scp_ipi_unlock(struct mtk_scp *scp, u32 id)
135 mutex_unlock(&scp->ipi_desc[id].lock);
140 * scp_ipi_send() - send data from AP to scp.
142 * @scp: mtk_scp structure
155 int scp_ipi_send(struct mtk_scp *scp, u32 id, void *buf, unsigned int len,
158 struct mtk_share_obj __iomem *send_obj = scp->send_buf;
167 ret = clk_prepare_enable(scp->clk);
169 dev_err(scp->dev, "failed to enable clock\n");
173 mutex_lock(&scp->send_lock);
179 dev_err(scp->dev, "%s: IPI timeout!\n", __func__);
183 } while (readl(scp->reg_base + scp->data->host_to_scp_reg));
190 scp->ipi_id_ack[id] = false;
192 writel(scp->data->host_to_scp_int_bit,
193 scp->reg_base + scp->data->host_to_scp_reg);
198 ret = wait_event_timeout(scp->ack_wq,
199 scp->ipi_id_ack[id],
201 scp->ipi_id_ack[id] = false;
202 if (WARN(!ret, "scp ipi %d ack time out !", id))
209 mutex_unlock(&scp->send_lock);
210 clk_disable_unprepare(scp->clk);
217 MODULE_DESCRIPTION("MediaTek scp IPI interface");