From 8528ea0845171a4b26de44757d5b30c9727e8d5b Mon Sep 17 00:00:00 2001 From: Evan Benn Date: Thu, 10 Nov 2022 16:35:07 +1100 Subject: flashrom_tester: partial_lock: Use WriteProtectState cache partial_lock test was bypassing the WriteProtectState cache of the software write protect by directly calling env.cmd.wp_range. It was also unnesesarily disabling software WP. Fix those issues and more clearly document what the test is doing and expecting. BUG=b:244663741 BRANCH=None TEST=flashrom_tester --libflashrom host Change-Id: Ic3f89ff5d22e74e4e6c94e755b936e58cb27182d Signed-off-by: Evan Benn Reviewed-on: https://review.coreboot.org/c/flashrom/+/69418 Reviewed-by: Peter Marheine Reviewed-by: Edward O'Callaghan Tested-by: build bot (Jenkins) --- util/flashrom_tester/src/tester.rs | 18 ++++++++++++++++++ util/flashrom_tester/src/tests.rs | 10 ++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) (limited to 'util/flashrom_tester/src') diff --git a/util/flashrom_tester/src/tester.rs b/util/flashrom_tester/src/tester.rs index d19e45cf..1fa44a84 100644 --- a/util/flashrom_tester/src/tester.rs +++ b/util/flashrom_tester/src/tester.rs @@ -246,6 +246,24 @@ impl<'a> WriteProtectState<'a> { } } + // Set software write protect with a custom range + pub fn set_range(&mut self, range: (i64, i64), enable: bool) -> Result<&mut Self, String> { + info!("set_range request={}, current={}", enable, self.current.sw); + self.cmd + .wp_range(range, enable) + .map_err(|e| e.to_string())?; + let actual_state = Self::get_sw(self.cmd).map_err(|e| e.to_string())?; + if actual_state != enable { + Err(format!( + "set_range request={}, real={}", + enable, actual_state + )) + } else { + self.current.sw = enable; + Ok(self) + } + } + /// Set the hardware write protect if supported and check that the state is as expected. pub fn set_hw(&mut self, enable: bool) -> Result<&mut Self, String> { info!("set_hw request={}, current={}", enable, self.current.hw); diff --git a/util/flashrom_tester/src/tests.rs b/util/flashrom_tester/src/tests.rs index e6968c81..3e39e4d5 100644 --- a/util/flashrom_tester/src/tests.rs +++ b/util/flashrom_tester/src/tests.rs @@ -272,10 +272,12 @@ fn partial_lock_test(section: LayoutNames) -> impl Fn(&mut TestEnv) -> TestResul env.ensure_golden()?; let (wp_section_name, start, len) = utils::layout_section(env.layout(), section); - // Disable software WP so we can do range protection, but hardware WP - // must remain enabled for (most) range protection to do anything. - env.wp.set_hw(false)?.set_sw(false)?; - env.cmd.wp_range((start, len), true)?; + // Disable hardware WP so we can modify the protected range. + env.wp.set_hw(false)?; + // Then enable software WP so the range is enforced and enable hardware + // WP so that flashrom does not disable software WP during the + // operation. + env.wp.set_range((start, len), true)?; env.wp.set_hw(true)?; // Check that we cannot write to the protected region. -- cgit v1.2.3