thread_fn is the only DSP core op which is located outside of sst_ops. Add it to the rest. Change enables further cleanups by following patches, mainly removal of sst_dsp_device struct.
Signed-off-by: Cezary Rojewski cezary.rojewski@intel.com --- sound/soc/intel/baytrail/sst-baytrail-dsp.c | 1 + sound/soc/intel/baytrail/sst-baytrail-ipc.c | 3 +-- sound/soc/intel/baytrail/sst-baytrail-ipc.h | 2 ++ sound/soc/intel/common/sst-dsp-priv.h | 1 + sound/soc/intel/common/sst-dsp.h | 1 - sound/soc/intel/common/sst-firmware.c | 2 +- sound/soc/intel/haswell/sst-haswell-dsp.c | 1 + sound/soc/intel/haswell/sst-haswell-ipc.c | 3 +-- sound/soc/intel/haswell/sst-haswell-ipc.h | 2 ++ sound/soc/intel/skylake/bxt-sst.c | 2 +- sound/soc/intel/skylake/cnl-sst.c | 28 ++++++++++----------- sound/soc/intel/skylake/skl-sst-dsp.c | 3 +-- sound/soc/intel/skylake/skl-sst.c | 1 - 13 files changed, 26 insertions(+), 24 deletions(-)
diff --git a/sound/soc/intel/baytrail/sst-baytrail-dsp.c b/sound/soc/intel/baytrail/sst-baytrail-dsp.c index 4116ba66a4c2..4869e18116eb 100644 --- a/sound/soc/intel/baytrail/sst-baytrail-dsp.c +++ b/sound/soc/intel/baytrail/sst-baytrail-dsp.c @@ -352,6 +352,7 @@ struct sst_ops sst_byt_ops = { .ram_read = sst_memcpy_fromio_32, .ram_write = sst_memcpy_toio_32, .irq_handler = sst_byt_irq, + .thread_fn = sst_byt_irq_thread, .init = sst_byt_init, .free = sst_byt_free, .parse_fw = sst_byt_parse_fw_image, diff --git a/sound/soc/intel/baytrail/sst-baytrail-ipc.c b/sound/soc/intel/baytrail/sst-baytrail-ipc.c index 74274bd38f7a..23d65ad38e19 100644 --- a/sound/soc/intel/baytrail/sst-baytrail-ipc.c +++ b/sound/soc/intel/baytrail/sst-baytrail-ipc.c @@ -293,7 +293,7 @@ static int sst_byt_process_notification(struct sst_byt *byt, return 1; }
-static irqreturn_t sst_byt_irq_thread(int irq, void *context) +irqreturn_t sst_byt_irq_thread(int irq, void *context) { struct sst_dsp *sst = (struct sst_dsp *) context; struct sst_byt *byt = sst_dsp_get_thread_context(sst); @@ -557,7 +557,6 @@ struct sst_dsp *sst_byt_get_dsp(struct sst_byt *byt) }
static struct sst_dsp_device byt_dev = { - .thread = sst_byt_irq_thread, .ops = &sst_byt_ops, };
diff --git a/sound/soc/intel/baytrail/sst-baytrail-ipc.h b/sound/soc/intel/baytrail/sst-baytrail-ipc.h index 755098509327..9aba6b83ee5f 100644 --- a/sound/soc/intel/baytrail/sst-baytrail-ipc.h +++ b/sound/soc/intel/baytrail/sst-baytrail-ipc.h @@ -7,6 +7,7 @@ #ifndef __SST_BYT_IPC_H #define __SST_BYT_IPC_H
+#include <linux/irqreturn.h> #include <linux/types.h>
struct sst_byt; @@ -61,5 +62,6 @@ struct sst_dsp *sst_byt_get_dsp(struct sst_byt *byt); int sst_byt_dsp_suspend_late(struct device *dev, struct sst_pdata *pdata); int sst_byt_dsp_boot(struct device *dev, struct sst_pdata *pdata); int sst_byt_dsp_wait_for_ready(struct device *dev, struct sst_pdata *pdata); +irqreturn_t sst_byt_irq_thread(int irq, void *context);
#endif diff --git a/sound/soc/intel/common/sst-dsp-priv.h b/sound/soc/intel/common/sst-dsp-priv.h index 3d8765ce3e0d..7ec477108948 100644 --- a/sound/soc/intel/common/sst-dsp-priv.h +++ b/sound/soc/intel/common/sst-dsp-priv.h @@ -49,6 +49,7 @@ struct sst_ops {
/* IRQ handlers */ irqreturn_t (*irq_handler)(int irq, void *context); + irqreturn_t (*thread_fn)(int irq, void *context);
/* SST init and free */ int (*init)(struct sst_dsp *sst, struct sst_pdata *pdata); diff --git a/sound/soc/intel/common/sst-dsp.h b/sound/soc/intel/common/sst-dsp.h index 604a80c5859b..05fa1ca72f46 100644 --- a/sound/soc/intel/common/sst-dsp.h +++ b/sound/soc/intel/common/sst-dsp.h @@ -175,7 +175,6 @@ struct sst_dsp; struct sst_dsp_device { /* Mandatory fields */ struct sst_ops *ops; - irqreturn_t (*thread)(int irq, void *context); void *thread_context; };
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c index d27947aeb079..c18236ca77f4 100644 --- a/sound/soc/intel/common/sst-firmware.c +++ b/sound/soc/intel/common/sst-firmware.c @@ -1237,7 +1237,7 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
/* Register the ISR */ err = request_threaded_irq(sst->irq, sst->ops->irq_handler, - sst_dev->thread, IRQF_SHARED, "AudioDSP", sst); + sst->ops->thread_fn, IRQF_SHARED, "AudioDSP", sst); if (err) goto irq_err;
diff --git a/sound/soc/intel/haswell/sst-haswell-dsp.c b/sound/soc/intel/haswell/sst-haswell-dsp.c index 88c3f63bded9..c099dec7d61f 100644 --- a/sound/soc/intel/haswell/sst-haswell-dsp.c +++ b/sound/soc/intel/haswell/sst-haswell-dsp.c @@ -699,6 +699,7 @@ struct sst_ops haswell_ops = { .ram_read = sst_memcpy_fromio_32, .ram_write = sst_memcpy_toio_32, .irq_handler = hsw_irq, + .thread_fn = hsw_irq_thread, .init = hsw_init, .free = hsw_free, .parse_fw = hsw_parse_fw_image, diff --git a/sound/soc/intel/haswell/sst-haswell-ipc.c b/sound/soc/intel/haswell/sst-haswell-ipc.c index 5c73b11375e3..e25358d19aae 100644 --- a/sound/soc/intel/haswell/sst-haswell-ipc.c +++ b/sound/soc/intel/haswell/sst-haswell-ipc.c @@ -757,7 +757,7 @@ static int hsw_process_notification(struct sst_hsw *hsw) return handled; }
-static irqreturn_t hsw_irq_thread(int irq, void *context) +irqreturn_t hsw_irq_thread(int irq, void *context) { struct sst_dsp *sst = (struct sst_dsp *) context; struct sst_hsw *hsw = sst_dsp_get_thread_context(sst); @@ -2046,7 +2046,6 @@ int sst_hsw_module_set_param(struct sst_hsw *hsw, }
static struct sst_dsp_device hsw_dev = { - .thread = hsw_irq_thread, .ops = &haswell_ops, };
diff --git a/sound/soc/intel/haswell/sst-haswell-ipc.h b/sound/soc/intel/haswell/sst-haswell-ipc.h index fdc70c77e688..d4a936a75f7d 100644 --- a/sound/soc/intel/haswell/sst-haswell-ipc.h +++ b/sound/soc/intel/haswell/sst-haswell-ipc.h @@ -8,6 +8,7 @@ #ifndef __SST_HASWELL_IPC_H #define __SST_HASWELL_IPC_H
+#include <linux/irqreturn.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/platform_device.h> @@ -396,6 +397,7 @@ struct sst_hsw_ipc_fw_version; struct sst_hsw *sst_hsw_new(struct device *dev, const u8 *fw, size_t fw_length, u32 fw_offset); void sst_hsw_free(struct sst_hsw *hsw); +irqreturn_t hsw_irq_thread(int irq, void *context); int sst_hsw_fw_get_version(struct sst_hsw *hsw, struct sst_hsw_ipc_fw_version *version); u32 create_channel_map(enum sst_hsw_channel_config config); diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c index 4e5fb7684415..8faffec4e943 100644 --- a/sound/soc/intel/skylake/bxt-sst.c +++ b/sound/soc/intel/skylake/bxt-sst.c @@ -535,6 +535,7 @@ static const struct skl_dsp_fw_ops bxt_fw_ops = {
static struct sst_ops skl_ops = { .irq_handler = skl_dsp_sst_interrupt, + .thread_fn = skl_dsp_irq_thread_handler, .write = sst_shim32_write, .read = sst_shim32_read, .ram_read = sst_memcpy_fromio_32, @@ -543,7 +544,6 @@ static struct sst_ops skl_ops = { };
static struct sst_dsp_device skl_dev = { - .thread = skl_dsp_irq_thread_handler, .ops = &skl_ops, };
diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c index 5143200579aa..02d8e72d2d5a 100644 --- a/sound/soc/intel/skylake/cnl-sst.c +++ b/sound/soc/intel/skylake/cnl-sst.c @@ -286,15 +286,6 @@ static const struct skl_dsp_fw_ops cnl_fw_ops = { .load_library = bxt_load_library, };
-static struct sst_ops cnl_ops = { - .irq_handler = cnl_dsp_sst_interrupt, - .write = sst_shim32_write, - .read = sst_shim32_read, - .ram_read = sst_memcpy_fromio_32, - .ram_write = sst_memcpy_toio_32, - .free = cnl_dsp_free, -}; - #define CNL_IPC_GLB_NOTIFY_RSP_SHIFT 29 #define CNL_IPC_GLB_NOTIFY_RSP_MASK 0x1 #define CNL_IPC_GLB_NOTIFY_RSP_TYPE(x) (((x) >> CNL_IPC_GLB_NOTIFY_RSP_SHIFT) \ @@ -370,11 +361,6 @@ static irqreturn_t cnl_dsp_irq_thread_handler(int irq, void *context) return IRQ_HANDLED; }
-static struct sst_dsp_device cnl_dev = { - .thread = cnl_dsp_irq_thread_handler, - .ops = &cnl_ops, -}; - static void cnl_ipc_tx_msg(struct sst_generic_ipc *ipc, struct ipc_message *msg) { struct skl_ipc_header *header = (struct skl_ipc_header *)(&msg->tx.header); @@ -423,6 +409,20 @@ static int cnl_ipc_init(struct device *dev, struct skl_dev *cnl) return 0; }
+static struct sst_ops cnl_ops = { + .irq_handler = cnl_dsp_sst_interrupt, + .thread_fn = cnl_dsp_irq_thread_handler, + .write = sst_shim32_write, + .read = sst_shim32_read, + .ram_read = sst_memcpy_fromio_32, + .ram_write = sst_memcpy_toio_32, + .free = cnl_dsp_free, +}; + +static struct sst_dsp_device cnl_dev = { + .ops = &cnl_ops, +}; + int cnl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_dev **dsp) diff --git a/sound/soc/intel/skylake/skl-sst-dsp.c b/sound/soc/intel/skylake/skl-sst-dsp.c index e0807db225f4..8d98089e3177 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.c +++ b/sound/soc/intel/skylake/skl-sst-dsp.c @@ -448,12 +448,11 @@ struct sst_dsp *skl_dsp_ctx_init(struct device *dev,
int skl_dsp_acquire_irq(struct sst_dsp *sst) { - struct sst_dsp_device *sst_dev = sst->sst_dev; int ret;
/* Register the ISR */ ret = request_threaded_irq(sst->irq, sst->ops->irq_handler, - sst_dev->thread, IRQF_SHARED, "AudioDSP", sst); + sst->ops->thread_fn, IRQF_SHARED, "AudioDSP", sst); if (ret) dev_err(sst->dev, "unable to grab threaded IRQ %d, disabling device\n", sst->irq); diff --git a/sound/soc/intel/skylake/skl-sst.c b/sound/soc/intel/skylake/skl-sst.c index a7a285ea24e1..9fd3cf30e87c 100644 --- a/sound/soc/intel/skylake/skl-sst.c +++ b/sound/soc/intel/skylake/skl-sst.c @@ -513,7 +513,6 @@ static struct sst_ops skl_ops = { };
static struct sst_dsp_device skl_dev = { - .thread = skl_dsp_irq_thread_handler, .ops = &skl_ops, };