]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
remoteproc: imx_rproc: initial support for mutilple start/stop method
authorPeng Fan <peng.fan@nxp.com>
Thu, 6 May 2021 04:08:40 +0000 (12:08 +0800)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 1 Jun 2021 15:53:16 +0000 (10:53 -0500)
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: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/1620274123-1461-6-git-send-email-peng.fan@oss.nxp.com
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/remoteproc/imx_rproc.c

index 06dac92e98e60194a692b905e59a90bf6faa7836..6289aeae95b645af08f3dfd73274ba335c8d6ab1 100644 (file)
@@ -74,6 +74,15 @@ struct imx_rproc_att {
        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 {
        u32                             src_reg;
        u32                             src_mask;
@@ -81,6 +90,7 @@ struct imx_rproc_dcfg {
        u32                             src_stop;
        const struct imx_rproc_att      *att;
        size_t                          att_size;
+       enum imx_rproc_method           method;
 };
 
 struct imx_rproc {
@@ -183,6 +193,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
        .src_stop       = IMX7D_M4_STOP,
        .att            = 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 = {
@@ -192,6 +203,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
        .src_stop       = IMX7D_M4_STOP,
        .att            = 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 = {
@@ -201,6 +213,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
        .src_stop       = IMX6SX_M4_STOP,
        .att            = imx_rproc_att_imx6sx,
        .att_size       = ARRAY_SIZE(imx_rproc_att_imx6sx),
+       .method         = IMX_RPROC_MMIO,
 };
 
 static int imx_rproc_start(struct rproc *rproc)