Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions configs/config.lenovo_thinkpad_t460s_edk2
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
CONFIG_LOCALVERSION="v0.9.0-rc1"
CONFIG_CCACHE=y
# CONFIG_COLLECT_TIMESTAMPS is not set
CONFIG_NO_STAGE_CACHE=y
CONFIG_VENDOR_LENOVO=y
CONFIG_FMDFILE="src/mainboard/lenovo/sklkbl_thinkpad/variants/t460s/board.fmd"
# CONFIG_NO_POST is not set
# CONFIG_MAINBOARD_SUPPORTS_KABYLAKE_DUAL is not set
# CONFIG_MAINBOARD_SUPPORTS_KABYLAKE_QUAD is not set
CONFIG_IFD_BIN_PATH="ifd.bin"
CONFIG_ME_BIN_PATH="me.bin"
CONFIG_GBE_BIN_PATH="gbe.bin"
CONFIG_HAVE_IFD_BIN=y
CONFIG_BOARD_LENOVO_T460S=y
CONFIG_PAYLOAD_EDK2=y
CONFIG_ALWAYS_ALLOW_ABOVE_4G_ALLOCATION=y
CONFIG_HAVE_ME_BIN=y
CONFIG_HAVE_GBE_BIN=y
# CONFIG_RESOURCE_ALLOCATION_TOP_DOWN is not set
CONFIG_EDK2_CBMEM_LOGGING=y
# CONFIG_TPM2 is not set
CONFIG_TPM1=y
CONFIG_TPM=y
11 changes: 11 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ config BOARD_LENOVO_SKLKBL_THINKPAD_COMMON
select SPD_READ_BY_WORD
select SYSTEM_TYPE_LAPTOP

config BOARD_LENOVO_T460S
bool
select BOARD_LENOVO_SKLKBL_THINKPAD_COMMON

config BOARD_LENOVO_T480
bool
select BOARD_LENOVO_SKLKBL_THINKPAD_COMMON
Expand All @@ -38,13 +42,20 @@ config MAINBOARD_DIR
default "lenovo/sklkbl_thinkpad"

config VARIANT_DIR
default "t460s" if BOARD_LENOVO_T460S
default "t480" if BOARD_LENOVO_T480
default "t480s" if BOARD_LENOVO_T480S

config OVERRIDE_DEVICETREE
default "variants/\$(CONFIG_VARIANT_DIR)/overridetree.cb"

config MAINBOARD_PART_NUMBER
default "T460s" if BOARD_LENOVO_T480S
default "T480" if BOARD_LENOVO_T480
default "T480s" if BOARD_LENOVO_T480S

config MAINBOARD_SMBIOS_PRODUCT_NAME
default "T460s" if BOARD_LENOVO_T480S
default "T480" if BOARD_LENOVO_T480
default "T480s" if BOARD_LENOVO_T480S

Expand Down
3 changes: 3 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/Kconfig.name
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@ config BOARD_LENOVO_T480

config BOARD_LENOVO_T480S
bool "ThinkPad T480s"

config BOARD_LENOVO_T460S
bool "ThinkPad T460s"
11 changes: 11 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/Makefile.mk
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,14 @@ spd_$(1).bin-type := raw
endef
$(foreach n,$(SPD_BINS),$(eval $(call SPD_template,$(n))))
endif

# Add files spd_0.bin to spd_9.bin to the cbfs image
ifeq ($(CONFIG_BOARD_LENOVO_T480S),y)
SPD_BINS := $(shell seq 0 9)
define SPD_template
cbfs-files-y += spd_$(1).bin
spd_$(1).bin-file := variants/$(VARIANT_DIR)/spd/spd_$(1).bin
spd_$(1).bin-type := raw
endef
$(foreach n,$(SPD_BINS),$(eval $(call SPD_template,$(n))))
endif
9 changes: 5 additions & 4 deletions src/mainboard/lenovo/sklkbl_thinkpad/devicetree.cb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ chip soc/intel/skylake
register "PmConfigSlpAMinAssert" = "3" # 2s

device domain 0 on
subsystemid 0x17aa 0x225d inherit
device ref igpu on
register "gfx" = "GMA_STATIC_DISPLAYS(0)"
register "panel_cfg" = "{
Expand All @@ -23,10 +24,10 @@ chip soc/intel/skylake
device ref sa_thermal on end
device ref thermal on end
device ref south_xhci on end
device ref sata on
register "SataPortsEnable[2]" = "1"
register "SataPortsDevSlp[2]" = "1"
end
# device ref sata on
# register "SataPortsEnable[2]" = "1"
# register "SataPortsDevSlp[2]" = "1"
# end
device ref lpc_espi on
register "serirq_mode" = "SERIRQ_CONTINUOUS"

Expand Down
40 changes: 40 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/variants/t460s/board.fmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
FLASH 16M {
SI_ALL 7M {
SI_DESC 4K
SI_ME
}

RW_MISC 424K {
UNIFIED_MRC_CACHE(PRESERVE) 128K {
RECOVERY_MRC_CACHE 64K
RW_MRC_CACHE 64K
}
SMMSTORE(PRESERVE) 256K
RW_SHARED 0x4000 {
SHARED_DATA@0x0 0x2000
VBLOCK_DEV@0x2000 0x2000
}
RW_NVRAM(PRESERVE) 24K
}

CONSOLE 0x20000

BOOTSPLASH(CBFS) 1M

RW_SECTION_A {
VBLOCK_A 0x2000
FW_MAIN_A(CBFS)
RW_FWID_A 0x100
}

WP_RO@0xC00000 0x400000 {
RO_VPD(PRESERVE)@0x0 0x4000
RO_SECTION@0x4000 0x3fc000 {
FMAP@0x0 0x800
RO_FRID@0x800 0x100
RO_FRID_PAD@0x900 0x700
GBB@0x1000 0x3000
COREBOOT(CBFS)@0x4000 0x3f8000
}
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -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;
202 changes: 202 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/variants/t460s/gpio.c

Large diffs are not rendered by default.

99 changes: 99 additions & 0 deletions src/mainboard/lenovo/sklkbl_thinkpad/variants/t460s/hda_verb.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/* SPDX-License-Identifier: GPL-2.0-only */

#include <device/azalia_device.h>

const u32 cim_verb_data[] = {
// Realtek ALC293
0x10ec0293, // Vendor/Device ID
0x17aa2233, // Subsystem ID
11, // Number of initialization verbs

AZALIA_SUBVENDOR(0, 0x17aa2233),

AZALIA_PIN_CFG(0, 0x12, AZALIA_PIN_DESC(
AZALIA_INTEGRATED,
AZALIA_INTERNAL,
AZALIA_MIC_IN,
AZALIA_OTHER_ANALOG,
AZALIA_COLOR_UNKNOWN,
AZALIA_NO_JACK_PRESENCE_DETECT,
3, 0
)),
AZALIA_PIN_CFG(0, 0x13, 0x40000000), // undefined / reserved

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, 0x15, 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,
4, 0
)),

AZALIA_PIN_CFG(0, 0x18, AZALIA_PIN_CFG_NC(0)), // not connected
AZALIA_PIN_CFG(0, 0x19, AZALIA_PIN_CFG_NC(0)), // not connected

AZALIA_PIN_CFG(0, 0x1a, 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,
2, 0
)),

AZALIA_PIN_CFG(0, 0x1b, AZALIA_PIN_CFG_NC(0)), // not connected

AZALIA_PIN_CFG(0, 0x1d, 0x40738105), // passthrough modem hand?
AZALIA_PIN_CFG(0, 0x1e, AZALIA_PIN_CFG_NC(0)), // not connected

// Intel Skylake HDMI Audio
0x80862809, // HDMI Codec Vendor ID
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;
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* SPDX-License-Identifier: GPL-2.0-only */

#include <soc/romstage.h>
#include <spd_bin.h>

void mainboard_memory_init_params(FSPM_UPD *mupd)
{
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 memory slots */
struct spd_block blk = { .addr_map = { 0x50, 0x51, } };
get_spd_smbus(&blk);
dump_spd_info(&blk);

mem_cfg->MemorySpdPtr00 = (uintptr_t)blk.spd_array[0];
mem_cfg->MemorySpdPtr10 = (uintptr_t)blk.spd_array[1];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# SPDX-License-Identifier: GPL-2.0-only

chip soc/intel/skylake
device domain 0 on
device ref sata on
register "SataPortsEnable[1]" = "1"
register "SataPortsDevSlp[1]" = "1"
end

# USB port map
device ref south_xhci on
register "usb2_ports" = "{
[0] = USB2_PORT_MID(OC0), // Right USB-A
[1] = USB2_PORT_MID(OC1), // Left USB-A
[2] = USB2_PORT_MID(OC_SKIP), // Smartcard
[3] = USB2_PORT_MID(OC_SKIP), // USB-C or WWAN
[4] = USB2_PORT_MID(OC_SKIP), // Webcam
[5] = USB2_PORT_MID(OC_SKIP), // WLAN Bluetooth
[6] = USB2_PORT_MID(OC_SKIP),
[7] = USB2_PORT_MID(OC_SKIP),
[8] = USB2_PORT_MID(OC_SKIP),
[9] = USB2_PORT_MID(OC_SKIP),
}"

register "usb3_ports" = "{
[0] = USB3_PORT_DEFAULT(OC0), // Right USB-A
[1] = USB3_PORT_DEFAULT(OC1), // Left USB-A
[2] = USB3_PORT_DEFAULT(OC_SKIP), // maybe unused
[3] = USB3_PORT_DEFAULT(OC_SKIP), // maybe USB-C
}"
end

# PCIe configuration:

# SD Card reader (Realtek RTS522A) on RP1
device ref pcie_rp1 on
register "PcieRpClkReqSupport[0]" = "0"
register "PcieRpClkReqNumber[0]" = "0"
register "PcieRpClkSrcNumber[0]" = "0"
register "PcieRpAdvancedErrorReporting[0]" = "1"
register "PcieRpLtrEnable[0]" = "1"
end

device generic 0 alias dgpu off end

# WLAN (Intel 8260) on RP3
device ref pcie_rp3 on
register "PcieRpClkReqSupport[2]" = "0"
register "PcieRpClkReqNumber[2]" = "1"
register "PcieRpClkSrcNumber[2]" = "1"
register "PcieRpAdvancedErrorReporting[2]" = "1"
register "PcieRpLtrEnable[2]" = "1"
end

# NVMe SSD on RP5
device ref pcie_rp5 on
register "PcieRpClkReqSupport[4]" = "0"
register "PcieRpClkReqNumber[4]" = "5"
register "PcieRpClkSrcNumber[4]" = "5"
register "PcieRpAdvancedErrorReporting[4]" = "1"
register "PcieRpLtrEnable[4]" = "1"
end

# Ethernet
device ref gbe on
register "LanClkReqSupported" = "0"
register "LanClkReqNumber" = "2"
register "EnableLanLtr" = "1"
register "EnableLanK1Off" = "1"
end

end
end