diff mbox

ASoC: Intel: Show Baytrail SST DSP firmware details during init

Message ID 1402042211-13842-1-git-send-email-jarkko.nikula@linux.intel.com (mailing list archive)
State Accepted
Commit 4131eceb4a5e471f5a866ee10e680f0081376e3b
Headers show

Commit Message

Jarkko Nikula June 6, 2014, 8:10 a.m. UTC
DSP initialization complete message IPC_IA_FW_INIT_CMPLT is a large message
carrying firmware details in mailbox. Read and show those details during
init in order to be able to get that information to QA reports.

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
---
 sound/soc/intel/sst-baytrail-ipc.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

Comments

Mark Brown June 6, 2014, 1:13 p.m. UTC | #1
On Fri, Jun 06, 2014 at 11:10:11AM +0300, Jarkko Nikula wrote:
> DSP initialization complete message IPC_IA_FW_INIT_CMPLT is a large message
> carrying firmware details in mailbox. Read and show those details during
> init in order to be able to get that information to QA reports.

Applied, thanks.  Is it worth putting these into sysfs file so we can
get the data read out with alsa-info.sh?
Jarkko Nikula June 6, 2014, 2:28 p.m. UTC | #2
On 06/06/2014 04:13 PM, Mark Brown wrote:
> On Fri, Jun 06, 2014 at 11:10:11AM +0300, Jarkko Nikula wrote:
>> DSP initialization complete message IPC_IA_FW_INIT_CMPLT is a large message
>> carrying firmware details in mailbox. Read and show those details during
>> init in order to be able to get that information to QA reports.
> Applied, thanks.  Is it worth putting these into sysfs file so we can
> get the data read out with alsa-info.sh?
Not a bad idea. I'm not going to be implementing it instantly but should 
such a file be one generic node listing all the sound components that 
use fw and their info or a node with fixed name under each device's 
directory? Latter one sounds a bit simpler in kernel but I'm thinking 
which way makes most sense for utilities.
diff mbox

Patch

diff --git a/sound/soc/intel/sst-baytrail-ipc.c b/sound/soc/intel/sst-baytrail-ipc.c
index d207b22ea330..67673a2c0f41 100644
--- a/sound/soc/intel/sst-baytrail-ipc.c
+++ b/sound/soc/intel/sst-baytrail-ipc.c
@@ -122,6 +122,26 @@  struct sst_byt_tstamp {
 	u32 channel_peak[8];
 } __packed;
 
+struct sst_byt_fw_version {
+	u8 build;
+	u8 minor;
+	u8 major;
+	u8 type;
+} __packed;
+
+struct sst_byt_fw_build_info {
+	u8 date[16];
+	u8 time[16];
+} __packed;
+
+struct sst_byt_fw_init {
+	struct sst_byt_fw_version fw_version;
+	struct sst_byt_fw_build_info build_info;
+	u16 result;
+	u8 module_id;
+	u8 debug_info;
+} __packed;
+
 /* driver internal IPC message structure */
 struct ipc_message {
 	struct list_head list;
@@ -868,6 +888,7 @@  int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)
 {
 	struct sst_byt *byt;
 	struct sst_fw *byt_sst_fw;
+	struct sst_byt_fw_init init;
 	int err;
 
 	dev_dbg(dev, "initialising Byt DSP IPC\n");
@@ -929,6 +950,15 @@  int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)
 		goto boot_err;
 	}
 
+	/* show firmware information */
+	sst_dsp_inbox_read(byt->dsp, &init, sizeof(init));
+	dev_info(byt->dev, "FW version: %02x.%02x.%02x.%02x\n",
+		 init.fw_version.major, init.fw_version.minor,
+		 init.fw_version.build, init.fw_version.type);
+	dev_info(byt->dev, "Build type: %x\n", init.fw_version.type);
+	dev_info(byt->dev, "Build date: %s %s\n",
+		 init.build_info.date, init.build_info.time);
+
 	pdata->dsp = byt;
 	byt->fw = byt_sst_fw;