diff --git a/sound/soc/intel/boards/sof_board_helpers.c b/sound/soc/intel/boards/sof_board_helpers.c
index 2ea1dda446ec..e21d1a5315f1 100644
--- a/sound/soc/intel/boards/sof_board_helpers.c
+++ b/sound/soc/intel/boards/sof_board_helpers.c
@@ -3,9 +3,11 @@
 // Copyright(c) 2023 Intel Corporation
 
 #include <sound/soc.h>
+#include "../../sof/sof-priv.h"
 #include "../common/soc-intel-quirks.h"
 #include "hda_dsp_common.h"
 #include "sof_board_helpers.h"
+#include "../../sof/intel/shim.h"
 
 /*
  * Intel HDMI DAI Link
@@ -776,6 +778,63 @@ sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk)
 }
 EXPORT_SYMBOL_NS(sof_intel_board_get_ctx, "SND_SOC_INTEL_SOF_BOARD_HELPERS");
 
+static const char *sof_intel_platform_names[] = {
+	"tng", /* Tangier */
+	"byt", /* Baytrail */
+	"cht", /* Cherrytrail */
+	"bdw", /* Broadwell */
+	"skl", /* Skylake */
+	"apl", /* Apollolake */
+	"glk", /* Geminilake */
+	"cnl", /* Cannonlake */
+	"cfl", /* Coffeelake */
+	"cml", /* Commetlake */
+	"icl", /* Icelake */
+	"jsl", /* Jasperlake */
+	"tgl", /* Tigerlake */
+	"ehl", /* Elkhartlake */
+	"adl", /* Alderlake */
+	"mtl", /* Meteorlake */
+	"arl", /* Arrowlake */
+	"lnl", /* Lunarlake */
+	"ptl", /* Pantherlake */
+	"wcl", /* Wildcatlake */
+};
+
+int sof_intel_board_set_longname_from_tplg(struct platform_device *pdev,
+        struct snd_soc_card *sof_audio_card)
+{
+	struct snd_sof_dev *sdev = dev_get_drvdata(pdev->dev.parent);
+	const struct sof_intel_dsp_desc *chip_info = get_chip_info(sdev->pdata);
+	enum snd_soc_acpi_intel_codec codec_type, amp_type;
+	const char *long_name, *codec_name, *amp_name;
+	// there is also the case of having an amp with no codec (vell)
+	codec_type = snd_soc_acpi_intel_detect_codec_type(sdev->dev);
+	amp_type = snd_soc_acpi_intel_detect_amp_type(sdev->dev);
+
+	int amp_type_valid = amp_type != CODEC_NONE && amp_type != codec_type;
+	
+	codec_name = snd_soc_acpi_intel_get_codec_tplg_suffix(codec_type);
+	if (amp_type_valid) {
+		amp_name = snd_soc_acpi_intel_get_amp_tplg_suffix(amp_type);
+		long_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "sof-%s-%s-%s",
+		                  sof_intel_platform_names[chip_info->platform],
+		                  codec_name,
+		                  amp_name);
+	} else {
+		long_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "sof-%s-%s",
+		                  sof_intel_platform_names[chip_info->platform],
+		                  codec_name);
+	}
+	if (!long_name)
+		return -ENOMEM;
+
+	sof_audio_card->long_name = long_name;
+
+	return 0;
+}
+EXPORT_SYMBOL_NS(sof_intel_board_set_longname_from_tplg, "SND_SOC_INTEL_SOF_BOARD_HELPERS");
+
 MODULE_DESCRIPTION("ASoC Intel SOF Machine Driver Board Helpers");
 MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
 MODULE_LICENSE("GPL");
diff --git a/sound/soc/intel/boards/sof_board_helpers.h b/sound/soc/intel/boards/sof_board_helpers.h
index 33a9601b770c..8d24ef4e779f 100644
--- a/sound/soc/intel/boards/sof_board_helpers.h
+++ b/sound/soc/intel/boards/sof_board_helpers.h
@@ -169,5 +169,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
 				 struct sof_card_private *ctx);
 struct sof_card_private *
 sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk);
+int sof_intel_board_set_longname_from_tplg(struct platform_device *pdev,
+        	struct snd_soc_card *sof_audio_card);
 
 #endif /* __SOF_INTEL_BOARD_HELPERS_H */
diff --git a/sound/soc/intel/boards/sof_cs42l42.c b/sound/soc/intel/boards/sof_cs42l42.c
index 455c5bc8c634..35c55d972ec6 100644
--- a/sound/soc/intel/boards/sof_cs42l42.c
+++ b/sound/soc/intel/boards/sof_cs42l42.c
@@ -217,6 +217,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_cs42l42_quirk = %lx\n", sof_cs42l42_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_cs42l42);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_cs42l42_quirk);
 	if (!ctx)
diff --git a/sound/soc/intel/boards/sof_da7219.c b/sound/soc/intel/boards/sof_da7219.c
index 9b7082b239c1..ac7558fbdafe 100644
--- a/sound/soc/intel/boards/sof_da7219.c
+++ b/sound/soc/intel/boards/sof_da7219.c
@@ -385,6 +385,9 @@ static int audio_probe(struct platform_device *pdev)
 		}
 	}
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &card_da7219);
+
 	if (board_quirk & SOF_DA7219_MCLK_EN)
 		ctx->da7219.mclk_en = true;
 
diff --git a/sound/soc/intel/boards/sof_nau8825.c b/sound/soc/intel/boards/sof_nau8825.c
index 72ce32e2cd57..638007b15d52 100644
--- a/sound/soc/intel/boards/sof_nau8825.c
+++ b/sound/soc/intel/boards/sof_nau8825.c
@@ -243,6 +243,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_nau8825_quirk = %lx\n", sof_nau8825_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_nau8825);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_nau8825_quirk);
 	if (!ctx)
diff --git a/sound/soc/intel/boards/sof_rt5682.c b/sound/soc/intel/boards/sof_rt5682.c
index 4994aaccc583..d3175ce3e46c 100644
--- a/sound/soc/intel/boards/sof_rt5682.c
+++ b/sound/soc/intel/boards/sof_rt5682.c
@@ -706,6 +706,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 		}
 	}
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_rt5682);
+
 	if (sof_rt5682_quirk & SOF_RT5682_MCLK_EN) {
 		ctx->rt5682.mclk_en = true;
 
diff --git a/sound/soc/intel/boards/sof_ssp_amp.c b/sound/soc/intel/boards/sof_ssp_amp.c
index 729c0cd7c19c..e3a2aa6e522e 100644
--- a/sound/soc/intel/boards/sof_ssp_amp.c
+++ b/sound/soc/intel/boards/sof_ssp_amp.c
@@ -119,6 +119,9 @@ static int sof_ssp_amp_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_ssp_amp_quirk = %lx\n", sof_ssp_amp_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_ssp_amp_card);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_ssp_amp_quirk);
 	if (!ctx)
diff --git a/sound/soc/sof/intel/apl.c b/sound/soc/sof/intel/apl.c
index 76a92eaa1359..0c6a8e97bb7c 100644
--- a/sound/soc/sof/intel/apl.c
+++ b/sound/soc/sof/intel/apl.c
@@ -20,6 +20,7 @@
 #include "../sof-priv.h"
 #include "hda.h"
 #include "../sof-audio.h"
+#include "shim.h"
 
 static const struct snd_sof_debugfs_map apl_dsp_debugfs[] = {
 	{"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS},
@@ -118,4 +119,29 @@ const struct sof_intel_dsp_desc apl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_1_5_PLUS,
+	.platform = SOF_INTEL_PLATFORM_APOLLOLAKE,
+};
+
+const struct sof_intel_dsp_desc glk_chip_info = {
+	/* Geminilake */
+	.cores_num = 2,
+	.init_core_mask = 1,
+	.host_managed_cores_mask = GENMASK(1, 0),
+	.ipc_req = HDA_DSP_REG_HIPCI,
+	.ipc_req_mask = HDA_DSP_REG_HIPCI_BUSY,
+	.ipc_ack = HDA_DSP_REG_HIPCIE,
+	.ipc_ack_mask = HDA_DSP_REG_HIPCIE_DONE,
+	.ipc_ctl = HDA_DSP_REG_HIPCCTL,
+	.rom_status_reg = HDA_DSP_SRAM_REG_ROM_STATUS,
+	.rom_init_timeout	= 150,
+	.ssp_count = APL_SSP_COUNT,
+	.ssp_base_offset = APL_SSP_BASE_OFFSET,
+	.d0i3_offset = SOF_HDA_VS_D0I3C,
+	.quirks = SOF_INTEL_PROCEN_FMT_QUIRK,
+	.check_ipc_irq	= hda_dsp_check_ipc_irq,
+	.cl_init = cl_dsp_init,
+	.power_down_dsp = hda_power_down_dsp,
+	.disable_interrupts = hda_dsp_disable_interrupts,
+	.hw_ip_version = SOF_INTEL_CAVS_1_5_PLUS,
+	.platform = SOF_INTEL_PLATFORM_GEMINILAKE,
 };
diff --git a/sound/soc/sof/intel/bdw.c b/sound/soc/sof/intel/bdw.c
index f1287d509835..c1043ae19b2c 100644
--- a/sound/soc/sof/intel/bdw.c
+++ b/sound/soc/sof/intel/bdw.c
@@ -629,6 +629,7 @@ static const struct sof_intel_dsp_desc bdw_chip_info = {
 	.cores_num = 1,
 	.host_managed_cores_mask = 1,
 	.hw_ip_version = SOF_INTEL_BROADWELL,
+	.platform = SOF_INTEL_PLATFORM_BROADWELL,
 };
 
 static const struct sof_dev_desc sof_acpi_broadwell_desc = {
diff --git a/sound/soc/sof/intel/byt.c b/sound/soc/sof/intel/byt.c
index 18208f77b84d..be54fe34e6dc 100644
--- a/sound/soc/sof/intel/byt.c
+++ b/sound/soc/sof/intel/byt.c
@@ -285,6 +285,7 @@ static const struct sof_intel_dsp_desc byt_chip_info = {
 	.cores_num = 1,
 	.host_managed_cores_mask = 1,
 	.hw_ip_version = SOF_INTEL_BAYTRAIL,
+	.platform = SOF_INTEL_PLATFORM_BAYTRAIL,
 };
 
 /* cherrytrail and braswell ops */
@@ -361,6 +362,7 @@ static const struct sof_intel_dsp_desc cht_chip_info = {
 	.cores_num = 1,
 	.host_managed_cores_mask = 1,
 	.hw_ip_version = SOF_INTEL_BAYTRAIL,
+	.platform = SOF_INTEL_PLATFORM_CHERRYTRAIL,
 };
 
 /* BYTCR uses different IRQ index */
diff --git a/sound/soc/sof/intel/cnl.c b/sound/soc/sof/intel/cnl.c
index 385e5339f0a4..e2e7653dbbd1 100644
--- a/sound/soc/sof/intel/cnl.c
+++ b/sound/soc/sof/intel/cnl.c
@@ -23,6 +23,7 @@
 #include "hda.h"
 #include "hda-ipc.h"
 #include "../sof-audio.h"
+#include "shim.h"
 
 static const struct snd_sof_debugfs_map cnl_dsp_debugfs[] = {
 	{"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS},
@@ -479,6 +480,67 @@ const struct sof_intel_dsp_desc cnl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_1_8,
+	.platform = SOF_INTEL_PLATFORM_CANNONLAKE,
+};
+
+const struct sof_intel_dsp_desc cfl_chip_info = {
+	/* Coffeelake */
+	.cores_num = 4,
+	.init_core_mask = 1,
+	.host_managed_cores_mask = GENMASK(3, 0),
+	.ipc_req = CNL_DSP_REG_HIPCIDR,
+	.ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
+	.ipc_ack = CNL_DSP_REG_HIPCIDA,
+	.ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
+	.ipc_ctl = CNL_DSP_REG_HIPCCTL,
+	.rom_status_reg = HDA_DSP_SRAM_REG_ROM_STATUS,
+	.rom_init_timeout	= 300,
+	.ssp_count = CNL_SSP_COUNT,
+	.ssp_base_offset = CNL_SSP_BASE_OFFSET,
+	.sdw_shim_base = SDW_SHIM_BASE,
+	.sdw_alh_base = SDW_ALH_BASE,
+	.d0i3_offset = SOF_HDA_VS_D0I3C,
+	.read_sdw_lcount =  hda_sdw_check_lcount_common,
+	.enable_sdw_irq	= hda_common_enable_sdw_irq,
+	.check_sdw_irq	= hda_common_check_sdw_irq,
+	.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+	.sdw_process_wakeen = hda_sdw_process_wakeen_common,
+	.check_ipc_irq	= hda_dsp_check_ipc_irq,
+	.cl_init = cl_dsp_init,
+	.power_down_dsp = hda_power_down_dsp,
+	.disable_interrupts = hda_dsp_disable_interrupts,
+	.hw_ip_version = SOF_INTEL_CAVS_1_8,
+	.platform = SOF_INTEL_PLATFORM_COFFEELAKE,
+};
+
+const struct sof_intel_dsp_desc cml_chip_info = {
+	/* Commetlake */
+	.cores_num = 4,
+	.init_core_mask = 1,
+	.host_managed_cores_mask = GENMASK(3, 0),
+	.ipc_req = CNL_DSP_REG_HIPCIDR,
+	.ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
+	.ipc_ack = CNL_DSP_REG_HIPCIDA,
+	.ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
+	.ipc_ctl = CNL_DSP_REG_HIPCCTL,
+	.rom_status_reg = HDA_DSP_SRAM_REG_ROM_STATUS,
+	.rom_init_timeout	= 300,
+	.ssp_count = CNL_SSP_COUNT,
+	.ssp_base_offset = CNL_SSP_BASE_OFFSET,
+	.sdw_shim_base = SDW_SHIM_BASE,
+	.sdw_alh_base = SDW_ALH_BASE,
+	.d0i3_offset = SOF_HDA_VS_D0I3C,
+	.read_sdw_lcount =  hda_sdw_check_lcount_common,
+	.enable_sdw_irq	= hda_common_enable_sdw_irq,
+	.check_sdw_irq	= hda_common_check_sdw_irq,
+	.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+	.sdw_process_wakeen = hda_sdw_process_wakeen_common,
+	.check_ipc_irq	= hda_dsp_check_ipc_irq,
+	.cl_init = cl_dsp_init,
+	.power_down_dsp = hda_power_down_dsp,
+	.disable_interrupts = hda_dsp_disable_interrupts,
+	.hw_ip_version = SOF_INTEL_CAVS_1_8,
+	.platform = SOF_INTEL_PLATFORM_COMMETLAKE,
 };
 
 /*
@@ -515,5 +577,6 @@ const struct sof_intel_dsp_desc jsl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_0,
+	.platform = SOF_INTEL_PLATFORM_JASPERLAKE,
 };
 EXPORT_SYMBOL_NS(jsl_chip_info, "SND_SOC_SOF_INTEL_CNL");
diff --git a/sound/soc/sof/intel/hda.h b/sound/soc/sof/intel/hda.h
index 28daf0a3b984..e48bd73a99c9 100644
--- a/sound/soc/sof/intel/hda.h
+++ b/sound/soc/sof/intel/hda.h
@@ -924,14 +924,19 @@ int sof_icl_ops_init(struct snd_sof_dev *sdev);
 
 extern const struct sof_intel_dsp_desc skl_chip_info;
 extern const struct sof_intel_dsp_desc apl_chip_info;
+extern const struct sof_intel_dsp_desc glk_chip_info;
 extern const struct sof_intel_dsp_desc cnl_chip_info;
+extern const struct sof_intel_dsp_desc cfl_chip_info;
+extern const struct sof_intel_dsp_desc cml_chip_info;
 extern const struct sof_intel_dsp_desc icl_chip_info;
 extern const struct sof_intel_dsp_desc tgl_chip_info;
+extern const struct sof_intel_dsp_desc adl_chip_info;
 extern const struct sof_intel_dsp_desc tglh_chip_info;
 extern const struct sof_intel_dsp_desc ehl_chip_info;
 extern const struct sof_intel_dsp_desc jsl_chip_info;
 extern const struct sof_intel_dsp_desc adls_chip_info;
 extern const struct sof_intel_dsp_desc mtl_chip_info;
+extern const struct sof_intel_dsp_desc arl_chip_info;
 extern const struct sof_intel_dsp_desc arl_s_chip_info;
 extern const struct sof_intel_dsp_desc lnl_chip_info;
 extern const struct sof_intel_dsp_desc ptl_chip_info;
diff --git a/sound/soc/sof/intel/icl.c b/sound/soc/sof/intel/icl.c
index dad6bc72ad37..caf1a65391d7 100644
--- a/sound/soc/sof/intel/icl.c
+++ b/sound/soc/sof/intel/icl.c
@@ -18,6 +18,7 @@
 #include "hda.h"
 #include "hda-ipc.h"
 #include "../sof-audio.h"
+#include "shim.h"
 
 #define ICL_DSP_HPRO_CORE_ID 3
 
@@ -193,4 +194,5 @@ const struct sof_intel_dsp_desc icl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_0,
+	.platform = SOF_INTEL_PLATFORM_ICELAKE,
 };
diff --git a/sound/soc/sof/intel/lnl.c b/sound/soc/sof/intel/lnl.c
index 2f3222040f98..1c3e81b51509 100644
--- a/sound/soc/sof/intel/lnl.c
+++ b/sound/soc/sof/intel/lnl.c
@@ -19,6 +19,7 @@
 #include "mtl.h"
 #include "lnl.h"
 #include <sound/hda-mlink.h>
+#include "shim.h"
 
 /* this helps allows the DSP to setup DMIC/SSP */
 static int hdac_bus_offload_dmic_ssp(struct hdac_bus *bus, bool enable)
@@ -183,6 +184,7 @@ const struct sof_intel_dsp_desc lnl_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = lnl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_2_0,
+	.platform = SOF_INTEL_PLATFORM_LUNARLAKE,
 };
 
 MODULE_IMPORT_NS("SND_SOC_SOF_INTEL_MTL");
diff --git a/sound/soc/sof/intel/mtl.c b/sound/soc/sof/intel/mtl.c
index 2242c96bfa51..a1e321e5452f 100644
--- a/sound/soc/sof/intel/mtl.c
+++ b/sound/soc/sof/intel/mtl.c
@@ -21,6 +21,7 @@
 #include "../sof-audio.h"
 #include "mtl.h"
 #include "telemetry.h"
+#include "shim.h"
 
 static const struct snd_sof_debugfs_map mtl_dsp_debugfs[] = {
 	{"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS},
@@ -786,6 +787,36 @@ const struct sof_intel_dsp_desc mtl_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = mtl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_1_0,
+	.platform = SOF_INTEL_PLATFORM_METEORLAKE,
+};
+
+const struct sof_intel_dsp_desc arl_chip_info = {
+	.cores_num = 3,
+	.init_core_mask = BIT(0),
+	.host_managed_cores_mask = BIT(0),
+	.ipc_req = MTL_DSP_REG_HFIPCXIDR,
+	.ipc_req_mask = MTL_DSP_REG_HFIPCXIDR_BUSY,
+	.ipc_ack = MTL_DSP_REG_HFIPCXIDA,
+	.ipc_ack_mask = MTL_DSP_REG_HFIPCXIDA_DONE,
+	.ipc_ctl = MTL_DSP_REG_HFIPCXCTL,
+	.rom_status_reg = MTL_DSP_REG_HFFLGPXQWY,
+	.rom_init_timeout	= 300,
+	.ssp_count = MTL_SSP_COUNT,
+	.ssp_base_offset = CNL_SSP_BASE_OFFSET,
+	.sdw_shim_base = SDW_SHIM_BASE_ACE,
+	.sdw_alh_base = SDW_ALH_BASE_ACE,
+	.d0i3_offset = MTL_HDA_VS_D0I3C,
+	.read_sdw_lcount =  hda_sdw_check_lcount_common,
+	.enable_sdw_irq = mtl_enable_sdw_irq,
+	.check_sdw_irq = mtl_dsp_check_sdw_irq,
+	.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+	.sdw_process_wakeen = hda_sdw_process_wakeen_common,
+	.check_ipc_irq = mtl_dsp_check_ipc_irq,
+	.cl_init = mtl_dsp_cl_init,
+	.power_down_dsp = mtl_power_down_dsp,
+	.disable_interrupts = mtl_dsp_disable_interrupts,
+	.hw_ip_version = SOF_INTEL_ACE_1_0,
+	.platform = SOF_INTEL_PLATFORM_ARROWLAKE,
 };
 
 const struct sof_intel_dsp_desc arl_s_chip_info = {
@@ -814,4 +845,5 @@ const struct sof_intel_dsp_desc arl_s_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = mtl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_1_0,
+	.platform = SOF_INTEL_PLATFORM_ARROWLAKE,
 };
diff --git a/sound/soc/sof/intel/pci-apl.c b/sound/soc/sof/intel/pci-apl.c
index 0bf7ee753bc3..04b2bcc7d0da 100644
--- a/sound/soc/sof/intel/pci-apl.c
+++ b/sound/soc/sof/intel/pci-apl.c
@@ -58,7 +58,7 @@ static const struct sof_dev_desc glk_desc = {
 	.resindex_pcicfg_base	= -1,
 	.resindex_imr_base	= -1,
 	.irqindex_host_ipc	= -1,
-	.chip_info = &apl_chip_info,
+	.chip_info = &glk_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
diff --git a/sound/soc/sof/intel/pci-cnl.c b/sound/soc/sof/intel/pci-cnl.c
index de48640024e4..e47b846d695d 100644
--- a/sound/soc/sof/intel/pci-cnl.c
+++ b/sound/soc/sof/intel/pci-cnl.c
@@ -60,7 +60,7 @@ static const struct sof_dev_desc cfl_desc = {
 	.resindex_pcicfg_base	= -1,
 	.resindex_imr_base	= -1,
 	.irqindex_host_ipc	= -1,
-	.chip_info = &cnl_chip_info,
+	.chip_info = &cfl_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
@@ -93,7 +93,7 @@ static const struct sof_dev_desc cml_desc = {
 	.resindex_pcicfg_base	= -1,
 	.resindex_imr_base	= -1,
 	.irqindex_host_ipc	= -1,
-	.chip_info = &cnl_chip_info,
+	.chip_info = &cml_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
diff --git a/sound/soc/sof/intel/pci-tgl.c b/sound/soc/sof/intel/pci-tgl.c
index 437c43819825..ec49466f27ab 100644
--- a/sound/soc/sof/intel/pci-tgl.c
+++ b/sound/soc/sof/intel/pci-tgl.c
@@ -158,7 +158,7 @@ static const struct sof_dev_desc adl_desc = {
 	.resindex_pcicfg_base   = -1,
 	.resindex_imr_base      = -1,
 	.irqindex_host_ipc      = -1,
-	.chip_info = &tgl_chip_info,
+	.chip_info = &adl_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
@@ -191,7 +191,7 @@ static const struct sof_dev_desc adln_desc = {
 	.resindex_pcicfg_base   = -1,
 	.resindex_imr_base      = -1,
 	.irqindex_host_ipc      = -1,
-	.chip_info = &tgl_chip_info,
+	.chip_info = &adl_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
@@ -257,7 +257,7 @@ static const struct sof_dev_desc rpl_desc = {
 	.resindex_pcicfg_base   = -1,
 	.resindex_imr_base      = -1,
 	.irqindex_host_ipc      = -1,
-	.chip_info = &tgl_chip_info,
+	.chip_info = &adl_chip_info,
 	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
 	.ipc_default		= SOF_IPC_TYPE_3,
 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
diff --git a/sound/soc/sof/intel/pci-tng.c b/sound/soc/sof/intel/pci-tng.c
index 0c11cc1fd820..75499d73c7e9 100644
--- a/sound/soc/sof/intel/pci-tng.c
+++ b/sound/soc/sof/intel/pci-tng.c
@@ -199,6 +199,7 @@ const struct sof_intel_dsp_desc tng_chip_info = {
 	.cores_num = 1,
 	.host_managed_cores_mask = 1,
 	.hw_ip_version = SOF_INTEL_TANGIER,
+	.platform = SOF_INTEL_PLATFORM_TANGIER,
 };
 
 static const struct sof_dev_desc tng_desc = {
diff --git a/sound/soc/sof/intel/ptl.c b/sound/soc/sof/intel/ptl.c
index 4633cd01e7dd..d8be313cb725 100644
--- a/sound/soc/sof/intel/ptl.c
+++ b/sound/soc/sof/intel/ptl.c
@@ -17,6 +17,7 @@
 #include "mtl.h"
 #include "lnl.h"
 #include "ptl.h"
+#include "shim.h"
 
 static bool sof_ptl_check_mic_privacy_irq(struct snd_sof_dev *sdev, bool alt,
 					  int elid)
@@ -125,6 +126,7 @@ const struct sof_intel_dsp_desc ptl_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = lnl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_3_0,
+	.platform = SOF_INTEL_PLATFORM_PANTHERLAKE,
 };
 
 const struct sof_intel_dsp_desc wcl_chip_info = {
@@ -149,6 +151,7 @@ const struct sof_intel_dsp_desc wcl_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = lnl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_3_0,
+	.platform = SOF_INTEL_PLATFORM_WILDCATLAKE,
 };
 
 MODULE_IMPORT_NS("SND_SOC_SOF_INTEL_MTL");
diff --git a/sound/soc/sof/intel/shim.h b/sound/soc/sof/intel/shim.h
index d4372f0bff7e..956dafd7531c 100644
--- a/sound/soc/sof/intel/shim.h
+++ b/sound/soc/sof/intel/shim.h
@@ -25,6 +25,29 @@ enum sof_intel_hw_ip_version {
 	SOF_INTEL_ACE_3_0,	/* PantherLake */
 };
 
+enum sof_intel_platform {
+	SOF_INTEL_PLATFORM_TANGIER,
+	SOF_INTEL_PLATFORM_BAYTRAIL,
+	SOF_INTEL_PLATFORM_CHERRYTRAIL,
+	SOF_INTEL_PLATFORM_BROADWELL,
+	SOF_INTEL_PLATFORM_SKYLAKE,
+	SOF_INTEL_PLATFORM_APOLLOLAKE,
+	SOF_INTEL_PLATFORM_GEMINILAKE,
+	SOF_INTEL_PLATFORM_CANNONLAKE,
+	SOF_INTEL_PLATFORM_COFFEELAKE,
+	SOF_INTEL_PLATFORM_COMMETLAKE,
+	SOF_INTEL_PLATFORM_ICELAKE,
+	SOF_INTEL_PLATFORM_JASPERLAKE,
+	SOF_INTEL_PLATFORM_TIGERLAKE,
+	SOF_INTEL_PLATFORM_ELKHARTLAKE,
+	SOF_INTEL_PLATFORM_ALDERLAKE,
+	SOF_INTEL_PLATFORM_METEORLAKE,
+	SOF_INTEL_PLATFORM_ARROWLAKE,
+	SOF_INTEL_PLATFORM_LUNARLAKE,
+	SOF_INTEL_PLATFORM_PANTHERLAKE,
+	SOF_INTEL_PLATFORM_WILDCATLAKE,
+};
+
 /*
  * SHIM registers for BYT, BSW, CHT, BDW
  */
@@ -187,6 +210,7 @@ struct sof_intel_dsp_desc {
 	u32 d0i3_offset;
 	u32 quirks;
 	enum sof_intel_hw_ip_version hw_ip_version;
+	enum sof_intel_platform platform;
 	int (*read_sdw_lcount)(struct snd_sof_dev *sdev);
 	void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
 	bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
diff --git a/sound/soc/sof/intel/skl.c b/sound/soc/sof/intel/skl.c
index 0696bce65e33..83f58fc9909d 100644
--- a/sound/soc/sof/intel/skl.c
+++ b/sound/soc/sof/intel/skl.c
@@ -29,6 +29,7 @@
 #include "../ops.h"
 #include "hda.h"
 #include "../sof-audio.h"
+#include "shim.h"
 
 #define SRAM_MEMORY_WINDOW_BASE 0x8000
 
@@ -113,5 +114,6 @@ const struct sof_intel_dsp_desc skl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_1_5,
+	.platform = SOF_INTEL_PLATFORM_SKYLAKE,
 };
 EXPORT_SYMBOL_NS(skl_chip_info, "SND_SOC_SOF_INTEL_HDA_COMMON");
diff --git a/sound/soc/sof/intel/tgl.c b/sound/soc/sof/intel/tgl.c
index df2d26b78ddc..aee813c8e88c 100644
--- a/sound/soc/sof/intel/tgl.c
+++ b/sound/soc/sof/intel/tgl.c
@@ -15,6 +15,7 @@
 #include "hda.h"
 #include "hda-ipc.h"
 #include "../sof-audio.h"
+#include "shim.h"
 
 static const struct snd_sof_debugfs_map tgl_dsp_debugfs[] = {
 	{"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS},
@@ -136,7 +137,7 @@ int sof_tgl_ops_init(struct snd_sof_dev *sdev)
 };
 
 const struct sof_intel_dsp_desc tgl_chip_info = {
-	/* Tigerlake , Alderlake */
+	/* Tigerlake */
 	.cores_num = 4,
 	.init_core_mask = 1,
 	.host_managed_cores_mask = BIT(0),
@@ -162,6 +163,37 @@ const struct sof_intel_dsp_desc tgl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_5,
+	.platform = SOF_INTEL_PLATFORM_TIGERLAKE,
+};
+
+const struct sof_intel_dsp_desc adl_chip_info = {
+	/* Alderlake */
+	.cores_num = 4,
+	.init_core_mask = 1,
+	.host_managed_cores_mask = BIT(0),
+	.ipc_req = CNL_DSP_REG_HIPCIDR,
+	.ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
+	.ipc_ack = CNL_DSP_REG_HIPCIDA,
+	.ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
+	.ipc_ctl = CNL_DSP_REG_HIPCCTL,
+	.rom_status_reg = HDA_DSP_SRAM_REG_ROM_STATUS,
+	.rom_init_timeout	= 300,
+	.ssp_count = TGL_SSP_COUNT,
+	.ssp_base_offset = CNL_SSP_BASE_OFFSET,
+	.sdw_shim_base = SDW_SHIM_BASE,
+	.sdw_alh_base = SDW_ALH_BASE,
+	.d0i3_offset = SOF_HDA_VS_D0I3C,
+	.read_sdw_lcount =  hda_sdw_check_lcount_common,
+	.enable_sdw_irq	= hda_common_enable_sdw_irq,
+	.check_sdw_irq	= hda_common_check_sdw_irq,
+	.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+	.sdw_process_wakeen = hda_sdw_process_wakeen_common,
+	.check_ipc_irq	= hda_dsp_check_ipc_irq,
+	.cl_init = cl_dsp_init,
+	.power_down_dsp = hda_power_down_dsp,
+	.disable_interrupts = hda_dsp_disable_interrupts,
+	.hw_ip_version = SOF_INTEL_CAVS_2_5,
+	.platform = SOF_INTEL_PLATFORM_ALDERLAKE,
 };
 
 const struct sof_intel_dsp_desc tglh_chip_info = {
@@ -191,6 +223,7 @@ const struct sof_intel_dsp_desc tglh_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_5,
+	.platform = SOF_INTEL_PLATFORM_TIGERLAKE,
 };
 
 const struct sof_intel_dsp_desc ehl_chip_info = {
@@ -220,6 +253,7 @@ const struct sof_intel_dsp_desc ehl_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_5,
+	.platform = SOF_INTEL_PLATFORM_ELKHARTLAKE,
 };
 
 const struct sof_intel_dsp_desc adls_chip_info = {
@@ -249,4 +283,5 @@ const struct sof_intel_dsp_desc adls_chip_info = {
 	.power_down_dsp = hda_power_down_dsp,
 	.disable_interrupts = hda_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_CAVS_2_5,
+	.platform = SOF_INTEL_PLATFORM_ALDERLAKE,
 };
