Commit f0a550a8 authored by Guneshwor Singh's avatar Guneshwor Singh Committed by Mark Brown

ASoC: Intel: Skylake: Use num_core to allocate instead of macro

For different platforms, number of dsp cores can vary. So instead of
creating array of size SKL_DSP_CORES_MAX, use num_core in dsp_ops() of
the respective platform to allocate core usage counts and states.
Signed-off-by: default avatarGuneshwor Singh <guneshwor.o.singh@intel.com>
Acked-By: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 363d4538
...@@ -253,6 +253,7 @@ int skl_init_dsp(struct skl *skl) ...@@ -253,6 +253,7 @@ int skl_init_dsp(struct skl *skl)
struct skl_dsp_loader_ops loader_ops; struct skl_dsp_loader_ops loader_ops;
int irq = bus->irq; int irq = bus->irq;
const struct skl_dsp_ops *ops; const struct skl_dsp_ops *ops;
struct skl_dsp_cores *cores;
int ret; int ret;
/* enable ppcap interrupt */ /* enable ppcap interrupt */
...@@ -279,7 +280,19 @@ int skl_init_dsp(struct skl *skl) ...@@ -279,7 +280,19 @@ int skl_init_dsp(struct skl *skl)
return ret; return ret;
skl->skl_sst->dsp_ops = ops; skl->skl_sst->dsp_ops = ops;
skl->skl_sst->cores.count = ops->num_cores; cores = &skl->skl_sst->cores;
cores->count = ops->num_cores;
cores->state = kcalloc(cores->count, sizeof(*cores->state), GFP_KERNEL);
if (!cores->state)
return -ENOMEM;
cores->usage_count = kcalloc(cores->count, sizeof(*cores->usage_count),
GFP_KERNEL);
if (!cores->usage_count) {
kfree(cores->state);
return -ENOMEM;
}
dev_dbg(bus->dev, "dsp registration status=%d\n", ret); dev_dbg(bus->dev, "dsp registration status=%d\n", ret);
...@@ -297,6 +310,9 @@ int skl_free_dsp(struct skl *skl) ...@@ -297,6 +310,9 @@ int skl_free_dsp(struct skl *skl)
ctx->dsp_ops->cleanup(bus->dev, ctx); ctx->dsp_ops->cleanup(bus->dev, ctx);
kfree(ctx->cores.state);
kfree(ctx->cores.usage_count);
if (ctx->dsp->addr.lpe) if (ctx->dsp->addr.lpe)
iounmap(ctx->dsp->addr.lpe); iounmap(ctx->dsp->addr.lpe);
......
...@@ -47,7 +47,7 @@ void skl_dsp_init_core_state(struct sst_dsp *ctx) ...@@ -47,7 +47,7 @@ void skl_dsp_init_core_state(struct sst_dsp *ctx)
skl->cores.state[SKL_DSP_CORE0_ID] = SKL_DSP_RUNNING; skl->cores.state[SKL_DSP_CORE0_ID] = SKL_DSP_RUNNING;
skl->cores.usage_count[SKL_DSP_CORE0_ID] = 1; skl->cores.usage_count[SKL_DSP_CORE0_ID] = 1;
for (i = SKL_DSP_CORE0_ID + 1; i < SKL_DSP_CORES_MAX; i++) { for (i = SKL_DSP_CORE0_ID + 1; i < skl->cores.count; i++) {
skl->cores.state[i] = SKL_DSP_RESET; skl->cores.state[i] = SKL_DSP_RESET;
skl->cores.usage_count[i] = 0; skl->cores.usage_count[i] = 0;
} }
......
...@@ -44,12 +44,10 @@ struct skl_ipc_header { ...@@ -44,12 +44,10 @@ struct skl_ipc_header {
u32 extension; u32 extension;
}; };
#define SKL_DSP_CORES_MAX 2
struct skl_dsp_cores { struct skl_dsp_cores {
unsigned int count; unsigned int count;
enum skl_dsp_states state[SKL_DSP_CORES_MAX]; enum skl_dsp_states *state;
int usage_count[SKL_DSP_CORES_MAX]; int *usage_count;
}; };
/** /**
......
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