Skip to content

Commit 37bfc5d

Browse files
committed
Add support for Laptop 12 Intel Core Series 3
Signed-off-by: Daniel Schaefer <dhs@frame.work>
1 parent a338c6a commit 37bfc5d

6 files changed

Lines changed: 68 additions & 6 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ On UEFI and FreeBSD raw port I/O is used - on Linux this can also be used as a f
108108
|---------------------|----------| ------|---------|
109109
| Framework Laptop 12 | | | |
110110
| Intel Core 12th Gen | Yes | [6.12](https://github.com/torvalds/linux/commit/62be134abf4250474a7a694837064bc783d2b291) | Yes |
111+
| Intel Core Series 3 | Yes | [6.12](https://github.com/torvalds/linux/commit/62be134abf4250474a7a694837064bc783d2b291) | Yes |
111112
| Framework Laptop 13 | | | |
112113
| Intel Core 11th Gen | Yes | [6.11](https://github.com/torvalds/linux/commit/04ca0a51f1e63bd553fd4af8e9af0fe094fa4f0a) | Not yet |
113114
| 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.
179180
###### Communication with Embedded Controller
180181

181182
- [x] Framework Laptop 12 (Intel 13th Gen)
183+
- [x] Framework Laptop 12 (Intel Core Series 3)
182184
- [x] Framework Laptop 13 (Intel 11-13th Gen)
185+
- [x] Framework Laptop 13 (Intel Core Ultra Series 3)
183186
- [x] Framework Laptop 13 (AMD Ryzen 7080)
184187
- [x] Framework Laptop 13 (AMD Ryzen AI 300)
185188
- [x] Framework Laptop 16 (AMD Ryzen 7080)

framework_lib/src/ccgx/device.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ impl PdPort {
8383
// Framework Intel Platforms (CCG5 and CCG6)
8484
(
8585
Platform::Framework12IntelGen13
86+
| Platform::Framework12IntelCore3
8687
| Platform::IntelGen11
8788
| Platform::IntelGen12
8889
| Platform::IntelGen13
@@ -91,6 +92,7 @@ impl PdPort {
9192
) => 0x08,
9293
(
9394
Platform::Framework12IntelGen13
95+
| Platform::Framework12IntelCore3
9496
| Platform::IntelGen11
9597
| Platform::IntelGen12
9698
| Platform::IntelGen13
@@ -128,7 +130,8 @@ impl PdPort {
128130
| Platform::IntelCoreUltra1
129131
| Platform::IntelCoreUltra3
130132
| Platform::Framework13AmdAi300
131-
| Platform::Framework12IntelGen13,
133+
| Platform::Framework12IntelGen13
134+
| Platform::Framework12IntelCore3,
132135
PdPort::Right01,
133136
) => 1,
134137
(
@@ -138,7 +141,8 @@ impl PdPort {
138141
| Platform::IntelCoreUltra1
139142
| Platform::IntelCoreUltra3
140143
| Platform::Framework13AmdAi300
141-
| Platform::Framework12IntelGen13,
144+
| Platform::Framework12IntelGen13
145+
| Platform::Framework12IntelCore3,
142146
PdPort::Left23,
143147
) => 2,
144148
(Platform::Framework16Amd7080 | Platform::Framework16AmdAi300, PdPort::Back) => 5,

framework_lib/src/commandline/mod.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,7 @@ fn print_versions(ec: &CrosEc) {
726726
| Some(Platform::IntelGen13)
727727
| Some(Platform::IntelCoreUltra1)
728728
| Some(Platform::IntelCoreUltra3)
729+
| Some(Platform::Framework12IntelCore3)
729730
);
730731
let mut left_retimer: Option<u32> = None;
731732
let mut right_retimer: Option<u32> = None;
@@ -736,14 +737,16 @@ fn print_versions(ec: &CrosEc) {
736737
| esrt::ADL_RETIMER01_GUID
737738
| esrt::RPL_RETIMER01_GUID
738739
| esrt::MTL_RETIMER01_GUID
739-
| esrt::PTL_RETIMER01_GUID => {
740+
| esrt::PTL_RETIMER01_GUID
741+
| esrt::WCL_RETIMER01_GUID => {
740742
right_retimer = Some(entry.fw_version);
741743
}
742744
esrt::TGL_RETIMER23_GUID
743745
| esrt::ADL_RETIMER23_GUID
744746
| esrt::RPL_RETIMER23_GUID
745747
| esrt::MTL_RETIMER23_GUID
746-
| esrt::PTL_RETIMER23_GUID => {
748+
| esrt::PTL_RETIMER23_GUID
749+
| esrt::WCL_RETIMER23_GUID => {
747750
left_retimer = Some(entry.fw_version);
748751
}
749752
_ => {}
@@ -2674,6 +2677,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
26742677
esrt::FW12_RPL_BIOS_GUID => {
26752678
println!(" Type: Framework Laptop 12 (RPL) Insyde BIOS");
26762679
}
2680+
esrt::WCL_BIOS_GUID => {
2681+
println!(" Type: Framework Laptop 12 (WCL) Insyde BIOS");
2682+
}
26772683
esrt::AMD13_RYZEN7040_BIOS_GUID => {
26782684
println!(" Type: Framework Laptop 13 (AMD Ryzen 7040) Insyde BIOS");
26792685
}
@@ -2719,6 +2725,12 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
27192725
esrt::PTL_RETIMER23_GUID => {
27202726
println!(" Type: Framework PTL Retimer23 (Left)");
27212727
}
2728+
esrt::WCL_RETIMER01_GUID => {
2729+
println!(" Type: Framework WCL Retimer01 (Right)");
2730+
}
2731+
esrt::WCL_RETIMER23_GUID => {
2732+
println!(" Type: Framework WCL Retimer23 (Left)");
2733+
}
27222734
esrt::RPL_CSME_GUID => {
27232735
println!(" Type: Framework RPL CSME");
27242736
}
@@ -2731,6 +2743,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
27312743
esrt::PTL_CSME_GUID => {
27322744
println!(" Type: Framework PTL CSME");
27332745
}
2746+
esrt::WCL_CSME_GUID => {
2747+
println!(" Type: Framework WCL CSME");
2748+
}
27342749
esrt::WINUX_GUID => {
27352750
println!(" Type: Windows UX capsule");
27362751
let ux_header = capsule::parse_ux_header(data);
@@ -2751,7 +2766,9 @@ pub fn analyze_capsule(data: &[u8]) -> Option<capsule::EfiCapsuleHeader> {
27512766
| esrt::FrameworkGuidKind::MtlRetimer01
27522767
| esrt::FrameworkGuidKind::MtlRetimer23
27532768
| esrt::FrameworkGuidKind::PtlRetimer01
2754-
| esrt::FrameworkGuidKind::PtlRetimer23 => {
2769+
| esrt::FrameworkGuidKind::PtlRetimer23
2770+
| esrt::FrameworkGuidKind::WclRetimer01
2771+
| esrt::FrameworkGuidKind::WclRetimer23 => {
27552772
if let Some(ver) = find_retimer_version(data) {
27562773
println!(" Version: {:>18?}", ver);
27572774
}

framework_lib/src/esrt/mod.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ pub const PTL_BIOS_GUID: GUID = GUID::build_from_components(
7979
0x4fb2,
8080
&[0x94, 0xf0, 0x60, 0x45, 0x99, 0x1d, 0x9c, 0x9e],
8181
);
82+
pub const WCL_BIOS_GUID: GUID = GUID::build_from_components(
83+
0x3cf54c16,
84+
0x1a6d,
85+
0x4acd,
86+
&[0xb4, 0x2b, 0x47, 0xe8, 0x99, 0xdf, 0x4c, 0xf9],
87+
);
8288

8389
pub const TGL_RETIMER01_GUID: GUID = GUID::build_from_components(
8490
0x832af090,
@@ -140,6 +146,18 @@ pub const PTL_RETIMER23_GUID: GUID = GUID::build_from_components(
140146
0x41c7,
141147
&[0x9b, 0x41, 0x72, 0x85, 0xf4, 0x01, 0xe1, 0x03],
142148
);
149+
pub const WCL_RETIMER01_GUID: GUID = GUID::build_from_components(
150+
0x7fa95808,
151+
0xcd4a,
152+
0x40c6,
153+
&[0xa8, 0x92, 0x2b, 0xf3, 0x85, 0x75, 0x7c, 0xac],
154+
);
155+
pub const WCL_RETIMER23_GUID: GUID = GUID::build_from_components(
156+
0xf45edc38,
157+
0x76a4,
158+
0x4289,
159+
&[0x80, 0xcf, 0xa0, 0x09, 0x0f, 0x72, 0x0e, 0xde],
160+
);
143161

144162
pub const FL16_BIOS_GUID: GUID = GUID::build_from_components(
145163
0x6ae76af1,
@@ -195,6 +213,12 @@ pub const PTL_CSME_GUID: GUID = GUID::build_from_components(
195213
0x44c8,
196214
&[0x8c, 0x40, 0xe9, 0x3e, 0xc8, 0xed, 0xe8, 0x17],
197215
);
216+
pub const WCL_CSME_GUID: GUID = GUID::build_from_components(
217+
0xc475d6b8,
218+
0xf659,
219+
0x413f,
220+
&[0xab, 0x97, 0x59, 0x2d, 0x26, 0xfa, 0xf8, 0x5c],
221+
);
198222

199223
// In EDK2
200224
// Handled by MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
@@ -215,6 +239,7 @@ pub enum FrameworkGuidKind {
215239
MtlBios,
216240
Fw12RplBios,
217241
PtlBios,
242+
WclBios,
218243
TglRetimer01,
219244
TglRetimer23,
220245
AdlRetimer01,
@@ -225,10 +250,13 @@ pub enum FrameworkGuidKind {
225250
MtlRetimer23,
226251
PtlRetimer01,
227252
PtlRetimer23,
253+
WclRetimer01,
254+
WclRetimer23,
228255
RplCsme,
229256
RplUCsme,
230257
MtlCsme,
231258
PtlCsme,
259+
WclCsme,
232260
Fl16Bios,
233261
Amd16Ai300Bios,
234262
Amd13Ryzen7040Bios,
@@ -246,6 +274,7 @@ pub fn match_guid_kind(guid: &CGuid) -> FrameworkGuidKind {
246274
MTL_BIOS_GUID => FrameworkGuidKind::MtlBios,
247275
FW12_RPL_BIOS_GUID => FrameworkGuidKind::Fw12RplBios,
248276
PTL_BIOS_GUID => FrameworkGuidKind::PtlBios,
277+
WCL_BIOS_GUID => FrameworkGuidKind::WclBios,
249278
FL16_BIOS_GUID => FrameworkGuidKind::Fl16Bios,
250279
AMD16_AI300_BIOS_GUID => FrameworkGuidKind::Amd16Ai300Bios,
251280
AMD13_RYZEN7040_BIOS_GUID => FrameworkGuidKind::Amd13Ryzen7040Bios,
@@ -261,10 +290,13 @@ pub fn match_guid_kind(guid: &CGuid) -> FrameworkGuidKind {
261290
MTL_RETIMER23_GUID => FrameworkGuidKind::MtlRetimer23,
262291
PTL_RETIMER01_GUID => FrameworkGuidKind::PtlRetimer01,
263292
PTL_RETIMER23_GUID => FrameworkGuidKind::PtlRetimer23,
293+
WCL_RETIMER01_GUID => FrameworkGuidKind::WclRetimer01,
294+
WCL_RETIMER23_GUID => FrameworkGuidKind::WclRetimer23,
264295
RPL_CSME_GUID => FrameworkGuidKind::RplCsme,
265296
RPL_U_CSME_GUID => FrameworkGuidKind::RplUCsme,
266297
MTL_CSME_GUID => FrameworkGuidKind::MtlCsme,
267298
PTL_CSME_GUID => FrameworkGuidKind::PtlCsme,
299+
WCL_CSME_GUID => FrameworkGuidKind::WclCsme,
268300
WINUX_GUID => FrameworkGuidKind::WinUx,
269301
_ => FrameworkGuidKind::Unknown,
270302
}

framework_lib/src/smbios.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ pub fn get_platform() -> Option<Platform> {
207207
"Laptop 13 (AMD Ryzen 7040 Series)" => Some(Platform::Framework13Amd7080),
208208
"Laptop 13 (AMD Ryzen AI 300 Series)" => Some(Platform::Framework13AmdAi300),
209209
"Laptop 12 (13th Gen Intel Core)" => Some(Platform::Framework12IntelGen13),
210+
"Laptop 12 (Intel Core Series 3)" => Some(Platform::Framework12IntelCore3),
210211
"Laptop 13 (Intel Core Ultra Series 1)" => Some(Platform::IntelCoreUltra1),
211212
"Laptop 13 Pro (Intel Core Ultra Series 3)" => Some(Platform::IntelCoreUltra3),
212213
"Laptop 16 (AMD Ryzen 7040 Series)" => Some(Platform::Framework16Amd7080),

framework_lib/src/util.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ use crate::smbios;
2121
pub enum Platform {
2222
/// Framework Laptop 12
2323
Framework12IntelGen13,
24+
/// Framework Laptop 12 - Intel Core 3, Codenamed WildcatLake
25+
Framework12IntelCore3,
2426
/// Framework Laptop 13 - Intel 11th Gen, Codenamed TigerLake
2527
IntelGen11,
2628
/// Framework Laptop 13 - Intel 12th Gen, Codenamed AlderLake
@@ -65,6 +67,7 @@ impl Platform {
6567
pub fn which_cpu_vendor(self) -> Option<CpuVendor> {
6668
match self {
6769
Platform::Framework12IntelGen13
70+
| Platform::Framework12IntelCore3
6871
| Platform::IntelGen11
6972
| Platform::IntelGen12
7073
| Platform::IntelGen13
@@ -81,7 +84,9 @@ impl Platform {
8184
}
8285
pub fn which_family(self) -> Option<PlatformFamily> {
8386
match self {
84-
Platform::Framework12IntelGen13 => Some(PlatformFamily::Framework12),
87+
Platform::Framework12IntelGen13 | Platform::Framework12IntelCore3 => {
88+
Some(PlatformFamily::Framework12)
89+
}
8590
Platform::IntelGen11
8691
| Platform::IntelGen12
8792
| Platform::IntelGen13

0 commit comments

Comments
 (0)