diff options
author | Juan Gutierrez <jgutierrez@ti.com> | 2012-08-15 10:25:48 -0500 |
---|---|---|
committer | Ohad Ben-Cohen <ohad@wizery.com> | 2012-09-11 15:24:14 +0300 |
commit | 4980f465d21400303b234bcc3d082916f19f11ff (patch) | |
tree | 1c427b92a94c5911f3a5745f7ee09efb3634c200 | |
parent | 55d512e245bc7699a8800e23df1a24195dd08217 (diff) | |
download | op-kernel-dev-4980f465d21400303b234bcc3d082916f19f11ff.zip op-kernel-dev-4980f465d21400303b234bcc3d082916f19f11ff.tar.gz |
remoteproc/omap: set bootaddr support
Some remote processors (like OMAP4's DSP) require we explicitly
set a boot address from which they'd start executing code when
taken out of reset.
Support for this is now being added to the omap-specific remoteproc
driver through a set_bootaddr function in the platform data which,
if needed, must be set according to the backend remote processor.
For OMAP4's dsp we can use the following control function:
.set_bootaddr = omap_ctrl_write_dsp_boot_addr
Signed-off-by: Juan Gutierrez <jgutierrez@ti.com>
Signed-off-by: Suman Anna <s-anna@ti.com>
[ohad: slight changes to the commit log]
Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
-rw-r--r-- | arch/arm/plat-omap/include/plat/remoteproc.h | 2 | ||||
-rw-r--r-- | drivers/remoteproc/omap_remoteproc.c | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/include/plat/remoteproc.h b/arch/arm/plat-omap/include/plat/remoteproc.h index b10eac8..3c1c644 100644 --- a/arch/arm/plat-omap/include/plat/remoteproc.h +++ b/arch/arm/plat-omap/include/plat/remoteproc.h @@ -30,6 +30,7 @@ struct platform_device; * @ops: start/stop rproc handlers * @device_enable: omap-specific handler for enabling a device * @device_shutdown: omap-specific handler for shutting down a device + * @set_bootaddr: omap-specific handler for setting the rproc boot address */ struct omap_rproc_pdata { const char *name; @@ -40,6 +41,7 @@ struct omap_rproc_pdata { const struct rproc_ops *ops; int (*device_enable) (struct platform_device *pdev); int (*device_shutdown) (struct platform_device *pdev); + void(*set_bootaddr)(u32); }; #if defined(CONFIG_OMAP_REMOTEPROC) || defined(CONFIG_OMAP_REMOTEPROC_MODULE) diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c index a1f7ac1..a0c168c 100644 --- a/drivers/remoteproc/omap_remoteproc.c +++ b/drivers/remoteproc/omap_remoteproc.c @@ -116,6 +116,9 @@ static int omap_rproc_start(struct rproc *rproc) struct omap_rproc_pdata *pdata = pdev->dev.platform_data; int ret; + if (pdata->set_bootaddr) + pdata->set_bootaddr(rproc->bootaddr); + oproc->nb.notifier_call = omap_rproc_mbox_callback; /* every omap rproc is assigned a mailbox instance for messaging */ |