mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
remoteproc: imx_dsp_rproc: Simplify IMX_RPROC_SCU_API switch case
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.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Tested-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20251119-imx-dsp-2025-11-19-v4-9-adafd342d07b@nxp.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
This commit is contained in:
committed by
Mathieu Poirier
parent
9f356d1277
commit
d5eb4d512f
@@ -346,6 +346,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
|
||||
*
|
||||
@@ -368,12 +375,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;
|
||||
@@ -398,6 +399,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
|
||||
@@ -421,12 +429,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;
|
||||
@@ -1055,6 +1057,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
|
||||
@@ -1078,11 +1087,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)) {
|
||||
@@ -1320,6 +1324,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,
|
||||
@@ -1352,7 +1362,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 = {
|
||||
@@ -1363,7 +1373,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 = {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user