#include "../common/sst-dsp.h"
 #include "../common/sst-dsp-priv.h"
 #include "skl-sst-ipc.h"
-#include "skl-tplg-interface.h"
 
 #define BXT_BASEFW_TIMEOUT     3000
 #define BXT_INIT_TIMEOUT       500
 }
 
 static int
-bxt_load_library(struct sst_dsp *ctx, struct skl_dfw_manifest *minfo)
+bxt_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, int lib_count)
 {
        struct snd_dma_buffer dmab;
        struct skl_sst *skl = ctx->thread_context;
        int ret = 0, i, dma_id, stream_tag;
 
        /* library indices start from 1 to N. 0 represents base FW */
-       for (i = 1; i < minfo->lib_count; i++) {
-               ret = request_firmware(&fw, minfo->lib[i].name, ctx->dev);
+       for (i = 1; i < lib_count; i++) {
+               ret = request_firmware(&fw, linfo[i].name, ctx->dev);
                if (ret < 0) {
                        dev_err(ctx->dev, "Request lib %s failed:%d\n",
-                                       minfo->lib[i].name, ret);
+                                       linfo[i].name, ret);
                        return ret;
                }
 
                ret = skl_sst_ipc_load_library(&skl->ipc, dma_id, i);
                if (ret < 0)
                        dev_err(ctx->dev, "IPC Load Lib for %s fail: %d\n",
-                                       minfo->lib[i].name, ret);
+                                       linfo[i].name, ret);
 
                ctx->dsp_ops.trigger(ctx->dev, false, stream_tag);
                ctx->dsp_ops.cleanup(ctx->dev, &dmab, stream_tag);
 static int sst_bxt_prepare_fw(struct sst_dsp *ctx,
                        const void *fwdata, u32 fwsize)
 {
-       int stream_tag, ret, i;
-       u32 reg;
+       int stream_tag, ret;
 
        stream_tag = ctx->dsp_ops.prepare(ctx->dev, 0x40, fwsize, &ctx->dmab);
        if (stream_tag <= 0) {
        int ret;
        struct skl_ipc_dxstate_info dx;
        unsigned int core_mask = SKL_DSP_CORE_MASK(core_id);
-       struct skl_dfw_manifest *minfo = &skl->manifest;
 
        if (skl->fw_loaded == false) {
                skl->boot_complete = false;
                        return ret;
                }
 
-               if (minfo->lib_count > 1) {
-                       ret = bxt_load_library(ctx, minfo);
+               if (skl->lib_count > 1) {
+                       ret = bxt_load_library(ctx, skl->lib_info,
+                                               skl->lib_count);
                        if (ret < 0) {
                                dev_err(ctx->dev, "reload libs failed: %d\n", ret);
                                return ret;
 
        skl_dsp_init_core_state(sst);
 
-       if (ctx->manifest.lib_count > 1) {
-               ret = sst->fw_ops.load_library(sst, &ctx->manifest);
+       if (ctx->lib_count > 1) {
+               ret = sst->fw_ops.load_library(sst, ctx->lib_info,
+                                               ctx->lib_count);
                if (ret < 0) {
                        dev_err(dev, "Load Library failed : %x\n", ret);
                        return ret;
 
 #include <linux/interrupt.h>
 #include <sound/memalloc.h>
 #include "skl-sst-cldma.h"
-#include "skl-tplg-interface.h"
 #include "skl-topology.h"
 
 struct sst_dsp;
        int (*load_fw)(struct sst_dsp  *ctx);
        /* FW module parser/loader */
        int (*load_library)(struct sst_dsp *ctx,
-               struct skl_dfw_manifest *minfo);
+               struct skl_lib_info *linfo, int count);
        int (*parse_fw)(struct sst_dsp *ctx);
        int (*set_state_D0)(struct sst_dsp *ctx, unsigned int core_id);
        int (*set_state_D3)(struct sst_dsp *ctx, unsigned int core_id);
 void skl_freeup_uuid_list(struct skl_sst *ctx);
 
 int skl_dsp_strip_extended_manifest(struct firmware *fw);
-
 #endif /*__SKL_SST_DSP_H__*/
 
        /* multi-core */
        struct skl_dsp_cores cores;
 
-       /* tplg manifest */
-       struct skl_dfw_manifest manifest;
+       /* library info */
+       struct skl_lib_info  lib_info[SKL_MAX_LIB];
+       int lib_count;
 
        /* Callback to update D0i3C register */
        void (*update_d0i3c)(struct device *dev, bool enable);
 
 
 static int skl_tplg_fill_str_mfest_tkn(struct device *dev,
                struct snd_soc_tplg_vendor_string_elem *str_elem,
-               struct skl_dfw_manifest *minfo)
+               struct skl *skl)
 {
        int tkn_count = 0;
        static int ref_count;
 
        switch (str_elem->token) {
        case SKL_TKN_STR_LIB_NAME:
-               if (ref_count > minfo->lib_count - 1) {
+               if (ref_count > skl->skl_sst->lib_count - 1) {
                        ref_count = 0;
                        return -EINVAL;
                }
 
-               strncpy(minfo->lib[ref_count].name, str_elem->string,
-                               ARRAY_SIZE(minfo->lib[ref_count].name));
+               strncpy(skl->skl_sst->lib_info[ref_count].name,
+                       str_elem->string,
+                       ARRAY_SIZE(skl->skl_sst->lib_info[ref_count].name));
                ref_count++;
                tkn_count++;
                break;
 
 static int skl_tplg_get_str_tkn(struct device *dev,
                struct snd_soc_tplg_vendor_array *array,
-               struct skl_dfw_manifest *minfo)
+               struct skl *skl)
 {
        int tkn_count = 0, ret;
        struct snd_soc_tplg_vendor_string_elem *str_elem;
 
        str_elem = (struct snd_soc_tplg_vendor_string_elem *)array->value;
        while (tkn_count < array->num_elems) {
-               ret = skl_tplg_fill_str_mfest_tkn(dev, str_elem, minfo);
+               ret = skl_tplg_fill_str_mfest_tkn(dev, str_elem, skl);
                str_elem++;
 
                if (ret < 0)
 
 static int skl_tplg_get_int_tkn(struct device *dev,
                struct snd_soc_tplg_vendor_value_elem *tkn_elem,
-               struct skl_dfw_manifest *minfo)
+               struct skl *skl)
 {
        int tkn_count = 0;
 
        switch (tkn_elem->token) {
        case SKL_TKN_U32_LIB_COUNT:
-               minfo->lib_count = tkn_elem->value;
+               skl->skl_sst->lib_count = tkn_elem->value;
                tkn_count++;
                break;
 
  * type.
  */
 static int skl_tplg_get_manifest_tkn(struct device *dev,
-               char *pvt_data, struct skl_dfw_manifest *minfo,
+               char *pvt_data, struct skl *skl,
                int block_size)
 {
        int tkn_count = 0, ret;
                off += array->size;
                switch (array->type) {
                case SND_SOC_TPLG_TUPLE_TYPE_STRING:
-                       ret = skl_tplg_get_str_tkn(dev, array, minfo);
+                       ret = skl_tplg_get_str_tkn(dev, array, skl);
 
                        if (ret < 0)
                                return ret;
 
                while (tkn_count <= array->num_elems - 1) {
                        ret = skl_tplg_get_int_tkn(dev,
-                                       tkn_elem, minfo);
+                                       tkn_elem, skl);
                        if (ret < 0)
                                return ret;
 
  * preceded by descriptors for type and size of data block.
  */
 static int skl_tplg_get_manifest_data(struct snd_soc_tplg_manifest *manifest,
-                       struct device *dev, struct skl_dfw_manifest *minfo)
+                       struct device *dev, struct skl *skl)
 {
        struct snd_soc_tplg_vendor_array *array;
        int num_blocks, block_size = 0, block_type, off = 0;
                data = (manifest->priv.data + off);
 
                if (block_type == SKL_TYPE_TUPLE) {
-                       ret = skl_tplg_get_manifest_tkn(dev, data, minfo,
+                       ret = skl_tplg_get_manifest_tkn(dev, data, skl,
                                        block_size);
 
                        if (ret < 0)
 static int skl_manifest_load(struct snd_soc_component *cmpnt,
                                struct snd_soc_tplg_manifest *manifest)
 {
-       struct skl_dfw_manifest *minfo;
        struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt);
        struct hdac_bus *bus = ebus_to_hbus(ebus);
        struct skl *skl = ebus_to_skl(ebus);
-       int ret = 0;
 
        /* proceed only if we have private data defined */
        if (manifest->priv.size == 0)
                return 0;
 
-       minfo = &skl->skl_sst->manifest;
-
-       skl_tplg_get_manifest_data(manifest, bus->dev, minfo);
+       skl_tplg_get_manifest_data(manifest, bus->dev, skl);
 
-       if (minfo->lib_count > HDA_MAX_LIB) {
+       if (skl->skl_sst->lib_count > SKL_MAX_LIB) {
                dev_err(bus->dev, "Exceeding max Library count. Got:%d\n",
-                                       minfo->lib_count);
-               ret = -EINVAL;
+                                       skl->skl_sst->lib_count);
+               return  -EINVAL;
        }
 
-       return ret;
+       return 0;
 }
 
 static struct snd_soc_tplg_ops skl_tplg_ops  = {
 
        struct list_head node;
 };
 
+#define SKL_LIB_NAME_LENGTH 128
+#define SKL_MAX_LIB 16
+
+struct skl_lib_info {
+       char name[SKL_LIB_NAME_LENGTH];
+       const struct firmware *fw;
+};
+
+struct skl_manifest {
+       u32 lib_count;
+       struct skl_lib_info lib[SKL_MAX_LIB];
+};
+
 static inline struct skl *get_skl_ctx(struct device *dev)
 {
        struct hdac_ext_bus *ebus = dev_get_drvdata(dev);
 
        char params[0];
 } __packed;
 
-#define LIB_NAME_LENGTH        128
-#define HDA_MAX_LIB    16
-
-struct lib_info {
-       char name[LIB_NAME_LENGTH];
-} __packed;
-
-struct skl_dfw_manifest {
-       u32 lib_count;
-       struct lib_info lib[HDA_MAX_LIB];
-} __packed;
-
 enum skl_tkn_dir {
        SKL_DIR_IN,
        SKL_DIR_OUT