Commit 52bda8d3 authored by Peng Fan's avatar Peng Fan Committed by Bjorn Andersson

remoteproc: imx_rproc: initial support for mutilple start/stop method

Add three methods IMX_RPROC_NONE(no need start/stop), IMX_RPROC_MMIO
(start/stop through mmio) and IMX_RPROC_SMC(start/stop through ARM SMCCC).

The current SoCs supported are all using IMX_RPROC_MMIO.
Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/1620274123-1461-6-git-send-email-peng.fan@oss.nxp.comSigned-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent e13d1a43
...@@ -74,6 +74,15 @@ struct imx_rproc_att { ...@@ -74,6 +74,15 @@ struct imx_rproc_att {
int flags; int flags;
}; };
/* Remote core start/stop method */
enum imx_rproc_method {
IMX_RPROC_NONE,
/* Through syscon regmap */
IMX_RPROC_MMIO,
/* Through ARM SMCCC */
IMX_RPROC_SMC,
};
struct imx_rproc_dcfg { struct imx_rproc_dcfg {
u32 src_reg; u32 src_reg;
u32 src_mask; u32 src_mask;
...@@ -81,6 +90,7 @@ struct imx_rproc_dcfg { ...@@ -81,6 +90,7 @@ struct imx_rproc_dcfg {
u32 src_stop; u32 src_stop;
const struct imx_rproc_att *att; const struct imx_rproc_att *att;
size_t att_size; size_t att_size;
enum imx_rproc_method method;
}; };
struct imx_rproc { struct imx_rproc {
...@@ -183,6 +193,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = { ...@@ -183,6 +193,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.src_stop = IMX7D_M4_STOP, .src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx8mq, .att = imx_rproc_att_imx8mq,
.att_size = ARRAY_SIZE(imx_rproc_att_imx8mq), .att_size = ARRAY_SIZE(imx_rproc_att_imx8mq),
.method = IMX_RPROC_MMIO,
}; };
static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = { static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
...@@ -192,6 +203,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = { ...@@ -192,6 +203,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
.src_stop = IMX7D_M4_STOP, .src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx7d, .att = imx_rproc_att_imx7d,
.att_size = ARRAY_SIZE(imx_rproc_att_imx7d), .att_size = ARRAY_SIZE(imx_rproc_att_imx7d),
.method = IMX_RPROC_MMIO,
}; };
static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = { static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
...@@ -201,6 +213,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = { ...@@ -201,6 +213,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
.src_stop = IMX6SX_M4_STOP, .src_stop = IMX6SX_M4_STOP,
.att = imx_rproc_att_imx6sx, .att = imx_rproc_att_imx6sx,
.att_size = ARRAY_SIZE(imx_rproc_att_imx6sx), .att_size = ARRAY_SIZE(imx_rproc_att_imx6sx),
.method = IMX_RPROC_MMIO,
}; };
static int imx_rproc_start(struct rproc *rproc) static int imx_rproc_start(struct rproc *rproc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment