firmware: cs_dsp: Print messages from bin files
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Wed, 17 Nov 2021 13:22:55 +0000 (13:22 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 17 Nov 2021 22:16:23 +0000 (22:16 +0000)
The coefficient file contains various info strings, and the equivalent
strings are printed from the WMFW file as it is loaded. Add support
for printing these from the coefficient file as well.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20211117132300.1290-5-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/firmware/cirrus/cs_dsp.c

index ef7afadea42d161eaf6f37aa325219f18d3b5efe..3d21574f3a443f353036e33b12a946c647116794 100644 (file)
@@ -1968,6 +1968,7 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
        struct cs_dsp_alg_region *alg_region;
        const char *region_name;
        int ret, pos, blocks, type, offset, reg, version;
+       char *text = NULL;
        struct cs_dsp_buf *buf;
 
        if (!firmware)
@@ -2025,6 +2026,8 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
                region_name = "Unknown";
                switch (type) {
                case (WMFW_NAME_TEXT << 8):
+                       text = kzalloc(le32_to_cpu(blk->len) + 1, GFP_KERNEL);
+                       break;
                case (WMFW_INFO_TEXT << 8):
                case (WMFW_METADATA << 8):
                        break;
@@ -2094,6 +2097,13 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
                        break;
                }
 
+               if (text) {
+                       memcpy(text, blk->data, le32_to_cpu(blk->len));
+                       cs_dsp_info(dsp, "%s: %s\n", dsp->fw_name, text);
+                       kfree(text);
+                       text = NULL;
+               }
+
                if (reg) {
                        if (le32_to_cpu(blk->len) >
                            firmware->size - pos - sizeof(*blk)) {
@@ -2144,6 +2154,7 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware
 out_fw:
        regmap_async_complete(regmap);
        cs_dsp_buf_free(&buf_list);
+       kfree(text);
        return ret;
 }