@@ -122,13 +122,22 @@ static void omap_rproc_kick(struct rproc *rproc, int vqid)
*
* Set boot address for a supported DSP remote processor.
*/
-static void omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
+static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
{
+ struct device *dev = rproc->dev.parent;
struct omap_rproc *oproc = rproc->priv;
struct omap_rproc_boot_data *bdata = oproc->boot_data;
u32 offset = bdata->boot_reg;
+ if (rproc->bootaddr & (SZ_1K - 1)) {
+ dev_err(dev, "invalid boot address 0x%x, must be aligned on a 1KB boundary\n",
+ rproc->bootaddr);
+ return -EINVAL;
+ }
+
regmap_write(bdata->syscon, offset, rproc->bootaddr);
+
+ return 0;
}
/*
@@ -145,8 +154,11 @@ static int omap_rproc_start(struct rproc *rproc)
int ret;
struct mbox_client *client = &oproc->client;
- if (oproc->boot_data)
- omap_rproc_write_dsp_boot_addr(rproc);
+ if (oproc->boot_data) {
+ ret = omap_rproc_write_dsp_boot_addr(rproc);
+ if (ret)
+ return ret;
+ }
client->dev = dev;
client->tx_done = NULL;