From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> To: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org, tiwai@suse.de, broonie@kernel.org, vkoul@kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, slawomir.blauciak@intel.com, Bard liao <yung-chuan.liao@linux.intel.com>, Rander Wang <rander.wang@linux.intel.com>, Ranjani Sridharan <ranjani.sridharan@linux.intel.com>, Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>, Sanyog Kale <sanyog.r.kale@intel.com> Subject: [PATCH v2 03/19] soundwire: bus: add PM/no-PM versions of read/write functions Date: Wed, 6 Nov 2019 13:22:07 -0600 [thread overview] Message-ID: <20191106192223.6003-4-pierre-louis.bossart@linux.intel.com> (raw) In-Reply-To: <20191106192223.6003-1-pierre-louis.bossart@linux.intel.com> Add support for pm_runtime with the appropriate error checks for sdw_write/read functions, e.g. when pm_runtime is not supported. Also expose internal functions without pm_runtime support, which are required to perform any sort of suspend/resume operation, as well as any enumeration tasks. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> --- drivers/soundwire/bus.c | 68 +++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 903aee258800..7f431677f152 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -317,6 +317,46 @@ int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave, return 0; } +/* + * Read/Write IO functions. + * no_pm versions can only be called by the bus, e.g. while enumerating or + * handling suspend-resume sequences. + * all clients need to use the pm versions + */ + +static int +sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) +{ + struct sdw_msg msg; + int ret; + + ret = sdw_fill_msg(&msg, slave, addr, count, + slave->dev_num, SDW_MSG_FLAG_READ, val); + if (ret < 0) + return ret; + + return sdw_transfer(slave->bus, &msg); +} + +static int +sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) +{ + struct sdw_msg msg; + int ret; + + ret = sdw_fill_msg(&msg, slave, addr, count, + slave->dev_num, SDW_MSG_FLAG_WRITE, val); + if (ret < 0) + return ret; + + return sdw_transfer(slave->bus, &msg); +} + +int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value) +{ + return sdw_nwrite_no_pm(slave, addr, 1, &value); +} + /** * sdw_nread() - Read "n" contiguous SDW Slave registers * @slave: SDW Slave @@ -326,19 +366,17 @@ int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave, */ int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) { - struct sdw_msg msg; int ret; - ret = sdw_fill_msg(&msg, slave, addr, count, - slave->dev_num, SDW_MSG_FLAG_READ, val); - if (ret < 0) - return ret; - ret = pm_runtime_get_sync(slave->bus->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_noidle(slave->bus->dev); return ret; + } + + ret = sdw_nread_no_pm(slave, addr, count, val); - ret = sdw_transfer(slave->bus, &msg); + pm_runtime_mark_last_busy(slave->bus->dev); pm_runtime_put(slave->bus->dev); return ret; @@ -354,19 +392,17 @@ EXPORT_SYMBOL(sdw_nread); */ int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) { - struct sdw_msg msg; int ret; - ret = sdw_fill_msg(&msg, slave, addr, count, - slave->dev_num, SDW_MSG_FLAG_WRITE, val); - if (ret < 0) - return ret; - ret = pm_runtime_get_sync(slave->bus->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_noidle(slave->bus->dev); return ret; + } + + ret = sdw_nwrite_no_pm(slave, addr, count, val); - ret = sdw_transfer(slave->bus, &msg); + pm_runtime_mark_last_busy(slave->bus->dev); pm_runtime_put(slave->bus->dev); return ret; -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
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 v2 03/19] soundwire: bus: add PM/no-PM versions of read/write functions Date: Wed, 6 Nov 2019 13:22:07 -0600 [thread overview] Message-ID: <20191106192223.6003-4-pierre-louis.bossart@linux.intel.com> (raw) In-Reply-To: <20191106192223.6003-1-pierre-louis.bossart@linux.intel.com> Add support for pm_runtime with the appropriate error checks for sdw_write/read functions, e.g. when pm_runtime is not supported. Also expose internal functions without pm_runtime support, which are required to perform any sort of suspend/resume operation, as well as any enumeration tasks. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> --- drivers/soundwire/bus.c | 68 +++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 903aee258800..7f431677f152 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -317,6 +317,46 @@ int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave, return 0; } +/* + * Read/Write IO functions. + * no_pm versions can only be called by the bus, e.g. while enumerating or + * handling suspend-resume sequences. + * all clients need to use the pm versions + */ + +static int +sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) +{ + struct sdw_msg msg; + int ret; + + ret = sdw_fill_msg(&msg, slave, addr, count, + slave->dev_num, SDW_MSG_FLAG_READ, val); + if (ret < 0) + return ret; + + return sdw_transfer(slave->bus, &msg); +} + +static int +sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) +{ + struct sdw_msg msg; + int ret; + + ret = sdw_fill_msg(&msg, slave, addr, count, + slave->dev_num, SDW_MSG_FLAG_WRITE, val); + if (ret < 0) + return ret; + + return sdw_transfer(slave->bus, &msg); +} + +int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value) +{ + return sdw_nwrite_no_pm(slave, addr, 1, &value); +} + /** * sdw_nread() - Read "n" contiguous SDW Slave registers * @slave: SDW Slave @@ -326,19 +366,17 @@ int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave, */ int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) { - struct sdw_msg msg; int ret; - ret = sdw_fill_msg(&msg, slave, addr, count, - slave->dev_num, SDW_MSG_FLAG_READ, val); - if (ret < 0) - return ret; - ret = pm_runtime_get_sync(slave->bus->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_noidle(slave->bus->dev); return ret; + } + + ret = sdw_nread_no_pm(slave, addr, count, val); - ret = sdw_transfer(slave->bus, &msg); + pm_runtime_mark_last_busy(slave->bus->dev); pm_runtime_put(slave->bus->dev); return ret; @@ -354,19 +392,17 @@ EXPORT_SYMBOL(sdw_nread); */ int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val) { - struct sdw_msg msg; int ret; - ret = sdw_fill_msg(&msg, slave, addr, count, - slave->dev_num, SDW_MSG_FLAG_WRITE, val); - if (ret < 0) - return ret; - ret = pm_runtime_get_sync(slave->bus->dev); - if (ret < 0) + if (ret < 0 && ret != -EACCES) { + pm_runtime_put_noidle(slave->bus->dev); return ret; + } + + ret = sdw_nwrite_no_pm(slave, addr, count, val); - ret = sdw_transfer(slave->bus, &msg); + pm_runtime_mark_last_busy(slave->bus->dev); pm_runtime_put(slave->bus->dev); return ret; -- 2.20.1 _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2019-11-06 19:23 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-06 19:22 [PATCH v2 00/19] soundwire: code hardening and suspend-resume support Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 01/19] soundwire: intel/cadence: fix timeouts in MSI mode Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 02/19] soundwire: fix race between driver probe and update_status callback Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` Pierre-Louis Bossart [this message] 2019-11-06 19:22 ` [alsa-devel] [PATCH v2 03/19] soundwire: bus: add PM/no-PM versions of read/write functions Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 04/19] soundwire: bus: write Slave Device Number without runtime_pm Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 05/19] soundwire: intel: add helpers for link power down and shim wake Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 06/19] soundwire: intel: Add basic power management support Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 07/19] soundwire: intel: add pm_runtime support Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 08/19] soundwire: intel: reset pm_runtime status during system resume Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 09/19] soundwire: bus: add helper to reset Slave status to UNATTACHED Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 10/19] soundwire: intel: call helper to reset Slave states on resume Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 11/19] soundwire: bus: check first if Slaves become UNATTACHED Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 12/19] soundwire: add enumeration_complete signaling Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 13/19] soundwire: bus: add initialization_complete signaling Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 14/19] soundwire: intel: disable pm_runtime when removing a master Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 15/19] soundwire: bus: disable pm_runtime in sdw_slave_delete Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 16/19] soundwire: stream: update state machine and add state checks Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 17/19] soundwire: stream: only prepare stream when it is configured Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 18/19] soundwire: stream: do not update parameters during DISABLED-PREPARED transition Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " Pierre-Louis Bossart 2019-11-06 19:22 ` [PATCH v2 19/19] soundwire: intel: reinitialize IP+DSP in .prepare() Pierre-Louis Bossart 2019-11-06 19:22 ` [alsa-devel] " 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=20191106192223.6003-4-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: 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.