From: nikita.shubin@maquefel.me To: nikita.shubin@maquefel.me Cc: Nikita Shubin <NShubin@topcon.com>, Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson <bjorn.andersson@linaro.org>, Shawn Guo <shawnguo@kernel.org>, Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix Kernel Team <kernel@pengutronix.de>, Fabio Estevam <festevam@gmail.com>, NXP Linux Team <linux-imx@nxp.com>, linux-remoteproc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/3] remoteproc: imx_rproc: set pc on start Date: Mon, 6 Apr 2020 14:33:08 +0300 [thread overview] Message-ID: <20200406113310.3041-2-nikita.shubin@maquefel.me> (raw) In-Reply-To: <20200406113310.3041-1-nikita.shubin@maquefel.me> In case elf file interrupt vector is not supposed to be at OCRAM_S, it is needed to write elf entry point to OCRAM_S + 0x4, to boot M4 firmware. Otherwise firmware located anywhere besides OCRAM_S won't boot. The firmware must set stack poiner as first instruction: Reset_Handler: ldr sp, = __stack /* set stack pointer */ Signed-off-by: Nikita Shubin <NShubin@topcon.com> --- drivers/remoteproc/imx_rproc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 3e72b6f38d4b..bebc58d0f711 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -45,6 +45,8 @@ #define IMX7D_RPROC_MEM_MAX 8 +#define IMX_BOOT_PC 0x4 + /** * struct imx_rproc_mem - slim internal memory structure * @cpu_addr: MPU virtual address of the memory region @@ -85,6 +87,7 @@ struct imx_rproc { const struct imx_rproc_dcfg *dcfg; struct imx_rproc_mem mem[IMX7D_RPROC_MEM_MAX]; struct clk *clk; + void __iomem *bootreg; }; static const struct imx_rproc_att imx_rproc_att_imx7d[] = { @@ -162,11 +165,16 @@ static int imx_rproc_start(struct rproc *rproc) struct device *dev = priv->dev; int ret; + /* write entry point to program counter */ + writel(rproc->bootaddr, priv->bootreg); + ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_start); if (ret) dev_err(dev, "Failed to enable M4!\n"); + dev_info(&rproc->dev, "Started from 0x%x\n", rproc->bootaddr); + return ret; } @@ -182,6 +190,9 @@ static int imx_rproc_stop(struct rproc *rproc) if (ret) dev_err(dev, "Failed to stop M4!\n"); + /* clear entry points */ + writel(0, priv->bootreg); + return ret; } @@ -243,7 +254,8 @@ static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, int len) static const struct rproc_ops imx_rproc_ops = { .start = imx_rproc_start, .stop = imx_rproc_stop, - .da_to_va = imx_rproc_da_to_va, + .da_to_va = imx_rproc_da_to_va, + .get_boot_addr = rproc_elf_get_boot_addr, }; static int imx_rproc_addr_init(struct imx_rproc *priv, @@ -360,6 +372,8 @@ static int imx_rproc_probe(struct platform_device *pdev) goto err_put_rproc; } + priv->bootreg = imx_rproc_da_to_va(rproc, IMX_BOOT_PC, sizeof(u32)); + /* * clk for M4 block including memory. Should be * enabled before .start for FW transfer. -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: nikita.shubin@maquefel.me To: nikita.shubin@maquefel.me Cc: Ohad Ben-Cohen <ohad@wizery.com>, Fabio Estevam <festevam@gmail.com>, Nikita Shubin <NShubin@topcon.com>, Sascha Hauer <s.hauer@pengutronix.de>, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Andersson <bjorn.andersson@linaro.org>, NXP Linux Team <linux-imx@nxp.com>, Pengutronix Kernel Team <kernel@pengutronix.de>, Shawn Guo <shawnguo@kernel.org>, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 1/3] remoteproc: imx_rproc: set pc on start Date: Mon, 6 Apr 2020 14:33:08 +0300 [thread overview] Message-ID: <20200406113310.3041-2-nikita.shubin@maquefel.me> (raw) In-Reply-To: <20200406113310.3041-1-nikita.shubin@maquefel.me> In case elf file interrupt vector is not supposed to be at OCRAM_S, it is needed to write elf entry point to OCRAM_S + 0x4, to boot M4 firmware. Otherwise firmware located anywhere besides OCRAM_S won't boot. The firmware must set stack poiner as first instruction: Reset_Handler: ldr sp, = __stack /* set stack pointer */ Signed-off-by: Nikita Shubin <NShubin@topcon.com> --- drivers/remoteproc/imx_rproc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 3e72b6f38d4b..bebc58d0f711 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -45,6 +45,8 @@ #define IMX7D_RPROC_MEM_MAX 8 +#define IMX_BOOT_PC 0x4 + /** * struct imx_rproc_mem - slim internal memory structure * @cpu_addr: MPU virtual address of the memory region @@ -85,6 +87,7 @@ struct imx_rproc { const struct imx_rproc_dcfg *dcfg; struct imx_rproc_mem mem[IMX7D_RPROC_MEM_MAX]; struct clk *clk; + void __iomem *bootreg; }; static const struct imx_rproc_att imx_rproc_att_imx7d[] = { @@ -162,11 +165,16 @@ static int imx_rproc_start(struct rproc *rproc) struct device *dev = priv->dev; int ret; + /* write entry point to program counter */ + writel(rproc->bootaddr, priv->bootreg); + ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_start); if (ret) dev_err(dev, "Failed to enable M4!\n"); + dev_info(&rproc->dev, "Started from 0x%x\n", rproc->bootaddr); + return ret; } @@ -182,6 +190,9 @@ static int imx_rproc_stop(struct rproc *rproc) if (ret) dev_err(dev, "Failed to stop M4!\n"); + /* clear entry points */ + writel(0, priv->bootreg); + return ret; } @@ -243,7 +254,8 @@ static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, int len) static const struct rproc_ops imx_rproc_ops = { .start = imx_rproc_start, .stop = imx_rproc_stop, - .da_to_va = imx_rproc_da_to_va, + .da_to_va = imx_rproc_da_to_va, + .get_boot_addr = rproc_elf_get_boot_addr, }; static int imx_rproc_addr_init(struct imx_rproc *priv, @@ -360,6 +372,8 @@ static int imx_rproc_probe(struct platform_device *pdev) goto err_put_rproc; } + priv->bootreg = imx_rproc_da_to_va(rproc, IMX_BOOT_PC, sizeof(u32)); + /* * clk for M4 block including memory. Should be * enabled before .start for FW transfer. -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-04-06 11:33 UTC|newest] Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-04 14:26 [PATCH 1/2] remoteproc: imx_rproc: dummy kick method Nikita Shubin 2020-03-04 14:26 ` Nikita Shubin 2020-03-04 14:26 ` Nikita Shubin 2020-03-04 14:26 ` [PATCH 2/2] remoteproc: imx_rproc: set pc on start Nikita Shubin 2020-03-04 14:26 ` Nikita Shubin 2020-03-04 14:26 ` Nikita Shubin 2020-03-05 16:16 ` [PATCH 1/2] remoteproc: imx_rproc: dummy kick method Mathieu Poirier 2020-03-05 16:16 ` Mathieu Poirier 2020-03-05 17:29 ` nikita.shubin 2020-03-05 17:29 ` nikita.shubin 2020-03-05 17:54 ` Mathieu Poirier 2020-03-05 17:54 ` Mathieu Poirier 2020-03-05 18:07 ` nikita.shubin 2020-03-05 18:07 ` nikita.shubin 2020-03-05 18:36 ` Mathieu Poirier 2020-03-05 18:36 ` Mathieu Poirier 2020-03-05 18:46 ` nikita.shubin 2020-03-05 18:46 ` nikita.shubin 2020-04-06 11:33 ` [PATCH v2 0/3] remoteproc: imx_rproc: add virtio support nikita.shubin 2020-04-06 11:33 ` nikita.shubin 2020-04-06 11:33 ` nikita.shubin [this message] 2020-04-06 11:33 ` [PATCH v2 1/3] remoteproc: imx_rproc: set pc on start nikita.shubin 2020-04-14 16:45 ` Mathieu Poirier 2020-04-14 16:45 ` Mathieu Poirier 2020-04-17 5:40 ` nikita.shubin 2020-04-17 17:01 ` Mathieu Poirier 2020-04-17 17:01 ` Mathieu Poirier 2020-04-17 17:01 ` Mathieu Poirier 2020-04-17 17:26 ` Nikita Shubin 2020-04-17 17:26 ` Nikita Shubin 2020-04-17 17:26 ` Nikita Shubin 2020-04-17 22:24 ` Mathieu Poirier 2020-04-17 22:24 ` Mathieu Poirier 2020-04-17 22:24 ` Mathieu Poirier 2020-04-22 7:35 ` Nikita Shubin 2020-04-22 7:35 ` Nikita Shubin 2020-04-22 7:35 ` Nikita Shubin 2020-04-17 12:11 ` Nikita Shubin 2020-04-17 12:11 ` Nikita Shubin 2020-04-17 15:37 ` Mathieu Poirier 2020-04-17 15:37 ` Mathieu Poirier 2020-04-17 15:46 ` Nikita Shubin 2020-04-17 15:46 ` Nikita Shubin 2020-04-06 11:33 ` [PATCH v2 2/3] remoteproc: imx_rproc: mailbox support nikita.shubin 2020-04-06 11:33 ` nikita.shubin 2020-04-07 1:07 ` kbuild test robot 2020-04-07 1:07 ` kbuild test robot 2020-04-07 1:07 ` kbuild test robot 2020-04-14 17:20 ` Mathieu Poirier 2020-04-14 17:20 ` Mathieu Poirier 2020-04-17 8:37 ` Nikita Shubin 2020-04-17 8:37 ` Nikita Shubin 2020-04-17 16:02 ` Mathieu Poirier 2020-04-17 16:02 ` Mathieu Poirier 2020-04-14 17:36 ` Mathieu Poirier 2020-04-14 17:36 ` Mathieu Poirier 2020-04-06 11:33 ` [PATCH v2 3/3] remoteproc: imx_rproc: memory regions nikita.shubin 2020-04-06 11:33 ` nikita.shubin 2020-04-14 17:46 ` Mathieu Poirier 2020-04-14 17:46 ` Mathieu Poirier 2020-04-15 2:42 ` [PATCH v2 0/3] remoteproc: imx_rproc: add virtio support Peng Fan 2020-04-15 2:42 ` Peng Fan 2020-04-15 2:42 ` Peng Fan 2020-04-15 16:26 ` Mathieu Poirier 2020-04-15 16:26 ` Mathieu Poirier 2020-04-15 16:26 ` Mathieu Poirier 2020-04-17 8:57 ` Nikita Shubin 2020-04-17 8:57 ` Nikita Shubin 2020-04-17 8:57 ` Nikita Shubin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200406113310.3041-2-nikita.shubin@maquefel.me \ --to=nikita.shubin@maquefel.me \ --cc=NShubin@topcon.com \ --cc=bjorn.andersson@linaro.org \ --cc=festevam@gmail.com \ --cc=kernel@pengutronix.de \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-imx@nxp.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=ohad@wizery.com \ --cc=s.hauer@pengutronix.de \ --cc=shawnguo@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.