From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cezary Rojewski Date: Fri, 19 Oct 2018 10:59:29 +0200 Subject: [PATCH] Revert "ASoC: Intel: Skylake: validate the downloaded firmware" This reverts commit 5421814ae83588a501df54d5d4bde39b059756fa. Change-Id: I58ead4ce312cf073c54178f1f91369f711f21cc3 Signed-off-by: Cezary Rojewski --- sound/soc/intel/skylake/bxt-sst.c | 17 ++-------------- sound/soc/intel/skylake/cnl-sst-dsp.h | 2 +- sound/soc/intel/skylake/cnl-sst.c | 11 ++-------- sound/soc/intel/skylake/skl-messages.c | 23 +++++++++------------ sound/soc/intel/skylake/skl-sst-dsp.h | 27 ++----------------------- sound/soc/intel/skylake/skl-sst-ipc.h | 7 +++++++ sound/soc/intel/skylake/skl-sst-utils.c | 25 ----------------------- sound/soc/intel/skylake/skl-sst.c | 18 ++--------------- sound/soc/intel/skylake/skl.h | 14 +++++++++++++ 9 files changed, 40 insertions(+), 104 deletions(-) diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c index f66aae4c229f..cd7fbabef8ee 100644 --- a/sound/soc/intel/skylake/bxt-sst.c +++ b/sound/soc/intel/skylake/bxt-sst.c @@ -311,16 +311,6 @@ static int bxt_load_base_firmware(struct sst_dsp *ctx) skl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK); ret = -EIO; } else { - ret = skl_get_firmware_configuration(ctx); - if (ret < 0) { - dev_err(ctx->dev, "FW version query failed\n"); - goto sst_load_base_firmware_failed; - } - - ret = skl_validate_fw_version(skl); - if (ret < 0) - goto sst_load_base_firmware_failed; - ret = 0; skl->fw_loaded = true; } @@ -642,24 +632,21 @@ static struct sst_dsp_device skl_dev = { }; int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr) { struct skl_sst *skl; struct sst_dsp *sst; - struct skl_dsp_loader_ops loader_ops; u32 dsp_wp[] = {BXT_ADSP_WP_DSP0, BXT_ADSP_WP_DSP1}; int ret; - loader_ops = dsp_ops->loader_ops(); - ret = skl_sst_ctx_init(dev, irq, fw_name, loader_ops, dsp, &skl_dev); + ret = skl_sst_ctx_init(dev, irq, fw_name, dsp_ops, dsp, &skl_dev); if (ret < 0) { dev_err(dev, "%s: no device\n", __func__); return ret; } skl = *dsp; - skl->dsp_ops = dsp_ops; sst = skl->dsp; sst->fw_ops = bxt_fw_ops; sst->addr.lpe = mmio_base; diff --git a/sound/soc/intel/skylake/cnl-sst-dsp.h b/sound/soc/intel/skylake/cnl-sst-dsp.h index 7bc24ee5eecc..5f0653b36308 100644 --- a/sound/soc/intel/skylake/cnl-sst-dsp.h +++ b/sound/soc/intel/skylake/cnl-sst-dsp.h @@ -117,7 +117,7 @@ bool cnl_ipc_int_status(struct sst_dsp *ctx); void cnl_ipc_free(struct sst_generic_ipc *ipc); int cnl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr); int cnl_sst_init_fw(struct device *dev, struct skl_sst *ctx); void cnl_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx); diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c index b6672f9c6bba..c5a89c3e4eb6 100644 --- a/sound/soc/intel/skylake/cnl-sst.c +++ b/sound/soc/intel/skylake/cnl-sst.c @@ -273,10 +273,6 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx) goto load_base_firmware_failed; } - ret = skl_validate_fw_version(cnl); - if (ret < 0) - goto load_base_firmware_failed; - fw_property = cnl->fw_property; if (fw_property.memory_reclaimed <= 0) { dev_err(ctx->dev, "Memory reclaim not enabled:%d\n", @@ -730,25 +726,22 @@ static void skl_unregister_sdw_masters(struct skl_sst *ctx) } int cnl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr) { struct skl_sst *cnl; struct sst_dsp *sst; - struct skl_dsp_loader_ops loader_ops; u32 dsp_wp[] = {CNL_ADSP_WP_DSP0, CNL_ADSP_WP_DSP1, CNL_ADSP_WP_DSP2, CNL_ADSP_WP_DSP3}; int ret; - loader_ops = dsp_ops->loader_ops(); - ret = skl_sst_ctx_init(dev, irq, fw_name, loader_ops, dsp, &cnl_dev); + ret = skl_sst_ctx_init(dev, irq, fw_name, dsp_ops, dsp, &cnl_dev); if (ret < 0) { dev_err(dev, "%s: no device\n", __func__); return ret; } cnl = *dsp; - cnl->dsp_ops = dsp_ops; sst = cnl->dsp; sst->fw_ops = cnl_fw_ops; sst->addr.lpe = mmio_base; diff --git a/sound/soc/intel/skylake/skl-messages.c b/sound/soc/intel/skylake/skl-messages.c index 74833f0cddfb..a1d9c842646a 100644 --- a/sound/soc/intel/skylake/skl-messages.c +++ b/sound/soc/intel/skylake/skl-messages.c @@ -277,8 +277,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .loader_ops = skl_get_loader_ops, .init = skl_sst_dsp_init, .init_fw = skl_sst_init_fw, - .cleanup = skl_sst_dsp_cleanup, - .min_fw_ver = {9, 21, 0, 3173} + .cleanup = skl_sst_dsp_cleanup }, { .id = 0x9d71, @@ -286,8 +285,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .loader_ops = skl_get_loader_ops, .init = skl_sst_dsp_init, .init_fw = skl_sst_init_fw, - .cleanup = skl_sst_dsp_cleanup, - .min_fw_ver = {9, 21, 0, 3173} + .cleanup = skl_sst_dsp_cleanup }, { .id = 0x5a98, @@ -296,8 +294,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .init = bxt_sst_dsp_init, .init_fw = bxt_sst_init_fw, .cleanup = bxt_sst_dsp_cleanup, - .do_recovery = skl_do_recovery, - .min_fw_ver = {9, 22, 1, 3132} + .do_recovery = skl_do_recovery }, { .id = 0x3198, @@ -306,8 +303,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .init = bxt_sst_dsp_init, .init_fw = bxt_sst_init_fw, .cleanup = bxt_sst_dsp_cleanup, - .do_recovery = skl_do_recovery, - .min_fw_ver = {9, 22, 1, 3366} + .do_recovery = skl_do_recovery }, { .id = 0x9dc8, @@ -316,8 +312,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .init = cnl_sst_dsp_init, .init_fw = cnl_sst_init_fw, .cleanup = cnl_sst_dsp_cleanup, - .do_recovery = skl_do_recovery, - .min_fw_ver = {10, 23, 0, 1233} + .do_recovery = skl_do_recovery }, { .id = 0x34c8, @@ -326,8 +321,7 @@ static const struct skl_dsp_ops dsp_ops[] = { .init = cnl_sst_dsp_init, .init_fw = cnl_sst_init_fw, .cleanup = cnl_sst_dsp_cleanup, - .do_recovery = skl_do_recovery, - .min_fw_ver = {10, 23, 0, 1233} + .do_recovery = skl_do_recovery }, }; @@ -1265,6 +1259,7 @@ int skl_init_dsp(struct skl *skl) { void __iomem *mmio_base; struct hdac_bus *bus = skl_to_bus(skl); + struct skl_dsp_loader_ops loader_ops; int irq = bus->irq; const struct skl_dsp_ops *ops; struct skl_dsp_cores *cores; @@ -1287,12 +1282,14 @@ int skl_init_dsp(struct skl *skl) goto unmap_mmio; } - ret = ops->init(bus->dev, mmio_base, irq, skl->fw_name, ops, + loader_ops = ops->loader_ops(); + ret = ops->init(bus->dev, mmio_base, irq, skl->fw_name, loader_ops, &skl->skl_sst, &cnl_sdw_bra_ops); if (ret < 0) goto unmap_mmio; + skl->skl_sst->dsp_ops = ops; cores = &skl->skl_sst->cores; cores->count = ops->num_cores; diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h index fa3a47183916..dc793d503115 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h @@ -178,13 +178,6 @@ enum skl_hw_info_type { SKL_EBB_SIZE_BYTES, }; -struct skl_fw_version { - u16 major; - u16 minor; - u16 hotfix; - u16 build; -}; - /* DSP Core state */ enum skl_dsp_states { SKL_DSP_RUNNING = 1, @@ -200,19 +193,6 @@ enum skl_dsp_d0i3_states { SKL_DSP_D0I3_STREAMING = 1, }; -struct skl_dsp_ops { - int id; - unsigned int num_cores; - struct skl_dsp_loader_ops (*loader_ops)(void); - struct skl_fw_version min_fw_ver; - int (*init)(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, - struct skl_sst **skl_sst, void *ptr); - int (*init_fw)(struct device *dev, struct skl_sst *ctx); - void (*cleanup)(struct device *dev, struct skl_sst *ctx); - void (*do_recovery)(struct skl *skl); -}; - struct skl_dsp_fw_ops { int (*load_fw)(struct sst_dsp *ctx); /* FW module parser/loader */ @@ -314,10 +294,10 @@ int skl_dsp_put_core(struct sst_dsp *ctx, unsigned int core_id); int skl_dsp_boot(struct sst_dsp *ctx); int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr); int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr); int skl_sst_init_fw(struct device *dev, struct skl_sst *ctx); int bxt_sst_init_fw(struct device *dev, struct skl_sst *ctx); @@ -351,8 +331,6 @@ void skl_release_library(struct skl_lib_info *linfo, int lib_count); int skl_get_firmware_configuration(struct sst_dsp *ctx); int skl_get_hardware_configuration(struct sst_dsp *ctx); -int skl_validate_fw_version(struct skl_sst *skl); - int bxt_set_dsp_D0i0(struct sst_dsp *ctx); int bxt_schedule_dsp_D0i3(struct sst_dsp *ctx); @@ -366,5 +344,4 @@ void skl_module_sysfs_exit(struct skl_sst *ctx); int skl_dsp_cb_event(struct skl_sst *ctx, unsigned int event, struct skl_notify_data *notify_data); -const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id); #endif /*__SKL_SST_DSP_H__*/ diff --git a/sound/soc/intel/skylake/skl-sst-ipc.h b/sound/soc/intel/skylake/skl-sst-ipc.h index 4eef4a386996..ee32aaa68490 100644 --- a/sound/soc/intel/skylake/skl-sst-ipc.h +++ b/sound/soc/intel/skylake/skl-sst-ipc.h @@ -152,6 +152,13 @@ struct bra_conf { struct skl_pipe *cp_pipe; }; +struct skl_fw_version { + u16 major; + u16 minor; + u16 hotfix; + u16 build; +}; + struct skl_dma_buff_config { u32 min_size_bytes; u32 max_size_bytes; diff --git a/sound/soc/intel/skylake/skl-sst-utils.c b/sound/soc/intel/skylake/skl-sst-utils.c index a495cea49b05..7c867426b39b 100644 --- a/sound/soc/intel/skylake/skl-sst-utils.c +++ b/sound/soc/intel/skylake/skl-sst-utils.c @@ -1246,28 +1246,3 @@ int skl_module_sysfs_init(struct skl_sst *ctx, struct kobject *kobj) return ret; } EXPORT_SYMBOL_GPL(skl_module_sysfs_init); - -int skl_validate_fw_version(struct skl_sst *skl) -{ - struct skl_fw_version *fw_version = &skl->fw_property.version; - const struct skl_dsp_ops *ops = skl->dsp_ops; - - dev_info(skl->dev, "ADSP FW Version: %d.%d.%d.%d\n", - fw_version->major, fw_version->minor, - fw_version->hotfix, fw_version->build); - - - if (ops->min_fw_ver.major == fw_version->major && - ops->min_fw_ver.minor == fw_version->minor && - ops->min_fw_ver.hotfix == fw_version->hotfix && - ops->min_fw_ver.build <= fw_version->build) - return 0; - - dev_err(skl->dev, "Incorrect ADSP FW version = %d.%d.%d.%d, minimum supported FW version = %d.%d.%d.%d\n", - fw_version->major, fw_version->minor, - fw_version->hotfix, fw_version->build, - ops->min_fw_ver.major, ops->min_fw_ver.minor, - ops->min_fw_ver.hotfix, ops->min_fw_ver.build); - - return -EINVAL; -} diff --git a/sound/soc/intel/skylake/skl-sst.c b/sound/soc/intel/skylake/skl-sst.c index 77cf3f2ba95f..277e972eb858 100644 --- a/sound/soc/intel/skylake/skl-sst.c +++ b/sound/soc/intel/skylake/skl-sst.c @@ -152,17 +152,6 @@ static int skl_load_base_firmware(struct sst_dsp *ctx) goto transfer_firmware_failed; } - ret = skl_get_firmware_configuration(ctx); - if (ret < 0) { - dev_err(ctx->dev, "FW version query failed\n"); - goto skl_load_base_firmware_failed; - } - - ret = skl_validate_fw_version(skl); - if (ret < 0) { - ret = -EIO; - goto skl_load_base_firmware_failed; - } dev_dbg(ctx->dev, "Download firmware successful%d\n", ret); skl->fw_loaded = true; } @@ -539,23 +528,20 @@ static struct sst_dsp_device skl_dev = { }; int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, - const char *fw_name, const struct skl_dsp_ops *dsp_ops, + const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, void *ptr) { struct skl_sst *skl; struct sst_dsp *sst; - struct skl_dsp_loader_ops loader_ops; int ret; - loader_ops = dsp_ops->loader_ops(); - ret = skl_sst_ctx_init(dev, irq, fw_name, loader_ops, dsp, &skl_dev); + ret = skl_sst_ctx_init(dev, irq, fw_name, dsp_ops, dsp, &skl_dev); if (ret < 0) { dev_err(dev, "%s: no device\n", __func__); return ret; } skl = *dsp; - skl->dsp_ops = dsp_ops; sst = skl->dsp; sst->addr.lpe = mmio_base; sst->addr.shim = mmio_base; diff --git a/sound/soc/intel/skylake/skl.h b/sound/soc/intel/skylake/skl.h index d00a8b19d054..01053c4cdf6e 100644 --- a/sound/soc/intel/skylake/skl.h +++ b/sound/soc/intel/skylake/skl.h @@ -188,6 +188,19 @@ struct skl_machine_pdata { bool use_tplg_pcm; /* use dais and dai links from topology */ }; +struct skl_dsp_ops { + int id; + unsigned int num_cores; + struct skl_dsp_loader_ops (*loader_ops)(void); + int (*init)(struct device *dev, void __iomem *mmio_base, int irq, + const char *fw_name, + struct skl_dsp_loader_ops loader_ops, + struct skl_sst **skl_sst, void *ptr); + int (*init_fw)(struct device *dev, struct skl_sst *ctx); + void (*cleanup)(struct device *dev, struct skl_sst *ctx); + void (*do_recovery)(struct skl *skl); +}; + int skl_platform_unregister(struct device *dev); int skl_platform_register(struct device *dev); @@ -210,6 +223,7 @@ int skl_suspend_late_dsp(struct skl *skl); int skl_suspend_dsp(struct skl *skl); int skl_resume_dsp(struct skl *skl); void skl_cleanup_resources(struct skl *skl); +const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id); void skl_update_d0i3c(struct device *dev, bool enable); int skl_nhlt_create_sysfs(struct skl *skl); void skl_nhlt_remove_sysfs(struct skl *skl); -- https://clearlinux.org