alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] ASoC: Intel: Skylake: Refine manifest module info
@ 2016-08-10  4:10 Vinod Koul
  2016-08-10  4:10 ` [PATCH 1/3] ASoC: Intel: Skylake: modify snd_skl_get_module_info args Vinod Koul
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Vinod Koul @ 2016-08-10  4:10 UTC (permalink / raw)
  To: alsa-devel; +Cc: liam.r.girdwood, patches.audio, broonie, Vinod Koul

The module query uses a local structure dfw_config and then populates
module skl_module_cfg. Instead we can pass skl_module_cfg as argument
and get it updated in snd_skl_get_module_info()

Also we can optimize runtime processing by using driver list to populate
module info after init. That makes runtime query introduced earlier
redundant so remove that while keeping error messages.

Dharageswari R (1):
  ASoC: Intel: Skylake: modify snd_skl_get_module_info args

Vinod Koul (2):
  ASoC: Intel: Skylake: Populate modules after loading
  ASoC: Intel: Skylake: remove module id query at runtime

 sound/soc/intel/skylake/skl-pcm.c       | 27 +++++++++++++++++++++++++++
 sound/soc/intel/skylake/skl-sst-dsp.h   |  7 ++++---
 sound/soc/intel/skylake/skl-sst-utils.c | 10 +++++-----
 sound/soc/intel/skylake/skl-topology.c  | 22 ++++------------------
 4 files changed, 40 insertions(+), 26 deletions(-)

-- 
1.9.1

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

* [PATCH 1/3] ASoC: Intel: Skylake: modify snd_skl_get_module_info args
  2016-08-10  4:10 [PATCH 0/3] ASoC: Intel: Skylake: Refine manifest module info Vinod Koul
@ 2016-08-10  4:10 ` Vinod Koul
  2016-08-10  4:10 ` [PATCH 2/3] ASoC: Intel: Skylake: Populate modules after loading Vinod Koul
  2016-08-10  4:10 ` [PATCH 3/3] ASoC: Intel: Skylake: remove module id query at runtime Vinod Koul
  2 siblings, 0 replies; 6+ messages in thread
From: Vinod Koul @ 2016-08-10  4:10 UTC (permalink / raw)
  To: alsa-devel
  Cc: liam.r.girdwood, patches.audio, Dharageswari R, broonie,
	Vinod Koul

From: Dharageswari R <dharageswari.r@intel.com>

snd_skl_get_module_info() takes skl_dfw_module as an argument. The users
then updates the topology data, so instead pass skl_module_cfg and let
snd_skl_get_module_info() fill that up.

Signed-off-by: Dharageswari R <dharageswari.r@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/skylake/skl-sst-dsp.h   |  7 ++++---
 sound/soc/intel/skylake/skl-sst-utils.c | 10 +++++-----
 sound/soc/intel/skylake/skl-topology.c  | 14 +-------------
 3 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h
index fa053c039203..6ad5cab4b0d5 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.h
+++ b/sound/soc/intel/skylake/skl-sst-dsp.h
@@ -20,6 +20,7 @@
 #include <sound/memalloc.h>
 #include "skl-sst-cldma.h"
 #include "skl-tplg-interface.h"
+#include "skl-topology.h"
 
 struct sst_dsp;
 struct skl_sst;
@@ -210,10 +211,10 @@ int bxt_sst_init_fw(struct device *dev, struct skl_sst *ctx);
 void skl_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx);
 void bxt_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx);
 
-int snd_skl_get_module_info(struct skl_sst *ctx, u8 *uuid,
-		struct skl_dfw_module *dfw_config);
+int snd_skl_get_module_info(struct skl_sst *ctx,
+				struct skl_module_cfg *mconfig);
 int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
-		unsigned int offset, int index);
+				unsigned int offset, int index);
 void skl_freeup_uuid_list(struct skl_sst *ctx);
 
 int skl_dsp_strip_extended_manifest(struct firmware *fw);
diff --git a/sound/soc/intel/skylake/skl-sst-utils.c b/sound/soc/intel/skylake/skl-sst-utils.c
index fe36e0cf391c..0f990ebbe620 100644
--- a/sound/soc/intel/skylake/skl-sst-utils.c
+++ b/sound/soc/intel/skylake/skl-sst-utils.c
@@ -115,13 +115,13 @@ struct skl_ext_manifest_hdr {
 	u32 entries;
 };
 
-int snd_skl_get_module_info(struct skl_sst *ctx, u8 *uuid,
-			struct skl_dfw_module *dfw_config)
+int snd_skl_get_module_info(struct skl_sst *ctx,
+				struct skl_module_cfg *mconfig)
 {
 	struct uuid_module *module;
 	uuid_le *uuid_mod;
 
-	uuid_mod = (uuid_le *)uuid;
+	uuid_mod = (uuid_le *)mconfig->guid;
 
 	if (list_empty(&ctx->uuid_list)) {
 		dev_err(ctx->dev, "Module list is empty\n");
@@ -130,8 +130,8 @@ int snd_skl_get_module_info(struct skl_sst *ctx, u8 *uuid,
 
 	list_for_each_entry(module, &ctx->uuid_list, list) {
 		if (uuid_le_cmp(*uuid_mod, module->uuid) == 0) {
-			dfw_config->module_id = module->id;
-			dfw_config->is_loadable = module->is_loadable;
+			mconfig->id.module_id = module->id;
+			mconfig->is_loadable = module->is_loadable;
 
 			return 0;
 		}
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index c13fbefe6abf..c09e2c7608a3 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -475,24 +475,12 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
 
 		/* check if module ids are populated */
 		if (mconfig->id.module_id < 0) {
-			struct skl_dfw_module *dfw_config;
-
-			dfw_config = kzalloc(sizeof(*dfw_config), GFP_KERNEL);
-			if (!dfw_config)
-				return -ENOMEM;
-
-			ret = snd_skl_get_module_info(skl->skl_sst,
-				mconfig->guid, dfw_config);
+			ret = snd_skl_get_module_info(skl->skl_sst, mconfig);
 			if (ret < 0) {
 				dev_err(skl->skl_sst->dev,
 					"query module info failed: %d\n", ret);
-				kfree(dfw_config);
 				return ret;
 			}
-			mconfig->id.module_id = dfw_config->module_id;
-			mconfig->is_loadable = dfw_config->is_loadable;
-
-			kfree(dfw_config);
 		}
 
 		/* check resource available */
-- 
1.9.1

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

* [PATCH 2/3] ASoC: Intel: Skylake: Populate modules after loading
  2016-08-10  4:10 [PATCH 0/3] ASoC: Intel: Skylake: Refine manifest module info Vinod Koul
  2016-08-10  4:10 ` [PATCH 1/3] ASoC: Intel: Skylake: modify snd_skl_get_module_info args Vinod Koul
@ 2016-08-10  4:10 ` Vinod Koul
  2016-08-10 20:04   ` Applied "ASoC: Intel: Skylake: Populate modules after loading" to the asoc tree Mark Brown
  2016-08-10  4:10 ` [PATCH 3/3] ASoC: Intel: Skylake: remove module id query at runtime Vinod Koul
  2 siblings, 1 reply; 6+ messages in thread
From: Vinod Koul @ 2016-08-10  4:10 UTC (permalink / raw)
  To: alsa-devel; +Cc: liam.r.girdwood, patches.audio, broonie, Vinod Koul

Once topology and firmware are loaded, we can parse the manifest. Use driver
pipe and widget list to get list of all modules and populate the data.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/skylake/skl-pcm.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
index 140249269cdb..eb1f00b28df1 100644
--- a/sound/soc/intel/skylake/skl-pcm.c
+++ b/sound/soc/intel/skylake/skl-pcm.c
@@ -1138,6 +1138,32 @@ static int skl_pcm_new(struct snd_soc_pcm_runtime *rtd)
 	return retval;
 }
 
+static int skl_populate_modules(struct skl *skl)
+{
+	struct skl_pipeline *p;
+	struct skl_pipe_module *m;
+	struct snd_soc_dapm_widget *w;
+	struct skl_module_cfg *mconfig;
+	int ret;
+
+	list_for_each_entry(p, &skl->ppl_list, node) {
+		list_for_each_entry(m, &p->pipe->w_list, node) {
+
+			w = m->w;
+			mconfig = w->priv;
+
+			ret = snd_skl_get_module_info(skl->skl_sst, mconfig);
+			if (ret < 0) {
+				dev_err(skl->skl_sst->dev,
+					"query module info failed:%d\n", ret);
+				goto err;
+			}
+		}
+	}
+err:
+	return ret;
+}
+
 static int skl_platform_soc_probe(struct snd_soc_platform *platform)
 {
 	struct hdac_ext_bus *ebus = dev_get_drvdata(platform->dev);
@@ -1169,6 +1195,7 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
 			dev_err(platform->dev, "Failed to boot first fw: %d\n", ret);
 			return ret;
 		}
+		skl_populate_modules(skl);
 	}
 	pm_runtime_mark_last_busy(platform->dev);
 	pm_runtime_put_autosuspend(platform->dev);
-- 
1.9.1

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

* [PATCH 3/3] ASoC: Intel: Skylake: remove module id query at runtime
  2016-08-10  4:10 [PATCH 0/3] ASoC: Intel: Skylake: Refine manifest module info Vinod Koul
  2016-08-10  4:10 ` [PATCH 1/3] ASoC: Intel: Skylake: modify snd_skl_get_module_info args Vinod Koul
  2016-08-10  4:10 ` [PATCH 2/3] ASoC: Intel: Skylake: Populate modules after loading Vinod Koul
@ 2016-08-10  4:10 ` Vinod Koul
  2016-08-10 20:04   ` Applied "ASoC: Intel: Skylake: remove module id query at runtime" to the asoc tree Mark Brown
  2 siblings, 1 reply; 6+ messages in thread
From: Vinod Koul @ 2016-08-10  4:10 UTC (permalink / raw)
  To: alsa-devel; +Cc: liam.r.girdwood, patches.audio, broonie, Vinod Koul

Now that we have balanced loading of the topology file and split of init
and fw_init and fill module data during asoc probe.

So remove it from runtime, but keep error check in case things fall apart.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
---
 sound/soc/intel/skylake/skl-topology.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index c09e2c7608a3..4bc8f9c269db 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -475,12 +475,10 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
 
 		/* check if module ids are populated */
 		if (mconfig->id.module_id < 0) {
-			ret = snd_skl_get_module_info(skl->skl_sst, mconfig);
-			if (ret < 0) {
-				dev_err(skl->skl_sst->dev,
-					"query module info failed: %d\n", ret);
-				return ret;
-			}
+			dev_err(skl->skl_sst->dev,
+					"module %pUL id not populated\n",
+					(uuid_le *)mconfig->guid);
+			return -EIO;
 		}
 
 		/* check resource available */
-- 
1.9.1

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

* Applied "ASoC: Intel: Skylake: remove module id query at runtime" to the asoc tree
  2016-08-10  4:10 ` [PATCH 3/3] ASoC: Intel: Skylake: remove module id query at runtime Vinod Koul
@ 2016-08-10 20:04   ` Mark Brown
  0 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2016-08-10 20:04 UTC (permalink / raw)
  To: Vinod Koul; +Cc: liam.r.girdwood, patches.audio, alsa-devel, broonie

The patch

   ASoC: Intel: Skylake: remove module id query at runtime

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From a657ae7e5c0c9fd8858e5498e6de65c222d206d1 Mon Sep 17 00:00:00 2001
From: Vinod Koul <vinod.koul@intel.com>
Date: Wed, 10 Aug 2016 09:40:50 +0530
Subject: [PATCH] ASoC: Intel: Skylake: remove module id query at runtime

Now that we have balanced loading of the topology file and split of init
and fw_init and fill module data during asoc probe.

So remove it from runtime, but keep error check in case things fall apart.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/intel/skylake/skl-topology.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index c09e2c7608a3..4bc8f9c269db 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -475,12 +475,10 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
 
 		/* check if module ids are populated */
 		if (mconfig->id.module_id < 0) {
-			ret = snd_skl_get_module_info(skl->skl_sst, mconfig);
-			if (ret < 0) {
-				dev_err(skl->skl_sst->dev,
-					"query module info failed: %d\n", ret);
-				return ret;
-			}
+			dev_err(skl->skl_sst->dev,
+					"module %pUL id not populated\n",
+					(uuid_le *)mconfig->guid);
+			return -EIO;
 		}
 
 		/* check resource available */
-- 
2.8.1

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

* Applied "ASoC: Intel: Skylake: Populate modules after loading" to the asoc tree
  2016-08-10  4:10 ` [PATCH 2/3] ASoC: Intel: Skylake: Populate modules after loading Vinod Koul
@ 2016-08-10 20:04   ` Mark Brown
  0 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2016-08-10 20:04 UTC (permalink / raw)
  To: Vinod Koul; +Cc: liam.r.girdwood, patches.audio, alsa-devel, broonie

The patch

   ASoC: Intel: Skylake: Populate modules after loading

has been applied to the asoc tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From 64cb1d0ad0eada322c2011e15710d2a1c12ce8b6 Mon Sep 17 00:00:00 2001
From: Vinod Koul <vinod.koul@intel.com>
Date: Wed, 10 Aug 2016 09:40:49 +0530
Subject: [PATCH] ASoC: Intel: Skylake: Populate modules after loading

Once topology and firmware are loaded, we can parse the manifest. Use driver
pipe and widget list to get list of all modules and populate the data.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
 sound/soc/intel/skylake/skl-pcm.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
index 140249269cdb..eb1f00b28df1 100644
--- a/sound/soc/intel/skylake/skl-pcm.c
+++ b/sound/soc/intel/skylake/skl-pcm.c
@@ -1138,6 +1138,32 @@ static int skl_pcm_new(struct snd_soc_pcm_runtime *rtd)
 	return retval;
 }
 
+static int skl_populate_modules(struct skl *skl)
+{
+	struct skl_pipeline *p;
+	struct skl_pipe_module *m;
+	struct snd_soc_dapm_widget *w;
+	struct skl_module_cfg *mconfig;
+	int ret;
+
+	list_for_each_entry(p, &skl->ppl_list, node) {
+		list_for_each_entry(m, &p->pipe->w_list, node) {
+
+			w = m->w;
+			mconfig = w->priv;
+
+			ret = snd_skl_get_module_info(skl->skl_sst, mconfig);
+			if (ret < 0) {
+				dev_err(skl->skl_sst->dev,
+					"query module info failed:%d\n", ret);
+				goto err;
+			}
+		}
+	}
+err:
+	return ret;
+}
+
 static int skl_platform_soc_probe(struct snd_soc_platform *platform)
 {
 	struct hdac_ext_bus *ebus = dev_get_drvdata(platform->dev);
@@ -1169,6 +1195,7 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
 			dev_err(platform->dev, "Failed to boot first fw: %d\n", ret);
 			return ret;
 		}
+		skl_populate_modules(skl);
 	}
 	pm_runtime_mark_last_busy(platform->dev);
 	pm_runtime_put_autosuspend(platform->dev);
-- 
2.8.1

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

end of thread, other threads:[~2016-08-10 20:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-10  4:10 [PATCH 0/3] ASoC: Intel: Skylake: Refine manifest module info Vinod Koul
2016-08-10  4:10 ` [PATCH 1/3] ASoC: Intel: Skylake: modify snd_skl_get_module_info args Vinod Koul
2016-08-10  4:10 ` [PATCH 2/3] ASoC: Intel: Skylake: Populate modules after loading Vinod Koul
2016-08-10 20:04   ` Applied "ASoC: Intel: Skylake: Populate modules after loading" to the asoc tree Mark Brown
2016-08-10  4:10 ` [PATCH 3/3] ASoC: Intel: Skylake: remove module id query at runtime Vinod Koul
2016-08-10 20:04   ` Applied "ASoC: Intel: Skylake: remove module id query at runtime" to the asoc tree Mark Brown

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).