mb/novacustom/mtl-h: Add discrete graphics variant

Add NovaCustom V540TNx and V560TNx, which are variants of the mtl-h
baseboard, but with discrete graphics, compared to the igpu variant.
Other notable differences:

- 16" models come with TAS5825 Smart Amp
- Realtek RTL8111 network adapter
- 14" models have only one SSD slot
- The non-Thunderbolt USB-C port has DP Alt mode with displayport lanes
  sourced from the discrete graphics
- HDMI port is wired to discrete graphics

NVIDIA dGPU ASL code will be added in subsequent patches.

TEST=Build V560TNx with UEFIPayload and boot to payload

Change-Id: I2b8194c486de1ba3e04aa74ed63caa7a151fbb8b
Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/86790
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Michał Żygowski <michal.zygowski@3mdeb.com>
This commit is contained in:
Michał Kopeć 2025-03-10 15:07:54 +01:00 committed by Matt DeVillier
commit 66d119480c
14 changed files with 2952 additions and 5 deletions

View file

@ -23,6 +23,20 @@ config BOARD_NOVACUSTOM_MTLH_COMMON
select SPD_READ_BY_WORD
select SYSTEM_TYPE_LAPTOP
config BOARD_NOVACUSTOM_V5X0TNX_BASE
bool
select EC_DASHARO_EC_DGPU
select BOARD_NOVACUSTOM_MTLH_COMMON
select DRIVERS_I2C_TAS5825M
config BOARD_NOVACUSTOM_V540TNX
bool
select BOARD_NOVACUSTOM_V5X0TNX_BASE
config BOARD_NOVACUSTOM_V560TNX
bool
select BOARD_NOVACUSTOM_V5X0TNX_BASE
config BOARD_NOVACUSTOM_V5X0TU_BASE
bool
select BOARD_NOVACUSTOM_MTLH_COMMON
@ -43,15 +57,18 @@ config MAINBOARD_DIR
config VARIANT_DIR
default "igpu" if BOARD_NOVACUSTOM_V5X0TU_BASE
default "dgpu" if BOARD_NOVACUSTOM_V5X0TNX_BASE
config OVERRIDE_DEVICETREE
default "variants/\$(CONFIG_VARIANT_DIR)/overridetree.cb"
config MAINBOARD_PART_NUMBER
default "V54x_6x_TU" if BOARD_NOVACUSTOM_V5X0TU_BASE
default "V5xTNC_TND_TNE" if BOARD_NOVACUSTOM_V5X0TNX_BASE
config MAINBOARD_SMBIOS_PRODUCT_NAME
default "V54x_6x_TU" if BOARD_NOVACUSTOM_V5X0TU_BASE
default "V5xTNC_TND_TNE" if BOARD_NOVACUSTOM_V5X0TNX_BASE
config MAINBOARD_SMBIOS_MANUFACTURER
default "Notebook"
@ -59,6 +76,8 @@ config MAINBOARD_SMBIOS_MANUFACTURER
config MAINBOARD_VERSION
default "V540TU" if BOARD_NOVACUSTOM_V540TU
default "V560TU" if BOARD_NOVACUSTOM_V560TU
default "V540TNx" if BOARD_NOVACUSTOM_V540TNX
default "V560TNx" if BOARD_NOVACUSTOM_V560TNX
config MAINBOARD_FAMILY
string

View file

@ -1,7 +1,13 @@
comment "Meteor Lake H"
config BOARD_NOVACUSTOM_V540TNX
bool "V540TNx (14\", discrete graphics)"
config BOARD_NOVACUSTOM_V560TNX
bool "V560TNx (16\", discrete graphics)"
config BOARD_NOVACUSTOM_V540TU
bool "V540TU (14\")"
bool "V540TU (14\", integrated graphics)"
config BOARD_NOVACUSTOM_V560TU
bool "V560TU (16\")"
bool "V560TU (16\", integrated graphics)"

View file

@ -11,5 +11,6 @@ romstage-y += variants/$(VARIANT_DIR)/gpio.c
ramstage-y += ramstage.c
ramstage-y += variants/${VARIANT_DIR}/hda_verb.c
ramstage-y += variants/$(VARIANT_DIR)/gpio.c
ramstage-y += variants/$(VARIANT_DIR)/ramstage.c
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += fadt.c

View file

@ -12,6 +12,6 @@
#endif
void mainboard_configure_early_gpios(void);
void mainboard_configure_gpios(void);
void variant_configure_gpios(void);
#endif

View file

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef MAINBOARD_VARIANTS_H
#define MAINBOARD_VARIANTS_H
void variant_devtree_update(void);
#endif

View file

@ -2,6 +2,7 @@
#include <ec/dasharo/ec/acpi.h>
#include <mainboard/gpio.h>
#include <mainboard/variants.h>
#include <smbios.h>
#include <soc/ramstage.h>
@ -20,9 +21,15 @@ smbios_wakeup_type smbios_system_wakeup_type(void)
return SMBIOS_WAKEUP_TYPE_POWER_SWITCH;
}
void __weak variant_devtree_update(void)
{
/* Override dev tree settings per board */
}
static void mainboard_init(void *chip_info)
{
mainboard_configure_gpios();
variant_configure_gpios();
variant_devtree_update();
}
struct chip_operations mainboard_ops = {

Binary file not shown.

View file

@ -0,0 +1,329 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <mainboard/gpio.h>
#include <soc/gpio.h>
#include <gpio.h>
#include <timer.h>
#include <delay.h>
static const struct pad_config gpio_table[] = {
/* ------- GPIO Community 0 ------- */
/* ------- GPIO Group CPU ------- */
/* ------- GPIO Group V ------- */
PAD_CFG_NF(GPP_V00, UP_20K, DEEP, NF1), /* BATLOW# */
PAD_CFG_NF(GPP_V01, NATIVE, DEEP, NF1), /* ACPRESENT */
PAD_CFG_GPI_TRIG_OWN(GPP_V02, NATIVE, DEEP, OFF, ACPI), /* GPIO - CPU_LAN_WAKEUP# */
PAD_CFG_NF(GPP_V03, UP_20K, DEEP, NF1), /* PWRBTN# */
PAD_CFG_NF(GPP_V04, NONE, DEEP, NF1), /* SLP_S3# */
PAD_CFG_NF(GPP_V05, NONE, DEEP, NF1), /* SLP_S4# */
PAD_CFG_NF(GPP_V06, NONE, DEEP, NF1), /* SLP_A# */
PAD_CFG_GPO(GPP_V07, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_V08, NONE, DEEP, NF1), /* SUSCLK */
PAD_CFG_NF(GPP_V09, NONE, DEEP, NF1), /* SLP_WLAN# */
PAD_CFG_NF(GPP_V10, NONE, DEEP, NF1), /* SLP_S5# */
PAD_CFG_GPO(GPP_V11, 1, DEEP), /* GPIO - GPIO_LAN_EN */
PAD_CFG_NF(GPP_V12, NONE, DEEP, NF1), /* SLP_LAN# */
PAD_CFG_GPO(GPP_V13, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_V14, NONE, DEEP, NF1), /* WAKE# */
PAD_CFG_GPO(GPP_V15, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_V16, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_V17, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_V18, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_V19, NONE, DEEP, NF1), /* n/a */
PAD_CFG_NF(GPP_V20, NONE, DEEP, NF1), /* n/a */
PAD_CFG_NF(GPP_V21, NONE, DEEP, NF1), /* n/a */
PAD_CFG_GPO(GPP_V22, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_V23, 0, DEEP), /* GPIO */
/* ------- GPIO Group GPP_C ------- */
PAD_CFG_NF(GPP_C00, UP_20K, DEEP, NF1), /* SMBCLK */
PAD_CFG_NF(GPP_C01, UP_20K, DEEP, NF1), /* SMBDATA */
PAD_CFG_GPI_TRIG_OWN(GPP_C02, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_NF(GPP_C03, NONE, DEEP, NF1), /* SML0CLK */
PAD_CFG_NF(GPP_C04, NONE, DEEP, NF1), /* SML0DATA */
PAD_CFG_GPO(GPP_C05, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_C06, NONE, RSMRST, NF1), /* SML1CLK */
PAD_CFG_NF(GPP_C07, NONE, RSMRST, NF1), /* SML1DATA */
PAD_CFG_GPO(GPP_C08, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C09, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C10, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_C11, NONE, DEEP, NF1), /* SRCCLKREQ2# */
PAD_CFG_NF(GPP_C12, NONE, DEEP, NF1), /* SRCCLKREQ3# */
PAD_CFG_GPO(GPP_C13, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C14, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_C15, NONE, DEEP, OFF, ACPI), /* GPIO - CPU_DGPU_PWRGD */
PAD_CFG_NF(GPP_C16, NONE, DEEP, NF1), /* TBT_LSX0_TXD */
PAD_CFG_NF(GPP_C17, NONE, DEEP, NF1), /* TBT_LSX0_RXD */
PAD_CFG_GPO(GPP_C18, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C19, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C20, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C21, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C22, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_C23, 0, DEEP), /* GPIO */
/* ------- GPIO Community 1 ------- */
/* ------- GPIO Group GPP_A ------- */
PAD_CFG_NF(GPP_A00, UP_20K, DEEP, NF1), /* ESPI_IO0 */
PAD_CFG_NF(GPP_A01, UP_20K, DEEP, NF1), /* ESPI_IO1 */
PAD_CFG_NF(GPP_A02, UP_20K, DEEP, NF1), /* ESPI_IO2 */
PAD_CFG_NF(GPP_A03, UP_20K, DEEP, NF1), /* ESPI_IO3 */
PAD_CFG_NF(GPP_A04, UP_20K, DEEP, NF1), /* ESPI_CS0# */
PAD_CFG_NF(GPP_A05, UP_20K, DEEP, NF1), /* ESPI_CLK */
PAD_CFG_NF(GPP_A06, NONE, DEEP, NF1), /* ESPI_RESET# */
PAD_CFG_GPO(GPP_A07, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_A08, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_A09, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_A10, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_A11, 0, DEEP), /* GPIO - ADDS_CODE */
PAD_CFG_GPI_TRIG_OWN(GPP_A12, NONE, DEEP, OFF, ACPI), /* GPIO - WLAN_WAKEUP# */
PAD_CFG_TERM_GPO(GPP_A13, 1, UP_20K, PLTRST), /* GPIO - M2_SSD2_RST# */
PAD_CFG_GPI_TRIG_OWN(GPP_A14, UP_20K, DEEP, OFF, ACPI), /* GPIO - NVVDD_ALERT# */
PAD_CFG_GPO(GPP_A15, 0, DEEP), /* GPIO - CPU_SWI# */
PAD_CFG_NF(GPP_A16, UP_20K, DEEP, NF1), /* RSVD - ESPI_ALERT0# */
PAD_CFG_GPI_INT(GPP_A17, NONE, PLTRST, LEVEL), /* GPIO - TP_ATTN# */
PAD_CFG_GPO(GPP_A18, 0, DEEP), /* GPIO - TEST_R (ANX7411) */
PAD_CFG_GPI_APIC(GPP_A19, NONE, DEEP, LEVEL, NONE), /* GPIO - INTP_OUT (ANX7411) */
PAD_CFG_GPO(GPP_A20, 1, DEEP), /* GPIO - LAN_PLT_RST# */
PAD_CFG_NF(GPP_A21, NATIVE, DEEP, NF1), /* PMCALERT# */
PAD_NC(GPP_A22, NATIVE), /* GPIO */
PAD_NC(GPP_A23, NATIVE), /* GPIO */
/* ------- GPIO Group GPP_E ------- */
PAD_CFG_GPI_TRIG_OWN(GPP_E00, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID7 */
PAD_CFG_GPI_APIC(GPP_E01, UP_20K, DEEP, LEVEL, NONE), /* GPIO - TPM_PIRQ# */
PAD_CFG_GPI_TRIG_OWN(GPP_E02, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID4 */
PAD_CFG_GPI_TRIG_OWN(GPP_E03, NONE, DEEP, OFF, ACPI), /* GPIO - CPU_CNVI_WAKE# */
PAD_CFG_GPO(GPP_E04, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E05, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_E06, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPO(GPP_E07, 0, DEEP), /* GPIO - CPU_SMI# */
PAD_CFG_GPO(GPP_E08, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E09, 1, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E10, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_E11, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID6 */
PAD_CFG_NF(GPP_E12, NONE, DEEP, NF8), /* I2C4_SDA - ANX7411 */
PAD_CFG_NF(GPP_E13, NONE, DEEP, NF8), /* I2C4_SCL - ANX7411 */
PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1), /* DDSP_HPDA */
PAD_CFG_GPO(GPP_E15, 0, DEEP), /* GPIO - CPU_SCI# */
PAD_CFG_NF(GPP_E16, NONE, DEEP, NF2), /* VRALERT# */
PAD_CFG_GPI_TRIG_OWN(GPP_E17, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID5 */
PAD_CFG_GPO(GPP_E18, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E19, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E20, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E21, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_E22, 0, DEEP), /* GPIO */
PAD_NC(GPP_E23, NONE), /* GPIO */
PAD_NC(GPP_THC0_GSPI_CLK_LPBK, NONE), /* GPIO */
/* ------- GPIO Community 3 ------- */
/* ------- GPIO Group GPP_H ------- */
PAD_CFG_GPO(GPP_H00, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H01, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H02, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H03, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_H04, NONE, DEEP, NF2), /* CNV_MFUART2_RXD */
PAD_CFG_NF(GPP_H05, NONE, DEEP, NF2), /* CNV_MFUART2_TXD */
PAD_CFG_NF(GPP_H06, NONE, DEEP, NF1), /* I2C3_SDA */
PAD_CFG_NF(GPP_H07, NONE, DEEP, NF1), /* I2C3_SCL */
PAD_CFG_NF(GPP_H08, NONE, DEEP, NF1), /* UART0_RXD */
PAD_CFG_NF(GPP_H09, NONE, DEEP, NF1), /* UART0_TXD */
PAD_CFG_GPO(GPP_H10, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H11, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H12, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_H13, NONE, DEEP, NF1), /* PROC_C10_GATE# */
PAD_CFG_GPO(GPP_H14, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H15, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H16, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H17, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_H18, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_H19, NONE, DEEP, NF1), /* I2C0_SDA */
PAD_CFG_NF(GPP_H20, NONE, DEEP, NF1), /* I2C0_SCL */
PAD_CFG_NF(GPP_H21, NONE, DEEP, NF1), /* I2C1_SDA */
PAD_CFG_NF(GPP_H22, NONE, DEEP, NF1), /* I2C1_SCL */
PAD_NC(GPP_H23, NONE), /* GPIO */
PAD_NC(GPP_LPI3C1_CLK_LPBK, NATIVE), /* GPIO */
PAD_CFG_NF(GPP_LPI3C0_CLK_LPBK, NATIVE, DEEP, NF2), /* n/a */
/* ------- GPIO Group GPP_F ------- */
PAD_CFG_NF(GPP_F00, NONE, DEEP, NF1), /* CNV_BRI_DT */
PAD_CFG_NF(GPP_F01, UP_20K, DEEP, NF1), /* CNV_BRI_RSP */
PAD_CFG_NF(GPP_F02, NONE, DEEP, NF1), /* CNV_RGI_DT */
PAD_CFG_NF(GPP_F03, UP_20K, DEEP, NF1), /* CNV_RGI_RSP */
PAD_CFG_NF(GPP_F04, NONE, DEEP, NF1), /* CNV_RF_RESET# */
PAD_CFG_NF(GPP_F05, NONE, DEEP, NF3), /* MODEM_CLKREQ */
PAD_CFG_NF(GPP_F06, NONE, DEEP, NF1), /* CNVI_GNSS_PA_BLANKING */
PAD_CFG_GPO(GPP_F07, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_F08, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_F09, NONE, DEEP, OFF, ACPI), /* GPIO - TPM_DET */
PAD_CFG_GPO(GPP_F10, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_F11, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID3 */
PAD_CFG_NF(GPP_F12, NONE, DEEP, NF8), /* I2C5_SCL - Smart AMP */
PAD_CFG_NF(GPP_F13, NONE, DEEP, NF8), /* I2C5_SDA - Smart AMP */
PAD_CFG_GPI_TRIG_OWN(GPP_F14, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID1 */
PAD_CFG_GPI_TRIG_OWN(GPP_F15, NONE, DEEP, OFF, ACPI), /* GPIO - BOARD_ID2 */
PAD_CFG_GPI_TRIG_OWN(GPP_F16, NONE, DEEP, OFF, ACPI), /* GPIO - GPIO4_GC6_NVVDD_EN */
PAD_CFG_GPI_TRIG_OWN(GPP_F17, NONE, PLTRST, OFF, ACPI), /* GPIO - CPU_GC6_FB_EN */
PAD_CFG_GPO(GPP_F18, 0, DEEP), /* GPIO -CCD_WP# */
PAD_CFG_GPO(GPP_F19, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_F20, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_F21, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_F22, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_F23, 0, DEEP), /* GPIO */
PAD_NC(GPP_THC1_GSPI1_CLK_LPBK, NONE), /* GPIO */
PAD_NC(GPP_GSPI0A_CLK_LOOPBK, NONE), /* GPIO */
/* ------- GPIO Group SPI ------- */
/* ------- GPIO Group VGPIO3 ------- */
PAD_CFG_NF(GPP_VGPIO3_USB0, NONE, DEEP, NF1), /* GPP_VGPIO3_USB0 */
PAD_CFG_NF(GPP_VGPIO3_USB1, NONE, DEEP, NF1), /* GPP_VGPIO3_USB1 */
PAD_CFG_NF(GPP_VGPIO3_USB2, NONE, DEEP, NF1), /* GPP_VGPIO3_USB2 */
PAD_CFG_NF(GPP_VGPIO3_USB3, NONE, DEEP, NF1), /* GPP_VGPIO3_USB3 */
PAD_CFG_NF(GPP_VGPIO3_USB4, NONE, DEEP, NF1), /* GPP_VGPIO3_USB4 */
PAD_CFG_NF(GPP_VGPIO3_USB5, NONE, DEEP, NF1), /* GPP_VGPIO3_USB5 */
PAD_CFG_NF(GPP_VGPIO3_USB6, NONE, DEEP, NF1), /* GPP_VGPIO3_USB6 */
PAD_CFG_NF(GPP_VGPIO3_USB7, NONE, DEEP, NF1), /* GPP_VGPIO3_USB7 */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_TS0, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_TS1, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_THC0, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_THC1, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_THC2, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO3_THC3, NONE, DEEP, OFF, ACPI), /* GPIO */
/* ------- GPIO Community 4 ------- */
/* ------- GPIO Group GPP_S ------- */
PAD_CFG_GPO(GPP_S00, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S01, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S02, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S03, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S04, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S05, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S06, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_S07, 0, DEEP), /* GPIO */
/* ------- GPIO Group JTAG ------- */
/* ------- GPIO Community 5 ------- */
/* ------- GPIO Group GPP_B ------- */
PAD_CFG_GPO(GPP_B00, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B01, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B02, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B03, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B04, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B05, 0, DEEP), /* GPIO - CPU_KBCRST# */
PAD_CFG_GPO(GPP_B06, 0, DEEP), /* GPIO - ROM_I2C_EN */
PAD_CFG_GPO(GPP_B07, 0, DEEP), /* GPIO - PANTONE_WP# */
PAD_CFG_GPO(GPP_B08, 0, DEEP), /* GPIO - PS8461_SW (DDS for eDP) */
PAD_CFG_GPO(GPP_B09, 0, DEEP), /* GPIO - DGPU_RST#_PCH */
PAD_CFG_GPI_SCI(GPP_B10, NONE, PLTRST, EDGE_BOTH, INVERT), /* GPIO - NV Type-C DP HPD */
PAD_CFG_GPI_SCI(GPP_B11, NONE, PLTRST, EDGE_BOTH, INVERT), /* GPIO - NV HDMI HPD */
PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1), /* SLP_S0# */
PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1), /* PLTRST# */
PAD_CFG_GPO(GPP_B14, 0, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_B15, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPO(GPP_B16, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B17, 1, DEEP), /* GPIO - CPU_GPIO_LANRTD3 */
PAD_CFG_GPO(GPP_B18, 1, DEEP), /* GPIO - PCH_BT_EN */
PAD_CFG_GPO(GPP_B19, 1, DEEP), /* GPIO - WIFI_RF_EN */
PAD_CFG_GPO(GPP_B20, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_B21, 0, PLTRST), /* GPIO - TBT_FORCE_PWR */
PAD_CFG_GPO(GPP_B22, 0, DEEP), /* GPIO */
PAD_CFG_TERM_GPO(GPP_B23, 0, DN_20K, DEEP), /* GPIO */
PAD_CFG_NF(GPP_ACI3C0_CLK_LPBK, NATIVE, DEEP, NF4), /* n/a */
/* ------- GPIO Group GPP_D ------- */
PAD_CFG_GPO(GPP_D00, 1, DEEP), /* GPIO - SB_BLON */
PAD_CFG_GPO(GPP_D01, 1, DEEP), /* GPIO - SSD2_PWR_EN */
PAD_CFG_GPO(GPP_D02, 1, DEEP), /* GPIO - M2_SSD1_RST# */
PAD_CFG_GPO(GPP_D03, 0, DEEP), /* GPIO - CPU_DGPU_PWR_EN */
PAD_CFG_GPO(GPP_D04, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D05, 1, DEEP), /* GPIO - SSD1_PWR_EN */
PAD_CFG_GPO(GPP_D06, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D07, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D08, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D09, 0, DEEP), /* GPIO */
PAD_CFG_NF(GPP_D10, NONE, DEEP, NF1), /* HDA_BCLK */
PAD_CFG_NF(GPP_D11, NATIVE, DEEP, NF1), /* HDA_SYNC */
PAD_CFG_NF(GPP_D12, NATIVE, DEEP, NF1), /* HDA_SDO */
PAD_CFG_NF(GPP_D13, NATIVE, DEEP, NF1), /* HDA_SDI0 */
PAD_CFG_GPO(GPP_D14, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D15, 0, DEEP), /* GPIO */
PAD_CFG_GPO(GPP_D16, 0, DEEP), /* GPIO - GPIO_SPK_MUTE */
PAD_CFG_NF(GPP_D17, NONE, DEEP, NF1), /* HDA_RST# */
PAD_CFG_NF(GPP_D18, NONE, DEEP, NF1), /* SRCCLKREQ6# */
PAD_CFG_NF(GPP_D19, NONE, DEEP, NF1), /* SRCCLKREQ7# */
PAD_CFG_NF(GPP_D20, NONE, DEEP, NF1), /* SRCCLKREQ8# */
PAD_CFG_NF(GPP_D21, NONE, DEEP, NF2), /* SRCCLKREQ5# */
PAD_CFG_NF(GPP_D22, NATIVE, DEEP, NF1), /* n/a */
PAD_CFG_NF(GPP_D23, NATIVE, DEEP, NF1), /* n/a */
PAD_CFG_NF(GPP_BOOTHALT_B, UP_20K, DEEP, NF1), /* GPP_BOOTHALT_B */
/* ------- GPIO Group VGPIO ------- */
PAD_CFG_GPO(GPP_VGPIO00, 1, DEEP), /* GPIO */
PAD_CFG_GPI_TRIG_OWN(GPP_VGPIO04, NONE, DEEP, OFF, ACPI), /* GPIO */
PAD_CFG_GPO(GPP_VGPIO05, 1, DEEP), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO06, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO07, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO08, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO09, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_NF(GPP_VGPIO10, NONE, DEEP, NF1), /* GPP_VGPIO10 */
PAD_CFG_NF(GPP_VGPIO11, NONE, DEEP, NF1), /* GPP_VGPIO11 */
PAD_CFG_NF(GPP_VGPIO12, NONE, DEEP, NF1), /* GPP_VGPIO12 */
PAD_CFG_NF(GPP_VGPIO13, NONE, DEEP, NF1), /* GPP_VGPIO13 */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO18, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO19, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO20, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_GPIO_BIDIRECT(GPP_VGPIO21, 0, NONE, DEEP, LEVEL, ACPI), /* GPIO */
PAD_CFG_NF(GPP_VGPIO22, NONE, DEEP, NF1), /* GPP_VGPIO22 */
PAD_CFG_NF(GPP_VGPIO23, NONE, DEEP, NF1), /* GPP_VGPIO23 */
PAD_CFG_NF(GPP_VGPIO24, NONE, DEEP, NF1), /* GPP_VGPIO24 */
PAD_CFG_NF(GPP_VGPIO25, NONE, DEEP, NF1), /* GPP_VGPIO25 */
PAD_CFG_NF(GPP_VGPIO30, NONE, DEEP, NF3), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO31, NONE, DEEP, NF3), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO32, NONE, DEEP, NF3), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO33, NONE, DEEP, NF3), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO34, NONE, DEEP, NF1), /* GPP_VGPIO34 */
PAD_CFG_NF(GPP_VGPIO35, NONE, DEEP, NF1), /* GPP_VGPIO35 */
PAD_CFG_NF(GPP_VGPIO36, NONE, DEEP, NF1), /* GPP_VGPIO36 */
PAD_CFG_NF(GPP_VGPIO37, NONE, DEEP, NF1), /* GPP_VGPIO37 */
PAD_CFG_NF(GPP_VGPIO40, NONE, DEEP, NF2), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO41, NONE, DEEP, NF2), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO42, NONE, DEEP, NF2), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO43, NONE, DEEP, NF2), /* RESERVED */
PAD_CFG_NF(GPP_VGPIO44, NONE, DEEP, NF1), /* GPP_VGPIO44 */
PAD_CFG_NF(GPP_VGPIO45, NONE, DEEP, NF1), /* GPP_VGPIO45 */
PAD_CFG_NF(GPP_VGPIO46, NONE, DEEP, NF1), /* GPP_VGPIO46 */
PAD_CFG_NF(GPP_VGPIO47, NONE, DEEP, NF1), /* GPP_VGPIO47 */
};
#define DGPU_RST_N GPP_B09
#define DGPU_PWR_EN GPP_D03
#define DGPU_PWRGD GPP_C15
/* Pad configuration was generated automatically using intelp2m utility */
void variant_configure_gpios(void)
{
bool result;
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
/* dGPU power on sequence */
mdelay(4);
gpio_set(DGPU_PWR_EN, 1);
result = wait_ms(200, gpio_get(DGPU_PWRGD) == 1);
if (result) {
printk(BIOS_INFO, "dGPU powered on\n");
gpio_set(DGPU_RST_N, 1);
} else {
printk(BIOS_ERR, "dGPU failed to power on, turning off\n");
gpio_set(DGPU_PWR_EN, 0);
}
mdelay(50);
}

View file

@ -0,0 +1,87 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <console/console.h>
#include <device/azalia_device.h>
#include <gpio.h>
const u32 cim_verb_data[] = {
/* Realtek, ALC245 */
0x10ec0245, /* Vendor ID */
0x1558a741, /* Subsystem ID */
30, /* Number of entries */
AZALIA_SUBVENDOR(0, 0x1558a741),
AZALIA_RESET(1),
0x1271C30, 0x1271D01, 0x1271EA6, 0x1271F90,
0x1371C00, 0x1371D00, 0x1371E00, 0x1371F40,
0x1871CF0, 0x1871D11, 0x1871E11, 0x1871F41,
0x1971CF0, 0x1971D11, 0x1971E11, 0x1971F41,
0x1A71CF0, 0x1A71D11, 0x1A71E11, 0x1A71F41,
0x1B71CF0, 0x1B71D11, 0x1B71E11, 0x1B71F41,
0x1D71C2D, 0x1D71D9B, 0x1D71E68, 0x1D71F40,
0x1E71CF0, 0x1E71D11, 0x1E71E11, 0x1E71F41,
0x2171C20, 0x2171D10, 0x2171E21, 0x2171F04,
0x5B50006, 0x5B40011, 0x205001A, 0x204810B,
0x205004A, 0x2042010, 0x2050038, 0x2044909,
0x5C50000, 0x5C43D82, 0x5C50000, 0x5C43D82,
0x5350000, 0x534201A, 0x5350000, 0x534201A,
0x535001D, 0x5340800, 0x535001E, 0x5340800,
0x5350003, 0x5341EC4, 0x5350004, 0x5340000,
0x5450000, 0x5442000, 0x545001D, 0x5440800,
0x545001E, 0x5440800, 0x5450003, 0x5441EC4,
0x5450004, 0x5440000, 0x5350000, 0x534A01A,
0x205003C, 0x204F175, 0x205003C, 0x204F135,
0x2050040, 0x2048800, 0x5A50001, 0x5A4001F,
0x2050010, 0x2040020, 0x2050010, 0x2040020,
0x170500, 0x170500, 0x5A50004, 0x5A40113,
0x2050008, 0x2046A8C, 0x2050076, 0x204F000,
0x205000E, 0x20465C0, 0x2050033, 0x2048580,
0x2050069, 0x204FDA8, 0x2050068, 0x2040000,
0x2050003, 0x2040002, 0x2050069, 0x2040000,
0x2050068, 0x2040001, 0x205002E, 0x204290E,
0x2050010, 0x2040020, 0x2050010, 0x2040020,
/* Intel Meteor Lake HDMI */
0x8086281d, /* Vendor ID */
0x80860101, /* Subsystem ID */
10, /* Number of entries */
AZALIA_SUBVENDOR(2, 0x80860101),
AZALIA_PIN_CFG(2, 0x04, 0x18560010),
AZALIA_PIN_CFG(2, 0x06, 0x18560010),
AZALIA_PIN_CFG(2, 0x08, 0x18560010),
AZALIA_PIN_CFG(2, 0x0a, 0x18560010),
AZALIA_PIN_CFG(2, 0x0b, 0x18560010),
AZALIA_PIN_CFG(2, 0x0c, 0x18560010),
AZALIA_PIN_CFG(2, 0x0d, 0x18560010),
AZALIA_PIN_CFG(2, 0x0e, 0x18560010),
AZALIA_PIN_CFG(2, 0x0f, 0x18560010),
};
const u32 pc_beep_verbs[] = {};
AZALIA_ARRAY_SIZES;
static const u32 smartamp_verbs[] = {
0x1471CF0, 0x1471D11, 0x1471E11, 0x1471F41,
0x1771C10, 0x1771D01, 0x1771E17, 0x1771F90,
};
static const u32 no_smartamp_verbs[] = {
0x1471C10, 0x1471D01, 0x1471E17, 0x1471F90,
0x1771C11, 0x1771D01, 0x1771E17, 0x1771F90,
0x205006B, 0x204A390, 0x205006B, 0x204A390,
0x205006C, 0x2040C9E, 0x205006D, 0x2040C00,
};
void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid)
{
if (gpio_get(GPP_E00)) {
printk(BIOS_INFO, "Normal amp detected\n");
azalia_program_verb_table(base, no_smartamp_verbs,
ARRAY_SIZE(no_smartamp_verbs));
} else {
printk(BIOS_INFO, "Smart amp detected\n");
azalia_program_verb_table(base, smartamp_verbs,
ARRAY_SIZE(smartamp_verbs));
}
}

View file

@ -0,0 +1,75 @@
chip soc/intel/meteorlake
# Power limits,
# PsysPL2, PsysPL3, PL4 are configured by EC at runtime
register "power_limits_config[MTL_P_682_482_CORE]" = "{
.tdp_pl1_override = 35,
.tdp_pl2_override = 64,
.tdp_pl4 = 120,
.psys_pmax = 180,
}"
# MTL SOC has additional setting for PsysPmax
register "psys_pmax_watts" = "180"
device domain 0 on
subsystemid 0x1558 0xa741 inherit
device ref pcie_rp12 on # PEG
register "pcie_rp[PCH_RP(12)]" = "{
.clk_src = 6,
.clk_req = 6,
.flags = PCIE_RP_LTR | PCIE_RP_AER | PCIE_RP_CLK_REQ_DETECT,
}"
device pci 00.0 on
subsystemid 0x1558 0xa761
end
end
device ref igpu on
register "ddi_port_A_config" = "1"
register "ddi_ports_config" = "{
[DDI_PORT_A] = DDI_ENABLE_HPD, /* eDP */
}"
end
device ref i2c0 on # Touchpad
register "serial_io_i2c_mode[PchSerialIoIndexI2C0]" = "PchSerialIoPci"
chip drivers/i2c/hid
register "generic.hid" = ""ELAN0412""
register "generic.desc" = ""ELAN Touchpad""
register "generic.irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW(GPP_A17)"
register "generic.detect" = "1"
register "hid_desc_reg_offset" = "0x01"
device i2c 15 on end
end
chip drivers/i2c/hid
register "generic.hid" = ""FTCS1000""
register "generic.desc" = ""FocalTech Touchpad""
register "generic.irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW(GPP_A17)"
register "generic.detect" = "1"
register "hid_desc_reg_offset" = "0x01"
device i2c 38 on end
end
end
device ref i2c4 on # ANX7443 USB-C Retimer
register "serial_io_i2c_mode[PchSerialIoIndexI2C4]" = "PchSerialIoPci"
end
device ref i2c5 on # TAS5825M SmartAmp
register "serial_io_i2c_mode[PchSerialIoIndexI2C5]" = "PchSerialIoPci"
chip drivers/i2c/tas5825m
register "id" = "0"
device i2c 4e on end
end
end
device ref pcie_rp5 on # GLAN
register "pcie_rp[PCH_RP(5)]" = "{
.clk_src = 2,
.clk_req = 2,
.flags = PCIE_RP_LTR | PCIE_RP_AER,
}"
chip soc/intel/common/block/pcie/rtd3
register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_V11)"
register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPP_A20)"
register "srcclk_pin" = "2"
device generic 0 on end
end
end
end
end

View file

@ -0,0 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include <mainboard/variants.h>
#include <gpio.h>
void variant_devtree_update(void)
{
struct device *i2c_amp_dev = pcidev_on_root(0x19, 1);
if (i2c_amp_dev)
i2c_amp_dev->enabled = !gpio_get(GPP_E00);
}

File diff suppressed because it is too large Load diff

View file

@ -568,7 +568,7 @@ static const struct pad_config gpio_table[] = {
PAD_CFG_NF(GPP_VGPIO47, NONE, DEEP, NF1),
};
void mainboard_configure_gpios(void)
void variant_configure_gpios(void)
{
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
}

View file

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: CC-PDDC */
/* Please update the license if adding licensable material. */
/*
* This is a placeholder, if there ever is something variant specific to
* add to ramstage, do it here.
*/