Commit 4e10996b authored by Jeeja KP's avatar Jeeja KP Committed by Mark Brown

ASoC: Intel: Skylake: Add support to disable module notifications

Each FW modules can report underrun/overrun notification from
all modules. This patch disables underrun/overrun notification after
firmware is loaded.
This will be supportted for debug mode only thru debugfs
Signed-off-by: default avatarJeeja KP <jeeja.kp@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent d7b18813
...@@ -54,6 +54,24 @@ static int skl_free_dma_buf(struct device *dev, struct snd_dma_buffer *dmab) ...@@ -54,6 +54,24 @@ static int skl_free_dma_buf(struct device *dev, struct snd_dma_buffer *dmab)
return 0; return 0;
} }
#define NOTIFICATION_PARAM_ID 3
#define NOTIFICATION_MASK 0xf
/* disable notfication for underruns/overruns from firmware module */
static void skl_dsp_enable_notification(struct skl_sst *ctx, bool enable)
{
struct notification_mask mask;
struct skl_ipc_large_config_msg msg = {0};
mask.notify = NOTIFICATION_MASK;
mask.enable = enable;
msg.large_param_id = NOTIFICATION_PARAM_ID;
msg.param_data_size = sizeof(mask);
skl_ipc_set_large_config(&ctx->ipc, &msg, (u32 *)&mask);
}
int skl_init_dsp(struct skl *skl) int skl_init_dsp(struct skl *skl)
{ {
void __iomem *mmio_base; void __iomem *mmio_base;
...@@ -79,7 +97,7 @@ int skl_init_dsp(struct skl *skl) ...@@ -79,7 +97,7 @@ int skl_init_dsp(struct skl *skl)
ret = skl_sst_dsp_init(bus->dev, mmio_base, irq, ret = skl_sst_dsp_init(bus->dev, mmio_base, irq,
loader_ops, &skl->skl_sst); loader_ops, &skl->skl_sst);
skl_dsp_enable_notification(skl->skl_sst, false);
dev_dbg(bus->dev, "dsp registration status=%d\n", ret); dev_dbg(bus->dev, "dsp registration status=%d\n", ret);
return ret; return ret;
...@@ -122,6 +140,7 @@ int skl_suspend_dsp(struct skl *skl) ...@@ -122,6 +140,7 @@ int skl_suspend_dsp(struct skl *skl)
int skl_resume_dsp(struct skl *skl) int skl_resume_dsp(struct skl *skl)
{ {
struct skl_sst *ctx = skl->skl_sst; struct skl_sst *ctx = skl->skl_sst;
int ret;
/* if ppcap is not supported return 0 */ /* if ppcap is not supported return 0 */
if (!skl->ebus.ppcap) if (!skl->ebus.ppcap)
...@@ -131,7 +150,12 @@ int skl_resume_dsp(struct skl *skl) ...@@ -131,7 +150,12 @@ int skl_resume_dsp(struct skl *skl)
snd_hdac_ext_bus_ppcap_enable(&skl->ebus, true); snd_hdac_ext_bus_ppcap_enable(&skl->ebus, true);
snd_hdac_ext_bus_ppcap_int_enable(&skl->ebus, true); snd_hdac_ext_bus_ppcap_int_enable(&skl->ebus, true);
return skl_dsp_wake(ctx->dsp); ret = skl_dsp_wake(ctx->dsp);
if (ret < 0)
return ret;
skl_dsp_enable_notification(skl->skl_sst, false);
return ret;
} }
enum skl_bitdepth skl_get_bit_depth(int params) enum skl_bitdepth skl_get_bit_depth(int params)
......
...@@ -129,6 +129,11 @@ struct skl_src_module_cfg { ...@@ -129,6 +129,11 @@ struct skl_src_module_cfg {
enum skl_s_freq src_cfg; enum skl_s_freq src_cfg;
} __packed; } __packed;
struct notification_mask {
u32 notify;
u32 enable;
} __packed;
struct skl_up_down_mixer_cfg { struct skl_up_down_mixer_cfg {
struct skl_base_cfg base_cfg; struct skl_base_cfg base_cfg;
enum skl_ch_cfg out_ch_cfg; enum skl_ch_cfg out_ch_cfg;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment