* [PATCH] ASoC: wm0010: Add checking for .dfw info record version.
@ 2012-11-23 12:37 Scott Ling
2012-11-23 12:44 ` Mark Brown
0 siblings, 1 reply; 2+ messages in thread
From: Scott Ling @ 2012-11-23 12:37 UTC (permalink / raw)
To: Mark Brown; +Cc: alsa-devel, patches, scott.ling
The info record at the start of the dsp firmware file has been
expanded to incorporate additional version information. We need
to check the version to make sure we understand the layout of
the information in the record. The srec2image tool is currently
used to create this record during creation of the .dfw file.
Signed-off-by: Scott Ling <sl@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm0010.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm0010.c b/sound/soc/codecs/wm0010.c
index d795860..e7e6c2f 100644
--- a/sound/soc/codecs/wm0010.c
+++ b/sound/soc/codecs/wm0010.c
@@ -32,6 +32,9 @@
#define DEVICE_ID_WM0010 10
#define S2_LOADER_ID_OFFSET 8
+/* We only support v1 of the .dfw INFO record */
+#define INFO_VERSION 1
+
enum dfw_cmd {
DFW_CMD_FUSE = 0x01,
DFW_CMD_CODE_HDR,
@@ -47,6 +50,13 @@ struct dfw_binrec {
uint8_t data[0];
} __packed;
+struct dfw_inforec {
+ u8 info_version;
+ u8 tool_major_version;
+ u8 tool_minor_version;
+ u8 dsp_target;
+};
+
struct dfw_pllrec {
u8 command;
u32 length:24;
@@ -343,6 +353,7 @@ static int wm0010_firmware_load(char *name, struct snd_soc_codec *codec)
struct completion done;
const struct firmware *fw;
const struct dfw_binrec *rec;
+ const struct dfw_inforec *inforec;
u64 *img;
u8 *out, dsp;
u32 len, offset;
@@ -357,8 +368,9 @@ static int wm0010_firmware_load(char *name, struct snd_soc_codec *codec)
}
rec = (const struct dfw_binrec *)fw->data;
+ inforec = (const struct dfw_inforec *)rec->data;
offset = 0;
- dsp = rec->data[0];
+ dsp = inforec->dsp_target;
wm0010->boot_failed = false;
BUG_ON(!list_empty(&xfer_list));
init_completion(&done);
@@ -370,6 +382,17 @@ static int wm0010_firmware_load(char *name, struct snd_soc_codec *codec)
goto abort;
}
+ if (inforec->info_version != INFO_VERSION) {
+ dev_err(codec->dev,
+ "Unsupported version (%02d) of INFO record\r\n",
+ inforec->info_version);
+ ret = -EINVAL;
+ goto abort;
+ }
+
+ dev_dbg(codec->dev, "Version v%02d INFO record found\r\n",
+ inforec->info_version);
+
/* Check it's a DSP file */
if (dsp != DEVICE_ID_WM0010) {
dev_err(codec->dev, "Not a WM0010 firmware file.\r\n");
--
1.7.9.5
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] ASoC: wm0010: Add checking for .dfw info record version.
2012-11-23 12:37 [PATCH] ASoC: wm0010: Add checking for .dfw info record version Scott Ling
@ 2012-11-23 12:44 ` Mark Brown
0 siblings, 0 replies; 2+ messages in thread
From: Mark Brown @ 2012-11-23 12:44 UTC (permalink / raw)
To: Scott Ling; +Cc: alsa-devel, patches, scott.ling
[-- Attachment #1.1: Type: text/plain, Size: 461 bytes --]
On Fri, Nov 23, 2012 at 12:37:35PM +0000, Scott Ling wrote:
> The info record at the start of the dsp firmware file has been
> expanded to incorporate additional version information. We need
> to check the version to make sure we understand the layout of
> the information in the record. The srec2image tool is currently
> used to create this record during creation of the .dfw file.
Applied, but you really should send patches against the current
mainline...
[-- 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] 2+ messages in thread
end of thread, other threads:[~2012-11-23 12:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-23 12:37 [PATCH] ASoC: wm0010: Add checking for .dfw info record version Scott Ling
2012-11-23 12:44 ` Mark Brown
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.