@@ -145,38 +145,47 @@ pub fn parse_ec_version_str(version: &str) -> Option<ImageVersionDetails> {
145
145
146
146
/// Parse version information from EC FW image buffer
147
147
pub fn read_ec_version ( data : & [ u8 ] , ro : bool ) -> Option < ImageVersionData > {
148
+ // First try to find the legacy EC version
148
149
let offset = if ro {
149
150
EC_RO_VER_OFFSET
150
151
} else {
151
152
EC_RW_VER_OFFSET
152
153
} ;
153
- let offset_zephyr = if ro {
154
- EC_RO_VER_OFFSET_ZEPHYR
155
- } else {
156
- EC_RW_VER_OFFSET_ZEPHYR
157
- } ;
158
-
159
154
if data. len ( ) < offset + core:: mem:: size_of :: < _ImageVersionData > ( ) {
160
155
return None ;
161
156
}
162
157
let v: _ImageVersionData = unsafe { std:: ptr:: read ( data[ offset..] . as_ptr ( ) as * const _ ) } ;
163
158
if v. cookie1 != CROS_EC_IMAGE_DATA_COOKIE1 {
164
- debug ! ( "Failed to find Cookie 1. Found: {:X?}" , { v. cookie1 } ) ;
159
+ debug ! ( "Failed to find legacy Cookie 1. Found: {:X?}" , {
160
+ v. cookie1
161
+ } ) ;
165
162
} else if v. cookie2 != CROS_EC_IMAGE_DATA_COOKIE2 {
166
- debug ! ( "Failed to find Cookie 2. Found: {:X?}" , { v. cookie2 } ) ;
163
+ debug ! ( "Failed to find legacy Cookie 2. Found: {:X?}" , {
164
+ v. cookie2
165
+ } ) ;
167
166
} else {
168
167
return parse_ec_version ( & v) ;
169
168
}
170
169
170
+ // If not present, find Zephyr EC version
171
+ let offset_zephyr = if ro {
172
+ EC_RO_VER_OFFSET_ZEPHYR
173
+ } else {
174
+ EC_RW_VER_OFFSET_ZEPHYR
175
+ } ;
171
176
if data. len ( ) < offset_zephyr + core:: mem:: size_of :: < _ImageVersionData > ( ) {
172
177
return None ;
173
178
}
174
179
let v: _ImageVersionData =
175
180
unsafe { std:: ptr:: read ( data[ offset_zephyr..] . as_ptr ( ) as * const _ ) } ;
176
181
if v. cookie1 != CROS_EC_IMAGE_DATA_COOKIE1 {
177
- debug ! ( "Failed to find Cookie 1. Found: {:X?}" , { v. cookie1 } ) ;
182
+ debug ! ( "Failed to find Zephyr Cookie 1. Found: {:X?}" , {
183
+ v. cookie1
184
+ } ) ;
178
185
} else if v. cookie2 != CROS_EC_IMAGE_DATA_COOKIE2 {
179
- debug ! ( "Failed to find Cookie 2. Found: {:X?}" , { v. cookie2 } ) ;
186
+ debug ! ( "Failed to find Zephyr Cookie 2. Found: {:X?}" , {
187
+ v. cookie2
188
+ } ) ;
180
189
} else {
181
190
return parse_ec_version ( & v) ;
182
191
}
0 commit comments