From 668d643e5cdef22e5a01a5562227e573ec8c9951 Mon Sep 17 00:00:00 2001 From: "Johann C. Rode" Date: Sat, 18 Oct 2025 09:13:13 -0700 Subject: [PATCH] mb/lenovo/sklkbl_thinkpad: Add Lenovo Thinkpad T470s as a variant The hardware is mostly identical to the already supported Thinkpad T480s. Aside from the CPU (KBL vs SKL), major hardware differences are GPIO pins routed out to a classical docking station connector, and the lack of support for dedicated GPUs. A tricky aspect of this machine is that it fails to enumerate PCIe devices when using a truncated Intel ME firmware even when retaining the MFS partition [1]. I suspect that the PCIe clock generators are set up in some other part of the ME firmware. The VBT (intelvbttool) as well as GPIO register dumps (inteltool) was obtained from the latest stock BIOS 1.55/N1WET76W. GPIO, USB and PCIe port assignments have been cross-checked against the publicly available schematics (Thorpe-2). The patches were validated on a laptop with part number 20JT-S16E00 in conjunction with a non-truncated deguarded Intel ME firmware [2]. A cursory hardware test (video, wifi, audio, network, reboot, etc.) has everything working as expected (debian 13). [1] https://puri.sm/posts/deep-dive-into-intel-me-disablement/ [2] deguard commit 497732f8b2e3bdc699c0fbc6713b6afbaef7506a Change-Id: I113b31484a634b7c1acdba5f74e5eef050d4ede6 Signed-off-by: Johann C. Rode Reviewed-on: https://review.coreboot.org/c/coreboot/+/89638 Reviewed-by: Patrick Rudolph Tested-by: build bot (Jenkins) Reviewed-by: Matt DeVillier Reviewed-by: Maximilian Brune --- src/mainboard/lenovo/sklkbl_thinkpad/Kconfig | 9 +- .../lenovo/sklkbl_thinkpad/Kconfig.name | 3 + .../lenovo/sklkbl_thinkpad/Makefile.mk | 2 + .../variants/t470s/Makefile.mk | 10 + .../sklkbl_thinkpad/variants/t470s/data.vbt | Bin 0 -> 4300 bytes .../variants/t470s/gma-mainboard.ads | 19 ++ .../sklkbl_thinkpad/variants/t470s/gpio.c | 199 ++++++++++++++++++ .../sklkbl_thinkpad/variants/t470s/hda_verb.c | 90 ++++++++ .../variants/t470s/memory_init_params.c | 44 ++++ .../variants/t470s/overridetree.cb | 86 ++++++++ .../variants/t470s/spd/spd_0.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_1.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_10.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_11.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_12.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_13.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_14.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_15.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_16.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_17.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_18.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_19.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_2.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_20.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_3.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_4.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_5.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_6.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_7.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_8.bin | Bin 0 -> 512 bytes .../variants/t470s/spd/spd_9.bin | Bin 0 -> 512 bytes 31 files changed, 461 insertions(+), 1 deletion(-) create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/Makefile.mk create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gma-mainboard.ads create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/hda_verb.c create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/memory_init_params.c create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/overridetree.cb create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_0.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_1.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_10.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_11.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_12.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_13.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_14.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_15.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_16.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_17.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_18.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_19.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_2.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_20.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_3.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_4.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_5.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_6.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_7.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_8.bin create mode 100644 src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_9.bin diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig b/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig index bd84488762..c9b3bcbf0a 100644 --- a/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig +++ b/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig @@ -20,10 +20,15 @@ config BOARD_LENOVO_SKLKBL_THINKPAD_COMMON select MAINBOARD_USES_IFD_GBE_REGION select MEMORY_MAPPED_TPM select SOC_INTEL_COMMON_BLOCK_HDA_VERB - select SOC_INTEL_KABYLAKE + select SOC_INTEL_KABYLAKE if BOARD_LENOVO_T480 || BOARD_LENOVO_T480S || BOARD_LENOVO_T580 + select SOC_INTEL_SKYLAKE if BOARD_LENOVO_T470S select SPD_READ_BY_WORD select SYSTEM_TYPE_LAPTOP +config BOARD_LENOVO_T470S + bool + select BOARD_LENOVO_SKLKBL_THINKPAD_COMMON + config BOARD_LENOVO_T480 bool select BOARD_LENOVO_SKLKBL_THINKPAD_COMMON @@ -48,6 +53,7 @@ config MAINBOARD_DIR default "lenovo/sklkbl_thinkpad" config VARIANT_DIR + default "t470s" if BOARD_LENOVO_T470S default "t480" if BOARD_LENOVO_T480 default "t480s" if BOARD_LENOVO_T480S default "t580" if BOARD_LENOVO_T580 @@ -56,6 +62,7 @@ config OVERRIDE_DEVICETREE default "variants/\$(CONFIG_VARIANT_DIR)/overridetree.cb" config MAINBOARD_PART_NUMBER + default "T470s" if BOARD_LENOVO_T470S default "T480" if BOARD_LENOVO_T480 default "T480s" if BOARD_LENOVO_T480S default "T580" if BOARD_LENOVO_T580 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig.name b/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig.name index 21b9739e6f..26c4a3c65b 100644 --- a/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig.name +++ b/src/mainboard/lenovo/sklkbl_thinkpad/Kconfig.name @@ -1,5 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-only +config BOARD_LENOVO_T470S + bool "ThinkPad T470s" + config BOARD_LENOVO_T480 bool "ThinkPad T480" diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/Makefile.mk b/src/mainboard/lenovo/sklkbl_thinkpad/Makefile.mk index bf88dd3cd7..3049190948 100644 --- a/src/mainboard/lenovo/sklkbl_thinkpad/Makefile.mk +++ b/src/mainboard/lenovo/sklkbl_thinkpad/Makefile.mk @@ -13,4 +13,6 @@ ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += variants/$(VARIANT_DIR)/gma-mainb subdirs-y += variants/$(VARIANT_DIR) +ifeq ($(CONFIG_VARIANT_HAS_DGPU),y) CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include +endif diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/Makefile.mk b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/Makefile.mk new file mode 100644 index 0000000000..a6b399f161 --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/Makefile.mk @@ -0,0 +1,10 @@ +## SPDX-License-Identifier: GPL-2.0-only + +# Add files spd_0.bin to spd_20.bin to the cbfs image +SPD_BINS := $(shell seq 0 20) +define SPD_template +cbfs-files-y += spd_$(1).bin +spd_$(1).bin-file := spd/spd_$(1).bin +spd_$(1).bin-type := raw +endef +$(foreach n,$(SPD_BINS),$(eval $(call SPD_template,$(n)))) diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..049f56ec22aac7649b3eb60aa86f0f17f944badf GIT binary patch literal 4300 zcmeHJT}&KR6h5=FyR&bMC!!*Y^keu(xw>G|<_K7NtOiPvkeKT~5JBckjM%pf9j580`*q;uml$ zoRY6z1W0jQx#(9_f8_9ZddSyPO|a3r&R`U~hW8H+rR&1!v4_WpM=%zOVBo-k^iXW(^pQ(e94-$8nP z^VaRnTk9njZVh#J#Ujx_U!;3CcK2X7(i`aQZS4w1_hPK4yFC(&^tFa12BG1RW21u) zJ~WQLP&L-8s=9^1{Ah%Xq2bYyS_}*gVUO-JhCS)A^ynk$RIS8lFq{RKode(;AOwMf zEA=3{?Cmbi=R&Vb4%@Z$b}X~YF-=ZtsG=OTYn$y@>5@rLXmUc*ltnOvF&JVFVd4YM&RF?LyZ(Z4o=KwB0N~1_F zq9RU(gYGKW#rt5Kx51NqBdoKZ1D6|NlUs&+iQ~lQ9SpuC{)YH_;$Mib5DQKQCB$oq z?;@@vZXym5cM;!5JV5L`3YT-X3{VM(GMpt#ObN0bUaW@9Da(G!vb%paDgn%r9!oBo z!VNmPoFKr}+-F|M|TT=4+ zwf39W*?C|Ydy>!Pa%XZma3pN=+Sz%VpgByNCX85GMwqfRGa{hL{v9;26gp@p@vfH1 zO2`N^_B{YUy)N-E0jz{JnMI1YXi=7(24{u&N@$t)St|d^Hx>E{So?!*R$wqIT;fiY zF4lZ(x$Sy>f3{7}nM{x0XmxG*W9F5X%hF@Pc#$wqKhx>|_CK6~%66D@XR>(VHrbV2 zXC|WR<}9~AK=_Tf z?NL7Pu#Y|Xqesbkm|Mg;Q3;5wQ^X^p^0dfa5b<46`A}q^i}qXA~w_2vp=1XQ9@>$vCK*I#OzcpvOQ1bzPirR1}0T zf$<8uGG2qgWsTckfe3HaOSDP9p}*Ia5Fk?K?Gf|4hB6on1h1nl~V^ z-vRvUwK#Z3|8yLx)V8cu3om6dYkWH?ltS|Gcx`qnSy82_*pSbpJ?l1Rp?{OjYTl?8 zz80$H%$B3F5m~u=OFpJl!r)J}m>(tn*Yw`#@cnk#1SqOq!qn%4mrc`g- z+Of1Acse@t81yT~>X}THgBE}ds`tb~9(a&U1P2y?aIpfWVz@>X)sQ~Q*cW`3_9MkG zzc2JfzVfQJHD|m>8n`7H}&a`uYu3&rsWT}x!fMQZ!eH-32nXwo^7Kr aBfww}eY{eznR^Ak<7;OCPUPtyq5ckd<>xB^ literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gma-mainboard.ads b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gma-mainboard.ads new file mode 100644 index 0000000000..fcfbd75a92 --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gma-mainboard.ads @@ -0,0 +1,19 @@ +-- SPDX-License-Identifier: GPL-2.0-or-later + +with HW.GFX.GMA; +with HW.GFX.GMA.Display_Probing; + +use HW.GFX.GMA; +use HW.GFX.GMA.Display_Probing; + +private package GMA.Mainboard is + + ports : constant Port_List := + (eDP, + DP1, + DP2, + HDMI1, + HDMI2, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c new file mode 100644 index 0000000000..277b27c838 --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c @@ -0,0 +1,199 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include "../../variant.h" + +static const struct pad_config gpio_table[] = { + /* ------- GPIO Community 0 ------- */ + + /* ------- GPIO Group GPP_A ------- */ + PAD_CFG_NF(GPP_A0, NONE, DEEP, NF1), /* -KBRC */ + PAD_CFG_NF(GPP_A1, NATIVE, DEEP, NF1), /* LPC_AD0 */ + PAD_CFG_NF(GPP_A2, NATIVE, DEEP, NF1), /* LPC_AD1 */ + PAD_CFG_NF(GPP_A3, NATIVE, DEEP, NF1), /* LPC_AD2 */ + PAD_CFG_NF(GPP_A4, NATIVE, DEEP, NF1), /* LPC_AD3 */ + PAD_CFG_NF(GPP_A5, NONE, DEEP, NF1), /* -LPC_FRAME */ + PAD_CFG_NF(GPP_A6, NONE, DEEP, NF1), /* IRQSER */ + PAD_CFG_NF(GPP_A7, NONE, DEEP, NF1), /* -TPM_IRQ */ + PAD_CFG_NF(GPP_A8, NONE, DEEP, NF1), /* -CLKRUN */ + PAD_CFG_NF(GPP_A9, DN_20K, DEEP, NF1), /* LPCCLK_EC_24M */ + PAD_CFG_NF(GPP_A10, DN_20K, DEEP, NF1), /* LPCCLK_DEBUG_24M */ + PAD_CFG_NF(GPP_A11, NONE, DEEP, NF1), /* LPCCLK_DEBUG_24M */ + PAD_NC(GPP_A12, NONE), + PAD_CFG_NF(GPP_A13, NATIVE, DEEP, NF1), /* -SUSWARN */ + PAD_CFG_NF(GPP_A14, NATIVE, DEEP, NF1), /* -SUS_STAT */ + PAD_CFG_NF(GPP_A15, NATIVE, DEEP, NF1), /* -SUSACK*/ + PAD_NC(GPP_A16, NONE), + PAD_NC(GPP_A17, NONE), + PAD_NC(GPP_A18, NONE), + PAD_NC(GPP_A19, NONE), + PAD_NC(GPP_A20, NONE), + PAD_NC(GPP_A21, NONE), + PAD_NC(GPP_A22, NONE), + PAD_NC(GPP_A23, NONE), + + /* ------- GPIO Group GPP_B ------- */ + PAD_CFG_NF(GPP_B0, NONE, DEEP, NF1), /* CORE_VID0 */ + PAD_CFG_NF(GPP_B1, NONE, DEEP, NF1), /* CORE_VID1 */ + PAD_NC(GPP_B2, NONE), + PAD_NC(GPP_B3, NONE), + PAD_NC(GPP_B4, NONE), + PAD_CFG_NF(GPP_B5, NONE, DEEP, NF1), /* -CLKREQ_PCIE0 (TB) */ + PAD_CFG_NF(GPP_B6, NONE, DEEP, NF1), /* -CLKREQ_PCIE1 (WLAN1) */ + PAD_CFG_NF(GPP_B7, NONE, DEEP, NF1), /* -CLKREQ_PCIE2 (GBE) */ + PAD_CFG_NF(GPP_B8, NONE, DEEP, NF1), /* -CLKREQ_PCIE3 (WLAN2) */ + PAD_CFG_NF(GPP_B9, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_B10, NONE, DEEP, NF1), /* -CLKREQ_PCIE5 (SSD) */ + PAD_CFG_NF(GPP_B11, NONE, DEEP, NF1), /* -EXT_PWR_GATE */ + PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1), /* -PCH_SLP_S0 */ + PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1), /* -PLTRST */ + PAD_CFG_NF(GPP_B14, NATIVE, DEEP, NF1), /* PCH_SPKR */ + PAD_CFG_GPO(GPP_B15, 0, DEEP), /* NFC_DLREQ */ + PAD_NC(GPP_B16, NONE), + PAD_NC(GPP_B17, NONE), + PAD_NC(GPP_B18, NONE), + PAD_NC(GPP_B19, NONE), + PAD_NC(GPP_B20, NONE), + PAD_NC(GPP_B21, NONE), + PAD_NC(GPP_B22, NONE), + PAD_NC(GPP_B23, NONE), + + /* ------- GPIO Community 1 ------- */ + + /* ------- GPIO Group GPP_C ------- */ + PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1), /* SMB_CLK */ + PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1), /* SMB_DATA */ + PAD_NC(GPP_C2, NONE), + PAD_CFG_NF(GPP_C3, NONE, DEEP, NF1), /* SML0_CLK */ + PAD_CFG_NF(GPP_C4, NONE, DEEP, NF1), /* SML0_DATA */ + PAD_NC(GPP_C5, NONE), + PAD_CFG_NF(GPP_C6, NONE, DEEP, NF1), /* EC_SCL2 */ + PAD_CFG_NF(GPP_C7, NONE, DEEP, NF1), /* EC_SDA2 */ + PAD_NC(GPP_C8, NONE), + PAD_NC(GPP_C9, NONE), + PAD_NC(GPP_C10, NONE), + PAD_NC(GPP_C11, NONE), + PAD_NC(GPP_C12, NONE), + PAD_NC(GPP_C13, NONE), + PAD_NC(GPP_C14, NONE), + PAD_NC(GPP_C15, NONE), + PAD_CFG_NF(GPP_C16, NONE, DEEP, NF1), /* I2C0_DATA */ + PAD_CFG_NF(GPP_C17, NONE, DEEP, NF1), /* I2C0_CLK */ + PAD_NC(GPP_C18, NONE), + PAD_NC(GPP_C19, NONE), + PAD_CFG_GPI_SCI(GPP_C20, NONE, DEEP, EDGE_SINGLE, INVERT), /* -TBT_PLUG_EVENT */ + PAD_CFG_GPO(GPP_C21, 0, DEEP), /* TBT_FORCE_PWR */ + PAD_CFG_GPI_SCI(GPP_C22, NONE, DEEP, EDGE_SINGLE, INVERT), /* -EC_SCI */ + PAD_CFG_GPI_SCI(GPP_C23, NONE, DEEP, EDGE_SINGLE, INVERT), /* -EC_WAKE */ + + /* ------- GPIO Group GPP_D ------- */ + PAD_CFG_GPI_TRIG_OWN(GPP_D0, UP_20K, DEEP, OFF, ACPI), /* DOCKID0 */ + PAD_CFG_GPI_TRIG_OWN(GPP_D1, UP_20K, DEEP, OFF, ACPI), /* DOCKID1 */ + PAD_CFG_GPI_TRIG_OWN(GPP_D2, UP_20K, DEEP, OFF, ACPI), /* DOCKID2 */ + PAD_CFG_GPI_TRIG_OWN(GPP_D3, UP_20K, DEEP, OFF, ACPI), /* DOCKID3 */ + PAD_NC(GPP_D4, NONE), + PAD_NC(GPP_D5, NONE), + PAD_NC(GPP_D6, NONE), + PAD_NC(GPP_D7, NONE), + PAD_NC(GPP_D8, NONE), + PAD_NC(GPP_D9, UP_20K), + PAD_NC(GPP_D10, NONE), + PAD_NC(GPP_D11, UP_20K), + PAD_NC(GPP_D12, UP_20K), + PAD_NC(GPP_D13, NONE), + PAD_NC(GPP_D14, NONE), + PAD_NC(GPP_D15, NONE), + PAD_NC(GPP_D16, NONE), + PAD_NC(GPP_D17, NONE), /* DDI_PRIORITY1 */ + PAD_CFG_GPO(GPP_D18, 0, DEEP), /* DDI_PRIORITY2 */ + PAD_NC(GPP_D19, NONE), + PAD_NC(GPP_D20, NONE), + PAD_CFG_GPI_TRIG_OWN(GPP_D21, UP_20K, DEEP, OFF, ACPI), /* -DOCK_CAP_ID */ + PAD_CFG_GPI_TRIG_OWN(GPP_D22, UP_20K, DEEP, OFF, ACPI), /* -NFC_DTCT */ + PAD_NC(GPP_D23, NONE), + + /* ------- GPIO Group GPP_E ------- */ + PAD_NC(GPP_E0, NONE), + PAD_CFG_GPI_TRIG_OWN(GPP_E1, NONE, DEEP, OFF, ACPI), + PAD_CFG_NF(GPP_E2, NONE, DEEP, NF1), /* -PE_DTCT */ + PAD_NC(GPP_E3, NONE), + PAD_CFG_GPO(GPP_E4, 1, DEEP), /* NFC_ON */ + PAD_CFG_NF(GPP_E5, NONE, RSMRST, NF1), + PAD_CFG_NF(GPP_E6, NONE, RSMRST, NF1), /* SATA2_DEVSLP */ + PAD_NC(GPP_E7, NONE), + PAD_NC(GPP_E8, NONE), + PAD_CFG_NF(GPP_E9, NONE, DEEP, NF1), /* -USB_PORT0_OC0 */ + PAD_CFG_NF(GPP_E10, NONE, DEEP, NF1), /* -USB_PORT1_OC1 */ + PAD_CFG_NF(GPP_E11, NONE, DEEP, NF1), /* -USB_PORT2_OC2 */ + PAD_CFG_GPI_APIC_HIGH(GPP_E12, NONE, DEEP), /* NFC_INT */ + PAD_CFG_NF(GPP_E13, NONE, DEEP, NF1), /* DDIP1_HPD */ + PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1), /* DDIP2_HPD */ + PAD_NC(GPP_E15, NONE), + PAD_NC(GPP_E16, NONE), + PAD_CFG_NF(GPP_E17, NONE, DEEP, NF1), /* EDP_HPD */ + PAD_NC(GPP_E18, NONE), + PAD_CFG_NF(GPP_E19, NONE, DEEP, NF1), + PAD_CFG_NF(GPP_E20, NONE, DEEP, NF1), /* DDIP2_CTRLCLK */ + PAD_CFG_NF(GPP_E21, NONE, DEEP, NF1), /* DDIP2_CTRLDATA */ + PAD_NC(GPP_E22, NONE), + PAD_NC(GPP_E23, NONE), + + /* ------- GPIO Community 2 ------- */ + + /* -------- GPIO Group GPD -------- */ + PAD_CFG_NF(GPD0, NONE, PWROK, NF1), /* -BATLOW */ + PAD_CFG_NF(GPD1, NATIVE, PWROK, NF1), /* AC_PRESENT */ + PAD_CFG_NF(GPD2, NATIVE, PWROK, NF1), /* -LANWAKE */ + PAD_CFG_NF(GPD3, UP_20K, PWROK, NF1), /* -PWRSW_EC */ + PAD_CFG_NF(GPD4, NONE, PWROK, NF1), /* -PCH_SLP_S3 */ + PAD_CFG_NF(GPD5, NONE, PWROK, NF1), /* -PCH_SLP_S4 */ + PAD_CFG_NF(GPD6, NONE, PWROK, NF1), /* -PCH_SLP_M */ + PAD_NC(GPD7, NONE), + PAD_CFG_NF(GPD8, NONE, PWROK, NF1), /* SUSCLK_32K */ + PAD_CFG_NF(GPD9, NONE, PWROK, NF1), /* -PCH_SLP_WLAN */ + PAD_CFG_NF(GPD10, NONE, PWROK, NF1), /* -PCH_SLP_S5 */ + PAD_CFG_NF(GPD11, NONE, PWROK, NF1), /* LANPHYPC */ + + /* ------- GPIO Community 3 ------- */ + + /* ------- GPIO Group GPP_F ------- */ + PAD_NC(GPP_F0, NONE), /* NFC_ACTIVE */ + PAD_NC(GPP_F1, NONE), + PAD_NC(GPP_F2, NONE), + PAD_NC(GPP_F3, NONE), + PAD_NC(GPP_F4, NONE), /* -WWAN_RESET */ + PAD_NC(GPP_F5, UP_20K), + PAD_CFG_GPI_TRIG_OWN(GPP_F6, UP_20K, RSMRST, OFF, ACPI), /* -MIC_HW_EN (R961 to GND) */ + PAD_CFG_GPI_TRIG_OWN(GPP_F7, UP_20K, RSMRST, OFF, ACPI), /* -INT_MIC_DTCT */ + PAD_CFG_GPI_TRIG_OWN(GPP_F8, UP_20K, RSMRST, OFF, ACPI), /* WWAN_CFG0 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F9, UP_20K, RSMRST, OFF, ACPI), /* WWAN_CFG1 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F10, UP_20K, RSMRST, OFF, ACPI), /* WWAN_CFG2 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F11, UP_20K, RSMRST, OFF, ACPI), /* WWAN_CFG3 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F12, UP_20K, RSMRST, OFF, ACPI), /* PLANARID0 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F13, UP_20K, RSMRST, OFF, ACPI), /* PLANARID1 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F14, UP_20K, RSMRST, OFF, ACPI), /* PLANARID2 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F15, UP_20K, RSMRST, OFF, ACPI), /* PLANARID3 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F16, UP_20K, RSMRST, OFF, ACPI), /* MEMORYID0 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F17, UP_20K, RSMRST, OFF, ACPI), /* MEMORYID1 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F18, UP_20K, RSMRST, OFF, ACPI), /* MEMORYID2 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F19, UP_20K, RSMRST, OFF, ACPI), /* MEMORYID3 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F20, UP_20K, RSMRST, OFF, ACPI), /* MEMORYID4 */ + PAD_NC(GPP_F21, UP_20K), + PAD_CFG_GPI_TRIG_OWN(GPP_F22, UP_20K, RSMRST, OFF, ACPI), /* -TAMPER_SW_DTCT */ + PAD_CFG_GPI_TRIG_OWN(GPP_F23, UP_20K, RSMRST, OFF, ACPI), /* -SC_DTCT */ + + /* ------- GPIO Group GPP_G ------- */ + PAD_NC(GPP_G0, NONE), + PAD_NC(GPP_G1, NONE), + PAD_NC(GPP_G2, NONE), + PAD_NC(GPP_G3, NONE), + PAD_NC(GPP_G4, NONE), + PAD_NC(GPP_G5, NONE), + PAD_NC(GPP_G6, NONE), + PAD_NC(GPP_G7, NONE), +}; + +void variant_config_gpios(void) +{ + gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table)); +} diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/hda_verb.c b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/hda_verb.c new file mode 100644 index 0000000000..1901127390 --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/hda_verb.c @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + 0x10ec0298, // Vendor/Device ID: Realtek ALC298 + 0x17aa224b, // Subsystem ID + 12, + AZALIA_SUBVENDOR(0, 0x17aa224b), + + AZALIA_PIN_CFG(0, 0x12, AZALIA_PIN_DESC( + AZALIA_INTEGRATED, + AZALIA_INTERNAL, + AZALIA_MIC_IN, + AZALIA_OTHER_DIGITAL, + AZALIA_COLOR_UNKNOWN, + AZALIA_NO_JACK_PRESENCE_DETECT, + 4, 0 + )), + AZALIA_PIN_CFG(0, 0x13, 0x40000000), // does not describe a jack or internal device + AZALIA_PIN_CFG(0, 0x14, AZALIA_PIN_DESC( + AZALIA_INTEGRATED, + AZALIA_INTERNAL, + AZALIA_SPEAKER, + AZALIA_OTHER_ANALOG, + AZALIA_COLOR_UNKNOWN, + AZALIA_NO_JACK_PRESENCE_DETECT, + 1, 0 + )), + AZALIA_PIN_CFG(0, 0x17, AZALIA_PIN_CFG_NC(0)), + AZALIA_PIN_CFG(0, 0x18, AZALIA_PIN_DESC( + AZALIA_JACK, + AZALIA_EXTERNAL_PRIMARY_CHASSIS | AZALIA_LEFT, + AZALIA_MIC_IN, + AZALIA_STEREO_MONO_1_8, + AZALIA_BLACK, + AZALIA_JACK_PRESENCE_DETECT, + 3, 0 + )), + AZALIA_PIN_CFG(0, 0x19, AZALIA_PIN_CFG_NC(0)), + AZALIA_PIN_CFG(0, 0x1a, AZALIA_PIN_CFG_NC(0)), + AZALIA_PIN_CFG(0, 0x1d, 0x40648605), // does not describe a jack or internal device + AZALIA_PIN_CFG(0, 0x1e, AZALIA_PIN_CFG_NC(0)), + AZALIA_PIN_CFG(0, 0x1f, AZALIA_PIN_CFG_NC(0)), + AZALIA_PIN_CFG(0, 0x21, AZALIA_PIN_DESC( + AZALIA_JACK, + AZALIA_EXTERNAL_PRIMARY_CHASSIS | AZALIA_LEFT, + AZALIA_HP_OUT, + AZALIA_STEREO_MONO_1_8, + AZALIA_BLACK, + AZALIA_JACK_PRESENCE_DETECT, + 2, 0 + )), + + 0x80862809, // Vendor/Device ID: Intel Skylake HDMI + 0x80860101, // Subsystem ID + 4, + AZALIA_SUBVENDOR(2, 0x80860101), + + AZALIA_PIN_CFG(2, 0x05, AZALIA_PIN_DESC( + AZALIA_JACK, + AZALIA_DIGITAL_DISPLAY, + AZALIA_DIGITAL_OTHER_OUT, + AZALIA_OTHER_DIGITAL, + AZALIA_COLOR_UNKNOWN, + AZALIA_JACK_PRESENCE_DETECT, + 1, 0 + )), + AZALIA_PIN_CFG(2, 0x06, AZALIA_PIN_DESC( + AZALIA_JACK, + AZALIA_DIGITAL_DISPLAY, + AZALIA_DIGITAL_OTHER_OUT, + AZALIA_OTHER_DIGITAL, + AZALIA_COLOR_UNKNOWN, + AZALIA_JACK_PRESENCE_DETECT, + 1, 0 + )), + AZALIA_PIN_CFG(2, 0x07, AZALIA_PIN_DESC( + AZALIA_JACK, + AZALIA_DIGITAL_DISPLAY, + AZALIA_DIGITAL_OTHER_OUT, + AZALIA_OTHER_DIGITAL, + AZALIA_COLOR_UNKNOWN, + AZALIA_JACK_PRESENCE_DETECT, + 1, 0 + )), +}; + +const u32 pc_beep_verbs[] = {}; +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/memory_init_params.c b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/memory_init_params.c new file mode 100644 index 0000000000..001e934b3a --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/memory_init_params.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include + +static const struct pad_config memory_id_gpio_table[] = { + PAD_CFG_GPI_TRIG_OWN(GPP_F16, UP_20K, DEEP, OFF, ACPI), /* MEMORYID0 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F17, UP_20K, DEEP, OFF, ACPI), /* MEMORYID1 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F18, UP_20K, DEEP, OFF, ACPI), /* MEMORYID2 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F19, UP_20K, DEEP, OFF, ACPI), /* MEMORYID3 */ + PAD_CFG_GPI_TRIG_OWN(GPP_F20, UP_20K, DEEP, OFF, ACPI), /* MEMORYID4 */ +}; + +void mainboard_memory_init_params(FSPM_UPD *mupd) +{ + int spd_idx; + char spd_name[20]; + size_t spd_size; + + FSP_M_CONFIG *mem_cfg = &mupd->FspmConfig; + mem_cfg->DqPinsInterleaved = true; /* DDR_DQ in interleave mode */ + mem_cfg->CaVrefConfig = 2; /* VREF_CA to CH_A and VREF_DQ_B to CH_B */ + mem_cfg->MemorySpdDataLen = CONFIG_DIMM_SPD_SIZE; + + /* Get SPD for soldered RAM SPD (CH A) */ + gpio_configure_pads(memory_id_gpio_table, ARRAY_SIZE(memory_id_gpio_table)); + + spd_idx = gpio_get(GPP_F16) | gpio_get(GPP_F17) << 1 | gpio_get(GPP_F18) << 2 | + gpio_get(GPP_F19) << 3 | gpio_get(GPP_F20) << 4; + printk(BIOS_DEBUG, "Detected MEMORY_ID = %d\n", spd_idx); + snprintf(spd_name, sizeof(spd_name), "spd_%d.bin", spd_idx); + mem_cfg->MemorySpdPtr00 = (uintptr_t)cbfs_map(spd_name, &spd_size); + + /* Get SPD for memory slot (CH B) */ + struct spd_block blk = { .addr_map = { [1] = 0x51, } }; + get_spd_smbus(&blk); + dump_spd_info(&blk); + + mem_cfg->MemorySpdPtr10 = (uintptr_t)blk.spd_array[1]; +} diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/overridetree.cb b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/overridetree.cb new file mode 100644 index 0000000000..dc2143d3eb --- /dev/null +++ b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/overridetree.cb @@ -0,0 +1,86 @@ +# SPDX-License-Identifier: GPL-2.0-only + +chip soc/intel/skylake + device domain 0 on + device ref south_xhci on + register "usb2_ports" = "{ + [0] = USB2_PORT_MID(OC0), // JUSB1 (USB-A always on) + [1] = USB2_PORT_MID(OC1), // JUSB2 (USB-A) + [2] = USB2_PORT_MID(OC_SKIP), // N/C + [3] = USB2_PORT_MID(OC_SKIP), // JUSBC (USB docking station) + [4] = USB2_PORT_MID(OC_SKIP), // JFPR (smartcard slot) + [5] = USB2_PORT_MID(OC_SKIP), // JWWAN (M.2 WWAN USB) + [6] = USB2_PORT_MID(OC_SKIP), // JWLAN (M.2 WLAN USB) + [7] = USB2_PORT_MID(OC_SKIP), // JCAM (webcam) + [8] = USB2_PORT_MID(OC_SKIP), // JFPR (fingerprint reader) + [9] = USB2_PORT_MID(OC_SKIP), // JLCD (touch panel) + }" + register "usb3_ports" = "{ + [0] = USB3_PORT_DEFAULT(OC0), // JUSB1 (USB-A always on) + [1] = USB3_PORT_DEFAULT(OC1), // JUSB2 (USB-A) + [2] = USB3_PORT_DEFAULT(OC_SKIP), // JSD (SD card reader) + [3] = USB3_PORT_DEFAULT(OC_SKIP), // JUSB3 (USB docking station) + }" + end + + # PCIe + # PCIe Controller 1 - 1x2 + 2x1 + # PCIE 1-2 - RP1 - TB - CLKOUT0 - CLKREQ0 + # PCIE 3 - RP3 - WLAN#1 - CLKOUT1 - CLKREQ1 + # PCIE 4 - GBE - GBE - CLKOUT2 - CLKREQ2 + # PCIe Controller 2 - 4x1 + # PCIE 5 - RP5 - WLAN#2 - CLKOUT3 - CLKREQ3 + # PCIE 6-8 - n/c + # PCIe Controller 3 - 1x4 (lane reversal) + # PCIE 9-12 - RP9 - SSD - CLKOUT5 - CLKREQ5 + + # TB - x2 + device ref pcie_rp1 on + register "PcieRpClkReqSupport[0]" = "true" + register "PcieRpClkReqNumber[0]" = "0" + register "PcieRpClkSrcNumber[0]" = "0" + register "PcieRpAdvancedErrorReporting[0]" = "true" + register "PcieRpHotPlug[0]" = "true" + end + + # M.2 WLAN#1 - x1 + device ref pcie_rp3 on + register "PcieRpClkReqSupport[2]" = "true" + register "PcieRpClkReqNumber[2]" = "1" + register "PcieRpClkSrcNumber[2]" = "1" + register "PcieRpAdvancedErrorReporting[2]" = "true" + register "PcieRpLtrEnable[2]" = "true" + smbios_slot_desc "SlotTypeM2Socket1_DP" "SlotLengthOther" "M.2/A 2230" "SlotDataBusWidth1X" + end + + # Ethernet (clobbers RP4) + device ref gbe on + register "LanClkReqSupported" = "true" + register "LanClkReqNumber" = "2" + register "PcieRpClkReqNumber[3]" = "2" + register "PcieRpClkSrcNumber[3]" = "2" + register "EnableLanLtr" = "true" + register "EnableLanK1Off" = "true" + end + + # M.2 WLAN#2 - x1 + device ref pcie_rp5 on + register "PcieRpClkReqSupport[4]" = "true" + register "PcieRpClkReqNumber[4]" = "3" + register "PcieRpClkSrcNumber[4]" = "3" + register "PcieRpAdvancedErrorReporting[4]" = "true" + register "PcieRpLtrEnable[4]" = "true" + smbios_slot_desc "SlotTypeM2Socket1_DP" "SlotLengthOther" "M.2/A 2230" "SlotDataBusWidth1X" + end + + # M.2 2280 SSD - x4 (RP9) + device ref pcie_rp9 on + register "PcieRpClkReqSupport[8]" = "true" + register "PcieRpClkReqNumber[8]" = "5" + register "PcieRpClkSrcNumber[8]" = "5" + register "PcieRpAdvancedErrorReporting[8]" = "true" + register "PcieRpLtrEnable[8]" = "true" + smbios_slot_desc "SlotTypeM2Socket3" "SlotLengthOther" "M.2/M 2280" "SlotDataBusWidth4X" + end + end +end diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_0.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_0.bin new file mode 100644 index 0000000000000000000000000000000000000000..86f39ddb55ea9fb58d5e5699637636ef597c734e GIT binary patch literal 512 zcmY!u;9+)EWZ+<6U|?oq29gXMJYRrxPEL*>N67~+1r7#Qh7a1t+8`-(puhlu3{YAD YT>%dM8_BI;nL`dsaHtp+rc($20I8n}l>h($ literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_1.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_1.bin new file mode 100644 index 0000000000000000000000000000000000000000..df0f6e58b79286a4aeb690c5027adf7a1f5f668b GIT binary patch literal 512 zcmY!u;9+i6oWQ}rz`)GN3?vyic)kGXoSYm%j*<^t3LFfq3@hZcwLwzoK!E`Q8KATR Yx&j>hH(SqvWezd%<4`dwOs5b40B_I==>Px# literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_10.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_10.bin new file mode 100644 index 0000000000000000000000000000000000000000..24f0d8992bc5244c62488da9633e4885f52f3e22 GIT binary patch literal 512 zcmY!ucy&~OfFg0G3Wp`)phiHWn5fv$6q PvjPw>z-1}5hGzN!nb#F$ literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_11.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_11.bin new file mode 100644 index 0000000000000000000000000000000000000000..59b6b9e78263c42aae367ab7d4a784d888f30efe GIT binary patch literal 512 zcmY!ucy(6E*fVuXjUqlKwqu$iMg7pDLK literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_14.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_14.bin new file mode 100644 index 0000000000000000000000000000000000000000..a2a64a5e1adada3fc00b2e4edc60c77e610881a9 GIT binary patch literal 512 zcmY!u<-XH%N8S?V-1R3%^a4B#wurhqmHql_HU=XnZ$x{Q& z*$Oh{IYWaWKO+-03?$Qx1CPkm2-nu217(^xhPas;8kw1RMCls2o4FbS#SI&DT;VDQ GCj$V){1T)9 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_15.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_15.bin new file mode 100644 index 0000000000000000000000000000000000000000..a2a64a5e1adada3fc00b2e4edc60c77e610881a9 GIT binary patch literal 512 zcmY!u<-XH%N8S?V-1R3%^a4B#wurhqmHql_HU=XnZ$x{Q& z*$Oh{IYWaWKO+-03?$Qx1CPkm2-nu217(^xhPas;8kw1RMCls2o4FbS#SI&DT;VDQ GCj$V){1T)9 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_16.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_16.bin new file mode 100644 index 0000000000000000000000000000000000000000..a64a5a93fb4aef4d5f63d79cb2582731b9ac5063 GIT binary patch literal 512 NcmZQz7zHCa1ONg600961 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_17.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_17.bin new file mode 100644 index 0000000000000000000000000000000000000000..5f23e86606094d3e5d2011db902ebd4a500bbffa GIT binary patch literal 512 zcmY!u<-XHc140(BZf(&^dxD+@TSQ$QOn`kgpFo@WIT6 z8Mi42GcX`n2w8lrIa@)p&l&!{<7bq|r;x^SwThHl(6E*fVuXjUqobjFu$i-OkeQ!u Vn70BDFf^?FkI#a;_$28g2LNS*7)Ag9 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_19.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_19.bin new file mode 100644 index 0000000000000000000000000000000000000000..857da9c9828cdac842329f6cef4539283777268b GIT binary patch literal 512 zcmY!uenuv07)YiW2Og2B5w5L42g)>Y3~@6xG%_>sh|)E7H}WzBiW@fQc)?W; GP6hy+m=i1j literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_2.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_2.bin new file mode 100644 index 0000000000000000000000000000000000000000..b5b14cf2dfa06ae183b0379da4dc825129e1589f GIT binary patch literal 512 zcmY!u;9+)EWZ+<6U|?oq29gXMJU@VRUS6IcN7)B11r7#Qh7a1tdLSuupuhlu3{YAD XT>%b$v*cE=%%S%6I8=-Z(%b$+tzbnnL|62aHtp+rc($20QGqazW@LL literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_4.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_4.bin new file mode 100644 index 0000000000000000000000000000000000000000..829f149547bc24859646c33d5926938d7a1b90cb GIT binary patch literal 512 zcmY!u;9+)EWZ+<6U|?oq29gXMJYRrxPEL*>N67~+1r7#Qh7a1tdLSuupuhlu3{YAD XT>%b$o8(ro%%OI594bbI=@bG0z{d&v literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_5.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_5.bin new file mode 100644 index 0000000000000000000000000000000000000000..a64a5a93fb4aef4d5f63d79cb2582731b9ac5063 GIT binary patch literal 512 NcmZQz7zHCa1ONg600961 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_6.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_6.bin new file mode 100644 index 0000000000000000000000000000000000000000..a64a5a93fb4aef4d5f63d79cb2582731b9ac5063 GIT binary patch literal 512 NcmZQz7zHCa1ONg600961 literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_7.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_7.bin new file mode 100644 index 0000000000000000000000000000000000000000..940f1e3cd8e5bd9ea32a82a14edcdcbc8132d8c7 GIT binary patch literal 512 zcmY!u<-XH%N8S?V-1R3%^a4B#wurjQW(9mG0U=XnZ$x{Q& z0UPq1A)%L_QJxwGl4(Y*BAFWD+8T7AOcTeDU_*B^6OSleBX=`bLy)jxgN`d)<=|uh E020*^DF6Tf literal 0 HcmV?d00001 diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_8.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_8.bin new file mode 100644 index 0000000000000000000000000000000000000000..30c84410d417ef7afa8705c93cdb64a9f4e915a0 GIT binary patch literal 512 zcmY!uW!enxp}7)YiWinU~FgllWifig`TLxK(6%}hL^bdB7N9Ss$Lz^FmT39fQ* FG5`?&65ap+ literal 0 HcmV?d00001