Commit 59283959 authored by Karol Trzcinski's avatar Karol Trzcinski Committed by Mark Brown

ASoC: SOF: log compiler name and version information

Log information about used compilator and optimization level
in sof firmware to host system.
It will be helful to catch some compiler dependent bugs.
Signed-off-by: default avatarKarol Trzcinski <karolx.trzcinski@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191218002616.7652-4-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent e8b7cab8
...@@ -32,6 +32,42 @@ static int get_ext_windows(struct snd_sof_dev *sdev, ...@@ -32,6 +32,42 @@ static int get_ext_windows(struct snd_sof_dev *sdev,
return 0; return 0;
} }
static int get_cc_info(struct snd_sof_dev *sdev,
struct sof_ipc_ext_data_hdr *ext_hdr)
{
int ret;
struct sof_ipc_cc_version *cc =
container_of(ext_hdr, struct sof_ipc_cc_version, ext_hdr);
dev_dbg(sdev->dev, "Firmware info: used compiler %s %d:%d:%d%s used optimization flags %s\n",
cc->name, cc->major, cc->minor, cc->micro, cc->desc,
cc->optim);
/* create read-only cc_version debugfs to store compiler version info */
/* use local copy of the cc_version to prevent data corruption */
if (sdev->first_boot) {
sdev->cc_version = devm_kmalloc(sdev->dev, cc->ext_hdr.hdr.size,
GFP_KERNEL);
if (!sdev->cc_version)
return -ENOMEM;
memcpy(sdev->cc_version, cc, cc->ext_hdr.hdr.size);
ret = snd_sof_debugfs_buf_item(sdev, sdev->cc_version,
cc->ext_hdr.hdr.size,
"cc_version", 0444);
/* errors are only due to memory allocation, not debugfs */
if (ret < 0) {
dev_err(sdev->dev, "error: snd_sof_debugfs_buf_item failed\n");
return ret;
}
}
return 0;
}
/* parse the extended FW boot data structures from FW boot message */ /* parse the extended FW boot data structures from FW boot message */
int snd_sof_fw_parse_ext_data(struct snd_sof_dev *sdev, u32 bar, u32 offset) int snd_sof_fw_parse_ext_data(struct snd_sof_dev *sdev, u32 bar, u32 offset)
{ {
...@@ -65,6 +101,9 @@ int snd_sof_fw_parse_ext_data(struct snd_sof_dev *sdev, u32 bar, u32 offset) ...@@ -65,6 +101,9 @@ int snd_sof_fw_parse_ext_data(struct snd_sof_dev *sdev, u32 bar, u32 offset)
case SOF_IPC_EXT_WINDOW: case SOF_IPC_EXT_WINDOW:
ret = get_ext_windows(sdev, ext_hdr); ret = get_ext_windows(sdev, ext_hdr);
break; break;
case SOF_IPC_EXT_CC_INFO:
ret = get_cc_info(sdev, ext_hdr);
break;
default: default:
dev_warn(sdev->dev, "warning: unknown ext header type %d size 0x%x\n", dev_warn(sdev->dev, "warning: unknown ext header type %d size 0x%x\n",
ext_hdr->type, ext_hdr->hdr.size); ext_hdr->type, ext_hdr->hdr.size);
......
...@@ -361,6 +361,7 @@ struct snd_sof_dev { ...@@ -361,6 +361,7 @@ struct snd_sof_dev {
struct snd_dma_buffer dmab_bdl; struct snd_dma_buffer dmab_bdl;
struct sof_ipc_fw_ready fw_ready; struct sof_ipc_fw_ready fw_ready;
struct sof_ipc_fw_version fw_version; struct sof_ipc_fw_version fw_version;
struct sof_ipc_cc_version *cc_version;
/* topology */ /* topology */
struct snd_soc_tplg_ops *tplg_ops; struct snd_soc_tplg_ops *tplg_ops;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment