From: Cristian Marussi <cristian.marussi@arm.com> To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, virtualization@lists.linux-foundation.org, virtio-dev@lists.oasis-open.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, Jonathan.Cameron@Huawei.com, f.fainelli@gmail.com, etienne.carriere@linaro.org, vincent.guittot@linaro.org, souvik.chakravarty@arm.com, cristian.marussi@arm.com, igor.skalkin@opensynergy.com, peter.hilber@opensynergy.com, alex.bennee@linaro.org, jean-philippe@linaro.org, mikhail.golubev@opensynergy.com, anton.yakovlev@opensynergy.com, Vasyl.Vavrychuk@opensynergy.com, Andriy.Tryshnivskyy@opensynergy.com Subject: [PATCH v4 16/16] firmware: arm_scmi: Add polling mode to virtio transport Date: Fri, 11 Jun 2021 17:59:37 +0100 [thread overview] Message-ID: <20210611165937.701-17-cristian.marussi@arm.com> (raw) In-Reply-To: <20210611165937.701-1-cristian.marussi@arm.com> Enable polling mode support to virtio transport. Upon reception of a synchronous command response for a transfer that has the hdr.poll_completion flag set, virtio transport now simply completes the same completion which .poll_done() is spinning on. Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> --- Note that as of now in order to test this you have to forcibly enable hdr.poll_completion in the core and increase SCMI_MAX_POLL_TO_NS. These workarounds won't be needed anymore once addressed by a distinct series currently under review. --- drivers/firmware/arm_scmi/virtio.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/firmware/arm_scmi/virtio.c b/drivers/firmware/arm_scmi/virtio.c index 4412bc590ca7..f77c7f288d4c 100644 --- a/drivers/firmware/arm_scmi/virtio.c +++ b/drivers/firmware/arm_scmi/virtio.c @@ -158,12 +158,12 @@ static void scmi_process_vqueue_input(struct scmi_vio_channel *vioch, /* Drop processed virtio message anyway */ scmi_finalize_message(vioch, msg); + /* Deliver DRESP, NOTIF and non-polled RESP */ if (vioch->is_rx || !xfer->hdr.poll_completion) scmi_rx_callback(vioch->cinfo, msg_hdr); else - dev_warn(vioch->cinfo->dev, - "Polling mode NOT supported. Dropped hdr:0X%X\n", - msg_hdr); + /* poll_done() is busy-waiting on this */ + complete(&xfer->done); scmi_transfer_release(vioch->cinfo, xfer); } @@ -414,10 +414,16 @@ static void dummy_clear_channel(struct scmi_chan_info *cinfo) { } -static bool dummy_poll_done(struct scmi_chan_info *cinfo, - struct scmi_xfer *xfer) +static bool virtio_poll_done(struct scmi_chan_info *cinfo, + struct scmi_xfer *xfer) { - return false; + /* + * In polling mode SCMI core does not use xfer->done completion, + * so we can busy-wait on this same completion without adding + * a new flag: this is completed properly upon msg reception in + * scmi_process_vqueue_input(). + */ + return try_wait_for_completion(&xfer->done); } static const struct scmi_transport_ops scmi_virtio_ops = { @@ -430,7 +436,7 @@ static const struct scmi_transport_ops scmi_virtio_ops = { .fetch_response = virtio_fetch_response, .fetch_notification = virtio_fetch_notification, .clear_channel = dummy_clear_channel, - .poll_done = dummy_poll_done, + .poll_done = virtio_poll_done, }; static int scmi_vio_probe(struct virtio_device *vdev) -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Cristian Marussi <cristian.marussi@arm.com> To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, virtualization@lists.linux-foundation.org, virtio-dev@lists.oasis-open.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, Jonathan.Cameron@Huawei.com, f.fainelli@gmail.com, etienne.carriere@linaro.org, vincent.guittot@linaro.org, souvik.chakravarty@arm.com, cristian.marussi@arm.com, igor.skalkin@opensynergy.com, peter.hilber@opensynergy.com, alex.bennee@linaro.org, jean-philippe@linaro.org, mikhail.golubev@opensynergy.com, anton.yakovlev@opensynergy.com, Vasyl.Vavrychuk@opensynergy.com, Andriy.Tryshnivskyy@opensynergy.com Subject: [PATCH v4 16/16] firmware: arm_scmi: Add polling mode to virtio transport Date: Fri, 11 Jun 2021 17:59:37 +0100 [thread overview] Message-ID: <20210611165937.701-17-cristian.marussi@arm.com> (raw) In-Reply-To: <20210611165937.701-1-cristian.marussi@arm.com> Enable polling mode support to virtio transport. Upon reception of a synchronous command response for a transfer that has the hdr.poll_completion flag set, virtio transport now simply completes the same completion which .poll_done() is spinning on. Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> --- Note that as of now in order to test this you have to forcibly enable hdr.poll_completion in the core and increase SCMI_MAX_POLL_TO_NS. These workarounds won't be needed anymore once addressed by a distinct series currently under review. --- drivers/firmware/arm_scmi/virtio.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/firmware/arm_scmi/virtio.c b/drivers/firmware/arm_scmi/virtio.c index 4412bc590ca7..f77c7f288d4c 100644 --- a/drivers/firmware/arm_scmi/virtio.c +++ b/drivers/firmware/arm_scmi/virtio.c @@ -158,12 +158,12 @@ static void scmi_process_vqueue_input(struct scmi_vio_channel *vioch, /* Drop processed virtio message anyway */ scmi_finalize_message(vioch, msg); + /* Deliver DRESP, NOTIF and non-polled RESP */ if (vioch->is_rx || !xfer->hdr.poll_completion) scmi_rx_callback(vioch->cinfo, msg_hdr); else - dev_warn(vioch->cinfo->dev, - "Polling mode NOT supported. Dropped hdr:0X%X\n", - msg_hdr); + /* poll_done() is busy-waiting on this */ + complete(&xfer->done); scmi_transfer_release(vioch->cinfo, xfer); } @@ -414,10 +414,16 @@ static void dummy_clear_channel(struct scmi_chan_info *cinfo) { } -static bool dummy_poll_done(struct scmi_chan_info *cinfo, - struct scmi_xfer *xfer) +static bool virtio_poll_done(struct scmi_chan_info *cinfo, + struct scmi_xfer *xfer) { - return false; + /* + * In polling mode SCMI core does not use xfer->done completion, + * so we can busy-wait on this same completion without adding + * a new flag: this is completed properly upon msg reception in + * scmi_process_vqueue_input(). + */ + return try_wait_for_completion(&xfer->done); } static const struct scmi_transport_ops scmi_virtio_ops = { @@ -430,7 +436,7 @@ static const struct scmi_transport_ops scmi_virtio_ops = { .fetch_response = virtio_fetch_response, .fetch_notification = virtio_fetch_notification, .clear_channel = dummy_clear_channel, - .poll_done = dummy_poll_done, + .poll_done = virtio_poll_done, }; static int scmi_vio_probe(struct virtio_device *vdev) -- 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-06-11 17:01 UTC|newest] Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-11 16:59 [PATCH v4 00/16] Introduce SCMI VirtIO transport Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 01/16] firmware: arm_scmi: Fix max pending messages boundary check Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-07-01 8:42 ` Peter Hilber 2021-07-01 8:42 ` [virtio-dev] " Peter Hilber 2021-07-01 8:42 ` Peter Hilber 2021-07-01 10:04 ` Cristian Marussi 2021-07-01 10:04 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 02/16] firmware: arm_scmi: Add support for type handling in common functions Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 03/16] firmware: arm_scmi: Add transport optional init/exit support Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-14 13:29 ` Jonathan Cameron 2021-06-14 13:29 ` Jonathan Cameron 2021-06-16 9:04 ` Cristian Marussi 2021-06-16 9:04 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 04/16] firmware: arm_scmi: Introduce monotonically increasing tokens Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-14 13:53 ` Jonathan Cameron 2021-06-14 13:53 ` Jonathan Cameron 2021-06-16 9:11 ` Cristian Marussi 2021-06-16 9:11 ` Cristian Marussi 2021-07-01 8:42 ` Peter Hilber 2021-07-01 8:42 ` [virtio-dev] " Peter Hilber 2021-07-01 8:42 ` Peter Hilber 2021-07-01 10:16 ` Cristian Marussi 2021-07-01 10:16 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 05/16] firmware: arm_scmi: Introduce delegated xfers support Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-07-01 8:42 ` Peter Hilber 2021-07-01 8:42 ` [virtio-dev] " Peter Hilber 2021-07-01 8:42 ` Peter Hilber 2021-07-01 10:24 ` Cristian Marussi 2021-07-01 10:24 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 06/16] firmware: arm_scmi, smccc, mailbox: Make shmem based transports optional Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-07-01 8:42 ` Peter Hilber 2021-07-01 8:42 ` [virtio-dev] " Peter Hilber 2021-07-01 8:42 ` Peter Hilber 2021-07-01 10:27 ` Cristian Marussi 2021-07-01 10:27 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 07/16] firmware: arm_scmi: Add op to override max message # Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-14 14:04 ` Jonathan Cameron 2021-06-14 14:04 ` Jonathan Cameron 2021-06-16 9:13 ` Cristian Marussi 2021-06-16 9:13 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 08/16] [RFC][REWORK] " Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 09/16] firmware: arm_scmi: Add optional link_supplier() transport op Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 10/16] firmware: arm_scmi: Add per-device transport private info Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 11/16] firmware: arm_scmi: Add is_scmi_protocol_device() Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 12/16] firmware: arm_scmi: Add message passing abstractions for transports Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-14 14:10 ` Jonathan Cameron 2021-06-14 14:10 ` Jonathan Cameron 2021-06-16 9:14 ` Cristian Marussi 2021-06-16 9:14 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 13/16] dt-bindings: arm: Add virtio transport for SCMI Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-24 19:22 ` Rob Herring 2021-06-24 19:22 ` Rob Herring 2021-06-24 19:22 ` Rob Herring 2021-07-01 8:43 ` Peter Hilber 2021-07-01 8:43 ` [virtio-dev] " Peter Hilber 2021-07-01 8:43 ` Peter Hilber 2021-07-01 10:31 ` Cristian Marussi 2021-07-01 10:31 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 14/16] firmware: arm_scmi: Add virtio transport Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-06-14 14:23 ` Jonathan Cameron 2021-06-14 14:23 ` Jonathan Cameron 2021-06-16 10:18 ` Cristian Marussi 2021-06-16 10:18 ` Cristian Marussi 2021-07-01 8:43 ` Peter Hilber 2021-07-01 8:43 ` [virtio-dev] " Peter Hilber 2021-07-01 8:43 ` Peter Hilber 2021-07-01 10:34 ` Cristian Marussi 2021-07-01 10:34 ` Cristian Marussi 2021-06-11 16:59 ` [PATCH v4 15/16] [RFC][REWORK] firmware: arm_scmi: make virtio-scmi use delegated xfers Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi 2021-07-01 8:43 ` Peter Hilber 2021-07-01 8:43 ` [virtio-dev] " Peter Hilber 2021-07-01 8:43 ` Peter Hilber 2021-07-01 11:26 ` Cristian Marussi 2021-07-01 11:26 ` Cristian Marussi 2021-06-11 16:59 ` Cristian Marussi [this message] 2021-06-11 16:59 ` [PATCH v4 16/16] firmware: arm_scmi: Add polling mode to virtio transport Cristian Marussi 2021-06-14 11:43 ` [PATCH v4 00/16] Introduce SCMI VirtIO transport Christoph Hellwig 2021-06-14 11:43 ` Christoph Hellwig 2021-06-14 11:43 ` Christoph Hellwig 2021-06-14 14:03 ` Cristian Marussi 2021-06-14 14:03 ` Cristian Marussi
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=20210611165937.701-17-cristian.marussi@arm.com \ --to=cristian.marussi@arm.com \ --cc=Andriy.Tryshnivskyy@opensynergy.com \ --cc=Jonathan.Cameron@Huawei.com \ --cc=Vasyl.Vavrychuk@opensynergy.com \ --cc=alex.bennee@linaro.org \ --cc=anton.yakovlev@opensynergy.com \ --cc=etienne.carriere@linaro.org \ --cc=f.fainelli@gmail.com \ --cc=igor.skalkin@opensynergy.com \ --cc=james.quinlan@broadcom.com \ --cc=jean-philippe@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mikhail.golubev@opensynergy.com \ --cc=peter.hilber@opensynergy.com \ --cc=souvik.chakravarty@arm.com \ --cc=sudeep.holla@arm.com \ --cc=vincent.guittot@linaro.org \ --cc=virtio-dev@lists.oasis-open.org \ --cc=virtualization@lists.linux-foundation.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.