From ef886c4ede4fd09558d568e13376246fe13badf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=BBygowski?= Date: Thu, 29 Sep 2022 00:58:43 +0200 Subject: [PATCH] mb/protectli/vault_cml: Add Comet Lake 6 port board support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Żygowski Change-Id: If1b4f9c8245a082ff875ae9c6102a1c45e677d0b Reviewed-on: https://review.coreboot.org/c/coreboot/+/67940 Tested-by: build bot (Jenkins) Reviewed-by: Krystian Hebel --- Documentation/mainboard/index.md | 1 + Documentation/mainboard/protectli/vp46xx.md | 135 ++++++ .../mainboard/protectli/vp46xx_back.jpg | Bin 0 -> 38251 bytes .../mainboard/protectli/vp46xx_flash.jpg | Bin 0 -> 49530 bytes .../mainboard/protectli/vp46xx_front.jpg | Bin 0 -> 35515 bytes configs/config.protectli_vp4630_vp4650 | 13 + configs/config.protectli_vp4670 | 13 + src/mainboard/protectli/vault_cml/Kconfig | 67 +++ .../protectli/vault_cml/Kconfig.name | 5 + .../protectli/vault_cml/Makefile.inc | 14 + src/mainboard/protectli/vault_cml/acpi/ec.asl | 1 + .../protectli/vault_cml/acpi/superio.asl | 1 + src/mainboard/protectli/vault_cml/board.fmd | 15 + .../protectli/vault_cml/board_info.txt | 6 + src/mainboard/protectli/vault_cml/bootblock.c | 37 ++ .../protectli/vault_cml/cmos.default | 3 + src/mainboard/protectli/vault_cml/cmos.layout | 40 ++ src/mainboard/protectli/vault_cml/data.vbt | Bin 0 -> 4608 bytes .../protectli/vault_cml/devicetree.cb | 248 ++++++++++ src/mainboard/protectli/vault_cml/die.c | 42 ++ src/mainboard/protectli/vault_cml/dsdt.asl | 25 + .../protectli/vault_cml/gma-mainboard.ads | 17 + src/mainboard/protectli/vault_cml/gpio.c | 442 ++++++++++++++++++ src/mainboard/protectli/vault_cml/gpio.h | 11 + src/mainboard/protectli/vault_cml/hda_verb.c | 34 ++ src/mainboard/protectli/vault_cml/mainboard.c | 34 ++ src/mainboard/protectli/vault_cml/romstage.c | 44 ++ .../protectli/vault_cml/vboot-rwa.fmd | 40 ++ 28 files changed, 1288 insertions(+) create mode 100644 Documentation/mainboard/protectli/vp46xx.md create mode 100644 Documentation/mainboard/protectli/vp46xx_back.jpg create mode 100755 Documentation/mainboard/protectli/vp46xx_flash.jpg create mode 100644 Documentation/mainboard/protectli/vp46xx_front.jpg create mode 100644 configs/config.protectli_vp4630_vp4650 create mode 100644 configs/config.protectli_vp4670 create mode 100644 src/mainboard/protectli/vault_cml/Kconfig create mode 100644 src/mainboard/protectli/vault_cml/Kconfig.name create mode 100644 src/mainboard/protectli/vault_cml/Makefile.inc create mode 100644 src/mainboard/protectli/vault_cml/acpi/ec.asl create mode 100644 src/mainboard/protectli/vault_cml/acpi/superio.asl create mode 100644 src/mainboard/protectli/vault_cml/board.fmd create mode 100644 src/mainboard/protectli/vault_cml/board_info.txt create mode 100644 src/mainboard/protectli/vault_cml/bootblock.c create mode 100644 src/mainboard/protectli/vault_cml/cmos.default create mode 100644 src/mainboard/protectli/vault_cml/cmos.layout create mode 100644 src/mainboard/protectli/vault_cml/data.vbt create mode 100644 src/mainboard/protectli/vault_cml/devicetree.cb create mode 100644 src/mainboard/protectli/vault_cml/die.c create mode 100644 src/mainboard/protectli/vault_cml/dsdt.asl create mode 100644 src/mainboard/protectli/vault_cml/gma-mainboard.ads create mode 100644 src/mainboard/protectli/vault_cml/gpio.c create mode 100644 src/mainboard/protectli/vault_cml/gpio.h create mode 100644 src/mainboard/protectli/vault_cml/hda_verb.c create mode 100644 src/mainboard/protectli/vault_cml/mainboard.c create mode 100644 src/mainboard/protectli/vault_cml/romstage.c create mode 100644 src/mainboard/protectli/vault_cml/vboot-rwa.fmd diff --git a/Documentation/mainboard/index.md b/Documentation/mainboard/index.md index c6d6c362a0..2257059a2a 100644 --- a/Documentation/mainboard/index.md +++ b/Documentation/mainboard/index.md @@ -168,6 +168,7 @@ The boards in this section are not real mainboards, but emulators. - [FW2B / FW4B](protectli/fw2b_fw4b.md) - [FW6A / FW6B / FW6C](protectli/fw6.md) +- [VP4630 / VP4650 / VP4670](protectli/vp46xx.md) ## Roda diff --git a/Documentation/mainboard/protectli/vp46xx.md b/Documentation/mainboard/protectli/vp46xx.md new file mode 100644 index 0000000000..12accb52dd --- /dev/null +++ b/Documentation/mainboard/protectli/vp46xx.md @@ -0,0 +1,135 @@ +# Protectli Vault VP46xx series + +This page describes how to run coreboot on the [Protectli VP46xx]. + +![](vp46xx_front.jpg) +![](vp46xx_back.jpg) + +## Required proprietary blobs + +To build a minimal working coreboot image some blobs are required (assuming +only the BIOS region is being modified). + +```eval_rst ++-----------------+---------------------------------+---------------------+ +| Binary file | Apply | Required / Optional | ++=================+=================================+=====================+ +| FSP-M, FSP-S | Intel Firmware Support Package | Required | ++-----------------+---------------------------------+---------------------+ +| microcode | CPU microcode | Required | ++-----------------+---------------------------------+---------------------+ +``` + +FSP-M and FSP-S are obtained after splitting the Comet Lake FSP binary (done +automatically by the coreboot build system and included into the image) from +the `3rdparty/fsp` submodule. VP4630 and VP4650 use CometLake2 FSP and VP4670 +use CometLake1 FSP (see [variants](#variants) section), so be sure to select +the correct board in the coreboot's menuconfig, otherwise the platform will not +succeed on memory initialization. + +Microcode updates are automatically included into the coreboot image by build +system from the `3rdparty/intel-microcode` submodule. + +## Flashing coreboot + +### Internal programming + +The main SPI flash can be accessed using [flashrom]. The first version +supporting the chipset is flashrom v1.2. Firmware an be easily flashed +with internal programmer (either BIOS region or full image). + +### External programming + +The system has an internal flash chip which is a 16 MiB socketed SOIC-8 chip. +This chip is located on the top side of the case (the lid side). One has to +remove 4 top cover screws and lift up the lid. The flash chip is near the M.2 +WiFi slot connector. Remove the chip from socket and use a clip to program the +chip. Specifically, it's a KH25L12835F (3.3V) which is a clone of Macronix +MX25L12835F - [datasheet][MX25L12835F]. + +![](vp46xx_flash.jpg) + +## Known issues + +- After flashing with external programmer it is always required to reset RTC + with a jumper or disconnect the coin cell temporarily. Only then the platform + will boot after flashing. + +## Working + +- USB 3.0 front ports (SeaBIOS, Tianocore UEFIPayload and Linux) +- 6 Ethernet ports +- HDMI, DisplayPort and USB-C Display Port with libgfxinit and FSP GOP +- flashrom +- M.2 WiFi +- M.2 4G LTE +- M.2 SATA and NVMe +- 2.5'' SATA SSD +- eMMC +- Super I/O serial port 0 via front microUSB connector (Fintek F81232 USB to + UART adapter present on board) +- SMBus (reading SPD from DIMMs) +- Initialization with CometLake FSP 2.0 +- SeaBIOS payload (version rel-1.16.0) +- TianoCore UEFIPayload +- LPC TPM module (using Protectli custom-designed module with Infineon SLB9660) +- Reset switch +- Booting Debian, Ubuntu, FreeBSD + +## Variants + +There are 3 variants of VP46xx boards: VP4630, VP4650 and VP4670. They differ +only in used SoC and some units may come with different Super I/O chips, either +ITE IT8786E or IT8784E, but the configuration is the same on this platform. + +- VP4630: + +```eval_rst ++------------------+--------------------------------------------------+ +| CPU | Intel Core i3-10110U | ++------------------+--------------------------------------------------+ +| PCH | Intel Comet Lake U Premium | ++------------------+--------------------------------------------------+ +| Super I/O, EC | ITE IT8786E/IT8784E | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +- VP4650: + +```eval_rst ++------------------+--------------------------------------------------+ +| CPU | Intel Core i5-10210U | ++------------------+--------------------------------------------------+ +| PCH | Intel Comet Lake U Premium | ++------------------+--------------------------------------------------+ +| Super I/O, EC | ITE IT8786E/IT8784E | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +- VP4670: + +```eval_rst ++------------------+--------------------------------------------------+ +| CPU | Intel Core i7-10810U | ++------------------+--------------------------------------------------+ +| PCH | Intel Comet Lake U Premium | ++------------------+--------------------------------------------------+ +| Super I/O, EC | ITE IT8786E/IT8784E | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +## Useful links + +- [VP4600 Hardware Overview](https://protectli.com/kb/vp4600-hardware-overview/) +- [VP4630 Product Page](https://protectli.com/product/vp4630/) +- [Protectli TPM module](https://protectli.com/product/tpm-module/) + +[Protectli VP46xx]: https://protectli.com/vault-6-port/ +[MX25L12835F]: https://www.mxic.com.tw/Lists/Datasheet/Attachments/8653/MX25L12835F,%203V,%20128Mb,%20v1.6.pdf +[flashrom]: https://flashrom.org/Flashrom diff --git a/Documentation/mainboard/protectli/vp46xx_back.jpg b/Documentation/mainboard/protectli/vp46xx_back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cbe28b58edfde4ec1c667597465ecc19557f2d8 GIT binary patch literal 38251 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ⅈ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 Dye?@Ifz+USpUh)0BS&5z`r^V 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 literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/protectli/vp46xx_front.jpg b/Documentation/mainboard/protectli/vp46xx_front.jpg new file mode 100644 index 0000000000000000000000000000000000000000..425628284b2c3d961909cdaf07d8f259f29325ae GIT binary patch literal 35515 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 E*$$${+yDRo literal 0 HcmV?d00001 diff --git a/configs/config.protectli_vp4630_vp4650 b/configs/config.protectli_vp4630_vp4650 new file mode 100644 index 0000000000..af50a7e12e --- /dev/null +++ b/configs/config.protectli_vp4630_vp4650 @@ -0,0 +1,13 @@ +CONFIG_VENDOR_PROTECTLI=y +CONFIG_BOARD_PROTECTLI_VP4630_VP4650=y +CONFIG_TPM_MEASURED_BOOT=y +CONFIG_SMMSTORE_SIZE=0x40000 +CONFIG_TPM2=y +CONFIG_POST_IO_PORT=0x80 +CONFIG_PAYLOAD_EDK2=y +CONFIG_EDK2_BOOT_MANAGER_ESCAPE=y +CONFIG_EDK2_BOOT_TIMEOUT=6 +CONFIG_EDK2_FOLLOW_BGRT_SPEC=y +# CONFIG_EDK2_FULL_SCREEN_SETUP is not set +CONFIG_EDK2_SD_MMC_TIMEOUT=10 +CONFIG_EDK2_SERIAL_SUPPORT=y diff --git a/configs/config.protectli_vp4670 b/configs/config.protectli_vp4670 new file mode 100644 index 0000000000..a9decdaf6f --- /dev/null +++ b/configs/config.protectli_vp4670 @@ -0,0 +1,13 @@ +CONFIG_VENDOR_PROTECTLI=y +CONFIG_BOARD_PROTECTLI_VP4670=y +CONFIG_TPM_MEASURED_BOOT=y +CONFIG_SMMSTORE_SIZE=0x40000 +CONFIG_TPM2=y +CONFIG_POST_IO_PORT=0x80 +CONFIG_PAYLOAD_EDK2=y +CONFIG_EDK2_BOOT_MANAGER_ESCAPE=y +CONFIG_EDK2_BOOT_TIMEOUT=6 +CONFIG_EDK2_FOLLOW_BGRT_SPEC=y +# CONFIG_EDK2_FULL_SCREEN_SETUP is not set +CONFIG_EDK2_SD_MMC_TIMEOUT=10 +CONFIG_EDK2_SERIAL_SUPPORT=y diff --git a/src/mainboard/protectli/vault_cml/Kconfig b/src/mainboard/protectli/vault_cml/Kconfig new file mode 100644 index 0000000000..6e7136d6f2 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/Kconfig @@ -0,0 +1,67 @@ +if BOARD_PROTECTLI_VP4630_VP4650 || BOARD_PROTECTLI_VP4670 + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select BOARD_ROMSIZE_KB_16384 + select GFX_GMA_IGNORE_PRESENCE_STRAPS + select HAVE_ACPI_RESUME + select HAVE_ACPI_TABLES + select HAVE_CMOS_DEFAULT + select HAVE_INTEL_PTT + select HAVE_OPTION_TABLE + select INTEL_GMA_HAVE_VBT + select MAINBOARD_HAS_LIBGFXINIT + select MEMORY_MAPPED_TPM + select SEABIOS_ADD_SERCON_PORT_FILE if PAYLOAD_SEABIOS + select SOC_INTEL_COMETLAKE_1 if BOARD_PROTECTLI_VP4670 + select SOC_INTEL_COMETLAKE_2 if BOARD_PROTECTLI_VP4630_VP4650 + select SOC_INTEL_COMMON_BLOCK_HDA_VERB + select SPI_FLASH_MACRONIX + select SUPERIO_ITE_IT8786E + +config MAINBOARD_DIR + default "protectli/vault_cml" + +config MAINBOARD_PART_NUMBER + default "VP4630/VP4650" if BOARD_PROTECTLI_VP4630_VP4650 + default "VP4670" if BOARD_PROTECTLI_VP4670 + +config MAINBOARD_FAMILY + default "Vault Pro" + +config DIMM_MAX + default 2 + +config DIMM_SPD_SIZE + default 512 + +config CBFS_SIZE + default 0xa00000 + +config GFX_GMA_PANEL_1_ON_EDP + default n + +config VBOOT + select GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC + select GBB_FLAG_DISABLE_FWMP + select GBB_FLAG_DISABLE_LID_SHUTDOWN + select GBB_FLAG_DISABLE_PD_SOFTWARE_SYNC + select VBOOT_ALWAYS_ENABLE_DISPLAY + select VBOOT_NO_BOARD_SUPPORT + +config VBOOT_SLOTS_RW_A + default y if VBOOT + +config FMDFILE + default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/vboot-rwa.fmd" if VBOOT && VBOOT_SLOTS_RW_A + default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/board.fmd" + +config BEEP_ON_BOOT + bool "Beep on successful boot" + default y + help + Make the platform beep using the PC speaker in final coreboot phase. + May serve as a useful indicator in headless mode that platform is + properly booting. + +endif diff --git a/src/mainboard/protectli/vault_cml/Kconfig.name b/src/mainboard/protectli/vault_cml/Kconfig.name new file mode 100644 index 0000000000..fa2d1a03da --- /dev/null +++ b/src/mainboard/protectli/vault_cml/Kconfig.name @@ -0,0 +1,5 @@ +config BOARD_PROTECTLI_VP4630_VP4650 + bool "VP4630/VP4650" + +config BOARD_PROTECTLI_VP4670 + bool "VP4670" diff --git a/src/mainboard/protectli/vault_cml/Makefile.inc b/src/mainboard/protectli/vault_cml/Makefile.inc new file mode 100644 index 0000000000..d308320b42 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/Makefile.inc @@ -0,0 +1,14 @@ +## SPDX-License-Identifier: GPL-2.0-only + +bootblock-y += bootblock.c +bootblock-y += gpio.c + +romstage-y += romstage.c + +ramstage-y += mainboard.c +ramstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_HDA_VERB) += hda_verb.c +ramstage-y += gpio.c +ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads + +all-y += die.c +smm-y += die.c diff --git a/src/mainboard/protectli/vault_cml/acpi/ec.asl b/src/mainboard/protectli/vault_cml/acpi/ec.asl new file mode 100644 index 0000000000..853b0877b3 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/acpi/ec.asl @@ -0,0 +1 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ diff --git a/src/mainboard/protectli/vault_cml/acpi/superio.asl b/src/mainboard/protectli/vault_cml/acpi/superio.asl new file mode 100644 index 0000000000..853b0877b3 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/acpi/superio.asl @@ -0,0 +1 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ diff --git a/src/mainboard/protectli/vault_cml/board.fmd b/src/mainboard/protectli/vault_cml/board.fmd new file mode 100644 index 0000000000..37ec01e6ef --- /dev/null +++ b/src/mainboard/protectli/vault_cml/board.fmd @@ -0,0 +1,15 @@ +FLASH@0xff000000 0x1000000 { + SI_ALL 6M { + SI_DESC 4K + SI_ME + } + + UNIFIED_MRC_CACHE(PRESERVE) 128K { + RECOVERY_MRC_CACHE 64K + RW_MRC_CACHE 64K + } + + SMMSTORE(PRESERVE) 256K + FMAP 0x800 + COREBOOT(CBFS) +} diff --git a/src/mainboard/protectli/vault_cml/board_info.txt b/src/mainboard/protectli/vault_cml/board_info.txt new file mode 100644 index 0000000000..4a4632a860 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/board_info.txt @@ -0,0 +1,6 @@ +Vendor name: Protectli +Board name: VP4630/VP4650/VP4670 +Category: sbc +ROM protocol: SPI +ROM socketed: y +Flashrom support: y diff --git a/src/mainboard/protectli/vault_cml/bootblock.c b/src/mainboard/protectli/vault_cml/bootblock.c new file mode 100644 index 0000000000..9052fb8631 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/bootblock.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include "gpio.h" + +#define UART_DEV PNP_DEV(0x2e, IT8786E_SP1) +#define GPIO_DEV PNP_DEV(0x2e, IT8786E_GPIO) + +void bootblock_mainboard_early_init(void) +{ + /* CLKIN freq 24MHz, Ext CLKIN for Watchdog, Internal VCC_OK */ + ite_reg_write(GPIO_DEV, 0x23, 0x49); + /* Set pin native functions */ + ite_reg_write(GPIO_DEV, 0x26, 0x00); + /* Set GPIOS exposed on pin header as GPIO functions */ + ite_reg_write(GPIO_DEV, 0x29, 0xc0); + /* External CLKIN PCICLK */ + ite_reg_write(GPIO_DEV, 0x71, 0x08); + /* Enable 3VSB during Suspend-to-RAM */ + ite_enable_3vsbsw(GPIO_DEV); + /* Delay PWROK2 after 3VSBSW# during resume from Suspend-to-RAM */ + ite_delay_pwrgd3(GPIO_DEV); + ite_kill_watchdog(GPIO_DEV); + ite_enable_serial(UART_DEV, CONFIG_TTYS0_BASE); +} + +void bootblock_mainboard_init(void) +{ + const struct pad_config *pads; + size_t num; + + pads = board_gpio_table(&num); + gpio_configure_pads(pads, num); +} diff --git a/src/mainboard/protectli/vault_cml/cmos.default b/src/mainboard/protectli/vault_cml/cmos.default new file mode 100644 index 0000000000..62715bc6ba --- /dev/null +++ b/src/mainboard/protectli/vault_cml/cmos.default @@ -0,0 +1,3 @@ +boot_option=Fallback +debug_level=Debug +me_state=Enable diff --git a/src/mainboard/protectli/vault_cml/cmos.layout b/src/mainboard/protectli/vault_cml/cmos.layout new file mode 100644 index 0000000000..b2f8e319c8 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/cmos.layout @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-2.0-only + +entries + +0 384 r 0 reserved_memory + +# RTC_BOOT_BYTE (coreboot hardcoded) +384 1 e 2 boot_option +388 4 h 0 reboot_counter +395 3 e 3 debug_level +398 1 e 4 me_state +400 4 h 0 me_state_counter +984 16 h 0 check_sum + + +enumerations + +1 0 Disable +1 1 Enable + +2 0 Fallback +2 1 Normal + +3 0 Emergency +3 1 Alert +3 2 Critical +3 3 Error +3 4 Warning +3 5 Notice +3 6 Info +3 7 Debug +3 8 Spew + +4 0 Enable +4 1 Disable + + +checksums + +checksum 392 983 984 diff --git a/src/mainboard/protectli/vault_cml/data.vbt b/src/mainboard/protectli/vault_cml/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..bdcb34ec46f783d66f8b44ffb25e00b21c7dfb8f GIT binary patch literal 4608 zcmeHKU2GIp6h5=FzjtP~vr{7573<+Auv=)EEwExOakjg~E?wAdw=^Z1bb(!Y-#TSXZ7?API&$iMAx{!ckIJ4)T zd(WKx?m73KxpQV!e@7qYx_71H-JNJt0aQ30=%#idb)+)6!DPHIKG>1YB)aiucm&1+ zH!cGdIIcmAs%kWKc)VB&_eKadjoXL!43&!Olf|)vzkv1P+X#OV4~`l-=P)K%M}v9?W5N-Wu#$ZXH1 z((%4jW(Q_^F`3H6bGgp#9qC<|?ag$hI#PX|Nr}ydkr*C1GCH*Xz&M5z5p1P7noUsC zWlRi@j*N497u0FM!C$RF3h-*+Mexet)WC`0 zltDw#WI!3b08Ri600Csf2^kz)I0xz0c)=YsG*u#a-t23Ju}y>q-{e7-eTvUg8PnT6 zv^xg6245T?Gw&+fj3%}SIdshS$f72<2e zE;oZZ;s)ZC#LdJ{5XXtTiFXnY5)To(C*Zp7D1*nGzRcM&U`ddja6AI#leYe(t@r&- zn@+@RDcI6f*3js>#{)O?uY#cK-Ytd)8X-{FT+&ABvSr$oJfF44eI$*w8nDN@?#t8A zLD#)&*_S{GZIP}&=smF>w$YQwd)ud%nX&8y&`(J`OacqcK5C$d)uc3ymb?${kQKV8 zy}AVR<-d6+WMsgjB7ecd;DYBWcdY)u*)!HmUgWaYRo4SHS>uQ8!xgx*6x&9AWj+jw`H$DgB|b$IFE(7<@7iqHjN2tpE8!4k+r)~v6*<~e+mleMW3q0V@K zZ$sfm0v}soaE8cIM&1N|Kf^bea*DB!7=F!^pBVd%VL(t;3anYcoS+m1HZ0&f)hQUYU)V+tPk`@qc2XnLNy^wVoylc zAQ$%^@YC0A-$hodc(nS7{GQ_3J7yOEg-J<}`H>^n%8Bp=G2&1OCrNq+0BcC?j)&u?zl2Ab#g zf`>ZG2m1P1{JDr|kS{}hUX}xMKF~pG_>kV39n9`NTrBO_eW>_97+3+`u3h^IxVN3B zI{wVPYxQ~Lm`Cek@cLGAGDX$>PI`eAU>)~1{KC^wY!TJPCb{QPi^{>VS$Z(K)@D>c SUhccxu;3g0cG+>)_x=VR3fdn4 literal 0 HcmV?d00001 diff --git a/src/mainboard/protectli/vault_cml/devicetree.cb b/src/mainboard/protectli/vault_cml/devicetree.cb new file mode 100644 index 0000000000..154d81a4a9 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/devicetree.cb @@ -0,0 +1,248 @@ +chip soc/intel/cannonlake + # Enable Enhanced Intel SpeedStep + register "eist_enable" = "1" + + register "cpu_pl2_4_cfg" = "baseline" + + register "gen1_dec" = "0x00fc0201" + register "gen2_dec" = "0x007c0a01" + register "gen3_dec" = "0x000c03e1" + register "gen4_dec" = "0x001c02e1" + + # GPIO + register "PchUnlockGpioPads" = "1" + register "gpe0_dw0" = "0x2" + register "gpe0_dw1" = "0x3" + register "gpe0_dw2" = "0xd" + + # FSP configuration + register "SaGv" = "SaGv_Enabled" + register "ScsEmmcHs400Enabled" = "1" + + # Enable eDP device + register "DdiPortEdp" = "1" # Display Port + + # Enable HPD for DDI ports B/C + register "DdiPortBHpd" = "1" # HDMI + register "DdiPortCHpd" = "1" # USB Type-C + + # Enable DDC for DDI port B + register "DdiPortBDdc" = "1" # HDMI + + register "PchHdaAudioLinkHda" = "1" + + # Misc + register "AcousticNoiseMitigation" = "1" + + # Power + register "PchPmSlpS3MinAssert" = "3" # 50ms + register "PchPmSlpS4MinAssert" = "1" # 1s + register "PchPmSlpSusMinAssert" = "2" # 500ms + register "PchPmSlpAMinAssert" = "4" # 2s + + register "tcc_offset" = "20" # TCC of 80C + + # Enable SERIRQ continuous + register "serirq_mode" = "SERIRQ_CONTINUOUS" + + register "SkipExtGfxScan" = "1" + + register "enable_c6dram" = "1" + + register "SataPortsEnable[0]" = "1" + register "SataPortsEnable[2]" = "1" + + register "PcieRpEnable[4]" = "1" # LAN1 + register "PcieRpEnable[5]" = "1" # LAN2 + register "PcieRpEnable[6]" = "1" # LAN3 + register "PcieRpEnable[7]" = "1" # LAN4 + register "PcieRpEnable[8]" = "1" # LAN5 + register "PcieRpEnable[9]" = "1" # LAN6 + register "PcieRpEnable[11]" = "1" # M.2 WiFi + register "PcieRpEnable[12]" = "1" # M.2 NVMe x4 + + # Enable Advanced Error Reporting for RP 5-10, 12, 13 + register "PcieRpAdvancedErrorReporting[4]" = "1" + register "PcieRpAdvancedErrorReporting[5]" = "1" + register "PcieRpAdvancedErrorReporting[6]" = "1" + register "PcieRpAdvancedErrorReporting[7]" = "1" + register "PcieRpAdvancedErrorReporting[8]" = "1" + register "PcieRpAdvancedErrorReporting[9]" = "1" + register "PcieRpAdvancedErrorReporting[11]" = "1" + register "PcieRpAdvancedErrorReporting[12]" = "1" + + # Enable Latency Tolerance Reporting Mechanism RP 5-10, 12, 13 + register "PcieRpLtrEnable[4]" = "1" + register "PcieRpLtrEnable[5]" = "1" + register "PcieRpLtrEnable[6]" = "1" + register "PcieRpLtrEnable[7]" = "1" + register "PcieRpLtrEnable[8]" = "1" + register "PcieRpLtrEnable[9]" = "1" + register "PcieRpLtrEnable[11]" = "1" + register "PcieRpLtrEnable[12]" = "1" + + register "PcieClkSrcUsage[0]" = "PCIE_CLK_FREE" + register "PcieClkSrcUsage[1]" = "PCIE_CLK_FREE" + register "PcieClkSrcUsage[2]" = "PCIE_CLK_FREE" + register "PcieClkSrcUsage[3]" = "PCIE_CLK_FREE" + register "PcieClkSrcUsage[4]" = "PCIE_CLK_FREE" + register "PcieClkSrcUsage[5]" = "PCIE_CLK_FREE" + + # USB related + register "usb2_wake_enable_bitmap" = "USB_PORT_WAKE_ENABLE(1) | \ + USB_PORT_WAKE_ENABLE(2) | \ + USB_PORT_WAKE_ENABLE(3) | \ + USB_PORT_WAKE_ENABLE(4) | \ + USB_PORT_WAKE_ENABLE(5) | \ + USB_PORT_WAKE_ENABLE(6) | \ + USB_PORT_WAKE_ENABLE(7) | \ + USB_PORT_WAKE_ENABLE(8) | \ + USB_PORT_WAKE_ENABLE(9)" + + register "usb3_wake_enable_bitmap" = "USB_PORT_WAKE_ENABLE(1) | \ + USB_PORT_WAKE_ENABLE(2) | \ + USB_PORT_WAKE_ENABLE(3) | \ + USB_PORT_WAKE_ENABLE(4)" + + register "PchUsb2PhySusPgDisable" = "1" + + register "usb2_ports[0]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[1]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[2]" = "USB2_PORT_TYPE_C(OC_SKIP)" + register "usb2_ports[3]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[4]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[5]" = "USB2_PORT_MID(OC_SKIP)" # M2 WiFi + register "usb2_ports[6]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[7]" = "USB2_PORT_MID(OC_SKIP)" + register "usb2_ports[8]" = "USB2_PORT_MID(OC_SKIP)" # 4G/LTE + register "usb2_ports[9]" = "USB2_PORT_EMPTY" + + register "usb3_ports[0]" = "USB3_PORT_DEFAULT(OC_SKIP)" + register "usb3_ports[1]" = "USB3_PORT_DEFAULT(OC_SKIP)" + register "usb3_ports[2]" = "USB3_PORT_DEFAULT(OC_SKIP)" + register "usb3_ports[3]" = "USB3_PORT_DEFAULT(OC_SKIP)" + register "usb3_ports[4]" = "USB3_PORT_EMPTY" + register "usb3_ports[5]" = "USB3_PORT_EMPTY" + + register "SerialIoDevMode" = "{ + [PchSerialIoIndexI2C0] = PchSerialIoDisabled, + [PchSerialIoIndexI2C1] = PchSerialIoDisabled, + [PchSerialIoIndexI2C2] = PchSerialIoDisabled, + [PchSerialIoIndexI2C3] = PchSerialIoDisabled, + [PchSerialIoIndexI2C4] = PchSerialIoDisabled, + [PchSerialIoIndexI2C5] = PchSerialIoDisabled, + [PchSerialIoIndexSPI0] = PchSerialIoDisabled, + [PchSerialIoIndexSPI1] = PchSerialIoDisabled, + [PchSerialIoIndexSPI2] = PchSerialIoDisabled, + [PchSerialIoIndexUART0] = PchSerialIoDisabled, + [PchSerialIoIndexUART1] = PchSerialIoDisabled, + [PchSerialIoIndexUART2] = PchSerialIoDisabled, + }" + + device cpu_cluster 0 on end + device domain 0 on + device pci 00.0 on end # Host Bridge + device pci 02.0 on end # Integrated Graphics Device + device pci 04.0 on end # SA Thermal device + device pci 08.0 off end # Gaussian Mixture Model + device pci 12.0 on end # Thermal Subsystem + device pci 12.5 off end # UFS SCS + device pci 12.6 off end # GSPI #2 + device pci 14.0 on end # USB xHCI + device pci 14.1 off end # USB xDCI (OTG) + device pci 14.5 off end # SDCard + device pci 15.0 off end # I2C #0 + device pci 15.1 off end # I2C #1 + device pci 15.2 off end # I2C #2 + device pci 15.3 off end # I2C #3 + device pci 16.0 on end # Management Engine Interface 1 + device pci 16.1 off end # Management Engine Interface 2 + device pci 16.2 off end # Management Engine IDE-R + device pci 16.3 off end # Management Engine KT Redirection + device pci 16.4 off end # Management Engine Interface 3 + device pci 16.5 off end # Management Engine Interface 4 + device pci 17.0 on end # SATA + device pci 19.0 off end # I2C #4 + device pci 19.1 off end # I2C #5 + device pci 19.2 off end # UART #2 + device pci 1a.0 on end # eMMC + device pci 1c.0 off end # PCI Express Port 1 + device pci 1c.1 off end # PCI Express Port 2 + device pci 1c.2 off end # PCI Express Port 3 + device pci 1c.3 off end # PCI Express Port 4 + device pci 1c.4 on end # PCI Express Port 5 LAN1 + device pci 1c.5 on end # PCI Express Port 6 LAN2 + device pci 1c.6 on end # PCI Express Port 7 LAN3 + device pci 1c.7 on end # PCI Express Port 8 LAN4 + device pci 1d.0 on end # PCI Express Port 9 LAN5 + device pci 1d.1 on end # PCI Express Port 10 LAN6 + device pci 1d.2 off end # PCI Express Port 11 + device pci 1d.3 on end # PCI Express Port 12 M.2 WiFi + smbios_slot_desc "SlotTypeM2Socket1_SD" "SlotLengthOther" + "M.2/E 2230 (M2_WIFI2)" "SlotDataBusWidth1X" + device pci 1d.4 on # PCI Express Port 13 NVMe + smbios_slot_desc "SlotTypeM2Socket3" "SlotLengthOther" + "M.2/M 2280 (J1)" "SlotDataBusWidth4X" + end + device pci 1d.5 off end # PCI Express Port 14 + device pci 1d.6 off end # PCI Express Port 15 + device pci 1d.7 off end # PCI Express Port 16 + device pci 1e.0 off end # UART #0 + device pci 1e.1 off end # UART #1 + device pci 1e.2 off end # GSPI #0 + device pci 1e.3 off end # GSPI #1 + device pci 1f.0 on + chip superio/ite/it8786e + register "TMPIN1.mode" = "THERMAL_PECI" + register "TMPIN1.offset" = "0x63" + register "TMPIN2.mode" = "THERMAL_MODE_DISABLED" + register "TMPIN3.mode" = "THERMAL_MODE_DISABLED" + register "ec.vin_mask" = "VIN_ALL" + register "ec.smbus_24mhz" = "1" + register "ec.smbus_en" = "1" + # FAN1 is CPU fan (connector on board) + register "FAN1.mode" = "FAN_SMART_AUTOMATIC" + register "FAN1.smart.tmpin" = " 1" + register "FAN1.smart.tmp_off" = "40" + register "FAN1.smart.tmp_start" = "60" + register "FAN1.smart.tmp_full" = "85" + register "FAN1.smart.tmp_delta" = " 2" + register "FAN1.smart.pwm_start" = "20" + register "FAN1.smart.slope" = "24" + register "FAN2.mode" = "FAN_MODE_OFF" + register "FAN3.mode" = "FAN_MODE_OFF" + device pnp 2e.1 on # COM 1 + io 0x60 = 0x3f8 + irq 0x70 = 4 + end + device pnp 2e.2 on # COM 2 + io 0x60 = 0x2f8 + irq 0x70 = 3 + end + device pnp 2e.3 off end # Printer Port + device pnp 2e.4 on # Environment Controller + io 0x60 = 0xa40 + io 0x62 = 0xa30 + irq 0x70 = 9 + end + device pnp 2e.5 off end # Keyboard + device pnp 2e.6 off end # Mouse + device pnp 2e.7 off end # GPIO + device pnp 2e.8 off end # COM 3 + device pnp 2e.9 off end # COM 4 + device pnp 2e.a off end # CIR + device pnp 2e.b off end # COM 5 + device pnp 2e.c off end # COM 6 + end + chip drivers/pc80/tpm + device pnp 0c31.0 on end + end + end # LPC Interface + device pci 1f.1 hidden end # P2SB + device pci 1f.2 hidden end # Power Management Controller + device pci 1f.3 on end # Intel HDA + device pci 1f.4 on end # SMBus + device pci 1f.5 on end # PCH SPI + device pci 1f.6 off end # GbE + end +end diff --git a/src/mainboard/protectli/vault_cml/die.c b/src/mainboard/protectli/vault_cml/die.c new file mode 100644 index 0000000000..52b3338799 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/die.c @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include + +static void beep_and_blink(void) +{ + static uint8_t blink = 0; + static uint8_t beep_count = 0; + + gpio_set(GPP_E8, blink); + /* Beep 12 times at most, constant beeps may be annoying */ + if (beep_count < 12) { + beep(800, 300); + mdelay(200); + beep_count++; + } else { + mdelay(500); + } + + blink ^= 1; +} + +void die_notify(void) +{ + if (ENV_POSTCAR) + return; + + /* Make SATA LED blink and use PC SPKR */ + gpio_output(GPP_E8, 0); + + while (1) { + beep_and_blink(); + beep_and_blink(); + beep_and_blink(); + beep_and_blink(); + delay(2); + } +} diff --git a/src/mainboard/protectli/vault_cml/dsdt.asl b/src/mainboard/protectli/vault_cml/dsdt.asl new file mode 100644 index 0000000000..cb0922a5ea --- /dev/null +++ b/src/mainboard/protectli/vault_cml/dsdt.asl @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +DefinitionBlock( + "dsdt.aml", + "DSDT", + ACPI_DSDT_REV_2, + OEM_ID, + ACPI_TABLE_CREATOR, + 0x20110725 +) +{ + #include + #include + #include + #include + + Device (\_SB.PCI0) + { + #include + #include + } + + #include +} diff --git a/src/mainboard/protectli/vault_cml/gma-mainboard.ads b/src/mainboard/protectli/vault_cml/gma-mainboard.ads new file mode 100644 index 0000000000..5bba15a206 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/gma-mainboard.ads @@ -0,0 +1,17 @@ +-- 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, + DP2, + HDMI1, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/protectli/vault_cml/gpio.c b/src/mainboard/protectli/vault_cml/gpio.c new file mode 100644 index 0000000000..72faae97c0 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/gpio.c @@ -0,0 +1,442 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef CFG_GPIO_H +#define CFG_GPIO_H + +#include "gpio.h" + +/* Pad configuration was generated automatically using intelp2m utility */ +static const struct pad_config gpio_table[] = { + + /* ------- GPIO Community 0 ------- */ + /* ------- GPIO Group GPP_A ------- */ + + /* GPP_A0 - RCIN# */ + PAD_CFG_NF(GPP_A0, NONE, DEEP, NF1), + /* GPP_A1 - LAD0 */ + PAD_CFG_NF(GPP_A1, NATIVE, DEEP, NF1), + /* GPP_A2 - LAD1 */ + PAD_CFG_NF(GPP_A2, NATIVE, DEEP, NF1), + /* GPP_A3 - LAD2 */ + PAD_CFG_NF(GPP_A3, NATIVE, DEEP, NF1), + /* GPP_A4 - LAD3 */ + PAD_CFG_NF(GPP_A4, NATIVE, DEEP, NF1), + /* GPP_A5 - LFRAME# */ + PAD_CFG_NF(GPP_A5, NONE, DEEP, NF1), + /* GPP_A6 - SERIRQ */ + PAD_CFG_NF(GPP_A6, NONE, DEEP, NF1), + /* GPP_A7 - PIRQA# */ + PAD_CFG_NF(GPP_A7, NONE, DEEP, NF1), + /* GPP_A8 - CLKRUN# */ + PAD_CFG_NF(GPP_A8, NONE, PLTRST, NF1), + /* GPP_A9 - CLKOUT_LPC0 */ + PAD_CFG_NF(GPP_A9, DN_20K, DEEP, NF1), + /* GPP_A10 - CLKOUT_LPC1 */ + PAD_CFG_NF(GPP_A10, DN_20K, DEEP, NF1), + /* GPP_A11 - PME# */ + PAD_CFG_NF(GPP_A11, UP_20K, DEEP, NF1), + /* GPP_A12 - GPIO */ + PAD_NC(GPP_A12, NONE), + /* GPP_A13 - GPIO */ + PAD_NC(GPP_A13, NONE), + /* GPP_A14 - GPIO */ + PAD_NC(GPP_A14, NONE), + /* GPP_A15 - GPIO */ + PAD_NC(GPP_A15, NONE), + /* GPP_A16 - GPIO */ + PAD_NC(GPP_A16, NONE), + /* GPP_A17 - GPIO */ + PAD_NC(GPP_A17, NONE), + /* GPP_A18 - GPIO */ + PAD_NC(GPP_A18, NONE), + /* GPP_A19 - GPIO */ + PAD_NC(GPP_A19, NONE), + /* GPP_A20 - GPIO */ + PAD_NC(GPP_A20, NONE), + /* GPP_A21 - GPIO */ + PAD_NC(GPP_A21, NONE), + /* GPP_A22 - GPIO */ + PAD_NC(GPP_A22, NONE), + /* GPP_A23 - GPIO */ + PAD_NC(GPP_A23, NONE), + + /* ------- GPIO Group GPP_B ------- */ + + /* GPP_B0 - CORE_VID0 */ + PAD_NC(GPP_B0, NONE), + /* GPP_B1 - CORE_VID1 */ + PAD_NC(GPP_B1, NONE), + /* GPP_B2 - GPIO */ + PAD_NC(GPP_B2, NONE), + /* GPP_B3 - GPIO */ + PAD_NC(GPP_B3, NONE), + /* GPP_B4 - GPIO */ + PAD_NC(GPP_B4, NONE), + /* GPP_B5 - GPIO */ + PAD_NC(GPP_B5, NONE), + /* GPP_B6 - GPIO */ + PAD_NC(GPP_B6, NONE), + /* GPP_B7 - GPIO */ + PAD_NC(GPP_B7, NONE), + /* GPP_B8 - GPIO */ + PAD_NC(GPP_B8, NONE), + /* GPP_B9 - GPIO */ + PAD_NC(GPP_B9, NONE), + /* GPP_B10 - GPIO */ + PAD_NC(GPP_B10, NONE), + /* GPP_B11 - EXT_PWR_GATE# */ + PAD_NC(GPP_B11, NONE), + /* GPP_B12 - SLP_S0# */ + PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1), + /* GPP_B13 - PLTRST# */ + PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1), + /* GPP_B14 - SPKR */ + PAD_CFG_NF(GPP_B14, DN_20K, PLTRST, NF1), + /* GPP_B15 - GPIO */ + PAD_NC(GPP_B15, NONE), + /* GPP_B16 - GPIO */ + PAD_NC(GPP_B16, NONE), + /* GPP_B17 - GPIO */ + PAD_NC(GPP_B17, NONE), + /* GPP_B18 - GPIO */ + PAD_NC(GPP_B18, NONE), + /* GPP_B19 - GPIO */ + PAD_NC(GPP_B19, NONE), + /* GPP_B20 - GPIO */ + PAD_NC(GPP_B20, NONE), + /* GPP_B21 - GPIO */ + PAD_NC(GPP_B21, NONE), + /* GPP_B22 - GPIO */ + PAD_NC(GPP_B22, NONE), + /* GPP_B23 - GPIO */ + PAD_NC(GPP_B23, NONE), + + /* ------- GPIO Group GPP_G ------- */ + + /* GPP_G0 - GPIO */ + PAD_NC(GPP_G0, NONE), + /* GPP_G1 - GPIO */ + PAD_NC(GPP_G1, NONE), + /* GPP_G2 - GPIO */ + PAD_NC(GPP_G2, NONE), + /* GPP_G3 - GPIO */ + PAD_NC(GPP_G3, NONE), + /* GPP_G4 - GPIO */ + PAD_NC(GPP_G4, NONE), + /* GPP_G5 - SD3_CD# */ + PAD_NC(GPP_G5, NONE), + /* GPP_G6 - GPIO */ + PAD_NC(GPP_G6, NONE), + /* GPP_G7 - SD3_WP */ + PAD_NC(GPP_G7, NONE), + + /* ------- GPIO Group SPI ------- */ + + /* ------- GPIO Community 1 ------- */ + + /* ------- GPIO Group GPP_D ------- */ + + /* GPP_D0 - GPIO */ + PAD_NC(GPP_D0, NONE), + /* GPP_D1 - GPIO */ + PAD_NC(GPP_D1, NONE), + /* GPP_D2 - GPIO */ + PAD_NC(GPP_D2, NONE), + /* GPP_D3 - GPIO */ + PAD_NC(GPP_D3, NONE), + /* GPP_D4 - GPIO */ + PAD_NC(GPP_D4, NONE), + /* GPP_D5 - GPIO */ + PAD_NC(GPP_D5, NONE), + /* GPP_D6 - GPIO */ + PAD_NC(GPP_D6, NONE), + /* GPP_D7 - GPIO */ + PAD_NC(GPP_D7, NONE), + /* GPP_D8 - GPIO */ + PAD_NC(GPP_D8, NONE), + /* GPP_D9 - GPIO */ + PAD_NC(GPP_D9, NONE), + /* GPP_D10 - GPIO */ + PAD_NC(GPP_D10, NONE), + /* GPP_D11 - GPIO */ + PAD_NC(GPP_D11, NONE), + /* GPP_D12 - GPIO */ + PAD_NC(GPP_D12, NONE), + /* GPP_D13 - GPIO */ + PAD_NC(GPP_D13, NONE), + /* GPP_D14 - GPIO */ + PAD_NC(GPP_D14, NONE), + /* GPP_D15 - GPIO */ + PAD_NC(GPP_D15, NONE), + /* GPP_D16 - GPIO */ + PAD_NC(GPP_D16, NONE), + /* GPP_D17 - GPIO */ + PAD_NC(GPP_D17, NONE), + /* GPP_D18 - GPIO */ + PAD_NC(GPP_D18, NONE), + /* GPP_D19 - GPIO */ + PAD_NC(GPP_D19, NONE), + /* GPP_D20 - GPIO */ + PAD_NC(GPP_D20, NONE), + /* GPP_D21 - SPI1_IO2 */ + PAD_NC(GPP_D21, NONE), + /* GPP_D22 - SPI1_IO3 */ + PAD_NC(GPP_D22, NONE), + /* GPP_D23 - GPIO */ + PAD_NC(GPP_D23, NONE), + + /* ------- GPIO Group GPP_F ------- */ + + /* GPP_F0 - GPIO */ + PAD_NC(GPP_F0, NONE), + /* GPP_F1 - GPIO */ + PAD_NC(GPP_F1, NONE), + /* GPP_F2 - GPIO */ + PAD_NC(GPP_F2, NONE), + /* GPP_F3 - GPIO */ + PAD_NC(GPP_F3, NONE), + /* GPP_F4 - GPIO */ + PAD_NC(GPP_F4, NONE), + /* GPP_F5 - GPIO */ + PAD_NC(GPP_F5, NONE), + /* GPP_F6 - GPIO */ + PAD_NC(GPP_F6, NONE), + /* GPP_F7 - GPIO */ + PAD_NC(GPP_F7, NONE), + /* GPP_F8 - GPIO */ + PAD_NC(GPP_F8, NONE), + /* GPP_F9 - GPIO */ + PAD_NC(GPP_F9, NONE), + /* GPP_F10 - GPIO */ + PAD_NC(GPP_F10, NONE), + /* GPP_F11 - EMMC_CMD */ + PAD_CFG_NF(GPP_F11, NONE, DEEP, NF1), + /* GPP_F12 - EMMC_DATA0 */ + PAD_CFG_NF(GPP_F12, NONE, DEEP, NF1), + /* GPP_F13 - EMMC_DATA1 */ + PAD_CFG_NF(GPP_F13, NONE, DEEP, NF1), + /* GPP_F14 - EMMC_DATA2 */ + PAD_CFG_NF(GPP_F14, NONE, DEEP, NF1), + /* GPP_F15 - EMMC_DATA3 */ + PAD_CFG_NF(GPP_F15, NONE, DEEP, NF1), + /* GPP_F16 - EMMC_DATA4 */ + PAD_CFG_NF(GPP_F16, NONE, DEEP, NF1), + /* GPP_F17 - EMMC_DATA5 */ + PAD_CFG_NF(GPP_F17, NONE, DEEP, NF1), + /* GPP_F18 - EMMC_DATA6 */ + PAD_CFG_NF(GPP_F18, NONE, DEEP, NF1), + /* GPP_F19 - EMMC_DATA7 */ + PAD_CFG_NF(GPP_F19, NONE, DEEP, NF1), + /* GPP_F20 - EMMC_RCLK */ + PAD_CFG_NF(GPP_F20, NONE, DEEP, NF1), + /* GPP_F21 - EMMC_CLK */ + PAD_CFG_NF(GPP_F21, NONE, DEEP, NF1), + /* GPP_F22 - EMMC_RESET# */ + PAD_CFG_NF(GPP_F22, NONE, DEEP, NF1), + /* GPP_F23 - GPIO */ + PAD_NC(GPP_F23, NONE), + + /* ------- GPIO Group GPP_H ------- */ + + /* GPP_H0 - GPIO */ + PAD_NC(GPP_H0, NONE), + /* GPP_H1 - GPIO# */ + PAD_NC(GPP_H1, NONE), + /* GPP_H2 - GPIO */ + PAD_NC(GPP_H2, NONE), + /* GPP_H3 - GPIO */ + PAD_NC(GPP_H3, NONE), + /* GPP_H4 - GPIO */ + PAD_NC(GPP_H4, NONE), + /* GPP_H5 - GPIO */ + PAD_NC(GPP_H5, NONE), + /* GPP_H6 - GPIO */ + PAD_NC(GPP_H6, NONE), + /* GPP_H7 - GPIO */ + PAD_NC(GPP_H7, NONE), + /* GPP_H8 - GPIO */ + PAD_NC(GPP_H8, NONE), + /* GPP_H9 - GPIO */ + PAD_NC(GPP_H9, NONE), + /* GPP_H10 - GPIO */ + PAD_NC(GPP_H10, NONE), + /* GPP_H11 - GPIO */ + PAD_NC(GPP_H11, NONE), + /* GPP_H12 - GPIO */ + PAD_NC(GPP_H12, NONE), + /* GPP_H13 - GPIO */ + PAD_NC(GPP_H13, NONE), + /* GPP_H14 - GPIO */ + PAD_NC(GPP_H14, NONE), + /* GPP_H15 - GPIO */ + PAD_NC(GPP_H15, NONE), + /* GPP_H16 - GPIO */ + PAD_NC(GPP_H16, NONE), + /* GPP_H17 - GPIO */ + PAD_NC(GPP_H17, NONE), + /* GPP_H18 - CPU_C10_GATE# */ + PAD_CFG_NF(GPP_H18, NONE, DEEP, NF1), + /* GPP_H19 - GPIO */ + PAD_NC(GPP_H19, NONE), + /* GPP_H20 - GPIO */ + PAD_NC(GPP_H20, NONE), + /* GPP_H21 - GPIO */ + PAD_NC(GPP_H21, NONE), + /* GPP_H22 - GPIO */ + PAD_NC(GPP_H22, NONE), + /* GPP_H23 - GPIO */ + PAD_NC(GPP_H23, NONE), + + /* ------- GPIO Group VGPIO ------- */ + + /* ------- GPIO Community 2 ------- */ + + /* ------- GPIO Group GPD ------- */ + + /* GPD0 - BATLOW# */ + PAD_CFG_NF(GPD0, NONE, RSMRST, NF1), + /* GPD1 - ACPRESENT */ + PAD_CFG_NF(GPD1, NATIVE, RSMRST, NF1), + /* GPD2 - LAN_WAKE# */ + PAD_CFG_NF(GPD2, NATIVE, RSMRST, NF1), + /* GPD3 - PRWBTN# */ + PAD_CFG_NF(GPD3, UP_20K, RSMRST, NF1), + /* GPD4 - SLP_S3# */ + PAD_CFG_NF(GPD4, NONE, RSMRST, NF1), + /* GPD5 - SLP_S4# */ + PAD_CFG_NF(GPD5, NONE, RSMRST, NF1), + /* GPD6 - SLP_A# */ + PAD_NC(GPD6, NONE), + /* GPD7 - GPIO */ + PAD_NC(GPD7, NONE), + /* GPD8 - SUSCLK */ + PAD_NC(GPD8, NONE), + /* GPD9 - GPIO */ + PAD_NC(GPD9, NONE), + /* GPD10 - SLP_S5# */ + PAD_NC(GPD10, NONE), + /* GPD11 - GPIO */ + PAD_NC(GPD11, NONE), + + /* ------- GPIO Community 3 ------- */ + + /* ------- GPIO Group AZA ------- */ + + /* ------- GPIO Group CPU ------- */ + + /* ------- GPIO Community 4 ------- */ + + /* ------- GPIO Group GPP_C ------- */ + + /* GPP_C0 - SMBCLK */ + PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1), + /* GPP_C1 - SMBDATA */ + PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1), + /* GPP_C2 - GPIO */ + PAD_NC(GPP_C2, NONE), + /* GPP_C3 - SML0CLK */ + PAD_CFG_NF(GPP_C3, NONE, DEEP, NF1), + /* GPP_C4 - SML0DATA */ + PAD_CFG_NF(GPP_C4, NONE, DEEP, NF1), + /* GPP_C5 - GPIO */ + PAD_NC(GPP_C5, NONE), + /* GPP_C6 - SML1CLK */ + PAD_CFG_NF(GPP_C6, NONE, DEEP, NF1), + /* GPP_C7 - SML1DATA */ + PAD_CFG_NF(GPP_C7, NONE, DEEP, NF1), + /* GPP_C8 - GPIO */ + PAD_NC(GPP_C8, NONE), + /* GPP_C9 - GPIO */ + PAD_NC(GPP_C9, NONE), + /* GPP_C10 - GPIO */ + PAD_NC(GPP_C10, NONE), + /* GPP_C11 - GPIO */ + PAD_NC(GPP_C11, NONE), + /* GPP_C12 - GPIO */ + PAD_NC(GPP_C12, NONE), + /* GPP_C13 - GPIO */ + PAD_NC(GPP_C13, NONE), + /* GPP_C14 - GPIO */ + PAD_NC(GPP_C14, NONE), + /* GPP_C15 - GPIO */ + PAD_NC(GPP_C15, NONE), + /* GPP_C16 - GPIO */ + PAD_NC(GPP_C16, NONE), + /* GPP_C17 - GPIO */ + PAD_NC(GPP_C17, NONE), + /* GPP_C18 - GPIO */ + PAD_NC(GPP_C18, NONE), + /* GPP_C19 - GPIO */ + PAD_NC(GPP_C19, NONE), + /* GPP_C20 - GPIO */ + PAD_NC(GPP_C20, NONE), + /* GPP_C21 - GPIO */ + PAD_NC(GPP_C21, NONE), + /* GPP_C22 - GPIO */ + PAD_NC(GPP_C22, NONE), + /* GPP_C23 - GPIO */ + PAD_NC(GPP_C23, NONE), + + /* ------- GPIO Group GPP_E ------- */ + + /* GPP_E0 - GPIO */ + PAD_NC(GPP_E0, NONE), + /* GPP_E1 - GPIO */ + PAD_NC(GPP_E1, NONE), + /* GPP_E2 - SATAXPCIE2 */ + PAD_CFG_NF(GPP_E2, UP_20K, PLTRST, NF1), + /* GPP_E3 - GPIO */ + PAD_NC(GPP_E3, NONE), + /* GPP_E4 - GPIO */ + PAD_NC(GPP_E4, NONE), + /* GPP_E5 - GPIO */ + PAD_NC(GPP_E5, NONE), + /* GPP_E6 - GPIO */ + PAD_NC(GPP_E6, NONE), + /* GPP_E7 - GPIO */ + PAD_NC(GPP_E7, NONE), + /* GPP_E8 - SATALED# */ + PAD_CFG_NF(GPP_E8, NONE, PLTRST, NF1), + /* GPP_E9 - RESERVED */ + PAD_NC(GPP_E9, NONE), + /* GPP_E10 - RESERVED */ + PAD_NC(GPP_E10, NONE), + /* GPP_E11 - GPIO */ + PAD_NC(GPP_E11, NONE), + /* GPP_E12 - GPIO */ + PAD_NC(GPP_E12, NONE), + /* GPP_E13 - DDPB_HPD0 */ + PAD_CFG_NF(GPP_E13, NONE, DEEP, NF1), + /* GPP_E14 - DDPC_HPD1 */ + PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1), + /* GPP_E15 - DDPD_HPD2 */ + PAD_NC(GPP_E15, NONE), + /* GPP_E16 - GPIO */ + PAD_NC(GPP_E16, NONE), + /* GPP_E17 - EDP_HPD */ + PAD_CFG_NF(GPP_E17, NONE, DEEP, NF1), + /* GPP_E18 - DPPB_CTRLCLK */ + PAD_CFG_NF(GPP_E18, NONE, DEEP, NF1), + /* GPP_E19 - DPPB_CTRLDATA */ + PAD_CFG_NF(GPP_E19, NONE, DEEP, NF1), + /* GPP_E20 - DPPC_CTRLCLK */ + PAD_NC(GPP_E20, NONE), + /* GPP_E21 - DPPC_CTRLDATA */ + PAD_NC(GPP_E21, NONE), + /* GPP_E22 - DPPD_CTRLCLK */ + PAD_NC(GPP_E22, NONE), + /* GPP_E23 - DPPD_CTRLDATA */ + PAD_NC(GPP_E23, NONE), + + /* ------- GPIO Group JTAG ------- */ + + /* ------- GPIO Group HVMOS ------- */ +}; + +const struct pad_config *board_gpio_table(size_t *num) +{ + *num = ARRAY_SIZE(gpio_table); + return gpio_table; +} + +#endif /* CFG_GPIO_H */ diff --git a/src/mainboard/protectli/vault_cml/gpio.h b/src/mainboard/protectli/vault_cml/gpio.h new file mode 100644 index 0000000000..d98dd82b6d --- /dev/null +++ b/src/mainboard/protectli/vault_cml/gpio.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __BASEBOARD_GPIO_H__ +#define __BASEBOARD_GPIO_H__ + +#include +#include + +const struct pad_config *board_gpio_table(size_t *num); + +#endif /* __BASEBOARD_GPIO_H__ */ diff --git a/src/mainboard/protectli/vault_cml/hda_verb.c b/src/mainboard/protectli/vault_cml/hda_verb.c new file mode 100644 index 0000000000..d0beefc042 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/hda_verb.c @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +const u32 cim_verb_data[] = { + 0x10ec0897, /* Codec Vendor / Device ID: Realtek */ + 0x10ec0000, /* Subsystem ID */ + 15, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(0, 0x10ec0662), + AZALIA_PIN_CFG(0, 0x11, 0x40000000), + AZALIA_PIN_CFG(0, 0x12, 0x411111f0), + AZALIA_PIN_CFG(0, 0x14, 0x04214110), + AZALIA_PIN_CFG(0, 0x15, 0x411111f0), + AZALIA_PIN_CFG(0, 0x16, 0x411111f0), + AZALIA_PIN_CFG(0, 0x17, 0x411111f0), + AZALIA_PIN_CFG(0, 0x18, 0x04a19120), + AZALIA_PIN_CFG(0, 0x19, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1a, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1b, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1c, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1d, 0x40231105), + AZALIA_PIN_CFG(0, 0x1e, 0x411111f0), + AZALIA_PIN_CFG(0, 0x1f, 0x411111f0), + + 0x8086280b, /* Codec Vendor / Device ID: Intel */ + 0x80860101, /* Subsystem ID */ + 2, /* Number of 4 dword sets */ + AZALIA_SUBVENDOR(2, 0x80860101), + AZALIA_PIN_CFG(2, 0x03, 0x18560010), +}; + +const u32 pc_beep_verbs[] = { +}; +AZALIA_ARRAY_SIZES; diff --git a/src/mainboard/protectli/vault_cml/mainboard.c b/src/mainboard/protectli/vault_cml/mainboard.c new file mode 100644 index 0000000000..24f46c9013 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/mainboard.c @@ -0,0 +1,34 @@ + +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include +#include +#include +#include +#include + +const char *smbios_mainboard_product_name(void) +{ + char processor_name[49]; + + fill_processor_name(processor_name); + + if (strstr(processor_name, "i3-10110U") != NULL) + return "VP4630"; + else if (strstr(processor_name, "i5-10210U") != NULL) + return "VP4650"; + else if (strstr(processor_name, "i7-10810U") != NULL) + return "VP4670"; + else + return CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME; +} + +static void mainboard_final(void *unused) +{ + if (CONFIG(BEEP_ON_BOOT)) + beep(1500, 100); +} + +struct chip_operations mainboard_ops = { + .final = mainboard_final, +}; diff --git a/src/mainboard/protectli/vault_cml/romstage.c b/src/mainboard/protectli/vault_cml/romstage.c new file mode 100644 index 0000000000..453566234a --- /dev/null +++ b/src/mainboard/protectli/vault_cml/romstage.c @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include + +static const struct cnl_mb_cfg board_memcfg_cfg = { + /* Access memory info through SMBUS. */ + .spd[0] = { + .read_type = READ_SMBUS, + .spd_spec = {.spd_smbus_address = 0xA0} + }, + .spd[1] = { + .read_type = NOT_EXISTING, + }, + .spd[2] = { + .read_type = READ_SMBUS, + .spd_spec = {.spd_smbus_address = 0xA4} + }, + .spd[3] = { + .read_type = NOT_EXISTING, + }, + + /* Baseboard uses 121, 81 and 100 rcomp resistors */ + .rcomp_resistor = {121, 81, 100}, + + /* + * Baseboard Rcomp target values. + */ + .rcomp_targets = {100, 40, 20, 20, 26}, + + /* Baseboard is an interleaved design */ + .dq_pins_interleaved = 1, + + /* Baseboard is using config 2 for vref_ca */ + .vref_ca_config = 2, + + /* Enable Early Command Training */ + .ect = 1, +}; + +void mainboard_memory_init_params(FSPM_UPD *memupd) +{ + cannonlake_memcfg_init(&memupd->FspmConfig, &board_memcfg_cfg); +} diff --git a/src/mainboard/protectli/vault_cml/vboot-rwa.fmd b/src/mainboard/protectli/vault_cml/vboot-rwa.fmd new file mode 100644 index 0000000000..b5c233f383 --- /dev/null +++ b/src/mainboard/protectli/vault_cml/vboot-rwa.fmd @@ -0,0 +1,40 @@ +FLASH@0xff000000 0x1000000 { + SI_ALL 6M { + 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 + + RW_SECTION_A { + VBLOCK_A 0x2000 + FW_MAIN_A(CBFS) + RW_FWID_A 0x40 + } + + # T/B = 0 + # BP3 = 0 BP2 = 1 BP1 = 1 BP0 = 1 + WP_RO@0xC00000 0x400000 { + RO_VPD(PRESERVE)@0x0 0x4000 + RO_SECTION@0x4000 0x3fc000 { + FMAP@0x0 0x800 + RO_FRID@0x800 0x40 + RO_FRID_PAD@0x840 0x7c0 + GBB@0x1000 0x3000 + COREBOOT(CBFS)@0x4000 0x3f8000 + } + } +}