summary refs log tree commit diff
diff options
context:
space:
mode:
authorpaulhsia <paulhsia@chromium.org>2019-12-11 10:23:06 +0800
committerCommit Bot <commit-bot@chromium.org>2019-12-11 16:09:36 +0000
commit8d3f9ba350137a3f423a4241067cf96762e518bf (patch)
tree99ad09ae74c7e95d06c23d5c62af6515bef48e4c
parent65588b25351e21a261127f2987ca76a914e8457c (diff)
downloadcrosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar.gz
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar.bz2
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar.lz
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar.xz
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.tar.zst
crosvm-8d3f9ba350137a3f423a4241067cf96762e518bf.zip
ac97: bus_master: Check pi_info before warm reset
According to ac97 spec, warm reset is specified to no-op when the device
is running. We should ignore it while the device is recording audio as
well.

BUG=chromium:1026538
TEST=Build

Change-Id: I64be922149c90be9a7a8669ef6d56591e6de632b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1960058
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Chih-Yang Hsia <paulhsia@chromium.org>
-rw-r--r--devices/src/pci/ac97_bus_master.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/devices/src/pci/ac97_bus_master.rs b/devices/src/pci/ac97_bus_master.rs
index 23aec91..d3d2f85 100644
--- a/devices/src/pci/ac97_bus_master.rs
+++ b/devices/src/pci/ac97_bus_master.rs
@@ -447,7 +447,9 @@ impl Ac97BusMaster {
         if new_glob_cnt & GLOB_CNT_WARM_RESET != 0 {
             // Check if running and if so, ignore. Warm reset is specified to no-op when the device
             // is playing or recording audio.
-            if !self.po_info.thread_run.load(Ordering::Relaxed) {
+            if !self.po_info.thread_run.load(Ordering::Relaxed)
+                && !self.pi_info.thread_run.load(Ordering::Relaxed)
+            {
                 self.stop_all_audio();
                 let mut regs = self.regs.lock();
                 regs.glob_cnt = new_glob_cnt & !GLOB_CNT_WARM_RESET; // Auto-cleared reset bit.