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 0000000000..049f56ec22 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt differ 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 0000000000..86f39ddb55 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_0.bin differ 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 0000000000..df0f6e58b7 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_1.bin differ 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 0000000000..24f0d8992b Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_10.bin differ 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 0000000000..59b6b9e782 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_11.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_12.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_12.bin new file mode 100644 index 0000000000..93be0ac94f Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_12.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_13.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_13.bin new file mode 100644 index 0000000000..171a272bc7 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_13.bin differ 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 0000000000..a2a64a5e1a Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_14.bin differ 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 0000000000..a2a64a5e1a Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_15.bin differ 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 0000000000..a64a5a93fb Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_16.bin differ 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 0000000000..5f23e86606 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_17.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_18.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_18.bin new file mode 100644 index 0000000000..05633943eb Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_18.bin differ 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 0000000000..857da9c982 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_19.bin differ 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 0000000000..b5b14cf2df Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_2.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_20.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_20.bin new file mode 100644 index 0000000000..a64a5a93fb Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_20.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_3.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_3.bin new file mode 100644 index 0000000000..d73736008a Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_3.bin differ 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 0000000000..829f149547 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_4.bin differ 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 0000000000..a64a5a93fb Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_5.bin differ 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 0000000000..a64a5a93fb Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_6.bin differ 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 0000000000..940f1e3cd8 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_7.bin differ 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 0000000000..30c84410d4 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_8.bin differ diff --git a/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_9.bin b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_9.bin new file mode 100644 index 0000000000..7facef55b9 Binary files /dev/null and b/src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/spd/spd_9.bin differ