ASoC: Intel: Skylake: Use num_core to allocate instead of macro
authorGuneshwor Singh <guneshwor.o.singh@intel.com>
Wed, 2 Aug 2017 16:21:13 +0000 (21:51 +0530)
committerMark Brown <broonie@kernel.org>
Thu, 3 Aug 2017 10:07:15 +0000 (11:07 +0100)
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: Guneshwor Singh <guneshwor.o.singh@intel.com>
Acked-By: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-messages.c
sound/soc/intel/skylake/skl-sst-dsp.c
sound/soc/intel/skylake/skl-sst-ipc.h

index 7892e445e87b6aa08526beb2b4b13d6cbea13373..c6b60ee5b196ec5111a86a5afb187ce8843b17dd 100644 (file)
@@ -253,6 +253,7 @@ int skl_init_dsp(struct skl *skl)
        struct skl_dsp_loader_ops loader_ops;
        int irq = bus->irq;
        const struct skl_dsp_ops *ops;
+       struct skl_dsp_cores *cores;
        int ret;
 
        /* enable ppcap interrupt */
@@ -279,7 +280,19 @@ int skl_init_dsp(struct skl *skl)
                return ret;
 
        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);
 
@@ -297,6 +310,9 @@ int skl_free_dsp(struct skl *skl)
 
        ctx->dsp_ops->cleanup(bus->dev, ctx);
 
+       kfree(ctx->cores.state);
+       kfree(ctx->cores.usage_count);
+
        if (ctx->dsp->addr.lpe)
                iounmap(ctx->dsp->addr.lpe);
 
index 08332723c70029fa49fa3b991b68b358cc1d4158..c2ba5ff1632c79fa7bd2b07784cbe178568f8a0a 100644 (file)
@@ -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.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.usage_count[i] = 0;
        }
index e057da2713c6cbfe188ff0165c17a0026c7d2476..e485e8f5ea2c6873c02c979c2efd466cb803c7d1 100644 (file)
@@ -44,12 +44,10 @@ struct skl_ipc_header {
        u32 extension;
 };
 
-#define SKL_DSP_CORES_MAX  2
-
 struct skl_dsp_cores {
        unsigned int count;
-       enum skl_dsp_states state[SKL_DSP_CORES_MAX];
-       int usage_count[SKL_DSP_CORES_MAX];
+       enum skl_dsp_states *state;
+       int *usage_count;
 };
 
 /**