Skip to content
Open
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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down Expand Up @@ -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)
Expand Down
8 changes: 6 additions & 2 deletions framework_lib/src/ccgx/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ impl PdPort {
// Framework Intel Platforms (CCG5 and CCG6)
(
Platform::Framework12IntelGen13
| Platform::Framework12IntelCore3
| Platform::IntelGen11
| Platform::IntelGen12
| Platform::IntelGen13
Expand All @@ -91,6 +92,7 @@ impl PdPort {
) => 0x08,
(
Platform::Framework12IntelGen13
| Platform::Framework12IntelCore3
| Platform::IntelGen11
| Platform::IntelGen12
| Platform::IntelGen13
Expand Down Expand Up @@ -128,7 +130,8 @@ impl PdPort {
| Platform::IntelCoreUltra1
| Platform::IntelCoreUltra3
| Platform::Framework13AmdAi300
| Platform::Framework12IntelGen13,
| Platform::Framework12IntelGen13
| Platform::Framework12IntelCore3,
PdPort::Right01,
) => 1,
(
Expand All @@ -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,
Expand Down
27 changes: 23 additions & 4 deletions framework_lib/src/commandline/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<u32> = None;
let mut right_retimer: Option<u32> = None;
Expand All @@ -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);
}
_ => {}
Expand Down Expand Up @@ -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();
}
}
Expand Down Expand Up @@ -2674,6 +2679,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
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");
}
Expand Down Expand Up @@ -2719,6 +2727,12 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
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");
}
Expand All @@ -2731,6 +2745,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
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);
Expand All @@ -2751,7 +2768,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
| 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);
}
Expand Down
32 changes: 32 additions & 0 deletions framework_lib/src/esrt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand All @@ -215,6 +239,7 @@ pub enum FrameworkGuidKind {
MtlBios,
Fw12RplBios,
PtlBios,
WclBios,
TglRetimer01,
TglRetimer23,
AdlRetimer01,
Expand All @@ -225,10 +250,13 @@ pub enum FrameworkGuidKind {
MtlRetimer23,
PtlRetimer01,
PtlRetimer23,
WclRetimer01,
WclRetimer23,
RplCsme,
RplUCsme,
MtlCsme,
PtlCsme,
WclCsme,
Fl16Bios,
Amd16Ai300Bios,
Amd13Ryzen7040Bios,
Expand All @@ -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,
Expand All @@ -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,
}
Expand Down
1 change: 1 addition & 0 deletions framework_lib/src/smbios.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ pub fn get_platform() -> Option<Platform> {
"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),
Expand Down
7 changes: 6 additions & 1 deletion framework_lib/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -65,6 +67,7 @@ impl Platform {
pub fn which_cpu_vendor(self) -> Option<CpuVendor> {
match self {
Platform::Framework12IntelGen13
| Platform::Framework12IntelCore3
| Platform::IntelGen11
| Platform::IntelGen12
| Platform::IntelGen13
Expand All @@ -81,7 +84,9 @@ impl Platform {
}
pub fn which_family(self) -> Option<PlatformFamily> {
match self {
Platform::Framework12IntelGen13 => Some(PlatformFamily::Framework12),
Platform::Framework12IntelGen13 | Platform::Framework12IntelCore3 => {
Some(PlatformFamily::Framework12)
}
Platform::IntelGen11
| Platform::IntelGen12
| Platform::IntelGen13
Expand Down
Loading