diff --git a/README.md b/README.md index d76ba78..3cb74e0 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ On UEFI and FreeBSD raw port I/O is used - on Linux this can also be used as a f |---------------------|----------| ------|---------| | Framework Laptop 12 | | | | | Intel Core 12th Gen | Yes | [6.12](https://github.com/torvalds/linux/commit/62be134abf4250474a7a694837064bc783d2b291) | Yes | +| Intel Core Series 3 | Yes | [6.12](https://github.com/torvalds/linux/commit/62be134abf4250474a7a694837064bc783d2b291) | Yes | | Framework Laptop 13 | | | | | Intel Core 11th Gen | Yes | [6.11](https://github.com/torvalds/linux/commit/04ca0a51f1e63bd553fd4af8e9af0fe094fa4f0a) | Not yet | | Intel Core 12th Gen | Yes | [6.13](https://github.com/torvalds/linux/commit/dcd59d0d7d51b2a4b768fc132b0d74a97dfd6d6a) | Not yet | @@ -179,7 +180,9 @@ All of these need EC communication support in order to work. ###### Communication with Embedded Controller - [x] Framework Laptop 12 (Intel 13th Gen) +- [x] Framework Laptop 12 (Intel Core Series 3) - [x] Framework Laptop 13 (Intel 11-13th Gen) +- [x] Framework Laptop 13 (Intel Core Ultra Series 3) - [x] Framework Laptop 13 (AMD Ryzen 7080) - [x] Framework Laptop 13 (AMD Ryzen AI 300) - [x] Framework Laptop 16 (AMD Ryzen 7080) diff --git a/framework_lib/src/ccgx/device.rs b/framework_lib/src/ccgx/device.rs index 07a2c17..91376c6 100644 --- a/framework_lib/src/ccgx/device.rs +++ b/framework_lib/src/ccgx/device.rs @@ -83,6 +83,7 @@ impl PdPort { // Framework Intel Platforms (CCG5 and CCG6) ( Platform::Framework12IntelGen13 + | Platform::Framework12IntelCore3 | Platform::IntelGen11 | Platform::IntelGen12 | Platform::IntelGen13 @@ -91,6 +92,7 @@ impl PdPort { ) => 0x08, ( Platform::Framework12IntelGen13 + | Platform::Framework12IntelCore3 | Platform::IntelGen11 | Platform::IntelGen12 | Platform::IntelGen13 @@ -128,7 +130,8 @@ impl PdPort { | Platform::IntelCoreUltra1 | Platform::IntelCoreUltra3 | Platform::Framework13AmdAi300 - | Platform::Framework12IntelGen13, + | Platform::Framework12IntelGen13 + | Platform::Framework12IntelCore3, PdPort::Right01, ) => 1, ( @@ -138,7 +141,8 @@ impl PdPort { | Platform::IntelCoreUltra1 | Platform::IntelCoreUltra3 | Platform::Framework13AmdAi300 - | Platform::Framework12IntelGen13, + | Platform::Framework12IntelGen13 + | Platform::Framework12IntelCore3, PdPort::Left23, ) => 2, (Platform::Framework16Amd7080 | Platform::Framework16AmdAi300, PdPort::Back) => 5, diff --git a/framework_lib/src/commandline/mod.rs b/framework_lib/src/commandline/mod.rs index 4147762..9ec540e 100644 --- a/framework_lib/src/commandline/mod.rs +++ b/framework_lib/src/commandline/mod.rs @@ -726,6 +726,7 @@ fn print_versions(ec: &CrosEc) { | Some(Platform::IntelGen13) | Some(Platform::IntelCoreUltra1) | Some(Platform::IntelCoreUltra3) + | Some(Platform::Framework12IntelCore3) ); let mut left_retimer: Option = None; let mut right_retimer: Option = None; @@ -736,14 +737,16 @@ fn print_versions(ec: &CrosEc) { | esrt::ADL_RETIMER01_GUID | esrt::RPL_RETIMER01_GUID | esrt::MTL_RETIMER01_GUID - | esrt::PTL_RETIMER01_GUID => { + | esrt::PTL_RETIMER01_GUID + | esrt::WCL_RETIMER01_GUID => { right_retimer = Some(entry.fw_version); } esrt::TGL_RETIMER23_GUID | esrt::ADL_RETIMER23_GUID | esrt::RPL_RETIMER23_GUID | esrt::MTL_RETIMER23_GUID - | esrt::PTL_RETIMER23_GUID => { + | esrt::PTL_RETIMER23_GUID + | esrt::WCL_RETIMER23_GUID => { left_retimer = Some(entry.fw_version); } _ => {} @@ -831,7 +834,9 @@ fn print_versions(ec: &CrosEc) { #[cfg(feature = "hidapi")] { let _ignore_err = touchscreen::print_himax_fw_ver(); - if let Some(Platform::Framework12IntelGen13) = smbios::get_platform() { + if smbios::get_platform().and_then(Platform::which_family) + == Some(PlatformFamily::Framework12) + { let _ignore_err = touchscreen::print_fw_ver(); } } @@ -2674,6 +2679,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option { esrt::FW12_RPL_BIOS_GUID => { println!(" Type: Framework Laptop 12 (RPL) Insyde BIOS"); } + esrt::WCL_BIOS_GUID => { + println!(" Type: Framework Laptop 12 (WCL) Insyde BIOS"); + } esrt::AMD13_RYZEN7040_BIOS_GUID => { println!(" Type: Framework Laptop 13 (AMD Ryzen 7040) Insyde BIOS"); } @@ -2719,6 +2727,12 @@ pub fn analyze_capsule(data: &[u8]) -> Option { esrt::PTL_RETIMER23_GUID => { println!(" Type: Framework PTL Retimer23 (Left)"); } + esrt::WCL_RETIMER01_GUID => { + println!(" Type: Framework WCL Retimer01 (Right)"); + } + esrt::WCL_RETIMER23_GUID => { + println!(" Type: Framework WCL Retimer23 (Left)"); + } esrt::RPL_CSME_GUID => { println!(" Type: Framework RPL CSME"); } @@ -2731,6 +2745,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option { esrt::PTL_CSME_GUID => { println!(" Type: Framework PTL CSME"); } + esrt::WCL_CSME_GUID => { + println!(" Type: Framework WCL CSME"); + } esrt::WINUX_GUID => { println!(" Type: Windows UX capsule"); let ux_header = capsule::parse_ux_header(data); @@ -2751,7 +2768,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option { | esrt::FrameworkGuidKind::MtlRetimer01 | esrt::FrameworkGuidKind::MtlRetimer23 | esrt::FrameworkGuidKind::PtlRetimer01 - | esrt::FrameworkGuidKind::PtlRetimer23 => { + | esrt::FrameworkGuidKind::PtlRetimer23 + | esrt::FrameworkGuidKind::WclRetimer01 + | esrt::FrameworkGuidKind::WclRetimer23 => { if let Some(ver) = find_retimer_version(data) { println!(" Version: {:>18?}", ver); } diff --git a/framework_lib/src/esrt/mod.rs b/framework_lib/src/esrt/mod.rs index f3f3b86..815fabb 100644 --- a/framework_lib/src/esrt/mod.rs +++ b/framework_lib/src/esrt/mod.rs @@ -79,6 +79,12 @@ pub const PTL_BIOS_GUID: GUID = GUID::build_from_components( 0x4fb2, &[0x94, 0xf0, 0x60, 0x45, 0x99, 0x1d, 0x9c, 0x9e], ); +pub const WCL_BIOS_GUID: GUID = GUID::build_from_components( + 0x3cf54c16, + 0x1a6d, + 0x4acd, + &[0xb4, 0x2b, 0x47, 0xe8, 0x99, 0xdf, 0x4c, 0xf9], +); pub const TGL_RETIMER01_GUID: GUID = GUID::build_from_components( 0x832af090, @@ -140,6 +146,18 @@ pub const PTL_RETIMER23_GUID: GUID = GUID::build_from_components( 0x41c7, &[0x9b, 0x41, 0x72, 0x85, 0xf4, 0x01, 0xe1, 0x03], ); +pub const WCL_RETIMER01_GUID: GUID = GUID::build_from_components( + 0x7fa95808, + 0xcd4a, + 0x40c6, + &[0xa8, 0x92, 0x2b, 0xf3, 0x85, 0x75, 0x7c, 0xac], +); +pub const WCL_RETIMER23_GUID: GUID = GUID::build_from_components( + 0xf45edc38, + 0x76a4, + 0x4289, + &[0x80, 0xcf, 0xa0, 0x09, 0x0f, 0x72, 0x0e, 0xde], +); pub const FL16_BIOS_GUID: GUID = GUID::build_from_components( 0x6ae76af1, @@ -195,6 +213,12 @@ pub const PTL_CSME_GUID: GUID = GUID::build_from_components( 0x44c8, &[0x8c, 0x40, 0xe9, 0x3e, 0xc8, 0xed, 0xe8, 0x17], ); +pub const WCL_CSME_GUID: GUID = GUID::build_from_components( + 0xc475d6b8, + 0xf659, + 0x413f, + &[0xab, 0x97, 0x59, 0x2d, 0x26, 0xfa, 0xf8, 0x5c], +); // In EDK2 // Handled by MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c @@ -215,6 +239,7 @@ pub enum FrameworkGuidKind { MtlBios, Fw12RplBios, PtlBios, + WclBios, TglRetimer01, TglRetimer23, AdlRetimer01, @@ -225,10 +250,13 @@ pub enum FrameworkGuidKind { MtlRetimer23, PtlRetimer01, PtlRetimer23, + WclRetimer01, + WclRetimer23, RplCsme, RplUCsme, MtlCsme, PtlCsme, + WclCsme, Fl16Bios, Amd16Ai300Bios, Amd13Ryzen7040Bios, @@ -246,6 +274,7 @@ pub fn match_guid_kind(guid: &CGuid) -> FrameworkGuidKind { MTL_BIOS_GUID => FrameworkGuidKind::MtlBios, FW12_RPL_BIOS_GUID => FrameworkGuidKind::Fw12RplBios, PTL_BIOS_GUID => FrameworkGuidKind::PtlBios, + WCL_BIOS_GUID => FrameworkGuidKind::WclBios, FL16_BIOS_GUID => FrameworkGuidKind::Fl16Bios, AMD16_AI300_BIOS_GUID => FrameworkGuidKind::Amd16Ai300Bios, AMD13_RYZEN7040_BIOS_GUID => FrameworkGuidKind::Amd13Ryzen7040Bios, @@ -261,10 +290,13 @@ pub fn match_guid_kind(guid: &CGuid) -> FrameworkGuidKind { MTL_RETIMER23_GUID => FrameworkGuidKind::MtlRetimer23, PTL_RETIMER01_GUID => FrameworkGuidKind::PtlRetimer01, PTL_RETIMER23_GUID => FrameworkGuidKind::PtlRetimer23, + WCL_RETIMER01_GUID => FrameworkGuidKind::WclRetimer01, + WCL_RETIMER23_GUID => FrameworkGuidKind::WclRetimer23, RPL_CSME_GUID => FrameworkGuidKind::RplCsme, RPL_U_CSME_GUID => FrameworkGuidKind::RplUCsme, MTL_CSME_GUID => FrameworkGuidKind::MtlCsme, PTL_CSME_GUID => FrameworkGuidKind::PtlCsme, + WCL_CSME_GUID => FrameworkGuidKind::WclCsme, WINUX_GUID => FrameworkGuidKind::WinUx, _ => FrameworkGuidKind::Unknown, } diff --git a/framework_lib/src/smbios.rs b/framework_lib/src/smbios.rs index 1fbf1c8..a714a50 100644 --- a/framework_lib/src/smbios.rs +++ b/framework_lib/src/smbios.rs @@ -207,6 +207,7 @@ pub fn get_platform() -> Option { "Laptop 13 (AMD Ryzen 7040 Series)" => Some(Platform::Framework13Amd7080), "Laptop 13 (AMD Ryzen AI 300 Series)" => Some(Platform::Framework13AmdAi300), "Laptop 12 (13th Gen Intel Core)" => Some(Platform::Framework12IntelGen13), + "Laptop 12 (Intel Core Series 3)" => Some(Platform::Framework12IntelCore3), "Laptop 13 (Intel Core Ultra Series 1)" => Some(Platform::IntelCoreUltra1), "Laptop 13 Pro (Intel Core Ultra Series 3)" => Some(Platform::IntelCoreUltra3), "Laptop 16 (AMD Ryzen 7040 Series)" => Some(Platform::Framework16Amd7080), diff --git a/framework_lib/src/util.rs b/framework_lib/src/util.rs index 3cde1ec..03cc7cc 100644 --- a/framework_lib/src/util.rs +++ b/framework_lib/src/util.rs @@ -21,6 +21,8 @@ use crate::smbios; pub enum Platform { /// Framework Laptop 12 Framework12IntelGen13, + /// Framework Laptop 12 - Intel Core 3, Codenamed WildcatLake + Framework12IntelCore3, /// Framework Laptop 13 - Intel 11th Gen, Codenamed TigerLake IntelGen11, /// Framework Laptop 13 - Intel 12th Gen, Codenamed AlderLake @@ -65,6 +67,7 @@ impl Platform { pub fn which_cpu_vendor(self) -> Option { match self { Platform::Framework12IntelGen13 + | Platform::Framework12IntelCore3 | Platform::IntelGen11 | Platform::IntelGen12 | Platform::IntelGen13 @@ -81,7 +84,9 @@ impl Platform { } pub fn which_family(self) -> Option { match self { - Platform::Framework12IntelGen13 => Some(PlatformFamily::Framework12), + Platform::Framework12IntelGen13 | Platform::Framework12IntelCore3 => { + Some(PlatformFamily::Framework12) + } Platform::IntelGen11 | Platform::IntelGen12 | Platform::IntelGen13