aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuan Gutierrez <jgutierrez@ti.com>2012-08-15 10:25:48 -0500
committerOhad Ben-Cohen <ohad@wizery.com>2012-09-11 15:24:14 +0300
commit4980f465d21400303b234bcc3d082916f19f11ff (patch)
tree1c427b92a94c5911f3a5745f7ee09efb3634c200
parentLinux 3.6-rc5 (diff)
downloadlinux-dev-4980f465d21400303b234bcc3d082916f19f11ff.tar.xz
linux-dev-4980f465d21400303b234bcc3d082916f19f11ff.zip
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.h2
-rw-r--r--drivers/remoteproc/omap_remoteproc.c3
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 b10eac89e2e9..3c1c6444ec4b 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 a1f7ac1f8cf6..a0c168cde90d 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 */