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 <jcrode@gmx.net> Reviewed-on: https://review.coreboot.org/c/coreboot/+/89638 Reviewed-by: Patrick Rudolph <patrick.rudolph@9elements.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
This commit is contained in:
parent
8a6f9bf731
commit
668d643e5c
31 changed files with 461 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
BIN
src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt
Normal file
BIN
src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/data.vbt
Normal file
Binary file not shown.
|
|
@ -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;
|
||||
199
src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c
Normal file
199
src/mainboard/lenovo/sklkbl_thinkpad/variants/t470s/gpio.c
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <soc/gpio.h>
|
||||
#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));
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <device/azalia_device.h>
|
||||
|
||||
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;
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <cbfs.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/gpio.h>
|
||||
#include <soc/romstage.h>
|
||||
#include <spd_bin.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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];
|
||||
}
|
||||
|
|
@ -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
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue