From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Cc: Ohad Ben-Cohen <ohad@wizery.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Rob Herring <robh@kernel.org>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
devicetree@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 2/2] remoteproc: stm32: add capability to detach
Date: Tue, 13 Apr 2021 16:34:47 -0500 [thread overview]
Message-ID: <YHYOd/vqeZCiqkpJ@builder.lan> (raw)
In-Reply-To: <20210331073347.8293-3-arnaud.pouliquen@foss.st.com>
On Wed 31 Mar 02:33 CDT 2021, Arnaud Pouliquen wrote:
> A mechanism similar to the shutdown mailbox signal is implemented to
> detach a remote processor.
>
> Upon detachment, a signal is sent to the remote firmware, allowing it
> to perform specific actions such as stopping rpmsg communication.
>
> The Cortex-M hold boot is also disabled to allow the remote processor
> to restart in case of crash.
>
> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> Tested-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
> drivers/remoteproc/stm32_rproc.c | 39 ++++++++++++++++++++++++++++++--
> 1 file changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c
> index 3d45f51de4d0..7353f9e7e7af 100644
> --- a/drivers/remoteproc/stm32_rproc.c
> +++ b/drivers/remoteproc/stm32_rproc.c
> @@ -28,7 +28,7 @@
> #define RELEASE_BOOT 1
>
> #define MBOX_NB_VQ 2
> -#define MBOX_NB_MBX 3
> +#define MBOX_NB_MBX 4
>
> #define STM32_SMC_RCC 0x82001000
> #define STM32_SMC_REG_WRITE 0x1
> @@ -38,6 +38,7 @@
> #define STM32_MBX_VQ1 "vq1"
> #define STM32_MBX_VQ1_ID 1
> #define STM32_MBX_SHUTDOWN "shutdown"
> +#define STM32_MBX_DETACH "detach"
>
> #define RSC_TBL_SIZE 1024
>
> @@ -336,6 +337,15 @@ static const struct stm32_mbox stm32_rproc_mbox[MBOX_NB_MBX] = {
> .tx_done = NULL,
> .tx_tout = 500, /* 500 ms time out */
> },
> + },
> + {
> + .name = STM32_MBX_DETACH,
> + .vq_id = -1,
> + .client = {
> + .tx_block = true,
> + .tx_done = NULL,
> + .tx_tout = 200, /* 200 ms time out to detach should be fair enough */
> + },
> }
> };
>
> @@ -461,6 +471,25 @@ static int stm32_rproc_attach(struct rproc *rproc)
> return stm32_rproc_set_hold_boot(rproc, true);
> }
>
> +static int stm32_rproc_detach(struct rproc *rproc)
> +{
> + struct stm32_rproc *ddata = rproc->priv;
> + int err, dummy_data, idx;
> +
> + /* Inform the remote processor of the detach */
> + idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_DETACH);
> + if (idx >= 0 && ddata->mb[idx].chan) {
> + /* A dummy data is sent to allow to block on transmit */
> + err = mbox_send_message(ddata->mb[idx].chan,
> + &dummy_data);
Seems I posted my comment on v1, rather than this latest version. Please
let me know if we should do anything about this dummy_data.
Regards,
Bjorn
> + if (err < 0)
> + dev_warn(&rproc->dev, "warning: remote FW detach without ack\n");
> + }
> +
> + /* Allow remote processor to auto-reboot */
> + return stm32_rproc_set_hold_boot(rproc, false);
> +}
> +
> static int stm32_rproc_stop(struct rproc *rproc)
> {
> struct stm32_rproc *ddata = rproc->priv;
> @@ -597,7 +626,12 @@ stm32_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz)
> }
>
> done:
> - /* Assuming the resource table fits in 1kB is fair */
> + /*
> + * Assuming the resource table fits in 1kB is fair.
> + * Notice for the detach, that this 1 kB memory area has to be reserved in the coprocessor
> + * firmware for the resource table. On detach, the remoteproc core re-initializes this
> + * entire area by overwriting it with the initial values stored in rproc->clean_table.
> + */
> *table_sz = RSC_TBL_SIZE;
> return (struct resource_table *)ddata->rsc_va;
> }
> @@ -607,6 +641,7 @@ static const struct rproc_ops st_rproc_ops = {
> .start = stm32_rproc_start,
> .stop = stm32_rproc_stop,
> .attach = stm32_rproc_attach,
> + .detach = stm32_rproc_detach,
> .kick = stm32_rproc_kick,
> .load = rproc_elf_load_segments,
> .parse_fw = stm32_rproc_parse_fw,
> --
> 2.17.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Cc: Ohad Ben-Cohen <ohad@wizery.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Rob Herring <robh@kernel.org>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
devicetree@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 2/2] remoteproc: stm32: add capability to detach
Date: Tue, 13 Apr 2021 16:34:47 -0500 [thread overview]
Message-ID: <YHYOd/vqeZCiqkpJ@builder.lan> (raw)
In-Reply-To: <20210331073347.8293-3-arnaud.pouliquen@foss.st.com>
On Wed 31 Mar 02:33 CDT 2021, Arnaud Pouliquen wrote:
> A mechanism similar to the shutdown mailbox signal is implemented to
> detach a remote processor.
>
> Upon detachment, a signal is sent to the remote firmware, allowing it
> to perform specific actions such as stopping rpmsg communication.
>
> The Cortex-M hold boot is also disabled to allow the remote processor
> to restart in case of crash.
>
> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> Tested-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
> drivers/remoteproc/stm32_rproc.c | 39 ++++++++++++++++++++++++++++++--
> 1 file changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c
> index 3d45f51de4d0..7353f9e7e7af 100644
> --- a/drivers/remoteproc/stm32_rproc.c
> +++ b/drivers/remoteproc/stm32_rproc.c
> @@ -28,7 +28,7 @@
> #define RELEASE_BOOT 1
>
> #define MBOX_NB_VQ 2
> -#define MBOX_NB_MBX 3
> +#define MBOX_NB_MBX 4
>
> #define STM32_SMC_RCC 0x82001000
> #define STM32_SMC_REG_WRITE 0x1
> @@ -38,6 +38,7 @@
> #define STM32_MBX_VQ1 "vq1"
> #define STM32_MBX_VQ1_ID 1
> #define STM32_MBX_SHUTDOWN "shutdown"
> +#define STM32_MBX_DETACH "detach"
>
> #define RSC_TBL_SIZE 1024
>
> @@ -336,6 +337,15 @@ static const struct stm32_mbox stm32_rproc_mbox[MBOX_NB_MBX] = {
> .tx_done = NULL,
> .tx_tout = 500, /* 500 ms time out */
> },
> + },
> + {
> + .name = STM32_MBX_DETACH,
> + .vq_id = -1,
> + .client = {
> + .tx_block = true,
> + .tx_done = NULL,
> + .tx_tout = 200, /* 200 ms time out to detach should be fair enough */
> + },
> }
> };
>
> @@ -461,6 +471,25 @@ static int stm32_rproc_attach(struct rproc *rproc)
> return stm32_rproc_set_hold_boot(rproc, true);
> }
>
> +static int stm32_rproc_detach(struct rproc *rproc)
> +{
> + struct stm32_rproc *ddata = rproc->priv;
> + int err, dummy_data, idx;
> +
> + /* Inform the remote processor of the detach */
> + idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_DETACH);
> + if (idx >= 0 && ddata->mb[idx].chan) {
> + /* A dummy data is sent to allow to block on transmit */
> + err = mbox_send_message(ddata->mb[idx].chan,
> + &dummy_data);
Seems I posted my comment on v1, rather than this latest version. Please
let me know if we should do anything about this dummy_data.
Regards,
Bjorn
> + if (err < 0)
> + dev_warn(&rproc->dev, "warning: remote FW detach without ack\n");
> + }
> +
> + /* Allow remote processor to auto-reboot */
> + return stm32_rproc_set_hold_boot(rproc, false);
> +}
> +
> static int stm32_rproc_stop(struct rproc *rproc)
> {
> struct stm32_rproc *ddata = rproc->priv;
> @@ -597,7 +626,12 @@ stm32_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz)
> }
>
> done:
> - /* Assuming the resource table fits in 1kB is fair */
> + /*
> + * Assuming the resource table fits in 1kB is fair.
> + * Notice for the detach, that this 1 kB memory area has to be reserved in the coprocessor
> + * firmware for the resource table. On detach, the remoteproc core re-initializes this
> + * entire area by overwriting it with the initial values stored in rproc->clean_table.
> + */
> *table_sz = RSC_TBL_SIZE;
> return (struct resource_table *)ddata->rsc_va;
> }
> @@ -607,6 +641,7 @@ static const struct rproc_ops st_rproc_ops = {
> .start = stm32_rproc_start,
> .stop = stm32_rproc_stop,
> .attach = stm32_rproc_attach,
> + .detach = stm32_rproc_detach,
> .kick = stm32_rproc_kick,
> .load = rproc_elf_load_segments,
> .parse_fw = stm32_rproc_parse_fw,
> --
> 2.17.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:[~2021-04-13 21:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-31 7:33 [PATCH v4 0/2] remoteproc: stm32: add support of detaching a remote processor Arnaud Pouliquen
2021-03-31 7:33 ` Arnaud Pouliquen
2021-03-31 7:33 ` [PATCH v4 1/2] dt-bindings: remoteproc: stm32-rproc: add new mailbox channel for detach Arnaud Pouliquen
2021-03-31 7:33 ` Arnaud Pouliquen
2021-03-31 7:33 ` [PATCH v4 2/2] remoteproc: stm32: add capability to detach Arnaud Pouliquen
2021-03-31 7:33 ` Arnaud Pouliquen
2021-04-13 21:34 ` Bjorn Andersson [this message]
2021-04-13 21:34 ` Bjorn Andersson
2021-04-14 7:23 ` Arnaud POULIQUEN
2021-04-14 7:23 ` Arnaud POULIQUEN
2021-04-14 15:01 ` Bjorn Andersson
2021-04-14 15:01 ` Bjorn Andersson
2021-04-14 15:10 ` [PATCH v4 0/2] remoteproc: stm32: add support of detaching a remote processor patchwork-bot+linux-remoteproc
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=YHYOd/vqeZCiqkpJ@builder.lan \
--to=bjorn.andersson@linaro.org \
--cc=alexandre.torgue@foss.st.com \
--cc=arnaud.pouliquen@foss.st.com \
--cc=devicetree@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mathieu.poirier@linaro.org \
--cc=ohad@wizery.com \
--cc=robh@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: link
Be 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.