From: Sanyog Kale <sanyog.r.kale@intel.com>
To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Cc: patches.audio@intel.com, gregkh@linuxfoundation.org,
alsa-devel@alsa-project.org, vkoul@kernel.org,
Shreyas NC <shreyas.nc@intel.com>
Subject: Re: [PATCH v2 4/6] soundwire: Handle multiple master instances in a stream
Date: Wed, 13 Jun 2018 11:24:41 +0530 [thread overview]
Message-ID: <20180613055441.GA1127@buildpc-HP-Z230> (raw)
In-Reply-To: <d6df99eb-e48b-7354-849d-cde43e33b504@linux.intel.com>
On Tue, Jun 12, 2018 at 02:12:46PM -0500, Pierre-Louis Bossart wrote:
>
>
> On 06/12/2018 05:53 AM, Shreyas NC wrote:
> >From: Vinod Koul <vkoul@kernel.org>
> >
> >For each SoundWire stream operation, we need to parse master
> >list and operate upon all master runtime.
> >
> >This patch does the boilerplate conversion of stream handling
> >from single master runtime to handle a list of master runtime.
> >
> >Signed-off-by: Sanyog Kale <sanyog.r.kale@intel.com>
> >Signed-off-by: Vinod Koul <vkoul@kernel.org>
> >Signed-off-by: Shreyas NC <shreyas.nc@intel.com>
> >---
> > drivers/soundwire/stream.c | 308 +++++++++++++++++++++++++-----------------
> > include/linux/soundwire/sdw.h | 2 -
> > 2 files changed, 185 insertions(+), 125 deletions(-)
> >
> >diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c
> >index eb942c6..36506a7 100644
> >--- a/drivers/soundwire/stream.c
> >+++ b/drivers/soundwire/stream.c
> >@@ -681,35 +681,44 @@ static int sdw_bank_switch(struct sdw_bus *bus)
> > static int do_bank_switch(struct sdw_stream_runtime *stream)
> > {
> >- struct sdw_master_runtime *m_rt = stream->m_rt;
> >+ struct sdw_master_runtime *m_rt = NULL;
> > const struct sdw_master_ops *ops;
> >- struct sdw_bus *bus = m_rt->bus;
> >+ struct sdw_bus *bus = NULL;
> > int ret = 0;
> >- ops = bus->ops;
> >- /* Pre-bank switch */
> >- if (ops->pre_bank_switch) {
> >- ret = ops->pre_bank_switch(bus);
> >+ list_for_each_entry(m_rt, &stream->master_list, stream_node) {
> >+ bus = m_rt->bus;
> >+ ops = bus->ops;
> >+
> >+ /* Pre-bank switch */
> >+ if (ops->pre_bank_switch) {
> >+ ret = ops->pre_bank_switch(bus);
> >+ if (ret < 0) {
> >+ dev_err(bus->dev,
> >+ "Pre bank switch op failed: %d", ret);
> >+ return ret;
> >+ }
> >+ }
> >+
> >+ /* Bank switch */
> >+ ret = sdw_bank_switch(bus);
> > if (ret < 0) {
> >- dev_err(bus->dev, "Pre bank switch op failed: %d", ret);
> >+ dev_err(bus->dev, "Bank switch failed: %d", ret);
> > return ret;
> > }
> You probably want to add a comment that in multi-link operation the actual
> bank_switch happens later and is done in a synchronized manner. This is lost
> if you just move code around and move the bank_switch into a loop.
>
> I am actually no longer clear just looking at this code on when the
> bank_switch happens (i know we've discussed this before but I am trying to
> find out just based on this v2 instead of projecting how I think it should
> work):
> In Patch 6/6 it's pretty obvious that the bank switch happens when the
> SyncGO bit is set, but there is no comment or explanation on how we reach
> the intel_post_bank_switch() routine once for all masters handling a stream
> when everything is based on loops. Clearly the intel_pre_bank_switch is
> called multiple times (once per master), I guess I am missing what the
> trigger is for the intel_post_bank_switch() routine to be invoked?
>
Hi Pierre,
To answer your last question, do_bank_switch is where we perform all the
bank switch operations.
In first loop for Master(s) involved in stream, ops->pre_bank_switch and
bank_switch is performed. In 2nd loop for Master(s) involved in stream,
ops->post_bank_switch and wait for bank switch is performed.
Assuming a stream with Master 1 and Master 2, the go_sync bit will be
set in Master 1 intel_post_bank_switch call which will trigger bank
switch for both the Master's. The Master 2 intel_post_bank_switch call
will just return as it will won't see CMDSYNC bit set for any Master(s).
> > }
> >- /* Bank switch */
> >- ret = sdw_bank_switch(bus);
> >- if (ret < 0) {
> >- dev_err(bus->dev, "Bank switch failed: %d", ret);
> >- return ret;
> >- }
> >-
> > /* Post-bank switch */
> >- if (ops->post_bank_switch) {
> >- ret = ops->post_bank_switch(bus);
> >- if (ret < 0) {
> >- dev_err(bus->dev,
> >+ list_for_each_entry(m_rt, &stream->master_list, stream_node) {
> >+ bus = m_rt->bus;
> >+ ops = bus->ops;
> >+ if (ops->post_bank_switch) {
> >+ ret = ops->post_bank_switch(bus);
> >+ if (ret < 0) {
> >+ dev_err(bus->dev,
> > "Post bank switch op failed: %d", ret);
> >+ }
> > }
> > }
> > };
>
--
next prev parent reply other threads:[~2018-06-13 5:54 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-12 10:53 [PATCH v2 0/6] soundwire: Add multi link support Shreyas NC
2018-06-12 10:53 ` [PATCH v2 1/6] Documentation: soundwire: Add documentation for Multi link Shreyas NC
2018-06-12 10:53 ` [PATCH v2 2/6] soundwire: Initialize completion for defer messages Shreyas NC
2018-06-12 10:53 ` [PATCH v2 3/6] soundwire: Add support to lock across bus instances Shreyas NC
2018-06-12 10:53 ` [PATCH v2 4/6] soundwire: Handle multiple master instances in a stream Shreyas NC
2018-06-12 19:12 ` Pierre-Louis Bossart
2018-06-13 5:54 ` Sanyog Kale [this message]
2018-06-13 16:55 ` Pierre-Louis Bossart
2018-06-14 3:12 ` Shreyas NC
2018-06-13 10:45 ` Shreyas NC
2018-06-12 10:53 ` [PATCH v2 5/6] soundwire: Add support for multilink bank switch Shreyas NC
2018-06-12 10:53 ` [PATCH v2 6/6] soundwire: intel: Add pre/post bank switch ops Shreyas NC
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=20180613055441.GA1127@buildpc-HP-Z230 \
--to=sanyog.r.kale@intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=gregkh@linuxfoundation.org \
--cc=patches.audio@intel.com \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=shreyas.nc@intel.com \
--cc=vkoul@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.