Commit 9e0784d0 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Mark Brown

ASoC: Intel: Skylake: Switch to modern UUID API

Switch the driver to use modern UUID API, i.e. guid_t type and
accompanying functions, such as guid_equal().

Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Vinod Koul <vkoul@kernel.org>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f1572a44
...@@ -1319,12 +1319,12 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig) ...@@ -1319,12 +1319,12 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
{ {
struct skl_sst *ctx = skl->skl_sst; struct skl_sst *ctx = skl->skl_sst;
struct skl_module_inst_id *pin_id; struct skl_module_inst_id *pin_id;
uuid_le *uuid_mod, *uuid_tplg; guid_t *uuid_mod, *uuid_tplg;
struct skl_module *skl_module; struct skl_module *skl_module;
struct uuid_module *module; struct uuid_module *module;
int i, ret = -EIO; int i, ret = -EIO;
uuid_mod = (uuid_le *)mconfig->guid; uuid_mod = (guid_t *)mconfig->guid;
if (list_empty(&ctx->uuid_list)) { if (list_empty(&ctx->uuid_list)) {
dev_err(ctx->dev, "Module list is empty\n"); dev_err(ctx->dev, "Module list is empty\n");
...@@ -1332,7 +1332,7 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig) ...@@ -1332,7 +1332,7 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
} }
list_for_each_entry(module, &ctx->uuid_list, list) { list_for_each_entry(module, &ctx->uuid_list, list) {
if (uuid_le_cmp(*uuid_mod, module->uuid) == 0) { if (guid_equal(uuid_mod, &module->uuid)) {
mconfig->id.module_id = module->id; mconfig->id.module_id = module->id;
if (mconfig->module) if (mconfig->module)
mconfig->module->loadable = module->is_loadable; mconfig->module->loadable = module->is_loadable;
...@@ -1349,7 +1349,7 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig) ...@@ -1349,7 +1349,7 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
for (i = 0; i < skl->nr_modules; i++) { for (i = 0; i < skl->nr_modules; i++) {
skl_module = skl->modules[i]; skl_module = skl->modules[i];
uuid_tplg = &skl_module->uuid; uuid_tplg = &skl_module->uuid;
if (!uuid_le_cmp(*uuid_mod, *uuid_tplg)) { if (guid_equal(uuid_mod, uuid_tplg)) {
mconfig->module = skl_module; mconfig->module = skl_module;
ret = 0; ret = 0;
break; break;
...@@ -1361,13 +1361,13 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig) ...@@ -1361,13 +1361,13 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
list_for_each_entry(module, &ctx->uuid_list, list) { list_for_each_entry(module, &ctx->uuid_list, list) {
for (i = 0; i < MAX_IN_QUEUE; i++) { for (i = 0; i < MAX_IN_QUEUE; i++) {
pin_id = &mconfig->m_in_pin[i].id; pin_id = &mconfig->m_in_pin[i].id;
if (!uuid_le_cmp(pin_id->mod_uuid, module->uuid)) if (guid_equal(&pin_id->mod_uuid, &module->uuid))
pin_id->module_id = module->id; pin_id->module_id = module->id;
} }
for (i = 0; i < MAX_OUT_QUEUE; i++) { for (i = 0; i < MAX_OUT_QUEUE; i++) {
pin_id = &mconfig->m_out_pin[i].id; pin_id = &mconfig->m_out_pin[i].id;
if (!uuid_le_cmp(pin_id->mod_uuid, module->uuid)) if (guid_equal(&pin_id->mod_uuid, &module->uuid))
pin_id->module_id = module->id; pin_id->module_id = module->id;
} }
} }
......
...@@ -177,7 +177,7 @@ struct skl_dsp_loader_ops { ...@@ -177,7 +177,7 @@ struct skl_dsp_loader_ops {
#define MAX_INSTANCE_BUFF 2 #define MAX_INSTANCE_BUFF 2
struct uuid_module { struct uuid_module {
uuid_le uuid; guid_t uuid;
int id; int id;
int is_loadable; int is_loadable;
int max_instance; int max_instance;
...@@ -241,8 +241,8 @@ void bxt_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx); ...@@ -241,8 +241,8 @@ void bxt_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx);
int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
unsigned int offset, int index); unsigned int offset, int index);
int skl_get_pvt_id(struct skl_sst *ctx, uuid_le *uuid_mod, int instance_id); int skl_get_pvt_id(struct skl_sst *ctx, guid_t *uuid_mod, int instance_id);
int skl_put_pvt_id(struct skl_sst *ctx, uuid_le *uuid_mod, int *pvt_id); int skl_put_pvt_id(struct skl_sst *ctx, guid_t *uuid_mod, int *pvt_id);
int skl_get_pvt_instance_id_map(struct skl_sst *ctx, int skl_get_pvt_instance_id_map(struct skl_sst *ctx,
int module_id, int instance_id); int module_id, int instance_id);
void skl_freeup_uuid_list(struct skl_sst *ctx); void skl_freeup_uuid_list(struct skl_sst *ctx);
......
...@@ -21,17 +21,11 @@ ...@@ -21,17 +21,11 @@
#include "../common/sst-dsp-priv.h" #include "../common/sst-dsp-priv.h"
#include "skl-sst-ipc.h" #include "skl-sst-ipc.h"
#define UUID_STR_SIZE 37
#define DEFAULT_HASH_SHA256_LEN 32 #define DEFAULT_HASH_SHA256_LEN 32
/* FW Extended Manifest Header id = $AE1 */ /* FW Extended Manifest Header id = $AE1 */
#define SKL_EXT_MANIFEST_HEADER_MAGIC 0x31454124 #define SKL_EXT_MANIFEST_HEADER_MAGIC 0x31454124
struct UUID {
u8 id[16];
};
union seg_flags { union seg_flags {
u32 ul; u32 ul;
struct { struct {
...@@ -65,7 +59,7 @@ struct module_type { ...@@ -65,7 +59,7 @@ struct module_type {
struct adsp_module_entry { struct adsp_module_entry {
u32 struct_id; u32 struct_id;
u8 name[8]; u8 name[8];
struct UUID uuid; u8 uuid[16];
struct module_type type; struct module_type type;
u8 hash1[DEFAULT_HASH_SHA256_LEN]; u8 hash1[DEFAULT_HASH_SHA256_LEN];
u32 entry_point; u32 entry_point;
...@@ -184,13 +178,13 @@ static inline int skl_pvtid_128(struct uuid_module *module) ...@@ -184,13 +178,13 @@ static inline int skl_pvtid_128(struct uuid_module *module)
* This generates a 128 bit private unique id for a module TYPE so that * This generates a 128 bit private unique id for a module TYPE so that
* module instance is unique * module instance is unique
*/ */
int skl_get_pvt_id(struct skl_sst *ctx, uuid_le *uuid_mod, int instance_id) int skl_get_pvt_id(struct skl_sst *ctx, guid_t *uuid_mod, int instance_id)
{ {
struct uuid_module *module; struct uuid_module *module;
int pvt_id; int pvt_id;
list_for_each_entry(module, &ctx->uuid_list, list) { list_for_each_entry(module, &ctx->uuid_list, list) {
if (uuid_le_cmp(*uuid_mod, module->uuid) == 0) { if (guid_equal(uuid_mod, &module->uuid)) {
pvt_id = skl_pvtid_128(module); pvt_id = skl_pvtid_128(module);
if (pvt_id >= 0) { if (pvt_id >= 0) {
...@@ -214,13 +208,13 @@ EXPORT_SYMBOL_GPL(skl_get_pvt_id); ...@@ -214,13 +208,13 @@ EXPORT_SYMBOL_GPL(skl_get_pvt_id);
* *
* This frees a 128 bit private unique id previously generated * This frees a 128 bit private unique id previously generated
*/ */
int skl_put_pvt_id(struct skl_sst *ctx, uuid_le *uuid_mod, int *pvt_id) int skl_put_pvt_id(struct skl_sst *ctx, guid_t *uuid_mod, int *pvt_id)
{ {
int i; int i;
struct uuid_module *module; struct uuid_module *module;
list_for_each_entry(module, &ctx->uuid_list, list) { list_for_each_entry(module, &ctx->uuid_list, list) {
if (uuid_le_cmp(*uuid_mod, module->uuid) == 0) { if (guid_equal(uuid_mod, &module->uuid)) {
if (*pvt_id != 0) if (*pvt_id != 0)
i = (*pvt_id) / 64; i = (*pvt_id) / 64;
...@@ -247,7 +241,6 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, ...@@ -247,7 +241,6 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
struct adsp_fw_hdr *adsp_hdr; struct adsp_fw_hdr *adsp_hdr;
struct adsp_module_entry *mod_entry; struct adsp_module_entry *mod_entry;
int i, num_entry, size; int i, num_entry, size;
uuid_le *uuid_bin;
const char *buf; const char *buf;
struct skl_sst *skl = ctx->thread_context; struct skl_sst *skl = ctx->thread_context;
struct uuid_module *module; struct uuid_module *module;
...@@ -279,8 +272,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, ...@@ -279,8 +272,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
return -EINVAL; return -EINVAL;
} }
mod_entry = (struct adsp_module_entry *) mod_entry = (struct adsp_module_entry *)(buf + offset + adsp_hdr->len);
(buf + offset + adsp_hdr->len);
num_entry = adsp_hdr->num_modules; num_entry = adsp_hdr->num_modules;
...@@ -307,8 +299,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, ...@@ -307,8 +299,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
goto free_uuid_list; goto free_uuid_list;
} }
uuid_bin = (uuid_le *)mod_entry->uuid.id; guid_copy(&module->uuid, (guid_t *)&mod_entry->uuid);
memcpy(&module->uuid, uuid_bin, sizeof(module->uuid));
module->id = (i | (index << 12)); module->id = (i | (index << 12));
module->is_loadable = mod_entry->type.load_type; module->is_loadable = mod_entry->type.load_type;
......
...@@ -420,11 +420,9 @@ static int skl_load_module(struct sst_dsp *ctx, u16 mod_id, u8 *guid) ...@@ -420,11 +420,9 @@ static int skl_load_module(struct sst_dsp *ctx, u16 mod_id, u8 *guid)
struct skl_module_table *module_entry = NULL; struct skl_module_table *module_entry = NULL;
int ret = 0; int ret = 0;
char mod_name[64]; /* guid str = 32 chars + 4 hyphens */ char mod_name[64]; /* guid str = 32 chars + 4 hyphens */
uuid_le *uuid_mod;
uuid_mod = (uuid_le *)guid;
snprintf(mod_name, sizeof(mod_name), "%s%pUL%s", snprintf(mod_name, sizeof(mod_name), "%s%pUL%s",
"intel/dsp_fw_", uuid_mod, ".bin"); "intel/dsp_fw_", guid, ".bin");
module_entry = skl_module_get_from_id(ctx, mod_id); module_entry = skl_module_get_from_id(ctx, mod_id);
if (module_entry == NULL) { if (module_entry == NULL) {
......
...@@ -580,7 +580,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe) ...@@ -580,7 +580,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
int ret = 0; int ret = 0;
list_for_each_entry(w_module, &pipe->w_list, node) { list_for_each_entry(w_module, &pipe->w_list, node) {
uuid_le *uuid_mod; guid_t *uuid_mod;
w = w_module->w; w = w_module->w;
mconfig = w->priv; mconfig = w->priv;
...@@ -588,7 +588,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe) ...@@ -588,7 +588,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
if (mconfig->id.module_id < 0) { if (mconfig->id.module_id < 0) {
dev_err(skl->skl_sst->dev, dev_err(skl->skl_sst->dev,
"module %pUL id not populated\n", "module %pUL id not populated\n",
(uuid_le *)mconfig->guid); (guid_t *)mconfig->guid);
return -EIO; return -EIO;
} }
...@@ -622,7 +622,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe) ...@@ -622,7 +622,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
* FE/BE params * FE/BE params
*/ */
skl_tplg_update_module_params(w, ctx); skl_tplg_update_module_params(w, ctx);
uuid_mod = (uuid_le *)mconfig->guid; uuid_mod = (guid_t *)mconfig->guid;
mconfig->id.pvt_id = skl_get_pvt_id(ctx, uuid_mod, mconfig->id.pvt_id = skl_get_pvt_id(ctx, uuid_mod,
mconfig->id.instance_id); mconfig->id.instance_id);
if (mconfig->id.pvt_id < 0) if (mconfig->id.pvt_id < 0)
...@@ -661,9 +661,9 @@ static int skl_tplg_unload_pipe_modules(struct skl_sst *ctx, ...@@ -661,9 +661,9 @@ static int skl_tplg_unload_pipe_modules(struct skl_sst *ctx,
struct skl_module_cfg *mconfig = NULL; struct skl_module_cfg *mconfig = NULL;
list_for_each_entry(w_module, &pipe->w_list, node) { list_for_each_entry(w_module, &pipe->w_list, node) {
uuid_le *uuid_mod; guid_t *uuid_mod;
mconfig = w_module->w->priv; mconfig = w_module->w->priv;
uuid_mod = (uuid_le *)mconfig->guid; uuid_mod = (guid_t *)mconfig->guid;
if (mconfig->module->loadable && ctx->dsp->fw_ops.unload_mod && if (mconfig->module->loadable && ctx->dsp->fw_ops.unload_mod &&
mconfig->m_state > SKL_MODULE_UNINIT) { mconfig->m_state > SKL_MODULE_UNINIT) {
...@@ -918,12 +918,12 @@ static int skl_tplg_set_module_bind_params(struct snd_soc_dapm_widget *w, ...@@ -918,12 +918,12 @@ static int skl_tplg_set_module_bind_params(struct snd_soc_dapm_widget *w,
return 0; return 0;
} }
static int skl_get_module_id(struct skl_sst *ctx, uuid_le *uuid) static int skl_get_module_id(struct skl_sst *ctx, guid_t *uuid)
{ {
struct uuid_module *module; struct uuid_module *module;
list_for_each_entry(module, &ctx->uuid_list, list) { list_for_each_entry(module, &ctx->uuid_list, list) {
if (uuid_le_cmp(*uuid, module->uuid) == 0) if (guid_equal(uuid, &module->uuid))
return module->id; return module->id;
} }
...@@ -2121,11 +2121,11 @@ static int skl_tplg_add_pipe(struct device *dev, ...@@ -2121,11 +2121,11 @@ static int skl_tplg_add_pipe(struct device *dev,
return 0; return 0;
} }
static int skl_tplg_get_uuid(struct device *dev, u8 *guid, static int skl_tplg_get_uuid(struct device *dev, guid_t *guid,
struct snd_soc_tplg_vendor_uuid_elem *uuid_tkn) struct snd_soc_tplg_vendor_uuid_elem *uuid_tkn)
{ {
if (uuid_tkn->token == SKL_TKN_UUID) { if (uuid_tkn->token == SKL_TKN_UUID) {
memcpy(guid, &uuid_tkn->uuid, 16); guid_copy(guid, (guid_t *)&uuid_tkn->uuid);
return 0; return 0;
} }
...@@ -2151,7 +2151,7 @@ static int skl_tplg_fill_pin(struct device *dev, ...@@ -2151,7 +2151,7 @@ static int skl_tplg_fill_pin(struct device *dev,
break; break;
case SKL_TKN_UUID: case SKL_TKN_UUID:
ret = skl_tplg_get_uuid(dev, m_pin[pin_index].id.mod_uuid.b, ret = skl_tplg_get_uuid(dev, &m_pin[pin_index].id.mod_uuid,
(struct snd_soc_tplg_vendor_uuid_elem *)tkn_elem); (struct snd_soc_tplg_vendor_uuid_elem *)tkn_elem);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -2667,7 +2667,7 @@ static int skl_tplg_get_tokens(struct device *dev, ...@@ -2667,7 +2667,7 @@ static int skl_tplg_get_tokens(struct device *dev,
case SND_SOC_TPLG_TUPLE_TYPE_UUID: case SND_SOC_TPLG_TUPLE_TYPE_UUID:
if (is_module_guid) { if (is_module_guid) {
ret = skl_tplg_get_uuid(dev, mconfig->guid, ret = skl_tplg_get_uuid(dev, (guid_t *)mconfig->guid,
array->uuid); array->uuid);
is_module_guid = false; is_module_guid = false;
} else { } else {
...@@ -3486,7 +3486,7 @@ static int skl_tplg_get_manifest_uuid(struct device *dev, ...@@ -3486,7 +3486,7 @@ static int skl_tplg_get_manifest_uuid(struct device *dev,
if (uuid_tkn->token == SKL_TKN_UUID) { if (uuid_tkn->token == SKL_TKN_UUID) {
mod = skl->modules[ref_count]; mod = skl->modules[ref_count];
memcpy(&mod->uuid, &uuid_tkn->uuid, sizeof(uuid_tkn->uuid)); guid_copy(&mod->uuid, (guid_t *)&uuid_tkn->uuid);
ref_count++; ref_count++;
} else { } else {
dev_err(dev, "Not an UUID token tkn %d\n", uuid_tkn->token); dev_err(dev, "Not an UUID token tkn %d\n", uuid_tkn->token);
......
...@@ -224,7 +224,7 @@ struct skl_mod_inst_map { ...@@ -224,7 +224,7 @@ struct skl_mod_inst_map {
struct skl_uuid_inst_map { struct skl_uuid_inst_map {
u16 inst_id; u16 inst_id;
u16 reserved; u16 reserved;
uuid_le mod_uuid; guid_t mod_uuid;
} __packed; } __packed;
struct skl_kpb_params { struct skl_kpb_params {
...@@ -236,7 +236,7 @@ struct skl_kpb_params { ...@@ -236,7 +236,7 @@ struct skl_kpb_params {
}; };
struct skl_module_inst_id { struct skl_module_inst_id {
uuid_le mod_uuid; guid_t mod_uuid;
int module_id; int module_id;
u32 instance_id; u32 instance_id;
int pvt_id; int pvt_id;
...@@ -369,7 +369,7 @@ struct skl_module_res { ...@@ -369,7 +369,7 @@ struct skl_module_res {
}; };
struct skl_module { struct skl_module {
uuid_le uuid; guid_t uuid;
u8 loadable; u8 loadable;
u8 input_pin_type; u8 input_pin_type;
u8 output_pin_type; u8 output_pin_type;
......
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