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>
This commit is contained in:
committed by
Ohad Ben-Cohen
parent
55d512e245
commit
4980f465d2
@@ -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 {
|
|||||||
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)
|
|||||||
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 */
|
||||||
|
Reference in New Issue
Block a user