On Fri, Oct 31, 2025 at 05:08:38PM +0800, Peng Fan wrote:
> Introduce imx_dsp_rproc_scu_api_{start, stop, detect_mode}() helper
> functions for i.MX variants using IMX_RPROC_SCU_API to manage remote
> processors.
>
> Allows the removal of the IMX_RPROC_SCU_API switch-case blocks from
> imx_dsp_rproc_[start,stop,detect_mode](), resulting in cleaner and more
> maintainable code.
>
> No functional changes.
>
> Signed-off-by: Peng Fan <[email protected]>
> ---Reviewed-by: Frank Li <[email protected]> > drivers/remoteproc/imx_dsp_rproc.c | 48 > +++++++++++++++++++++++--------------- > drivers/remoteproc/imx_rproc.h | 2 -- > 2 files changed, 29 insertions(+), 21 deletions(-) > > diff --git a/drivers/remoteproc/imx_dsp_rproc.c > b/drivers/remoteproc/imx_dsp_rproc.c > index > 456a46f163d3d823a25d16d11fb79fa9fceb2ddb..56e94754d5c5feba112227c45b0f99a4fe868926 > 100644 > --- a/drivers/remoteproc/imx_dsp_rproc.c > +++ b/drivers/remoteproc/imx_dsp_rproc.c > @@ -347,6 +347,13 @@ static int imx_dsp_rproc_mmio_start(struct rproc *rproc) > return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, > dcfg->src_start); > } > > +static int imx_dsp_rproc_scu_api_start(struct rproc *rproc) > +{ > + struct imx_dsp_rproc *priv = rproc->priv; > + > + return imx_sc_pm_cpu_start(priv->ipc_handle, IMX_SC_R_DSP, true, > rproc->bootaddr); > +} > + > /* > * Start function for rproc_ops > * > @@ -369,12 +376,6 @@ static int imx_dsp_rproc_start(struct rproc *rproc) > } > > switch (dcfg->method) { > - case IMX_RPROC_SCU_API: > - ret = imx_sc_pm_cpu_start(priv->ipc_handle, > - IMX_SC_R_DSP, > - true, > - rproc->bootaddr); > - break; > case IMX_RPROC_RESET_CONTROLLER: > ret = reset_control_deassert(priv->run_stall); > break; > @@ -400,6 +401,13 @@ static int imx_dsp_rproc_mmio_stop(struct rproc *rproc) > return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, > dcfg->src_stop); > } > > +static int imx_dsp_rproc_scu_api_stop(struct rproc *rproc) > +{ > + struct imx_dsp_rproc *priv = rproc->priv; > + > + return imx_sc_pm_cpu_start(priv->ipc_handle, IMX_SC_R_DSP, false, > rproc->bootaddr); > +} > + > /* > * Stop function for rproc_ops > * It clears the REMOTE_IS_READY flags > @@ -423,12 +431,6 @@ static int imx_dsp_rproc_stop(struct rproc *rproc) > } > > switch (dcfg->method) { > - case IMX_RPROC_SCU_API: > - ret = imx_sc_pm_cpu_start(priv->ipc_handle, > - IMX_SC_R_DSP, > - false, > - rproc->bootaddr); > - break; > case IMX_RPROC_RESET_CONTROLLER: > ret = reset_control_assert(priv->run_stall); > break; > @@ -1057,6 +1059,13 @@ static int imx_dsp_rproc_mmio_detect_mode(struct rproc > *rproc) > return 0; > } > > +static int imx_dsp_rproc_scu_api_detect_mode(struct rproc *rproc) > +{ > + struct imx_dsp_rproc *priv = rproc->priv; > + > + return imx_scu_get_handle(&priv->ipc_handle); > +} > + > /** > * imx_dsp_rproc_detect_mode() - detect DSP control mode > * @priv: private data pointer > @@ -1080,11 +1089,6 @@ static int imx_dsp_rproc_detect_mode(struct > imx_dsp_rproc *priv) > return dcfg->ops->detect_mode(priv->rproc); > > switch (dsp_dcfg->dcfg->method) { > - case IMX_RPROC_SCU_API: > - ret = imx_scu_get_handle(&priv->ipc_handle); > - if (ret) > - return ret; > - break; > case IMX_RPROC_RESET_CONTROLLER: > priv->run_stall = devm_reset_control_get_exclusive(dev, > "runstall"); > if (IS_ERR(priv->run_stall)) { > @@ -1322,6 +1326,12 @@ static const struct imx_rproc_plat_ops > imx_dsp_rproc_ops_mmio = { > .detect_mode = imx_dsp_rproc_mmio_detect_mode, > }; > > +static const struct imx_rproc_plat_ops imx_dsp_rproc_ops_scu_api = { > + .start = imx_dsp_rproc_scu_api_start, > + .stop = imx_dsp_rproc_scu_api_stop, > + .detect_mode = imx_dsp_rproc_scu_api_detect_mode, > +}; > + > /* Specific configuration for i.MX8MP */ > static const struct imx_rproc_dcfg dsp_rproc_cfg_imx8mp = { > .att = imx_dsp_rproc_att_imx8mp, > @@ -1354,7 +1364,7 @@ static const struct imx_dsp_rproc_dcfg > imx_dsp_rproc_cfg_imx8ulp = { > static const struct imx_rproc_dcfg dsp_rproc_cfg_imx8qxp = { > .att = imx_dsp_rproc_att_imx8qxp, > .att_size = ARRAY_SIZE(imx_dsp_rproc_att_imx8qxp), > - .method = IMX_RPROC_SCU_API, > + .ops = &imx_dsp_rproc_ops_scu_api, > }; > > static const struct imx_dsp_rproc_dcfg imx_dsp_rproc_cfg_imx8qxp = { > @@ -1365,7 +1375,7 @@ static const struct imx_dsp_rproc_dcfg > imx_dsp_rproc_cfg_imx8qxp = { > static const struct imx_rproc_dcfg dsp_rproc_cfg_imx8qm = { > .att = imx_dsp_rproc_att_imx8qm, > .att_size = ARRAY_SIZE(imx_dsp_rproc_att_imx8qm), > - .method = IMX_RPROC_SCU_API, > + .ops = &imx_dsp_rproc_ops_scu_api, > }; > > static const struct imx_dsp_rproc_dcfg imx_dsp_rproc_cfg_imx8qm = { > diff --git a/drivers/remoteproc/imx_rproc.h b/drivers/remoteproc/imx_rproc.h > index > 912827c39c0dedeed76c13740efd42a8e7cf9c45..a6b4625e8be76c6eb6a5d8ef45eb5f3aec5fe375 > 100644 > --- a/drivers/remoteproc/imx_rproc.h > +++ b/drivers/remoteproc/imx_rproc.h > @@ -20,8 +20,6 @@ enum imx_rproc_method { > IMX_RPROC_NONE, > /* Through ARM SMCCC */ > IMX_RPROC_SMC, > - /* Through System Control Unit API */ > - IMX_RPROC_SCU_API, > /* Through Reset Controller API */ > IMX_RPROC_RESET_CONTROLLER, > }; > > -- > 2.37.1 >

