Commit 4980f465 authored by Juan Gutierrez's avatar Juan Gutierrez Committed by Ohad Ben-Cohen

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: default avatarJuan Gutierrez <jgutierrez@ti.com>
Signed-off-by: default avatarSuman Anna <s-anna@ti.com>
[ohad: slight changes to the commit log]
Signed-off-by: default avatarOhad Ben-Cohen <ohad@wizery.com>
parent 55d512e2
...@@ -30,6 +30,7 @@ struct platform_device; ...@@ -30,6 +30,7 @@ struct platform_device;
* @ops: start/stop rproc handlers * @ops: start/stop rproc handlers
* @device_enable: omap-specific handler for enabling a device * @device_enable: omap-specific handler for enabling a device
* @device_shutdown: omap-specific handler for shutting down 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 { struct omap_rproc_pdata {
const char *name; const char *name;
...@@ -40,6 +41,7 @@ struct omap_rproc_pdata { ...@@ -40,6 +41,7 @@ struct omap_rproc_pdata {
const struct rproc_ops *ops; const struct rproc_ops *ops;
int (*device_enable) (struct platform_device *pdev); int (*device_enable) (struct platform_device *pdev);
int (*device_shutdown) (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) #if defined(CONFIG_OMAP_REMOTEPROC) || defined(CONFIG_OMAP_REMOTEPROC_MODULE)
......
...@@ -116,6 +116,9 @@ static int omap_rproc_start(struct rproc *rproc) ...@@ -116,6 +116,9 @@ static int omap_rproc_start(struct rproc *rproc)
struct omap_rproc_pdata *pdata = pdev->dev.platform_data; struct omap_rproc_pdata *pdata = pdev->dev.platform_data;
int ret; int ret;
if (pdata->set_bootaddr)
pdata->set_bootaddr(rproc->bootaddr);
oproc->nb.notifier_call = omap_rproc_mbox_callback; oproc->nb.notifier_call = omap_rproc_mbox_callback;
/* every omap rproc is assigned a mailbox instance for messaging */ /* every omap rproc is assigned a mailbox instance for messaging */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment