[alsa-devel] [PATCH 1/3] ASoC: Intel: Skylake: fix pointer scaling
From: Alan gnomes@lxorguk.ukuu.org.uk
skl_tplg_tlv_control_set does pointer maths on data but forgets that data is not uint8_t so the maths is already scaled in the pointer type.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/skylake/skl-topology.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index ba0d02d1613e..22a9e6fe1c05 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -1111,7 +1111,7 @@ static int skl_tplg_tlv_control_set(struct snd_kcontrol *kcontrol, return -EFAULT; } else { if (copy_from_user(ac->params, - data + 2 * sizeof(u32), size)) + data + 2, size)) return -EFAULT; }
From: Alan gnomes@lxorguk.ukuu.org.uk
dfw_ac->params is an array not a pointer. It will never be NULL. The check on ac->max appears sufficient.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/skylake/skl-topology.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 22a9e6fe1c05..99f50a034e1d 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -1657,8 +1657,7 @@ static int skl_init_algo_data(struct device *dev, struct soc_bytes_ext *be, if (!ac->params) return -ENOMEM;
- if (dfw_ac->params) - memcpy(ac->params, dfw_ac->params, ac->max); + memcpy(ac->params, dfw_ac->params, ac->max); }
be->dobj.private = ac;
The patch
ASoC: Intel: Skylake: remove bogus comparison of an array with NULL
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 edd7ea2d5486c12978fdc71c6efd493cbabeea60 Mon Sep 17 00:00:00 2001
From: Alan Cox alan@linux.intel.com Date: Mon, 22 Feb 2016 09:37:27 +0530 Subject: [PATCH] ASoC: Intel: Skylake: remove bogus comparison of an array with NULL
dfw_ac->params is an array not a pointer. It will never be NULL. The check on ac->max appears sufficient.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com Signed-off-by: Mark Brown broonie@kernel.org --- sound/soc/intel/skylake/skl-topology.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index ba0d02d..c95bbce 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -1657,8 +1657,7 @@ static int skl_init_algo_data(struct device *dev, struct soc_bytes_ext *be, if (!ac->params) return -ENOMEM;
- if (dfw_ac->params) - memcpy(ac->params, dfw_ac->params, ac->max); + memcpy(ac->params, dfw_ac->params, ac->max); }
be->dobj.private = ac;
NHLT table [1] header has fields like oem_id, oem_table_id and oem_revision. Use that to load a unique topology binary specific to that platform
NHLT Table is documented at: [1]: https://01.org/blogs/2016/intel-smart-sound-technology-audio-dsp
Signed-off-by: Yang A Fang yang.a.fang@intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/skylake/skl-nhlt.c | 34 ++++++++++++++++++++++++++++++++++ sound/soc/intel/skylake/skl-topology.c | 11 ++++++++--- sound/soc/intel/skylake/skl.c | 4 ++++ sound/soc/intel/skylake/skl.h | 3 +++ 4 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/sound/soc/intel/skylake/skl-nhlt.c b/sound/soc/intel/skylake/skl-nhlt.c index 6e4b21cdb1bd..14d1916ea9f8 100644 --- a/sound/soc/intel/skylake/skl-nhlt.c +++ b/sound/soc/intel/skylake/skl-nhlt.c @@ -145,3 +145,37 @@ struct nhlt_specific_cfg
return NULL; } + +static void skl_nhlt_trim_space(struct skl *skl) +{ + char *s = skl->tplg_name; + int cnt; + int i; + + cnt = 0; + for (i = 0; s[i]; i++) { + if (!isspace(s[i])) + s[cnt++] = s[i]; + } + + s[cnt] = '\0'; +} + +int skl_nhlt_update_topology_bin(struct skl *skl) +{ + struct nhlt_acpi_table *nhlt = (struct nhlt_acpi_table *)skl->nhlt; + struct hdac_bus *bus = ebus_to_hbus(&skl->ebus); + struct device *dev = bus->dev; + + dev_dbg(dev, "oem_id %.6s, oem_table_id %8s oem_revision %d\n", + nhlt->header.oem_id, nhlt->header.oem_table_id, + nhlt->header.oem_revision); + + snprintf(skl->tplg_name, sizeof(skl->tplg_name), "%x-%.6s-%.8s-%d%s", + skl->pci_id, nhlt->header.oem_id, nhlt->header.oem_table_id, + nhlt->header.oem_revision, "-tplg.bin"); + + skl_nhlt_trim_space(skl); + + return 0; +} diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 216d7a8e5680..ba0d02d1613e 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -1716,11 +1716,16 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus) struct hdac_bus *bus = ebus_to_hbus(ebus); struct skl *skl = ebus_to_skl(ebus);
- ret = request_firmware(&fw, "dfw_sst.bin", bus->dev); + ret = request_firmware(&fw, skl->tplg_name, bus->dev); if (ret < 0) { dev_err(bus->dev, "tplg fw %s load failed with %d\n", - "dfw_sst.bin", ret); - return ret; + skl->tplg_name, ret); + ret = request_firmware(&fw, "dfw_sst.bin", bus->dev); + if (ret < 0) { + dev_err(bus->dev, "Fallback tplg fw %s load failed with %d\n", + "dfw_sst.bin", ret); + return ret; + } }
/* diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index 60dfe28ee1da..643c877d272c 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -624,11 +624,15 @@ static int skl_probe(struct pci_dev *pci, if (err < 0) goto out_free;
+ skl->pci_id = pci->device; + skl->nhlt = skl_nhlt_init(bus->dev);
if (skl->nhlt == NULL) goto out_free;
+ skl_nhlt_update_topology_bin(skl); + pci_set_drvdata(skl->pci, ebus);
/* check if dsp is there */ diff --git a/sound/soc/intel/skylake/skl.h b/sound/soc/intel/skylake/skl.h index 4d18293b5537..1ca1911f1587 100644 --- a/sound/soc/intel/skylake/skl.h +++ b/sound/soc/intel/skylake/skl.h @@ -73,6 +73,8 @@ struct skl { struct list_head ppl_list;
const char *fw_name; + char tplg_name[64]; + unsigned short pci_id; const struct firmware *tplg;
int supend_active; @@ -96,6 +98,7 @@ void skl_nhlt_free(void *addr); struct nhlt_specific_cfg *skl_get_ep_blob(struct skl *skl, u32 instance, u8 link_type, u8 s_fmt, u8 no_ch, u32 s_rate, u8 dirn);
+int skl_nhlt_update_topology_bin(struct skl *skl); int skl_init_dsp(struct skl *skl); void skl_free_dsp(struct skl *skl); int skl_suspend_dsp(struct skl *skl);
The patch
ASoC: Intel: Skylake: Generate topology name for NHLT table header
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 4b235c43deb8283802281a299cb730001a6ad1da Mon Sep 17 00:00:00 2001
From: Vinod Koul vinod.koul@intel.com Date: Fri, 19 Feb 2016 11:42:34 +0530 Subject: [PATCH] ASoC: Intel: Skylake: Generate topology name for NHLT table header
NHLT table [1] header has fields like oem_id, oem_table_id and oem_revision. Use that to load a unique topology binary specific to that platform
NHLT Table is documented at: [1]: https://01.org/blogs/2016/intel-smart-sound-technology-audio-dsp
Signed-off-by: Yang A Fang yang.a.fang@intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com Signed-off-by: Mark Brown broonie@kernel.org --- sound/soc/intel/skylake/skl-nhlt.c | 34 ++++++++++++++++++++++++++++++++++ sound/soc/intel/skylake/skl-topology.c | 11 ++++++++--- sound/soc/intel/skylake/skl.c | 4 ++++ sound/soc/intel/skylake/skl.h | 3 +++ 4 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/sound/soc/intel/skylake/skl-nhlt.c b/sound/soc/intel/skylake/skl-nhlt.c index 6e4b21c..14d1916e 100644 --- a/sound/soc/intel/skylake/skl-nhlt.c +++ b/sound/soc/intel/skylake/skl-nhlt.c @@ -145,3 +145,37 @@ struct nhlt_specific_cfg
return NULL; } + +static void skl_nhlt_trim_space(struct skl *skl) +{ + char *s = skl->tplg_name; + int cnt; + int i; + + cnt = 0; + for (i = 0; s[i]; i++) { + if (!isspace(s[i])) + s[cnt++] = s[i]; + } + + s[cnt] = '\0'; +} + +int skl_nhlt_update_topology_bin(struct skl *skl) +{ + struct nhlt_acpi_table *nhlt = (struct nhlt_acpi_table *)skl->nhlt; + struct hdac_bus *bus = ebus_to_hbus(&skl->ebus); + struct device *dev = bus->dev; + + dev_dbg(dev, "oem_id %.6s, oem_table_id %8s oem_revision %d\n", + nhlt->header.oem_id, nhlt->header.oem_table_id, + nhlt->header.oem_revision); + + snprintf(skl->tplg_name, sizeof(skl->tplg_name), "%x-%.6s-%.8s-%d%s", + skl->pci_id, nhlt->header.oem_id, nhlt->header.oem_table_id, + nhlt->header.oem_revision, "-tplg.bin"); + + skl_nhlt_trim_space(skl); + + return 0; +} diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 216d7a8..ba0d02d 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -1716,11 +1716,16 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus) struct hdac_bus *bus = ebus_to_hbus(ebus); struct skl *skl = ebus_to_skl(ebus);
- ret = request_firmware(&fw, "dfw_sst.bin", bus->dev); + ret = request_firmware(&fw, skl->tplg_name, bus->dev); if (ret < 0) { dev_err(bus->dev, "tplg fw %s load failed with %d\n", - "dfw_sst.bin", ret); - return ret; + skl->tplg_name, ret); + ret = request_firmware(&fw, "dfw_sst.bin", bus->dev); + if (ret < 0) { + dev_err(bus->dev, "Fallback tplg fw %s load failed with %d\n", + "dfw_sst.bin", ret); + return ret; + } }
/* diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index 06f4b2c..f89abb1 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -573,11 +573,15 @@ static int skl_probe(struct pci_dev *pci, if (err < 0) goto out_free;
+ skl->pci_id = pci->device; + skl->nhlt = skl_nhlt_init(bus->dev);
if (skl->nhlt == NULL) goto out_free;
+ skl_nhlt_update_topology_bin(skl); + pci_set_drvdata(skl->pci, ebus);
/* check if dsp is there */ diff --git a/sound/soc/intel/skylake/skl.h b/sound/soc/intel/skylake/skl.h index 4d18293..1ca1911 100644 --- a/sound/soc/intel/skylake/skl.h +++ b/sound/soc/intel/skylake/skl.h @@ -73,6 +73,8 @@ struct skl { struct list_head ppl_list;
const char *fw_name; + char tplg_name[64]; + unsigned short pci_id; const struct firmware *tplg;
int supend_active; @@ -96,6 +98,7 @@ void skl_nhlt_free(void *addr); struct nhlt_specific_cfg *skl_get_ep_blob(struct skl *skl, u32 instance, u8 link_type, u8 s_fmt, u8 no_ch, u32 s_rate, u8 dirn);
+int skl_nhlt_update_topology_bin(struct skl *skl); int skl_init_dsp(struct skl *skl); void skl_free_dsp(struct skl *skl); int skl_suspend_dsp(struct skl *skl);
On Fri, Feb 19, 2016 at 11:42:32AM +0530, Vinod Koul wrote:
From: Alan gnomes@lxorguk.ukuu.org.uk
skl_tplg_tlv_control_set does pointer maths on data but forgets that data is not uint8_t so the maths is already scaled in the pointer type.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com
Please ensure that the name and signoff match up. I'm fairly sure that both are for the same person here but it's not something I should have to think about and it is important to ensure that we have signoffs for everything.
On Sat, Feb 20, 2016 at 12:33:45AM +0900, Mark Brown wrote:
On Fri, Feb 19, 2016 at 11:42:32AM +0530, Vinod Koul wrote:
From: Alan gnomes@lxorguk.ukuu.org.uk
skl_tplg_tlv_control_set does pointer maths on data but forgets that data is not uint8_t so the maths is already scaled in the pointer type.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com
Please ensure that the name and signoff match up. I'm fairly sure that both are for the same person here but it's not something I should have to think about and it is important to ensure that we have signoffs for everything.
Ah, sure will do. I think Alan wanted the SOB from his empyer ID. Alan how do you want me to fix this :) I will send this
On Sun, Feb 21, 2016 at 08:34:57AM +0530, Vinod Koul wrote:
On Sat, Feb 20, 2016 at 12:33:45AM +0900, Mark Brown wrote:
Please ensure that the name and signoff match up. I'm fairly sure that both are for the same person here but it's not something I should have to think about and it is important to ensure that we have signoffs for everything.
Ah, sure will do. I think Alan wanted the SOB from his empyer ID. Alan how do you want me to fix this :) I will send this
Well, I already applied this one anyway since it was a fix (though I did skip patch 2).
On Mon, Feb 22, 2016 at 12:16:56PM +0900, Mark Brown wrote:
On Sun, Feb 21, 2016 at 08:34:57AM +0530, Vinod Koul wrote:
On Sat, Feb 20, 2016 at 12:33:45AM +0900, Mark Brown wrote:
Please ensure that the name and signoff match up. I'm fairly sure that both are for the same person here but it's not something I should have to think about and it is important to ensure that we have signoffs for everything.
Ah, sure will do. I think Alan wanted the SOB from his empyer ID. Alan how do you want me to fix this :) I will send this
Well, I already applied this one anyway since it was a fix (though I did skip patch 2).
So travelling again :)
Yes I noticed that, will send the patch 2 in a short while
The patch
ASoC: Intel: Skylake: fix pointer scaling
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 65b4bcb82967fd5a60694c3477e58a04a9170aea Mon Sep 17 00:00:00 2001
From: Alan gnomes@lxorguk.ukuu.org.uk Date: Fri, 19 Feb 2016 11:42:32 +0530 Subject: [PATCH] ASoC: Intel: Skylake: fix pointer scaling
skl_tplg_tlv_control_set does pointer maths on data but forgets that data is not uint8_t so the maths is already scaled in the pointer type.
Signed-off-by: Alan Cox alan@linux.intel.com Signed-off-by: Vinod Koul vinod.koul@intel.com Signed-off-by: Mark Brown broonie@kernel.org --- sound/soc/intel/skylake/skl-topology.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 4624556..b77c253 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -950,7 +950,7 @@ static int skl_tplg_tlv_control_set(struct snd_kcontrol *kcontrol, return -EFAULT; } else { if (copy_from_user(ac->params, - data + 2 * sizeof(u32), size)) + data + 2, size)) return -EFAULT; }
participants (2)
-
Mark Brown
-
Vinod Koul