[22/35] ASoC: Intel: Haswell: Define separate ACPI loader
diff mbox series

Message ID 20190822190425.23001-23-cezary.rojewski@intel.com
State New
Headers show
Series
  • ASoC: Intel: Clenaup SST initialization
Related show

Commit Message

Cezary Rojewski Aug. 22, 2019, 7:04 p.m. UTC
With common acpi code exposed, separate Haswell specific code from other
legacy platforms. To reduce diff delta, it's still loaded with separate
module called: hsw-acpi. This may be address later, once heavy hitters
are gone.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
---
 sound/soc/intel/Kconfig           |  6 ++-
 sound/soc/intel/common/sst-acpi.c | 32 ----------------
 sound/soc/intel/haswell/Makefile  |  2 +
 sound/soc/intel/haswell/acpi.c    | 63 +++++++++++++++++++++++++++++++
 4 files changed, 70 insertions(+), 33 deletions(-)
 create mode 100644 sound/soc/intel/haswell/acpi.c

Comments

Pierre-Louis Bossart Aug. 23, 2019, 7:35 p.m. UTC | #1
On 8/22/19 2:04 PM, Cezary Rojewski wrote:
> With common acpi code exposed, separate Haswell specific code from other
> legacy platforms. To reduce diff delta, it's still loaded with separate
> module called: hsw-acpi. This may be address later, once heavy hitters
> are gone.
> 
> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
> ---
>   sound/soc/intel/Kconfig           |  6 ++-
>   sound/soc/intel/common/sst-acpi.c | 32 ----------------
>   sound/soc/intel/haswell/Makefile  |  2 +
>   sound/soc/intel/haswell/acpi.c    | 63 +++++++++++++++++++++++++++++++
>   4 files changed, 70 insertions(+), 33 deletions(-)
>   create mode 100644 sound/soc/intel/haswell/acpi.c
> 
> diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
> index a3ec17fd63cd..9191773d203c 100644
> --- a/sound/soc/intel/Kconfig
> +++ b/sound/soc/intel/Kconfig
> @@ -31,6 +31,10 @@ config SND_SST_IPC_ACPI
>   	# This option controls the ACPI-based IPC for HiFi2 platforms
>   	# (Baytrail, Cherrytrail)
>   
> +config SND_SOC_INTEL_HASWELL_ACPI
> +	tristate
> +	# This option controls the ACPI-based on HSW/BDW platforms

missing noun.
ACPI-based probe?

> +
>   config SND_SOC_INTEL_SST_ACPI
>   	tristate
>   	# This option controls ACPI-based probing on
> @@ -52,7 +56,7 @@ config SND_SOC_INTEL_HASWELL
>   	depends on SND_DMA_SGBUF
>   	depends on DMADEVICES && ACPI
>   	select SND_SOC_INTEL_SST
> -	select SND_SOC_INTEL_SST_ACPI
> +	select SND_SOC_INTEL_HASWELL_ACPI
>   	select SND_SOC_INTEL_SST_FIRMWARE
>   	select SND_SOC_ACPI_INTEL_MATCH
>   	help
> diff --git a/sound/soc/intel/common/sst-acpi.c b/sound/soc/intel/common/sst-acpi.c
> index 42f9b02f2ea3..7d2f04ff0479 100644
> --- a/sound/soc/intel/common/sst-acpi.c
> +++ b/sound/soc/intel/common/sst-acpi.c
> @@ -15,10 +15,6 @@
>   #include <sound/soc-acpi.h>
>   #include <sound/soc-acpi-intel-match.h>
>   
> -#define SST_LPT_DSP_DMA_ADDR_OFFSET	0x0F0000
> -#define SST_WPT_DSP_DMA_ADDR_OFFSET	0x0FE000
> -#define SST_LPT_DSP_DMA_SIZE		(1024 - 1)
> -
>   struct sst_acpi_priv {
>   	struct platform_device *pdev_mach;
>   	struct platform_device *pdev_pcm;
> @@ -156,32 +152,6 @@ int sst_acpi_remove(struct platform_device *pdev)
>   }
>   EXPORT_SYMBOL_GPL(sst_acpi_remove);
>   
> -static struct sst_acpi_desc sst_acpi_haswell_desc = {
> -	.drv_name = "haswell-pcm-audio",
> -	.machines = snd_soc_acpi_intel_haswell_machines,
> -	.resindex_lpe_base = 0,
> -	.resindex_pcicfg_base = 1,
> -	.resindex_fw_base = -1,
> -	.irqindex_host_ipc = 0,
> -	.sst_id = SST_DEV_ID_LYNX_POINT,
> -	.dma_engine = SST_DMA_TYPE_DW,
> -	.resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
> -	.dma_size = SST_LPT_DSP_DMA_SIZE,
> -};
> -
> -static struct sst_acpi_desc sst_acpi_broadwell_desc = {
> -	.drv_name = "haswell-pcm-audio",
> -	.machines = snd_soc_acpi_intel_broadwell_machines,
> -	.resindex_lpe_base = 0,
> -	.resindex_pcicfg_base = 1,
> -	.resindex_fw_base = -1,
> -	.irqindex_host_ipc = 0,
> -	.sst_id = SST_DEV_ID_WILDCAT_POINT,
> -	.dma_engine = SST_DMA_TYPE_DW,
> -	.resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
> -	.dma_size = SST_LPT_DSP_DMA_SIZE,
> -};
> -
>   #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
>   static struct sst_acpi_desc sst_acpi_baytrail_desc = {
>   	.drv_name = "baytrail-pcm-audio",
> @@ -196,8 +166,6 @@ static struct sst_acpi_desc sst_acpi_baytrail_desc = {
>   #endif
>   
>   static const struct acpi_device_id sst_acpi_match[] = {
> -	{ "INT33C8", (unsigned long)&sst_acpi_haswell_desc },
> -	{ "INT3438", (unsigned long)&sst_acpi_broadwell_desc },
>   #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
>   	{ "80860F28", (unsigned long)&sst_acpi_baytrail_desc },
>   #endif
> diff --git a/sound/soc/intel/haswell/Makefile b/sound/soc/intel/haswell/Makefile
> index ad2341aea8ae..0af852d0577b 100644
> --- a/sound/soc/intel/haswell/Makefile
> +++ b/sound/soc/intel/haswell/Makefile
> @@ -1,5 +1,7 @@
>   # SPDX-License-Identifier: GPL-2.0-only
>   snd-soc-sst-haswell-pcm-objs := \
>   	        sst-haswell-ipc.o sst-haswell-pcm.o sst-haswell-dsp.o
> +snd-soc-hsw-acpi-objs := acpi.o
>   
>   obj-$(CONFIG_SND_SOC_INTEL_HASWELL) += snd-soc-sst-haswell-pcm.o
> +obj-$(CONFIG_SND_SOC_INTEL_HASWELL_ACPI) += snd-soc-hsw-acpi.o
> diff --git a/sound/soc/intel/haswell/acpi.c b/sound/soc/intel/haswell/acpi.c
> new file mode 100644
> index 000000000000..7bd8b03851c4
> --- /dev/null
> +++ b/sound/soc/intel/haswell/acpi.c
> @@ -0,0 +1,63 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Intel HSW loader on ACPI systems
> + *
> + * Copyright (C) 2019, Intel Corporation. All rights reserved.
> + */
> +
> +#include <linux/acpi.h>
> +#include <linux/platform_device.h>
> +#include <sound/soc-acpi.h>
> +#include <sound/soc-acpi-intel-match.h>
> +#include "../common/sst-dsp.h"
> +
> +#define SST_LPT_DSP_DMA_ADDR_OFFSET	0x0F0000
> +#define SST_WPT_DSP_DMA_ADDR_OFFSET	0x0FE000
> +#define SST_LPT_DSP_DMA_SIZE		(1024 - 1)
> +
> +static struct sst_acpi_desc hsw_acpi_desc = {
> +	.drv_name = "haswell-pcm-audio",
> +	.machines = snd_soc_acpi_intel_haswell_machines,
> +	.resindex_lpe_base = 0,
> +	.resindex_pcicfg_base = 1,
> +	.resindex_fw_base = -1,
> +	.irqindex_host_ipc = 0,
> +	.sst_id = SST_DEV_ID_LYNX_POINT,
> +	.dma_engine = SST_DMA_TYPE_DW,
> +	.resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
> +	.dma_size = SST_LPT_DSP_DMA_SIZE,
> +};
> +
> +static struct sst_acpi_desc bdw_acpi_desc = {
> +	.drv_name = "haswell-pcm-audio",
> +	.machines = snd_soc_acpi_intel_broadwell_machines,
> +	.resindex_lpe_base = 0,
> +	.resindex_pcicfg_base = 1,
> +	.resindex_fw_base = -1,
> +	.irqindex_host_ipc = 0,
> +	.sst_id = SST_DEV_ID_WILDCAT_POINT,
> +	.dma_engine = SST_DMA_TYPE_DW,
> +	.resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
> +	.dma_size = SST_LPT_DSP_DMA_SIZE,
> +};
> +
> +static const struct acpi_device_id hsw_acpi_ids[] = {
> +	{ "INT33C8", (unsigned long)&hsw_acpi_desc },
> +	{ "INT3438", (unsigned long)&bdw_acpi_desc },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(acpi, hsw_acpi_ids);
> +
> +static struct platform_driver hsw_acpi_driver = {
> +	.probe = sst_acpi_probe,
> +	.remove = sst_acpi_remove,
> +	.driver = {
> +		.name = "hsw-acpi",
> +		.acpi_match_table = ACPI_PTR(hsw_acpi_ids),
> +	},
> +};
> +module_platform_driver(hsw_acpi_driver);
> +
> +MODULE_AUTHOR("Cezary Rojewski <cezary.rojewski@intel.com>");
> +MODULE_DESCRIPTION("Intel HSW loader on ACPI systems");
> +MODULE_LICENSE("GPL v2");
>
Cezary Rojewski Aug. 24, 2019, 9:59 a.m. UTC | #2
On 2019-08-23 21:35, Pierre-Louis Bossart wrote:
> 
> 
> On 8/22/19 2:04 PM, Cezary Rojewski wrote:
>> With common acpi code exposed, separate Haswell specific code from other
>> legacy platforms. To reduce diff delta, it's still loaded with separate
>> module called: hsw-acpi. This may be address later, once heavy hitters
>> are gone.
>>
>> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
>> ---
>>   sound/soc/intel/Kconfig           |  6 ++-
>>   sound/soc/intel/common/sst-acpi.c | 32 ----------------
>>   sound/soc/intel/haswell/Makefile  |  2 +
>>   sound/soc/intel/haswell/acpi.c    | 63 +++++++++++++++++++++++++++++++
>>   4 files changed, 70 insertions(+), 33 deletions(-)
>>   create mode 100644 sound/soc/intel/haswell/acpi.c
>>
>> diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
>> index a3ec17fd63cd..9191773d203c 100644
>> --- a/sound/soc/intel/Kconfig
>> +++ b/sound/soc/intel/Kconfig
>> @@ -31,6 +31,10 @@ config SND_SST_IPC_ACPI
>>       # This option controls the ACPI-based IPC for HiFi2 platforms
>>       # (Baytrail, Cherrytrail)
>> +config SND_SOC_INTEL_HASWELL_ACPI
>> +    tristate
>> +    # This option controls the ACPI-based on HSW/BDW platforms
> 
> missing noun.
> ACPI-based probe?
> 

Thanks for spotting this out, indeed it's missing.

>> +
>>   config SND_SOC_INTEL_SST_ACPI
>>       tristate
>>       # This option controls ACPI-based probing on
>> @@ -52,7 +56,7 @@ config SND_SOC_INTEL_HASWELL
>>       depends on SND_DMA_SGBUF
>>       depends on DMADEVICES && ACPI
>>       select SND_SOC_INTEL_SST
>> -    select SND_SOC_INTEL_SST_ACPI
>> +    select SND_SOC_INTEL_HASWELL_ACPI
>>       select SND_SOC_INTEL_SST_FIRMWARE
>>       select SND_SOC_ACPI_INTEL_MATCH
>>       help
>> diff --git a/sound/soc/intel/common/sst-acpi.c 
>> b/sound/soc/intel/common/sst-acpi.c
>> index 42f9b02f2ea3..7d2f04ff0479 100644
>> --- a/sound/soc/intel/common/sst-acpi.c
>> +++ b/sound/soc/intel/common/sst-acpi.c
>> @@ -15,10 +15,6 @@
>>   #include <sound/soc-acpi.h>
>>   #include <sound/soc-acpi-intel-match.h>
>> -#define SST_LPT_DSP_DMA_ADDR_OFFSET    0x0F0000
>> -#define SST_WPT_DSP_DMA_ADDR_OFFSET    0x0FE000
>> -#define SST_LPT_DSP_DMA_SIZE        (1024 - 1)
>> -
>>   struct sst_acpi_priv {
>>       struct platform_device *pdev_mach;
>>       struct platform_device *pdev_pcm;
>> @@ -156,32 +152,6 @@ int sst_acpi_remove(struct platform_device *pdev)
>>   }
>>   EXPORT_SYMBOL_GPL(sst_acpi_remove);
>> -static struct sst_acpi_desc sst_acpi_haswell_desc = {
>> -    .drv_name = "haswell-pcm-audio",
>> -    .machines = snd_soc_acpi_intel_haswell_machines,
>> -    .resindex_lpe_base = 0,
>> -    .resindex_pcicfg_base = 1,
>> -    .resindex_fw_base = -1,
>> -    .irqindex_host_ipc = 0,
>> -    .sst_id = SST_DEV_ID_LYNX_POINT,
>> -    .dma_engine = SST_DMA_TYPE_DW,
>> -    .resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
>> -    .dma_size = SST_LPT_DSP_DMA_SIZE,
>> -};
>> -
>> -static struct sst_acpi_desc sst_acpi_broadwell_desc = {
>> -    .drv_name = "haswell-pcm-audio",
>> -    .machines = snd_soc_acpi_intel_broadwell_machines,
>> -    .resindex_lpe_base = 0,
>> -    .resindex_pcicfg_base = 1,
>> -    .resindex_fw_base = -1,
>> -    .irqindex_host_ipc = 0,
>> -    .sst_id = SST_DEV_ID_WILDCAT_POINT,
>> -    .dma_engine = SST_DMA_TYPE_DW,
>> -    .resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
>> -    .dma_size = SST_LPT_DSP_DMA_SIZE,
>> -};
>> -
>>   #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
>>   static struct sst_acpi_desc sst_acpi_baytrail_desc = {
>>       .drv_name = "baytrail-pcm-audio",
>> @@ -196,8 +166,6 @@ static struct sst_acpi_desc sst_acpi_baytrail_desc 
>> = {
>>   #endif
>>   static const struct acpi_device_id sst_acpi_match[] = {
>> -    { "INT33C8", (unsigned long)&sst_acpi_haswell_desc },
>> -    { "INT3438", (unsigned long)&sst_acpi_broadwell_desc },
>>   #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
>>       { "80860F28", (unsigned long)&sst_acpi_baytrail_desc },
>>   #endif
>> diff --git a/sound/soc/intel/haswell/Makefile 
>> b/sound/soc/intel/haswell/Makefile
>> index ad2341aea8ae..0af852d0577b 100644
>> --- a/sound/soc/intel/haswell/Makefile
>> +++ b/sound/soc/intel/haswell/Makefile
>> @@ -1,5 +1,7 @@
>>   # SPDX-License-Identifier: GPL-2.0-only
>>   snd-soc-sst-haswell-pcm-objs := \
>>               sst-haswell-ipc.o sst-haswell-pcm.o sst-haswell-dsp.o
>> +snd-soc-hsw-acpi-objs := acpi.o
>>   obj-$(CONFIG_SND_SOC_INTEL_HASWELL) += snd-soc-sst-haswell-pcm.o
>> +obj-$(CONFIG_SND_SOC_INTEL_HASWELL_ACPI) += snd-soc-hsw-acpi.o
>> diff --git a/sound/soc/intel/haswell/acpi.c 
>> b/sound/soc/intel/haswell/acpi.c
>> new file mode 100644
>> index 000000000000..7bd8b03851c4
>> --- /dev/null
>> +++ b/sound/soc/intel/haswell/acpi.c
>> @@ -0,0 +1,63 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * Intel HSW loader on ACPI systems
>> + *
>> + * Copyright (C) 2019, Intel Corporation. All rights reserved.
>> + */
>> +
>> +#include <linux/acpi.h>
>> +#include <linux/platform_device.h>
>> +#include <sound/soc-acpi.h>
>> +#include <sound/soc-acpi-intel-match.h>
>> +#include "../common/sst-dsp.h"
>> +
>> +#define SST_LPT_DSP_DMA_ADDR_OFFSET    0x0F0000
>> +#define SST_WPT_DSP_DMA_ADDR_OFFSET    0x0FE000
>> +#define SST_LPT_DSP_DMA_SIZE        (1024 - 1)
>> +
>> +static struct sst_acpi_desc hsw_acpi_desc = {
>> +    .drv_name = "haswell-pcm-audio",
>> +    .machines = snd_soc_acpi_intel_haswell_machines,
>> +    .resindex_lpe_base = 0,
>> +    .resindex_pcicfg_base = 1,
>> +    .resindex_fw_base = -1,
>> +    .irqindex_host_ipc = 0,
>> +    .sst_id = SST_DEV_ID_LYNX_POINT,
>> +    .dma_engine = SST_DMA_TYPE_DW,
>> +    .resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
>> +    .dma_size = SST_LPT_DSP_DMA_SIZE,
>> +};
>> +
>> +static struct sst_acpi_desc bdw_acpi_desc = {
>> +    .drv_name = "haswell-pcm-audio",
>> +    .machines = snd_soc_acpi_intel_broadwell_machines,
>> +    .resindex_lpe_base = 0,
>> +    .resindex_pcicfg_base = 1,
>> +    .resindex_fw_base = -1,
>> +    .irqindex_host_ipc = 0,
>> +    .sst_id = SST_DEV_ID_WILDCAT_POINT,
>> +    .dma_engine = SST_DMA_TYPE_DW,
>> +    .resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
>> +    .dma_size = SST_LPT_DSP_DMA_SIZE,
>> +};
>> +
>> +static const struct acpi_device_id hsw_acpi_ids[] = {
>> +    { "INT33C8", (unsigned long)&hsw_acpi_desc },
>> +    { "INT3438", (unsigned long)&bdw_acpi_desc },
>> +    { }
>> +};
>> +MODULE_DEVICE_TABLE(acpi, hsw_acpi_ids);
>> +
>> +static struct platform_driver hsw_acpi_driver = {
>> +    .probe = sst_acpi_probe,
>> +    .remove = sst_acpi_remove,
>> +    .driver = {
>> +        .name = "hsw-acpi",
>> +        .acpi_match_table = ACPI_PTR(hsw_acpi_ids),
>> +    },
>> +};
>> +module_platform_driver(hsw_acpi_driver);
>> +
>> +MODULE_AUTHOR("Cezary Rojewski <cezary.rojewski@intel.com>");
>> +MODULE_DESCRIPTION("Intel HSW loader on ACPI systems");
>> +MODULE_LICENSE("GPL v2");
>>

Patch
diff mbox series

diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
index a3ec17fd63cd..9191773d203c 100644
--- a/sound/soc/intel/Kconfig
+++ b/sound/soc/intel/Kconfig
@@ -31,6 +31,10 @@  config SND_SST_IPC_ACPI
 	# This option controls the ACPI-based IPC for HiFi2 platforms
 	# (Baytrail, Cherrytrail)
 
+config SND_SOC_INTEL_HASWELL_ACPI
+	tristate
+	# This option controls the ACPI-based on HSW/BDW platforms
+
 config SND_SOC_INTEL_SST_ACPI
 	tristate
 	# This option controls ACPI-based probing on
@@ -52,7 +56,7 @@  config SND_SOC_INTEL_HASWELL
 	depends on SND_DMA_SGBUF
 	depends on DMADEVICES && ACPI
 	select SND_SOC_INTEL_SST
-	select SND_SOC_INTEL_SST_ACPI
+	select SND_SOC_INTEL_HASWELL_ACPI
 	select SND_SOC_INTEL_SST_FIRMWARE
 	select SND_SOC_ACPI_INTEL_MATCH
 	help
diff --git a/sound/soc/intel/common/sst-acpi.c b/sound/soc/intel/common/sst-acpi.c
index 42f9b02f2ea3..7d2f04ff0479 100644
--- a/sound/soc/intel/common/sst-acpi.c
+++ b/sound/soc/intel/common/sst-acpi.c
@@ -15,10 +15,6 @@ 
 #include <sound/soc-acpi.h>
 #include <sound/soc-acpi-intel-match.h>
 
-#define SST_LPT_DSP_DMA_ADDR_OFFSET	0x0F0000
-#define SST_WPT_DSP_DMA_ADDR_OFFSET	0x0FE000
-#define SST_LPT_DSP_DMA_SIZE		(1024 - 1)
-
 struct sst_acpi_priv {
 	struct platform_device *pdev_mach;
 	struct platform_device *pdev_pcm;
@@ -156,32 +152,6 @@  int sst_acpi_remove(struct platform_device *pdev)
 }
 EXPORT_SYMBOL_GPL(sst_acpi_remove);
 
-static struct sst_acpi_desc sst_acpi_haswell_desc = {
-	.drv_name = "haswell-pcm-audio",
-	.machines = snd_soc_acpi_intel_haswell_machines,
-	.resindex_lpe_base = 0,
-	.resindex_pcicfg_base = 1,
-	.resindex_fw_base = -1,
-	.irqindex_host_ipc = 0,
-	.sst_id = SST_DEV_ID_LYNX_POINT,
-	.dma_engine = SST_DMA_TYPE_DW,
-	.resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
-	.dma_size = SST_LPT_DSP_DMA_SIZE,
-};
-
-static struct sst_acpi_desc sst_acpi_broadwell_desc = {
-	.drv_name = "haswell-pcm-audio",
-	.machines = snd_soc_acpi_intel_broadwell_machines,
-	.resindex_lpe_base = 0,
-	.resindex_pcicfg_base = 1,
-	.resindex_fw_base = -1,
-	.irqindex_host_ipc = 0,
-	.sst_id = SST_DEV_ID_WILDCAT_POINT,
-	.dma_engine = SST_DMA_TYPE_DW,
-	.resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
-	.dma_size = SST_LPT_DSP_DMA_SIZE,
-};
-
 #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
 static struct sst_acpi_desc sst_acpi_baytrail_desc = {
 	.drv_name = "baytrail-pcm-audio",
@@ -196,8 +166,6 @@  static struct sst_acpi_desc sst_acpi_baytrail_desc = {
 #endif
 
 static const struct acpi_device_id sst_acpi_match[] = {
-	{ "INT33C8", (unsigned long)&sst_acpi_haswell_desc },
-	{ "INT3438", (unsigned long)&sst_acpi_broadwell_desc },
 #if !IS_ENABLED(CONFIG_SND_SST_IPC_ACPI)
 	{ "80860F28", (unsigned long)&sst_acpi_baytrail_desc },
 #endif
diff --git a/sound/soc/intel/haswell/Makefile b/sound/soc/intel/haswell/Makefile
index ad2341aea8ae..0af852d0577b 100644
--- a/sound/soc/intel/haswell/Makefile
+++ b/sound/soc/intel/haswell/Makefile
@@ -1,5 +1,7 @@ 
 # SPDX-License-Identifier: GPL-2.0-only
 snd-soc-sst-haswell-pcm-objs := \
 	        sst-haswell-ipc.o sst-haswell-pcm.o sst-haswell-dsp.o
+snd-soc-hsw-acpi-objs := acpi.o
 
 obj-$(CONFIG_SND_SOC_INTEL_HASWELL) += snd-soc-sst-haswell-pcm.o
+obj-$(CONFIG_SND_SOC_INTEL_HASWELL_ACPI) += snd-soc-hsw-acpi.o
diff --git a/sound/soc/intel/haswell/acpi.c b/sound/soc/intel/haswell/acpi.c
new file mode 100644
index 000000000000..7bd8b03851c4
--- /dev/null
+++ b/sound/soc/intel/haswell/acpi.c
@@ -0,0 +1,63 @@ 
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Intel HSW loader on ACPI systems
+ *
+ * Copyright (C) 2019, Intel Corporation. All rights reserved.
+ */
+
+#include <linux/acpi.h>
+#include <linux/platform_device.h>
+#include <sound/soc-acpi.h>
+#include <sound/soc-acpi-intel-match.h>
+#include "../common/sst-dsp.h"
+
+#define SST_LPT_DSP_DMA_ADDR_OFFSET	0x0F0000
+#define SST_WPT_DSP_DMA_ADDR_OFFSET	0x0FE000
+#define SST_LPT_DSP_DMA_SIZE		(1024 - 1)
+
+static struct sst_acpi_desc hsw_acpi_desc = {
+	.drv_name = "haswell-pcm-audio",
+	.machines = snd_soc_acpi_intel_haswell_machines,
+	.resindex_lpe_base = 0,
+	.resindex_pcicfg_base = 1,
+	.resindex_fw_base = -1,
+	.irqindex_host_ipc = 0,
+	.sst_id = SST_DEV_ID_LYNX_POINT,
+	.dma_engine = SST_DMA_TYPE_DW,
+	.resindex_dma_base = SST_LPT_DSP_DMA_ADDR_OFFSET,
+	.dma_size = SST_LPT_DSP_DMA_SIZE,
+};
+
+static struct sst_acpi_desc bdw_acpi_desc = {
+	.drv_name = "haswell-pcm-audio",
+	.machines = snd_soc_acpi_intel_broadwell_machines,
+	.resindex_lpe_base = 0,
+	.resindex_pcicfg_base = 1,
+	.resindex_fw_base = -1,
+	.irqindex_host_ipc = 0,
+	.sst_id = SST_DEV_ID_WILDCAT_POINT,
+	.dma_engine = SST_DMA_TYPE_DW,
+	.resindex_dma_base = SST_WPT_DSP_DMA_ADDR_OFFSET,
+	.dma_size = SST_LPT_DSP_DMA_SIZE,
+};
+
+static const struct acpi_device_id hsw_acpi_ids[] = {
+	{ "INT33C8", (unsigned long)&hsw_acpi_desc },
+	{ "INT3438", (unsigned long)&bdw_acpi_desc },
+	{ }
+};
+MODULE_DEVICE_TABLE(acpi, hsw_acpi_ids);
+
+static struct platform_driver hsw_acpi_driver = {
+	.probe = sst_acpi_probe,
+	.remove = sst_acpi_remove,
+	.driver = {
+		.name = "hsw-acpi",
+		.acpi_match_table = ACPI_PTR(hsw_acpi_ids),
+	},
+};
+module_platform_driver(hsw_acpi_driver);
+
+MODULE_AUTHOR("Cezary Rojewski <cezary.rojewski@intel.com>");
+MODULE_DESCRIPTION("Intel HSW loader on ACPI systems");
+MODULE_LICENSE("GPL v2");