All of 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 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.