From 87f48662ec0c763a6fe33fcbe8b47ecf486521db Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Wed, 19 Nov 2025 19:25:28 +0800 Subject: [PATCH] --flash-ec: Check platform before flashing Make sure that you can't flash the wrong platform EC. ``` > framework_tool --flash-rw-ec framework_lib/test_bins/adl-ec-0.0.1.bin --dry-run File Size: 524288 B Size: 512 KB EC RW Version in File: "hx30_v0.0.1-7a61a89" Error: DeviceError("RW Firmware file is for platform hx30. Currently running lotus") ``` Signed-off-by: Daniel Schaefer --- framework_lib/src/chromium_ec/mod.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/framework_lib/src/chromium_ec/mod.rs b/framework_lib/src/chromium_ec/mod.rs index cc168e60..40295c06 100644 --- a/framework_lib/src/chromium_ec/mod.rs +++ b/framework_lib/src/chromium_ec/mod.rs @@ -790,9 +790,25 @@ impl CrosEc { /// | 79000 | 79FFF | 01000 | Flash Flags | pub fn reflash(&self, data: &[u8], ft: EcFlashType, dry_run: bool) -> EcResult<()> { let mut res = Ok(()); + + let cur_ver = self.version_info()?; + let platform = if let Some(ver) = ec_binary::parse_ec_version_str(&cur_ver) { + ver.platform + } else { + return Err(EcError::DeviceError( + "Cannot determine currently running platform.".to_string(), + )); + }; + if ft == EcFlashType::Full || ft == EcFlashType::Ro { if let Some(version) = ec_binary::read_ec_version(data, true) { println!("EC RO Version in File: {:?}", version.version); + if version.details.platform != platform { + return Err(EcError::DeviceError(format!( + "RO Firmware file is for platform {}. Currently running {}", + version.details.platform, platform + ))); + } } else { return Err(EcError::DeviceError( "File does not contain valid EC RO firmware".to_string(), @@ -802,9 +818,15 @@ impl CrosEc { if ft == EcFlashType::Full || ft == EcFlashType::Rw { if let Some(version) = ec_binary::read_ec_version(data, false) { println!("EC RW Version in File: {:?}", version.version); + if version.details.platform != platform { + return Err(EcError::DeviceError(format!( + "RW Firmware file is for platform {}. Currently running {}", + version.details.platform, platform + ))); + } } else { return Err(EcError::DeviceError( - "File does not contain valid EW RO firmware".to_string(), + "File does not contain valid EW RW firmware".to_string(), )); } }