alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: alsa-devel@alsa-project.org
Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	tiwai@suse.de, gregkh@linuxfoundation.org,
	linux-kernel@vger.kernel.org,
	Ranjani Sridharan <ranjani.sridharan@linux.intel.com>,
	vkoul@kernel.org, broonie@kernel.org,
	srinivas.kandagatla@linaro.org, jank@cadence.com,
	slawomir.blauciak@intel.com,
	Sanyog Kale <sanyog.r.kale@intel.com>,
	Bard liao <yung-chuan.liao@linux.intel.com>,
	Rander Wang <rander.wang@linux.intel.com>
Subject: [alsa-devel] [PATCH v4 02/11] soundwire: sdw_slave: add enumeration_complete structure
Date: Mon,  9 Dec 2019 17:55:10 -0600	[thread overview]
Message-ID: <20191209235520.18727-3-pierre-louis.bossart@linux.intel.com> (raw)
In-Reply-To: <20191209235520.18727-1-pierre-louis.bossart@linux.intel.com>

When the Master starts the bus (be it during the initial boot or
system resume), it usually performs a HardReset to make sure
electrical levels are correct, then enables the control channel.

While the PM framework guarantees that the Slave devices will only
become 'active' once the Master completes the bus initialization,
there is still a risk of a race condition: the Slave enumeration is
handled in a separate interrupt thread triggered by hardware status
changes, so the Slave device may not be ready to accept commands when
the Slave driver tries to access the registers and restore settings in
its resume or pm_runtime_resume callbacks. In those cases, any
read/write commands from/to the Slave device will result in a timeout.

This patch adds an enumeration_complete structure. When the bus is
goes through a HardReset sequence and restarted, the Slave will be
marked as UNATTACHED, which will result in a call to
init_completion().

When the Slave reports its presence during PING frames as a non-zero
Device, the Master hardware will issue an interrupt and the bus driver
will invoke complete(). The order between init_completion()/complete()
is predictable since this is a Master-initiated transition.

The Slave driver may use wait_for_completion() in its resume callback.
When regmap is used, the Slave driver will typically set its regmap in
cache-only mode on suspend, then on resume block on
wait_for_completion(&enumeration_complete) to guarantee it is safe to
start read/write transactions. It may then exit the cache-only mode
and use a regmap_sync to restore settings. All these steps are
optional, their use completely depends on the Slave device
capabilities and how the Slave driver is implemented.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 include/linux/soundwire/sdw.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h
index cb1db4a7475d..3fa8d875b16b 100644
--- a/include/linux/soundwire/sdw.h
+++ b/include/linux/soundwire/sdw.h
@@ -551,6 +551,9 @@ struct sdw_slave_ops {
  * @probe_complete: completion utility to control potential races
  * on startup between driver probe/initialization and SoundWire
  * Slave state changes/implementation-defined interrupts
+ * @enumeration_complete: completion utility to control potential races
+ * on startup between device enumeration and read/write access to the
+ * Slave device
  */
 struct sdw_slave {
 	struct sdw_slave_id id;
@@ -567,6 +570,7 @@ struct sdw_slave {
 	u16 dev_num;
 	bool probed;
 	struct completion probe_complete;
+	struct completion enumeration_complete;
 };
 
 #define dev_to_sdw_dev(_dev) container_of(_dev, struct sdw_slave, dev)
-- 
2.20.1

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  parent reply	other threads:[~2019-12-09 23:57 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-09 23:55 [alsa-devel] [PATCH v4 00/11] soundwire: update ASoC interfaces Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 01/11] soundwire: sdw_slave: add probe_complete structure and new fields Pierre-Louis Bossart
2019-12-09 23:55 ` Pierre-Louis Bossart [this message]
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 03/11] soundwire: sdw_slave: add initialization_complete definition Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 04/11] soundwire: sdw_slave: track unattach_request to handle all init sequences Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 05/11] soundwire: intel: update interfaces between ASoC and SoundWire Pierre-Louis Bossart
2019-12-11 11:42   ` Vinod Koul
2019-12-11 14:22     ` Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 06/11] soundwire: intel: update stream callbacks for hwparams/free stream operations Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 07/11] soundwire: intel: update headers for interrupts Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 08/11] soundwire: intel: add link_list to handle interrupts with a single thread Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 09/11] soundwire: intel: add prototype for WAKEEN interrupt processing Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 10/11] soundwire: intel: add mutex for shared SHIM register access Pierre-Louis Bossart
2019-12-09 23:55 ` [alsa-devel] [PATCH v4 11/11] soundwire: intel: add clock stop quirks Pierre-Louis Bossart

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=20191209235520.18727-3-pierre-louis.bossart@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jank@cadence.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rander.wang@linux.intel.com \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=sanyog.r.kale@intel.com \
    --cc=slawomir.blauciak@intel.com \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=tiwai@suse.de \
    --cc=vkoul@kernel.org \
    --cc=yung-chuan.liao@linux.intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).