]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ASoC: SOF: Intel: HDA: Set up sof_ipc4_fw_data for IPC4
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Wed, 11 May 2022 17:16:48 +0000 (10:16 -0700)
committerMark Brown <broonie@kernel.org>
Thu, 12 May 2022 10:41:30 +0000 (11:41 +0100)
Allocate the sof_ipc4_fw_data struct for IPC4 and set the fw header offset
for the platforms which will be used by the core when loading the firmware
image.

The core expects that the "private" field in struct snd_sof_dev (which is
unused today with IPC3) is used to save this data.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220511171648.1622993-6-ranjani.sridharan@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/apl.c
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/tgl.c

index 4c67110a073e07936d35f012bee5d7cf96eea693..0cea280a6d2d3129334ecbf312bc60f80c09d0b8 100644 (file)
@@ -15,6 +15,8 @@
  * Hardware interface for audio DSP on Apollolake and GeminiLake
  */
 
+#include <sound/sof/ext_manifest4.h>
+#include "../ipc4-priv.h"
 #include "../sof-priv.h"
 #include "hda.h"
 #include "../sof-audio.h"
@@ -46,6 +48,16 @@ int sof_apl_ops_init(struct snd_sof_dev *sdev)
        }
 
        if (sdev->pdata->ipc_type == SOF_INTEL_IPC4) {
+               struct sof_ipc4_fw_data *ipc4_data;
+
+               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               if (!sdev->private)
+                       return -ENOMEM;
+
+               ipc4_data = sdev->private;
+               ipc4_data->manifest_fw_hdr_offset = SOF_MAN4_FW_HDR_OFFSET;
+
+               /* doorbell */
                sof_apl_ops.irq_thread  = hda_dsp_ipc4_irq_thread;
 
                /* ipc */
index 7a22d7e4a46ceb7e6f80c01225290bafe96ab0be..cd6e5f8a5eb4dfdad775c4f34d313ef3c7d32220 100644 (file)
@@ -15,7 +15,9 @@
  * Hardware interface for audio DSP on Cannonlake.
  */
 
+#include <sound/sof/ext_manifest4.h>
 #include <sound/sof/ipc4/header.h>
+#include "../ipc4-priv.h"
 #include "../ops.h"
 #include "hda.h"
 #include "hda-ipc.h"
@@ -344,6 +346,16 @@ int sof_cnl_ops_init(struct snd_sof_dev *sdev)
        }
 
        if (sdev->pdata->ipc_type == SOF_INTEL_IPC4) {
+               struct sof_ipc4_fw_data *ipc4_data;
+
+               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               if (!sdev->private)
+                       return -ENOMEM;
+
+               ipc4_data = sdev->private;
+               ipc4_data->manifest_fw_hdr_offset = SOF_MAN4_FW_HDR_OFFSET;
+
+               /* doorbell */
                sof_cnl_ops.irq_thread  = cnl_ipc4_irq_thread;
 
                /* ipc */
index c93526591a9190e132ecbd24224c89784cc0da11..1ddc492f1b13a9365dbbc3a338b1419af32fbb0b 100644 (file)
@@ -9,6 +9,8 @@
  * Hardware interface for audio DSP on Tigerlake.
  */
 
+#include <sound/sof/ext_manifest4.h>
+#include "../ipc4-priv.h"
 #include "../ops.h"
 #include "hda.h"
 #include "hda-ipc.h"
@@ -79,6 +81,15 @@ int sof_tgl_ops_init(struct snd_sof_dev *sdev)
        }
 
        if (sdev->pdata->ipc_type == SOF_INTEL_IPC4) {
+               struct sof_ipc4_fw_data *ipc4_data;
+
+               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               if (!sdev->private)
+                       return -ENOMEM;
+
+               ipc4_data = sdev->private;
+               ipc4_data->manifest_fw_hdr_offset = SOF_MAN4_FW_HDR_OFFSET;
+
                /* doorbell */
                sof_tgl_ops.irq_thread  = cnl_ipc4_irq_thread;