Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion framework_lib/src/chromium_ec/i2c_passthrough.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,15 @@ pub fn i2c_read_16bit_addr(

let data = ec.send_command(EcCommands::I2cPassthrough as u16, 0, &buffer)?;
let res: _EcI2cPassthruResponse = unsafe { std::ptr::read(data.as_ptr() as *const _) };
let res_data = &data[size_of::<_EcI2cPassthruResponse>()..];
let header_len: usize = size_of::<_EcI2cPassthruResponse>();
/* Note on windows, you can get extra bytes back, so truncate this to the requested size */
let res_data = &data[header_len..(len as usize + header_len)];
debug_assert!(res.messages as usize == messages.len() || res.messages == 0);
trace!(
" i2c_read_16bit_addr response (len: {}, data: {:#04X?})",
res_data.len(),
res_data.to_vec()
);
Ok(EcI2cPassthruResponse {
i2c_status: res.i2c_status,
data: res_data.to_vec(),
Expand Down
2 changes: 1 addition & 1 deletion framework_lib/src/chromium_ec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1551,7 +1551,7 @@ impl CrosEc {
"Invalid descriptor hdr magic".to_string(),
));
}
self.read_ec_gpu_chunk(0x00, header.descriptor_length as u16)
self.read_ec_gpu_chunk(0x00, (header.descriptor_length + header.length) as u16)
}

pub fn read_gpu_desc_header(&self) -> EcResult<GpuCfgDescriptor> {
Expand Down
Loading