Skip to content

Commit 3f5c127

Browse files
MrVanmathieupoirier
authored andcommitted
remoteproc: imx_dsp_rproc: Simplify IMX_RPROC_RESET_CONTROLLER switch case
Introduce imx_dsp_rproc_reset_ctr_{start, stop, detect_mode}() helper functions for i.MX variants using IMX_RPROC_RESET_CONTROLLER to manage remote processors. Allows the removal of the IMX_RPROC_RESET_CONTROLLER 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-10-adafd342d07b@nxp.com Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
1 parent d5eb4d5 commit 3f5c127

2 files changed

Lines changed: 38 additions & 33 deletions

File tree

drivers/remoteproc/imx_dsp_rproc.c

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,13 @@ static int imx_dsp_rproc_mmio_start(struct rproc *rproc)
346346
return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_start);
347347
}
348348

349+
static int imx_dsp_rproc_reset_ctrl_start(struct rproc *rproc)
350+
{
351+
struct imx_dsp_rproc *priv = rproc->priv;
352+
353+
return reset_control_deassert(priv->run_stall);
354+
}
355+
349356
static int imx_dsp_rproc_scu_api_start(struct rproc *rproc)
350357
{
351358
struct imx_dsp_rproc *priv = rproc->priv;
@@ -374,13 +381,7 @@ static int imx_dsp_rproc_start(struct rproc *rproc)
374381
goto start_ret;
375382
}
376383

377-
switch (dcfg->method) {
378-
case IMX_RPROC_RESET_CONTROLLER:
379-
ret = reset_control_deassert(priv->run_stall);
380-
break;
381-
default:
382-
return -EOPNOTSUPP;
383-
}
384+
return -EOPNOTSUPP;
384385

385386
start_ret:
386387
if (ret)
@@ -399,6 +400,13 @@ static int imx_dsp_rproc_mmio_stop(struct rproc *rproc)
399400
return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_stop);
400401
}
401402

403+
static int imx_dsp_rproc_reset_ctrl_stop(struct rproc *rproc)
404+
{
405+
struct imx_dsp_rproc *priv = rproc->priv;
406+
407+
return reset_control_assert(priv->run_stall);
408+
}
409+
402410
static int imx_dsp_rproc_scu_api_stop(struct rproc *rproc)
403411
{
404412
struct imx_dsp_rproc *priv = rproc->priv;
@@ -428,13 +436,7 @@ static int imx_dsp_rproc_stop(struct rproc *rproc)
428436
goto stop_ret;
429437
}
430438

431-
switch (dcfg->method) {
432-
case IMX_RPROC_RESET_CONTROLLER:
433-
ret = reset_control_assert(priv->run_stall);
434-
break;
435-
default:
436-
return -EOPNOTSUPP;
437-
}
439+
return -EOPNOTSUPP;
438440

439441
stop_ret:
440442
if (ret)
@@ -1057,6 +1059,20 @@ static int imx_dsp_rproc_mmio_detect_mode(struct rproc *rproc)
10571059
return 0;
10581060
}
10591061

1062+
static int imx_dsp_rproc_reset_ctrl_detect_mode(struct rproc *rproc)
1063+
{
1064+
struct imx_dsp_rproc *priv = rproc->priv;
1065+
struct device *dev = rproc->dev.parent;
1066+
1067+
priv->run_stall = devm_reset_control_get_exclusive(dev, "runstall");
1068+
if (IS_ERR(priv->run_stall)) {
1069+
dev_err(dev, "Failed to get DSP runstall reset control\n");
1070+
return PTR_ERR(priv->run_stall);
1071+
}
1072+
1073+
return 0;
1074+
}
1075+
10601076
static int imx_dsp_rproc_scu_api_detect_mode(struct rproc *rproc)
10611077
{
10621078
struct imx_dsp_rproc *priv = rproc->priv;
@@ -1080,26 +1096,11 @@ static int imx_dsp_rproc_detect_mode(struct imx_dsp_rproc *priv)
10801096
{
10811097
const struct imx_dsp_rproc_dcfg *dsp_dcfg = priv->dsp_dcfg;
10821098
const struct imx_rproc_dcfg *dcfg = dsp_dcfg->dcfg;
1083-
struct device *dev = priv->rproc->dev.parent;
1084-
int ret = 0;
10851099

10861100
if (dcfg->ops && dcfg->ops->detect_mode)
10871101
return dcfg->ops->detect_mode(priv->rproc);
10881102

1089-
switch (dsp_dcfg->dcfg->method) {
1090-
case IMX_RPROC_RESET_CONTROLLER:
1091-
priv->run_stall = devm_reset_control_get_exclusive(dev, "runstall");
1092-
if (IS_ERR(priv->run_stall)) {
1093-
dev_err(dev, "Failed to get DSP runstall reset control\n");
1094-
return PTR_ERR(priv->run_stall);
1095-
}
1096-
break;
1097-
default:
1098-
ret = -EOPNOTSUPP;
1099-
break;
1100-
}
1101-
1102-
return ret;
1103+
return -EOPNOTSUPP;
11031104
}
11041105

11051106
static const char *imx_dsp_clks_names[DSP_RPROC_CLK_MAX] = {
@@ -1324,6 +1325,12 @@ static const struct imx_rproc_plat_ops imx_dsp_rproc_ops_mmio = {
13241325
.detect_mode = imx_dsp_rproc_mmio_detect_mode,
13251326
};
13261327

1328+
static const struct imx_rproc_plat_ops imx_dsp_rproc_ops_reset_ctrl = {
1329+
.start = imx_dsp_rproc_reset_ctrl_start,
1330+
.stop = imx_dsp_rproc_reset_ctrl_stop,
1331+
.detect_mode = imx_dsp_rproc_reset_ctrl_detect_mode,
1332+
};
1333+
13271334
static const struct imx_rproc_plat_ops imx_dsp_rproc_ops_scu_api = {
13281335
.start = imx_dsp_rproc_scu_api_start,
13291336
.stop = imx_dsp_rproc_scu_api_stop,
@@ -1334,7 +1341,7 @@ static const struct imx_rproc_plat_ops imx_dsp_rproc_ops_scu_api = {
13341341
static const struct imx_rproc_dcfg dsp_rproc_cfg_imx8mp = {
13351342
.att = imx_dsp_rproc_att_imx8mp,
13361343
.att_size = ARRAY_SIZE(imx_dsp_rproc_att_imx8mp),
1337-
.method = IMX_RPROC_RESET_CONTROLLER,
1344+
.ops = &imx_dsp_rproc_ops_reset_ctrl,
13381345
};
13391346

13401347
static const struct imx_dsp_rproc_dcfg imx_dsp_rproc_cfg_imx8mp = {

drivers/remoteproc/imx_rproc.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ enum imx_rproc_method {
2020
IMX_RPROC_NONE,
2121
/* Through ARM SMCCC */
2222
IMX_RPROC_SMC,
23-
/* Through Reset Controller API */
24-
IMX_RPROC_RESET_CONTROLLER,
2523
};
2624

2725
/* dcfg flags */

0 commit comments

Comments
 (0)