[Meego-kernel] [PATCH] sst: avoid unnecessary firmware reloading for MRST
Feng Tang
feng.tang at intel.com
Wed Jul 6 00:17:19 PDT 2011
Hi Kristen,
Pls review and take this patch which is a fix for bug BOO #10330.
Thanks,
Feng
----------------------
From 459a23b9434e044355ee9f8ba1fc027d5384c242 Mon Sep 17 00:00:00 2001
From: Feng Tang <feng.tang at intel.com>
Date: Wed, 6 Jul 2011 14:59:22 +0800
Subject: [PATCH] sst: avoid unnecessary firmware reloading for MRST
SST HW on MRST doesn't need to reload the firmware during suspend/resume
cycle, so remove the extra workload. This also fix a bug that the firmware
sample rate can't be modified when there is no active playback/capture
stream.
Signed-off-by: Feng Tang <feng.tang at intel.com>
---
drivers/staging/intel_sst/intel_sst.c | 5 ++++-
drivers/staging/intel_sst/intel_sst_common.h | 2 ++
.../staging/intel_sst/intel_sst_drv_interface.c | 10 ++++++++++
3 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/drivers/staging/intel_sst/intel_sst.c b/drivers/staging/intel_sst/intel_sst.c
index fd158ea..9409341 100644
--- a/drivers/staging/intel_sst/intel_sst.c
+++ b/drivers/staging/intel_sst/intel_sst.c
@@ -542,7 +542,10 @@ static int intel_sst_runtime_suspend(struct device *dev)
/* Move the SST state to Suspended */
mutex_lock(&sst_drv_ctx->sst_lock);
sst_drv_ctx->sst_state = SST_SUSPENDED;
- sst_shim_write(sst_drv_ctx->shim, SST_CSR, csr.full);
+
+ /* Only needed by Medfield */
+ if (sst_drv_ctx->pci_id != SST_MRST_PCI_ID)
+ sst_shim_write(sst_drv_ctx->shim, SST_CSR, csr.full);
mutex_unlock(&sst_drv_ctx->sst_lock);
return 0;
}
diff --git a/drivers/staging/intel_sst/intel_sst_common.h b/drivers/staging/intel_sst/intel_sst_common.h
index f8e9da6..870981b 100644
--- a/drivers/staging/intel_sst/intel_sst_common.h
+++ b/drivers/staging/intel_sst/intel_sst_common.h
@@ -420,6 +420,8 @@ struct intel_sst_drv {
unsigned int max_streams;
unsigned int *fw_cntx;
unsigned int fw_cntx_size;
+
+ unsigned int fw_downloaded;
};
extern struct intel_sst_drv *sst_drv_ctx;
diff --git a/drivers/staging/intel_sst/intel_sst_drv_interface.c b/drivers/staging/intel_sst/intel_sst_drv_interface.c
index db1fed7..d2aaa22 100644
--- a/drivers/staging/intel_sst/intel_sst_drv_interface.c
+++ b/drivers/staging/intel_sst/intel_sst_drv_interface.c
@@ -51,6 +51,13 @@ int sst_download_fw(void)
if (sst_drv_ctx->sst_state != SST_UN_INIT)
return -EPERM;
+ /* Reload firmware is not needed for MRST */
+ if ( (sst_drv_ctx->pci_id == SST_MRST_PCI_ID) && sst_drv_ctx->fw_downloaded) {
+ pr_debug("FW already downloaded, skip for MRST platform\n");
+ sst_drv_ctx->sst_state = SST_FW_RUNNING;
+ return 0;
+ }
+
snprintf(name, sizeof(name), "%s%04x%s", "fw_sst_",
sst_drv_ctx->pci_id, ".bin");
@@ -69,6 +76,9 @@ int sst_download_fw(void)
retval = sst_wait_timeout(sst_drv_ctx, &sst_drv_ctx->alloc_block[0]);
if (retval)
pr_err("sst: fw download failed %d\n" , retval);
+ else
+ sst_drv_ctx->fw_downloaded = 1;
+
end_restore:
release_firmware(fw_sst);
sst_drv_ctx->alloc_block[0].sst_id = BLOCK_UNINIT;
--
1.7.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-sst-avoid-unnecessary-firmware-reloading-for-MRST.patch
Type: text/x-patch
Size: 2900 bytes
Desc: not available
URL: <http://lists.meego.com/pipermail/meego-kernel/attachments/20110706/30a7067c/attachment.bin>
More information about the MeeGo-kernel
mailing list