u32 entry; /* cpu start address */
u32 core_index;
struct dev_pm_domain_list *pd_list;
+ const struct imx_rproc_plat_ops *ops;
};
static const struct imx_rproc_att imx_rproc_att_imx93[] = {
static int imx_rproc_start(struct rproc *rproc)
{
struct imx_rproc *priv = rproc->priv;
- const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
int ret;
if (ret)
return ret;
- if (!dcfg->ops || !dcfg->ops->start)
+ if (!priv->ops || !priv->ops->start)
return -EOPNOTSUPP;
- ret = dcfg->ops->start(rproc);
+ ret = priv->ops->start(rproc);
if (ret)
dev_err(dev, "Failed to enable remote core!\n");
static int imx_rproc_stop(struct rproc *rproc)
{
struct imx_rproc *priv = rproc->priv;
- const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
int ret;
- if (!dcfg->ops || !dcfg->ops->stop)
+ if (!priv->ops || !priv->ops->stop)
return -EOPNOTSUPP;
- ret = dcfg->ops->stop(rproc);
+ ret = priv->ops->stop(rproc);
if (ret)
dev_err(dev, "Failed to stop remote core\n");
else
static int imx_rproc_detach(struct rproc *rproc)
{
struct imx_rproc *priv = rproc->priv;
- const struct imx_rproc_dcfg *dcfg = priv->dcfg;
- if (!dcfg->ops || !dcfg->ops->detach)
+ if (!priv->ops || !priv->ops->detach)
return -EOPNOTSUPP;
- return dcfg->ops->detach(rproc);
+ return priv->ops->detach(rproc);
}
static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz)
static int imx_rproc_detect_mode(struct imx_rproc *priv)
{
- const struct imx_rproc_dcfg *dcfg = priv->dcfg;
-
/*
* To i.MX{7,8} ULP, Linux is under control of RTOS, no need
- * dcfg->ops or dcfg->ops->detect_mode, it is state RPROC_DETACHED.
+ * priv->ops or priv->ops->detect_mode, it is state RPROC_DETACHED.
*/
- if (!dcfg->ops || !dcfg->ops->detect_mode) {
+ if (!priv->ops || !priv->ops->detect_mode) {
priv->rproc->state = RPROC_DETACHED;
return 0;
}
- return dcfg->ops->detect_mode(priv->rproc);
+ return priv->ops->detect_mode(priv->rproc);
}
static int imx_rproc_sys_off_handler(struct sys_off_data *data)
priv->dcfg = dcfg;
priv->dev = dev;
+ if (dcfg->ops)
+ priv->ops = dcfg->ops;
+
dev_set_drvdata(dev, rproc);
priv->workqueue = create_workqueue(dev_name(dev));
if (!priv->workqueue) {