[alsa-devel] [PATCH v6 0/3] ASoC: intel: atom: Add FW version information
This patch series is adding FW version information of SST. Version is both log as dev_info and sysfs entry.
Update since V1: - sysfs entry is set to "FW not yet loaded" in case we do not have loaded the FW once
Update since V2: - Add Vinod ack. https://www.spinics.net/lists/alsa-devel/msg56521.html
Update since V3: - Add sysfs entry description.
Update since V4: - Add ack from vinod on documentation - Resend on top of v4.9-rc1.
Update since V5: - Resend on top of topic/intel - Remove first patch as the first version was already applied inside topic/intel without getting "Applied" notifiaction. https://www.spinics.net/lists/alsa-devel/msg56122.html
Sebastien Guiriec (3): ASoC: Intel: atom: save FW version ASoC: Intel: atom: Add sysfs entry in order to store FW version Documentation: ABI: Add ASoC Intel SST Atom sysfs description
Documentation/ABI/testing/sysfs-platform-sst-atom | 17 ++++++++++ sound/soc/intel/atom/sst/sst.c | 39 +++++++++++++++++++++++ sound/soc/intel/atom/sst/sst.h | 1 + sound/soc/intel/atom/sst/sst_ipc.c | 6 ++++ 4 files changed, 63 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-platform-sst-atom
After the boot of the SST FW the firmware version is send back to the driver. This patch is saving the FW version inside the driver.
Signed-off-by: Sebastien Guiriec sebastien.guiriec@intel.com Acked-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/atom/sst/sst.h | 1 + sound/soc/intel/atom/sst/sst_ipc.c | 6 ++++++ 2 files changed, 7 insertions(+)
diff --git a/sound/soc/intel/atom/sst/sst.h b/sound/soc/intel/atom/sst/sst.h index 3f49386..5c9a51cc 100644 --- a/sound/soc/intel/atom/sst/sst.h +++ b/sound/soc/intel/atom/sst/sst.h @@ -436,6 +436,7 @@ struct intel_sst_drv { */ char firmware_name[FW_NAME_SIZE];
+ struct snd_sst_fw_version fw_version; struct sst_fw_save *fw_save; };
diff --git a/sound/soc/intel/atom/sst/sst_ipc.c b/sound/soc/intel/atom/sst/sst_ipc.c index 7934a00..374bb61 100644 --- a/sound/soc/intel/atom/sst/sst_ipc.c +++ b/sound/soc/intel/atom/sst/sst_ipc.c @@ -242,6 +242,12 @@ static void process_fw_init(struct intel_sst_drv *sst_drv_ctx, dev_dbg(sst_drv_ctx->dev, "Build date %s Time %s\n", init->build_info.date, init->build_info.time);
+ /* Save FW version */ + sst_drv_ctx->fw_version.type = init->fw_version.type; + sst_drv_ctx->fw_version.major = init->fw_version.major; + sst_drv_ctx->fw_version.minor = init->fw_version.minor; + sst_drv_ctx->fw_version.build = init->fw_version.build; + ret: sst_wake_up_block(sst_drv_ctx, retval, FW_DWNL_ID, 0 , NULL, 0); }
This patch is adding a sysfs entry in order to be able to get access to SST FW version.
Signed-off-by: Sebastien Guiriec sebastien.guiriec@intel.com Acked-by: Vinod Koul vinod.koul@intel.com --- sound/soc/intel/atom/sst/sst.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)
diff --git a/sound/soc/intel/atom/sst/sst.c b/sound/soc/intel/atom/sst/sst.c index 9b6e273..f9ba713 100644 --- a/sound/soc/intel/atom/sst/sst.c +++ b/sound/soc/intel/atom/sst/sst.c @@ -27,6 +27,7 @@ #include <linux/pm_qos.h> #include <linux/async.h> #include <linux/acpi.h> +#include <linux/sysfs.h> #include <sound/core.h> #include <sound/soc.h> #include <asm/platform_sst_audio.h> @@ -242,6 +243,32 @@ int sst_alloc_drv_context(struct intel_sst_drv **ctx, } EXPORT_SYMBOL_GPL(sst_alloc_drv_context);
+static ssize_t firmware_version_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct intel_sst_drv *ctx = dev_get_drvdata(dev); + + if (ctx->fw_version.type == 0 && ctx->fw_version.major == 0 && + ctx->fw_version.minor == 0 && ctx->fw_version.build == 0) + return sprintf(buf, "FW not yet loaded\n"); + else + return sprintf(buf, "v%02x.%02x.%02x.%02x\n", + ctx->fw_version.type, ctx->fw_version.major, + ctx->fw_version.minor, ctx->fw_version.build); + +} + +DEVICE_ATTR_RO(firmware_version); + +static const struct attribute *sst_fw_version_attrs[] = { + &dev_attr_firmware_version.attr, + NULL, +}; + +static const struct attribute_group sst_fw_version_attr_group = { + .attrs = (struct attribute **)sst_fw_version_attrs, +}; + int sst_context_init(struct intel_sst_drv *ctx) { int ret = 0, i; @@ -315,8 +342,19 @@ int sst_context_init(struct intel_sst_drv *ctx) dev_err(ctx->dev, "Firmware download failed:%d\n", ret); goto do_free_mem; } + + ret = sysfs_create_group(&ctx->dev->kobj, + &sst_fw_version_attr_group); + if (ret) { + dev_err(ctx->dev, + "Unable to create sysfs\n"); + goto err_sysfs; + } + sst_register(ctx->dev); return 0; +err_sysfs: + sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group);
do_free_mem: destroy_workqueue(ctx->post_msg_wq); @@ -330,6 +368,7 @@ void sst_context_cleanup(struct intel_sst_drv *ctx) pm_runtime_disable(ctx->dev); sst_unregister(ctx->dev); sst_set_fw_state_locked(ctx, SST_SHUTDOWN); + sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group); flush_scheduled_work(); destroy_workqueue(ctx->post_msg_wq); pm_qos_remove_request(ctx->qos);
For ASoC Intel SST Atom based devices a sysfs entry is created in order to track FW version. The FW version is useful in order to check the different Version of LPE DSP FW across Intel SoCs.
Signed-off-by: Sebastien Guiriec sebastien.guiriec@intel.com Acked-by: Vinod Koul vinod.koul@intel.com --- Documentation/ABI/testing/sysfs-platform-sst-atom | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-platform-sst-atom
diff --git a/Documentation/ABI/testing/sysfs-platform-sst-atom b/Documentation/ABI/testing/sysfs-platform-sst-atom new file mode 100644 index 0000000..0d07c03 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-platform-sst-atom @@ -0,0 +1,17 @@ +What: /sys/devices/platform/8086%x:00/firmware_version +Date: November 2016 +KernelVersion: 4.10 +Contact: "Sebastien Guiriec" sebastien.guiriec@intel.com +Description: + LPE Firmware version for SST driver on all atom + plaforms (BYT/CHT/Merrifield/BSW). + If the FW has never been loaded it will display: + "FW not yet loaded" + If FW has been loaded it will display: + "v01.aa.bb.cc" + aa: Major version is reflecting SoC version: + 0d: BYT FW + 0b: BSW FW + 07: Merrifield FW + bb: Minor version + cc: Build version
participants (1)
-
Sebastien Guiriec