Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] ASoC: Intel: add runtime power management support
@ 2014-10-30  5:08 Vinod Koul
  2014-10-30  5:08 ` [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream Vinod Koul
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Vinod Koul @ 2014-10-30  5:08 UTC (permalink / raw)
  To: alsa-devel; +Cc: Vinod Koul, broonie, subhransu.s.prusty, lgirdwood

This series fixes the device opne pm handlinga dn adds the runtime pm
support. Also we fix lock usage while changing teh driver state

Mythri P K (1):
  Audio: SST: use lock when changing SST state.

Subhransu S. Prusty (1):
  ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream

Vinod Koul (1):
  ASoC: Intel: sst: add runtime power management handling

 sound/soc/intel/sst/sst.c               |   71 ++++++++++++++++++++++++++++++-
 sound/soc/intel/sst/sst_drv_interface.c |   12 ++----
 sound/soc/intel/sst/sst_ipc.c           |    2 +-
 3 files changed, 75 insertions(+), 10 deletions(-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream
  2014-10-30  5:08 [PATCH 0/3] ASoC: Intel: add runtime power management support Vinod Koul
@ 2014-10-30  5:08 ` Vinod Koul
  2014-10-31 12:30   ` Mark Brown
  2014-10-30  5:08 ` [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling Vinod Koul
  2014-10-30  5:08 ` [PATCH 3/3] Audio: SST: use lock when changing SST state Vinod Koul
  2 siblings, 1 reply; 7+ messages in thread
From: Vinod Koul @ 2014-10-30  5:08 UTC (permalink / raw)
  To: alsa-devel; +Cc: Vinod Koul, broonie, subhransu.s.prusty, lgirdwood

From: Subhransu S. Prusty <subhransu.s.prusty@intel.com>

It's already done in open/close.

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/sst/sst_drv_interface.c |   12 ++++--------
 1 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/sound/soc/intel/sst/sst_drv_interface.c b/sound/soc/intel/sst/sst_drv_interface.c
index 183b1eb..4187057 100644
--- a/sound/soc/intel/sst/sst_drv_interface.c
+++ b/sound/soc/intel/sst/sst_drv_interface.c
@@ -163,16 +163,11 @@ static int sst_open_pcm_stream(struct device *dev,
 	if (!str_param)
 		return -EINVAL;
 
-	retval = pm_runtime_get_sync(ctx->dev);
-	if (retval < 0)
-		return retval;
 	retval = sst_get_stream(ctx, str_param);
-	if (retval > 0) {
+	if (retval > 0)
 		ctx->stream_cnt++;
-	} else {
+	else
 		dev_err(ctx->dev, "sst_get_stream returned err %d\n", retval);
-		sst_pm_runtime_put(ctx);
-	}
 
 	return retval;
 }
@@ -212,7 +207,8 @@ put:
 	stream->period_elapsed = NULL;
 	ctx->stream_cnt--;
 
-	sst_pm_runtime_put(ctx);
+	if (retval)
+		dev_err(ctx->dev, "free stream returned err %d\n", retval);
 
 	dev_dbg(ctx->dev, "Exit\n");
 	return 0;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling
  2014-10-30  5:08 [PATCH 0/3] ASoC: Intel: add runtime power management support Vinod Koul
  2014-10-30  5:08 ` [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream Vinod Koul
@ 2014-10-30  5:08 ` Vinod Koul
  2014-10-30 18:06   ` Mark Brown
  2014-10-30  5:08 ` [PATCH 3/3] Audio: SST: use lock when changing SST state Vinod Koul
  2 siblings, 1 reply; 7+ messages in thread
From: Vinod Koul @ 2014-10-30  5:08 UTC (permalink / raw)
  To: alsa-devel; +Cc: Vinod Koul, broonie, subhransu.s.prusty, lgirdwood

This patch adds the runtime pm handlers, the driver already has code for
get/put for runtiem pm and only these handlers being missing.

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/sst/sst.c |   73 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 72 insertions(+), 1 deletions(-)

diff --git a/sound/soc/intel/sst/sst.c b/sound/soc/intel/sst/sst.c
index fa34217..8eb7148 100644
--- a/sound/soc/intel/sst/sst.c
+++ b/sound/soc/intel/sst/sst.c
@@ -152,6 +152,23 @@ static irqreturn_t intel_sst_irq_thread_mrfld(int irq, void *context)
 	return IRQ_HANDLED;
 }
 
+static int sst_save_dsp_context_v2(struct intel_sst_drv *sst)
+{
+	int ret = 0;
+
+	ret = sst_prepare_and_post_msg(sst, SST_TASK_ID_MEDIA, IPC_CMD,
+			IPC_PREP_D3, PIPE_RSVD, 0, NULL, NULL,
+			true, true, false, true);
+
+	if (ret < 0) {
+		dev_err(sst->dev, "not suspending FW!!!");
+		return -EIO;
+	}
+
+	return 0;
+}
+
+
 static struct intel_sst_ops mrfld_ops = {
 	.interrupt = intel_sst_interrupt_mrfld,
 	.irq_thread = intel_sst_irq_thread_mrfld,
@@ -160,6 +177,7 @@ static struct intel_sst_ops mrfld_ops = {
 	.reset = intel_sst_reset_dsp_mrfld,
 	.post_message = sst_post_message_mrfld,
 	.process_reply = sst_process_reply_mrfld,
+	.save_dsp_context =  sst_save_dsp_context_v2,
 	.alloc_stream = sst_alloc_stream_mrfld,
 	.post_download = sst_post_download_mrfld,
 };
@@ -418,7 +436,55 @@ static void intel_sst_remove(struct pci_dev *pci)
 	pci_set_drvdata(pci, NULL);
 }
 
-/* PCI Routines */
+static int intel_sst_runtime_suspend(struct device *dev)
+{
+	int ret = 0;
+	struct intel_sst_drv *ctx = dev_get_drvdata(dev);
+
+	dev_info(dev, "runtime_suspend called\n");
+	if (ctx->sst_state == SST_RESET) {
+		dev_dbg(dev, "LPE is already in RESET state, No action");
+		return 0;
+	}
+	/*save fw context*/
+	if (ctx->ops->save_dsp_context(ctx))
+		return -EBUSY;
+
+	/* Move the SST state to Reset */
+	sst_set_fw_state_locked(ctx, SST_RESET);
+
+	synchronize_irq(ctx->irq_num);
+	flush_workqueue(ctx->post_msg_wq);
+
+	return ret;
+}
+
+static int intel_sst_runtime_resume(struct device *dev)
+{
+	int ret = 0;
+	struct intel_sst_drv *ctx = dev_get_drvdata(dev);
+
+	dev_info(dev, "runtime_resume called\n");
+
+	mutex_lock(&ctx->sst_lock);
+	if (ctx->sst_state == SST_RESET) {
+		dev_dbg(dev, "DSP Downloading FW now...\n");
+		ret = sst_load_fw(ctx);
+		if (ret) {
+			dev_err(dev, "FW download fail %x\n", ret);
+			ctx->sst_state = SST_RESET;
+		}
+	}
+	mutex_unlock(&ctx->sst_lock);
+	return ret;
+}
+
+static const struct dev_pm_ops intel_sst_pm = {
+	.runtime_suspend = intel_sst_runtime_suspend,
+	.runtime_resume = intel_sst_runtime_resume,
+};
+
+/*PCI Routines*/
 static struct pci_device_id intel_sst_ids[] = {
 	{ PCI_VDEVICE(INTEL, SST_MRFLD_PCI_ID), 0},
 	{ 0, }
@@ -429,6 +495,11 @@ static struct pci_driver sst_driver = {
 	.id_table = intel_sst_ids,
 	.probe = intel_sst_probe,
 	.remove = intel_sst_remove,
+#ifdef CONFIG_PM
+	.driver = {
+		.pm = &intel_sst_pm,
+	},
+#endif
 };
 
 module_pci_driver(sst_driver);
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] Audio: SST: use lock when changing SST state.
  2014-10-30  5:08 [PATCH 0/3] ASoC: Intel: add runtime power management support Vinod Koul
  2014-10-30  5:08 ` [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream Vinod Koul
  2014-10-30  5:08 ` [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling Vinod Koul
@ 2014-10-30  5:08 ` Vinod Koul
  2 siblings, 0 replies; 7+ messages in thread
From: Vinod Koul @ 2014-10-30  5:08 UTC (permalink / raw)
  To: alsa-devel; +Cc: Vinod Koul, Mythri P K, broonie, subhransu.s.prusty, lgirdwood

From: Mythri P K <mythri.p.k@intel.com>

SST state change should be done under sst_lock

Signed-off-by: Mythri P K <mythri.p.k@intel.com>
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/sst/sst.c     |    4 +---
 sound/soc/intel/sst/sst_ipc.c |    2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/sound/soc/intel/sst/sst.c b/sound/soc/intel/sst/sst.c
index 8eb7148..05aba24 100644
--- a/sound/soc/intel/sst/sst.c
+++ b/sound/soc/intel/sst/sst.c
@@ -466,16 +466,14 @@ static int intel_sst_runtime_resume(struct device *dev)
 
 	dev_info(dev, "runtime_resume called\n");
 
-	mutex_lock(&ctx->sst_lock);
 	if (ctx->sst_state == SST_RESET) {
 		dev_dbg(dev, "DSP Downloading FW now...\n");
 		ret = sst_load_fw(ctx);
 		if (ret) {
 			dev_err(dev, "FW download fail %x\n", ret);
-			ctx->sst_state = SST_RESET;
+			sst_set_fw_state_locked(ctx, SST_RESET);
 		}
 	}
-	mutex_unlock(&ctx->sst_lock);
 	return ret;
 }
 
diff --git a/sound/soc/intel/sst/sst_ipc.c b/sound/soc/intel/sst/sst_ipc.c
index 2126f5b..484e609 100644
--- a/sound/soc/intel/sst/sst_ipc.c
+++ b/sound/soc/intel/sst/sst_ipc.c
@@ -230,7 +230,7 @@ static void process_fw_init(struct intel_sst_drv *sst_drv_ctx,
 
 	dev_dbg(sst_drv_ctx->dev, "*** FW Init msg came***\n");
 	if (init->result) {
-		sst_drv_ctx->sst_state =  SST_RESET;
+		sst_set_fw_state_locked(sst_drv_ctx, SST_RESET);
 		dev_err(sst_drv_ctx->dev, "FW Init failed, Error %x\n",
 				init->result);
 		retval = init->result;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling
  2014-10-30  5:08 ` [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling Vinod Koul
@ 2014-10-30 18:06   ` Mark Brown
  2014-10-31  5:44     ` Vinod Koul
  0 siblings, 1 reply; 7+ messages in thread
From: Mark Brown @ 2014-10-30 18:06 UTC (permalink / raw)
  To: Vinod Koul; +Cc: alsa-devel, subhransu.s.prusty, lgirdwood


[-- Attachment #1.1: Type: text/plain, Size: 682 bytes --]

On Thu, Oct 30, 2014 at 10:38:55AM +0530, Vinod Koul wrote:

> +	ret = sst_prepare_and_post_msg(sst, SST_TASK_ID_MEDIA, IPC_CMD,
> +			IPC_PREP_D3, PIPE_RSVD, 0, NULL, NULL,
> +			true, true, false, true);
> +
> +	if (ret < 0) {
> +		dev_err(sst->dev, "not suspending FW!!!");
> +		return -EIO;

Better to print and pass back the actual error code we got.

> +	dev_info(dev, "runtime_suspend called\n");
> +	if (ctx->sst_state == SST_RESET) {

Drop this down to a dev_dbg() or remove it please (and some others later
on).

> +		dev_dbg(dev, "LPE is already in RESET state, No action");

Missing \n.

> +		return 0;
> +	}
> +	/*save fw context*/

/* Upstream comment style please */

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling
  2014-10-30 18:06   ` Mark Brown
@ 2014-10-31  5:44     ` Vinod Koul
  0 siblings, 0 replies; 7+ messages in thread
From: Vinod Koul @ 2014-10-31  5:44 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel, subhransu.s.prusty, lgirdwood


[-- Attachment #1.1: Type: text/plain, Size: 921 bytes --]

On Thu, Oct 30, 2014 at 06:06:09PM +0000, Mark Brown wrote:
> On Thu, Oct 30, 2014 at 10:38:55AM +0530, Vinod Koul wrote:
> 
> > +	ret = sst_prepare_and_post_msg(sst, SST_TASK_ID_MEDIA, IPC_CMD,
> > +			IPC_PREP_D3, PIPE_RSVD, 0, NULL, NULL,
> > +			true, true, false, true);
> > +
> > +	if (ret < 0) {
> > +		dev_err(sst->dev, "not suspending FW!!!");
> > +		return -EIO;
> 
> Better to print and pass back the actual error code we got.
OK

> 
> > +	dev_info(dev, "runtime_suspend called\n");
> > +	if (ctx->sst_state == SST_RESET) {
> 
> Drop this down to a dev_dbg() or remove it please (and some others later
> on).
Oh yes, did remove some will celanup others
> 
> > +		dev_dbg(dev, "LPE is already in RESET state, No action");
> 
> Missing \n.
> 
> > +		return 0;
> > +	}
> > +	/*save fw context*/
> 
> /* Upstream comment style please */
Sure will check these

Thanks
-- 
~Vinod

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream
  2014-10-30  5:08 ` [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream Vinod Koul
@ 2014-10-31 12:30   ` Mark Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2014-10-31 12:30 UTC (permalink / raw)
  To: Vinod Koul; +Cc: alsa-devel, subhransu.s.prusty, lgirdwood


[-- Attachment #1.1: Type: text/plain, Size: 181 bytes --]

On Thu, Oct 30, 2014 at 10:38:54AM +0530, Vinod Koul wrote:
> From: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
> 
> It's already done in open/close.

Applied, thanks.

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-10-31 12:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-30  5:08 [PATCH 0/3] ASoC: Intel: add runtime power management support Vinod Koul
2014-10-30  5:08 ` [PATCH 1/3] ASoC: Intel: mrfld: Fix runtime pm calls in sst_open_pcm_stream Vinod Koul
2014-10-31 12:30   ` Mark Brown
2014-10-30  5:08 ` [PATCH 2/3] ASoC: Intel: sst: add runtime power management handling Vinod Koul
2014-10-30 18:06   ` Mark Brown
2014-10-31  5:44     ` Vinod Koul
2014-10-30  5:08 ` [PATCH 3/3] Audio: SST: use lock when changing SST state Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox