Merge tag 'asoc-v6.9' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-microblaze.git] / sound / soc / intel / avs / skl.c
index 6bb8bbc..d19f895 100644 (file)
 #include "avs.h"
 #include "messages.h"
 
+irqreturn_t avs_skl_irq_thread(struct avs_dev *adev)
+{
+       union avs_reply_msg msg;
+       u32 hipct, hipcte;
+
+       hipct = snd_hdac_adsp_readl(adev, SKL_ADSP_REG_HIPCT);
+       hipcte = snd_hdac_adsp_readl(adev, SKL_ADSP_REG_HIPCTE);
+
+       /* Ensure DSP sent new response to process. */
+       if (!(hipct & SKL_ADSP_HIPCT_BUSY))
+               return IRQ_NONE;
+
+       msg.primary = hipct;
+       msg.ext.val = hipcte;
+       avs_dsp_process_response(adev, msg.val);
+
+       /* Tell DSP we accepted its message. */
+       snd_hdac_adsp_updatel(adev, SKL_ADSP_REG_HIPCT, SKL_ADSP_HIPCT_BUSY, SKL_ADSP_HIPCT_BUSY);
+       /* Unmask busy interrupt. */
+       snd_hdac_adsp_updatel(adev, SKL_ADSP_REG_HIPCCTL, AVS_ADSP_HIPCCTL_BUSY,
+                             AVS_ADSP_HIPCCTL_BUSY);
+
+       return IRQ_HANDLED;
+}
+
 static int __maybe_unused
-skl_enable_logs(struct avs_dev *adev, enum avs_log_enable enable, u32 aging_period,
-               u32 fifo_full_period, unsigned long resource_mask, u32 *priorities)
+avs_skl_enable_logs(struct avs_dev *adev, enum avs_log_enable enable, u32 aging_period,
+                   u32 fifo_full_period, unsigned long resource_mask, u32 *priorities)
 {
-       struct skl_log_state_info *info;
+       struct avs_skl_log_state_info *info;
        u32 size, num_cores = adev->hw_cfg.dsp_cores;
        int ret, i;
 
@@ -45,7 +70,7 @@ skl_enable_logs(struct avs_dev *adev, enum avs_log_enable enable, u32 aging_peri
        return 0;
 }
 
-int skl_log_buffer_offset(struct avs_dev *adev, u32 core)
+int avs_skl_log_buffer_offset(struct avs_dev *adev, u32 core)
 {
        return core * avs_log_buffer_size(adev);
 }
@@ -53,8 +78,7 @@ int skl_log_buffer_offset(struct avs_dev *adev, u32 core)
 /* fw DbgLogWp registers */
 #define FW_REGS_DBG_LOG_WP(core) (0x30 + 0x4 * core)
 
-static int
-skl_log_buffer_status(struct avs_dev *adev, union avs_notify_msg *msg)
+static int avs_skl_log_buffer_status(struct avs_dev *adev, union avs_notify_msg *msg)
 {
        void __iomem *buf;
        u16 size, write, offset;
@@ -74,7 +98,7 @@ skl_log_buffer_status(struct avs_dev *adev, union avs_notify_msg *msg)
        return 0;
 }
 
-static int skl_coredump(struct avs_dev *adev, union avs_notify_msg *msg)
+static int avs_skl_coredump(struct avs_dev *adev, union avs_notify_msg *msg)
 {
        u8 *dump;
 
@@ -88,33 +112,32 @@ static int skl_coredump(struct avs_dev *adev, union avs_notify_msg *msg)
        return 0;
 }
 
-static bool
-skl_d0ix_toggle(struct avs_dev *adev, struct avs_ipc_msg *tx, bool wake)
+static bool avs_skl_d0ix_toggle(struct avs_dev *adev, struct avs_ipc_msg *tx, bool wake)
 {
        /* unsupported on cAVS 1.5 hw */
        return false;
 }
 
-static int skl_set_d0ix(struct avs_dev *adev, bool enable)
+static int avs_skl_set_d0ix(struct avs_dev *adev, bool enable)
 {
        /* unsupported on cAVS 1.5 hw */
        return 0;
 }
 
-const struct avs_dsp_ops skl_dsp_ops = {
+const struct avs_dsp_ops avs_skl_dsp_ops = {
        .power = avs_dsp_core_power,
        .reset = avs_dsp_core_reset,
        .stall = avs_dsp_core_stall,
-       .irq_handler = avs_dsp_irq_handler,
-       .irq_thread = avs_dsp_irq_thread,
+       .irq_handler = avs_irq_handler,
+       .irq_thread = avs_skl_irq_thread,
        .int_control = avs_dsp_interrupt_control,
        .load_basefw = avs_cldma_load_basefw,
        .load_lib = avs_cldma_load_library,
        .transfer_mods = avs_cldma_transfer_modules,
-       .log_buffer_offset = skl_log_buffer_offset,
-       .log_buffer_status = skl_log_buffer_status,
-       .coredump = skl_coredump,
-       .d0ix_toggle = skl_d0ix_toggle,
-       .set_d0ix = skl_set_d0ix,
+       .log_buffer_offset = avs_skl_log_buffer_offset,
+       .log_buffer_status = avs_skl_log_buffer_status,
+       .coredump = avs_skl_coredump,
+       .d0ix_toggle = avs_skl_d0ix_toggle,
+       .set_d0ix = avs_skl_set_d0ix,
        AVS_SET_ENABLE_LOGS_OP(skl)
 };